【软件测试】(二)黑盒测试常见方法
[toc]
黑盒测试
等价类划分法
等价类划分法是把所有可能输入的数据划分为不同类别,并在不同类别中选取有代表性的数据测试,而不是将每个类别中的所有数据进行测试。
例1
输入年龄:输入20-99的任意整数
[解析] 步骤1,对例1划分的等价类:
[1]20-99的整数
[2]<20的正整数
[3]99>的整数
[4]小数、负数、中文字符、英文字符、特殊字符、空格等。其中,区域1为有效等价类,其他为无效等价类
步骤2,将上述测试点整理为一张表:
输入条件 | 有效等价类 | 有效等价类取值 | 无效等价类 | 无效等价类取值 |
---|---|---|---|---|
20-99的整数 | 20<年龄<99 | 88 | 小于20的正整数 | 16 |
大于99的整数 | 103 | |||
小数 | 1.2 | |||
负数 | -6 | |||
中文字符 | 江楚 | |||
英文字符 | join | |||
特殊字符 | @# | |||
空格 | ||||
不输入任何字符 |
步骤3,选取测试点“88”和“@#”转换为测试用例:
测试序号 | 测试模块 | 前置条件 | 测试环境 | 操作步骤和数据 | 预期结果 | 实际结果 | 是否通过 | 备注 |
---|---|---|---|---|---|---|---|---|
1 | 年龄输入框 | 网络正常 | win10操作系统 IE11浏览器 | (1)打开网址http... (2)年龄输入框中输入"88"(2)点击提交按钮,查看是否提交成功 |
(1)年龄输入框页面可以正常打开 (2)年龄可以被正常输入 (3)系统提示:你输入的数据有效,并已经提交成功 |
|||
2 | 年龄输入框 | 网络正常 | win10操作系统 IE11浏览器 | (1)打开网址http... (2)年龄输入框中输入"@#"(2)点击提交按钮,查看是否提交成功 |
(1)年龄输入框页面可以正常打开 (2)年龄可以被正常输入 (3)系统提示:你输入的数据无效,请重新输入 |
例2
计算两个1-100之间整数的和
步骤1,等价类分类:
输入条件 | 有效等价类 | 无效等价类 |
---|---|---|
整数 | 1-100[3] | <1[1] >100[2] |
小数[4] | ||
字母[5] | ||
特殊字符[6] | ||
空格[7] | ||
空白[8] |
步骤2,编写测试用例:
用例编号 | 所属等价类 | 加数1 | 加数2 | 和 |
---|---|---|---|---|
1 | 2(有效等价类) | 3 | 40 | 43 |
2 | 1(无效等价类) | 0 | -1 | 提示"请输入1-100之间的整数" |
3 | 3(无效等价类) | 110 | 101 | 同上 |
4 | 4(无效等价类) | 1.2 | 3.2 | 同上 |
5 | 5(无效等价类) | A | B | 同上 |
例3
输入6-10位自然数的用户名
[解析] 步骤1,等价类分类
有效类:
[1]字符长度在6-10位之间
[2]每个字符类型是0-9自然数
无效类:
[3]长度小于6
[4]长度大于10
[5]负数
[6]小数
[7]英文字母
[8]特殊字符
[9]中文
[10]空
步骤二,设计测试用例:
输入条件 | 有效等价类 | 无效等价类 |
---|---|---|
用户名 | 长度在6-10之间 | 长度小于6 长度大于10 |
每个字符类型是0-9自然数 | 负数 小数 英文字母 特殊字符 中文 空 |
覆盖用例 | 输入 | 预期结果 |
---|---|---|
1、2 | 1234567 | 正确 |
3 | 123 | 提示有误 |
4 | 12345678910 | 提示有误 |
5 | -1234567 | 提示有误 |
6 | 1.223 | 提示有误 |
7 | 123456a | 提示有误 |
8 | 123456% | 提示有误 |
9 | 12345好 | 提示有误 |
10 | 为空 | 提示有误 |
例4(多个输入数据项)
用户注册页面需求:
用户名:长度为3-19;以字母开头
姓名:非空
密码:非空
确认密码:值和密码值相同
出生月份:年——四位数字;月——1-12;日——1-31
步骤1,划分等价类
输入条件 | 有效等价类 | 无效等价类 |
---|---|---|
用户名 | 长度3-19(1) | 长度<3 (2) 长度>19 |
以字母开头(4) | 非字母开头(5) | |
姓名 | 非空(6) | 为空(7) |
密码 | 非空(8) | 为空(9) |
确认密码 | 值和密码相同(10) | 值和密码不同(11) |
出生年份(年) | 年——四位(12) | 不是四位(13) |
年——数字(14) | 年数中有自父母或其他非数字符号(15) | |
年——合理范围(16) | 年数不在合理范围(17) | |
出生年份(月) | 1-12(18) | 月数<1(19) 月数>12(20) 月数中有字母或其他非数字(21) |
出生年份(日) | 1-31(22) | 日数<1(23) 日数>31(24) 日数中有字母或其他非数字符号(25) |
步骤2,设计测试用例
覆盖用例 | 用户名 | 姓名 | 密码 | 确认密码 | 出生年份 | 预期结果 |
---|---|---|---|---|---|---|
1、4、6、8、10、12、14、16、18、22 | A123 | weind | 1 | 1 | 2000-5-6 | 成功注册 |
2 | A1 | weind | 1 | 1 | 2000-5-6 | 失败 |
3 | A123456789 | weind | 1 | 1 | 2000-5-6 | 失败 |
5 | 1123 | weind | 1 | 1 | 2000-5-6 | 失败 |
7 | A123 | 1 | 1 | 2000-5-6 | 失败 | |
9 | A123 | weind | 1 | 2000-5-6 | 失败 | |
11 | A123 | weind | 1 | 2 | 2000-5-6 | 失败 |
13 | A123 | weind | 1 | 1 | 20000-5-6 | 失败 |
15 | A123 | weind | 1 | 1 | 200a-5-6 | 失败 |
17 | A123 | weind | 1 | 1 | 9999-5-6 | 失败 |
19 | A123 | weind | 1 | 1 | 2000-0-6 | 失败 |
20 | A123 | weind | 1 | 1 | 2000-15-6 | 失败 |
21 | A123 | weind | 1 | 1 | 2000-a1-6 | 失败 |
23 | A123 | weind | 1 | 1 | 2000-5-0 | 失败 |
24 | A123 | weind | 1 | 1 | 2000-5-89 | 失败 |
25 | A123 | weind | 1 | 1 | 2000-5-a1 | 失败 |
边界值分析法
- 概念
由于大量的错误会发生在输入、输出值的边界上,所以需要对边界值进行测试。
边界值分析法是取稍高于或稍低于边界的一些数据进行测试,确认输入、输出的边界,然后取刚好等于、大于或小于边界的参数作为测试用例。 - 使用场景
边界值分析法在以下两种情况下经常被用到。
第一种情况:输入条件是一个取值范围,对于这个取值范围的边界要进行边界值测试。
第二种情况:输入条件中规定输入的数据是一个有序集合,对这个有序集合的边界要进行边界值测试。 - 优点
能减少测试用例数量,又尽量充分覆盖测试点。 - 常用边界值
- 16-bit的整数,32767和-32768是它的边界
- 屏幕上光标在最左上和最右下的位置
- 数据库表(报表)的第一行和最后一行
- 数组元素的第一个和最后一个
- 循环的第0次、第1次、倒数第2次和最后一次
- 字符串的第一个字符和最后一个字符
- U盘(内存/物理存储)的空和蛮
- 操作反应(登录操作、触屏操作)的最快和最慢
- 实现步骤
1.确定边界:边界值分析法边界=等价类划分法等价类的边界
2.选取测试数据:选取等于、刚刚大于或刚刚小于(有效)等价类边界的值作为测试数据
3.设计测试用例
例1
输入用户名:6-10位自然数
步骤1. 选取有效等价类的边界值
有效等价类【长度在6-10位之间】:5位、6位、10位、11位
步骤2. 设计测试用例
用例编号 | 覆盖边界值 | 输入 | 预期结果 |
---|---|---|---|
1 | 5位 | 12345 | 系统提示用户名应为6~10位自然数 |
2 | 6位 | 123456 | 系统提示正确 |
3 | 10位 | 123457890 | 系统提示输入正确 |
4 | 11位 | 1234578901 | 系统提示用户名应为6~10位自然数 |
例2
输入20-99的整数
步骤1. 取边界值:19、20、21、99、100
对于输入条件是在一个取值范围内,而且取值范围带有小数的情况,如取值范围是10.00~60.00kg,那边界值就应该取9.99、10.00、10.01、59.99、60.00、60.01;如果取值范围带有负数,如取值范围是-10~10的整数,那边界值就应该取-9、-10、-11、9、10、11。
例3
一家出售各种商品的商店,它为购买不同数量商品的客户报出不同的价格,即按购买数量的不同“分段”计价
用例编号 | 输入条件(有效等价类) | 覆盖边界值 | 测试用例 | 预期输出 |
---|---|---|---|---|
1 | 购买数量[1,10] | 0 | 0 | 0 |
2 | 1 | 1 | ||
3 | 10 | 10 | ||
4 | 11 | 11 | ||
5 | 购买数量[11,20] | 20 | 20 | |
6 | 21 | 21 | ||
7 | 购买数量[21,+∞) | 60 | 60 |
错误推测法
- 概念
基于经验和直觉设计容易导致软件错误的测试点
例如:
- 输入:输入数据和输出数据为0的情况
- 输入:输入数据为空格时
- 只读字段是否设计成了可修改字段等
- 经验分享汇总
- 时间性测试
提交操作时限
未到达的日期是否可选
系统时间的调整
- 密码输入框缺陷
明文显示
复制密码,明文显示
一致性确认
宽窄屏缺陷
同时操作问题
在不同机器登录同一个用户
在不同机器上对同一条记录进行不同操作(修改、删除):可以通过锁定记录或给出提示信息解决
一人审核,一人退回
两人修改同一张工单
删除为空时缺陷
如对空数据表执行删除操作网页缺陷
判断顺序/逻辑缺陷
如将验证码选项放在注册页面的第一个用户管理缺陷
超级用户,忘记删除
超级用户,回收权限
- 查询功能
无条件查询
是否支持模糊查询
查询的关键字之间是否可用连接符
是否支持空格
是否支持各类字符
- 翻页功能
翻页按钮的测试项:
有无数据时控件的显示
首页时,首页和上一页是否能点击
尾页时,下一页和尾页是否能点击
非首页和非尾页时,四个按钮功能是否正确
翻页后,列表中的记录是否仍按照指定的排序列进行排序
总页数/当前页数的测试项:
总页数是否等于总记录数/指定每页条数
当前页数是否正确
跳转页的测试项:
是否能正常跳转到指定页数
输入的跳转页输非法时的处理
指定每条显示条数的测试项:
是否有默认的显示条数
指定条数后,列表显示的记录数是否正确
输入的条数非法时的处理
- 删除功能
不选择记录进行删除验证
删除记录权限验证
删除结果检查
12.导入/导出功能
正交试验法/正交表分析法
概念
由于上述设计方法都是针对单个输入框,该方法利用正交表设计输入组合,能针对组合输入框进行测试。有效减少了用例设计个数。正交表
- 设计步骤
- 根据需求说明提取因子
- 填入正交表
- 生成测试用例
例1
假设一个WEB站点,该站点有大量的服务器和操作系统,并且有许多具有各种插件的浏览器:
WEB浏览器:Netscape6.2、IE6.0、Opera4.0
插件:无、RealPlayer、MediaPlayer
应用服务器:IIS、Apche、Netscape Enterprise
操作系统:Windows2000、Windows NT、Linux
步骤1:
提取需求中的因子:web浏览器、插件、应用服务器、操作系统
步骤2:
分析各因子的状态:
2)插件: 1=None、2=RealPlayer、3=MediaPlayer
3)应用服务器: 1=IIS、2=Apche、3=Netscape Enterprise
4)操作系统: 1=Windows2000、2=Windows NT、3=Linux
步骤3:套用正交表
步骤4:设计测试用例
例2
PowerPoint 软件打印功能,功能描述如下:
打印范围分:全部、当前幻灯片、给定范围 3
打印内容分:幻灯片、讲义、备注页、大纲视图 4
打印颜色/灰度分:颜色、灰度、黑白 3
打印效果分:幻灯片加框和幻灯片不加框 2
步骤1:
提取需求中的因子:打印范围、打印内容、打印颜色、打印效果
步骤2:
分析各因子的状态:
步骤3:套用正交表
步骤4:拆分正交表
步骤5:替换正交表
步骤6: 生成测试用例
例3
为提高某化工产品的转化率,选择三个有关因素进行试验,反应温度(A)、反应时间(B)、用碱量(C),并确定了试验范围如下:
A:80~90C°
B:90~150分钟
C:5%~7%
试验目的是搞清楚因子A、B、C对转化率有什么影响,哪些是主要的,哪些是次要的,从而确定最适生产条件,即温度、时间及用碱量各为多少才能使转化率最高。对因子A、B、C,在试验范围内都选了三个水平(状态):
A:A1=80C°, A2=85C°,A3=90C°
B:B1=90分钟,B2=120分钟,B3=150分钟
C:C1=5%,C2=6%,C3=7%
步骤1,将因子填入正交表
步骤2,替换正交表
步骤3,生成测试用例
因果图法
- 背景
如用户注册页面需求包含用户名、姓名、密码、确认密码等,由于等价类、边界值未考虑这些输入条件之间的相互制约关系,如果需要考虑各种输入条件的组合各种输入条件之间有某种相互制约关系,则可以使用因果图法
**缺点:**测试用例数目可能会很大,不便于维护
概念
因果图法是从需求中找出因(输入条件)和果(输出或程序状态的改变),通过因果图转化成判定表
如: 输入条件之间的关系(组合关系、约束关系等)、输入和输出之间的关系
因果图输入与输出关系符号
符号名 | 符号 | 解释 |
---|---|---|
CI | 原因 | |
EI | 结果 | |
恒等 | 原因结果同时出现 | |
非 | ~ | 原因出现,结果不出现 原因不出现,结果出现 |
或 | V | 原因1个出现,结果就出现(一个出现就出现) 原因都不出现,结果就不出现 |
且/与 | ∧ | 原因都出现,结果才出现(全部出现才出现) |
其中I取0表示状态不出现,1表示状态出现
- 因果图输入/输出条件之间关系符号(约束条件)
条件类型 | 符号名 | 简称 | 解释 |
---|---|---|---|
输入 | E | 互斥/异或 | 原因a和原因b不会同时成立,最多一个能成立 |
I | 或 | 所有原因中至少有一个成立 | |
o | 唯一 | 必须有一个成立 | |
输出 | R | 要求 | 原因a出现,原因b也必须出现 |
M | 强制或屏蔽 | a=1,b=0 a=0,b的值不定 |
- 实现步骤
- 列出原因和结果,赋予标识符
- 绘制因果图
- 标明原因之间的约束条件
- 转换为判定表
- 设计测试用例
例1
某旅馆住宿系统可为游客办理房间选定、房间支付及房间管理相关业务,此系统默认房间资源始终充足的状态。其需要描述如下:当支付房间全款(即预期入住天数内所有房款)或支付房间房款不足(仅支付定金),选择“单人间”、“双人间”或“豪华间”,则相应类型的房间被开启。若游客支付房款不足,则在开启房门的同时系统提示房款支付不足。
[思路分析]
1)分析需求,列出原因和结果。
2)找出因果关系、原因与原因之间的约束关系,画出因果图。
3)将因果图转换成判定表。
4)根据(3)中的判定表,设计用例的输入数据和预期输出
1)分析需求说明,找出原因(即输入)和结果(即输出):
原因:
1.游客支付房间全款
2.游客支付房款不足
3.游客选择“单人间”
4.游客选择“双人间”
5.游客选择“豪华间”
结果:
21.该类型房间被打开且提醒房款支付不足
22.某“单人间”被打开
23.某“双人间”被打开
24.某“豪华间”被打开
2)找出因果逻辑关系、约束关系,画出因果图
3)将因果图转换成判定表:
4)在判定表中,可根据显示的11列作为确定测试用例的依据,设计测试用例。
例2 基于例1,考虑房间空余状态
1)分析需求说明,找出原因(即输入)和结果(即输出):
原因:
1.该类型房间有空房
2.游客支付房间全款
3.游客支付房款不足
4.游客选择“单人间”
5.游客选择“双人间”
6.游客选择“豪华间”
结果:
21.该类型房间“房间已满”灯亮
22.提示办理退款
23.提醒房款不足
24.某“单人间”被打开
25.某“双人间”被打开
26.某“豪华间”被打开
2)找出因果逻辑关系、约束关系,画出因果图
3)将因果图转换成判定表:
4)在判定表中,可根据显示的24列作为确定测试用例的依据,设计测试用例。
例3
有一个处理单价为1元5角的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”、“雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。
决策表法
概念
能把复杂逻辑关系和多条件组合情况表达得较明确
适用:在程序中,若输入输出较多,且相互制约的条件较多示例
决策表组成
条件桩 | 条件项 |
---|---|
动作桩 | 动作项 |
条件桩: 问题所有条件的集合
条件项: 决策表中条件的取值
动作桩:问题所有可采取动作的集合
动作项:决策表中打钩的选项
- 实现步骤
- 列出所有的条件桩和动作桩
- 确定规则个数
- 填入条件项和动作项
- 简化/合并类似规则或相同动作
例1
‘进行了房间预定且已支付定金’或‘是本旅馆会员,即持有会员卡’的游客,应优先为其办理房间入住……” 。请建立判定表。
1)列出所有的条件桩和动作桩。
条件桩
是否进行房间预定
是否已支付定金
是否为旅馆会员
动作桩
优先办理房间入住
作其他处理
2)确定规则的个数:这里有3个条件,每个条件有两个取值,故应有8种规则。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
---|---|---|---|---|---|---|---|---|---|
条件 | 是否进行房间预定? | ||||||||
是否已支付定金? | |||||||||
是否为旅馆会员? | |||||||||
动作 | 优先办理房间入住 | ||||||||
作其他处理 |
3)填入条件项和动作项
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
---|---|---|---|---|---|---|---|---|---|
条件 | 是否进行房间预定? | Y | Y | Y | Y | N | N | N | N |
是否已支付定金? | Y | Y | N | N | Y | Y | N | N | |
是否为旅馆会员? | Y | N | Y | N | Y | N | Y | N | |
动作 | 优先办理房间入住 | √ | √ | √ | √ | √ | |||
作其他处理 | √ | √ | √ |
4)合并相似规则
1 | 2 | 3 | 4 | 5 | ||
---|---|---|---|---|---|---|
条件 | 是否进行房间预定? | Y | Y | Y | N | N |
是否已支付定金? | Y | N | N | - | - | |
是否为旅馆会员? | _ | Y | N | Y | N | |
动作 | 优先办理房间入住 | √ | √ | √ | ||
作其他处理 | √ | √ |
场景法
背景
对于单个功能点利用等价类、边界值、因果图和判定表用例设计方法能够解决大部分问题。涉及**业务流程的软件系统,采用场景法比较合适。(宏观、整体)概念
基本流+备用流=场景法
通过应用场景对系统的功能点或业务流程进行描述步骤
- 分析基本流和备选流
- 根据基本流和各项备选流生成不同的场景
- 对每一个场景生成相应的测试用例
- 审核用例,去掉冗余,给用例确定测试数据值
例1
某旅馆住宿系统支持房间网上预订业务。游客访问网站进行网上房间预订操作,选择合适的房间后,进行在线预订。此时,需使用个人账号登录系统;待登录成功后,进行订金支付(订金金额为1天的房款);支付成功后,生成房间预订单,完成整个房间预订流程。
流程:访问网站->选择房间->登录账号->支付定金->生成订单->在线预订
1)确定基本流和备选流
类型 | 用例描述 |
---|---|
基本流 | 访问房间预定网站 |
选择房间 | |
登陆账号 | |
定金支付 | |
生成订单 | |
备选流1 | 房间类型不存在 |
房间已住满 | |
账号不存在 | |
账号或密码错误 | |
账号余额不足 | |
账号没有钱 | |
用户退出系统 |
2)确定场景
场景名称 | 场景组合1 | 场景组合2 |
---|---|---|
场景1-成功预定房间 | 基本流 | |
场景2-房间类型不存在 | 基本流 | 备选流1 |
场景3-房间已经住满 | 基本流 | 备选流2 |
场景4-账号不存在 | 基本流 | 备选流3 |
场景5-账号或密码错误 | 基本流 | 备选流4 |
场景6-用户账户余额不足 | 基本流 | 备选流5 |
场景7-用户账户没有钱 | 基本流 | 备选流6 |
3)设计用例
用例 | 场景/条件 | 输入条件 | 预期结果 |
---|---|---|---|
1 | 场景1-成功预定房间 | 房间类型有效,账号密码有效,余额有效 | 系统提示“操作成功”,账户余额减少 |
2 | 场景2-房间类型不存在 | 房间类型无效,账号密码不相干,余额不相干 | 系统提示“您查找的房间不存在” |
3 | 场景3-房间已经住满 | 房间类型无效,账号密码不相干,余额不相干 | 系统提示“您查找的房间已住满” |
4 | 场景4-账号不存在 | 房间类型无效,账号无效,密码不相干,余额不相干 | 系统提示“账号不存在” |
5 | 场景5-账号或密码错误 | 房间类型有效,账号有效,密码无效,余额不相干 | 系统提示“账号或密码错误” |
6 | 场景6-账号或密码错误 | 房间类型有效,账号无效,密码有效,余额不相干 | 系统提示“账号或密码错误” |
7 | 场景7-用户账户余额不足 | 房间类型有效,账号有效,密码无效。,余额无效 | 系统提示“账号余额不足请充值” |
8 | 场景8-用户账户没有钱 | 房间类型有效,账号有效,密码有效,余额无效 | 系统提示“账号余额不足请充值” |
4)设计数据,填入用例表
用例 | 场景/条件 | 输入条件 | 预期结果 |
---|---|---|---|
1 | 场景1-成功预定房间 | 房间类型:双人间(300/天)账号:hello,密码:123456,账户余额:800 | |
2 | 场景2-房间类型不存在 | 房间类型:豪华间 | 系统提示“您查找的房间不存在” |
3 | 场景3-房间已经住满 | 房间类型:单人间 | 系统提示“您查找的房间已住满” |
4 | 场景4-账号不存在 | 房间类型:双人间(300/天),账号:nihao | 系统提示“账号不存在” |
5 | 场景5-账号或密码错误 | 房间类型:双人间(300/天),账号:nihaoq,密码:12345 | 系统提示“账号或密码错误” |
6 | 场景6-账号或密码错误 | 房间类型:双人间(300/天),账号:nihaoq,密码:123456 | 系统提示“账号或密码错误” |
7 | 场景7-用户账户余额不足 | 房间类型:双人间(300/天),账号:nihaoa,密码:123456,余额:200 | 系统提示“账号余额不足请充值” |
8 | 场景8-用户账户没有钱 | 房间类型:双人间(300/天),账号:nihaoa,密码:123456,余额:0 | 系统提示“账号余额不足请充值” |