一、目的
對(duì)Jacoco代碼覆蓋率統(tǒng)計(jì)維度、報(bào)告字段說(shuō)明、報(bào)告詳細(xì)分析描述。并為精準(zhǔn)測(cè)試、健壯性測(cè)試提供指導(dǎo)。
二、Jacoco代碼覆蓋率統(tǒng)計(jì)維度
Jacoco是從代碼指令(Instructions, Coverage),分支(Branches, Coverage),圈復(fù)雜度(Cyclomatic Complexity),行(Lines),方法(Methods),類(Classes)等維度進(jìn)行分析的。
三、覆蓋率報(bào)告字段說(shuō)明

四、Jacoco覆蓋率報(bào)告詳細(xì)分析
4.1 目錄結(jié)構(gòu)
4.1.1一級(jí)目錄-group

手動(dòng)收集生成的報(bào)告,展示的時(shí)build.xml的 group name,若有多個(gè)group name則顯示多個(gè)。
組的覆蓋率取決于包的覆蓋情況。
注:報(bào)告的一級(jí)目錄展示以組為單位。
4.1.2 二級(jí)目錄-包名

展示當(dāng)前分組下面所有的包。
包的覆蓋率取決于類的覆蓋情況。
4.1.3 三級(jí)目錄-類名

展示當(dāng)前分組>包下面所有的類。
類的覆蓋率取決于方法的覆蓋情況。
4.1.4 四級(jí)目錄-方法名

展示當(dāng)前分組>包>類下面的所有方法。
方法的覆蓋率取決于方法內(nèi)代碼覆蓋的情況。
4.2 覆蓋率報(bào)告詳細(xì)分析

注:報(bào)告中涉及字段的名稱詳見(jiàn)3覆蓋率報(bào)告字段詳細(xì)說(shuō)明。
4.2.1 Missed Instructons

分組:紅色進(jìn)度條表未覆蓋,綠色進(jìn)度條表示已覆蓋,Cov 為總體覆蓋率。
Total:51379 表示沒(méi)有覆蓋的指令,64756 表示總的指令
Cov 表示覆蓋率。
Jacoco 計(jì)算的最小單位就是字節(jié)碼指令。指令覆蓋率表明了在所有的指令中,哪些被執(zhí)行過(guò)以及哪些沒(méi)有被執(zhí)行。這項(xiàng)指數(shù)完全獨(dú)立于源碼格式并且在任何情況下有效,不需要類文件的調(diào)試信息。
4.2.2 Missed Branches

分組:紅色進(jìn)度條表未覆蓋,綠色進(jìn)度條表示已覆蓋,Cov為總體覆蓋率。
Total:4307表示沒(méi)有覆蓋的分支,4954表示總的分支,Cov表示總體覆蓋率。
實(shí)例分析一


Missed Instructions覆蓋率100%,但分支覆蓋率為75%; 原因:所有代碼行都覆蓋并不代表所有分支都覆蓋完整。
分析:urls!=null這個(gè)條件已覆蓋,但urls=null這個(gè)條件還沒(méi)有覆蓋 ;所有的代碼行都有覆蓋到、但分支還沒(méi)有覆蓋完整、所以Instructions的覆蓋率100%、Braches的覆蓋率75%。
實(shí)例分析二

分析:if(StringUtils.hasText(strLike)) 只執(zhí)行了結(jié)果為flase的條件,沒(méi)有執(zhí)行結(jié)為true的條件,導(dǎo)致大括號(hào)的內(nèi)容沒(méi)有被執(zhí)行;所以Missed Instructions、Missed Braches覆蓋率都非100%。
4.2.3 Missed Cxty

此方法里面有1個(gè)for(1個(gè)for占2個(gè)條件)循環(huán)、8個(gè)if,圈復(fù)雜度共計(jì)10個(gè)。有兩個(gè)條件沒(méi)有被覆蓋所以Missed為2,Cxty為10(表示總數(shù))。
while, for, if,switch每個(gè)都是一個(gè)判定節(jié)點(diǎn)。嵌套的都是加1。
4.2.4Missed.Lines、Methods、classes

Classes表示類、Methods表示方法、Lines表示代碼行。
Missed表示未覆蓋數(shù)量,Classes表示共有X個(gè)類、Methods表示共有X個(gè)方法,Lines表示共有多少行代碼(例如:else是不統(tǒng)計(jì)到Lines的)。
4.3 覆蓋率標(biāo)識(shí)
4.3.1 條件覆蓋
紅鉆:表示未覆蓋
黃鉆:表示部分覆蓋
綠鉆:表示全部覆蓋
注:條件覆蓋都是用鉆表示。
4.3.2 Lines覆蓋
紅色背景:無(wú)覆蓋,該行的所有指令均無(wú)執(zhí)行。
背景:部分覆蓋,該行部分指令被執(zhí)行。
綠色背景:全覆蓋,該行所有指令被執(zhí)行。