
实验1 等价类划分法与用例设计
1. 实验目标
(1)理解等价类划分法的原理。
(2)能够使用等价类划分法进行测试用例设计。
(3)能够在真实项目中灵活运用等价类划分法。
2. 背景知识
【例1.1】 针对“计算两个1~100的整数和”的需求,进行测试用例设计。
基于“计算两个1~100的整数和”的需求,某学生选取了图1.1所示的测试用例。

图1.1 测试用例选取
图1.1所示测试用例的选取方式可理解为枚举法,即在一个可能存在可行状态的状态全集中,依次遍历所有元素并逐一判断是否为可行状态的一种方法。不难看出,此方法数据量较大、重复性较强,且耗时费力,故不推荐。
注意:很多读者都认为枚举法是缺乏智慧的一种测试方法,自己一定不会采用。但实际测试工作中,常常在不同程度上使用枚举法。例如,在登录页面针对“用户名”字段进行输入测试时,测试人员可能会输入“张三”“李四”,又输入“王五”……,从某种角度来讲,此处已显露了枚举法的思想。
在企业项目的测试用例设计中,应摒弃枚举法,推荐采用等价类划分法。等价类划分法是将程序所有可能的输入进行合理分类,再从每一个分类中选取少数具有代表性的数据作为测试用例,从而开展测试。其中,合理分类即划分等价类。之所以称为等价类,是由于从划分好的分类中,任意选取一条数据都能代表其他数据执行测试,它们之间是等价的。
等价类划分法是一种重要且常用的黑盒测试用例设计方法,广泛应用于各项测试中,优势显著。采用该方法进行黑盒测试用例设计,既能大大减少测试工作量,又能提高测试的有效性。
等价类划分法的关键点是什么呢?如何划分等价类尤为关键。等价类可分为有效等价类和无效等价类,简要阐述如下。
(1)有效等价类:符合需求说明的、合理的输入数据的集合。
(2)无效等价类:不符合需求说明的、无意义的输入数据的集合。
以需求“计算两个1~100的整数和”中的“1~100”为例划分等价类,如图1.2所示。

图1.2 等价类的划分
以上给出了等价类划分法的定义,但是,仅依靠上述内容来认识等价类划分法还是远远不够的,下面介绍利用等价类划分法进行测试用例设计的具体步骤。
(1)依据常用方法划分等价类。
(2)为等价类表中的每一个等价类分别规定一个唯一的编号。
(3)设计一个新用例,使它能够尽量多地覆盖尚未覆盖的有效等价类。重复该步骤,直到所有有效等价类均被用例所覆盖。
(4)设计一个新用例,使它仅覆盖一个尚未覆盖的无效等价类。重复该步骤,直到所有的无效等价类均被用例所覆盖。
至此,读者已从理论层面认识了等价类划分法,下面将从实践角度进一步介绍该方法的应用。以下主要从单一字段开始,进而单一页面,再扩展到实际业务中阐述等价类划分法的应用。
3. 实验任务
【任务1.1】 家庭旅馆住宿管理系统“用户名”字段测试用例设计。
需求:家庭旅馆住宿管理系统的登录页面中,用户名限制为长度为6~10位的自然数。
界面原型:家庭旅馆住宿管理系统登录页面如图1.3所示。

图1.3 家庭旅馆住宿管理系统登录页面
问题:采用等价类划分法进行测试用例设计。
第1步,依据常用方法划分等价类。
第2步,为等价类表中的每一个等价类分别规定一个唯一的编号,如表1.1所示。
表1.1 等价类划分并编号_“用户名”字段

第3步,设计一个新用例,使它能够尽量多地覆盖尚未覆盖的有效等价类。重复该步骤,直到所有有效等价类均被用例所覆盖,如表1.2所示。
第4步,设计一个新用例,使它仅覆盖一个尚未覆盖的无效等价类。重复该步骤,直到所有的无效等价类均被用例所覆盖,如表1.2所示。
表1.2 等价类划分法测试用例设计_“用户名”字段

注意:任务1.1是针对页面中的某一个字段采用等价类划分法进行测试用例设计。
【任务1.2】 家庭旅馆住宿管理系统注册页面测试用例设计。
需求:家庭旅馆住宿管理系统的注册页面须满足以下需求。
(1)登录账号:长度为3~19位,且应以字母开头。
(2)真实姓名:必填项。
(3)登录密码:必填项。
(4)确认密码:确认密码应与登录密码完全一致。
(5)出生日期:年份应为4位数字,月份应为1~12,日期应为1~31。
界面原型:家庭旅馆住宿管理系统注册页面如图1.4所示。

图1.4 家庭旅馆住宿管理系统注册页面
问题:采用等价类划分法进行测试用例设计。
第1步,依据常用方法划分等价类。
第2步,为等价类表中的每一个等价类分别规定一个唯一的编号,如表1.3所示。
表1.3 等价类划分并编号_注册页面

