Slide 1

Slide 1 text

LINE購物 App x ATDD

Slide 2

Slide 2 text

Aaron Chu Technical Project Lead @LINE 2018 年份 : Android Developer 2020 年份 : Flutter Developer 2023 年份 : Technical Project Lead LinkedIn :

Slide 3

Slide 3 text

01 02 03 04 問題陳述 ATDD 實踐 總結 LINE購物 App 介紹 05 Q&A CONTENT

Slide 4

Slide 4 text

01 LINE購物 App 介紹

Slide 5

Slide 5 text

LINE購物 App 搜尋建議頁 (Native) 首頁 (Native) 搜尋結果頁 (Native) 廠商頁 (WebView)

Slide 6

Slide 6 text

Clean Architecture 【TECHPUSLE 2023】How to develop merchant browsing history feature in LINE SHOPPING App using Clean Architecture | Ricky 引用自 Uncle Bob 的文章:The Clean Architecture

Slide 7

Slide 7 text

Screaming Architecture Package by layer feature

Slide 8

Slide 8 text

02 問題陳述

Slide 9

Slide 9 text

情境一 main v1.0 v1.1 v1.2 Long-lived Feature Branch Sprint 2 Merge Conflicts Sprint 3 (2 weeks) (2 weeks)

Slide 10

Slide 10 text

情境二 main v1.0 v1.1 v1.2 UI Logic API Unit Tests 開發人員A:Code Freeze 要來不及了,功能先出之後再補 Unit Tests 好了。 開發人員B:真是天才,我怎麼沒想過。我覺得你的想法特別好,功能先出吧! Unit Tests:喂喂喂,你們真的還會記得我嗎?

Slide 11

Slide 11 text

問題與影響 Long-lived Feature Branches • 合併時出現大量的衝突 • 解決衝突耗費且易出錯 遺漏撰寫 Unit Tests • 難以保證程式碼品質 • 難以及時發現錯誤 • 降低程式碼的可維護性

Slide 12

Slide 12 text

問題成因 Long-lived Feature Branches • 跨 sprint 的功能開發,功能完成才 merge 遺漏撰寫 Unit Tests • 優先開發功能,接著才撰寫 unit tests

Slide 13

Slide 13 text

解決方向 Long-lived Feature Branches • 利用驗收標準 (Acceptance Criteria, AC) 將 user story 拆解更小且可驗證的 subtasks • 使用 feature toggle 保護 merge 回 main 的 PRs 遺漏撰寫 Unit Tests • 功能的 PRs 一定要包含 unit tests • Test-Driven Development (TDD)

Slide 14

Slide 14 text

ATDD (驗收測試驅動開發)

Slide 15

Slide 15 text

03 ATDD 實踐

Slide 16

Slide 16 text

ATDD 簡介 • 驗收測試驅動開發(Acceptance Test-Driven Development,ATDD)是一種基於需求 提出者(產品負責人、業務分析師、客戶代表等)、開發人員和測試人員之間溝通的開發 方法。 • ATDD 與測試驅動開發(TDD)有密切的關係。它包含了驗收測試(Acceptance Tests),但強調在開發人員開始撰寫程式碼之前撰寫驗收測試。

Slide 17

Slide 17 text

驗收測試 驗收測試是從使用者的角度來看的——也就是系統的外部視角,確保產品符合業務需求和用 戶期望,這樣才能保證最終產品能夠滿足實際使用中的要求。 驗收測試通常遵循以下形式: Given (前提條件) When (操作) Then (預期結果) • 什麼是驗收測試? • 驗收測試長什麼樣子?

Slide 18

Slide 18 text

使用驗收測試(前) • 根據實作細節撰寫,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

Slide 19

Slide 19 text

使用驗收測試(後) 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 的描述簡單易懂好維護

Slide 20

Slide 20 text

撰寫驗收測試

Slide 21

Slide 21 text

AC-7 利用驗收標準(AC)化繁為簡 AC-1 AC-2 AC-3 AC-4 AC-5 AC-6

Slide 22

Slide 22 text

功能垂直拆解 • 將 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 … …

Slide 23

Slide 23 text

LINE購物好康報通知 AC-1 驗收測試實際案例 Given When Then

Slide 24

Slide 24 text

驗收測試涵蓋多 層架構 • UI: Widget • Presenters: BLoC • Use Cases: • UseCase • IRepository • Entities: DomainModel • Gateways: • RepositoryImlp • IRemoteDataSource • ILocalDataSource • DB/External Interfaces : • LocalDataSourceImpl • RemoteDataSourceImpl 引用自 Uncle Bob 的文章:The Clean Architecture

Slide 25

Slide 25 text

引用自 Martin Fowler 的文章:Unit Test Sociable Tests v.s. Solitary Tests Detroit (Classic) Style London (Mockist) Style

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Sociable Tests x Solitary Tests

Slide 28

Slide 28 text

04 總結

Slide 29

Slide 29 text

ATDD Long-lived Feature Branches 遺漏撰寫 Unit Tests 實踐 ATDD 主要解決的問題

Slide 30

Slide 30 text

情境一 main v1.0 v1.1 v1.2 Long-lived Feature Branch Merge Conflicts Long-lived Feature Branch

Slide 31

Slide 31 text

情境二 main v1.0 v1.1 v1.2 UI Logic API Unit Tests 遺漏撰寫 Unit Tests

Slide 32

Slide 32 text

實踐 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

Slide 33

Slide 33 text

ATDD 明確的開發目標和流程一致性 可操作且人性化的測試敘述 縱向測試覆蓋和驗收標準對應性 減少測試窮舉 實踐 ATDD 的優點

Slide 34

Slide 34 text

ATDD 功能拆解的改變 開發流程的改變 測試撰寫的改變 實踐 ATDD 的挑戰

Slide 35

Slide 35 text

ATDD 產品規劃人員 開發人員 測試人員 完善 ATDD 的下一步 產品規劃人員 測試人員 產品規劃人員、開發人員和測試人員一同討論驗收標準

Slide 36

Slide 36 text

05 Q&A

Slide 37

Slide 37 text

No content