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?

待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント
Masayuki Ozawa
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 

Was ist angesagt? (20)

Testing in Production, Deploy on Fridays
Testing in Production, Deploy on FridaysTesting in Production, Deploy on Fridays
Testing in Production, Deploy on Fridays
 
待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質 SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
 
テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
Effective testing with pytest
Effective testing with pytestEffective testing with pytest
Effective testing with pytest
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事
 
An Introduction to Test Driven Development
An Introduction to Test Driven Development An Introduction to Test Driven Development
An Introduction to Test Driven Development
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
 
Strategie de test à agile tour bordeaux
Strategie de test à agile tour bordeauxStrategie de test à agile tour bordeaux
Strategie de test à agile tour bordeaux
 
ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向
 
SIEMやログ監査で重要な事
SIEMやログ監査で重要な事SIEMやログ監査で重要な事
SIEMやログ監査で重要な事
 
KubeVirt 101
KubeVirt 101KubeVirt 101
KubeVirt 101
 
淡江大學 - 產品測試+安全性測試+壓力測試
淡江大學 - 產品測試+安全性測試+壓力測試淡江大學 - 產品測試+安全性測試+壓力測試
淡江大學 - 產品測試+安全性測試+壓力測試
 
MySQLアンチパターン
MySQLアンチパターンMySQLアンチパターン
MySQLアンチパターン
 

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

前端单元测试
前端单元测试前端单元测试
前端单元测试
LC2009
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章
浒 刘
 
打造完全免費的,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
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享
Wade Huang
 
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
Qiao 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, 測試驅動開發) 基本教學