前言
作为测试人,你有没有过这种体验?—— 面对一个新功能,感觉哪里都需要测,但又不知道从哪里下手最有效。花了大半天时间点点这里、点点那里,结果上线后还是漏掉了重要 Bug,被开发同事一问:“这个场景你怎么没测到?”瞬间语塞。
其实很多时候,不是我们不够认真,而是缺少一套清晰的“测试思路”。就像出门旅行,如果没规划路线,很容易走弯路、错过重要景点。
今天,我就和你分享测试工作中最实用的 4 个“测试设计法宝”。


1. 等价类划分
1.1. 问题引入
- 测试的矛盾
- 为了保证软件的质量,我们本应该进行完备的测试,但这是不现实的(
输入量太多、输出量太多、软件实现途径太多) - 从经济的角度来讲,我们希望测试没有冗余(一个好的测试用例在于能
发现至今没有发现的错误、一个成功的测试在于发现至今未发现的错误的测试) - 等价类划分的方法能够使测试事半功倍
- 为了保证软件的质量,我们本应该进行完备的测试,但这是不现实的(
1.2. 等价类的定义
- 等价类是输入域的某一个子集合,而所有的等价类的并集是整个输入域。最重要的是,同一个等价类中,
每一个输入数据对于揭露程序中的错误是等效的

1.3. 等价类的特点
- 完备性
- 无冗余性
- 等价性
1.4. 等价类的划分
- 划分:
划分是指互不相交的一组子集,并且这组子集的并集为整个集合
- 划分对于测试的作用
- 完备性
- 无冗余性
1.5. 等价类测试的基本思想
- 等价类测试的假设
- 测试某一个等价类中的代表值,就意味着对这个等价类中的其他值进行测试
- 等价类测试的思想
- 把所有的数据划分成若干个等价类,然后从每一个等价类中取一个数据进行测试
1.6. 等价类划分方法设计测试用例
使用等价类划分需要经历两步:划分等价类(累出等价类表)和要选取测试用例。
-
划分等价类(EC):
- 等价类是某个输入域的子集,该子集合中所有数据对于揭露程序错误是等效的,所以对等价类中代表值的测试就等价于对这一类中其他值进行测试
- 等价类的划分有两种不同的情况:
- 有效等价类:对于程序的规格说明来说有意义输入数据构成的集合
- 无效等价类:无意义的输入数据构成的集合
- 等价类划分的原则:
- 如果输入条件规定了取址范围,或值的个数,则可以确立一个有效等价类和两个无效等价类

- 如果输入条件规定了输入值的集合,或者是必须如何的条件,此时可确定一个有效等价类、一个无效等价类

- 如果输入条件是一个bool值,可以确立一个有效等价类和一个无效等价类
- 如果规定了输入数据的一组值,则可以为每一个值确立一个有效等价类,此外再确立一个无效等价类

- 如果规定了输入数据必须要遵守的规则,则可以确立一个有效等价类(符合规则)和若干的无效等价类(不符合规则)
- 如果输入条件规定了取址范围,或值的个数,则可以确立一个有效等价类和两个无效等价类
-
选取测试用例
- 在确立了等价类之后,建立等价类表,列出所有划分出的等价类

- 从划分的等价类中按照一下原则选择测试用例
- 为每一个等价类规定一个唯一编号
- 设计一个新的测试用例,使其尽可能多的覆盖尚未覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止
- 设计一个新的测试用例,使其覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖
- 在确立了等价类之后,建立等价类表,列出所有划分出的等价类
实例1:


- 使用等价类划分方法,建立输入的等价类表:

- 然后选取测试用例:


实例2:

- 分析三角形的特点,使用等价类划分:


- 设计测试用例:

2. 边界值分析
2.1. 边界值分析概述
- 通过研究表明,大量缺陷是边界值缺失
- 边界值测试的基本原理是错误更可能出现在输入变量的边界
- 边界值分析是等价类划分的扩展,包括等价类+划分的边界值,
边界值通常是等价类的边界- 但是注意,并不是在等价类中挑选一个元素作为代表,而是在挑选元素时是的等价类的边界收到测试
- 不只是关心输入条件,还应该注意输出条件
2.2. 边界值分析原理
- 边界值分析法是基于可靠性理论中称为“单故障”的假设,即有两个或两个以上故障同时出现引起的软件失效情况很少,也就是说软件失效基本上是单故障引起的
- 边界值分析利用输入变量的最小值、略大于最小值、输入值域内任意值、略小于最大值、最大值来设计测试用例
- 有两个输入变量的程序F边界值分析测试用例:


- 对于有N个输入变量的程序来说,保留其中一个变量,其他值为正常值,被保留的变量依次取,最小值、略大于最小值、输入值域内任意值、略小于最大值、最大值(对于n个变量的程序,边界值分析测试将会有4n+1个测试用例)
2.3. 边界值分析扩展
- 健壮性测试:
- 是边界值分析的一种扩展,除了五个边界值外,还需要考虑略大于最大值=略小于最小值
- 健壮性测试重点关注的是,对于例外情况的输出

- 最坏情况测试
- 边界值分析接受了单故障假设,如果拒绝这种假设,关心当多个变量取极值会出现什么情况
- 对于每一个变量,都要包含输入变量的最小值、略大于最小值、输入值域内任意值、略小于最大值、最大值,然后对这些集合进行笛卡尔积计算


2.4. 实例

- 到达边界的值是合理的输入,只要最少的测试数据
- 超出边界的值是不合理的输入,必须逐个检测,在检查某一个数据时让其他的数据为边界或边界内合理的值
- 分析规格说明,找出其他可能的边界条件
2.5. 边界值分析设计测试用例原则
- 如果输入条件对于取值范围进行了规定,那么应该与边界内部以及刚超出边界外的值作为测试用例
- 如果输入条件对于个数进行了规定,那么应该以最大、稍小于最大、稍大于最大、最小、稍大于最小、稍小于最小个数作为测试用例
- 如果明确指出输入域是一个有序集合,那么应该注意选取有序集合的第一个、最后一个元素作为测试用例
3. 错误猜测法
3.1. 错误猜测法基本原理
- 错误猜测是基于经验和其他一些测试技术(如边界值测试)的。测试人员凭经验猜测错误的类型及在特定的软件中错误发生的位置,并设计测试用例去发现它们
- 例如,如果所有的资源都需要动态申请,最容易出错的地方就是资源释放的语句
- 错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例
3.2. 测试用例设计原则
- 客观因素:产品以前版本已出现的问题
- 已知因素:语言、操作系统、浏览器的限制可能带来的问题
- 经验:由模块之间关联所联想到的测试;由修复软件的错误可能会带来的问题
3.3. 错误猜测法的优缺点
- 一个好的错误猜测可能发现被别的测试方法很容易地遗漏的错误。但反过来,错误猜测也可能是白白浪费时间
3.4. 实例

- 如果说等价划分法和边界值分析法均有线索可寻,那么错误猜测法则更多地依赖于测试人员的直觉与经验
- 对于一个汉化软件而言,在哪些地方出现中文特有问题也许是无法预知的,但我们至少有这样的一些方面可供考虑,那就是:中英文习惯差异,如日期表示法
4. 判定表法
4.1. 判定表法概述
- 判定表是一种用来表示和分析复杂逻辑关系的工具,最适合描述在多个逻辑条件取值的组合所构成的复杂情况下,分别要执行哪些不同的动作
- 判定表可以把复杂的逻辑关系和多种条件组合的情况表达得既明确又具体
- 条件桩(Condition Stub):列出了问题的所有条件。通常认为列出的条件的次序无关紧要
- 动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束
- 条件项(Condition Entry):列出针对它所列条件的取值,在所有可能情况下的真假值
- 动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作
- 规则:任何一个条件组合的特定取值及其相应要执行的操作。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,条件项和动作项就有多少列
4.2. 判定表法步骤
- 确定规则的个数。假如有n个条件,每个条件有两个取值(0,1),故有2^n种规则
- 列出所有的条件桩和动作桩
- 填入条件项
- 填入动作项,制定初始判定表
- 简化,合并相似规则或者相同动作
4.3. 实例


判定表如下:

优化之后:

5. 因果图法
5.1. 因果图法概述
- 因果图是一种挑选高效测试用例以检查组合输入条件的系统方法,它是将自然语言规格说明转化成形式语言规格说明的一种严格的方法,它揭露规格说明中的不完整性和二义性
- 等价类划分方法和边界值分析法都是着重考虑输入条件,并没有考虑到输入情况的各种组合,也没考虑到各个输入情况之间的相互制约关系
- 因果图方法的思路是:从用自然语言书写的程序规格说明的描述中找出因(输入条件)和果(输出或程序状态的改变),通过因果图转换为判定表
5.2. 因果法的基本步骤
- 分析软件规格说明描述中,哪些是原因(
即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符 - 分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的关系,根据这些关系,画出因果图
- 由于语法或环境限制,有些原因与原因之间,结果与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件
- 把因果图转换为判定表
- 把判定表的每一列拿出来作为依据,设计测试用例
5.3. 因果图中的符号
- 因果图的关系符号

- 因果图的约束符号


5.4. 实例

- 分析原因和结果

- 因果图

- 将因果图转换为判定表


- 分析原因和结果

- 因果图如下:

- 转换成判定表



335

被折叠的 条评论
为什么被折叠?