注意:隐含需求,年份不仅应为4位数字,还应为合理范围内的数字。
第3步,设计一个新用例,使它能够尽量多地覆盖尚未覆盖的有效等价类。重复该步骤,直到所有有效等价类均被用例所覆盖,如表1.4所示。
第4步,设计一个新用例,使它仅覆盖一个尚未覆盖的无效等价类。重复该步骤,直到所有的无效等价类均被用例所覆盖,如表1.4所示。
表1.4 等价类划分法测试用例设计_注册页面

注意:
①任务1.2是针对某一个整体页面(页面中包含多个字段)采用等价类划分法进行测试用例设计。
②对比任务1.1和任务1.2,进行等价类划分法的应用。
【任务1.3】 家庭旅馆住宿管理系统结算功能测试用例设计。
任务1.1主要针对页面中的某一个字段进行用例设计,任务1.2主要针对某一个整体页面(页面中包含多个字段)进行用例设计。但是,通常一些软件项目的《需求规格说明书》中,往往仅给出文字需求,而并未给出界面原型进行参照,这显然给测试人员设计测试用例增加了难度。下面结合此类实例进行等价类划分法的应用讲解。
需求:家庭旅馆住宿管理系统的房费结算有一定的规则限制,游客入住旅馆后进行住宿费用结算时,可依据房间价格、入住天数、入住人是否有会员卡等情况给予不同的折扣。具体房费计算方式为
房费=房间单价×折扣率
其中,折扣率根据入住天数(最多30天)、是否有会员卡(有卡、无卡)、入住次数(3次及以下、3次以上)和物品寄存个数的不同而有所不同,体现在不同的情况下对应的积分不同,10分及10分以上折扣率为70%,10分以下折扣率为90%,具体规则如表1.5所示。
表1.5 家庭旅馆住宿管理系统积分规则

问题:采用等价类划分法进行测试用例设计。
第1步,分析需求说明,提取有用信息。需求的详细分析过程如下。
经分析可知,存在如下关系:根据入住人的情况计算积分,再根据积分计算折扣率,进而计算房费。结合得出的关系,思考以下几个问题,以进一步加深对需求的理解。
设计测试用例,首先要了解输入和输出。
(1)什么是输入?由“房费=房间单价×折扣率”可知,输入为房间单价和折扣率。同时,折扣率受到入住天数、会员卡的有无、入住次数及物品寄存情况的影响。所以,输入实质为房间单价、入住天数、会员卡的有无、入住次数及物品寄存。
(2)什么是输出?经分析得知,折扣率应为一个中间输出结果,而最终输出应为房费。
(3)输入有哪些条件限制(含直接给出的需求和隐含的需求)。
入住天数:取值的有效范围为1~30(可再细分成三类)。
会员卡:Y代表有卡;N代表无卡。
入住次数:分为3次及以下和3次以上。
寄存物品个数:空白、字符“无”或1~9的整数。
第2步,根据第1步的分析划分等价类。
第3步,为等价类表中的每一个等价类分别规定一个唯一的编号,如表1.6所示。
表1.6 等价类划分并编号_结算功能

第4步,设计一个新用例,使它能够尽量多地覆盖尚未覆盖的有效等价类。重复该步骤,直到所有有效等价类均被用例所覆盖,如表1.7和表1.8所示。
第5步,设计一个新用例,使它仅覆盖一个尚未覆盖的无效等价类。重复该步骤,直到所有的无效等价类均被用例所覆盖,如表1.7和表1.8所示。
表1.7 等价类划分法测试用例设计(缺少预期结果)_结算功能

表1.8 等价类划分法测试用例设计(带有预期结果)_结算功能

注意:
①任务1.3是针对实际业务的项目需求采用等价类划分法进行测试用例设计。
②在设计实际业务的测试用例时,应进行输入、输出分析,而且要注意保留预期结果。例如,仅将表1.7作为最终测试用例是错误的。
③在进行相关的测试用例设计时,往往需要花较多时间在预期结果上。
④对比任务1.1~1.3,进行等价类划分法的应用。
4. 拓展练习
【练习1.1】 采用等价类划分法针对登录页面进行测试用例设计。登录页面的需求如下。
(1)用户名:系统中已存在的用户名,如weind。
(2)密码:与注册时设置的密码相同,如123。
【练习1.2】 采用等价类划分法针对用户调查页面进行用例设计,用户调查页面主要对用户的个人信息进行调查统计,需要用户填写个人资料,具体需求如下:账号为个人学号或工号,最长不超过6位,且不能重复;姓名最长不超过15个字符,且必须填写;密码和确认密码为6~20位的字符串,必须由英文、数字共同组成;查询密码答案最长不超过30个字符;出生日期必须填写;性别为单选选项;爱好为非必填项。
用户调查界面原型如图1.5所示。

图1.5 用户调查界面原型