SlideShare a Scribd company logo
1 of 24
Download to read offline
TDD with RSpec
● TDD
● RSpec
● Build a Markdown editor
TDD?
Test-Driven Development, 測試驅動開發
● 開發方法
● spec (specification 規格)確認的設計活動
● 快速取得回饋
● 限定變動在可以掌握的範圍內
TDD 是明確且可執行的規格
● 把 test 當作 spec
● 可以執行,也能讓人閱讀
TDD 用規格杜絕浪費
● 等待與搬運的浪費:前後端可以同步開發
● 不良品的浪費:明確定義什麼是正確的,因為可以被執行,所以可以隨時檢查有
無錯誤產生
● 動作與加工的浪費:可以很方便的進行小部分功能開發驗證
● 製造過多或過早的浪費:不會發散開發出規格以外的功能
TDD 兩頂帽子
● 實現功能的帽子:在測試的輔助下,快速實現其功能。
● 重構的帽子:在測試的保護下,通過去除多餘的程式,提高程式質量
TDD 三個階段
紅燈、綠燈、重構 Red, Green, Refactor
在還沒有主要功能之前,先寫單元測試。由於主要功能都還沒有撰寫,自然無法通過
剛剛寫出來的單元測試,所以會亮出紅色的燈號。
快速實作主要功能,直到可以通過單元測試,讓測試的燈號變成綠色。
若我們需要更大的彈性,就整理程式碼,消除重覆設計。並保証功能仍然綠燈可運
行。
Why RSpec?
We use Ruby on Rails
What is RSpec?
Test framework for Ruby
Let's TDD with RSpec
小步快跑!
99 Bottles
https://www.youtube.com/watch?v=Xy-da43E6Lo
99 Bottles
describe "#verse" do
end
describe "#verse" do
context "99" do
end
end
describe "#verse" do
context "99" do
expected = <<-VERSE
99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.
VERSE
expect(expected).to eq(Bottles.new.verse(99))
end
end
99 Bottles →
class Bottles
def verse(number)
"99 bottles of beer on the wall, 99 bottles of beer.n" 
"Take one down and pass it around, 98 bottles of beer on the wall.n"
end
end
99 Bottles → → (♻ ) → →
...
99 Bottles 測試 → 開發 → (重構) → 測試 → 開發 ...
more... http://bit.ly/2koOVLU
Live Demo
Your turn!
Your turn!
Your turn! ♻
Next: TDD by User Story
時時勤拂拭,何處惹塵埃
TDD style: 規格明確,杜絕浪費,小步快跑
Bug 退散!

More Related Content

Viewers also liked

1030720神經系統
1030720神經系統1030720神經系統
1030720神經系統Leo Chang
 
Hello!! Taiwan!!
Hello!! Taiwan!! Hello!! Taiwan!!
Hello!! Taiwan!! Leo Chang
 
關鍵句型
關鍵句型關鍵句型
關鍵句型Leo Chang
 
02經絡與指壓刮痧(許鴻奇胡春英)
02經絡與指壓刮痧(許鴻奇胡春英)02經絡與指壓刮痧(許鴻奇胡春英)
02經絡與指壓刮痧(許鴻奇胡春英)Leo Chang
 
Unit 1 reading 0429
Unit 1 reading 0429Unit 1 reading 0429
Unit 1 reading 0429Leo Chang
 
1030720骨骼系統
1030720骨骼系統1030720骨骼系統
1030720骨骼系統Leo Chang
 
第11章心臟血管系統
第11章心臟血管系統第11章心臟血管系統
第11章心臟血管系統Leo Chang
 

Viewers also liked (7)

1030720神經系統
1030720神經系統1030720神經系統
1030720神經系統
 
Hello!! Taiwan!!
Hello!! Taiwan!! Hello!! Taiwan!!
Hello!! Taiwan!!
 
關鍵句型
關鍵句型關鍵句型
關鍵句型
 
02經絡與指壓刮痧(許鴻奇胡春英)
02經絡與指壓刮痧(許鴻奇胡春英)02經絡與指壓刮痧(許鴻奇胡春英)
02經絡與指壓刮痧(許鴻奇胡春英)
 
Unit 1 reading 0429
Unit 1 reading 0429Unit 1 reading 0429
Unit 1 reading 0429
 
1030720骨骼系統
1030720骨骼系統1030720骨骼系統
1030720骨骼系統
 
第11章心臟血管系統
第11章心臟血管系統第11章心臟血管系統
第11章心臟血管系統
 

Similar to Tdd with rspec.md

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志龍 陳
 
TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學潘 冠辰
 
2012 China 软件测试大会
2012 China 软件测试大会2012 China 软件测试大会
2012 China 软件测试大会mayun1688
 
How+we+make+tests
How+we+make+testsHow+we+make+tests
How+we+make+tests甘 李
 
前端单元测试
前端单元测试前端单元测试
前端单元测试LC2009
 
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Fong Liou
 
Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践drewz lin
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless Rick Hwang
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践YuLing Liu
 
测试驱动的前端开发初探
测试驱动的前端开发初探测试驱动的前端开发初探
测试驱动的前端开发初探hua qiu
 
Test driven-frontend-develop
Test driven-frontend-developTest driven-frontend-develop
Test driven-frontend-developfangdeng
 
Scrum过程介绍
Scrum过程介绍Scrum过程介绍
Scrum过程介绍ben
 
我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離Edward Kuo
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發AgileCommunity
 
小量快速製造的瓶頸與可行策略
小量快速製造的瓶頸與可行策略小量快速製造的瓶頸與可行策略
小量快速製造的瓶頸與可行策略MAKERPRO.cc
 
