敏捷開發(fā)的蓬勃發(fā)展、遍地開花,TDD(Test Drive Development測試驅(qū)動(dòng)開發(fā))的概念已經(jīng)深入軟件研發(fā)從業(yè)者的心中。
TDD講究的是:“測試在先、編碼在后”。有別于以往的“先編碼、后測試”的開發(fā)過程,而是在編程之前,先寫測試腳本或設(shè)計(jì)測試用例。
“測試先行”,使得開發(fā)人員對所做的設(shè)計(jì)或所寫的代碼有足夠的信心,同時(shí)也有勇氣進(jìn)行設(shè)計(jì)或代碼的快速重構(gòu),有利于快速迭代、持續(xù)交付。
嚴(yán)格來說,TDD是一種開發(fā)實(shí)踐。
從軟件開發(fā)角度來看,TDD是很棒的!
然而,把需求分析整理,軟件開發(fā),到產(chǎn)品化,再到用戶使用,這樣整個(gè)流程來看,單純的TDD還是有一定瑕疵的。
TDD只涉及到Developer(開發(fā)者),只能算是開發(fā)工程師個(gè)人工作方式的改變。而現(xiàn)代軟件開發(fā),往往都是“產(chǎn)品經(jīng)理(或業(yè)務(wù))、測試人員(QA)、開發(fā)人員”三者合作的成果,如果開發(fā)人員對業(yè)務(wù)需求理解的不正確,那么寫出的測試用例也是錯(cuò)的,這個(gè)問題是TDD解決不了的。
在不脫離敏捷開發(fā)的大前提下:業(yè)務(wù)層次,也可以采用類似TDD方法論。
換言之,需求分析時(shí)就確定需求(如:用戶故事)的驗(yàn)收標(biāo)準(zhǔn)。畢竟軟件最終是要給用戶使用的,要滿足用戶需求,解決用戶的痛點(diǎn)。否則就會(huì)變成程序員的自high!
上面的業(yè)務(wù)層次的敏捷測試,升華到方法論的高度,就是驗(yàn)收測試驅(qū)動(dòng)開發(fā)(Acceptance Test Driven Development,ATDD)。
ATDD的執(zhí)行邏輯,如下圖所示: