2015-02-10 78 views
1

實施例1SonarQube中涵蓋的分支是如何計算的?

if (a1 || a2 || ... || an) { 
    ... 
} 

聲納顯示0/2*n分支由測試所覆蓋。 (例如: - 0/6n=3

讓我們功能:

f:{a1,...,an}->{true,false} 

的函數(=所有可能的組合)的數量等於|{true,false}|^|{a1,...,an}| = 2^n2*n(​​爲n=3)明顯不同。它也可以用一些組合來演示。

如果我們想寫,如果以下列方式:

if (a1) { 
    ... 
} else if (a2) { 
      ... 
     } else if (a3) { 
      ... 
     } 
     ... 

,我們可以使用下面的n序列覆蓋所有分支 - 例如用於n=3

  • T **
  • FT *
  • FFT

其中T = TRUE,F =假,* =不在乎

問:那麼,爲什麼會出現2*n

實施例2

if (a != null && a.length > 0) { 
    ... 
} 

聲納顯示0/4分支由測試所覆蓋。

問:我該如何實現4/4?我只看到3種可能的情況下(輸入):!

  1. 一個= NULL,則爲a.length> 0
  2. 一個= NULL,則爲a.length < = 0
  3. 一個== NULL(第二條件不能調整)

我知道SonarQube使用另一種工具,如Cobertura或JaCoCo覆蓋,這個工具是負責上述問題,但我沒有指定它,因爲我不知道它。根據這些features,似乎覆蓋工具可能是Cobertura或JaCoCo,因爲它們具有行和分支度量標準。

我想知道原理(他們如何決定使用這些指標)。

回答

1

在SonarQube中,覆蓋分支(我們稱之爲「覆蓋條件」Metrics Definition page)確實由第三方工具提供。 SonarQube信任這些工具,因此它只是解析覆蓋率報告,然後彙總「原始」數據以計算分支覆蓋率。

默認情況下,SonarQube自帶JaCoCo(嵌入在Java Plugin) - 但也有其他插件,像Cobertura plugin