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

2.3.3 变量的等价类

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

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

2.3.3 变量的等价类

表2-1和表2-2描述了对不同类型变量进行等价类划分的基本原则, 假定表中的示例都是从软件需求导出的。在后续章节中,将采用这些原则对包含多个输入变量的软件输入域进行等价类划分。下面,讨论表2-1和表2-2中所列出的各项内容。

取值范围(range)取值范围可以通过显式和隐式两种方式定义。例如,速度speed的取值范围可显式地定义为[60,90],而面积area的取值范围则是隐式定义的。对于speed,测试人员可以确定取值范围之外的输入值,而对于area,虽然也可确定取值范围之外的输入值,但由于被测软件运行的软硬件系统对数据表示的限制,有可能使得测试人员无法输入这些取值范围之外的值。

表2-1 取值范围(range)和字符串(string)变量的等价类划分原则

 

① 每个等价类后的符号:↓非法输入等价类的代表,↑合法输入等价类的代表。

age的取值范围也是隐式定义的。例如,在工资管理系统中,age表示雇员的年龄,因此测试人员可通过age(年龄)的语义知识明确age的取值范围,在这种情况下,age应当是大于0而小于等于120的。而对于letter的等价类,则应当是建立在假设letter(字母)是A~Z的26个字母之一的基础之上。

在某些情况下,需要将软件的输入划分为若干个取值范围。例如,在社会安全保障系统中,针对不同的年龄(age)区间进行不同的处理,设有4个取值区间,分别为[1,60]、[61,75],[76,90]和[91,120]。在这种情况下,对于每个取值范围,都有该范围内、小于该范围最小值、大于该范围最大值的3个等价类。在本例中,我们获得6个等价类的代表:0(↓)、57(↑)、73(↑)、84(↑)、95(↑)和121(↓)。与前文表述一致,↓表示非法输入等价类中的数值,↑表示合法输入等价类中的数值。

字符串(string)表中fname表示人名,vname表示变量名,对于这类字符串的划分将使用其语义信息。我们假设人名为长度不超过10的非空字符串,并且只能由字母组成,数字和其他字符都是非法的。因此,空字符串ε是一个非法等价类的非法取值,Sue2和Too Long a name分别是另外两个非法等价类的非法取值,这3个非法取值分别对应于由不同语义约束所确定的3个不同的等价类。同样,对于vname也有合法和非法的取值,需要注意的是,address1中包含一个数字,是vname的合法取值,Sue2中也包含一个数字,却是fname的非法取值。

表2-2 枚举(enumeration)和数组(array)变量的等价类划分原则

 

① 参见对不同项的解释。

② 每个等价类后的符号:↓非法输入等价类的代表,↑合法输入等价类的代表。

枚举(enumeration)表2-2的前几行给出了划分枚举型变量的原则。如果软件针对变量的不同取值表现出不同的行为,那么每个取值自身构成一个等价类,布尔变量就是这样的。但是,在某些情况下,也不尽然。例如,假设auto_color有3个不同的取值(如表2-2中所示),但只用于打印。在这种情况下,完全可以认为软件针对auto_color的不同取值都以同一种方式进行打印,只需选择其中一种取值进行测试即可。但如果认为软件针对auto_color的不同取值采取不同方式进行打印时,每个取值将属于不同的等价类。

针对枚举类型,比如对于某些特定的取值范围,有可能无法确定非法测试输入值。例如,布尔型输入变量up只接受true和false这两个合法值,其所有可能的等价类都将只包含合法值。

数组(array)数组是一组具有相同类型的元素的集合,数组长度及其类型都可作为等价类划分的依据。在表2-2所列的例子中,数组包含至少1个、最多3个元素。因此,空数组以及包含4个元素的数组都是非法输入。如果没有其他附加约束信息,则无须对数组中的元素加以限制;若还有其他约束,则需要增加相应的等价类。例如,若数组中元素的取值范围为[-3,3],则表2-2中所列的数组取值都是非法,而[2,0,3]则是合法输入等价类中的一个代表元素。

复合数据类型(compound data type)有时输入数据具有复合的类型。所谓复合数据类型是指包含两个或两个以上相互独立的属性的输入数据。例如,Java中的数组,以及C++中的记录或结构,都是复合类型。当对软件的一个组件模块(比如函数或对象)进行测试时,将使用这种输入类型。对这种复合数据类型的输入进行等价类划分时,需要考虑输入数据的每个属性的合法和非法取值。下面的例子将具体描述针对复合数据类型输入变量的等价类划分方法。

例2.6学生信息管理系统S,能对某大学的学生信息进行维护和处理,其数据以学生记录的形式存储在数据库中,每个学生对应一条记录。在进行处理以及重写回数据库之前,数据先读到变量当中。新学生的数据是通过鼠标和键盘操作输入进去的。

S的一个功能组件为transcript,当输入学生记录R和整数N时,transcript将记录R所对应的学生成绩单打印N份。假设R的结构为:

程序P2.2

 

结构R包含4个元素,其中前两个元素是简单类型,后两个数组元素是复合类型。确定transcript输入域的等价类的一般过程将在下一节详细论述。这里首先明确一点,即在对transcript的输入域进行等价类划分时,应先对结构R的每个元素进行等价类划分,划分按照表2-1、表2-2及相应的划分原则进行,接着将这些等价类加以组合,具体的组合过程将在下一节中进行论述(参见练习2.7)。

不论是一个对象还是一个软件,它们往往都具有多种输入,这样,测试输入将是一个取值集合,每次输入对应集合中的一个取值。生成测试用例时需要对对象或软件的输入域进行划分,而不是简单地对某一个输入变量进行划分。表2-1、表2-2中的划分原则有助于对单个变量的等价类划分。把依据这些划分原则得到的等价类加以组合,就可以形成对软件整个输入域的划分。

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

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

读 书 +更多

勇敢者的新世界

这是一个最坏的年代,J2EE Web开发技术已经迟滞多年;这是一个最好的年代,J2EE Web开发技术的新变革留给勇于创新的人! 采用Apusic Opera...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