初識TDD

什么是TDD

本文所說的 TDD 指狹義上的 TDD,也就是「單元測試驅動開發」。

TDD 是敏捷開發中的一項核心實踐和技術,也是一種設計方法論。TDD的原理是在開發功能代碼之前,先編寫單元測試用例代碼,測試代碼確定需要編寫什么產品代碼。TDD 是 XP(Extreme Programming)的核心實踐。它的主要推動者是 Kent Beck。

為什么要TDD

傳統編碼方式 VS TDD 編碼方式

傳統編碼方式

1.需求分析,想不清楚細節,直接開始寫
2.發現需求細節不明確,去跟業務人員確認
3.確認好幾次終于寫完所有邏輯
4.運行起來測試一下,不工作,調試
5.調試好久終于工作了
6.轉測試,QA 測出 bug,debug, 打補丁
7.終于,代碼可以工作了
8.代碼很差,卻不敢動,動了還得手工測試,還得讓 QA 測試,還得加班...

TDD 編碼方式

1.先分解任務,分離關注點(后面有演示)
2.列 Example,用實例化需求,澄清需求細節
3.寫測試,只關注需求,程序的輸入輸出,不關心中間過程
4.寫實現,不考慮別的需求,用最簡單的方式滿足當前這個小需求即可
5.重構,用手法消除代碼里的壞味道
6.寫完,手動測試一下,基本沒什么問題,有問題補個用例,修復
7.轉測試,小問題,補用例,修復
8.代碼整潔且用例齊全,信心滿滿地提交

優點

效率

1.提前確認需求,減少開發中的中斷和等待
2.小步快走,節省調試時間

質量

1.高測試覆蓋率
2.自動回歸測試

怎么做

流程
1.快速新增一個測試
2.運行所有的測試(有時候只需要運行一部分),發現新增的測試失敗
3.做一些小小的改動,盡快使測試程序可以運行,可以使用不合理的方法
4.運行所有的測試,并且全部通過
5.重構代碼,以消除重復設計,優化結構

如何學習

  • RED write a test that fails
    1.Tasking
    2.有效的測試單元
  • GREEN make the code work
    1.Obvious Implement
    2.Fake
    3.Traingulate
  • REFACTOR eliminate redundancy
    1.Clean code
    2.Smell
    3.手法

FAQ

明知道失敗,為什么還要運行?

失敗有很多原因,運行是為了保證失敗是自己想要的失敗;
避免由于別的原因導致失敗。

小步好,但真的要小到這個程度嗎?

練習的時候,盡可能小步;
實際的時候當大步遇到問題可以盡快切換到小步。

測試覆蓋率多少合適?

剛開始的時候盡量保證100%覆蓋率。鍛煉自己寫測試的能力;
追求100%可以比較出有價值的測試。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容