白盒测试(语句覆盖、条件覆盖、判断覆盖、路径覆盖)
在白盒测试中,有四种常见测试方法:
- 语句覆盖
- 条件覆盖
- 判断覆盖
- 路径覆盖
下面我们用一道例题来解释他们之间的区别:
START
INPUT (A,B,C)
IF A>5
THEN X= 10
ELSE X=1
END IF
IF B> 10
THEN Y=20
ELSE Y=2
END IF
IF C> 15
THEN Z= 30
ELSE Z=3
END IF
PRINT (X,Y,Z)
STOP
该题的程序流程图:
1、语句覆盖
语句覆盖的含义:
选择足够多的测试数据,使被测程序中每个语句至少执行一次。
语句覆盖只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值时的情况(即一个判断语句的两个分支若没有其他语句。则只需要执行一个分支语句)。
如上图的程序流程图,若想每个语句至少执行一次(赋值语句也是语句),则最少需要两组测试数据。
全部为true:A=20,B=20,C=20
全部为false:A=1,B=1,C=1
2、判断覆盖(分支覆盖、判定覆盖)
判定覆盖的含义:
不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次
在⑴的基础上,每个判定的每个分支至少执行一次
如上图的程序流程图。在(1)的基础上每个分支至少执行一次,则可以用和(1)一样的两组数据。(该题具有特殊性)
全部为true:A=20,B=20,C=20
全部为false:A=1,B=1,C=1
3、条件覆盖
条件覆盖的含义:
不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果在⑴的基础上,使每个判定表达式的每个条件都取到各种可能的结果。
通俗来讲就是每个判断条件都可以取到所有的可能。
如上图的程序流程图。在(1)的基础上使每个判定表达式的每个条件都取到各种可能的结果,则可以用和(1)一样的两组数据。(该题具有特殊性)
全部为true:A=20,B=20,C=20
全部为false:A=1,B=1,C=1
4、路径覆盖
路径覆盖的含义:
选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。
则上图的程序流程图一共有8条可以走的路径,当我们测试时,可以选择这样的8组数据:
- 3 个判定表达式之值全为假
输入:A=1,B=1,C=1
预期的输出:X=1,Y=2,Z=3
- 3 个判定表达式依次为假、假、真
输入:A=1,B=1,C=60
预期的输出:X=1,Y=2,Z=30
- 3 个判定表达式依次为假、真、假
输入:A=1,B=40,C=1
预期的输出:X=1,Y=20,Z=3
- 3 个判定表达式依次为假、真、真
输入:A=1,B=40,C=60
预期的输出:X=1,Y=20,Z=30
- 3 个判定表达式依次为真、假、假
输入:A=20,B=1,C=1
预期的输出:X=10,Y=2,Z=3
- 3 个判定表达式依次为真、假、真
输入:A=20,B=1,C=60
预期的输出:X=10,Y=2,Z=30
- 3 个判定表达式依次为真、真、假
输入:A=20,B=40,C=1
预期的输出:X=10,Y=20,Z=3
- 3 个判定表达式全为真
输入:A=20,B=40,C=60
预期的输出:X=10,Y=20,Z=30
5、条件覆盖和判断覆盖的区别
判断覆盖:每个分支都至少执行一次
条件覆盖:每个判断条件的值都要取到所有的可能
乍一看,两者好像表达了相同的意思,其实大多数情况下也的确是这样。但是,也有不同的时候,我们看下面一个判断条件:
IF (A<10 OR B>10)
当选择判断覆盖式,则整个判断式要有true和false两个结果的两组测试数据。
但是对条件覆盖来说,可以选择都为true的测试数据,如A<5,B<5(true)和A>15,B>15(true),我们覆盖到了判断条件所有的可能性,但是两组数据的结果都为true,所以并没有覆盖到所有的分支,这就是条件覆盖与判断覆盖的区别。
即:*判定覆盖只关心判定表达式的值(真/假),而条件覆盖涉及到判定表达式的每个条件的值(真/假)