代碼覆蓋率
在白盒測試中,主要使用代碼覆蓋率來評判白盒測試完成的程度。代碼覆蓋率是指:在測試中,所執行的源代碼占全部源代碼的比例。
JaCoCo介紹
JaCoCo是一個開源的覆蓋率工具(官網地址:http://www.eclemma.org/jacoco/),它針對的開發語言是java,其使用 方法很靈活,可以嵌入到Ant、Maven中;可以作為Eclipse插件,可以使用其JavaAgent技術監控Java程序等等。
JaCoCo執行最小的java版本需要Java1.5,支持java1.8;
JaCoCo通過注入來修改和生成java字節碼,使用的是ASM庫;
很多第三方的工具提供了對JaCoCo的集成,如sonar、Jenkins等。
JaCoCo包含了多種尺度的覆蓋率計數器,包含:
指令級覆蓋(Instructions,C0coverage),分支 (Branches,C1coverage)、圈復雜度(CyclomaticComplexity)、行覆蓋(Lines)、方法覆蓋(non- abstract methods)、類覆蓋(classes)。
行覆蓋率:度量被測程序的每行代碼是否被執行,判斷標準行中是否至少有一個指令被執行。
類覆蓋率:度量計算class類文件是否被執行。
分支覆蓋率:度量if和switch語句的分支覆蓋情況,計算一個方法里面的總分支數,確定執行和不執行的分支數量。
方法覆蓋率:度量被測程序的方法執行情況,是否執行取決于方法中是否有至少一個指令被執行。
指令覆蓋:計數單元是單個java二進制代碼指令,指令覆蓋率提供了代碼是否被執行的信息,度量完全獨立源碼格式。
圈復雜度:在(線性)組合中,計算在一個方法里面所有可能路徑的最小數目,缺失的復雜度同樣表示測試案例沒有完全覆蓋到這個模塊(圈復雜度可以理解為覆蓋所有的可能情況最少使用的測試用例數)。
JaCoCo插件下載
Eclipse 的maketetpalce 中搜索eclemma 插件,然后默認安裝。
和同類產品比較
市面上流行的單元測試覆蓋率工具還有 Clover(商用) 和 Cobertura。和它們相比,JaCoCo 有如下優勢:
JaCoCo 擁有友好的授權形式。JaCoCo 使用了 Eclipse Public License,方便個人用戶和商業用戶使用。而 Clover 對于商業用戶是收費的。
JaCoCo被良好地集成進各種工具中。在Java 社區里,很多流行的工具都可以集成 JaCoCo,比如 SonarQube、Jenkins、Netbeans、Eclipse、IntelliJ IDEA、Gradle 等。
JaCoCo社區非常活躍,它是目前唯一支持 Java 8 的單元測試覆蓋率工具。而且關于JaCoCo的文檔相對較多,降低了學習門檻。
在Github上 Jacoco star 為1044 而Cobertura start 為22。
代碼覆蓋率統計
通用統計內容
主要統計語句覆蓋率、分支覆蓋率、方法覆蓋率和類覆蓋率
報告生成
1.運行測試用例,選中用例或者工程,右鍵Coverage As>JUnit Test
2.用例執行完畢后,點擊Export Session,如下圖所示
選擇要查看的用例執行歷史記錄,保存到磁盤指定位置,如下圖所示:
報告展示
在磁盤保存的目錄中打開生成的index.html,如下圖所示
看到具體包的代碼覆蓋率
點擊包鏈接,查看包中具體類的代碼覆蓋率
點擊類鏈接,查看類中具體方法的代碼覆蓋率
點擊方法鏈接,查看類中具體方法的執行情況
對上圖中的顏色標記進行解釋
分支覆蓋
l? 紅色鉆石:無覆蓋,沒有分支被執行。
l? 黃色鉆石:部分覆蓋,部分分支被執行。
l? 綠色鉆石:全覆蓋,所有分支被執行。
代碼行覆蓋
l? 紅色背景:無覆蓋,該行的所有指令均無執行。
l? 黃色背景:部分覆蓋,該行部分指令被執行。
l? 綠色背景:全覆蓋,該行所有指令被執行。