天天看點

Jacoco - 代碼覆寫率報告分析

一、目的

對Jacoco代碼覆寫率統計次元、報告字段說明、報告詳細分析描述。并為精準測試、健壯性測試提供指導。

二、Jacoco代碼覆寫率統計次元

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

三、覆寫率報告字段說明

Jacoco - 代碼覆寫率報告分析

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

4.1 目錄結構

4.1.1一級目錄 - group

Jacoco - 代碼覆寫率報告分析

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

組的覆寫率取決于包的覆寫情況。

注:報告的一級目錄展示以組為機關。

4.1.2 二級目錄 - 包名

Jacoco - 代碼覆寫率報告分析

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

包的覆寫率取決于類的覆寫情況。

4.1.3 三級目錄 - 類名

Jacoco - 代碼覆寫率報告分析

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

類的覆寫率取決于方法的覆寫情況。

4.1.4 四級目錄 - 方法名

Jacoco - 代碼覆寫率報告分析

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

方法的覆寫率取決于方法内代碼覆寫的情況。

4.2 覆寫率報告詳細分析

Jacoco - 代碼覆寫率報告分析

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

4.2.1 Missed Instructons

Jacoco - 代碼覆寫率報告分析

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

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

Cov 表示覆寫率。

Jacoco 計算的最小機關就是位元組碼指令。指令覆寫率表明了在所有的指令中,哪些被執行過以及哪些沒有被執行。這項指數完全獨立于源碼格式并且在任何情況下有效,不需要類檔案的調試資訊。

4.2.2 Missed Branches

Jacoco - 代碼覆寫率報告分析

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

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

執行個體分析一

Jacoco - 代碼覆寫率報告分析
Jacoco - 代碼覆寫率報告分析

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

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

執行個體分析二

Jacoco - 代碼覆寫率報告分析

分析:if(StringUtils.hasText(strLike)) 隻執行了結果為flase的條件,沒有執行結為true的條件,導緻大括号的内容沒有被執行;是以Missed Instructions、Missed Braches覆寫率都非100%。

4.2.3 Missed Cxty

Jacoco - 代碼覆寫率報告分析

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

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

4.2.4 Missed.Lines、Methods、classes

Jacoco - 代碼覆寫率報告分析

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

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

4.3 覆寫率辨別

  • 紅鑽:表示未覆寫
  • 黃鑽:表示部分覆寫
  • 綠鑽:表示全部覆寫
  • 注:條件覆寫都是用鑽表示。
  • 紅色背景:無覆寫,該行的所有指令均無執行。
  • 背景:部分覆寫,該行部分指令被執行。
  • 綠色背景:全覆寫,該行所有指令被執行。

繼續閱讀