介紹測試代碼覆蓋率的重要性
測試驅動開發(TDD)是極限編程的一個重要特點,它具有很多優點,并被越來越多的開發人員所接受。在測試驅動開發過程中,程序員經歷了編寫測試用例,實現功能,重構代碼這個不斷迭代的過程。實踐證明,這個過程能顯著提高我們的生產效率,并產生高質量的代碼。它還能給我們以自信,讓我們放心的重構自己的代碼。
測試代碼確實能夠保證代碼的質量,但如果你以為自己已經寫了一堆測試用例,并都能運行通過時,就能高枕無憂了,那么你錯了。隱藏的 Bug 也許只是在等待時機讓你的系統崩潰。這是什么原因呢?聰明的你肯定已經想到,測試代碼是用來保證功能代碼的質量的,但測試代碼的質量如何,我們不得而知。我們需要知道,我們辛苦編寫的測試代碼到底覆蓋了多少功能代碼,這就是我寫這篇文章的出發點,我將介紹一種測試代碼覆蓋率的工具 - EMMA。
介紹 EMMA
EMMA 是一個用于檢測和報告 JAVA 代碼覆蓋率的開源工具。它不但能很好的用于小型項目,很方便得得出覆蓋率報告,而且適用于大型企業級別的項目。
EMMA 有許多優點,首先你能免費得到它,并把它用于自己項目的開發。它支持許多種級別的覆蓋率指標:包,類,方法,語句塊(basic block)和行,特別是它能測出某一行是否只是被部分覆蓋,如條件語句短路的情況。它能生成 text,xml,html 等形式的報告,以滿足不同的需求,其 html 報告提供下鉆功能,我們能夠從 package 開始一步步鏈接到我們所關注的某個方法。EMMA 能和 Makefile 和 Ant 集成,便于應用于大型項目。特別還須指出的一點是,EMMA 的效率很高,這對于大型項目來說很重要。
EMMA 是通過向 .class 文件中插入字節碼的方式來跟蹤記錄被運行代碼信息的。EMMA 支持兩種模式:On the fly 和 Offline 模式。
On the fly 模式往加載的類中加入字節碼,相當于用 EMMA 實現的 application class loader 替代原來的 application class loader。
Offline 模式在類被加載前,加入字節碼。
On the fly 模式比較方便,缺點也比較明顯,如它不能為被 boot class loader 加載的類生成覆蓋率報告,也不能為像 J2EE 容器那種自己有獨特 class loader 的類生成覆蓋率報告。這時,我們能求助于 Offline 模式。
EMMA 也支持兩種運行方式:Command line 和 Ant。
命令行一般和 On the fly 模式一起適用,對于簡單的項目能夠快速產生覆蓋率報告。通過 Ant task 來運行 EMMA 的話,特別適用于大型的項目。
本文后面提供的實例主要是演示如何集成 EMMA 和 Ant,通過 Offline 模式產生覆蓋率報告。
示例項目
文章來源于領測軟件測試網 http://www.kjueaiud.com/