|
|
|
|
移动端

2.6.4 避免组合爆炸的启发式方法

《软件测试基础教程》第2章基于需求的测试生成,本章主要介绍从非形式化或形式化定义的软件需求生成测试集的技术。这些技术,有的可以自动地执行,而大部分则需测试人员付出艰辛的劳动,特别是在测试大型软件时。本章所介绍的大部分测试技术属于黑盒测试,因为生成测试集时不需参考被测软件的源代码。本节为大家介绍如何避免组合爆炸的启发式方法。

作者:王峰/郭长国/陈振华 等译来源:机械工业出版社|2011-09-17 22:59

【新品产上线啦】51CTO播客,随时随地,碎片化学习

2.6.4 避免组合爆炸的启发式方法

对因果图进行回溯,可以得到原因的组合,这些组合将某个中间结点或结果设置为1状态或0状态。这种使用“蛮劲”的方式将产生数量极为庞大的原因组合。在最坏的情况下,如果有n个原因与某个结果e相关,那么导致e为1状态的原因组合最多可达2n个。

当根据原因组合生成测试用例时,n取值较大时将导致测试用例的数量过大。可以采用较为简单的同“与”(∧)结点、“或”(∨)结点相关的启发式方法,避免这种组合爆炸情况。

当然,下面描述的启发式方法是建立在这样的假设基础之上的:某些类型的错误比其他类型的错误较少出现。这样,虽然采用启发式方法生成测试用例时很可能会极大地降低生成的测试用例数量,但是也会忽略掉一些原本能够检测出错误的测试用例。因此,在使用启发式方法时需格外小心,并且只有在采用其他方法产生的测试用例数量将大到无实际意义时才能使用该方法。

表2-4列举了4条启发式知识,分别标记为H1、H2、H3、H4。表中最左边那栏表示的是因果图中的结点类型,中间那栏表示的是结果结点的期望状态,最右边那栏描述的是用于产生影响结果结点e的输入组合时的启发式知识。

为简单起见,只选取了两个输入结点n1、n2以及相应的结果结点e,而在通常情况下,会有一个或多个结点与e相关。另外,每个结点n1、n2可以代表一个原因或者一个具有输入(用虚线表示)的中间结点,这些输入来自于其他原因或中间结点。下面的例子说明如何使用表2-4中的启发式。

表2-4 从因果图生成输入组合时采用的启发式知识

 
(续)
 

 
图2-16例2.21中的因果图

例2.21考虑图2-16所示的因果图。在通过回溯因果图生成必需的输入组合时,直接应用启发式知识生成输入组合。

假设要求结果结点e为1。

回溯图2-16中的因果图,要求中间结点a必须为0。

由于中间结点a是个“或”结点,如表2-4所示,根据启发式知识H1,列举所有使C1=b=0成立的输入组合,这样的组合只有1个,即(0,0)。

接着,分别考虑使C1=0和b=0成立的输入组合。因为C1不能再分,因此无启发式知识可用。中间结点b是个“与”结点,如表2-4所示,根据启发式知识H3,列举除使C2=C3=1成立之外的所有输入组合,这样的组合有3个,即(0,0),(0,1),(1,0)。将C2、C3的这3个组合与C1=0合并,得到下面3个组合:

 

至此,采用表2-4中的启发式知识生成输入组合的过程就结束了。

现在,讨论用于降低输入组合数量的启发式知识之间的关系。启发式知识H1并没有减少任何输入组合。对于“或”结点来说,唯一使其结果e为0的输入组合就是所有输入皆为0。H1就建议列举这样的输入组合。H2建议列举除使n1=n2=0成立之外的所有其他输入组合。为了理解H2的基本原理,考虑如下程序:当条件c1或c2成立时输出一条错误提示信息。该程序的正确实现如下:

 

现在考虑下面的错误实现:

 

当对布尔表达式进行短路计算(short circuit evaluation)时,采用使c1、c2皆为真的测试用例无法检测出上述程序的错误。但是,采用使c1=0、c2=1的测试用例却能够检测出上述错误。因此,H2防止对“或”结点生成所有产生(c1=1,c2=1)输入组合的测试用例(参见练习2.23)。

同样,启发式知识H3也防止了重复n1、n2的组合,这样可以省略大量测试用例。在这里有一个假设:结点e中的任何错误,都可通过覆盖n1、n2不同组合的测试用例检测出来。因此,没有必要让两个或多个测试用例包含同样的n1、n2组合。

最后,启发式知识H4针对“与”结点就像H1针对“或”结点一样。对于“与”结点来说,唯一使其结果e为1的输入组合就是所有输入皆为1。H4就建议列举这样的输入组合。

再一次强调,虽然上面讨论的启发式方法很可能会减少用因果图产生的测试用例的数量,但也可能会摒弃一些有用的测试用例。当然,在通常情况下或在开始执行测试之前,几乎不可能知道摒弃掉的测试用例哪些是有用的、哪些是真正没用的。



【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网络工程师考试考前冲刺预测卷及考点解析

本书依据最新版《网络工程师考试大纲》的考核要求,深入研究了历年网络工程师考试试题的命题风格和试题结构,对考查的知识点进行了提炼,并...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