黑盒测试
将程序看成一个不透明的黑盒子,在看不到程序内部逻辑结构和内部特性的情况下(就是不看代码什么的),依据需求规格说明书中有关功能的输入、输出说明,在程序的接口测试程序,以检查程序的功能是否符合它的功能需求。
黑盒测试又称功能测试、数据驱动测试、基于需求规格说明书的测试。
测试用例
通过设计少量的、具有代表性的测试用例,在最短的时间以较少的人力、资源投入,发现尽可能多的软件缺陷。
测试用例三要素:测试输入、执行条件、预期结果。
黑盒测试方法
等价类划分法
将所有可能的输入数据划分成若干个等价类,同一个等价类中的所有数据地位平等,可以在每个等价类中任意选取一个代表性的数据作为测试用例。
等价类的划分按照输入的值可以划分为有效等价类(合理有效、有意义的输入)和无效等价类(无效的、无意义的输入),二者具有完全不同的系统内部处理机制。
有效等价类验证是否实现预期功能和性能。
无效等价类验证对象的容错性,以及对无效数据的识别和反馈。
- 输入条件规定了取值范围或个数,可以划分1个有效等价类和2个无效等价类。如规定密码长度为6位,则有效等价类为密码长度为6位,无效等价类为密码长度大于6位和小于6位。
- 输入数据是n个值,则n个有效输入,1个无效输入。如有效输入为助教、讲师、副教授、教授,则无效输入为:非其中的任何一个。
- 输入数据遵循某些规则,则有多个有效输入和多个无效输入(从不同角度违反规则)。如输入数据规定为以字母或下划线开头的字符串,则有效输入为以字母开头的字符串和以下划线开头的字符串,无效输入为以数字开头的字符串和以标点符号开头的字符串(非下划线和字母开头都可)。
等价类划分法存在一个缺点,即没有考虑到多个输入数据不同组合的情况。
示例:
以商城的注册模块为例,依据各测试项写出测试点,然后划分出有效等价类和无效等价类,并编号。
测试项 | 测试点 | 有效等价类 | 编号 | 无效等价类 | 编号 |
用户名 | 组成要求 | 字母、数字、下划线 | (1) | 特殊字符 | (9) |
格式要求 | 字母开头 | (2) | 数字开头 | (10) | |
下划线开头 | (11) | ||||
长度要求 | [6,18] | (3) | [0,6) | (12) | |
>18 | (13) | ||||
是否已注册 | 未注册 | (4) | 已注册 | (14) | |
密码 | 组成要求 | 字母、数字或下划线 | (5) | 特殊字符 | (15) |
长度要求 | [6,16] | (6) | [0,6) | (16) | |
>16 | (17) | ||||
确认密码 | 一致性 | 与密码一致 | (7) | 与密码不一致 | (18) |
验证码 | 是否正确 | 正确 | (8) | 不正确 | (19) |
测试输入 | 预期结果 | 实际结果 | 覆盖的等价类 |
用户名:vae_0514 密码:860514_vaevae 确认密码:860514_vaevae 验证码正确 | 注册成功 | 注册成功 | (1)至(8) |
测试输入 | 预期结果 | 实际结果 | 覆盖的等价类 |
用户名:05_vae14 密码:860514_vaevae 确认密码:860514_vaevae 验证码正确 | 注册失败 | 注册失败 | (10) |
边界值分析法
很多错误都发生在输入与输出的边界。
边界的条件类型 有:
数字 | 字符 | 位置 | 质量 | 尺寸 | 空间 |
最大/最小 | 首位/末位 | 上/下 | 最高/最低 | 最短/最长 | 空/满 |
- 规定取值范围,则选取边界以及边界附近的值,一般为边界值-1、边界值、边界值+1。
- 规定值的个数:最大个数、最小个数、比最大大一个、比最小小一个。
由上可在等价分析的基础上识别边界点,追加测试用例。如,在上例用户名长度要求中,可选取的有效等价类的边界值为6,7,17,18,追加这四个测试用例,可选取的无效等价类的边界值为0,5,19。具体变化如下图:
测试项 | 测试点 | 有效等价类 | 边界 | 编号 | 无效等价类 | 边界 | 编号 |
用户名 | 组成要求 | 字母、数字、下划线 | (1) | 特殊字符 | (15) | ||
格式要求 | 字母开头 | (2) | 数字开头 | (16) | |||
下划线开头 | (17) | ||||||
长度要求 | [6,18] | 6 | (3) | [0,6) | 0 | (18) | |
7 | (4) | 5 | (19) | ||||
17 | (5) | >18 | 19 | (20) | |||
18 | (6) | ||||||
是否已注册 | 未注册 | (7) | 已注册 | (21) | |||
密码 | 组成要求 | 字母、数字或下划线 | (8) | 特殊字符 | (22) | ||
长度要求 | [6,16] | 6 | (9) | [0,6) | 0 | (23) | |
7 | (10) | 5 | (24) | ||||
15 | (11) | >16 | 17 | (25) | |||
16 | (12) | ||||||
确认密码 | 一致性 | 与密码一致 | (13) | 与密码不一致 | (26) | ||
验证码 | 是否正确 | 正确 | (14) | 不正确 | (27) | ||
因果图分析法
基本概念
- 在因果图中,如果用C表示原因,用E表示结果,则有:
C出现,E产生。
C出现,E不产生。
C1或C2出现,E产生;C1与C2都不出现,E不产生。
C1与C2都出现,E产生。
2. 约束:
E约束中,C1与C2是互斥的,例如C1代表5元纸币,C2代表10元纸币,E则代表投币口,则一次只能投一种。
I约束中,C1与C2是包含的关系,例如I代表支付手段,C1代表手机扫码支付,C2代表现金支付,则表示I至少支持这两种中 一种支付方式。
O约束可用普通会员与VIP类比C1与C2,O则代表用户。
R约束代表要求,如C1代表购物金额超过300元,C2代表优惠30,即C1与C2的关系为购物金额超过300元则优惠30元。
M约束中,若C1代表电器数码类产品,C2代表满300元优惠30元,则依据上图中的关系可表述为:电器数码类产品不参与满300优惠30的活动。
因果分析法中设计测试用例的步骤
- 分析被测对象的需求规格说明书,列出所有的原因、结果(原因即输入条件,结果即输出条件),编号,画因果分析图(因居左,果居右);
- 分析原因与原因之间、结果与结果之间的约束关系;
- 分析原因与结果之间的关系,用因果关系符号表示;
- 因果图转换成判定表;
- 判定表每一列设计一个测试用例。
因果关系图比较繁乱,这里暂时 不介绍了,留待后期补充。若有想要了解的,可以通过知到去学习网课,我也是总结该课上的笔记,整理发表。
判定表法
举个栗子:
用户登录模块:
条件桩 | 条件条目 | |||||||
正确的用户名 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
正确的密码 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
正确的验证码 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
动作桩 | 动作条目 | |||||||
用户名或密码错误 | √ | √ | √ | √ | √ | √ | ||
验证码错误 | √ | |||||||
进入系统 | √ |
利用判定表可以推断出需求规格本身的逻辑性,反向验证需求的正确性。
缺点:当输入项过多时,测试用例以2^n次方增加。
正交实验法
**特性:**均衡分散(各有序数对出现次数一样)、整齐可比(各数字出现次数一样)。
正交表二维数字表格(L行数(水平数因子数))
L:正交表
行数:测试用例个数
因子数:列数,测试用例变量的最大个数
水平数:测试用例中每个变量可能取值的个数,为0~水平数-1。
栗子:7因子 2水平 8行 表示为 L827,意即8行7列,变量个数为2,即因子数为0~1
步骤
- 构造因子状态表
- 选择合适的正交表
- 映射,构造测试用例
- 根据经验添加测试用例
选择正交表:水平数>=max(水平数)
因素数>=(因素1+因素2+····)且行数最少
举个栗子:
因子状态表:
因子 | A | B | C |
状态 | X1 | Y1 | Z1 |
X2 | Y2 | Z2 |
正交表L423
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
测试用例:
1 | X1 | Y1 | Z1 |
2 | X1 | Y2 | Z2 |
3 | X2 | Y1 | Z2 |
4 | X2 | Y2 | Z1 |
正交表链接:
http://support.sas.com/teshsup/technote/ts723_Designs.txt
场景法
基本流: 用例无任何差错的情况下从用例开始到结束的最简单的路径。
备选流: 出现缺陷或故障时所流经的路径。
利用流程图来确定场景:
场景 | 基本流 | 备选流 |
场景1:一件商品订购成功 | 1,2,3,4,5,6,7,8,9,10 | |
场景2:登录账号错误 | 1,2,3,4 | 1 |
场景3:登录密码错误 | 1,2,3,4 | 2 |
场景4:用户未注册 | 1,2,3,4 | 3 |
场景5:支付失败 | 1,2,3,4,5,6,7,8 | 4 |
用场景矩阵管理测试用例:
编号 | 场景 | 登录账号 | 登录密码 | 支付方式 | 预期结果 |
场景1 | 一件商品订购成功 | Valid | Valid | Valid | 成功购物 |
场景2 | 登录账号错误 | Invalid | - | - | 提示账户不存在,返回基本流5 |
场景3 | 登录密码错误 | Valid | Invalid | - | 提示密码错误,返回基本流5 |
场景4 | 用户未注册 | - | - | - | 用户完成注册,返回基本流5 |
场景5 | 支付失败 | Valid | Valid | Invalid | 提示支付失败,返回基本流8 |