BDD in .NET - TDD...

Post on 15-Mar-2020

0 views 0 download

transcript

Joey Chen(91)

2013/05/04

@微軟實戰課程日

BDD in .NET -

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

1

Joey Chen (91)

Microsoft ASP.NET MVP 2010~2013

Microsoft 官方論壇ASP.NET版主

C#

Agile, Scrum, XP

Testing

2

您試過嗎?

•Unit Test

•TDD

•Scrum

3

4

常見 TDD 學習過程

Refactoring • 更好維護

Unit Testing • 學寫測試

Test-Driven • 先寫測試

5

測試程式誰不會寫

6

正常一點的測試程式

怎麼來的

7

程式不是寫給自己爽的

要能滿足使用者需求

8

第一關

測試案例怎麼來

9

User Requirement

User Story

Acceptance Test Cases

Integration Test Cases

Unit Test Cases

10

舉例

11

1. User Requirement

網路ATM登入驗證

12

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

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

-Why

-Who

-What

13

3. Acceptance Test Cases

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

成功,導到index頁面

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

證失敗,顯示密碼錯誤

14

4. Integration Test Cases

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

1234,password為91,回傳true

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

1234,password為1234,回傳false

15

5. Unit Test Cases

• 呼叫Authentication的Verify方法

• 傳入id為1234,password為91

• 模擬ICardDao回傳abc

• 模擬IHash回傳abc

• 回傳true

16

另一個問題

17

User Requirement

User Story

Acceptance Test Cases

Integration Test Cases

Unit Test Cases

PO, user, QA

Developer

18

19

程式不是給人看的

?!PO

QAuser

20

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

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

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

password為91,回傳true

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

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

RD

21

第二關

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

22

Domain Specific Language

Behavior-Driven Development

23

What is BDD

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

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

• User Story與測試程式的橋樑

24

Why BDD

• 都用人話溝通

• 人話可轉換成程式

• 滿足使用者需求

25

哪個好懂

26

測試程式

只有現在的自己看得懂

27

Scenario

28

• C#

• SpecFlow

How BDD Works

29

User Story

Feature30

User Story

Acceptance Test Cases

31

Feature

Scenarios32

Acceptance Test Case

Scenario

33

Scenario

Given When Then

Arrange Act Assert

34

Feature

Scenario

Test Code

35

開發流程

36

Acceptance Test

Cases

User

StoryFeature

Scenario

List

Given When Then

Arrange Act Assert

Production

Code

37

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

V - model by BDD

38

ATDD, BDD, TDD

No Bottom-Up !

Top-Down !

39

Production code

Testing code Test case User storyUser

requirement

滿足使用者需求

40

Demo

•Acceptance Testing: Selenium WebDriver

•Unit Testing: MS Test

•Mock/Stub: Rhino.Mocks

41

主要步驟 由user story撰寫feature

由acceptance test cases撰寫scenarios

建立雛形網站

錄製selenium腳本

將selenium腳本匯出成C#程式

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

完成acceptance testing code –紅燈

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

重構

42

成果 – Order Transfer Revamp

•Code coverage: 88.1%

• BLL: 96.21%

• DAL: 93.6%

•Test cases: 345

•程式行數: 11,034

43

品質 – Order Transfer Revamp

•最大複雜度: 9

•最大深度: 5

•靜態程式碼分析結果

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

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

44

•將 Feature 轉成 HTML, Word 呈現

Demo

45

• 用人話來說明需求

• 用人話來描述測試案例

• 用人話來寫程式

結論

46

目標明確

47

貫穿全場

48

保持節奏

49

感想

用說的真的比較快!

RD

50

測試不只是測試

51

記住!

程式碼不是寫給自己爽的

要滿足使用者需求

52

補充 – SpecFlow 特色

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

•可於 Scenario 上偵錯

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

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

•支援 attribute hook event ( AOP )

53

成功的

軟體開發

Scrum

Agile

mindsetXP infra

Engineer skill

54

參考資料 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

相關資源

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

雲端資源下載

57

提醒

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

問題與討論

Thanks for your listening

58