逻辑覆盖测试包括的方法有:语句覆盖、路径覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖。
接下来通过对下面子程序进行各个方法的测试用例设计:
procedure example(y,z:real; var x:real)
begin
if(y > 1) and (z = 0) then x:= x / y;
if(y = 2) or (x > 1) then x:= x + 1;
end;
程序对应的流程图如下:
- 语句覆盖:所有语句至少执行一次。即执行路径sabcde即可,测试用例如表所示。
测试数据 |
预期结果 |
x = 4, y= 2, z = 0 |
x = 3 |
- 路径覆盖:所有可能被执行到的路径至少执行一次。本题需执行路径有:sabcde、sace、sabce、sacde,测试用例如表所示。
执行路径 |
测试数据 |
预期结果 |
sabcde |
x = 4, y= 2, z = 0 |
x=3 |
sace |
x=1,y=1,z=1 |
x=1 |
sabce |
x=1,y=3,z=0 |
x=0 |
sacde |
x=1,y=2,z=1 |
x=2 |
- 判定覆盖:每个判定结果至少执行一次。本题需满足a=true且c=false,a=false且c=true两种情况即可,即执行路径sabce、sacde,测试用例如表所示。
判定 |
执行路径 |
测试用例 |
预期结果 |
a=t,c=f |
sabce |
x=1,y=3,z=0 |
x=0 |
a=f,c=t |
sacde |
x=1,y=2,z=1 |
x=2 |
- 条件覆盖:每个判定中的每个条件可能出现的结果至少出现一次。本题判定a可能出现的结果:y>1,y<=1,z=0,z≠0,判定c可能出现的结果:y=2,y≠2,x>1,x<=1,可执行的路径为sabcde,sace,测试用例如表所示。
覆盖的条件 |
执行路径 |
测试数据 |
预期结果 |
y>1,y=2,z=0,x>1 |
sabcde |
x=2,y=2,z=0 |
x=1 |
y<=1,y≠2,z≠0,x<=1 |
sace |
x=1,y=1,z=1 |
x=2 |
- 判定/条件覆盖:每个判定结果至少出现一次,每个判定中的条件可能出现的结果至少出现一次。可执行路径为sabcde,sace,测试用例如表所示。
判定 |
覆盖的条件 |
执行路径 |
测试数据 |
预期结果 |
a=t,c=t |
y>1,y=2,z=0,x>1 |
sabcde |
x=2,y=2,z=0 |
x=1 |
a=f,c=f |
y<=1,y≠2,z≠0,x<=1 |
sace |
x=1,y=1,z=1 |
x=2 |
- 条件组合覆盖:每个判定的每个条件的可能出现的结果的所有可能的组合至少出现一次。本题中判定a可能出现的条件组合为:(1) y>1,z=0; (2) y<=1,z=0; (3)y>1,z≠0; (4) y<=1,z≠0 ; 判定才可能出现的条件组合为:(1) y=2,x >1; (2)y≠2,x >1; (3) y=2,x<=1; (4)y≠ 2,x<=1。测试用例如表所示。
条件组合 |
执行路径 |
测试用例 |
预期结果 |
y>1,z=0,y=2,x>1 |
sabcde |
x=4,y=2,z=0 |
x=3 |
y<=1,z=0,y≠2,x<=1 |
sace |
x=1,y=1,z=1 |
x=1 |
y>1,z≠0,y=2,x<=1 |
sace |
x=1,y=2,z=1 |
x=1 |
y<=1,z≠0,y≠2,x>1 |
sacde |
x=2,y=1,z=1 |
x=3 |
总结:测试代码时所执行的路径占总路径数越高,则覆盖程度越大。所以覆盖率由高——低:路径覆盖-条件组合覆盖-判定/条件覆盖-条件覆盖-判定覆盖-语句覆盖。