基于等价类划分的测试用例设计在软件评测中的应用
2017-09-23赵浩强
赵浩强
引言
软件评测是指对软件产品、软件项目、信息系统等进行的评价和测试,其评测范围通常包括功能性、可靠性、易用性、安全保密性、文档、效率等。作为软件评测最重要部分的功能性测试,几乎占整个测试用例数量的70%以上,其通常采用黑盒测试作为主要的评测方法。
黑盒测试是通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。但用黑盒测试发现软件中的错误,就必须在所有可能的输入条件中确定测试数据,检查程序是否都能产生正确的输出,而测试一个程序穷尽所有可能的数据是不现实的。此外,软件功能性测试的固有弱点是漏洞和冗余,即有些需求没有被测试到,另外一些需求被测试了多次。因此,需要某种方法来实现用少量测试用例来完成高覆盖率的软件评测。等價类划分法是一种典型的黑盒测试方法,基于等价类划分的测试用例设计方法可以较好地应用于此类问题的软件评测中。
1等价类划分
1.1方法概述
等价类划分法是把所有可能的输入数据,即程序的输入域划分为若干部分(子集),然后从每一个子集中选取具有代表性的数据作为测试用例。所谓等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,它们具有等价特性,即每一类的代表性数据在测试中的作用都等价于这一类中的其它数据。这样,对于表征该类的数据输入将能代表整个子集合的输入。
等价类划分有两种不同的情况:有效等价类和无效等价类。有效等价类是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。而无效等价类与有效等价类的定义恰巧相反。设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。
1.2等价关系与集合划分
等价类测试基于等价关系和划分。等价关系是现实世界中广泛存在的一种关系,许多应用问题可以归结为按给定的等价关系划分某集合为等价类问题;划分是互不相交的一组子集,这些子集的并是整个集合。从测试的角度而言,整个集合提供了形式的完备性,互不相交保证形式的无冗余性。为此,做如下定义:
定义1给定集合A,R.AxA是定义在A上的关系,若R是自反的、对称和可传递的,则R称为等价关系。
定义2给定集合A和A的子集A1,A2,…,An,当且仅当:
(1)Au Au…An=A,且(2)i≠j_AjnAj=0时,称这些子集是A的一个划分。其中,(1)保证了集合A的每个元素都会出现在某个子集中;(2)保证了A中没有任何元素会同时出现在两个子集中。
等价关系和集合划分密切相关,其可以相互转换。通过集合划分来定义的关系被称为由划分所导出的等价关系;其逆过程也同样成立:从集合上定义的等价关系出发,可以根据彼此相关的元素定义子集,这就形成了一个划分,称为由等价关系导出的划分。这个划分中的集合称为等价类。
1.3划分原则
等价类划分测试方法的根本思想就是在每个等价类中只选取一个元素来构造测试用例。这样只要恰当地选择了等价类,就能大大降低测试用例之间的冗余。因此,如何恰当地选择等价关系是等价类划分的关键,其划分原则如下:
(1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
(2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。
(3)在输入条件是一个布尔量的情况下,可以确定一个有效等价类和一个无效等价类。
(4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理时,可以确立n个有效等价类和一个无效等价类。
(5)在规定了输入数据必须遵守的规则的情况下,可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
(6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类。
1.4等价类形式
根据健壮性和单/多缺陷假设,可以将等价类组合为4种形式,弱一般等价类、强一般等价类、弱健壮等价类和强健壮等价类。其中:强与弱是基于单/多缺陷假设,健壮性是指测试考虑到了无效值。
(1)弱一般等价类:基于单缺陷假设,每个测试用例只使用一个等价类中的一个变量,一个测试用例尽可能多的覆盖多个有效区间,是一种直观的、程式化的测试用例构造方法。事实上,在弱等价类测试中,测试用例的数量同最大子集数划分中所包含的类数是一样的。
(2)强一般等价类:对应多缺陷假设,其测试用例应覆盖等价类笛卡尔积的每个元素,从而保证两种意义上的“完备性”——一是覆盖了所有等价类,二是覆盖了所有可能的输入组合。
(3)弱健壮等价类:是一种基于单缺陷假设的考虑了无效值的等价类测试形式,也称为传统的等价类测试。其测试用例主要构造策略是对于有效输入,在每个有效等价类中仅取一个值,使其尽可能多地覆盖有效区间;对于无效输入,每个测试用例中要包含一个无效值,其余为有效值,直至所有无效区间被覆盖。
(4)强健壮等价类:是一种对应于多缺陷假设的考虑了无效值的等价类测试形式。对于强健壮等价类来说,测试用例的构建应覆盖到所有等价类(包括无效类)的笛卡尔积的各个元素。
由此可以看出,选择等价关系对等价类测试的好坏至关重要。在经典的输入、处理、输出的结构化程序体系中,输入部分占源程序的80%,强调输入及输入数据的检验;输出部分占源程序的20%。因此,一般来说,等价类测试在输入域上定义等价类,但同样也可以根据输出域来定义等价关系。下文仅针对基于输入域上定义等价类进行测试用例的设计应用。
2测试用例设计步骤
在分析需求规格说明的基础上,依据划分原则确立了等价类之后,应首先建立等价类表,列出所有划分出的等价类,然后进行测试用例的设计。在设计测试用例时,应同时考虑有效等价类和无效等价类测试用例的设计。用最少的测试用例尽可能多地覆盖有效等价类,但对每一个无效等价类,一个测试用例仅覆盖一个无效等价类。有了等价类表后,等价类测试用例的设计步骤如下:
(1)为每个等价类规定一个惟一的编号。
(2)设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖。
(3)设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步,使所有无效等价类均被覆盖。
3实例分析
某软件评测项目中,公共服务平台用户注册时,需求规格说明要求“企业统一社会信用代码”一项为必填项,由固定18位数字或大写英文字母组成,规定前8位必须是数字,且不允许与已注册代码重复。
虽然有要求限定,但穷尽18位字符的测试数据组合是不现实的,可应用等价类划分法设计测试用例。首先建立等价类划分表,见表1。
4结束语
众所周知,软件质量的好坏直接影响着软件企业的发展进程,随着信息技术的蓬勃发展,软件产品和信息系统项目数量层几何式的爆发增长,软件评测需求强烈。同时,软件系统架构日趋集中和复杂,以及软件评测从业人员数量相对有限,给软件评测行业带来了前所未有的挑战。本文希望通过对于等价类划分法设计测试用例的介绍,给软件评测工作在提高测试效率的同时尽可能的覆盖需求规格说明要求提供一种思路。当然,没有一种方法能设计出全部测试方案,在对软件进行实际评测时,可配合使用多种方法,形成一种综合策略,如可再增加边界值分析法域特殊值测试补充边界值数据和特殊输入数据的用例,使软件评测用例设计更充分更完整。endprint