|
|
|
|
移动端

2.3.5 等价类划分的完整过程

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

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

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

2.3.5 等价类划分的完整过程

不论软件规模大小,都可采用基于等价类划分的方法选择测试用例。对于只涉及几个(如3~5个)变量的软件或对象,测试用例的选择可以用手工方式进行。但当软件或对象的规模大到拥有25个甚至更多输入变量时,以手工方式选择测试用例就会非常困难且容易出错。此时,建议使用相应的工具辅助完成测试用例的选择。

下面描述的步骤有助于根据软件需求产生等价类。其中,步骤2、步骤3既可以采用手工方式也可以用自动的方式完成。步骤1,“确定输入域”,一般只能以手工方式完成;除非软件需求是用形式化的需求规约语言(如Z语言)描述的,步骤1才可能以自动的方式完成。

步骤1确定输入域认真分析需求并确定所有输入、输出变量,以及变量类型和变量使用条件。环境变量,比如被测软件模块中的类变量,还有Unix、Windows以及其他操作系统的环境变量,都是输入变量。确定各个变量的取值集合,这些集合的笛卡儿积基本上就是被测软件的输入域。由步骤4中的内容可以知道,根据被测软件需求规格说明、设计说明中所规定的各种约束,可以对本步骤得到的输入域进行约简。

步骤2等价类划分将每个变量的取值集合划分为互不相交的子集,则每个子集对应一个等价类,所有等价类就构成了对输入域的一个划分。利用单个变量的取值进行输入域划分,是由软件的预期结果所决定的,即将软件以相同方式处理的输入取值分组在一起。这里所说的“相同方式”通常由测试人员决定,前面的例子说明了这种分组情况。

步骤3组合等价类这一步有时会被省略,即直接根据那些为单个变量定义的等价类选择测试用例。但如果这样做的话,可能无法获得高效的测试用例。

使用上一小节描述的多元化分方法,可以将等价类组合起来。例如,假设程序P有两个整数类型的输入变量,分别记为x和y;假设x的取值集合被划分为两个子集X1和X2,y的取值集合被划分为3个子集Y1、Y2和Y3,则集合{X1,X2}与{Y1,Y2,Y3}的笛卡儿积就构成了程序P的包含6个元素的等价类集合E,E中的每个元素由x的一个等价类与y的一个等价类组合而成。

 

注意,该步骤将产生大量的等价类,数量大得难以管理,因此在实际应用中要尽量避免。2.2节、2.6节和第4章将讨论处理等价类数量爆炸的方法。

步骤4确定不可测的等价类有些输入数据组合在实际测试过程中是无法生成的,包含这种数据的等价类就是不可测等价类。产生不可测等价类的原因很多。举例来说,假设通过某软件的GUI对其进行测试,即数据只有通过GUI才能输入。GUI界面中只包含了所有有效的输入,不允许无效的输入。软件需求中也有一些约束,致使某些等价类不可测。

不可测数据指的是无法输入到被测软件中的那些输入数据组合。另外,由于GUI具有过滤无效输入组合的功能,致使某些数据组合也是不可测的。尽管某些等价类是完全不可测的,但是在大多数情况下,等价类中将同时包含不可测数据和可测数据。

在本步骤中,我们将剔除E中包含不可测数据的等价类,使用约简后的等价类选择测试用例。值得注意的是,利用约简后的等价类选择的测试用例仍然有可能包含不可测数据。

例2.8根据前文描述的等价类划分过程,对热水器温控软件划分等价类。温控软件的需求如下:

热水器控制系统简称BCS。BCS的温控软件简称CS,它提供若干选项。供操作员使用的控制选项C包括3个控制命令(cmd):温度控制命令(temp)、系统关闭命令(shut)、请求取消命令(cancel)。命令temp要求操作员输入温度调节数值tempch,其范围为[-10,10],以5摄氏度递增,且温度调节数值不能为0。

当操作员选择了控制选项C时,BCS将对V进行检查,若V为GUI,则操作员通过GUI选择控制命令(cmd)之一执行;若V为file,则BCS通过一命令文件获取命令执行。

命令文件包含一条控制命令(cmd),当控制命令为temp时,则命令文件同时包含温度调节数值tempch。变量F表示命令文件名,BCS中另一个特定模块负责V和F的取值的选取。

