Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LINE購物 App x ATDD: 利用 ATDD 改善開發流程

LINE購物 App x ATDD: 利用 ATDD 改善開發流程

Event: Flutter Formasa 2024
Speaker: Aaron Chu

LINE Developers Taiwan

September 11, 2024
Tweet

More Decks by LINE Developers Taiwan

Other Decks in Technology

Transcript

  1. Aaron Chu Technical Project Lead @LINE 2018 年份 : Android

    Developer 2020 年份 : Flutter Developer 2023 年份 : Technical Project Lead LinkedIn :
  2. Clean Architecture 【TECHPUSLE 2023】How to develop merchant browsing history feature

    in LINE SHOPPING App using Clean Architecture | Ricky 引用自 Uncle Bob 的文章:The Clean Architecture
  3. 情境一 main v1.0 v1.1 v1.2 Long-lived Feature Branch Sprint 2

    Merge Conflicts Sprint 3 (2 weeks) (2 weeks)
  4. 情境二 main v1.0 v1.1 v1.2 UI Logic API Unit Tests

    開發人員A:Code Freeze 要來不及了,功能先出之後再補 Unit Tests 好了。 開發人員B:真是天才,我怎麼沒想過。我覺得你的想法特別好,功能先出吧! Unit Tests:喂喂喂,你們真的還會記得我嗎?
  5. 問題與影響 Long-lived Feature Branches • 合併時出現大量的衝突 • 解決衝突耗費且易出錯 遺漏撰寫 Unit

    Tests • 難以保證程式碼品質 • 難以及時發現錯誤 • 降低程式碼的可維護性
  6. 解決方向 Long-lived Feature Branches • 利用驗收標準 (Acceptance Criteria, AC) 將

    user story 拆解更小且可驗證的 subtasks • 使用 feature toggle 保護 merge 回 main 的 PRs 遺漏撰寫 Unit Tests • 功能的 PRs 一定要包含 unit tests • Test-Driven Development (TDD)
  7. ATDD 簡介 • 驗收測試驅動開發(Acceptance Test-Driven Development,ATDD)是一種基於需求 提出者(產品負責人、業務分析師、客戶代表等)、開發人員和測試人員之間溝通的開發 方法。 • ATDD

    與測試驅動開發(TDD)有密切的關係。它包含了驗收測試(Acceptance Tests),但強調在開發人員開始撰寫程式碼之前撰寫驗收測試。
  8. 使用驗收測試(前) • 根據實作細節撰寫,unit tests 的描述難以理解和維護 Given [AuthenticationBloc] returns has login

    And [GetUserFavoriteUseCase] returns valid data When add [FavoriteItemsLoadEvent] Then emit [FavoriteItemsUpdateState.success] And [favoriteItems] should have valid data
  9. 使用驗收測試(後) Given a user has logged in And has favorite

    products When the user opens the My Favorites page Then the user should see their favorite products on the page • 根據使用者的角度撰寫,unit tests 的描述簡單易懂好維護
  10. 功能垂直拆解 • 將 User Story 依照驗收標準(AC)來垂直拆解,而不是依照層次來水平拆解。 User Story Data Layer

    Domain Layer UI Layer Unit Tests Subtask-1 Subtask-2 Subtask-3 Subtask-4 User Story Data Layer Domain Layer UI Layer Unit Tests Data Layer Domain Layer UI Layer Unit Tests Data Layer Domain Layer UI Layer Unit Tests AC-2 AC-1 AC-3 … …
  11. 驗收測試涵蓋多 層架構 • UI: Widget • Presenters: BLoC • Use

    Cases: • UseCase • IRepository • Entities: DomainModel • Gateways: • RepositoryImlp • IRemoteDataSource • ILocalDataSource • DB/External Interfaces : • LocalDataSourceImpl • RemoteDataSourceImpl 引用自 Uncle Bob 的文章:The Clean Architecture
  12. Sociable Tests x Solitary Tests • UI • Presenters •

    Use Cases • Entities • Gateways • DB/External Interfaces • UI • Presenters • Use Cases • Entities • Gateways • DB/External Interfaces AS-IS TO-BE
  13. 實踐 ATDD main v1.0 v1.1 v1.2 AC1 AC2 AC3 Data

    Layer Domain Layer UI Layer Unit Tests Data Layer Domain Layer UI Layer Unit Tests Data Layer Domain Layer UI Layer Unit Tests AC-2 AC-1 AC-3