通過(guò)學(xué)習(xí)TDD以及三個(gè)月來(lái)?xiàng)畈┑亩啻窝詡魃斫毯退麑懙囊恍┪臋n,得到了下面這一套工作流程:
1. 獲得任務(wù)。即項(xiàng)目經(jīng)理安排的任務(wù)。任務(wù)往往不止一項(xiàng)。將它們寫入周工作計(jì)劃表或者月工作計(jì)劃表。
2. 選擇任務(wù)。每天開始工作之前,將今天將要完成的任務(wù)寫入工作計(jì)劃列表。并選擇自己最有把握完成的任務(wù)作為當(dāng)前任務(wù)。
3. 分析并分解任務(wù)。將當(dāng)前任務(wù)分解成一個(gè)個(gè)相對(duì)簡(jiǎn)單的問(wèn)題,分解的問(wèn)題最好是能在短時(shí)間之內(nèi)能完成,并將它們寫入工作列表。
4. 寫測(cè)試列表。選擇一個(gè)簡(jiǎn)單的問(wèn)題(此時(shí)可以為該方法取名了),并將所要完成的所有功能寫入工作列表。這就是方法注釋中的功能注釋。并且將每一項(xiàng)功能所對(duì)應(yīng)的單元測(cè)試記錄下來(lái),寫入測(cè)試列表。
5. 選擇測(cè)試。從測(cè)試列表中選擇那個(gè)具有指導(dǎo)意義而且自己認(rèn)為最有把握實(shí)現(xiàn)的一項(xiàng)。如:一個(gè)數(shù)值對(duì)象類,也許對(duì)我來(lái)說(shuō),實(shí)現(xiàn)equals()方法是最有把握的,那我就可以選擇它作為我的當(dāng)前測(cè)試。
6. 編寫測(cè)試數(shù)據(jù)。寫一個(gè)容易讓人理解的必須實(shí)現(xiàn)的測(cè)試數(shù)據(jù)列表,盡量使用顯然數(shù)據(jù)。如:用 String 表示 IP 地址 "255.255.255.255" 轉(zhuǎn)換為 int ,在我們寫測(cè)試數(shù)據(jù)時(shí)應(yīng)這樣寫: (255 << 24) + (255 << 16) + (255 << 8) + 255 ,而不應(yīng)該寫成“ -1 ”。
7. 編寫測(cè)試。選擇一項(xiàng)最容易讓測(cè)試通過(guò)的測(cè)試數(shù)據(jù)加入測(cè)試方法。如:實(shí)現(xiàn)equals()方法中“比較兩個(gè)不是同類的對(duì)象返回false”的測(cè)試是最容易實(shí)現(xiàn)的,我就可以將它加入是最容易實(shí)現(xiàn)的,那就先實(shí)現(xiàn)它吧!斷言優(yōu)先,然后加入為了讓斷言通過(guò)編譯的一切準(zhǔn)備條件。
8. 運(yùn)行測(cè)試,不可運(yùn)行狀態(tài)。
9. 編寫功能代碼,使之達(dá)到可運(yùn)行狀態(tài)。
10. 重構(gòu),消除重復(fù)設(shè)計(jì)。
11. 往測(cè)試方法中增加一個(gè)新的小測(cè)試。
12. 運(yùn)行測(cè)試,不可運(yùn)行狀態(tài)。
13. 修改功能代碼,使之達(dá)到可運(yùn)行狀態(tài)。
14. 重構(gòu)。消除重復(fù)設(shè)計(jì)。
15. 重復(fù) 12-15 。
16. 當(dāng)無(wú)論如何也不能讓該測(cè)試通過(guò)的時(shí)候,認(rèn)真想一想是不是哪里出大問(wèn)題了,如果實(shí)在想不出來(lái)的話,就將現(xiàn)有代碼扔掉,重新開始。
17. 所有測(cè)試都運(yùn)行通過(guò)之后,仔細(xì)檢查所有代碼,看是否還有值得重構(gòu)的地方,并重構(gòu)。
18. 提交 (check in) 。
19. 再選擇測(cè)試列表中的下一個(gè)測(cè)試。重復(fù)以上步驟。
20. 當(dāng)要離開工作的時(shí)間比較久時(shí),若有某個(gè)任務(wù)未完成,則留下一個(gè)不完整測(cè)試,以便于回到工作崗位時(shí)能迅速回憶起當(dāng)時(shí)寫該代碼時(shí)的想法,并接著寫下去。
|