Unit testing 基本区块覆盖率-什么';确切的定义是什么?

Unit testing 基本区块覆盖率-什么';确切的定义是什么?,unit-testing,testing,code-coverage,Unit Testing,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? 测试用例a=1,b=12的基本块覆盖率是多少 是75%还是50% 我应该把第一行和

假设我有一段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?
测试用例
a=1,b=12的基本块覆盖率是多少

是75%还是50%

我应该把第一行和最后一行算作基本块吗?基本块的精确定义是什么

另一个混淆点是:

int c = 16;
d += c;

是一个基本街区还是两个基本街区?是否应将每一行计算为一个基本块?

一个基本块包含所有指令,这些指令具有这样的特性:如果执行其中一条指令,则相同基本块中的所有其他指令都将被执行。将基本块的第一条指令命名为前导,我们得到了基本块的以下定义:如果执行前导,则执行前导的所有指令的集合。引线是基本块的起点

要确定引线,请在代码中查找所有跳转指令。每个跳转目标和跳转后的每个指令都是前导。方法中的第一条指令也是指引线

要找到基本块,只需浏览从一个引线到下一个引线的所有指令

您的第一个示例:

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
这里有4个基本块:一个用于
if
的每个分支,一个用于
if
之后的
printf
,一个用于
c
的初始化。如果
a==1&&b==12
只执行三个基本块,则覆盖率为75%


第二个示例没有跳转指令=>只有一个基本块。

基本块的解释很好。