BDD in .NET

6,050 views
5,882 views

Published on

主題:BDD in .NET - TDD 在實務上的最後一塊拼圖

摘要描述:
TDD 的概念不難,難的是在各個角色之間如何達成共識。
TDD 的技巧不難,難的是怎麼寫出既符合使用者需求,又可以幫助開發人員 TDD 的測試案例。

這次將介紹在實務開發流程中,如何透過 BDD 來滿足使用者、測試人員與開發人員,如何透過 BDD 來產生既符合使用者需求,且大家都看的懂,還可以轉換成測試程式的測試案例。

BDD in .NET

  1. 1. BDD in .NET - TDD 在實務上的最後一塊拼圖 Joey Chen @ 2013 WebConf 2013/01/121
  2. 2. Joey Chen (91)  Microsoft ASP.NET MVP 2010~2013  C#  Agile, Scrum, XP  Testing2
  3. 3. 您試過嗎? •Unit Test •TDD •Scrum3
  4. 4. 常見 TDD 學習過程 Refactoring • 更好維護 Unit Testing • 學寫測試 Test-Driven • 先寫測試4
  5. 5. 測試程式誰不會寫5
  6. 6. 測試程式誰不會寫6
  7. 7. 正常一點的測試程式 怎麼來的7
  8. 8. 正常一點的測試程式 怎麼來的8
  9. 9. 程式不是寫給自己爽的 要能滿足使用者需求9
  10. 10. 第一關 測試案例怎麼來10
  11. 11. User Requirement User Story Acceptance Test Cases Integration Test Cases Unit Test Cases11
  12. 12. 1. User Requirement 網路ATM登入驗證12
  13. 13. 2. User Story 我們需要一個登入驗證身份的功能: In order to 驗證身份,避免非法使用者使用系統 -Why As a 線上使用者 -Who I want to 驗證使用者身份是否合法 -What13
  14. 14. 3. Acceptance Test Cases • 提款卡ID為1234,密碼為91,驗證 成功,導到index頁面 • 提款卡ID為1234,密碼為1234,驗 證失敗,顯示密碼錯誤14
  15. 15. 4. Integration Test Cases • 呼叫Authentication的Verify方法,傳入id為 1234,password為91,回傳true • 呼叫Authentication的Verify方法,傳入id為 1234,password為1234,回傳false15
  16. 16. 5. Unit Test Cases • 呼叫Authentication的Verify方法 • 傳入id為1234,password為91 • 模擬ICardDao回傳abc • 模擬IHash回傳abc • 回傳true16
  17. 17. 另一個問題17
  18. 18. User Requirement User Story PO, user, QA Acceptance Test Cases IntegrationDeveloper Test Cases Unit Test Cases18
  19. 19. 19
  20. 20. 程式不是給人看的20
  21. 21. 程式不是給人看的 PO ?! user QA21
  22. 22. • RD 提款卡ID為1234,密碼為91,驗證成功,導到 index頁面 • 提款卡ID為1234,密碼為1234,驗證失敗,顯 示密碼錯誤 • 呼叫Authentication的Verify方法,傳入id為1234, password為91,回傳true • 呼叫Authentication的Verify方法,傳入id為1234, password為1234,回傳false22
  23. 23. • RD 提款卡ID為1234,密碼為91,驗證成功,導到 index頁面 • 提款卡ID為1234,密碼為1234,驗證失敗,顯 示密碼錯誤 • 呼叫Authentication的Verify方法,傳入id為1234, password為91,回傳true 呼叫Authentication的Verify方法,傳入id為1234,用說的比較快! • password為1234,回傳false23
  24. 24. 第二關 溝通基準如何一致,降低轉換成本24
  25. 25. Behavior-Driven Development Domain Specific Language25
  26. 26. What is BDD • 從行為面用人話描述系統功能 • 從人話自動產生程式執行流程 • User Story與測試程式的橋樑26
  27. 27. Why BDD • 都用人話溝通 • 人話可轉換成程式 • 滿足使用者需求27
  28. 28. 哪個好懂28
  29. 29. 測試程式 只有現在的自己看得懂29
  30. 30. Scenario30
  31. 31. How BDD Works • C# • SpecFlow31
  32. 32. User Story Feature32
  33. 33. User Story Acceptance Test Cases33
  34. 34. Feature Scenarios34
  35. 35. Acceptance Test Case Scenario35
  36. 36. Scenario Given When Then Arrange Act Assert36
  37. 37. Feature Scenario Test Code37
  38. 38. 開發流程38
  39. 39. 39
  40. 40. 40
  41. 41. 41
  42. 42. 42
  43. 43. 43
  44. 44. 44
  45. 45. 45
  46. 46. 46
  47. 47. 47
  48. 48. 48
  49. 49. 49
  50. 50. 50
  51. 51. V - model by BDD51 From: http://arithmandar.blogspot.tw/2009/08/v-model.html
  52. 52. ATDD, BDD, TDD52
  53. 53. ATDD, BDD, TDD Top-Down ! No Bottom-Up !53
  54. 54. 滿足使用者需求 Production User Testing code Test case User story code requirement54
  55. 55. Demo •Acceptance Testing: Selenium WebDriver •Unit Testing: MS Test •Mock/Stub: Rhino.Mocks55
  56. 56. 主要步驟  由user story撰寫feature  由acceptance test cases撰寫scenarios  建立雛形網站  錄製selenium腳本  將selenium腳本匯出成C#程式  將selenium的C#程式放到scenario的steps中  完成acceptance testing code – 紅燈  撰寫production code,通過測試 – 綠燈  重構56
  57. 57. 結論 • 用人話來說明需求 • 用人話來描述測試案例 • 用人話來寫程式57
  58. 58. 目標明確58
  59. 59. 貫穿全場59
  60. 60. 保持節奏60
  61. 61. 感想 RD 用說的真的比較快!61
  62. 62. 記住! 程式碼不是寫給自己爽的 要滿足使用者需求62
  63. 63. 補充 – SpecFlow 特色 •依據不同 testing framework 產生測試程式框架 •可於 Scenario 上偵錯 •支援 table layout 與取得強型別物件 •支援註冊型別,取得物件 ( IoC framework ) •支援 attribute hook event ( AOP )63
  64. 64. 參考資料  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 官網64
  65. 65. 65
  66. 66. 問題與討論 Thanks for your listening66

×