系列文章目录
文章目录
前言
【 第2章 黑盒测试 】
- 黑盒测试:功能测试或数据驱动测试
- 测试对象:需求规格说明书和用户手册
- 动态黑盒测试分类:
- 功能测试:等价类划分、边界值分析、因果图、错误推测、判定表、功能图法
- 非功能测试:性能测试、强度测试、兼容性测试、配置测试、安全性测试
2.1 等价类划分
- 方法简介
- 根据等价关系对输入数据或输出数据的集合进行划分
- 对揭露系统中的缺陷来说,子集中的每个输入条件是等效的
- 从每个子集中选取少数代表性的数据做为测试用例
- 将集合划分为互不相交(无冗余性)的子集,且这些子集的并是整个集合(完备性)
- 划分等价类
-
等价类划分包括两种情况:
- 有效等价类:是指对于程序规格说明来说,是合理的、有意义的输入数据构成的集合
- 无效等价类:是指对于程序规格说明来说,是不合理的、无意义的输入数据构成的集合
-
等价类的划分原则:
- 按区间划分:如果可能的输入数据属于一个取值范围或规定了取值个数,则可以确定1个有效等价类和2个无效等价类
- 按数值划分:如果规定了输入数据的一组值,且程序对于每个值分别进行处理,则可为每一个输入值确立1个有效等价类,为这组值确立1个无效等价类
- 按输入集合划分:如果规定了输入值的集合,则可以确定1个有效等价类和1个无效等价类
- 按限制条件划分:如果输入条件是一个布尔量时,可确立1个有效等价类和1个无效等价类
- 按限制规则划分:如果规定了输入数据必须遵守的规则,可确立1个有效等价类和若干个无效等价类
- 按处理方式划分:在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,应将该等价类进一步划分
-
确立等价类后,建立等价类表
-
再从划分出的等价类中选择测试用例
- 确定测试用例
- 选择测试用例的原则:
- 为每一个等价类规定一个唯一的编号
- 设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类;重复这一步骤,直到所有的有效等价类都被覆盖为止
- 设计一个新的测试用例,使其仅覆盖一个无效等价类,重复这一步骤,直到所有的无效等价类都被覆盖为止
- 应用实例PPT
( PASS )
- 传统等价类测试存在的问题
- 规格说明往往没有定义无效测试用例的期望输出应该是什么样的。因此,测试人员需要花费大量时间来定义这些测试用例的期望输出
- 在“合理分类”基础上,未实现“精心挑选”
- 强类型语言、图形化用户界面没有必要考虑过多无效输入
- 适合处理输入条件相互独立的情况,若存在联系则很难描述,且测试效果无法保障
- 等价类划分方法分类
- 弱一般等价类
- 单缺陷原则:缺陷极少是由两个或多个缺陷的同时发生引起的
- 遵循单缺陷原则,要求用例覆盖每一个变量的一种取值即可,取值为有效值
- 两变量x1, x2的函数
- a≤x1≤d, 区间 [a, b), [b, c), [c, d]
- e≤x2≤g, 区间 [e, f), [f, g]
- 强一般等价类
- 遵循多缺陷原则,要求用例覆盖每个变量的每种取值之间的笛卡尔乘积,即所有变量所有取值的所有组合,取值为有效值
- 两变量x1, x2的函数
- a≤x1≤d, 区间 [a, b), [b, c), [c, d]
- e≤x2≤g, 区间 [e, f), [f, g]
- 弱健壮等价类
- 弱:基于单缺陷假设
- 健壮:考虑无效值
- 对有效输入,使用每个有效等价类的一个值
- 对无效输入,测试用例将拥有一个无效值,并保持其余的值都是有效的
- 在弱一般等价类的基础上增加取值为无效值的情况
- 强健壮等价类
- 强:基于多缺陷假设
- 健壮:考虑无效值
- 对有效和无效输入,使用笛卡尔积的每个元素获得测试用例
- 在强一般等价类的基础上增加取值为无效值的情况
- 等价类划分方法分类—总结
- 举例:NextDate函数、佣金问题
2.2 边界值分析
- 方法简介
- 大量错误是发生在输入或输出范围的边界上,而不是在输入或输出范围的内部
- 在测试过程中,边界值分析法是通过选择等价类边界的测试用例进行测试
- 边界值分析方法与等价类划分的区别:
- 边界值/典型值、任意值
- 考虑输出域边界
- 单变量边界值的选取原则
- ① 如果输入条件规定了取值范围,或规定了值的个数,测试用例选择方案:
- 五点法:选择最小值,略高于最小值,正常值,略低于最大值,最大值
- 七点法:选择略低于最小值,最小值,略高于最小值,正常值,略低于最大值,最大值,略高于最大值
- ② 针对规格说明的每个输出条件使用原则①
- ③ 如果规格设计中提到的输入输出是个有序的集合(顺序文件、表格等),就应注意选取有序集中的第一个和最后一个元素作为测试用例
- ④ 如果程序用了一个内部结构,应该选取这个内部数据结构的边界值作为测试用例
- ⑤ 分析规格说明,找出其他可能的边界条件
- 单变量边界值的选取原则-三点法
- 三点:
- 上点:边界上的点,闭内开外(闭指域的边界是封闭的,即闭区间;开指域的边界是开放的,即开区间)
- 离点:离上点最近的点称为离点。开内闭外
- 内点:域范围内的任意一点
- 闭区间:上点为可以取值的点,在上点之间任取一点就是内点。而紧邻上点范围之外的第一对点被称为离点(也称为外点)
- 开区间:开区间中,上点与内点的定义仍然不变。而离点就是上点内部范围内紧邻的一对点
- 半开半闭区间:上点与内点的定义不变。离点是开区间一侧上点内部范围内紧邻的点,而在闭区间一侧是上点外部范围内紧邻的点
2.3 因果图法
- 方法简介
- 等价类划分法和边界值分析法——输入条件相互独立
- 如果输入条件之间存在联系,则很难描述,测试效果难以保障
- 因果图法适合于描述对于多种条件的组合,相应产生多个动作的形式
- 因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况
- 因果图表示方法
- Ci 表示原因,用 Ei 表示结果,各结点表示状态,可取值 “0”或“1”
- 原因:输入条件的有效等价类
- 结果:预期输出
- 输入状态相互之间可能存在某些依赖关系,称为约束
- 因果图法测试用例的设计步骤
- 确定软件规格说明中的原因和结果。
- 并给每个原因和结果赋予一个标识符
- 确定原因和结果之间的逻辑关系。
- 分析软件规格说明中的语义
- 找出原因与结果之间、原因与原因之间对应的关系
- 根据这些关系画出因果图
- 在因果图上使用标准的符号标明约束条件
- 把因果图转换成判定表
- 为判定表中的每一列设计测试用例
- 应用实例
(PASS)
因果图分析法设计要点:
- 为了实现问题简化,原因只描述输入条件的有效等价类;原因和结果尽可能描述为逻辑值形式
- 为了确保测试的充分性,复合输入条件需拆分为简单条件
- 分析思路:从结果入手,分析结果与原因间存在的关系
- 结果分析顺序:
- 若结果间不存在递进关系,则一般从最简单的开始分析
- 若结果间存在递进关系,则必须按顺序进行分析
- 中间结果的确定:
- 原本拆分的输入条件,需通过中间结果合并描述其逻辑关系
- 多个输入条件间存在紧密依赖关系,考虑增加中间结果
- 一个结果与多个原因间存在关系,不是纯粹的与/或关系,需要增加中间结果
- 某输出以某输入作为前提条件,为了后续分析的顺利进行,必须增加中间结果
- 原因间约束的确定:
- 需从最终用户角度出发,考虑对用户输入的限制
- 重点关注互斥、包含和唯一关系
要点小结
- 原因:一般规则、逻辑值(真)、复合条件拆分
- 结果:一般预期输出
- 关系:实线、原因/关系之间
- 约束:虚线
- 原因间:
- 互斥(E):至多有一个成立
- 包含(I):至少有一个成立
- 位移(O):有且只有一个成立
- 需求(R)
- 结果间:屏蔽(M)
2.4 判定表驱动
- 方法简介
- 判定表是分析和表达多逻辑条件下执行不同操作的情况下的工具
- 判定表的四部分
- 生成条件表的规则:
- 规则:任何一个条件组合的特定取值及其相应要执行的操作称为规则
- 化简:就是把有两条或多条具有相同的动作,并且其条件项之间存在着极为相似的关系的规则合并
- “-”:不关心条目,表示条件无关或者条件不适用,也可通过n/a表示条件不适用
- 建立判定表的步骤
- 列出所有的条件桩和动作桩
- 确定规则的个数,假如有n个条件,每个条件有两个取值,故有2n 种规则
- 填入条件项和动作项,得到初始判定表
- 简化,合并相似规则(相同动作)
- 为判定表中的每一列设计测试用例
- 方法实例
【例 2.10】在某系统的注册页面中,规则如下:
① 用户名为必填项,若该项不符合要求,则提示“请输入用户名”;
② 密码长度大于4位小于8位,由纯字母、纯数字或者字母加数字组成,若用户名有效,且该项不符合要求,则提示“密码输入有误”;
③ 确认密码必须与密码完全一致。若用户名和密码均有效,该项不符合要求,则提示“确认密码输入有误”;
④ 若用户名、密码和确认密码均有效,则提示“注册成功”。
- 判定表的优缺点
- 优点:能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏
- 缺点:
- 难以直接从需求规格说明书中直接获取输入和输出之间的因果关系
- 测试用例数目较多
- 不擅长处理条件/动作为非逻辑值的情况
2.5 正交试验法
- 方法简介
- 依据Galois理论,从大量的(实验)数据(测试用例)中挑选适量的,有代表性的点(条件组合),从而合理的安排实验(测试)的一种科学实验设计方法
- 实验指标:判断实验结果优劣的标准
- 因子:可能影响实验指标的条件
- 因子的水平(状态):影响实验因子的条件
- 测试步骤
- (1) 提取功能说明,构造因子-状态表
- 分解功能要求,确定因子状态(采样取值),并构造因子-状态二维表
- 分解功能要求,确定因子状态(采样取值),并构造因子-状态二维表
- (2) 加权筛选,生成因素分析表
- 将各个因子的权值ωi相加,得到权总和SUM
- 将各个因子的权分别除以权总和,得到各因子的权在权总和中所占的比例
- 选择筛选标准
- 采用因子数倒数的一半,即 1/(2n) 作为权比例标准值
- 将各因子的权比例ri与标准值进行比较
- 若 ri > 1/(2n) 则保留该因子,若 ri ≤ 1/(2n) 则舍去该因子及其状态
- 对于保留下来的各个因子采用同样方法对其状态进行筛选
- 将各个因子的权值ωi相加,得到权总和SUM
- (3) 利用正交表构造测试数据集
- 正交表特征:
- ① 取值的均匀分配
- ② 两两组合取值的均匀搭配
- 正交表的正交特性:
- 每列中不同的数字重复次数相同
- 在表L8(27)中,每列有2个不同数字:1和2,每一个各出现4次
- 将任意两列的同行数字看成一个数对,那么一切可能数对重复次数相同
- 在表L8(27)中,任意两列有4种可能的数对:(1,1),(1,2),(2,1),(2,2),每一对各出现2次
- 每列中不同的数字重复次数相同
- 设计用例时包括以下情况:
- 测试输入参数个数取值=正交表因子水平数
- 套用正交表+补充测试用例
- 测试输入参数个数≠正交表因子数
- 选择正交表中因子数略大的,多余因子舍弃
- 测试输入参数取值数≠正交表水平数
- 选择正交表中因子及水平数略大且总实验次数最少的,多余因子舍弃,多余水平均分
- 测试输入参数个数取值=正交表因子水平数
- (3) 利用正交表构造测试数据集-分类
- 二水平正交表:L4(23)、 L8(27)、 L12(211) 、 L16(215)
- 三水平正交表: L9(34)、 L18(37)、 L27(313)
- 四水平正交表: L16(45)
- 五水平正交表: L25(56)
- 混合水平正交表:L18(2×37)
- 完全正交表:行数n、列数p和水平q之间满足以下关系:
- 其他类型正交表
- 应用实例
- 确定因子(输入条件)
- 确定水平(参数)
- 选择合适的正交表L4(23)
- 将变量的值映射到表中
- 设计测试用例
- 方法评价
- 优点:
- 节省测试工作工时—设计简单
- 可控制生成测试用例的数量—加权筛选
- 测试用例具有一定的覆盖度—覆盖均匀
- 问题:
- 无法考虑输入参数相互组合的实际意义
2.6 其他黑盒测试方法
- 场景法—概述
- 从一个流程开始,通过描述经过的路径来确定的过程,经过遍历所有的基本流和扩展流来完成整个场景
- 场景法—设计步骤
- 根据说明,描述程序的基本流及各项扩展流
- 根据基本流和各项扩展流生成不同的场景
- 对每一个场景生成相应的测试用例
- 对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值
- 状态转换法—概述
- 许多需求用状态机的方式来描述,状态机的测试主要关注在测试状态转移的正确性上面
- 测试要点:
- 设计测试用例以覆盖所有状态
- 设计测试用例以覆盖所有状态转换
- 设计测试用例以覆盖所有触发事件
- 状态转换法—设计步骤
- 根据需求提取全部状态
- 绘制状态转换图
- 根据状态迁移图推导测试路径(状态迁移树)
- 选取测试数据,构造测试用例
- 错误推测法—概述
- 基于经验和直觉推测软件中容易产生缺陷的功能、模块及业务场景
- 依据推测逐一进行列举,从而有针对性的设计测试用例
- 一种提高软件质量和效率的技能
- 错误推测法—示例
- 使用错误推测法为“旅馆住宿系统”中“办理房间入住”功能设计测试用例
- 分析易产生的房间资源占用冲突问题:
- 针对空闲的房间,其他游客办理入住时是否允许
- 针对已被预订的某时段的房间,其他游客办理该时段入住时是否允许
- 针对已被预订但又被退订某时段的房间,其他游客办理该时段入住时是否允许
- 针对已被他人入住的某时段的房间,其他游客办理该时段入住时是否允许
- 针对某游客入住到期但同时申请当前房间续租业务的房间,其他游客办理该时段入住时是否允许
- 针对某游客已入住但申请换房业务,且换房成功后空闲的房间,其他游客办理该时段入住时是否允许
- 针对某游客已入住但申请换房业务,且换房成功后新占用的房间,其他游客办理该时段入住时是否允许
- 针对刚刚办理了房间结算业务的房间,其他游客办理已结算时段入住时是否允许
- 针对一间房的多个不同时段被不同游客办理了预订、入住、续租、换房等业务的情况,其他游客办理入住时是否允许