SlideShare une entreprise Scribd logo
1  sur  66
Télécharger pour lire hors ligne
BDD in .NET -
    TDD 在實務上的最後一塊拼圖
            Joey Chen @ 2013 WebConf
                          2013/01/12




1
Joey Chen (91)
     Microsoft ASP.NET MVP 2010~2013
     C#
     Agile, Scrum, XP
     Testing




2
您試過嗎?

    •Unit Test
    •TDD
    •Scrum



3
常見 TDD 學習過程

      Refactoring   • 更好維護




                    Unit Testing   • 學寫測試




                                   Test-Driven   • 先寫測試



4
測試程式誰不會寫




5
測試程式誰不會寫




6
正常一點的測試程式




           怎麼來的

7
正常一點的測試程式




           怎麼來的

8
程式不是寫給自己爽的


    要能滿足使用者需求

9
第一關
     測試案例怎麼來




10
User
     Requirement



                   User Story



                                Acceptance
                                Test Cases


                                             Integration
                                              Test Cases


                                                           Unit Test
                                                            Cases
11
1. User Requirement
     網路ATM登入驗證




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

     In order to 驗證身份,避免非法使用者使用系統 -Why
     As a 線上使用者 -Who
     I want to 驗證使用者身份是否合法 -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                              PO, user, QA


                                 Acceptance
                                 Test Cases


                                              Integration
Developer                                      Test Cases


                                                            Unit Test
                                                             Cases
18
19
程式不是給人看的




20
程式不是給人看的


          PO
                ?!
                user
           QA


21
•
                 RD
         提款卡ID為1234,密碼為91,驗證成功,導到
         index頁面
     •   提款卡ID為1234,密碼為1234,驗證失敗,顯
         示密碼錯誤
     •   呼叫Authentication的Verify方法,傳入id為1234,
         password為91,回傳true
     •   呼叫Authentication的Verify方法,傳入id為1234,
         password為1234,回傳false


22
•
                 RD
         提款卡ID為1234,密碼為91,驗證成功,導到
         index頁面
     •   提款卡ID為1234,密碼為1234,驗證失敗,顯
         示密碼錯誤
     •   呼叫Authentication的Verify方法,傳入id為1234,
         password為91,回傳true
         呼叫Authentication的Verify方法,傳入id為1234,

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


23
第二關
     溝通基準如何一致,降低轉換成本




24
Behavior-Driven Development

           Domain Specific Language




25
What is BDD

     •   從行為面用人話描述系統功能
     •   從人話自動產生程式執行流程
     •   User Story與測試程式的橋樑

26
Why BDD

     •   都用人話溝通
     •   人話可轉換成程式
     •   滿足使用者需求

27
哪個好懂




28
測試程式




     只有現在的自己看得懂

29
Scenario




30
How BDD Works
     • C#
     • SpecFlow




31
User Story

      Feature
32
User Story
     Acceptance Test Cases

33
Feature

     Scenarios
34
Acceptance Test Case


         Scenario
35
Scenario
     Given     When   Then



     Arrange    Act   Assert

36
Feature




                 Scenario




     Test Code




37
開發流程




38
39
40
41
42
43
44
45
46
47
48
49
50
V - model                                             by BDD




51
        From: http://arithmandar.blogspot.tw/2009/08/v-model.html
ATDD, BDD, TDD




52
ATDD, BDD, TDD




      Top-Down !
     No Bottom-Up !
53
滿足使用者需求



     Production                                              User
                  Testing code   Test case   User story
        code                                              requirement




54
Demo

     •Acceptance Testing: Selenium WebDriver

     •Unit Testing: MS Test

     •Mock/Stub: Rhino.Mocks




55
主要步驟
      由user story撰寫feature
      由acceptance test cases撰寫scenarios
      建立雛形網站
      錄製selenium腳本
      將selenium腳本匯出成C#程式
      將selenium的C#程式放到scenario的steps中
      完成acceptance testing code – 紅燈
      撰寫production code,通過測試 – 綠燈
      重構


56
結論
     •   用人話來說明需求

     •   用人話來描述測試案例

     •   用人話來寫程式



57
目標明確



58
貫穿全場




59
保持節奏



60
感想   RD




 用說的真的比較快!
61
記住!
     程式碼不是寫給自己爽的

     要滿足使用者需求

62
補充 – SpecFlow 特色

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

     •可於 Scenario 上偵錯

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

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

     •支援 attribute hook event ( AOP )


63
參考資料
      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
問題與討論

     Thanks for your listening




66

Contenu connexe

Tendances

ドメインテストとは
ドメインテストとはドメインテストとは
ドメインテストとはKumiko Ohmi
 
reg-suitとQA Wolfを活用したVisual Regression Test
reg-suitとQA Wolfを活用したVisual Regression Testreg-suitとQA Wolfを活用したVisual Regression Test
reg-suitとQA Wolfを活用したVisual Regression TestKazuyuki Tsuzisaki
 
