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