逻辑覆盖
通过对程序逻辑结构的遍历实现程序的覆盖。
示例(C语言):
int function1 (bool a,bool b,bool c)
{
int x;
x=0;
if (a && (b || c))
x=1;
return x;
}
流程图如下:
语句覆盖(SC)
statement coverage
- 覆盖:每条语句至少应该执行一次。
- 测试用例:a=T,b=T,c=T
- 特点:程序执行逻辑的覆盖很低。如果判断条件写成a || (b || c),测试用例仍可用,无法发现逻辑错误。很弱的逻辑覆盖。
判定覆盖(DC)
decision coverage
- 覆盖:程序中的每个判定获得每一次可能的结果至少一次。
- 测试用例:
- a=T,b=T,c=T
- a=F,b=F,c=F
- 特点:满足了判定覆盖的同时满足了语句覆盖。如果判断条件写成a || (b || c),测试用例仍可用,无法发现逻辑错误。比语句覆盖更强一些。
条件覆盖(CC)
condition coverage
-
覆盖:每一个判定语句的每个逻辑条件的可能值至少满足一次。
-
测试用例:
- a=T,b=T,c=T
- a=F,b=F,c=F
或者
- a=T,b=F,c=F
- a=F,b=T,c=T
-
特点:参考第二组用例,达到条件覆盖不一定达到判定覆盖。
条件判定组合覆盖(CDC)
- 覆盖:判定中每个条件的所有可能至少出现一次,且每个判定本身的判定结果也至少出现一次。
- 测试用例:
- a=T,b=T,c=T
- a=F,b=F,c=F
- 特点:如果判断条件写成a || (b || c),测试用例仍可用,无法发现逻辑错误。存在一定的缺陷。
多条件覆盖/条件组合覆盖(MCC)
- 覆盖:每个判定中条件的各种可能组合都至少出现一次。
- 测试用例:3个逻辑条件,每个条件2种取值,2 3=8
- a=T,b=T,c=T
- a=T,b=T,c=F
- a=T,b=F,c=T
- a=T,b=F,c=F
- a=F,b=T,c=T
- a=F,b=F,c=T
- a=F,b=T,c=F
- a=F,b=F,c=F
- 特点:程序判定语句较多时,测试用例的数目非常大**。满足多条件覆盖的测试用例一定满足判定覆盖,条件覆盖,和条件判定组合覆盖。**
修订判定条件覆盖(MCDC)
-
覆盖:
MC/DC首先要求实现条件覆盖、判定覆盖,在此基础上,对于每一个条件C,要求存在符合以下条件的两次计算:- 条件C所在判定内的所有条件,除条件C外,其他条件的取值完全相同;
- 条件C的取值相反;
- 判定的计算结果相反。
-
测试用例:a&(b|c)
- a=T,b=T,c=T
- a=F,b=T,c=T
- a=T,b=T,c=F
- a=F,b=T,c=F
- a=F,b=F,c=T
- a=F,b=F,c=F
-
特点:每个条件都要独立影响判定结果。
参考:http://www.kailesoft.com/help/testbox/mcdc.htm
《软件评测师教程》