什么是TDD
本文所說(shuō)的 TDD 指狹義上的 TDD,也就是「單元測(cè)試驅(qū)動(dòng)開(kāi)發(fā)」。
TDD 是敏捷開(kāi)發(fā)中的一項(xiàng)核心實(shí)踐和技術(shù),也是一種設(shè)計(jì)方法論渣窜。TDD的原理是在開(kāi)發(fā)功能代碼之前,先編寫(xiě)單元測(cè)試用例代碼宪躯,測(cè)試代碼確定需要編寫(xiě)什么產(chǎn)品代碼乔宿。TDD 是 XP(Extreme Programming)的核心實(shí)踐。它的主要推動(dòng)者是 Kent Beck访雪。
為什么要TDD
傳統(tǒng)編碼方式 VS TDD 編碼方式
傳統(tǒng)編碼方式
1.需求分析详瑞,想不清楚細(xì)節(jié),直接開(kāi)始寫(xiě)
2.發(fā)現(xiàn)需求細(xì)節(jié)不明確臣缀,去跟業(yè)務(wù)人員確認(rèn)
3.確認(rèn)好幾次終于寫(xiě)完所有邏輯
4.運(yùn)行起來(lái)測(cè)試一下坝橡,不工作,調(diào)試
5.調(diào)試好久終于工作了
6.轉(zhuǎn)測(cè)試精置,QA 測(cè)出 bug计寇,debug, 打補(bǔ)丁
7.終于脂倦,代碼可以工作了
8.代碼很差番宁,卻不敢動(dòng),動(dòng)了還得手工測(cè)試赖阻,還得讓 QA 測(cè)試蝶押,還得加班...
TDD 編碼方式
1.先分解任務(wù),分離關(guān)注點(diǎn)(后面有演示)
2.列 Example政供,用實(shí)例化需求播聪,澄清需求細(xì)節(jié)
3.寫(xiě)測(cè)試,只關(guān)注需求布隔,程序的輸入輸出离陶,不關(guān)心中間過(guò)程
4.寫(xiě)實(shí)現(xiàn),不考慮別的需求衅檀,用最簡(jiǎn)單的方式滿足當(dāng)前這個(gè)小需求即可
5.重構(gòu)招刨,用手法消除代碼里的壞味道
6.寫(xiě)完,手動(dòng)測(cè)試一下哀军,基本沒(méi)什么問(wèn)題沉眶,有問(wèn)題補(bǔ)個(gè)用例,修復(fù)
7.轉(zhuǎn)測(cè)試杉适,小問(wèn)題谎倔,補(bǔ)用例,修復(fù)
8.代碼整潔且用例齊全猿推,信心滿滿地提交
優(yōu)點(diǎn)
效率
1.提前確認(rèn)需求片习,減少開(kāi)發(fā)中的中斷和等待
2.小步快走,節(jié)省調(diào)試時(shí)間
質(zhì)量
1.高測(cè)試覆蓋率
2.自動(dòng)回歸測(cè)試
怎么做
流程
1.快速新增一個(gè)測(cè)試
2.運(yùn)行所有的測(cè)試(有時(shí)候只需要運(yùn)行一部分)蹬叭,發(fā)現(xiàn)新增的測(cè)試失敗
3.做一些小小的改動(dòng)藕咏,盡快使測(cè)試程序可以運(yùn)行,可以使用不合理的方法
4.運(yùn)行所有的測(cè)試秽五,并且全部通過(guò)
5.重構(gòu)代碼孽查,以消除重復(fù)設(shè)計(jì),優(yōu)化結(jié)構(gòu)
如何學(xué)習(xí)
- RED write a test that fails
1.Tasking
2.有效的測(cè)試單元 - GREEN make the code work
1.Obvious Implement
2.Fake
3.Traingulate - REFACTOR eliminate redundancy
1.Clean code
2.Smell
3.手法
FAQ
明知道失敗坦喘,為什么還要運(yùn)行盲再?
失敗有很多原因,運(yùn)行是為了保證失敗是自己想要的失敯晗场洲胖;
避免由于別的原因?qū)е率 ?/p>
小步好,但真的要小到這個(gè)程度嗎坯沪?
練習(xí)的時(shí)候绿映,盡可能小步;
實(shí)際的時(shí)候當(dāng)大步遇到問(wèn)題可以盡快切換到小步。
測(cè)試覆蓋率多少合適腐晾?
剛開(kāi)始的時(shí)候盡量保證100%覆蓋率叉弦。鍛煉自己寫(xiě)測(cè)試的能力;
追求100%可以比較出有價(jià)值的測(cè)試。