白盒测试-逻辑覆盖

201 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

本次我们学习白盒测试的相关技术。

逻辑覆盖是以程序的内部逻辑结构为基础的测试用例设计技术,它要求测试人员了解程序的逻辑结构,考虑是测试用例对程序内部逻辑覆盖的程度。 逻辑覆盖测试方法通常采用流程图来设计测试用例,它考察的重点是图中的判定框,因为这些判定通常是与选择结构有关或是与循环结构有关,是决定程序结构的关键成分。

逻辑覆盖测试的5种标准

image.png

image.png

1、语句覆盖

语句覆盖就是设计足够多的调试用例,使得程序中的每个语句至少执行一次。

image.png

可以设计如下的输入数据:A=2,B=0,x=4

执行路径:sacbed

反例:如果程序中把第一个判定表达式中的逻辑运算符AND错写成OR,或把第二个判定表达式中的条件X>1误写成X<1,使用上面的测试数据并不能查出这些错误。

语句覆盖可以保证程序中的每个语句都得到执行,但发现不了判定中逻辑运算的错误,即它并不是一种充分的检验方法。

综上所述,可以看出语句覆盖是很弱的逻辑覆盖标准。

2、判定覆盖

判定覆盖就是设计足够的测试用例,每条语句至少执行一次,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次。

image.png

测试用例如果能够测试路径P1(sacbed)和P2(sabd),就可以满足判定覆盖要求。可以设计如下两组输入数据:

A=3,B=0,x=3 P1(sacbd)

A=2,B=1,x=1 P2(sabed)

判定覆盖比语句覆盖更强一些但仍然无法确定判定内部条件的错误。 但把第二个判定中的条件X>1误写成X<1 ,使用上述测试用例,照样能按原路径执行而不影响结果。因此,需要有更强的逻辑覆盖准则去检验判定内的条件。

3、条件覆盖

条件覆盖就是设计足够的测试用例,使得程序判定表达式中的每个条件能获得各种可能的结果

image.png

例如: A=2,B=0,x=4 A=1,B=1,x=1

条件覆盖通常比判定覆盖强,但满足条件覆盖的测试数据不一定满足判定覆盖。 例如,上面两组测试数据也同时满足判定覆盖标准。但是,如果使用下面两组测试数据,则只满足条件覆盖标准并不满足判定覆盖标准(第二个判定表达式的值总为真):

A=2,B=0,X=1(满足A>1,B=0,A=2和X≤1,执行路径sacbed)
② A=1,B=1,X=2(满足A1,B0,A2和X>1,执行路径sabed)

4、判定/条件覆盖

判定/条件覆盖就是设计足够的测试用例,使得判定中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。对于上面的例子,下述两组输入数据能满足这些要求:

A=2,B=0,x=4 A=1,B=1,x=1

从表面上看,判定/条件覆盖测试了各个判定中的所有条件的取值,但实际上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其它条件所掩盖。因此,**判定/条件覆盖也不一定能够完全检查出逻辑表达式中的错误。 **

5、条件组合覆盖

条件组合覆盖就是设计足够的测试用例,使得每个判定中的条件的各种可能组合都至少出现一次

   可能的条件组合:     相应的输入数据:
  (1A1B0      A2B0,x=42A1B0       满足(1)和(5)
  (3A1B0       A2B1,x=14A1B0       满足(2)和(6)
  (5A2,x>1      A1B0,x=26A2,x≤1       满足(3)和(7)
  (7A2,x>1       A1B1,x=18A2,x≤1       满足(4)和(8

···· 对于M:A>1取真时T1,取假时F1; 

  B=0取真时T2,取假时F2;

对于N:A=2取真时T3,取假时F3;

X>1取真时T4,取假时F4

条件:A>1,A<=1,B=0,B!=0

条件:A=2,A!=2,X>1,X<=1 

image.png

image.png

下面的4组测试数据使上面列出的8种条件组合每种至少出现一次:

A=2,B=0,X=4(针对(1)和(5),执行路径sacbed)
② A=2,B=1,X=1(针对(2)和(6),执行路径sabed)
③ A=1,B=0,X=2(针对(3)和(7),执行路径sabed)
④ A=1,B=1,X=1(针对(4)和(8),执行路径sabd)
显然,满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。因此,条件组合覆盖是前述几种覆盖标准中最强的。但是,满足条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到,例如,上述4组测试数据都没有测试到路径sacbd。

以上内容就是关于白盒测试相关技术的学习,关于软件测试的技术还有许多,后续我们将继续学习。