测试用例的设计是测试实现阶段的核心工作,也是指导如何执行测试的基础。
测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。(百度百科解释)
本文以黑盒测试为例,讲述下常见的用例设计方法
等价类划分、边界值分析、正交试验设计法、错误推测法、异常分析法、场景分析法
一、等价类划分
等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。
它把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例,这样可以避免穷举产生的大量用例。
在使用等价类划分方法设计测试用例时,不但要考虑有效等价类划分,同时也要考虑无效等价类划分:
- 有效等价类
指满足产品规格说明的输入数据,即有效的、有意义的输入数据所构成的集合,可以检验程序是否满足规格说明所规定的功能和性能。 - 无效等价类
不满足程序输入要求或者无效的输入数据所构成的集合,可以测试程序的容错性(对异常情况的处理)
1.1 划分等价类的规则
1、在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
如:输入值是学生成绩,范围是0~100
有效等价类:0<=成绩<=100
无效等价类: 成绩<0 和 成绩>100
2、在输入条件规定了输入值的集合或者规定了”必须如何”的条件情况下,可确立一个有效等价类和多个无效等价类
如网站登录密码必须由6位数字构成
有效等价类:6位数字
无效等价类:位数>6,位数<6,全角数字,字母、特殊字符等......
3、在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类
有效等价类:真(true)
无效等价类:假(false)
4、在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和1个无效等价类。
1)输入条件说明 学历可为:专科、本科、硕士、博士
有效等价类:专科、本科、硕士、博士
无效等价类:四种学历之外的任何学历
2)输入条件为我国的直辖市
有效等价类:北京、上海、天津、重庆
无效等价类:非直辖市的省、自治区等
5、在规定了输入数据的个数,可以划分一个有效等价类和两个无效等价类。
如一个学生一个学期只能选修1-3门课
有效等价类:选修1-3门课
无效等价类:1门课都不选,选课超过3门
6、在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。
如:姓名文本框 允许输入10个vachar
应分别测试输入10个英文字符(分大小写)、10个中文字符、10个全数字字符、10个混合字符等。
1.2 等价类划分方法的使用步骤
1)数据分类,分出有效等价类和无效等价类
2)针对有效等价类,进一步进行分割,直到不能划分为止,形成等价类表,为每一等价类规定一个唯一的编号
3)就每一个具体的等价类,设计一个test case,直到所有有效等价类均被test case覆盖
4)对无效等价类进行相同的处理
1.3 等价类划分的测试运用
1、档案管理系统
设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定在1990年1月~2049年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。
现用等价类划分法设计测试用例,来测试程序的"日期检查功能"。
输入判断 | 有效等价类 | 无效等价类 |
---|---|---|
输入字符长度 | 6位 | 大于6位数字字符、小于6位数字字符 |
输入字符类型 | 数字 | 6位非纯数字类型 |
输入年份约束 | 1990-2049 | 小于1990、大于2049 |
输入月份约束 | 01-12 | 大于12、等于00 |
2、系统注册功能
假设有一个系统,注册时用户名要求由字母开头,后跟字母或数字的任意组合构成,有效字符不超过6个。
- 有效等价类:一对多原则
- 无效等价类(根据测试时间、使用对象来定,同时也要考虑成本):一对一原则
1)由数字开头构成的字符串集合,如2345
2)字母开头构成的字符串,含特殊字符,如re!@#
3)字母开头构成的字符串,且长度>6,如carinazyp、carina123
4)空字符串
5).......
二、边界值分析法
边界值分析法就是对输入或输出的的边界值进行测试的一种黑盒测试方法。边界的条件通常落在等价类的边界上、边界外、边界内,边界值分析法是对等价类划分的一个补充,在测试中,会将这两种方法结合起来共同使用。
在大量的测试工作经验中总结出,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。
2.1 与等价类划分的区别
边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界值都要作为测试条件。
边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。
如一个文本框类型是Vachar(X),当输入边界值长度超过X时,提交后列表页面显示被撑破了
图中每个文本框长度是固定的,当某些图片的名称命名过长时,图片名称已和其余图片名称重叠显示了,同时也影响到了第二行图片的显示(不是从第一列开始显示了)。
2.2 一些特殊的例子
1)输入域的默认值、空值、空格
2)报表的第一行、最后一行、第一列、最后一列
3)循环的开始(第一次)和最后一次
4)屏幕上光标移到最右边、最下面等
5)16-bit 整数的32767、-32768
2.3 边界值分析法的测试运用
案例一:
某程序的规格说明中规定:“重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……”。
测试用例:可取10、50,10.01,49.99,9.99及50.01等;
案例二:
某程序的规格说明要求计算出“每月保险金扣除额为0至1165.25元”
测试用例:可取0.00及1165.24、还要取 -0.01及1165.26等
案例三:
某程序属于情报检索系统,要求每次“最少显示1条、最多显示4条情报摘要”
测试用例:包括1和4,还应包括0和5等
边界值分析是测试设计一个稳定的部分,但是对黑盒测试人员来讲有时候边界并不是那么明显。这些不明显的边界被称作隐藏的边界。具体请查看隐藏的边界的例子
三、正交试验设计方法
在实际的系统测试过程中,输入条件的因素有很多,而且每个因素也不能简单用“是”和“否”表示,如下是我司订单管理系统的搜索页面,条件有很多个,如果组合测试case会变得很多,导致很大的工作量。
正交试验设计(Orthogonal experimental design)是研究多因素多水平的一种设计方法,它是根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了“均匀分散,齐整可比”的特点,是一种高效率、快速、经济的实验设计方法。利用正交试验设计方法进行测试用例编写,可有效减少测试用例个数,合理的减少测试的工时与费用。
3.1 常用术语
1)因子:在一项测试中,凡欲考察的变量称为因子,即影响测试结果的条件因素
2)水平:在测试范围内,因子被考察的值,即各个因子的取值
3.2 正交表的表示形式
正交表是一种特制的表格,具有两条性质:
(1)每一列中各数字出现的次数都一样多。
(2)任何两列所构成的各有序数对出现的次数都一样多
- 等水平的正交表,一般用 Ln(mk)表示
L代表是正交表
n代表测试用例数或正交表的行数,n=k*(m-1)+1
k代表最多可安排影响指标因素的个数或正交表的列数
m表示每个因子水平数
-非等水平的正交表(各列的取值不相等),一般用 Ln(mkpq)表示
如 L8(4X24),可以理解为 L8(4124),表示 5列中,有1列为4水平,4列为2水平。
行数 n=k*(m-1)+q*(p-1)+1
3.3 正交试验设计方法的步骤
1)确定因子数(变量列数)
2)确定每个因子各有哪几个水平(变量的取值)
3)选择合适的正交表
4)把变量的值映射到表中
5)把每一行各因子的水平组合做为一个测试用例
6)删除无效的组合
7)考虑特殊情况,补充上表上没有的,但有价值的其它测试用例
(实际情况中可能使用频率比较高)
3.4 正交表的选定
例如要考察 5个3水平因子及1个2水平因子,则起码的试验次数为5×(3-1)+1×(2-1)+1=12(次)
这就是说,要在行数不小于12,既有2水平列又有3水平列的正交表中选择,发现L18(21×37)适合。
综上所述,选择正交表时考虑以下几点:
1)考虑因子(变量)的个数
2)考虑因子水平(变量取值)的个数
3)考虑正交表的行数
4)当有2个或以上正交表可以被选择时,需选择行数最小的正交表。
备注:将值赋值到表中需要满足以下2个条件
1)任一列,各水平都出现,且出现的次数相等
2)任两列之间各种水平的所有可能组合都出现,且对出现的次数相等
3.5 正交试验设计方法的测试运用
案例一(因子水平值相同)
某所大学通信系共2个班级,刚考完某一门课程,想通过“性别”、“班级”和“成绩”这三个查询条件对通信系这门课程的成绩分布,男女比例或班级比例进行人员查询:
根据 “性别”=“男,女” 进行查询
根据 “班级”=“1班,2班” 进行查询
根据 “成绩”=“及格,不及格” 进行查询
按照传统设计——全部测试,分析上述测试需求,有3个被测元素,被测元素我们称为因子,每个因子有两个取值,我们称之为水平值,所以全部测试用例个数是2X2X2=8,参见下表
序号 | 性别 | 班级 | 成绩 |
---|---|---|---|
1 | 男 | 1班 | 及格 |
2 | 男 | 1班 | 不及格 |
3 | 男 | 2班 | 及格 |
4 | 男 | 2班 | 不及格 |
5 | 女 | 1班 | 及格 |
6 | 女 | 1班 | 不及格 |
7 | 女 | 2班 | 及格 |
8 | 女 | 2班 | 不及格 |
利用正交表设计测试用例,我们得到的测试用例个数是n=3*(2-1)+1=4,对于三因素两水平的刚好有L4(23)的正交表可以套用,如下:
案例二
因子的水平值一样,但没有完全一样的正交表时,该如何选择?
生产化工产品,需要提高收率(产品的实际产量与理论上投入的最大产量之比),认为反应温度的高低、加碱量的多少、催化剂种类等多种因素,都是造成收率不稳的主要原因。根据以往经验,选择温度的三个水平:80℃、85℃、90℃;加碱量的三个水平:35、48、55(kg);催化剂的三个水平:甲、乙、丙三种。
根据分析,水平和因子都为3,没有对应的正交表
选取正交表时需满足以下3个条件:
1)表中的因子数>=3
2)表中至少有3个因子的水平数>=3
3)行数取最少的一个
此时我们选择最近的 L9(34),把最后一列去掉
行数 =4*(3-1)+1=9,即为9个case
如果做全面测试,则需3×3×3=27次
从这点可以说明用正交试验法能有效地、合理地减少测试用例和工时,节约测试成本。
案例三
因子的水平值不相等
如下截取了我目前正在测的项目中某个页面的搜索情况
忽略不重要的因子“时间类型”,剩下7个因子,其中6个因子为2水平(填与不填),状态为4水平,按照规则选取正交表时需要满足3个条件,发现 L16(4X212) 和 L16(42X29) 均适用,因行数也都是16行,所以选择列数少的。
表格中1代表填,0代表不填
温馨提示:实际测试过程中可以借助allpairs工具来自动生成正交表
工具下载:http://www.satisfice.com/tools/pairs.zip
步骤如下:
1)将因子和水平写入Excel文件中
2)将文件另存为“制表符分隔”的文本文件
3)将文件移到工具所在的目录下(若第二步直接到工具目录下第三步可忽略)
4)运行cmd程序,进入工具所在目录
输入命令:allpairs.exe 文件名.txt > 输出文件名.txt
四、错误推测法
错误推测法是根据以往的测试经验和对系统内部知识的了解,列出系统中各种可能存在的错误和容易发生错误的特殊情况,并设计出test case,但是该方法只能作为测试设计的补充,而不能单独用来设计测试用例,不然可能会导致测试覆盖面不全。
另外,错误推测并不是瞎猜,不是没有根据和目的的猜测,它需要了解系统薄弱的地方和开发人员的盲点,也可以根据以往的缺陷分析报告来分析系统最容易出现错误的地方,作为推测的依据。
案例一:聊天窗口功能
1)输入特殊字符(全角、半角)后,窗口是否能够正常显示
2)输入空格,是否能够过滤,是否会计算长度
3)输入html字符
4)输入脚本语言函数
5)在需要密码验证,或者需要二次输入确认的地方,通过复制粘贴第一次的输入内容是否能够通过
案例二:查询功能
1)无条件查询
2)是否支持模糊查询
3)查询的关键字之间是否可用连接字符
4)输入正确的查询条件前加上空格,看是否能正确查出相应的数据
案例三:登录功能
1)输入的数据前存在空格,是否能够正常登录
2)输入的密码是否能够加密显示
3)用户在注销之后是否再登录成功
4)登录失败后,不能记录密码的功能
5)输入密码的时候,大写键盘开启的时候系统是否有提示信息
...等等
五、异常分析法
异常分析法是针对系统有可能存在的异常操作、软硬件缺陷引起的故障进行分析,以此设计test case,验证系统的容错能力,以及当系统出现异常时故障恢复的能力。
测试人员可以人为的制造一些异常情况(如安装程序时断电、服务器断网、数据损坏等),来验证系统的处理情况。
六、场景分析法
现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行(由此会产生很多组场景)。
需要注意的是场景设计方法不是单独存在的,具体到每个测试项目里都会用到多种方法,每种类型的软件有各自的特点,每种测试用例设计的方法也有各自的特点,针对不同软件如何利用这些黑盒方法是非常重要的,在实际测试中,往往是综合使用各种方法才能有效提高测试效率和测试覆盖度,这就需要认真掌握这些方法的原理,积累更多的测试经验,以有效提高测试水平。
设计方法步骤
1)画业务流程图
2)设置功能路径优先级(根据2个原则:使用的频率、重要程度)
3)确定测试路径
4)选取测试数据
5)构造测试用例
如网站测试按照场景流程考虑可分为:
基本流、分支流、异常流、验证流等划分方式