代碼覆蓋率
在白盒測試中,主要使用代碼覆蓋率來評判白盒測試完成的程度抽碌。代碼覆蓋率是指:在測試中,所執(zhí)行的源代碼占全部源代碼的比例。
JaCoCo介紹
JaCoCo是一個開源的覆蓋率工具(官網(wǎng)地址:http://www.eclemma.org/jacoco/)肚逸,它針對的開發(fā)語言是java爷辙,其使用 方法很靈活,可以嵌入到Ant朦促、Maven中膝晾;可以作為Eclipse插件,可以使用其JavaAgent技術監(jiān)控Java程序等等务冕。
JaCoCo執(zhí)行最小的java版本需要Java1.5血当,支持java1.8;
JaCoCo通過注入來修改和生成java字節(jié)碼禀忆,使用的是ASM庫臊旭;
很多第三方的工具提供了對JaCoCo的集成,如sonar箩退、Jenkins等离熏。
JaCoCo包含了多種尺度的覆蓋率計數(shù)器,包含:
指令級覆蓋(Instructions,C0coverage),分支 (Branches,C1coverage)戴涝、圈復雜度(CyclomaticComplexity)滋戳、行覆蓋(Lines)、方法覆蓋(non- abstract methods)啥刻、類覆蓋(classes)奸鸯。
行覆蓋率:度量被測程序的每行代碼是否被執(zhí)行,判斷標準行中是否至少有一個指令被執(zhí)行郑什。
類覆蓋率:度量計算class類文件是否被執(zhí)行府喳。
分支覆蓋率:度量if和switch語句的分支覆蓋情況,計算一個方法里面的總分支數(shù)蘑拯,確定執(zhí)行和不執(zhí)行的分支數(shù)量钝满。
方法覆蓋率:度量被測程序的方法執(zhí)行情況,是否執(zhí)行取決于方法中是否有至少一個指令被執(zhí)行申窘。
指令覆蓋:計數(shù)單元是單個java二進制代碼指令弯蚜,指令覆蓋率提供了代碼是否被執(zhí)行的信息,度量完全獨立源碼格式剃法。
圈復雜度:在(線性)組合中碎捺,計算在一個方法里面所有可能路徑的最小數(shù)目,缺失的復雜度同樣表示測試案例沒有完全覆蓋到這個模塊(圈復雜度可以理解為覆蓋所有的可能情況最少使用的測試用例數(shù))贷洲。
JaCoCo插件下載
Eclipse 的maketetpalce 中搜索eclemma 插件收厨,然后默認安裝。
和同類產(chǎn)品比較
市面上流行的單元測試覆蓋率工具還有 Clover(商用) 和 Cobertura优构。和它們相比诵叁,JaCoCo 有如下優(yōu)勢:
JaCoCo 擁有友好的授權(quán)形式。JaCoCo 使用了 Eclipse Public License钦椭,方便個人用戶和商業(yè)用戶使用拧额。而 Clover 對于商業(yè)用戶是收費的碑诉。
JaCoCo被良好地集成進各種工具中。在Java 社區(qū)里侥锦,很多流行的工具都可以集成 JaCoCo进栽,比如 SonarQube、Jenkins恭垦、Netbeans快毛、Eclipse、IntelliJ IDEA署照、Gradle 等祸泪。
JaCoCo社區(qū)非常活躍建芙,它是目前唯一支持 Java 8 的單元測試覆蓋率工具没隘。而且關于JaCoCo的文檔相對較多,降低了學習門檻禁荸。
在Github上 Jacoco star 為1044 而Cobertura start 為22右蒲。
代碼覆蓋率統(tǒng)計
通用統(tǒng)計內(nèi)容
主要統(tǒng)計語句覆蓋率、分支覆蓋率赶熟、方法覆蓋率和類覆蓋率
報告生成
1.運行測試用例瑰妄,選中用例或者工程,右鍵Coverage As>JUnit Test
2.用例執(zhí)行完畢后映砖,點擊Export Session间坐,如下圖所示
選擇要查看的用例執(zhí)行歷史記錄,保存到磁盤指定位置邑退,如下圖所示:
報告展示
在磁盤保存的目錄中打開生成的index.html竹宋,如下圖所示
看到具體包的代碼覆蓋率
點擊包鏈接,查看包中具體類的代碼覆蓋率
點擊類鏈接地技,查看類中具體方法的代碼覆蓋率
點擊方法鏈接蜈七,查看類中具體方法的執(zhí)行情況
對上圖中的顏色標記進行解釋
分支覆蓋
l? 紅色鉆石:無覆蓋,沒有分支被執(zhí)行莫矗。
l? 黃色鉆石:部分覆蓋飒硅,部分分支被執(zhí)行。
l? 綠色鉆石:全覆蓋作谚,所有分支被執(zhí)行三娩。
代碼行覆蓋
l? 紅色背景:無覆蓋,該行的所有指令均無執(zhí)行妹懒。
l? 黃色背景:部分覆蓋尽棕,該行部分指令被執(zhí)行。
l? 綠色背景:全覆蓋彬伦,該行所有指令被執(zhí)行滔悉。