認(rèn)識(shí) TDD

什么是TDD?

TDD 有廣義和狹義之分,常說的是狹義的 TDD,也就是 UTDD(Unit Test Driven Development)。廣義的 TDD 是 ATDD(Acceptance Test Driven Development),包括 BDD(Behavior Driven Development)和 Consumer-Driven Contracts Development 等。
本文所說的 TDD 指狹義上的 TDD,也就是「單元測(cè)試驅(qū)動(dòng)開發(fā)」。

TDD 是敏捷開發(fā)中的一項(xiàng)核心實(shí)踐和技術(shù),也是一種設(shè)計(jì)方法論。TDD的原理是在開發(fā)功能代碼之前,先編寫單元測(cè)試用例代碼,測(cè)試代碼確定需要編寫什么產(chǎn)品代碼。TDD 是 XP(Extreme Programming)的核心實(shí)踐。它的主要推動(dòng)者是 Kent Beck。

TDD 有三層含義:

  • Test-Driven Development,測(cè)試驅(qū)動(dòng)開發(fā)。
  • Task-Driven Development,任務(wù)驅(qū)動(dòng)開發(fā),要對(duì)問題進(jìn)行分析并進(jìn)行任務(wù)分解。
  • Test-Driven Design,測(cè)試保護(hù)下的設(shè)計(jì)改善。TDD 并不能直接提高設(shè)計(jì)能力,它只是給你更多機(jī)會(huì)和保障去改善設(shè)計(jì)。

TDD 編碼方式

  • 先分解任務(wù),分離關(guān)注點(diǎn)(后面有演示)
  • 列 Example,用實(shí)例化需求,澄清需求細(xì)節(jié)
  • 寫測(cè)試,只關(guān)注需求,程序的輸入輸出,不關(guān)心中間過程
  • 寫實(shí)現(xiàn),不考慮別的需求,用最簡(jiǎn)單的方式滿足當(dāng)前這個(gè)小需求即可
  • 重構(gòu),用手法消除代碼里的壞味道
  • 寫完,手動(dòng)測(cè)試一下,基本沒什么問題,有問題補(bǔ)個(gè)用例,修復(fù)
  • 轉(zhuǎn)測(cè)試,小問題,補(bǔ)用例,修復(fù)
  • 代碼整潔且用例齊全,信心滿滿地提交

TDD 的好處

降低開發(fā)者負(fù)擔(dān)

通過明確的流程,讓我們一次只關(guān)注一個(gè)點(diǎn),思維負(fù)擔(dān)更小。

保護(hù)網(wǎng)

TDD 的好處是覆蓋完全的單元測(cè)試,對(duì)產(chǎn)品代碼提供了一個(gè)保護(hù)網(wǎng),讓我們可以輕松地迎接需求變化或改善代碼的設(shè)計(jì)。
所以如果你的項(xiàng)目需求穩(wěn)定,一次性做完,后續(xù)沒有任何改動(dòng)的話,能享受到 TDD 的好處就比較少了。

提前澄清需求

先寫測(cè)試可以幫助我們?nèi)ニ伎夹枨螅⑻崆俺吻逍枨蠹?xì)節(jié),而不是代碼寫到一半才發(fā)現(xiàn)不明確的需求。

快速反饋

有很多人說 TDD 時(shí),我的代碼量增加了,所以開發(fā)效率降低了。但是,如果沒有單元測(cè)試,你就要手工測(cè)試,你要花很多時(shí)間去準(zhǔn)備數(shù)據(jù),啟動(dòng)應(yīng)用,跳轉(zhuǎn)界面等,反饋是很慢的。準(zhǔn)確說,快速反饋是單元測(cè)試的好處。

TDD 的基本流程是:紅,綠,重構(gòu)。

更詳細(xì)的流程是:

  • 寫一個(gè)測(cè)試用例
  • 運(yùn)行測(cè)試
  • 寫剛好能讓測(cè)試通過的實(shí)現(xiàn)
  • 運(yùn)行測(cè)試
  • 識(shí)別壞味道,用手法修改代碼
  • 運(yùn)行測(cè)試
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文結(jié)構(gòu): 什么是 TDD 為什么要 TDD 怎么 TDD FAQ 學(xué)習(xí)路徑 延伸閱讀 什么是 TDD TDD 有...
    李浪溪_WaterLee閱讀 76,754評(píng)論 16 168
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 文/劉冉 最近幾年“TDD已死”的聲音不斷出現(xiàn),特別是David Heinemeier Hansson那篇文章——...
    ThoughtWorks閱讀 1,852評(píng)論 0 9
  • 1.測(cè)試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動(dòng)和任務(wù)的結(jié)構(gòu)性框架。軟件項(xiàng)目的開發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 22,390評(píng)論 7 278
  • 2018年4月6日 星期五 晴 今天,我們和天天一起去了昌平郊區(qū)延壽寺,在那里我們玩的很嗨?;氐郊椅揖透肆?,一直...
    福葉子閱讀 177評(píng)論 0 0

友情鏈接更多精彩內(nèi)容