【问题标题】:In any program doesn't 100% statement coverage imply 100 % branch coverage?在任何程序中,100% 的语句覆盖率不意味着 100% 的分支覆盖率吗?
【发布时间】:2012-02-02 20:05:04
【问题描述】:

在为练习测试解决 MCQ 时,我遇到了这样的说法——“在任何程序中,100% 的语句覆盖率意味着 100% 的分支覆盖率”,它被称为不正确的。我认为这是一个正确的陈述,因为如果我们涵盖所有陈述,那么这意味着我们也涵盖了所有路径,因此也涵盖了所有分支。有人可以对此进行更多说明吗?

【问题讨论】:

标签: testing code-coverage


【解决方案1】:

考虑这段代码:

...
if (SomeCondition) DoSomething();
...

如果SomeCondition 始终为真,则可以有 100% 的语句覆盖率(SomeConditionDoSomething() 将被覆盖),但是当您跳过 DoSomething() 时,您永远不会在条件为假时执行该案例。

【讨论】:

  • 链接好像烂了。
  • @phresnel 随意找一篇关于各种代码覆盖率的好文章并替换链接。
  • 我必须承认我目前还没有能力过滤好坏。
  • 上述答案的建议编辑队列已满,可能有人提供替代链接。这是我的建议:guru99.com/code-coverage.html
【解决方案2】:

对于实现 100% 分支覆盖率的测试集,代码中的每个分支点都必须在每个方向上至少取一次。

Alexey Frunze 已经给出了典型的例子,表明 100% 的语句覆盖并不意味着 100% 的分支覆盖。这是因为(至少在大多数编程语言中)可能存在不涉及语句的分支(这样的分支基本上会跳过另一个分支中的语句)。

想要 100% 的分支覆盖率而不是 100% 的语句覆盖率的原因是,您的测试还必须表明跳过某些语句可以按预期工作。

我提供这个答案的主要原因是指出反过来,即。 “100% 分支覆盖意味着 100% 语句覆盖”是正确的。

【讨论】:

    【解决方案3】:

    以下示例,a = true 将覆盖 100% 的语句,但无法测试可能被零除错误的分支。

    int fun(bool a){
      int x = 0;
      if (a) x =1;
      return 100/x;
    }
    

    【讨论】:

      【解决方案4】:

      仅仅因为你涵盖了每条语句并不意味着你涵盖了程序可能采用的每个分支。

      您必须查看每个可能的分支,而不仅仅是每个分支中的语句。

      【讨论】:

      • 我很抱歉,但我还不清楚。例如,假设我们有一个带有简单 switch-case 的程序,我们有 10 个 case,如果我们涵盖了所有这 10 个 case,这意味着我们也涵盖了所有可能的分支,对吧?
      • @BuddhaSaadhu:错了。我只是真的才知道这一点。使用您的 switch 语句,还有第 11 种情况,即 switch 值与任何情况都不匹配。
      • 我认为你应该在你的答案中补充一点,不跳入控制语句的主体也意味着分支,否则这个答案似乎会让不知情的人感到困惑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 2015-10-06
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      相关资源
      最近更新 更多