資工也該懂些資安吧
資工也該懂些資安吧資工也該懂些資安吧
資工也該懂些資安吧明旋 簡
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますester41
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?takezoe
 
PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)Win Yu
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門tsukasamannen
 
テストの組み立て方
テストの組み立て方テストの組み立て方
テストの組み立て方kauji0522
 
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)NTT DATA Technology & Innovation
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようdcubeio
 
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 TaiwanAlan Tsai
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース増田 亨
 
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!Mutsumi IWAISHI
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善Works Applications
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 

Tendances (20)

ドメインテストとは
ドメインテストとはドメインテストとは
ドメインテストとは
 
Istqb lesson 6
Istqb lesson 6Istqb lesson 6
Istqb lesson 6
 
reg-suitとQA Wolfを活用したVisual Regression Test
reg-suitとQA Wolfを活用したVisual Regression Testreg-suitとQA Wolfを活用したVisual Regression Test
reg-suitとQA Wolfを活用したVisual Regression Test
 
資工也該懂些資安吧
資工也該懂些資安吧資工也該懂些資安吧
資工也該懂些資安吧
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 
PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門
 
テストの組み立て方
テストの組み立て方テストの組み立て方
テストの組み立て方
 
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
TDD refresher
TDD refresherTDD refresher
TDD refresher
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみよう
 
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
 
Istqb lesson 1
Istqb lesson 1Istqb lesson 1
Istqb lesson 1
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 

En vedette

JavaScript for backend
JavaScript for backendJavaScript for backend
JavaScript for backendCaesar Chi
 
中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)michael 葉
 
2013 01 13 webconf milkmidi Flash
2013 01 13 webconf milkmidi Flash2013 01 13 webconf milkmidi Flash
2013 01 13 webconf milkmidi Flash綠茶 奶
 
Secret sauce of building php applications
Secret sauce of building php applicationsSecret sauce of building php applications
Secret sauce of building php applicationsLin Yo-An
 
Does firefox matter?
Does firefox matter?Does firefox matter?
Does firefox matter?Irvin Chen
 
20130113 Web Conference - communicate
20130113 Web Conference - communicate20130113 Web Conference - communicate
20130113 Web Conference - communicateHitomi Yang
 
Gamification vs UX
Gamification vs UXGamification vs UX
Gamification vs UXHana Chang
 
130113 why.&.how.smb.running.ux-light
130113 why.&.how.smb.running.ux-light130113 why.&.how.smb.running.ux-light
130113 why.&.how.smb.running.ux-lightDavid Liu
 
WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」Orange Tsai
 
Designing physical and digital experience in social web
Designing physical and digital experience in social webDesigning physical and digital experience in social web
Designing physical and digital experience in social webJanet Huang
 
20130112用原型驅動設計@webconf
20130112用原型驅動設計@webconf20130112用原型驅動設計@webconf
20130112用原型驅動設計@webconfJustin Lee
 
那些mockup沒告訴你的事@WebConf.tw 2013
那些mockup沒告訴你的事@WebConf.tw 2013那些mockup沒告訴你的事@WebConf.tw 2013
那些mockup沒告訴你的事@WebConf.tw 2013Adam Wang
 
超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B TestingYing-Hsiang Liao
 
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式Will Huang
 
A brief introduction to SPDY - 邁向 HTTP/2.0
A brief introduction to SPDY - 邁向 HTTP/2.0A brief introduction to SPDY - 邁向 HTTP/2.0
A brief introduction to SPDY - 邁向 HTTP/2.0Wen-Tien Chang
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統Hsu Ping Feng
 
借力使力的乾坤挪移大法-以使用者為中心的設計決策奧妙
借力使力的乾坤挪移大法-以使用者為中心的設計決策奧妙 借力使力的乾坤挪移大法-以使用者為中心的設計決策奧妙
借力使力的乾坤挪移大法-以使用者為中心的設計決策奧妙 悠識學院
 
Webconf2013-非典型貧窮網站維運經驗分享
Webconf2013-非典型貧窮網站維運經驗分享Webconf2013-非典型貧窮網站維運經驗分享
Webconf2013-非典型貧窮網站維運經驗分享Mu-Fan Teng
 

En vedette (18)

JavaScript for backend
JavaScript for backendJavaScript for backend
JavaScript for backend
 
中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)
 
2013 01 13 webconf milkmidi Flash
2013 01 13 webconf milkmidi Flash2013 01 13 webconf milkmidi Flash
2013 01 13 webconf milkmidi Flash
 
Secret sauce of building php applications
Secret sauce of building php applicationsSecret sauce of building php applications
Secret sauce of building php applications
 
Does firefox matter?
Does firefox matter?Does firefox matter?
Does firefox matter?
 
20130113 Web Conference - communicate
20130113 Web Conference - communicate20130113 Web Conference - communicate
20130113 Web Conference - communicate
 
Gamification vs UX
Gamification vs UXGamification vs UX
Gamification vs UX
 
