白盒测试(语句覆盖、条件覆盖、判断覆盖、路径覆盖)

在白盒测试中,有四种常见测试方法:

  • 语句覆盖
  • 条件覆盖
  • 判断覆盖
  • 路径覆盖

下面我们用一道例题来解释他们之间的区别:

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,所以并没有覆盖到所有的分支,这就是条件覆盖与判断覆盖的区别。

即:*判定覆盖只关心判定表达式的值(真/假),而条件覆盖涉及到判定表达式的每个条件的值(真/假)

posted @ 2021-10-11 08:12  符士骏  阅读(6986)  评论(0编辑  收藏  举报