黑盒测试用例设计方法案例与练习题
若需修改密码,系统验证旧密码正确,两个新密码相同,则更新密码,旧密码即失效,其他修改项也生效,并提示“用户信息修改成功”;第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下(只有这个时候才)进行文件的修改,但如果第一列字符不正确,则给出信息L;第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下(只有这个时候才)进行文件的修改,但如果第一列字符不正确,则给出信息L;若只修改密码外
1、等价类
案例
登录功能
用户名和密码登录(以在线考试系统为例)
年龄字段输入
2、网站注册页面年龄输入要求:某网站前台用户注册页面,其中有年龄字段的输入,要求输入1-150之间的正整数;
输入条件 | 有效等价类 | 取值 | 编号 | 无效等价类 | 取值 | 编号 | ||
[1-150] | [1-150] | 100 | A01 | 整数 | 正整数 | >150 | 200 | B01 |
负整数 | (-∞,0) | -9 | B02 | |||||
0 | 0 | 0 | B03 | |||||
小数 | 1.1 | B04 | ||||||
字母 | 大写 | A-Z | Z | B05 | ||||
小写 | a-z | r | B06 | |||||
汉字 | 简体 | 龙 | B07 | |||||
繁体 | 龍 | B08 | ||||||
特殊符号 | ’ | B09 |
练习题
三角形
输入三角形三边应为正整数,分别构成非三角形、一般三角形、等腰三角形和等边三角形。
1、需求分析:
- 正整数
- 两边之和大于第三边
- 两边相等
- 三边相等
2、等价类设计
条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
正整数 | A边正整数 | A01 | 小数 | B01 |
0 | B02 | |||
空 | B03 | |||
字符 | B04 | |||
B边正整数 | A02 | 小数 | B05 | |
0 | B06 | |||
空 | B07 | |||
字符 | B08 | |||
C边正整数 | A03 | 小数 | B09 | |
0 | B10 | |||
空 | B11 | |||
字符 | B12 | |||
两边之和大于第三边 | A+b>c | A04 | A+b<c | B13 |
A+b=c | B14 | |||
A+c>b | A05 | A+c<b | B15 | |
A+c=b | B16 | |||
B+c>a | A06 | B+c<a | B17 | |
B+c=a | B18 | |||
两边相等 | A=b | A07 | ||
B=c | A08 | |||
A=c | A09 | |||
三边相等 | A=b=c | A10 |
3、用例提取:
编号 | 有效输入 | 覆盖有效等价类 | 编号 | 无效输入 | 覆盖无效等价类 |
1 | 3 4 5 | A01、A02、A03 A04、A05、A06 | 1 | .。。 | 。。。 |
2 | 3 3 4 | A01、A02、A03 A07 | |||
3 | 4 3 3 | A01、A02、A03 A08 | |||
4 | 3 4 3 | A01、A02、A03 A09 | |||
5 | 3 3 3 | A01、A02、A03 A10 | 18 | 。。。 | 。。。 |
2、边界值
案例
登录功能
实例同等价类
年龄字段输入
实例同等价类,边界值设计如下
输入条件 | 有效等价类 | 取值 | 编号 | 无效等价类 | 取值 | 编号 | |||
[1-150] | [1-150] | 内点 | 100 | A1 | 整数 | 正整数 | >150 | 151 | B01 |
上点 | 1 | A2 | |||||||
150 | A3 | ||||||||
负整数 | (-∞,0) | -9 | B02 | ||||||
0 | 0 | 0 | B03 | ||||||
小数 | 1.1 | B04 | |||||||
字母 | 大写 | A-Z | A、Z | B05 | |||||
小写 | a-z | a、z | B06 | ||||||
汉字 | 简体 | 龙 | B07 | ||||||
繁体 | 龍 | B08 | |||||||
特殊符号 | @、[、’、{ | B09 |
练习题
保险费率计算
某保险网站的前台计算保费页面,其中有年龄字段的输入,不同的年龄段会使用不同的费率计算标准。
其中:
01-15岁,费率为:10%
16-20岁,费率为:15%
21-50岁,费率为:20%
51-70岁,费率为:25%
输入条件 | 有效等价类 | 取值 | 编号 | 无效等价类 | 取值 | 编号 | |||
[1-70] | [1-15] | 内点 | 10 | A1 | 整数 | 正整数 | >70 | 71 | B01 |
上点 | 1 | A2 | |||||||
15 | A3 | ||||||||
[16-20] | 内点 | 19 | A4 | 负整数 | (-∞,0) | -1 | B02 | ||
上点 | 16 | A5 | |||||||
20 | A6 | ||||||||
[21-50] | 内点 | 30 | A7 | 0 | 0 | 0 | B03 | ||
上点 | 21 | A8 | |||||||
50 | A9 | ||||||||
[51-70] | 内点 | 60 | A10 | 小数 | 1.1 | B04 | |||
上点 | 51 | A11 | |||||||
70 | A12 | ||||||||
字母 | 大写 | A-Z | A | B05 | |||||
Z | B06 | ||||||||
小写 | a-z | a | B07 | ||||||
z | B08 | ||||||||
汉字 | 简体 | 龙 | B09 | ||||||
繁体 | 龍 | B10 | |||||||
特殊符号 | @ | B11 | |||||||
[ | B12 | ||||||||
‘ | B13 | ||||||||
{ | B14 |
等价类与边界值综合练习题
1、在某一版的编程语言中对变量名称规格作如下规定:变量名称是由字母开头的,后跟字母或者数字的任意组合构成。编译器能够区分的有效字符数为8个,并且变量名称必须先声明,后使用,在同一声明语句中,变量名称至少必须有一个。
输入条件:
1、变量名称是由字母开头 6、变量名称不能重复
2、字母或者数字的组合 7、字母大小写敏感
3、有效字符数为8个 8、不能使用关键字
4、变量名称必须先声明
5、声明语句中变量名称至少必须有一个
用例设计方法
输入条件 | 有效等价类 | 取值 | 编号 | 无效等价类 | 取值 | 编号 | |||||
1、变量名称是由字母开头 | 字母开头 | 大写开头 | A-Z | A | A01 | 非字母开头 | 数字开头 | 0-9 | 0 | B01 | |
Z | A02 | 9 | B02 | ||||||||
H | A03 | ||||||||||
小写开头 | a-z | a | A04 | 其他字符开头 | @ | B03 | |||||
[ | B04 | ||||||||||
z | A05 | { | B05 | ||||||||
` | B06 | ||||||||||
y | A06 | ||||||||||
2、字母或者数字的组合 | 字母 | 大写 | A-Z | A | A07 | 其他符号 | @ | B07 | |||
Z | A08 | ||||||||||
{ | B08 | ||||||||||
H | A09 | ||||||||||
[ | B09 | ||||||||||
小写 | a-z | a | A10 | ||||||||
z | A11 | ‘ | B10 | ||||||||
y | A12 | ||||||||||
数字 | 0-9 | 0 | A14 | ||||||||
9 | A15 | ||||||||||
7 | A16 | ||||||||||
3、有效字符数为8个 | [1-8] | [1-8] | 1 | A17 | 0 | 0 | B11 | ||||
8 | A18 | >8 | 9 | B12 | |||||||
6 | A19 | ||||||||||
4、变量名称必须先声明 | 先声明 | A20 | 不声明使用 | B13 | |||||||
先使用后声明 | B14 | ||||||||||
5、声明变量至少为一个 | 声明变量为一个 | A21 | 无变量声明 | B15 | |||||||
声明变量为多个 | A22 | ||||||||||
6、变量名称不能重复 | 变量名称不重复 | A23 | 变量名称重复 | B16 | |||||||
7、字母大小写敏感 | 字母大小写敏感 | AbD | A24 | ||||||||
8、不能使用关键字 | 不使用关键字 | abc | A25 | 使用关键字 | int | B17 |
2、126邮箱注册
输入条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
字符长度 | [6-18] | 1 | 0 | 9 |
1<len<6 | 10 | |||
>18 | 11 | |||
空格 | 12 | |||
字符组成 | 字母 | 2 | 数字 | 13 |
特殊符号 | 14 | |||
汉字 | 15 | |||
字母、数字结合 | 3 | |||
字母、数字、下划线结合 | 4 | |||
下划线 | 16 | |||
数字下划线结合 | 17 | |||
字母、下划线结合 | 5 | 以数字开头 | 18 | |
字符格式 | 字母开头 | 6 | ||
以下划线开头 | 19 | |||
字母结尾 | 7 | 以下划线结尾 | 20 | |
数字结尾 | 8 |
3、判定表
案例
读书选择
1、如果觉得疲倦并且对书的内容感兴趣,同时书中的内容让你糊涂的话,回到本章重读
2、如果觉得疲倦并且对书的内容感兴趣,同时书中的内容不让你糊涂,继续读下去
3、不觉得疲倦并且对书的内容感兴趣,但是书中的内容让你糊涂的话,回到本章重读
4、如果觉得疲倦并且对书中的内容不感兴趣,同时书中的内容不让你糊涂,停止阅读,请休息
5、如果觉得疲倦并且对书的内容不感兴趣,并且书中的内容让你糊涂,请停止阅读,休息
6、不疲倦,对书的内容感兴趣,书中的内容不糊涂,继续读下去
7、不疲倦,不感兴趣,书中内容糊涂,跳到下一章去读
8、不疲倦,不感兴趣,书中内容不糊涂,跳到下一章去读
1、需求分析
条件:是否疲倦、是否感兴趣、是否糊涂
结果:本章重读、继续读、停止阅读、跳到下一章
- 绘制判定表(条件的组合 23=8个)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
条件 | 是否疲倦 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
是否感兴趣 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
是否糊涂 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |
结果 | 本章重读 | X | X | ||||||
继续读 | X | X | |||||||
停止阅读 | X | X | |||||||
跳到下一章 | X | X |
优点:组合充分,没有遗漏
缺点:用例数量随条件的递增而过多(2n n:条件的个数)
条件的类型:布尔
3、合并判定表
1 | 2 | 3 | 4 | ||
1、2 | 3、7 | 4、5 | 6、8 | ||
条件 | 是否疲倦 | 0 | - | - | 1 |
是否感兴趣 | 0 | 1 | 1 | - | |
是否糊涂 | - | 0 | 1 | 1 | |
结果 | 本章重读 | X | |||
继续读 | X | ||||
停止阅读 | X | ||||
跳到下一章 | X |
原则:结果相同
条件有一个不同
风险:产生分支或者路径的遗漏
练习题
密码修改
若需修改密码,系统验证旧密码正确,两个新密码相同,则更新密码,旧密码即失效,其他修改项也生效,并提示“用户信息修改成功”; 若旧密码不正确,则提示“用户密码错”,系统将不修改个人信息;若两个新密码不同,则提示“新密码与验证新密码不同”,系统将不修改个人信息。
若只修改密码外其他信息,则不需输入两个新密码,系统只验证旧密码正确,就成功更改个人信息,并提示“用户信息修改成功”;如果系统验证旧密码输入不正确,则提示“用户密码错”。
- 需求分析:
条件:旧密码是否正确、新密码是否为空、新密码是否相同、是否修改其他信息
结果:信息修改成功、用户密码错、密码不同
2、界面原型:
- 实现的功能:
- 只修改密码
- 同时修改密码和其他信息
- 只修改其他信息(如果考虑密码为空的情况,改功能无法实现)
――解决办法:密码不允许为空,如果密码输入为空,代表不修改密码
3、绘制判定表
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | ||
条件 | 旧密码是否正确 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
新密码是否为空 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | |
新密码是否相同 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
是否修改其他信息 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |
结果 | 信息修改成功 | ||||||||||||||||
用户密码错 | |||||||||||||||||
密码不同 |
4、因果图
案例
自动售货机
有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。
- 需求分析
条件:有零钱、选橙汁、选啤酒、投5角、投1元
结果:红灯亮、出橙汁、出啤酒、找5角、退1元
2、因果图
练习题
字母判定
第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下(只有这个时候才)进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。
- 需求分析:
条件:第一列是A、第一列是B、第二列是数字
结果:修改文件、提示L、提示M
2、绘制判定表
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
条件 | 第一列是A | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
第一列是B | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
第二列是数字 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |
结果 | 修改文件 | ||||||||
提示L | |||||||||
提示M | |||||||||
无效 | 无效 |
3、绘制判定表
4、去除无效列
5、状态迁移
案例
飞机售票系统
1、客户向航空公司打电话预定机票—>此时机票信息处于“完成”状态
2、顾客支付了机票费用后—>机票信息就变为“已支付”状态
3、旅行当天到达机场后,拿到机票后—>机票信息就变为“已出票”状态
4、登机检票后—>机票信息就变为“已使用”状态
5、在登上飞机之前任何时间可以取消自己的订票信息,如果已经支付了机票的费用,则还可以得到退款,取消后—>订票信息处于“已被取消”状态
1、绘制“状态迁移图”
2、绘制“状态迁移树”
2.生成测试用例
每个树枝形成一个测试用例(4个)
练习题
QC中缺陷跟踪流程
以缺陷管理跟踪流程为例,使用状态迁移方法设计测试用例。
1、状态迁移图
- 状态迁移树
4、用例(6个)
6、正交试验
案例
环境搭建
假设一个WEB站点,该站点有大量的服务器和操作系统,并且有许多具有各种插件的浏览器浏览:
Web浏览器 | Netscape | IE | Firefox |
插件 | RealPlayer | Flash | PDF Reader |
服务器 | IIS | Tomcat | Weblogic |
操作系统 | WinXP | Win2000 | Win2003 |
L4-2-3:
4-实验次数(用例的个数)
2-水平(每个条件取值的个数)
3-因素(条件的个数)
L9-3-4:
所在列 | 1 | 2 | 3 | 4 | |
因素 | Web浏览器 | 插件 | 服务器 | 操作系统 | 实验结果 |
实验1 | Netscape | RealPlayer | IIS | WinXP | |
实验2 | Netscape | Flash | Tomcat | Win2000 | |
实验3 | Netscape | PDF Reader | Weblogic | Win2003 | |
实验4 | IE | RealPlayer | Tomcat | Win2003 | |
实验5 | IE | Flash | Weblogic | WinXP | |
实验6 | IE | PDF Reader | IIS | Win2000 | |
实验7 | Firefox | RealPlayer | Weblogic | Win2000 | |
实验8 | Firefox | Flash | IIS | Win2003 | |
实验9 | Firefox | PDF Reader | Tomcat | WinXP |
特点:
1、任何一列:每个值出现次数相同
- 任何两列:每组值对出现次数相同
- 每个条件的每个值都和其他条件的所有值成对组合过(两两组合 - 充分+平均)
练习题
赶集网组合查询
方法2:
Web浏览器 | Netscape | IE | Firefox | |
插件 | RealPlayer | Flash | PDF Reader | BaiDu |
服务器 | IIS | Tomcat | Weblogic | |
操作系统 | WinXP | Win2003 |
case | WEB浏览器 | 插件 | 服务器 | 操作系统 |
1 | IE6.5 | Adobe PDF | IIS | Windows2000 |
2 | Firefox3.0 | Falsh | Apche | Windows2000 |
3 | IE6.5 | Adobe PDF | Apche | Windows 2003 |
4 | Firefox3.0 | Falsh | IIS | Windows 2003 |
5 | Firefox3.0 | Adobe PDF | Tomcat | Linux |
6 | IE6.5 | Falsh | Tomcat | Linux |
7 | IE6.5 | RealPlayer | IIS | Windows XP |
8 | Firefox3.0 | Baidu | Apche | Windows XP |
9 | Firefox3.0 | RealPlayer | Apche | Windows 98 |
10 | IE6.5 | Baidu | IIS | Windows 98 |
11 | IE6.5 | RealPlayer | Tomcat | Windows2000 |
12 | Firefox3.0 | Baidu | Tomcat | Windows 2003 |
13 | Firefox3.0 | RealPlayer | IIS | Linux |
14 | IE6.5 | Baidu | Apche | Linux |
15 | Firefox3.0 | Adobe PDF | Tomcat | Windows XP |
16 | IE6.5 | Falsh | Tomcat | Windows 98 |
17 | Firefox3.0 | Baidu | IIS | Windows2000 |
18 | IE6.5 | RealPlayer | Apche | Windows 2003 |
19 | IE6.5 | Falsh | IIS | Windows XP |
20 | Firefox3.0 | Adobe PDF | IIS | Windows 98 |
7、流程分析
案例
嵌入式发送子流程
在某嵌入式系统中,将待发送的数据打包成符合CAN协议的帧格式后,便可写入发送缓站区,并自动发送。该发送子程序的流程为:
1、首先进入发送子程序
2、系统判断是否有空闲发送缓冲区,如果没有则返回,启动发送失败消息。
3、如果有空闲缓冲区,将数据包写入空闲发送缓冲区
4、系统判断是否写入成功,如果不成功则返回,启动发送失败消息
5、如果写入成功,则启动发送命令
6、返回启动发送成功消息
1、绘制活动图(流程图):
2、生成测试用例(借鉴单元测试-分支覆盖、路径覆盖)
分支覆盖(100%):A-C-E-F (基本流)
A-B (备选流)
A-C-D (备选流)
路径覆盖(100%):A-C-E-F
A-B
A-C-D
练习题
字母判定
第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下(只有这个时候才)进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。
用例1: 第一列是AorB - 第二列是数字 - 修改文件
第一列是A - 第二列是数字 - 修改文件 1 - 5
第一列是B - 第二列是数字 - 修改文件 2 - 3
用例2: 第一列不是AorB - 提示L 3 - 1
用例3: 第一列是AorB - 第二轮不是数字 - 提示M
第一列是A - 第二轮不是数字 - 提示M 4 - 4
第一列是B - 第二轮不是数字 - 提示M 5 - 2
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
条件 | 第一列是A | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
第一列是B | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
第二列是数字 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |
结果 | 修改文件 | X | X | ||||||
提示L | X | X | |||||||
提示M | X | X | |||||||
无效 | 无效 |
1 | 2 | 3 | 4 | 5 | ||
1、2 | 3 | 4 | 5 | 6 | ||
条件 | 第一列是A | 0 | 0 | 0 | 1 | 1 |
第一列是B | 0 | 1 | 1 | 0 | 0 | |
第二列是数字 | - | 0 | 1 | 0 | 1 | |
结果 | 修改文件 | X | X | |||
提示L | X | |||||
提示M | X | X | ||||
8、错误推测
单引号用例
Sql语句
<%option explicit%>
<!--#include file="inc/conn.asp"-->
<!--#include file="inc/function.asp"-->
<%
dim strAdminName,strAdminPwd,strErr
strErr = ""
strAdminName = Trim(request.form("adminname"))
strAdminPwd = Trim(request.form("adminpwd"))
if G_CONN.execute("select count(*) as reccount from admin where adminname='" & strAdminName & "' and adminpwd='" & strAdminPwd & "'")("reccount") = 0 then
strErr = "<li>用户名或密码错误!</li>"
showErrMsg(strErr)
else
response.cookies("aoyi")("adminname") = strAdminName
end if
call closeConn()
if strErr = "" then
response.redirect "admin_index.asp"
end if
%>
9、异常分析法
Qq登录时网络断开后是否能够自动重连
10、输入域覆盖
输入超过字段存储类型的值,如short的int型,输入数值32768
11、输出域覆盖
金额计算时,商品单价*总数的金额值超过总金额所定义的数据范围。
如总金额定义为short int型,商品单价为327.68,可购买最大数为100,则327.68*100=32768,该值超过short int所能存储的范围。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)