SonarQube - 条件覆盖是否就是分支覆盖?

9
SonarQube将“条件”覆盖率描述为:
在包含一些布尔表达式的每行代码上,条件覆盖率简单地回答以下问题:“每个布尔表达式都已经被评估为真和假吗?”这是在单元测试执行期间遵循的流程控制结构中可能分支的密度。

http://docs.codehaus.org/display/SONAR/Metric+definitions

好的,但我怀疑他们的意思是“分支覆盖率”:

如果 (A || B || C)

测试 A=true 和 B=true 可以得出100%的结果,无需检查最后一个表达式(C)。同时只需测试两个分支——整个表达式的真和假分支,而不是每个表达式的真和假分支。这样对吗?

据我所知,条件覆盖应该检查表达式中的所有条件。

2个回答

4

他们说的话虽然一样,但我却不理解他们的论点。如果一个条件有 n 个表达式(例如 if A || B || C || D),那么仍然只有两个分支(true 和 false 的结果),因此你只需要两个测试用例。 - Pietross
这就是为什么我认为分支覆盖率比条件覆盖率更重要。在这个帖子中,我问SonarSource为什么改变了标签,但他们还没有回复。 - David RACODON - QA Consultant
谢谢,也许我读错了。但我记得你显示了0/4的(X && Y),这是没有意义的。对于分支覆盖率,应该是0/2,没有测试。可以计算条件覆盖测试用例:2^N,其中N表示复合条件的组件数。 - Pietross
我不这么认为。无论有多少运算符,复合条件的结果始终只能是真或假,因为代码只有两个分支 - IF和ELSE,没有其他分支。如果您查看控制流图,会发现只有两条边。 - Pietross
实际上,圈复杂度决定路径,而不是分支。分支总是(控制流图可以很好地显示)来自IF语句的2个。路径是节点之间的组合。 - Pietross
显示剩余2条评论

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接