測試方面的最佳實(shí)踐:
1.測試驅(qū)動(dòng)開發(fā):先有測試再有開發(fā)。
我們一般的順序是先開發(fā)后測試,然則這個(gè)實(shí)踐要求我們先將測試想好,然后開發(fā)來滿足這些測試。
這個(gè)思路其實(shí)就是目標(biāo)驅(qū)動(dòng),我們先假設(shè)軟件已經(jīng)做好,那么我們先寫出測試用例,然后我們編寫的開發(fā)代碼應(yīng)該能通過這些測試用例。這樣思路的好處就是能讓我們想清楚目標(biāo),所有的開發(fā)都是有針對性的,減少無用功,提高工作效率,同時(shí)因?yàn)闇y試已經(jīng)寫好了,代碼的質(zhì)量會(huì)更加有保障。
這個(gè)思路其實(shí)是相當(dāng)優(yōu)秀的,但這個(gè)實(shí)踐可能是這么多最佳實(shí)踐中最難成功實(shí)施的!我們公司曾經(jīng)推行過一段時(shí)間,最終還是失敗告終。難以施行有以下原因:
1)開發(fā)人員普遍沒有這么高的編程素質(zhì)。
先不說測試驅(qū)動(dòng)開發(fā),我們往往連單元測試也做不到!測試驅(qū)動(dòng)開發(fā)其實(shí)就是要求我們先寫出單元測試代碼,然后再寫出滿足單元測試代碼的代碼。
2)編碼是一個(gè)循序漸進(jìn)的過程,不太可能一開始接口就想好并且后面不會(huì)變了。
我自己編寫代碼也不太可能一開始就完全想清楚類中的各個(gè)屬性方法,有時(shí)候會(huì)覺得方法名字不好會(huì)換掉,參數(shù)不太合適也會(huì)調(diào)整。如果我們先寫出測試的代碼,其實(shí)就要求我們先確定各類名稱以及各類的公開接口,但往往我們需要不斷調(diào)整,這樣就會(huì)導(dǎo)致開發(fā)代碼與測試代碼都需要同時(shí)調(diào)整,工作量就增大了。
3)達(dá)不到自動(dòng)化測試的技術(shù)層次。
自動(dòng)化測試需要工具支持,并不是所有公司都具備這樣的條件。
測試驅(qū)動(dòng)開發(fā)的意義還是很重大的,我有這樣的一些實(shí)踐建議:
1)先寫開發(fā)代碼,然后寫單元測試代碼。
2)編寫代碼時(shí),應(yīng)該先想清楚類職責(zé),類公開接口,然后再寫具體實(shí)現(xiàn)代碼。
3)某個(gè)類完成時(shí)或者階段性完成了一些功能時(shí),應(yīng)該馬上寫出相應(yīng)的測試代碼,并保證開發(fā)代碼能通過測試。
4)如果不能針對所有類都寫出測試類,那至少應(yīng)該針對重要的、核心的、被使用次數(shù)多的類編寫測試代碼。
5)單元測試應(yīng)該能做到自動(dòng)化。
2.自動(dòng)化測試:自動(dòng)化單元測試、自動(dòng)化UI測試。
自動(dòng)化單元測試,目前很多開發(fā)工具都支持,技術(shù)上問題不大,問題大的是大家不去執(zhí)行或者說是能力不夠執(zhí)行不了。
UI方面的自動(dòng)化測試就有點(diǎn)麻煩了,有這樣兩點(diǎn):
1)就算是比較好的自動(dòng)UI測試工具,也難以捕捉到軟件界面上所有的控件以及動(dòng)作。
2)軟件的界面經(jīng)常調(diào)整是很常見的時(shí)間,界面不凍結(jié),UI自動(dòng)化測試寸步難行。
要推行100%的自動(dòng)化測試難度還是很高的,不過應(yīng)該還是盡量自動(dòng)化測試,單元自動(dòng)化測試與性能自動(dòng)化測試在技術(shù)上是沒有問題的,是執(zhí)行的能力與決心問題。
自動(dòng)化測試這個(gè)最佳實(shí)踐與測試驅(qū)動(dòng)開發(fā)是緊密相關(guān)的,這兩個(gè)最佳實(shí)踐其實(shí)是整個(gè)極限編程中最核心、最精彩、要求最嚴(yán)格的兩個(gè)實(shí)踐。只要將這兩個(gè)實(shí)踐做好,代碼隨便你改,只要能通過測試就行,不用害怕需求變更帶來的代碼隱患,變就變,反正有自動(dòng)化測試全面檢查!
編碼方面的最佳實(shí)踐:
1)重構(gòu):不講究一次將代碼寫好,但需要重構(gòu)時(shí)應(yīng)該毫不猶豫。
重構(gòu)的意思是代碼的接口和實(shí)現(xiàn)功能不變,但修改代碼的具體實(shí)現(xiàn),從而使代碼的結(jié)構(gòu)、可讀性、性能、安全性等更好。
重構(gòu)因?yàn)橛袦y試驅(qū)動(dòng)以及自動(dòng)化測試這兩個(gè)實(shí)踐的支持,故不需要擔(dān)心重構(gòu)帶來的影響,萬一重構(gòu)失敗,取回原來的代碼便可。
2)結(jié)對編程:兩個(gè)人,組成一對,共用一臺(tái)電腦編程。
頭次聽說這個(gè),還覺得很難想象,兩個(gè)人坐在一起,只用一臺(tái)電腦,一個(gè)人寫代碼,另外一個(gè)看,過一會(huì)兩個(gè)人可以交換一下。
兩個(gè)人一起寫代碼,相當(dāng)于隨時(shí)在做同行評審,似乎效率降低了,但代碼的質(zhì)量得到保障,并且能保證所有代碼至少有兩個(gè)人了解的。
另外要注意的是:組成一對的兩個(gè)人,應(yīng)該水平相當(dāng)。
這個(gè)實(shí)踐很有意思,不