1

我知道如果我有这样的 if 语句......

if (x == y) {
   foobar++;
} else {
   if (x == z) {
     foobar++;
   }
}

为了获得 100% 的分支覆盖率,需要遍历 4 个分支。2 来自外部 if - else,1 来自内部 if 语句,另一个来自 if 它不进入内部 if 语句。

然而,对于这样的事情......

if (x == y) {
   foobar++;
} else {
   while (x < z) {
     x++;
   }
}

100% 的分支覆盖率还需要 4 个分支吗?也就是说,不从 else 语句进入 while 循环算作一个单独的分支吗?

谢谢你。

4

1 回答 1

5

首先:没有 if 循环。它被称为 if 语句。

至于你的问题:你的第一个例子只有 3 个分支。第一个if创建两个分支。在您的内部else创建了另外两个分支,但这并不等于 4,因为它们是您的子分支else

  if
 /  \
1   else
     |
     if
    /  \
   2    3

对于while循环的分支覆盖,它变得有点复杂。从理论上讲,一个循环可能会创建无限数量的分支,因为您不知道它会或可以运行的频率。有几种实用的方法可以测量循环的覆盖率。最简单的是有两个分支。一个执行循环块,一个不执行。在这种情况下,您的示例中仍然会有 3 个分支。也有可能为一个循环考虑三个分支:不运行、运行一次和多次运行。如果您使用这样的覆盖率测量,您将在第二个示例中拥有 4 个分支。

于 2013-08-28T15:55:44.783 回答