在任何计划中,100%的声明覆盖率是否意味着100%的分支覆盖率?

时间:2012-02-02 20:05:04

标签: testing code-coverage

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

4 个答案:

答案 0 :(得分:7)

考虑以下代码:

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

如果SomeCondition始终为真,那么您可以获得100%的语句覆盖率(SomeConditionDoSomething()将被覆盖),但是当条件为false时,您永远不会执行此操作你跳过DoSomething()

查看各种覆盖范围的定义here

答案 1 :(得分:2)

仅仅因为你涵盖了每一个陈述并不意味着你涵盖了该计划可能采取的每个分支。

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

答案 2 :(得分:0)

对于要达到100%分支覆盖率的测试集,代码中的每个分支点必须在每个方向上进行,至少一次。

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

希望100%分支覆盖率而不仅仅是100%语句覆盖率的原因是您的测试还必须显示跳过某些语句按预期工作。

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

答案 3 :(得分:0)

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

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