编程技术分享平台

网站首页 > 技术教程 正文

白盒测试之逻辑覆盖准则

xnh888 2024-12-05 17:22:35 技术教程 20 ℃ 0 评论

概述

本文通过一个实例演示,循序渐进地介绍白盒测试之逻辑覆盖准则。

首先,我们要知道白盒测试关注的目标是什么,从测试的表现形式来看,白盒测试是面向源代码的(或源代码的其他表现形式如程序流程图),从测试的实际效用来看,白盒测试是面向程序逻辑流的,它描述程序代码执行的程度和程序逻辑结构覆盖的程度(也就是我们通常所说的覆盖率)。

其次,我们要知道什么时候开始做白盒测试,通常程序开发人员在正式编码之前需要先设计程序逻辑,那么在程序逻辑设计阶段,白盒测试开发人员就需要介入了,他并不是去关心程序如何实现逻辑结构,而是要关心程序实现的逻辑是什么,并需要和程序开发人员一同梳理出这些逻辑。

下面正式进入这个实例

先把我们需要测试的逻辑结构图画出来,如下



语句覆盖准则

这个准则比较简单,它规定测试需要保证将程序中的每条语句至少执行一次,该条准则的价值在于发现代码中的冗余设计,以帮助开发人员减少无用的代码,从而保持代码的简洁。

对于该实例,满足该准则的测试用例可以是:m=2,n=0,x=3。非常简单


判定覆盖准则

这个准则测试“判定”为TRUE 和FALSE ,它规定每个判定都必须有“是”和“否”的结果,并且每条语句都至少被执行一次,那么它的价值在于以判断为审查点,来描述判定为TRUE 或FALSE 后的程序执行结果是逻辑结构设计所期望的,不能产生程序判断为TRUE时执行了逻辑结构设计中定义的判断为FALSE后输出的结果。不用解释,它的覆盖强度显而易见是大于语句覆盖准则的。

对于该实例,满足该准则的测试用例可以是:

用例设计

路径覆盖

x=3,m=3,n=0

acd

x=1,m=2,n=1

abe


条件覆盖准则

因为并不是所有的判定都是单一的条件,恰恰相反,在大多数情况下,我们遇到的判定是复合条件,也就是由逻辑运算符“与、或和非”连接而成的逻辑表达式,那么判定覆盖并不能测试逻辑表达式的结构问题,比如,在该实例中,以上测试用例就不能发现“x>1写成了x<1的错误“。为了能测试该错误,于是产生了条件覆盖准则。

条件覆盖准则,它规定一个判断中的每个条件的所有可能的结果至少执行一次,同时规定对程序或子程序的每一个入口点都至少调用一次。

对于该实例,只有一个入口点,即图示中的a标记点。以下是满足该准则的测试用例

用例设计

覆盖的路径

x=4,m=2,n=0

ace

x=1,m=1,n=1

adb


判定/条件覆盖准则

条件覆盖准则并不总是能满足判定覆盖,如测试判断条件IF(A&&B), 测试用例设计为 A 为TRUE ,B 为FALSE;A 为FALSE,B为TRUE,它是满足条件覆盖准则的,但是因为这不能使IF 语句中的THEN被执行到,所以并不满足判断覆盖准则,于是判定/条件覆盖准则产生了

该准则规定一个判断中的每个条件的所有可能的结果至少执行一次,将每个判断的所有可能结果至少执行一次,将每个入口点都至少调用一次

多重条件覆盖准则

虽然判定/条件覆盖准则是既测试了判断又测试了条件,但是不一定就总能发现逻辑表达式的所有错误,因为,我们知道如果“与”表达式中有个条件为“假”,那么就无需计算该表达式的后续条件;如果“或”表达式中有个条件为“真”,那么后续条件也无需计算,也就是说表达式某些条件的结果可能会屏蔽掉或阻碍掉其他条件的判断,以上测试就不能发现“x>1写成了x>0的错误”,于是产生了多重条件覆盖准则

该准则规定将判定中的所有可能的条件结果的组合,以及所有的入口点都至少执行一次。

应用该准则设计用例,我们首先需要列出所有的条件组合,对于该实例,如下

编号

条件组合

1

m>1,n=0

2

m>1,n<>0

3

m<=1,n=0

4

m<=1,n<>0

5

m=2,x>1

6

m=2,x<=1

7

m<>2,x>1

8

m<>2,x<=1

然后设计测试用例覆盖所有的条件组合,如下

用例设计

覆盖的条件组合

m=2,n=0,x=4

覆盖组合1,5

x=1,m=2,n=1

覆盖组合2,6

m=1,n=0,x=2

覆盖组合3,7

m=1,n=1,x=1

覆盖组合4,8

至此,所有的逻辑覆盖准则已经介绍完了。他们对逻辑结构覆盖强度依次增强,表现为语句覆盖<判定覆盖<条件覆盖<判断/条件覆盖<多重条件覆盖

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表