SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
測試驅動開發
潘冠辰 (水球潘)
2018/5/14
- Unit test
- Dependency Inversion
- Mocking
What is TDD ?
什麼是測試驅動開發?
2
“
▷ 先測試再開發
3
屁!這不符合邏輯阿!
TDD 位於哪一個階段 ?
4
系統交付
系統測試
系統開發
系統設計
系統分析
提案與可行性分析
TDD 的技能所須
5
程式語言 單元測試 物件導向 設計模式 TDD
要做到測試驅動
你需要了解如何將模組解耦
Why TDD ?
為什麼要用測試驅動開發?
6
Why TDD?
1. 穩住開發軌道 – 提早將規格萃取成程式。
2. 進行良好的設計 – MVC, MVP …
3. 去除工作依賴 – 由於模組解耦,工作不具依賴性。
4. 重複驗證 – 撰寫好的測試碼可重複驗證。
5. 綠燈就下班!
7
How TDD ?
先學單元測試!
8
“▷ 單元測試就是測試軟體中最小
單位的邏輯→函數
9
來進行計算機的測試驅動開發吧!
10
但是我們要先撰寫測試碼!才進行開發!
計算機單元測試碼設計
(一般測試框架都可以這麼用)
11
10
20
30
加法
驗證加法是否正確
然後工程師才開始開發計算機
12
寫好了!
錯了!
13
繼續改進
14
寫好了!
終於完成了!下班囉!
15
TDD 流程
16
但你以為你真的會
測試驅動開發了?
當你的軟體涉及到許多技術跟框架時
你的程式碼是無法被測試的!
17
請問以下函數能夠被測試嗎?
18
依賴具體
依賴TTS套件
依賴作業系統
依賴介面
函數解說:
1. 首先檢查資料庫裡是否有學生資料,沒有的話就新增一份。
2. 然後再利用TTS技術將學生的姓名唸出來 (唱名)。
3. 最後再把這個事件顯示在介面上。
“▷ 這就是為什麼你需要設計模式
才能學會 TDD,把模組解耦是
非常重要的能力!綁定了視窗
的程式碼是無法被測試的!
19
因此TDD是設計階段!不是測試階段!
依賴注入
20
Dependency injection (DI)
1. 模組解耦 → 建立介面
21
2. 套用 MVP 模式 (此為實際案例)
22
定義清楚介面可能有興趣的事件跟動作!
別讓模組直接耦和圖形化介面框架!
3. 注入你的依賴! (就是從建構子傳啦!)
23
4. 看看改善後的程式碼
24
到底改善了什麼 ?
25
來撰寫測試程式就知道了!
Mocking
你需要一些”假”的物件
才能進行測試
26
“▷ Mock 是 一種測試手段,為了
不要讓複雜的技術、框架或者
是無法被測試的圖形化介面被
涉入在測試邏輯中,而去虛設
一些子類別。此虛設物件須能
足夠表達測試狀態。
27
Mocking
28
Mocking
29
Mocking
30
Mocking
31
Mocking
32
Testing 測試點名狀態及流程
33
看到這你應該就能理解
34
為什麼能先撰寫測試程式再開發
因為所有邏輯都是依賴抽象
以下是真實TDD案例
用來測試 ApringFileMcrRepository 是否能非同步
新增1000筆學生資料
(沒做這個測試的話就無法知道當有1000個學生同時點名究竟會怎樣!)
35
給想練TDD和物件導向的人
36
的作業
用 TDD 流程 開發 1A2B 遊戲模組
1. 先創建一個介面,有兩個主要功能(函數)
(1) 產生四個0~9的不同數字 (e.g. 1234, 0519, 9843)
(2) 產生根據玩家猜測的數字,回傳結果 (幾A幾B)。(e.g. 1A2B, 0A0B, 4A0B)
2. 對該介面撰寫單元測試邏輯 (e.g. 產生的數字真的沒有重複嗎? 回傳的
結果真的正確嗎?)。
3. 創建該模組介面的子類別,開始開發!
4. 開發完成後,new出來該子類別跑跑看測試框架吧!
37
Thanks!
Any questions?
38
References
1. Writing Great Unit Tests: Best and Worst
Practices
2. Unit Tests, How to Write Testable Code and
Why it Matters
3. Effective Tests
4. TDD WIKI
5. 點名專案的實際案例

Weitere ähnliche Inhalte

Was ist angesagt?

Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
TDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionTDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionDionatan default
 
論文口試簡報製作技巧
論文口試簡報製作技巧論文口試簡報製作技巧
論文口試簡報製作技巧滄碩 劉
 
API Token 入門
API Token 入門API Token 入門
API Token 入門Andrew Wu
 
Design thinking - 搞懂需求和洞見的差異 (Need & Insight)
Design thinking - 搞懂需求和洞見的差異 (Need & Insight)Design thinking - 搞懂需求和洞見的差異 (Need & Insight)
Design thinking - 搞懂需求和洞見的差異 (Need & Insight)Chuang Shu-Ting
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門H Iseri
 
テスト駆動開発のはじめ方
テスト駆動開発のはじめ方テスト駆動開発のはじめ方
テスト駆動開発のはじめ方Shuji Watanabe
 
