bdd in .net - tdd...

58
Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD in .NET - TDD 在實務上的最後一塊拼圖 1

Upload: others

Post on 15-Mar-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Joey Chen(91)

2013/05/04

@微軟實戰課程日

BDD in .NET -

TDD 在實務上的最後一塊拼圖

1

Page 2: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Joey Chen (91)

Microsoft ASP.NET MVP 2010~2013

Microsoft 官方論壇ASP.NET版主

C#

Agile, Scrum, XP

Testing

2

Page 3: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

您試過嗎?

•Unit Test

•TDD

•Scrum

3

Page 4: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

4

Page 5: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

常見 TDD 學習過程

Refactoring • 更好維護

Unit Testing • 學寫測試

Test-Driven • 先寫測試

5

Page 6: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

測試程式誰不會寫

6

Page 7: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

正常一點的測試程式

怎麼來的

7

Page 8: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

程式不是寫給自己爽的

要能滿足使用者需求

8

Page 9: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

第一關

測試案例怎麼來

9

Page 10: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

User Requirement

User Story

Acceptance Test Cases

Integration Test Cases

Unit Test Cases

10

Page 11: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

舉例

11

Page 12: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

1. User Requirement

網路ATM登入驗證

12

Page 13: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

2. User Story我們需要一個登入驗證身份的功能:

In order to驗證身份,避免非法使用者使用系統As a線上使用者I want to驗證使用者身份是否合法

-Why

-Who

-What

13

Page 14: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

3. Acceptance Test Cases

• 提款卡ID為1234,密碼為91,驗證

成功,導到index頁面

• 提款卡ID為1234,密碼為1234,驗

證失敗,顯示密碼錯誤

14

Page 15: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

4. Integration Test Cases

• 呼叫Authentication的Verify方法,傳入id為

1234,password為91,回傳true

• 呼叫Authentication的Verify方法,傳入id為

1234,password為1234,回傳false

15

Page 16: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

5. Unit Test Cases

• 呼叫Authentication的Verify方法

• 傳入id為1234,password為91

• 模擬ICardDao回傳abc

• 模擬IHash回傳abc

• 回傳true

16

Page 17: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

另一個問題

17

Page 18: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

User Requirement

User Story

Acceptance Test Cases

Integration Test Cases

Unit Test Cases

PO, user, QA

Developer

18

Page 19: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

19

Page 20: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

程式不是給人看的

?!PO

QAuser

20

Page 21: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

• 提款卡ID為1234,密碼為91,驗證成功,導到index頁面

• 提款卡ID為1234,密碼為1234,驗證失敗,顯示密碼錯誤

• 呼叫Authentication的Verify方法,傳入id為1234,

password為91,回傳true

• 呼叫Authentication的Verify方法,傳入id為1234,

password為1234,回傳false用說的比較快!

RD

21

Page 22: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

第二關

溝通基準如何一致,降低轉換成本

22

Page 23: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Domain Specific Language

Behavior-Driven Development

23

Page 24: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

What is BDD

• 從行為面用人話描述系統功能

• 從人話自動產生程式執行流程

• User Story與測試程式的橋樑

24

Page 25: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Why BDD

• 都用人話溝通

• 人話可轉換成程式

• 滿足使用者需求

25

Page 26: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

哪個好懂

26

Page 27: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

測試程式

只有現在的自己看得懂

27

Page 28: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Scenario

28

Page 29: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

• C#

• SpecFlow

How BDD Works

29

Page 30: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

User Story

Feature30

Page 31: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

User Story

Acceptance Test Cases

31

Page 32: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Feature

Scenarios32

Page 33: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Acceptance Test Case

Scenario

33

Page 34: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Scenario

Given When Then

Arrange Act Assert

34

Page 35: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Feature

Scenario

Test Code

35

Page 36: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

開發流程

36

Page 37: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Acceptance Test

Cases

User

StoryFeature

Scenario

List

Given When Then

Arrange Act Assert

Production

Code

37

Page 38: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

From: http://arithmandar.blogspot.tw/2009/08/v-model.html

V - model by BDD

38

Page 39: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

ATDD, BDD, TDD

No Bottom-Up !

Top-Down !

39

Page 40: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Production code

Testing code Test case User storyUser

requirement

滿足使用者需求

40

Page 41: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

Demo

•Acceptance Testing: Selenium WebDriver

•Unit Testing: MS Test

•Mock/Stub: Rhino.Mocks

41

Page 42: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

主要步驟 由user story撰寫feature

由acceptance test cases撰寫scenarios

建立雛形網站

錄製selenium腳本

將selenium腳本匯出成C#程式

將selenium的C#程式放到scenario的steps中

完成acceptance testing code –紅燈

撰寫production code,通過測試 –綠燈

重構

42

Page 43: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

成果 – Order Transfer Revamp

•Code coverage: 88.1%

• BLL: 96.21%

• DAL: 93.6%

•Test cases: 345

•程式行數: 11,034

43

Page 44: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

品質 – Order Transfer Revamp

•最大複雜度: 9

•最大深度: 5

•靜態程式碼分析結果

•Beta ticket: 3 ( 1個 bug , 2個 enhancement )• 與 QE 使用 Selenium test cases 合作

• 平均修復 ticket 時間不到 30 分鐘

44

Page 45: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

•將 Feature 轉成 HTML, Word 呈現

Demo

45

Page 46: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

• 用人話來說明需求

• 用人話來描述測試案例

• 用人話來寫程式

結論

46

Page 47: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

目標明確

47

Page 48: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

貫穿全場

48

Page 49: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

保持節奏

49

Page 50: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

感想

用說的真的比較快!

RD

50

Page 51: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

測試不只是測試

51

Page 52: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

記住!

程式碼不是寫給自己爽的

要滿足使用者需求

52

Page 53: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

補充 – SpecFlow 特色

•依據不同 testing framework 產生測試程式框架

•可於 Scenario 上偵錯

•支援 table layout 與取得強型別物件

•支援註冊型別,取得物件 ( IoC framework )

•支援 attribute hook event ( AOP )

53

Page 54: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

成功的

軟體開發

Scrum

Agile

mindsetXP infra

Engineer skill

54

Page 55: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

參考資料 The Art of Unit Testing: With Examples in .Net

Test Driven: TDD and Acceptance TDD for Java Developers

Growing Object-Oriented Software, Guided by Tests

Emergent Design: The Evolutionary Nature of Professional Software

Development

Brownfield Application Development in .Net

Scrum and XP from the Trenches (Enterprise Software Development)

30 天快速上手TDD (by 91)

SpecFlow 官網

55

Page 56: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

相關資源

Free Trial Link: http://www.windowsazure.com/en-us/pricing/free-trial/?WT.mc_id=WWE001_1032548834

MSDN Subscription Offer: https://www.windowsazure.com/en-us/pricing/member-offers/msdn-benefits/?WT.mc_id=WWE001_1032548834

BizSpark Offer: https://www.windowsazure.com/en-us/pricing/member-offers/bizspark-benefits/?WT.mc_id=WWE001_1032548834

MPN Offer: https://www.windowsazure.com/en-us/offers/ms-azr-0002p/?WT.mc_id=WWE001_1032548834

雲端資源下載

Page 57: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

57

提醒

上滿4堂課 交回問卷 問卷禮 + 抽獎

Page 58: BDD in .NET - TDD 在實務上的最後一塊拼圖download.microsoft.com/download/C/6/0/C60E2BD0-8A7C-479F... · 2018-10-16 · Joey Chen(91) 2013/05/04 @微軟實戰課程日 BDD

問題與討論

Thanks for your listening

58