jacoco代碼覆蓋率報告分析


一、目的

對Jacoco代碼覆蓋率統計維度、報告字段說明、報告詳細分析描述。並為精准測試、健壯性測試提供指導。

二、Jacoco代碼覆蓋率統計維度

Jacoco是從代碼指令(Instructions, Coverage),分支(Branches, Coverage),圈復雜度(Cyclomatic Complexity),行(Lines),方法(Methods),類(Classes)等維度進行分析的。

三、覆蓋率報告字段說明

 
報告覆蓋率字段說明

四、Jacoco覆蓋率報告詳細分析

4.1 目錄結構

4.1.1一級目錄-group

 
代碼覆蓋率報告

手動收集生成的報告,展示的時build.xml的 group name,若有多個group name則顯示多個。

組的覆蓋率取決於包的覆蓋情況。

注:報告的一級目錄展示以組為單位。

4.1.2 二級目錄-包名

 
 

展示當前分組下面所有的包。

包的覆蓋率取決於類的覆蓋情況。

4.1.3 三級目錄-類名

 
 

展示當前分組>包下面所有的類。

類的覆蓋率取決於方法的覆蓋情況。

4.1.4 四級目錄-方法名

 
 

展示當前分組>包>類下面的所有方法。

方法的覆蓋率取決於方法內代碼覆蓋的情況。

4.2 覆蓋率報告詳細分析

 
 

注:報告中涉及字段的名稱詳見3覆蓋率報告字段詳細說明。

4.2.1 Missed Instructons

 
 

分組:紅色進度條表未覆蓋,綠色進度條表示已覆蓋,Cov 為總體覆蓋率。

Total:51379 表示沒有覆蓋的指令,64756 表示總的指令

Cov 表示覆蓋率。

Jacoco 計算的最小單位就是字節碼指令。指令覆蓋率表明了在所有的指令中,哪些被執行過以及哪些沒有被執行。這項指數完全獨立於源碼格式並且在任何情況下有效,不需要類文件的調試信息。

4.2.2 Missed Branches

 
 

分組:紅色進度條表未覆蓋,綠色進度條表示已覆蓋,Cov為總體覆蓋率。

Total:4307表示沒有覆蓋的分支,4954表示總的分支,Cov表示總體覆蓋率。

實例分析一

 
 
 
 

Missed Instructions覆蓋率100%,但分支覆蓋率為75%; 原因:所有代碼行都覆蓋並不代表所有分支都覆蓋完整。

分析:urls!=null這個條件已覆蓋,但urls=null這個條件還沒有覆蓋 ;所有的代碼行都有覆蓋到、但分支還沒有覆蓋完整、所以Instructions的覆蓋率100%、Braches的覆蓋率75%。

實例分析二

 
 

分析:if(StringUtils.hasText(strLike)) 只執行了結果為flase的條件,沒有執行結為true的條件,導致大括號的內容沒有被執行;所以Missed Instructions、Missed Braches覆蓋率都非100%。

4.2.3 Missed Cxty

 
 

此方法里面有1個for(1個for占2個條件)循環、8個if,圈復雜度共計10個。有兩個條件沒有被覆蓋所以Missed為2,Cxty為10(表示總數)。

while, for, if,switch每個都是一個判定節點。嵌套的都是加1。

4.2.4Missed.Lines、Methods、classes

 
 

Classes表示類、Methods表示方法、Lines表示代碼行。

Missed表示未覆蓋數量,Classes表示共有X個類、Methods表示共有X個方法,Lines表示共有多少行代碼(例如:else是不統計到Lines的)。

4.3 覆蓋率標識

4.3.1 條件覆蓋

紅鑽:表示未覆蓋

黃鑽:表示部分覆蓋

綠鑽:表示全部覆蓋

注:條件覆蓋都是用鑽表示。

4.3.2 Lines覆蓋

紅色背景:無覆蓋,該行的所有指令均無執行。

背景:部分覆蓋,該行部分指令被執行。

綠色背景:全覆蓋,該行所有指令被執行。



作者:奔跑的小小魚
鏈接:https://www.jianshu.com/p/ef987f1b6f2f
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM