一、目的
對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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
