|
|
51CTO旗下网站
|
|
移动端

2.7.2 谓词测试中的故障模型

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

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

2.7.2 谓词测试中的故障模型

本章论述的谓词测试,重点关注三类故障:布尔运算符故障、关系运算符故障、算术表达式故障。引起布尔运算符故障的原因在于:1)使用了错误的布尔运算符;2)漏用或误用非运算符;3)圆括号使用错误;4)布尔变量使用错误。当错误地使用关系运算符时将导致关系运算符故障。当算术表达式的结果值产生数量为ε的偏差时(off-by-ε)就会出现算术表达式故障。

给定谓词pr和测试用例t,用缩写p(t)表示谓词pr针对t所取的真值。例如,若pr为a<b∧r>s且t为〈a=1,b=2,r=0,s=4〉,则p(t)=false。下面举例说明上述的各种故障。

布尔运算符故障设软件需求规范要求当(a<b)∨(c>d)∧e为真时软件执行某动作。其中,a、b、c、d为整型变量,e?级淞俊O旅媪谐隽烁锰跫?个错误编码,分别包含不同的布尔运算符故障:

(a<b)∧(c>d)∧e布尔运算符错误

(a<b)∨﹁(c>d)∧e非运算符错误

(a<b)∧(c>d)∨e布尔运算符错误

(a<b)∨(c>d)∧f布尔变量错误(使用了f,而不是e)

注意,一个谓词可能包含单个或多个故障,上面的第三个谓词就包含了两个故障。

关系运算符故障关系运算符故障示例如下。

(a=b)∨(c>d)∧e关系运算符错误(使用了=,而不是<)

(a=b)∨(c≤d)∧e关系运算符错误(同时包含两个故障)

(a=b)∨(c>d)∨e关系运算符错误与布尔运算符错误

算术表达式故障考虑三种算术表达式的off-by-ε故障,分别为:off-by-ε、off-by-ε*、off-by-ε+。为了理解三者之间的差别,考虑正确关系表达式Ec,其形式为e1 relop1 e2;考虑错误的关系表达式Ei,其形式为e3 relop2 e4;假设算术表达式e1、e2、e3、e4包含相同的变量集合。三种off-by-ε故障类型定义如下:

Ei包含off-by-ε故障,如果对于任何测试用例e1=e2,有|e3 -e4|=ε。

Ei包含off-by-ε*故障,如果对于任何测试用例e1=e2,有|e3 -e4|≥ε。

Ei包含off-by-ε+故障,如果对于任何测试用例e1=e2,有|e3 -e4|>ε。

假设正确的谓词Ec为a<b+c,其中a、b为整型变量。设ε=1,则Ei的三种错误故障如下:

a<b 假设c=1,Ei包含off-by-1故障,因为对于任何测试用例a=b+c,有|a-b|=1。

a<b+1  假设c≥2,Ei包含off-by-1*故障,因为对于任何测试用例a=b+c,有|a-(b+1)|≥1。

a<b-1  假设c>0,Ei包含off-by-1+故障,因为对于任何测试用例a=b+c,有|a-(b+1)|>1。

给定正确的谓词pc,谓词测试的目标就是产生测试集T,使得测试集T中至少存在一个测试用例t∈T,满足:谓词pc、pc的错误版本pi,针对测试用例t所得到的真值不同。据说,这种测试集可以确保能够发现上面介绍的所有类型的故障。

举例来说,假设pc:a<b+c;pi:a>b+c。考虑测试集T={t1,t2},其中

t1:<a=0,b=0,c=0>

t2:<a=0,b=1,c=1>

对于t1,谓词pc和pi的真值均为false,因此t1无法发现pi中的故障;对于t2,谓词pc真值为true,而pi真值为false,因此t2将发现pi中的故障。

缺失/冗余布尔变量故障

在前面讨论的故障模型中,没有考虑另外两类故障,即缺失布尔变量故障和冗余布尔变量故障。

举个例子,考虑某过程控制系统,系统监测液体容器的压力P和温度T,并将结果传送给控制计算机。控制计算机中的紧急情况检测系统在条件T>Tmax,P>Pmax任一为真时发出告警。将该告警需求规范转换为谓词pr:T>Tmax∨P>Pmax。当pr取值为真时,计算机发出告警,否则不告警。

将pr写成布尔表达式形式a+b,其中a=T>Tmax,b=P>Pmax。

现在假设,编写控制软件时错误地将pr编码为a,而不是a+b。显然pr编码中存在故障,称该故障为缺失布尔变量故障。

同样假设,编写控制软件时错误地将pr编码为a+b+c,其中c是一个布尔变量,它表示某个条件。显然pr编码中存在另一类故障,称该故障为冗余布尔变量故障。

本章介绍的各种测试用例生成方法,都无法确保能够有效发现缺失/冗余布尔变量故障。第7章将介绍基于程序变异的测试用例生成方法,在某些条件下能够确保发现这些故障。

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

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

读 书 +更多

C#入门经典(第3版)

本书将全面介绍C#编程的所有知识,共分为5篇:第1篇是C#语言:介绍了C#语言的所有内容,从基础知识到面向对象的技术,应有尽有。第2篇是Win...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