【问题标题】:SonarQube - is Condition coverage actually the branch coverage?SonarQube - 条件覆盖实际上是分支覆盖吗?
【发布时间】:2014-11-12 08:42:37
【问题描述】:

SonarQube 像这样描述“条件”覆盖范围:

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

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

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

如果 (A || B || C)

测试 A=true 和 B=true 产生 100%,无需检查最后一个表达式 (C)。也只测试了两个分支 - 整个表达式的真假,而不是单个表达式。对吗?

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

【问题讨论】:

    标签: sonarqube metrics


    【解决方案1】:

    【讨论】:

    • 好吧,他们也这么说,但我不明白他们的论点。如果条件有 n 个表达式(如果 A || B || C || D),那么仍然只有两个分支(结果为真和假),您只需要两个测试用例。
    • 这就是为什么我认为它更多的是分支覆盖而不是条件覆盖。在这个帖子中,我问 SonarSource 为什么他们更改了标签,但他们还没有回复。
    • 谢谢,也许我看错了。但我记得你被显示为 (X && Y) 的 0/4,这是没有意义的。对于分支覆盖率,它应该是 0/2,没有测试。可以计算条件覆盖测试用例:2^N 其中 N 表示复合条件的组成部分。
    • if (A | B) => 2 个分支,对或错。但是||或 && 运算符增加分支的数量。事实上,第二个操作数可能会或可能不会被评估。
    • 我不这么认为。复合条件的结果将始终为真或假,无论有多少运算符,因为只有两个代码分支 - IF 和 ELSE,没有其他分支。如果你看一下控制流图,有两条边。
    【解决方案2】:

    对于 SonarQube 5.6 上的我来说,条件覆盖率实际上与定义的 路径覆盖率 相同,例如这里:http://www.onjava.com/pub/a/onjava/2007/03/02/statement-branch-and-path-coverage-testing-in-java.html?page=2

    例如,我的测试报告指出,在检查两个布尔标志的 if 条件下,它坚持在达到 100% 覆盖率之前必须检查所有 4 种可能的组合。

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 2021-03-28
      • 2018-12-29
      • 2018-10-07
      • 2018-10-30
      • 2015-02-08
      • 2019-06-15
      • 2016-09-07
      • 1970-01-01
      相关资源
      最近更新 更多