SRE CH27 - Reliable Product Launches at Scale
SRE CH27 - Reliable Product Launches at Scale SRE CH27 - Reliable Product Launches at Scale
SRE CH27 - Reliable Product Launches at Scale Rick Hwang
 
2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设Tianwei Liu
 

Similar to Tdd with rspec.md (20)

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
 
TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學
 
2012 China 软件测试大会
2012 China 软件测试大会2012 China 软件测试大会
2012 China 软件测试大会
 
How+we+make+tests
How+we+make+testsHow+we+make+tests
How+we+make+tests
 
前端单元测试
前端单元测试前端单元测试
前端单元测试
 
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)
 
Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless
 
Xpp
XppXpp
Xpp
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
测试驱动的前端开发初探
测试驱动的前端开发初探测试驱动的前端开发初探
测试驱动的前端开发初探
 
Test driven-frontend-develop
Test driven-frontend-developTest driven-frontend-develop
Test driven-frontend-develop
 
SCRUM
SCRUMSCRUM
SCRUM
 
Scrum过程介绍
Scrum过程介绍Scrum过程介绍
Scrum过程介绍
 
我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發
 
小量快速製造的瓶頸與可行策略
小量快速製造的瓶頸與可行策略小量快速製造的瓶頸與可行策略
小量快速製造的瓶頸與可行策略
 
SRE CH27 - Reliable Product Launches at Scale
SRE CH27 - Reliable Product Launches at Scale SRE CH27 - Reliable Product Launches at Scale
SRE CH27 - Reliable Product Launches at Scale
 
2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设
 

More from Leo Chang

如何將Google行事曆加入
如何將Google行事曆加入如何將Google行事曆加入
如何將Google行事曆加入Leo Chang
 
如何更改個人資料
如何更改個人資料如何更改個人資料
如何更改個人資料Leo Chang
 
期中預警註記 Apps
期中預警註記 Apps期中預警註記 Apps
期中預警註記 AppsLeo Chang
 
Fcu教師成績登錄 apps
Fcu教師成績登錄 appsFcu教師成績登錄 apps
Fcu教師成績登錄 appsLeo Chang
 
如何建立群組
如何建立群組如何建立群組
如何建立群組Leo Chang
 
如何匯入課程
如何匯入課程 如何匯入課程
如何匯入課程 Leo Chang
 
如何快速建立題庫
如何快速建立題庫如何快速建立題庫
如何快速建立題庫Leo Chang
 
如何建立題庫
如何建立題庫如何建立題庫
如何建立題庫Leo Chang
 
如何建立問卷
如何建立問卷如何建立問卷
如何建立問卷Leo Chang
 
如何使用同儕互評
如何使用同儕互評如何使用同儕互評
如何使用同儕互評Leo Chang
 
如何建立測驗
如何建立測驗如何建立測驗
如何建立測驗Leo Chang
 
如何建立課程活動
如何建立課程活動如何建立課程活動
如何建立課程活動Leo Chang
 
如何上傳課程文件
如何上傳課程文件如何上傳課程文件
如何上傳課程文件Leo Chang
 
教師指定教學助理
教師指定教學助理教師指定教學助理
教師指定教學助理Leo Chang
 
教師如何查看課程
教師如何查看課程教師如何查看課程
教師如何查看課程Leo Chang
 
關鍵句型
關鍵句型關鍵句型
關鍵句型Leo Chang
 
嘉義大學語言中心簡介
嘉義大學語言中心簡介嘉義大學語言中心簡介
嘉義大學語言中心簡介Leo Chang
 
Ncyu校園巡禮
Ncyu校園巡禮Ncyu校園巡禮
Ncyu校園巡禮Leo Chang
 
Ncyu校園巡禮
Ncyu校園巡禮Ncyu校園巡禮
Ncyu校園巡禮Leo Chang
 

More from Leo Chang (20)

youtube-dl
youtube-dlyoutube-dl
youtube-dl
 
如何將Google行事曆加入
如何將Google行事曆加入如何將Google行事曆加入
如何將Google行事曆加入
 
如何更改個人資料
如何更改個人資料如何更改個人資料
如何更改個人資料
 
期中預警註記 Apps
期中預警註記 Apps期中預警註記 Apps
期中預警註記 Apps
 
Fcu教師成績登錄 apps
Fcu教師成績登錄 appsFcu教師成績登錄 apps
Fcu教師成績登錄 apps
 
如何建立群組
如何建立群組如何建立群組
如何建立群組
 
如何匯入課程
如何匯入課程 如何匯入課程
如何匯入課程
 
如何快速建立題庫
如何快速建立題庫如何快速建立題庫
如何快速建立題庫
 
如何建立題庫
如何建立題庫如何建立題庫
如何建立題庫
 
如何建立問卷
如何建立問卷如何建立問卷
如何建立問卷
 
如何使用同儕互評
如何使用同儕互評如何使用同儕互評
如何使用同儕互評
 
如何建立測驗
如何建立測驗如何建立測驗
如何建立測驗
 
如何建立課程活動
如何建立課程活動如何建立課程活動
如何建立課程活動
 
如何上傳課程文件
如何上傳課程文件如何上傳課程文件
如何上傳課程文件
 
教師指定教學助理
教師指定教學助理教師指定教學助理
教師指定教學助理
 
教師如何查看課程
教師如何查看課程教師如何查看課程
教師如何查看課程
 
關鍵句型
關鍵句型關鍵句型
關鍵句型
 
嘉義大學語言中心簡介
嘉義大學語言中心簡介嘉義大學語言中心簡介
嘉義大學語言中心簡介
 
Ncyu校園巡禮
Ncyu校園巡禮Ncyu校園巡禮
Ncyu校園巡禮
 
Ncyu校園巡禮
Ncyu校園巡禮Ncyu校園巡禮
Ncyu校園巡禮
 

Tdd with rspec.md