|
|
|
|
移动端

2.7.7 故障传播

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

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

技术沙龙 | 6月30日与多位专家探讨技术高速发展下如何应对运维新挑战!


2.7.7 故障传播

现在解释故障传播这个概念,它是本节描述的4个谓词测试设计算法的基础。设pr是个谓词(不论是简单谓词还是复合谓词),pc是pr的一个组件。抽象语法树上的每一个结点都是谓词的组件。例如,在图2-17中,谓词pr:(a+b<c)∧﹁p∨(r>s)包含下面6个组件:

  1. a+b<c,∧,﹁,p,∨,r>s 

设pf是pr的错误实现。针对某些测试用例t,如果pf(t)≠pr(t),说明pf某个组件中的错误已经传播到了抽象语法树AST(pf)的根结点,该错误已影响到pf的输出。同时,测试用例t也被称作pf的错误/故障检测用例。

在谓词测试中,我们关心的是设计出至少一个测试用例t,确保使pf中的错误能够传播到抽象语法树AST(pf)的根结点,即pf(t)≠pr(t)。BOR、BRO、BRE充分的测试集能确保使前面章节提到的某些故障传播到谓词抽象语法树的根结点。下面的例子说明故障传播这个概念。

例2.33设pr:(a+b<c)∧﹁p∨(r>s);pf:(a+b<c)∨﹁p∨(r>s)是两个谓词,pf是pr的错误实现。由于错误地使用了运算符∨,pf有一个布尔运算符故障。表2-7列出的4个测试用例构成一个BOR充分测试集。

图2-22a、b说明表2-7中的测试用例t1未能使∧运算符故障传播到AST(pf)的根结点,因此,pf(t1)=pr(t1)。但是,图2-22c、d说明表2-7中的测试用例t4使∧运算符故障传播到AST(pf)的根结点,pf(t4)≠pr(t4)。fault does not propagate:故障没有传播;

fault:故障;

fault propagates:故障传播了。

 
图2-22a)、b)中的抽象语法树说明测试用例t1未能使∧运算符故障得到传播;
c)、d)中的抽象语法树说明测试用例t4使∧运算符故障得到了传播

对于具体的包含n个AND/OR运算符和布尔变量的谓词pr,测试人员可以采用“蛮劲”方法生成一个包含2n个测试用例的测试集。例如,谓词pr:(a+b<c)∧﹁p∨(r>s)包含两个AND/OR运算符、一个布尔变量,因此,n=3。一个用“蛮劲”方式产生的测试集T将总共包含8个测试用例,以便满足下面的约束集S:

S={(f,f,f),(f,f,t),(f,t,f),(f,t,t),(t,f,f),(t,f,t),(t,t,f),(t,t,t)}

这8个约束将确保:针对T中的测试用例,pr的每个关系表达式和布尔变量都能取值为true和false。显然,T是BOR、BRO、BRE充分的。但是,T不是最小的,因为,与T包含8个测试用例相比,例2.30中导出的BRE充分测试集只包含5个测试用例。

可以证明,对于包含n个AND/OR运算符的谓词pr,其最大BOR充分测试集的元素个数为n+2,其最大BRO、BRE充分测试集的元素个数为2n+3(参见练习2.35)。

正如上文所指出的那样,BOR、BRO、BRE充分测试集的规模随着谓词中AND/OR运算符和布尔变量个数的增加而呈线性增长。除了故障检测效力之外,这是本节介绍的测试设计算法的另一个优点;正是这个特点将它们与“蛮劲”方法和基于因果图的方法区分开来。

上面提到的线性性质,其产生的原因在于:(a) 采用谓词的抽象语法树,将约束从叶结点传播到根结点;(b) 在抽象语法树中自底向上传播约束时,采用集合的onto积()而不是笛卡儿积(×)(参见练习2.36)。

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

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

读 书 +更多

程序员教程(第2版)

本书按照人事部、信息产业部全国计算机技术与软件专业技术资格(水平)考试程序员考试大纲编写,是对2004版的修订版,内容包括计算机系统、...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