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所能存储的范围。