您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
用Cobertura做測試覆蓋率
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2013/1/28 13:59:40 ] 推薦標(biāo)簽:

Cobertura 是一種開源工具,它通過檢測基本的代碼,并觀察在測試包運行時執(zhí)行了哪些代碼和沒有執(zhí)行哪些代碼,來測量測試覆蓋率。除了找出未測試到的代碼并發(fā)現(xiàn) bug 外,Cobertura 還可以通過標(biāo)記無用的、執(zhí)行不到的代碼來優(yōu)化代碼,還可以提供 API 實際操作的內(nèi)部信息。Elliotte Rusty Harold 將與您分享如何利用代碼覆蓋率的佳實踐來使用 Cobertura。

盡管測試先行編程(test-first programming)和單元測試已不能算是新概念,但測試驅(qū)動的開發(fā)仍然是過去 10 年中重要的編程創(chuàng)新。好的一些編程人員在過去半個世紀(jì)中一直在使用這些技術(shù),不過,只是在近幾年,這些技術(shù)才被廣泛地視為在時間及成本預(yù)算內(nèi)開發(fā)健壯的無缺陷軟件的關(guān)鍵所在。但是,測試驅(qū)動的開發(fā)不能超過測試所能達到的程度。測試改進了代碼質(zhì)量,但這也只是針對實際測試到的那部分代碼而言的。您需要有一個工具告訴您程序的哪些部分沒有測試到,這樣可以針對這些部分編寫測試代碼并找出更多 bug。

Mark Doliner 的 Cobertura (cobertura 在西班牙語是覆蓋的意思)是完成這項任務(wù)的一個免費 GPL 工具。Cobertura 通過用額外的語句記錄在執(zhí)行測試包時,哪些行被測試到、哪些行沒有被測試到,通過這種方式來度量字節(jié)碼,以便對測試進行監(jiān)視。然后它生成一個 HTML 或者 XML 格式的報告,指出代碼中的哪些包、哪些類、哪些方法和哪些行沒有測試到。可以針對這些特定的區(qū)域編寫更多的測試代碼,以發(fā)現(xiàn)所有隱藏的 bug。

閱讀 Cobertura 輸出

我們首先查看生成的 Cobertura 輸出。圖 1 顯示了對 Jaxen 測試包運行 Cobertura 生成的報告(請參閱 參考資料)。從該報告中,可以看到從很好(在 org.jaxen.expr.iter 包中幾乎是 )到極差(在 org.jaxen.dom.html 中完全沒有覆蓋)的覆蓋率結(jié)果。


圖 1. Jaxen 的包級別覆蓋率統(tǒng)計數(shù)據(jù)

Cobertura 通過被測試的行數(shù)和被測試的分支數(shù)來計算覆蓋率。第一次測試時,兩種測試方法之間的差別并不是很重要。Cobertura 還為類計算平均 McCabe 復(fù)雜度(請參閱 參考資料)。

可以深入挖掘 HTML 報告,了解特定包或者類的覆蓋率。圖 2 顯示了 org.jaxen.function 包的覆蓋率統(tǒng)計。在這個包中,覆蓋率的范圍從 SumFunction 類的 到 IdFunction 類的僅為 5%。

圖 2. org.jaxen.function 包中的代碼覆蓋率

進一步深入到單獨的類中,具體查看哪一行代碼沒有測試到。圖 3 顯示了 NameFunction 類中的部分覆蓋率。左邊一欄顯示行號。后一欄顯示了執(zhí)行測試時這一行被執(zhí)行的次數(shù)?梢钥闯觯 112 行被執(zhí)行了 100 次,第 114 行被執(zhí)行了 28 次。用紅色突出顯示的那些行則根本沒有測試到。這個報告表明,雖然從總體上說該方法被測試到了,但實際上還有許多分支沒有測試到。

上一頁123下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd