Mac*_*rko 6 testing unit-testing code-coverage
假设我有这段C/C++代码:
int c = 12; // Should I count this line as basic block?
if (a != 0 && b > 10) {
c += (a + b);
} else {
c += 1;
}
printf("%d", c); // Should I count this line as basic block?
Run Code Online (Sandbox Code Playgroud)
测试用例的基本块覆盖是a = 1, b = 12什么?
是75%还是50%?
我应该将第1行和最后一行计为基本块吗?基本块的精确定义是什么?
另一个困惑点:
int c = 16;
d += c;
Run Code Online (Sandbox Code Playgroud)
它是一个基本块还是2个基本块?每条线都应算作基本块吗?
基本块包含所有指令,这些指令具有以下属性:如果其中一个被执行,那么同一基本块中的所有其他指令都是.将基本块的第一条指令命名为领导者,我们得到以下基本块的定义:领导者之后的所有指令的集合,如果执行领导者则执行该指令.领导者是基本块的开始.
确定领导者在代码中找到所有跳转指令.每个跳跃目标和跳跃后的每个指令都是领导者.方法中的第一条指令也是领导者.
要找到基本块,只需完成从领导到下一个的所有指令.
你的第一个例子:
int c = 12; // Leader
if (a != 0 && b > 10) { // Jump
c += (a + b); // Leader
} else {
c += 1; // Leader
}
printf("%d", c); // Leader -- target of jump from the end of the true branch
Run Code Online (Sandbox Code Playgroud)
你有4个基本块:一个用于每个分支if,一个用于printf后面if,一个用于初始化c.如果a == 1 && b == 12仅执行三个基本块,则覆盖率为75%.
你的第二个例子没有跳转指令=>只有一个基本块.
| 归档时间: |
|
| 查看次数: |
2088 次 |
| 最近记录: |