在團隊中進行單元測試/TDD的12 條經驗 讀書筆記


原文:http://pauloortins.com/lessons-unit-tests/

翻譯:

團隊中進行單元測試/TDD的12 條經驗

摘要:測試可以幫助項目團隊找出代碼中存在的問題,TDD方式更是將測試放在了開發工作的首位那麼在團隊中該如何應用單元測試和TDD呢?開發者Paulo Ortins結合自身經歷給出了本文中的12個經驗教訓

測試可以幫助項目團隊找出代碼中存在的問題,TDD方式更是將測試放在了開發工作的首位那麼在團隊中該如何應用單元測試和TDD呢?開發者Paulo Ortins結合自身經歷給出了本文中的12個經驗教訓 文章翻譯如下。

背景

兩年前,我在一個Web項目開發組中,項目的目標是編寫一個類似Excel的用來計算產品/服務價格的Web應用程序。項目團隊被分成3部分——開發團隊需求團隊和QA團隊。隨着項目越做越大,而我們沒有使用任何形式的自動化測試(QA團隊使用手工測試),結果導致項目的測試時間比開發時間還要多每進行一次小的改動,QA團隊都要花費幾個小時來做測試。

有一天,我參加了一個開發者會議,並與其他程序員談到了這些問題他們建議我去學習單元測試、驗收測試和TDD (Test-Driven Development,測試驅動開發)

我的經驗總結

下面是我在學習集成測試/TDD過程中的一些經驗教訓,希望能夠對大家有所幫助

1.  不要第一次就在真實項目中嘗試TDD

這可能會讓你的項目很難進展在採用TDD之前,你必須要了解TDD的工作流程以及如何去模擬對象(mock objects)、如何去模擬框架內部、如何組織測試等方面知識因此,如果你的團隊還沒有準備好,就採用TDD可能會拖慢你的項目,從而錯過最終交付期限。

2.  採用編程道場 (Coding Dojo)方式學習TDD

我們發現編程道場是對新進入團隊的開發者培訓TDD以及提升他們編程技能的最好的方式

編程道場是一種幫助提高編程技能的訓練方法。一般是在一個會議室裏,有一臺連接投影儀的電腦。每次道場還要有一個挑戰題目每次有兩個人在電腦前結對編程來試圖解決挑戰的題目,並且由其他參加者提供建議。所有的參加者都要輪換到結對編程裏進行演練(來自維基百科 

3.  應用TDD之前嘗試說服你的整個團隊

沒有什麼比團隊中存在“破壞者”角色更令人沮喪的了如果團隊中大部分人都在朝着TDD努力,而個別開發者所做的工作有可能毀掉這些努力,比如提交失敗的測試代碼等我曾經就與這類人一起工作過在團隊開始TDD開發之前,一定要讓所有人明白它的好處,並瞭解如何測試可以使軟件減少bug、如何重構代碼而不用擔心破壞整個項目等等

4.  寫足夠多的測試

構建一個測試套件,就等於構建了一個bug防護盾當團隊重構或改進軟件時應該完全信任這個“盾”。如果這個盾有缺口,那麼我們在更改代碼時會增加引入未知bug的風險不要強求測試套件覆蓋100%的代碼,這是不可能的,而且相當耗時,但是,覆蓋大部分代碼是完全可以實現的。一個好的準則就是測試所有可能會出現問題的地方

5.  使用覆蓋率工具

覆蓋率工具將會報告測試套件的缺口藉助這些工具,可以很容易識別哪些代碼沒有測試。這些工具可以給我們一個直觀的認識,比如藍/綠着色線表示正在測試中的代碼,紅色着色線表示沒有測試如果你是一個.NET程序員,Visual Studio旗艦版會帶有這個功能;如果你是一個Java程序員,你可以使用EclEmma 

6.  測試速度要快

當在構建軟件時,我們永遠都在追趕最後的交付期限我們的測試應該幫助我們實現這一目標,而不是耗時和延遲

如果寫測試用例花費太長時間,在最後期限到來之前,團隊可能不會再花時間寫測試如果在運行測試上花費太長時間,團隊可能不會在每次更改代碼後都運行它們

7.  不要忽略失敗的測試

如果你的團隊對第1次失敗的測試不在意,那麼他們對第23、4次失敗的測試也不會太在意這種情況下,測試套件反饋的問題將會被忽略,測試也不會對軟件質量有太大幫助。

8.  結對編程有助於團隊應用TDD

當我們首次試圖採用TDD時,或者最終交付期限臨近時,我們可能會忘了寫測試,而只顧寫生產代碼結對編程可以阻止這種偷工減料的現象,強制團隊成員編寫測試。

9.  保持你的測試代碼整潔

爲了提高工作效率,我們的測試代碼可能不會像生產代碼一樣整潔由於軟件發生改變時,測試代碼也必須改變,測試代碼也會越積越多,這樣一來,會導致最終測試代碼也很難維護。

10  測試應該有且只有一個失敗的理由

這個理由就是發現bug如果你的測試代碼有大量的斷言,你就需要小心。如果生產代碼中的函數和類只有一個響應,那我們的測試代碼也應該只測試這一個事件通過這種方式,將很容易找出失敗的測試,並弄清楚什麼地方出問題了。

11.  編寫單元測試將節省調試時間

通常在調試代碼、尋找bug時會花費大量的時間,一旦你編寫了單元測試,你將會在代碼的每一塊得到一個實時反饋,這將讓你更容易找到bug,節省調試時間

12.  持之以恆

應用TDD可以改變我們的心態對於部分開發者而言,開始寫測試很難,而在寫生產代碼之前寫測試就更難了。重要的是,要持之以恆地寫測試,一旦你的團隊完全適應了這種方法,生產效率會成倍提升


發佈了154 篇原創文章 · 獲贊 24 · 訪問量 56萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章