一、什么是测试用例
测试用例设计:将软件测试的行为活动,作为一个科学化的组织归纳。
测试用例:设计一个情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的执行结果。
因为我们不可能进行穷举测试,为了节省时间和资源、提高测试效率,必须从数量极大的可用测试数据精心挑选出具有代表性或者特殊性的测试数据来进行测试。
二、测试用例的好处
在开始实施测试之前设计好测试用例,可以避免盲目测试并提高测试效率。
测试用例的使用令软件测试的实施重点突出、目的明确。
在软件版本更新后只修正少部分的测试用例便可展开测试工作,降低工作强度,缩短项目周期。
功能测试模块的通用化和复用化使软件易于开发,而测试用例的通用化和复用化则会使软件测试易于开展,并随着测试用例的不断精化其效率也不断攀升。
三、测试用例设计方法
1、等价类划分法
将输入(输出)划分成若干个子集合,从子集合中选取一些代表值,只要选取的值测试没有问题,就认为未被选取的数据测试也没有问题。
- 有效等价类:有意义的合理的正确输入;
- 无效等价类:非法的错误的异常的输入;
等价类的划分原则:
- 如果输入是一个取值范围或者值的个数,则划分成一个有效等价类和两个无效等价类;
- 如果输入是一个有限的集合或者必须如何的条件,则划分成一个有效等价类和一个无效等价类;
- 如果输入是一个布尔量,则划分成一个有效等价类和一个无效等价类;
- 如果输入已经划分等价类,针对具体的值处理方式会有所不同更加细化,则划分成多个有效等价类和一个无效等价类;
- 如果输入要同时满足多个条件,则划分成一个有效等价类和多个无效等价类;
等价类划分的使用步骤:
- 将需求规格划分成需求子片段;
- 分析需求子片段,找出输入条件;
- 分析输入条件,结合等价类划分原则进行等价类划分;
- 对划分的等价类进行编号;
- 从划分的等价类中选取数据结合测试用例写作规范生成最终的测试用例;
一条测试用例尽量覆盖多个有效等价类
一条测试用例只覆盖一个无效等价类
等价类划分法例题:
(一)一个有效&两个无效
取值范围:驾照年龄18-65周岁
一个有效(18-65之间)
两个无效(17,66)
(二)一个有效&一个无效
取值范围:第三期学员
一个有效(第三期学员)
一个无效(非第三期学员)
(三)一个有效&一个无效
取值范围:男性
一个有效(男性)
一个无效(女性)
(四)多个有效&一个无效
英语考试,60以上合格(含60分)
一个有效:60分以上
60-79:合格
80-89:良好
90-100:优秀
一个无效:60分以下
(五)一个有效&多个无效
个人信息注册:身高,体重,年龄
一个有效:三个资料都填写
三个无效: 身高填写X
体重填写Y
年龄填写Z
(六)一个有效&多个无效
个人信息注册:身高,体重,年龄
一个有效:三个资料都填写
三个无效:身高填写X
体重填写Y
年龄填写Z
(七)万年历查询软件,要求用户输入以年月日表示的日期,然后系统会换算出该日期的农历表示法及相关黄历信息,假设日期限定在1900年1月1日~2049年12月31日,并规定日期由8位数字字符组成,前4位表示年,中间2位表示月,最后两位表示日期。其中4、6、9、11月只有30天,平年的2月份只有28天,闰年的2月份有29天。(备注:为简化处理,本题进行用例设计时。不考虑对平年、闰年的判断)
划分等价类并编号:
设计测试用例覆盖的有效等价类,设计的测试用例如下:
为每一个无效等价类设计一个测试用例,设计结果如下:
2、边界值分析法
边界值分析法是对等价类划分法的一种补充,经验表明边界是问题多发区;如果边界测试没有发现问题,就认为其他区域发生问题的概率较小。
相关术语:
- 上点:边界上的点叫做上点
- 离点:离边界最近的点叫做离点
- 如果是闭区间,离点落在边界外
- 如果是开区间,离点落在边界内
- 内点:边界内任意一个点叫做内点
边界值分析法选取数据原则:
- 如果输入是一个取值范围或者值的个数,则以边界和边界附近的值作为测试用例数据选取;
- 如果输入的值的个数是一个取值范围,则以最大个数;最大个数+1;最小个数;最小个数-1作为测试用例数据选取;
- 如果输入是一个有序的集合,则以第一个元素和最后一个元素作为测试用例数据选取;
- 如果是一个内部数据结构,则以极限值作为测试数据选取;
边界值分析法使用步骤:
- 将需求规格划分成需求子片段;
- 找出需求片段中的输入条件。为每个条件划分等价类;
- 确定等价类的边界值;
- 根据边界值分析法测试用例选取原则确定测试用例的输入数据;
- 生成最终的测试用例;
边界值分析法例题:
(一)
取值范围:计算器计算100以内正数加减法:1-100
取值:有效:1,100
无效:0,101
值的个数(固定是几):处理三个数是否能组成三角形
有效:3个
无效:2个,4个
(二)
值的个数是取值范围:密码6-16
取值:有效:6,16
无效:5,17
(三)
有序的集合:01-12月
取值:有效:01,12
无效:00,13
(四)
内部数据结构:栈:储存10个数据
取值:有效:10
无效:11
3、因果图法
如果输入之间有关系,我们在测试时必须考虑输入条件的各种组合,那么可以考虑使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图。
优点:因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。
因果图法的基本思想:
使用因果图法设计测试用例时,首先从程序规格说明书的描述中,找出因(输入条件)和果(输出结果或者程序状态的改变),然后通过因果图转换为判定表,最后为判定表中的每一列设计一个测试用例。
因果图中出现的基本符号:
通常在因果图中用Ci表示原因,用Ei表示结果,各结点表示状态,可取值“0”或“1”。“0”表示某状态不出现,“1”表示某状态出现。
主要的原因和结果之间的关系有:
- 恒等: 若c1为1,则e1也为1,否则e1为0.
- 非: 若c1是1,则e1为0,否则e1是1.
- 或: 若c1或c2或c3是1,则e1是1,若三者都不为1,则e1为0.
- 与: 若c1和c2都是1,则e1为1,否则若有其中一个不为1,则e1为0.
实际问题中,输入状态之间可能存在某些依赖关系,这种依赖关系被称为”约束”.
在因果图中使用特定的符号来表示这些约束关系:
约束关系说明:
E约束(异): a,b最多有一个可能为1,不能同时为1.
I约束(或): a,b,c中至少有一个必须为1,不能同时为0.
O约束(惟一): a和b必须有一个且仅有一个为1
R约束(要求):a是1时,b必须是1,即a为1时,b不能为0
M约束:对输出条件的约束,若结果a为1,则结果b必须为0.
用因果图生成测试用例的基本步骤:
- 分析软件规格说明描述中,哪些是原因 (即输入条件或输入条件的等价类),哪些是结果 (即输出条件),并给每个原因和结果赋予一个标识符。
- 分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。
- 由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。
- 把因果图转换成判定表。
- 把判定表的每一列拿出来作为依据,设计测试用例。
应用举例:
分析问题,按照如下步骤进行:
(1)根据软件规格说明书,列出原因和结果.
(2)找出原因和结果之间的关系,原因和原因之间的约束关系,画出因果图.
(3)将因果图转化为判定表
(4)根据判定表设计测试用例.
某文件修改需求:
如想对文件进行修改,需要遵守以下规则:
输入的第一列字符必须是A或B,
第二列字符必须是一个数字,
如果第一列字符不正确,则给出信息L;
如果第二列字符不正确,则给出信息M。
如果两列字符输入正确,则修改文件
原因:
C1:第一个字符是A;
C2:第一个字符是B;
C3:第二个字符是一个数字字符.
结果:
E1:给出信息L;
E2:修改文件;
E3:给出信息M;
将因果图转化为判定表:
设计测试用例:
测试用例1: 输入数据:A3 预期输出:修改文件
测试用例2: 输入数据:AM 预期输出:给出信息M
测试用例3: 输入数据:B3 预期输出:修改文件
测试用例4: 输入数据:B* 预期输出:给出信息M
测试用例5: 输入数据:C2 预期输出:给出信息L
测试用例6: 输入数据:CM 预期输出:给出信息LM
因果图法的优点:
考虑了多个输入之间的相互组合、相互制约关系;
能够帮助我们按一定步骤,高效率地选择测试用例,同时还能为我们指出,程序规格说明描述中存在着什么问题。