SlideShare ist ein Scribd-Unternehmen logo
1 von 66
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
2019-03-13-ddd taiwan-community-iddd-studygroup-2nd2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
2019-03-13-ddd taiwan-community-iddd-studygroup-2ndFong Liou
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?Yoshitaka Kawashima
 
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]Kohei KaiGai
 
僕たちがすべきことはリファクタリングなのか
僕たちがすべきことはリファクタリングなのか僕たちがすべきことはリファクタリングなのか
僕たちがすべきことはリファクタリングなのかIto Takumi
 
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。Narichika Kajihara
 
研究主題發想 與執行研究歷程
研究主題發想 與執行研究歷程研究主題發想 與執行研究歷程
研究主題發想 與執行研究歷程Lawrenzo H.C. Huang
 
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本Hajime Fujita
 
症例報告論文を載せるために
症例報告論文を載せるために症例報告論文を載せるために
症例報告論文を載せるためにk-kajiwara
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring増田 亨
 
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~A AOKI
 
KubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいKubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいYuji Oshima
 
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのrediswebエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredisnasa9084
 
柵木2021(東大GCI最終課題)
柵木2021(東大GCI最終課題)柵木2021(東大GCI最終課題)
柵木2021(東大GCI最終課題)ssuser563e4e1
 
広告サイエンスにおける統計的機械学習技術のご紹介 / YJTC19 in Shibuya A-5 #yjtc
広告サイエンスにおける統計的機械学習技術のご紹介 / YJTC19 in Shibuya A-5 #yjtc広告サイエンスにおける統計的機械学習技術のご紹介 / YJTC19 in Shibuya A-5 #yjtc
広告サイエンスにおける統計的機械学習技術のご紹介 / YJTC19 in Shibuya A-5 #yjtcYahoo!デベロッパーネットワーク
 
DDD 20121106 SEA Forum November
DDD 20121106 SEA Forum NovemberDDD 20121106 SEA Forum November
DDD 20121106 SEA Forum November増田 亨
 
質性研究的紮根理論研究設計與結果
質性研究的紮根理論研究設計與結果質性研究的紮根理論研究設計與結果
質性研究的紮根理論研究設計與結果Yunhua Pao
 
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれからYahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれからYahoo!デベロッパーネットワーク
 
2015-10-31 クラウドネイティヴ時代の運用を考える 〜 ドキュメント駆動運用へ
2015-10-31 クラウドネイティヴ時代の運用を考える  〜 ドキュメント駆動運用へ2015-10-31 クラウドネイティヴ時代の運用を考える  〜 ドキュメント駆動運用へ
2015-10-31 クラウドネイティヴ時代の運用を考える 〜 ドキュメント駆動運用へOperation Lab, LLC.
 
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務についてヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務についてYahoo!デベロッパーネットワーク
 

Was ist angesagt? (20)

2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
2019-03-13-ddd taiwan-community-iddd-studygroup-2nd2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
 
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
 
僕たちがすべきことはリファクタリングなのか
僕たちがすべきことはリファクタリングなのか僕たちがすべきことはリファクタリングなのか
僕たちがすべきことはリファクタリングなのか
 
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
 
研究主題發想 與執行研究歷程
研究主題發想 與執行研究歷程研究主題發想 與執行研究歷程
研究主題發想 與執行研究歷程
 
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
 
症例報告論文を載せるために
症例報告論文を載せるために症例報告論文を載せるために
症例報告論文を載せるために
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
 
KubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいKubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したい
 
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのrediswebエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
 
柵木2021(東大GCI最終課題)
柵木2021(東大GCI最終課題)柵木2021(東大GCI最終課題)
柵木2021(東大GCI最終課題)
 
広告サイエンスにおける統計的機械学習技術のご紹介 / YJTC19 in Shibuya A-5 #yjtc
広告サイエンスにおける統計的機械学習技術のご紹介 / YJTC19 in Shibuya A-5 #yjtc広告サイエンスにおける統計的機械学習技術のご紹介 / YJTC19 in Shibuya A-5 #yjtc
広告サイエンスにおける統計的機械学習技術のご紹介 / YJTC19 in Shibuya A-5 #yjtc
 
Apache Solr 検索エンジン入門
Apache Solr 検索エンジン入門Apache Solr 検索エンジン入門
Apache Solr 検索エンジン入門
 
DDD 20121106 SEA Forum November
DDD 20121106 SEA Forum NovemberDDD 20121106 SEA Forum November
DDD 20121106 SEA Forum November
 
質性研究的紮根理論研究設計與結果
質性研究的紮根理論研究設計與結果質性研究的紮根理論研究設計與結果
質性研究的紮根理論研究設計與結果
 
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれからYahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
 
2015-10-31 クラウドネイティヴ時代の運用を考える 〜 ドキュメント駆動運用へ
2015-10-31 クラウドネイティヴ時代の運用を考える  〜 ドキュメント駆動運用へ2015-10-31 クラウドネイティヴ時代の運用を考える  〜 ドキュメント駆動運用へ
2015-10-31 クラウドネイティヴ時代の運用を考える 〜 ドキュメント駆動運用へ
 
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務についてヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
 

Andere mochten auch

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
 
認試軟體測試的世界 & TDD/BDD 入門
認試軟體測試的世界 & TDD/BDD 入門認試軟體測試的世界 & TDD/BDD 入門
認試軟體測試的世界 & TDD/BDD 入門wantingj
 
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
 

Andere mochten auch (19)

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 聊天室應用程式
 
認試軟體測試的世界 & TDD/BDD 入門
認試軟體測試的世界 & TDD/BDD 入門認試軟體測試的世界 & TDD/BDD 入門
認試軟體測試的世界 & TDD/BDD 入門
 
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-非典型貧窮網站維運經驗分享
 

Ähnlich wie 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
 

Ähnlich wie 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