130113 why.&.how.smb.running.ux-light
130113 why.&.how.smb.running.ux-light130113 why.&.how.smb.running.ux-light
130113 why.&.how.smb.running.ux-light
 
WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」
 
Designing physical and digital experience in social web
Designing physical and digital experience in social webDesigning physical and digital experience in social web
Designing physical and digital experience in social web
 
20130112用原型驅動設計@webconf
20130112用原型驅動設計@webconf20130112用原型驅動設計@webconf
20130112用原型驅動設計@webconf
 
那些mockup沒告訴你的事@WebConf.tw 2013
那些mockup沒告訴你的事@WebConf.tw 2013那些mockup沒告訴你的事@WebConf.tw 2013
那些mockup沒告訴你的事@WebConf.tw 2013
 
超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing
 
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
 
A brief introduction to SPDY - 邁向 HTTP/2.0
A brief introduction to SPDY - 邁向 HTTP/2.0A brief introduction to SPDY - 邁向 HTTP/2.0
A brief introduction to SPDY - 邁向 HTTP/2.0
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
 
借力使力的乾坤挪移大法-以使用者為中心的設計決策奧妙
借力使力的乾坤挪移大法-以使用者為中心的設計決策奧妙 借力使力的乾坤挪移大法-以使用者為中心的設計決策奧妙
借力使力的乾坤挪移大法-以使用者為中心的設計決策奧妙
 
Webconf2013-非典型貧窮網站維運經驗分享
Webconf2013-非典型貧窮網站維運經驗分享Webconf2013-非典型貧窮網站維運經驗分享
Webconf2013-非典型貧窮網站維運經驗分享
 

Similaire à BDD in .NET

持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版Kirk Chen
 
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)Fong Liou
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文Shuyong Lin
 
網站上線了,然後呢?
網站上線了,然後呢?網站上線了,然後呢?
網站上線了,然後呢?Kirk Chen
 
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统yiditushe
 
Wiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindWiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindRick Hwang
 
柴锋 跨平台移动应用的自动化验收测试
柴锋 跨平台移动应用的自动化验收测试柴锋 跨平台移动应用的自动化验收测试
柴锋 跨平台移动应用的自动化验收测试Trinea Trinea
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发Trinea Trinea
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述pop2008
 
Angular 深入淺出測試篇:新手入門
Angular 深入淺出測試篇:新手入門Angular 深入淺出測試篇:新手入門
Angular 深入淺出測試篇:新手入門志龍 陳
 
Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Bill Lin
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Kirk Chen
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究pop2008
 
網頁弱點掃描服務簡報 20120606
網頁弱點掃描服務簡報 20120606網頁弱點掃描服務簡報 20120606
網頁弱點掃描服務簡報 20120606Fionsu
 
基于Ht rca缺陷分析的测试改进-china test-张玲玲
基于Ht rca缺陷分析的测试改进-china test-张玲玲基于Ht rca缺陷分析的测试改进-china test-张玲玲
基于Ht rca缺陷分析的测试改进-china test-张玲玲drewz lin
 
七天基于风险测试—Chinatest
七天基于风险测试—Chinatest七天基于风险测试—Chinatest
七天基于风险测试—Chinatestdrewz lin
 
天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电drewz lin
 
持续集成之代码度量模型与应用
持续集成之代码度量模型与应用持续集成之代码度量模型与应用
持续集成之代码度量模型与应用drewz lin
 

Similaire à BDD in .NET (20)

持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版
 
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
拒絕再寫無效規格,來學學實例化需求! (Agile Summit TW 2023)
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文
 
網站上線了,然後呢?
網站上線了,然後呢?網站上線了,然後呢?
網站上線了,然後呢?
 
Jasmine
JasmineJasmine
Jasmine
 
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
 
Wiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindWiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected Mind
 
柴锋 跨平台移动应用的自动化验收测试
柴锋 跨平台移动应用的自动化验收测试柴锋 跨平台移动应用的自动化验收测试
柴锋 跨平台移动应用的自动化验收测试
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
 
Angular 深入淺出測試篇:新手入門
Angular 深入淺出測試篇:新手入門Angular 深入淺出測試篇:新手入門
Angular 深入淺出測試篇:新手入門
 
Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
 
網頁弱點掃描服務簡報 20120606
網頁弱點掃描服務簡報 20120606網頁弱點掃描服務簡報 20120606
網頁弱點掃描服務簡報 20120606
 
基于Ht rca缺陷分析的测试改进-china test-张玲玲
基于Ht rca缺陷分析的测试改进-china test-张玲玲基于Ht rca缺陷分析的测试改进-china test-张玲玲
基于Ht rca缺陷分析的测试改进-china test-张玲玲
 
七天基于风险测试—Chinatest
七天基于风险测试—Chinatest七天基于风险测试—Chinatest
七天基于风险测试—Chinatest
 
天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电
 
持续集成之代码度量模型与应用
持续集成之代码度量模型与应用持续集成之代码度量模型与应用
持续集成之代码度量模型与应用
 

BDD in .NET

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