背景
一個(gè)高效的軟件開(kāi)發(fā)過(guò)程對軟件開(kāi)發(fā)人員來(lái)說(shuō)是至關(guān)重要的,決定著(zhù)開(kāi)發(fā)是痛苦的掙扎,還是不斷進(jìn)步的喜悅。國人對軟件藍領(lǐng)的不屑,對繁瑣冗長(cháng)的傳統開(kāi)發(fā)過(guò)程的不耐,使大多數開(kāi)發(fā)人員無(wú)所適從。最近興起的一些軟件開(kāi)發(fā)過(guò)程相關(guān)的技術(shù),提供一些比較高效、實(shí)用的軟件過(guò)程開(kāi)發(fā)方法。其中比較基礎、關(guān)鍵的一個(gè)技術(shù)就是測試驅動(dòng)開(kāi)發(fā)(Test-Driven Development)。雖然TDD光大于極限編程,但測試驅動(dòng)開(kāi)發(fā)完全可以單獨應用。下面就從開(kāi)發(fā)人員使用的角度進(jìn)行介紹,使開(kāi)發(fā)人員用最少的代價(jià)盡快理解、掌握、應用這種技術(shù)。下面分優(yōu)勢,原理,過(guò)程,原則,測試技術(shù),Tips等方面進(jìn)行討論。
1. 優(yōu)勢
TDD的基本思路就是通過(guò)測試來(lái)推動(dòng)整個(gè)開(kāi)發(fā)的進(jìn)行。而測試驅動(dòng)開(kāi)發(fā)技術(shù)并不只是單純的測試工作。
需求向來(lái)就是軟件開(kāi)發(fā)過(guò)程中感覺(jué)最不好明確描述、易變的東西。這里說(shuō)的需求不只是指用戶(hù)的需求,還包括對代碼的使用需求。很多開(kāi)發(fā)人員最害怕的就是后期還要修改某個(gè)類(lèi)或者函數的接口進(jìn)行修改或者擴展,為什么會(huì )發(fā)生這樣的事情就是因為這部分代碼的使用需求沒(méi)有很好的描述。測試驅動(dòng)開(kāi)發(fā)就是通過(guò)編寫(xiě)測試用例,先考慮代碼的使用需求(包括功能、過(guò)程、接口等),而且這個(gè)描述是無(wú)二義的,可執行驗證的。
通過(guò)編寫(xiě)這部分代碼的測試用例,對其功能的分解、使用過(guò)程、接口都進(jìn)行了設計。而且這種從使用角度對代碼的設計通常更符合后期開(kāi)發(fā)的需求?蓽y試的要求,對代碼的內聚性的提高和復用都非常有益。因此測試驅動(dòng)開(kāi)發(fā)也是一種代碼設計的過(guò)程。
開(kāi)發(fā)人員通常對編寫(xiě)文檔非常厭煩,但要使用、理解別人的代碼時(shí)通常又希望能有文檔進(jìn)行指導。而測試驅動(dòng)開(kāi)發(fā)過(guò)程中產(chǎn)生的測試用例代碼就是對代碼的最好的解釋。
快樂(lè )工作的基礎就是對自己有信心,對自己的工作成果有信心。當前很多開(kāi)發(fā)人員卻經(jīng)常在擔心:“代碼是否正確?”“辛苦編寫(xiě)的代碼還有沒(méi)有嚴重bug?”“修改的新代碼對其他部分有沒(méi)有影響?”。這種擔心甚至導致某些代碼應該修改卻不敢修改的地步。測試驅動(dòng)開(kāi)發(fā)提供的測試集就可以作為你信心的來(lái)源。
當然測試驅動(dòng)開(kāi)發(fā)最重要的功能還在于保障代碼的正確性,能夠迅速發(fā)現、定位bug。而迅速發(fā)現、定位bug是很多開(kāi)發(fā)人員的夢(mèng)想。針對關(guān)鍵代碼的測試集,以及不斷完善的測試用例,為迅速發(fā)現、定位bug提供了條件。
我的一段功能非常復雜的代碼使用TDD開(kāi)發(fā)完成,真實(shí)環(huán)境應用中只發(fā)現幾個(gè)bug,而且很快被定位解決。您在應用后,也一定會(huì )為那種自信的開(kāi)發(fā)過(guò)程,功能不斷增加、完善的感覺(jué),迅速發(fā)現、定位bug的能力所感染,喜歡這個(gè)技術(shù)的。
那么是什么樣的原理、方法提供上面說(shuō)的這些好處哪?下面我們就看看TDD的原理。
2. 原理
測試驅動(dòng)開(kāi)發(fā)的基本思想就是在開(kāi)發(fā)功能代碼之前,先編寫(xiě)測試代碼。也就是說(shuō)在明確要開(kāi)發(fā)某個(gè)功能后,首先思考如何對這個(gè)功能進(jìn)行測試,并完成測試代碼的編寫(xiě),然后編寫(xiě)相關(guān)的代碼滿(mǎn)足這些測試用例。然后循環(huán)進(jìn)行添加其他功能,直到完全部功能的開(kāi)發(fā)。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/