测试用例的定义
- 测试用例,也叫Test Case,为了特定的目的而设计的一组测试输入,执行条件和预期结果的文档。实际测试中,由于无法达到穷举测试,所以要从大量输入数据中精选有代表性或特殊性的数据来作为测试数据。
- 好的测试用例应该能发现尚未发现的软件缺陷。
- 测试用例就是:设计一个情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的预期结果。如果程序在这种情况下不能正常运行,而且这种问题会重复发生,那就表示软件程序人员已经测出软件有缺陷,这时候就必须将这个问题标示出来,并且通知软件开发人员。
- 软件开发人员接获通知后,将这个问题修改完成于下一个测试版本内软件测试工程师取得新的测试版本后,必须利用同一个用例来测试这个问题,(回归测试)确保该问题己修改完成。
良好测试用例的作用
- 便于理清测试思路,确保需覆盖测试的功能点无遗漏
- 良好的测试用例具有重复使用的功能 。例:回归测试
- 好的测试用例会分门别类地提供给测试人员参考和使用。例: 测试用例按功能、性能、易用等分类编号
- 从测试管理的角度,测试用例的通过率和软件缺陷的数目是软件产品质量好坏的测试标准。例: 测试计划中提到的测试通过的标准,直接影响到软件是否发布
- 测试用例可以作为检验测试人员进度、工作量以及跟踪/管理测试人员工作效率的因素。例: 测试人员的工作量计算和绩效考核
编写测试用例的要素有很多,不同的公司有不同的要求下面就是常见的测试用例的要素:
- 用例编号: 每个测试用例都有唯一的标识号,用以区别其他测试用例。命名规则一般是项目名称+测试阶段类型(系统测试阶段)+编号。
- 用例标题:一般情况下我们使用一句简单的话,描述要测试的目的。一般只写一个目的。
- 测试项目:当前测试的功能所属范围
- 用例级别: 定义测试用例的优先级别,可以粗略地分为 “ 高 ” 和 “ 低 ” 两个级别,例: 核心功能 ---高 , 界面风格 ---低。
- 预制条件:是指执行测试用例必要的硬件、软件、测试工具、人员等。
- 输入数据:该说明列举执行测试用例的所有输入内容或者条件。
- 测试步骤:用最朴实的语言,写出软件的操作步骤,越详细越好。
- 预期结果:描述进行测试用例预期的结果,和测试目的密切相关。测试目的决定了测试步骤和预期结果。
- 测试结果:根据测试用例执行的结果来填写,只有成功和失败。没有执行测试用例的时候,可以为空。
用例编写(经验)注意事项:
- 不要设计“穷举测试用例”
- 在详细测试用例与有效测试时间中找到平衡点
- 好的测试用例应该多关注“反向测试问题”
- 测试用例库应该不断更新和维护,(杀虫剂效应)。
- 测试用例可以复用,但要注意数据有效性与环境变化
- 多去学习前辈所设计的测试用例,针对不同的测试对象灵活采用不同的方法
测试用例的设计之等价类划分法
为什么要学等价类?
- 等价类就是将测试集合科学的从无穷大减少到有限小的过程,解决了穷举测试的弊端。
概念:等价类划分法就是解决如何选择适当的数据子集来代表整个数据集的问题,通过降低测试的数目去实现“合理的”覆盖,覆盖了更多的可能数据,以发现更多的软件缺陷。等价类是指找到具体共同特征的某个输入域的的子集合,在该子集合各个输入数据对于揭露程序中的错误都是等效的。
适用场景
- 针对需要数据量大,有测试数据输入的地方,典型代表:页面级的输入框类测试,
原理
- 程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例
- 每一类的代表性数据在测试中的作用等价于这一类中的其他值,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误。
- 如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误 。
等价类分为
- 有效等价类:是指输入完全满足程序输入的规格说明、有意义的输入数据所构成的集合,利用有效等价类,可以检验程序是否满足规格说明所规定的功能和性能(满足要求的数据)
- 无效等价类:和有效等价类相反,即不满足程序输入要求或者无效的输入数据构成的集合。使用无效等价类,可以测试程序/系统的容错性——对异常输入情况的处理(不满足要求的数据)
确定等价类的原则
- 在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类
- 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类
- 在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类
- 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类
- 在规定了输入数据必须遵守的规则的情况下,可确立有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)
- 在确知己划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类
使用等价类原则
- 为每一个等价类设计一个唯一的编号
- 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这个过程,直至所有的有效等价类均被测试用例所覆盖;
- 设计一个新的测试用例,使其仅覆盖一个无效等价类,重复这个过程,直至所有的无效等价类均被测试用例所覆盖。构造无效规则时要注意:只能同时违背一条规则
等价类划分法设计用例步骤
- 明确需求
- 确定有效和无效等价类。无效等价类,我可以考虑从几个维度:长度丶类型丶组成规则丶是否为空丶是否重复丶是否区分大小写,是否去前后空格等等去分析。
- 提取数据编写测试用例。编写测试用例一定要遵循使用等价类原则
案例:测试QQ号6--10位自然数(非注册)
下图是部分设计测试用例,一条等价类就是一条测试用例
测试用例的设计之边界法
边界法其实就是对等价类划分法的一种补充手段。长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部(从开发角度可以发现)。因此针对各种边界情况设计测试用例,可以查出更多的错误。
概念:对输入或输出的边界值【有效等价类和无效等价类的界限】进行测试的一种黑盒测试方法,边界值只是有个特定的数据。
适用场景
- 在等价类的基础上(等价类方法的重要补充)针对有边界范围的测试数据输入的地方 ,常见词语描述:大小、尺寸、重量、最大、最小、至多、至少等修饰词语 ,典型代表:有边界范围的输入框类测试
边界值的常见叫法
- 上点:边界上的点(正好等于)
- 离点:距离上点最近的点(刚好大于、刚好小于于)
- 内点:范围内的点(区间范围内的数据)
测试两个两位数整数之间的和(即-99到99之间数据求和)?上点丶离点丶内点如下图所示:
怎么使用边界值分析法取值
- 上点:必选(不考虑区间开闭)
- 内点:必选(建议选择中间范围)
- 离点:开内闭外(考虑开闭区间,开区间选择内部离点,闭区间选择外部离点)
因为此方法是对等价类的一种补充,所以我们要在等价类的基础上补充边界值的测试用例。
注意:如果是开区间要转化,在去取上点丶内点丶离点
测试用例的设计之判定表法
- 等价类边界值分析法主要关注单个输入类条件的测试,并未考虑输入条件之间的各种组合、输入条件与输出结果之间有相互制约关系的测试。 而判定表法恰恰是为了解决这种情况而产生的。判定表:是一种以表格形式表达多条件逻辑判断的工具 。
适用场景
有多个输入条件,多个输出结果,输入条件之间有组合关系,输入条件和输出结果之间有依赖(制约)关系。假设有n个条件,每个条件的取值有两个(0,1),全组合有2^n种规则 ,因此不适合判定条件特别多的情况。
判定表组成部分
- 条件桩:列出问题中的所有条件。列出条件的次序无关紧要。 (所有输入)
- 动作桩:列出问题中可能采取的操作。操作的排列顺序没有约束。 (所有输出操作)
- 条件项:列出条件对应的取值。所有可能情况下的真假值。 (输入的取值,有效等价类和无效等价类。一般我们使用Y或者1代表有效等价类丶N或者0代表无效等价类)
- 动作项:列出条件项的各种取值情况下应该采取的动作结果。(输出的结果)
判定表法设计用例步骤
1:明确需求
2:画出判定表
- 列出条件桩和动作桩
- 填写条件项,对条件进行全组合
- 根据条件项的组合确定动作项
- 简化、合并相似规则(有相同的动作)
:3:根据每行数据对应一条测试用例。
因果图法
- 也是对有多个输入条件,多个输出结果,输入条件之间有组合关系,输入条件和输出结果之间有依赖(制约)关系,一种分析方法。使用图解的方式得到判定标,在转化为测试用例。
正交法
正交法就是一种基于组合数学和概率学知识,通过设计最少的测试用例来获得最大的测试覆盖率的科学实验方法。
适用场景
- 输入数据或者输入数据的组合数量很大的场景
使用步骤
- 需求分析
- 确定因子与水平(因子:控件名称;水平:每个控件对应的取值)
- 确定要采用的正交表
- 将正交表中的字母用文字代替。正交表的选择可以百度得到。
- 设计测试用例(一行就是一条测试用例)
结论:
- 不管是因果图法还是正交法都是对判定法表的一种补充
测试用例的设计之场景法(流程图法)
- 场景法,也可以叫流程图法,是用流程图描述用户的使用场景,然后通过覆盖流程路径来设计测试用例。
场景法的意义
- 用户使用角度:用户平时使用的不是单个功能,而是多个功能组合起来进行使用
- 测试人员角度:平时测试的都是单个功能点进行测试,容易忽略多个功能的组合测试
场景法的适用场景
- 对于多个功能之间的组合逻辑测试,可以使用场景法。比如集成丶系统丶验收测试
流程图设计测试用例步骤
- 画出业务(正确丶错误)流程
- 设计测试用例(一条流程路径就是一条测试用例)
流程图的常用符号
测试用例的设计之错误推测法
错误推测法是指利用直觉和经验猜测出错的可能类型,有针对性列举出程序中所有可能的错误和容易发生错误的情况,它是测试经验丰富的测试人员喜欢的一种测试用例设计方法。
基本思想
- 列举可能犯的错误或错误易发生的清单,然后根据清单编写测试用例
适用场景
- 项目紧、任务急、时间不够,不能按部就班的进行测试
- 根据之前项目经验,找到之前出错过的类似模块进行重点测试(bug的群集现象)
方法小结
- 具有输入功能,但输入之间没有组合关系建议使用【等价类】
- 输入有边界 如长度、类型建议使用【边界值】
- 多输入、多输出、输入与输入之间存在组合关系、输入与输出之间存在依赖或制约关系 建议使用【判定表】【因果图】
- 用最少的测试用例获得最大测试覆盖率时 建议使用正交法】
- 多个功能的组合测试 建议使用【场景法(流程图)】
- 最后推荐使用【错误推测法】来进一步补充测试用例