5.1 測試驅(qū)動開發(fā)


? ? 測試驅(qū)動開發(fā)(Test-Driven Development,TDD)是一種軟件開發(fā)方法論,其核心理念是在編寫代碼之前先編寫測試代碼。TDD鼓勵開發(fā)人員在編寫實(shí)際代碼之前先定義測試用例,然后逐步編寫足夠的代碼來滿足這些測試用例,以此驅(qū)動代碼的開發(fā)過程。
? ? 本章節(jié)的內(nèi)容主要是強(qiáng)調(diào)測試的重要性,而非重點(diǎn)介紹測試驅(qū)動開發(fā)的方法論,自動化的測試是軟件開發(fā)過程中非常重要的環(huán)節(jié),但是我們在軟件開發(fā)過程中卻經(jīng)常的忽略這個環(huán)節(jié)。
自動化的測試,可以滿足軟件的如下幾個關(guān)鍵要素:
自動化測試是代碼質(zhì)量的主要保障手段
領(lǐng)域驅(qū)動設(shè)計設(shè)計中將業(yè)務(wù)模型設(shè)計從數(shù)據(jù)庫設(shè)計中轉(zhuǎn)移出來,即是為了模型的設(shè)計,其實(shí)也是為了滿足模型的測試方便。
自動化測試是實(shí)現(xiàn)軟件可持續(xù)維護(hù)的重要保障方式
自動化測試也是CI/CD過程中非常重要的過程。
? ? 甚至有些時候能否實(shí)現(xiàn)自動化測試,比能否完成功能更重要。從今天我們開始有一個認(rèn)知,即沒有自動化測試腳本的代碼,不能算是開發(fā)完成的功能。
? ? 假如我們開發(fā)一個財務(wù)系統(tǒng),那么自動化的測試就顯得非常重要,因?yàn)闆]有自動化測試作為質(zhì)量的保障,就好比是在裸奔,我們雖然實(shí)現(xiàn)了一個功能,可能對賬目數(shù)據(jù)產(chǎn)生影響。但是就只有財務(wù)數(shù)據(jù)重要嗎?實(shí)際任何系統(tǒng)上產(chǎn)生的一次錯誤其產(chǎn)生損失不僅僅只是功能本身所產(chǎn)生的錯誤影響,還需要花費(fèi)更大的成本去功能、以及修復(fù)數(shù)據(jù)產(chǎn)生的印象等一系列的連鎖錯誤,但是在沒有自動化測試作為保障的前提下,誰又能夠保證自己開發(fā)的功能就是沒有問題的呢?
? ? ?我之前發(fā)朋友圈說了一個話題,如果智造一架飛機(jī)的話,應(yīng)該先做什么?而我的答案是先要做飛機(jī)的模擬測試環(huán)境。因?yàn)榭偛荒苌咸炝嗽侔l(fā)現(xiàn)就已經(jīng)晚了。
下面我給大家演示一下vscode代碼的自動化測試效果:

https://github.com/microsoft/vscode
UI可以通過UI的測試框架來測試,例如html測試可以采用Selenium技術(shù)
業(yè)務(wù)模塊測試可以采用JUnit的測試方式去測試
對應(yīng)第三方不可控的服務(wù),可以采用mock的方式來模擬測試。
性能測試可以采用JMeter實(shí)現(xiàn)自動化的性能測試
從技術(shù)角度來說,今天沒有不可自動化測試的東西了,除非自己不想去做。

? ? ?當(dāng)然對應(yīng)集成測試,或許因?yàn)榄h(huán)境等方面的問題影響,存在一定的局限性,但是倘若我們能夠保證自己模塊的準(zhǔn)確性的,其實(shí)就已經(jīng)非常成功了,對于集成測試環(huán)境層面的影響,可以考慮采用容器化的技術(shù)來保持環(huán)境的一致性,然后再編寫集成測試的自動化腳本。