在SonarQube中如何计算覆盖的分支?

时间:2015-02-10 14:43:34

标签: sonarqube code-coverage cobertura jacoco

示例1

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

声纳显示0/2*n分支被测试覆盖。 (例如0/6的{​​{1}})

我们来看一个函数:

n=3

函数的数量(=所有可能的组合)等于f:{a1,...,an}->{true,false} ,这明显不同于|{true,false}|^|{a1,...,an}| = 2^n2*n的{​​{1}})。它也可以使用一组组合来证明。

如果我们想以下列方式写出来:

8 != 6

我们可以使用以下n=3序列覆盖所有分支 - if ( a1 ) { ... } else if ( a2 ) { ... } else if ( a3 ) { ... } ... 的示例:

  • T **
  • FT *
  • FFT

其中T = True,F = False,* =不关心

问:那么,为什么会有n

示例2

n=3

声纳显示2*n分支被测试覆盖。

问:如何实现if ( a != null && a.length > 0 ) { ... } ?我只看到3种可能的情况(输入):

  1. a!= null,a.length> 0
  2. a!= null,a.length< = 0
  3. a == null(第二个条件无法调整)
  4. 我知道SonarQube使用Cobertura或JaCoCo等其他工具进行报道,这个工具负责上述问题,但我没有指定它,因为我不知道。根据这些features,似乎覆盖工具可能是Cobertura或JaCoCo,因为它们具有线和分支度量。

    我想知道原则(他们如何决定使用这些指标)。

1 个答案:

答案 0 :(得分:1)

在SonarQube中,覆盖的分支(我们称之为#34;覆盖条件" Metrics Definition page中)确实由第三方工具提供。 SonarQube信任这些工具,因此它只是解析覆盖率报告,然后聚合" raw"用于计算分支覆盖率的数据。

默认情况下,SonarQube附带 JaCoCo (嵌入在Java Plugin中) - 但还有其他插件,如Cobertura plugin