分支覆盖范围适用于不同类型的循环

Oge*_*gen 1 testing code-coverage

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

if (x == y) {
   foobar++;
} else {
   if (x == z) {
     foobar++;
   }
}
Run Code Online (Sandbox Code Playgroud)

将有4个分支遍历以获得100%的分支覆盖率.2来自外部if - else,1来自内部if语句,另一个来自if if不进入内部if语句.

但是,对于像这样的事情......

if (x == y) {
   foobar++;
} else {
   while (x < z) {
     x++;
   }
}
Run Code Online (Sandbox Code Playgroud)

100%分支覆盖还需要4个分支机构吗?也就是说,不会从else语句计数作为单独的分支进入while循环?

谢谢.

And*_*nek 5

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

至于你的问题:你的第一个例子只有3个分支.第一个if创建两个分支.在你的else另外两个分支中创建,但这不会加起来4,因为它们是你的子分支else.

  if
 /  \
1   else
     |
     if
    /  \
   2    3
Run Code Online (Sandbox Code Playgroud)

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