白盒测试之逻辑覆盖

逻辑覆盖主要考察使用测试数据运行被测程序时对程序逻辑的覆盖程度。

通常希望选择最少的测试用例来满足所需的覆盖标准。

主要的覆盖标准有:语句覆盖,判定覆盖,条件覆盖,判定-条件覆盖,条件组合覆盖,路径覆盖

 

 

例:对下列子程序进行测试

 

procedureexample(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;

   该子程序接受x、y、z的值,并将计算结果x的值返回给调用程序。与该子程序对应的流程图如下:

 

该子程序有两个判定:

    a:(y>1) and(z=0)

    c:(y=2) or(x>1)

  判定a中有两个判定条件: y>1、 z=0;

  判定c中有两个判定条件: y=2 、x>1

•当判定a时,“x>1”实际是“x/y>1”,即“x>y”;

•当判定a时,“x>1”仍是“x>1”。

 

该子程序有四条可执行路径:

   路径1 sabcde , 其执行条件(L1)是a为“t”且c为“t

   路径2sace,其执行条件(L2)是a为“f”且c为“f)

   路径3 sacde,其执行条件(L3)是a为“f”且c为“t)

   路径4sabce,其执行条件(L4)是a为“t”且c为“f)

 

 

§语句覆盖

 

   语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个可执行语句都至少执行一次

   欲使每个语句都执行一次,只需执行路径L1(sabcde)即可。

     L1=(y=2) and (z=0) or (y>1) and (z=0) and (x>y)

测试用例如下:


 

 

§ 判定覆盖

 

   判定覆盖(也称分支覆盖)是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次(即判定的每个分支至少经过一次)

   注意:一个判定可以是一个条件,也可以是多个条件。

 

   欲使每个分支都执行一次,只需执行路径L3(sacde ,a为“f”且c为“t”)和L4(sabce ,a为“t”且c为“f”)即可。或者,执行路径:

     L1(sabcde,a为“t”且c为“t”)

     L2(sace,a为“f”且c为“f”)

     L3(sacde ,a为“f”且c为“t”):(y ≤ 1) and (y=2) or (y ≤ 1) and (x>1)or (z ≠ 0) and (y=2)or(z ≠ 0) and (x>1)

     L4(sabce ,a为“t”且c为“f”):(y>1) and (z=0) and (y ≠ 2) and (x y)

测试用例如下:

 

     •判定覆盖将每个判定的所有可能结果都至少执行一次,所以,程序中的所有语句也必定都至少执行一次。因此,满足判定覆盖标准的测试用例也一定满足语句覆盖标准。

 

 

§ 条件覆盖

 

   条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次

 

    判定a中各种条件的所有可能结果:y>1, y ≤ 1 ,z=0, z ≠ 0。

               判定c中各种条件的所有可能结果:y=2, y ≠ 2 ,x>1(或x>y),x 1 (或x ≤ y) 。

 

测试用例如下:

 

 

§ 判定-条件覆盖

 

   判定/条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次。

  

   显然,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、语句覆盖标准。

 

测试用例如下:

 

 

§ 条件组合覆盖

   条件组合覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中条件结果的所有可能组合都至少出现一次。

 

      •满足条件组合覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、判定/条件覆盖、语句覆盖标准。

   

判定a中条件结果的所有可能组合:

① y>1, z=0 ; ② y>1, z ≠ 0; ③ y ≤ 1 , z=0 ;  ④ y ≤ 1 , z ≠ 0

判定c中条件结果的所有可能组合:

⑤ y=2, x>1 ; ⑥ y=2, x 1 ; ⑦ y ≠ 2 ,x>1;  ⑧ y ≠ 2 ,x 1

 

测试用例如下:

 

 

§ 路径覆盖

 

   路径覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每条可能执行到的路径都至少经过一次。(如果程序中包含环路,则要求每条环路至少经历一次)。   

   本例中所有可能执行的路径有:

     L1 (sabcdea为“t”且c为“t”) =(y=2) and(z=0)or (y>1) and (z=0) and (x> y)

     L2 (sacea为“f”且c为“f= (y≤1)and (y≠2) and (x ≤ 1)or (z ≠ 0) and (y ≠ 2) and (x ≤ 1)

     L3 (sacdea为“f”且c为“t=(y ≤ 1) and (y=2)or (y ≤ 1) and (x>1)or (z ≠ 0) and (y=2)or(z ≠ 0) and (x>1)

     L4( sabcea为“t”且c为“f=(y>1) and(z=0) and (y ≠ 2) and (x ≤ y)

测试用例如下:

   

   注意:

     路径覆盖实际上考虑了程序中各种判定结果的所有可能组合。

     路径覆盖未必能覆盖判定中条件结果的各种可能情况。

     路径覆盖是一种比较强的覆盖标准,但不能替代条件覆盖条件组合覆盖标准

 

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值