SlideShare a Scribd company logo
1 of 66
Download to read offline
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

More Related Content

What's hot

IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15OpenID Foundation Japan
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころJunya Hayashi
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsTatsuo Kudo
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019devCAT Studio, NEXON
 
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料オラクルエンジニア通信
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門Naohiro Fujie
 
はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)
はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)
はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)虎の穴 開発室
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなしterahide
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則増田 亨
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)NTT DATA Technology & Innovation
 
JBehaveの導入やってみたよ!
JBehaveの導入やってみたよ!JBehaveの導入やってみたよ!
JBehaveの導入やってみたよ!theboyalex
 
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜Jumpei Miyata
 
Loom Virtual Threads in the JDK 19
Loom Virtual Threads in the JDK 19Loom Virtual Threads in the JDK 19
Loom Virtual Threads in the JDK 19José Paumard
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話JustSystems Corporation
 

What's hot (20)

IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
Ooc 2020
Ooc 2020Ooc 2020
Ooc 2020
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
 
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
 
はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)
はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)
はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
 
JBehaveの導入やってみたよ!
JBehaveの導入やってみたよ!JBehaveの導入やってみたよ!
JBehaveの導入やってみたよ!
 
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
サイボウズの CI/CD 事情 〜Jenkins おじさんは CircleCI おじさんにしんかした!〜
 
Loom Virtual Threads in the JDK 19
Loom Virtual Threads in the JDK 19Loom Virtual Threads in the JDK 19
Loom Virtual Threads in the JDK 19
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
 

Viewers also liked

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
 

Viewers also liked (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-非典型貧窮網站維運經驗分享
 

Similar to 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
 

Similar to 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