示例1
if ( a1 || a2 || ... || an ) {
...
}
声纳显示0/2*n
分支被测试覆盖。 (例如0/6
的{{1}})
我们来看一个函数:
n=3
函数的数量(=所有可能的组合)等于f:{a1,...,an}->{true,false}
,这明显不同于|{true,false}|^|{a1,...,an}| = 2^n
(2*n
的{{1}})。它也可以使用一组组合来证明。
如果我们想以下列方式写出来:
8 != 6
我们可以使用以下n=3
序列覆盖所有分支 - if ( a1 ) {
...
} else if ( a2 ) {
...
} else if ( a3 ) {
...
}
...
的示例:
其中T = True,F = False,* =不关心
问:那么,为什么会有n
?
示例2
n=3
声纳显示2*n
分支被测试覆盖。
问:如何实现if ( a != null && a.length > 0 ) {
...
}
?我只看到3种可能的情况(输入):
我知道SonarQube使用Cobertura或JaCoCo等其他工具进行报道,这个工具负责上述问题,但我没有指定它,因为我不知道。根据这些features,似乎覆盖工具可能是Cobertura或JaCoCo,因为它们具有线和分支度量。
我想知道原则(他们如何决定使用这些指标)。
答案 0 :(得分:1)
在SonarQube中,覆盖的分支(我们称之为#34;覆盖条件" Metrics Definition page中)确实由第三方工具提供。 SonarQube信任这些工具,因此它只是解析覆盖率报告,然后聚合" raw"用于计算分支覆盖率的数据。
默认情况下,SonarQube附带 JaCoCo (嵌入在Java Plugin中) - 但还有其他插件,如Cobertura plugin。