什么是黑盒测试
黑盒测试又称功能测试,是在不了解程序内部结构和内部特性的情况下进行的测试方法,黑盒测试只验证程序是否能按照需求规格说明书的规定正常使用,是否能适当的接收数据并给出适当的输出结果,如错误提示,或正确的界面等。
常用黑盒测试方法有等价类划分法、边界值分析法、正交实验法、流程分析法(场景法)、因图法、判定表法、输入域覆盖法、输出域覆盖法、猜错法(异常分析法)。
一、 等价类划分法
1.1简介
等价类划分法是指将程序的输入值的集合划分为若干等价类,等价类又分为有效等价类和无效等价类,从每一类中选取少量数据进行测试。
1.2构造测试用例方法
① 根据需求文档明确需求
② 分析需求中的每一个功能数
③ 确定每一个功能有多少个输入
④ 确定每个输入有多少规则
⑤ 针对输入规则划分输入的等价类
⑥ 根据等价类设计测试用例
1.3举例
1.在输入条件中确立一个范围时,可分为一个有效等价类和两个无效等价类。如成绩的输入,要求分数在[0,100]之间,划分等价类如下:
有效等价类:分数在[0,100]之间
无效等价类:分数小于0
分数大于100
2.确定输入取值为n个 值中的一个的时候,可划分为n个有效等价类和1个无效等价类,如学历的输入,要求只能输入专科、本科、硕士、博士四种,划分等价类如下:
有效等价类:输入专科、本科、硕士、博士其中的一个
无效等价类:输入除四种学历之外的数据
3.在输入条件是真假值时,可确立为一个有效等价类(真)和一个无效等价类(假),如一个判断题的对错,划分等价类如下:
有效等价类:对
无效等价类:错
4.在输入数据确定了只有一种符合条件的情况下,可确立为一个无效等价类和多个有效等价类,如填空题1+1=?,划分等价类如下:
有效等价类:2
无效等价类:除2之外的数字
空
空格
汉字
字母
特殊字符
5.在输入数据确定了个数的时候,可分为一个有效等价类和两个无效等价类,如一天必须上2-10节课,等价类划分如下;
有效等价类:一天上2-10节课
无效等价类:一天上课的节数小于2
一天上课的节数大于10
6.在输入数据确定了格式的时候,可分为一个有效等价类和多个无效等价类,如设置密码时要求为字符、数字、特殊字符的组合,可划分等价类如下:
有效等价类:字符、数字、特殊字符的组合
无效等价类:纯字符
纯数字
三者两两组合
……
7.在输入值是一个路径的时候,可分为一个有效等价类和多个无效等价类,如输入图片的路径,可划分等价类如下:
有效等价类:存在的图片路径
无效等价类:除图片之外的其他文件的路径
超出深度要求的路径
格式错误的路径(区分/和\,区分大小写的时候)
不存在的图片路径
不存在的其他文件路径
路径中存在空格或其他特殊字符
……
二、 边界值分析法
2.1简介
边界值分析法是针对输入数据的边界值的测试,一般情况下与等价类划分法结合使用,根据各个等价类的边界值设计测试用例。
2.2构造测试用例方法
① 根据每个输入的等价类设计边界值测试用例,包括等价类的上点和离点(上点:边界值上的点;离点距离边界最近的点)
2.3举例
1.成绩的输入,分为三个等价类:
有效等价类:输入分数在[0,100]
无效等价类:分数小于0
分数大于100
可根据这三个等价类的边界值设计测试用例如下:
等价类 | 边界值测试用例 | 预期结果 |
[0,100] | 0 | 正确 |
[0,100] | 100 | 正确 |
小于0 | -1 | 错误 |
大于100 | 101 | 错误 |
2.除去对等价类的边界值进行分析,还需对输入数据的类型以及各种场景的边界值进行测试,如:
a:整型数据的边界值:-32767和32768
b:布尔值的边界值:真和假
c:循环的边界值:第一轮循环和最后一轮循环
d:报表的第一行和最后一行
e:浏览器的左上角和右下角
f:数组里的第一个元素和最后一个元素
三、 判定表法
3.1简介
是根据判定条件列出所有可能的组合,当有n个条件时,就需要列出相应的2n个测试用例。
3.2构造测试用例方法
① 在需求中找到输入参数要满足的条件
② 在需求中找到满足条件后得到的结果
③ 将所有的n个输入条件进行全排列组合,形成2n组测试用例,
④ 查看是否可以合并测试用例
⑤ 设计测试用例时可以忽略没有数据可取的不存在的结果
3.3举例
如下是对闰年判定的测试用例,其中闰年的判定条件为能被4整除但不能被100整除或者能被400整除。
条件 | 能被4整除 | Y | Y | Y | Y | N | N | N | N |
不能被100整除 | Y | Y | N | N | Y | Y | N | N | |
能被400整除 | Y | N | Y | N | Y | N | Y | N | |
结果 | 是闰年 | √ | √ | √ | |||||
不是闰年 | √ | ||||||||
不存在 | √ | √ | √ | √ |
四、 正交实验法
4.1简介
正交实验法是利用正交表来对程序进行测试,用较少的测试用例进行较全面的测试。根据正交表的正交性,从全面试验中挑选出适量的、有代表性的点进行试验。
正交表是一种特制的表格,一般用Ln(mk)来表示,其中L表示正交表,n表示测试用例数,k表示最多可安排影响指标因素的个数或正交表的列数,m表示每个因素的水平数即状态,n=k*(m-1)-1,即最少的测试用例数。
4.2构造测试用例方法
① 从需求中找出所有的因素(输入参数)
② 从需求中找出所有的水平(因素状态)并编号,画出因素状态表
③ 通过因素状态表绘制出正交表
④ 根据正交表,设计测试用例,一行是一条用例
4.3举例
1.因素数和水平数刚好符合正交表
如测试一个登陆,需要输入用户名、密码和验证码,则用户名、密码和验证码是因素,每个因素都有填和不填两种水平(状态),则n= k*(m-1)-1=3*(2-1)+1=4组测试用例,根据正交实验法设计正交表如下
状态\因素 | 用户名 | 密码 | 验证码 |
1 | 填 | 填 | 不填 |
2 | 填 | 不填 | 填 |
3 | 不填 | 填 | 填 |
4 | 不填 | 不填 | 不填 |
2.因素的水平数不相符
如一个功能需要一个用户提交性别、学历、政治面貌3个数据,每个数据要求如下:
性别:取值为男、女2种
学历:取值为大专、本科、硕士、博士4种
政治面貌:取值为群众、共青团员、中共党员3种
因素状态表:
状态\因素 | 性别 | 学历 | 政治面貌 |
1 | 男 | 大专 | 群众 |
2 | 女 | 本科 | 共青团员 |
3 | 硕士 | 中共党员 | |
4 | 博士 |
正交表如下:
测试用例 | 性别 | 学历 | 政治面貌 |
1 | 男 | 大专 | 群众 |
2 | 男 | 本科 | 共青团员 |
3 | 女 | 硕士 | 中共党员 |
4 | 女 | 博士 | 共青团员 |
5 | 男 | 硕士 | 群众 |
6 | 男 | 博士 | 中共党员 |
7 | 女 | 本科 | 中共党员 |
8 | 女 | 大专 | 共青团员 |
9 | 男 | 本科 | 群众 |
10 | 男 | 大专 | 中共党员 |
11 | 女 | 博士 | 群众 |
12 | 女 | 硕士 | 共青团员 |
五、 流程图分析法
5.1简介
当一个事件触发时,就形成了一个场景,而同一事件的不同触发顺序和处理结果就形成了事件流。在测试一个软件的时候,在场景法中,测试流程是软件功能按照正确的事件流实现的一条正确的流程,即基本流,而凡是出现故障或缺陷的过程,就称为备选流,备选流是可以从基本流来的,或是由备选流引出的。
5.2构造测试用例方法
① 根据业务流程绘制出流程图,流程图包含基本流和备选流
② 根据基本流和备选流生成不同的场景
③ 对每一个场景生成相应的测试用例
④ 对生成的测试用例重新评审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值
5.3举例
1.例如一个需要输入用户名和密码的登陆并付款购物功能,其中如果密码错误3次会锁定用户的事件流如下:
通过从确定执行用例场景所需的数据元素入手构建矩阵。对于每个场景,至少要确定包含执行场景所需的适当条件的测试用例。例如,在下面的矩阵中,V(有效)用于表明这个条件必须是 VALID(有效的)才可执行基本流,而 I(无效)用于表明这种条件下将激活所需备选流。下表中使用的“n/a”(不适用)表明这个条件不适用于测试用例。
测试用例ID | 场景 | 用户名 | 密码 | 有钱购物 | 预期结果 |
1 | 场景1:购物成功 | V | V | V | 成功购物 |
2 | 场景2:用户名错误 | I | n/a | n/a | 提示用户名错误 |
3 | 场景3:密码错误 | V | I | n/a | 提示密码错误 |
4 | 场景4:密码错3次锁定 | V | I | n/a | 提示密码错误3次锁定用户 |
5 | 场景5:没钱付款 | V | V | I | 提示余额不足 |
六、 因果图法
6.1简介
因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,适用于检查程序输入的各种组合条件。
因果图法比较合适输入条件比较多的情况,测试所有的输入条件的排列组合,所谓的原因就是输入,所谓的结果就是输出。
因果图的“因”—输入条件
因果图的“果”—输出结果
因果图法要注意考虑:
1.所有输入/输出条件的相互制约关系以及组合关系
2.输入条件的依赖关系,也就是什么样的输入组合会产生怎么样的输出结果,即“因果关系”
因果图中的基本符号:
6.2构造测试用例方法
① 分析需求中描述的原因和结果,给每个原因和结果赋予一个编号。
② 根据这些关系画出因果图
③ 因果图上用一些记号表明约束条件或限制条件
④ 把因果图转换成判定表
⑤ 将判定表的每一列作为依据设计测试用例
6.3举例
1.一个交通卡充值系统的需求:
系统只接收100元,只能选择充值100
若输入100元并选择充值100元,提示充值成功并退卡
若输入纸币后一定时间不选择充值按钮,退回输入的纸币并提示错误
不输入纸币直接选择充值按钮,提示错误
输入条件:
① 输入100元纸币
② 点击充值100元
输出:
① 提示充值成功
② 完成充值,退卡
③ 提示错误
因果图如下:
输入: 输出:
根据因果图,判定表如下:
|
| 1 | 2 | 3 |
输入 | 输入100元纸币 | 1 | 1 | |
选择充值按钮 | 1 | 1 | ||
输出 | 提示充值成功 | 1 | ||
充值成功并退卡 | 1 | |||
提示错误 | 1 | 1 |
七、 输入域覆盖法
7.1简介
输入域覆盖是指根据SRS(需求分析文档)结合等价类划分法和边界值分析法的一种测试方法,主要是对输入的特殊值和类型边界补充测试用例。
八、 输出域覆盖法
8.1简介
输出域覆盖是指在了解程序功能的所有输出后,查看测试用例中所有的输入产生的输出结果是否能够涵盖所有输出结果,如果不完善,则根据输出结果推导出相应的输入数据,将其补充到测试用例中。
九、 猜错法
9.1简介
猜错法是基于经验和直觉,以及参考以往测试结果中出现较频繁及较隐蔽的错误,从而推测出程序所有可能出现的错误或异常,选择这些情况下的用例进行测试。