温控软件依据temp、shut命令,产生相应的控制信号并将其发送至热水器加热系统。

 
图2-5 温控软件的输入。V和F是环境变量,
V用于确定命令(cmd)和温度调节数值(tempch)
的输入方式,包括GUI方式或命令文件方式。
F指的是命令文件名


假设在仿真环境下对温控软件实施测试,测试人员充当系统操作员并通过GUI实现与CS的交互,GUI使得测试人员只能从需求规定的有限取值集合中进行选取。举例来说,tempch的有效取值为-10,-5,5,10,将这4个值记为t_valid,其余的所有值记为t_invalid。图2-5是GUI、被测温控软件以及输入变量的示意图。

确定输入域生成等价类的第一步是确定输入域。结合前文所述知道,这里确定的输入域很可能是温控软件真正输入域的超集。首先检查需求,确定输入变量、变量类型及其相应取值,如下表所示:

 

表中的每个变量定义了一个集合,由这4个集合的笛卡儿积构成的集合S如下:

S=V × F × cmd × tempch

将BCS的输入域记为I,I包含S。下面给出了既属于I又属于S的元组实例,其中下划线(_)表示无关值:

(GUI,_,temp,-5)

(GUI,_,cancel,_)

(file,cmd_file,shut,_)

下面的四元组属于I但不属于S:

(file,cmd_file,temp,0)

等价类划分各变量所对应的等价类如下表所示。结合前文所述知道,对于枚举型变量,其每个取值都构成一个独立的等价类。

 

f_valid表示有效文件名集合,f_invalid表示无效文件名集合;c_invalid表示文件F中定义的无效命令集合;t_invalid表示文件F中定义的tempch取值范围外的数值集合;undefined表示环境变量V未被定义。注意,f_valid,f_invalid,c_invalid,t_invalid都是由若干具体数值构成的集合,唯独undefined仅表示V未被定义。

组合等价类变量V,F,cmd,tempch代表的集合分别被划分成3个、2个、4个、5个子集,因此这4个变量共形成3×2×4×5=120个等价类,其部分实例如下:

 

注意,上面列出的每个类都能代表温控软件的无限多组输入。例如,对于

其中f_valid可以取任意有效的文件名,进而形成一个无限集合。随后我们将看到,等价类中的每个值都可作为温控软件潜在的测试输入。

剔除不可测等价类:注意,只有当操作员选择temp命令(即cmd为temp)时,才能实现对热水器的温度调节,因此符合下面模板的等价类都是不可测的:

{(V,F,{cancel}∪{shut}∪{c_invalid},{-10}∪{-5}∪{5}∪{10}∪  t_invalid)}

由于cmd和tempch之间存在这种“父-子”约束关系,将有3 × 2 × 3 × 5=90个等价类成为不可测的。

接下来又知道,在GUI方式下,将无法输入非法温度调节值。这样,又有2个不可测的等价类产生了,如下所示:

 

同样地,我们发现,当V=file且F是一个无效文件名时,则无需获取cmd和tempch的具体取值,此时,将有5个不可测的等价类产生,由如下模板表示:

 

依此思路,还可以知道当V为undefined时,也不需要进一步获取cmd和tempch的具体取值,这样,将又产生5个不可测的等价类,相应的模板如下:

 

其中,当V为undefined时,字符串F既可以是有效文件名也可以是无效文件名。

讨论至此,已经获得了共90+2+5+5=102个不可测的等价类,只剩下18个等价类是可测的。当然,这些不可测等价类的产生,是建立在这样一个假设之上的:在测试温控软件的过程中,某些输入组合是不可能实现的。如果这个假设不成立,那么所有120个等价类都可能是可测的。

这18个可测等价类可由下面7个模版表示,其中符号“_”表示在测试过程中需要输入但并不起任何实际作用的数据,“NA”表示由于软件GUI的限制,而无法实际输入的数据。

 

其中,有些输入元组包含无关值,例如,当V=GUI时,则不论F如何取值都不会对温控软件的行为产生影响。尽管如此,测试人员仍需谨慎对待这些无关值,下面的章节将讨论这一点。

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

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

读 书 +更多

SQL实用简明教程(第2版)

SQL(结构化查询语言)是数据库系统的通用语言,利用它可以用几乎同样的语句在不同的数据库系统上执行同样的操作,在数据库系统的开发中有着...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