例外處理實務
例外處理實務例外處理實務
例外處理實務Jeff Chu
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模國昭 張
 
bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話洋史 東平
 
OpenAI FineTuning を試してみる
OpenAI FineTuning を試してみるOpenAI FineTuning を試してみる
OpenAI FineTuning を試してみるiPride Co., Ltd.
 
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)Gelis Wu
 
부스트캠프 웹·모바일 6기 설명회 발표자료.pdf
부스트캠프 웹·모바일 6기 설명회 발표자료.pdf부스트캠프 웹·모바일 6기 설명회 발표자료.pdf
부스트캠프 웹·모바일 6기 설명회 발표자료.pdfCONNECT FOUNDATION
 
60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacateKinji Akemine
 
Morphological computation 概要(形態を活用するロボット)
Morphological computation 概要(形態を活用するロボット)Morphological computation 概要(形態を活用するロボット)
Morphological computation 概要(形態を活用するロボット)Kenji Urai
 
アジャイル開発の始め方
アジャイル開発の始め方アジャイル開発の始め方
アジャイル開発の始め方ESM SEC
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
從 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
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス増田 亨
 

Was ist angesagt? (20)

Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
TDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionTDD Flow: The Mantra in Action
TDD Flow: The Mantra in Action
 
論文口試簡報製作技巧
論文口試簡報製作技巧論文口試簡報製作技巧
論文口試簡報製作技巧
 
API Token 入門
API Token 入門API Token 入門
API Token 入門
 
Design thinking - 搞懂需求和洞見的差異 (Need & Insight)
Design thinking - 搞懂需求和洞見的差異 (Need & Insight)Design thinking - 搞懂需求和洞見的差異 (Need & Insight)
Design thinking - 搞懂需求和洞見的差異 (Need & Insight)
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門
 
テスト駆動開発のはじめ方
テスト駆動開発のはじめ方テスト駆動開発のはじめ方
テスト駆動開発のはじめ方
 
例外處理實務
例外處理實務例外處理實務
例外處理實務
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模
 
bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話
 
OpenAI FineTuning を試してみる
OpenAI FineTuning を試してみるOpenAI FineTuning を試してみる
OpenAI FineTuning を試してみる
 
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
 
부스트캠프 웹·모바일 6기 설명회 발표자료.pdf
부스트캠프 웹·모바일 6기 설명회 발표자료.pdf부스트캠프 웹·모바일 6기 설명회 발표자료.pdf
부스트캠프 웹·모바일 6기 설명회 발표자료.pdf
 
60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate
 
Morphological computation 概要(形態を活用するロボット)
Morphological computation 概要(形態を活用するロボット)Morphological computation 概要(形態を活用するロボット)
Morphological computation 概要(形態を活用するロボット)
 
アジャイル開発の始め方
アジャイル開発の始め方アジャイル開発の始め方
アジャイル開発の始め方
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
從 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
 
Molecule入門
Molecule入門Molecule入門
Molecule入門
 
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
 

Ähnlich wie TDD (Test-driven development, 測試驅動開發) 基本教學

From Coders to Builders of the Intelligent World
From Coders to Builders of the Intelligent WorldFrom Coders to Builders of the Intelligent World
From Coders to Builders of the Intelligent WorldHuawei Technologies
 
Angular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular TaiwanAngular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular Taiwan志龍 陳
 
前端单元测试
前端单元测试前端单元测试
前端单元测试LC2009
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生appuniverz
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章浒 刘
 
有效的单元测试.ppt
有效的单元测试.ppt有效的单元测试.ppt
有效的单元测试.ppttest499702
 
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪奕孝 陳
 
2012 China 软件测试大会
2012 China 软件测试大会2012 China 软件测试大会
2012 China 软件测试大会mayun1688
 
Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Bill Lin
 
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法TIM WANG
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Wade Huang
 
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012Qiao Liang
 
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012Qiao Liang
 
程序员与技术
程序员与技术程序员与技术
程序员与技术ligaoren
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous deliveryQiao Liang
 
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)LetAgileFly
 

Ähnlich wie TDD (Test-driven development, 測試驅動開發) 基本教學 (20)

From Coders to Builders of the Intelligent World
From Coders to Builders of the Intelligent WorldFrom Coders to Builders of the Intelligent World
From Coders to Builders of the Intelligent World
 
Angular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular TaiwanAngular Testing for Book Club Online of Angular Taiwan
Angular Testing for Book Club Online of Angular Taiwan
 
前端单元测试
前端单元测试前端单元测试
前端单元测试
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章
 
UnitTest.pptx
UnitTest.pptxUnitTest.pptx
UnitTest.pptx
 
有效的单元测试.ppt
有效的单元测试.ppt有效的单元测试.ppt
有效的单元测试.ppt
 
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
 
2012 China 软件测试大会
2012 China 软件测试大会2012 China 软件测试大会
2012 China 软件测试大会
 
Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析
 
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享
 
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012
 
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012
 
前端測試
前端測試前端測試
前端測試
 
前端測試
前端測試前端測試
前端測試
 
Xpp
XppXpp
Xpp
 
程序员与技术
程序员与技术程序员与技术
程序员与技术
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous delivery
 
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
 

TDD (Test-driven development, 測試驅動開發) 基本教學