等价类
定义:1、等价:如果多个输入在程序中处理方式(路径)相同,则认为这些输入是等价的,测试一个即可。(前提:测试不能穷举)
2、输入:分为两类,有效输入(可以保存)、无效输入(不可保存)
3、结合:有效等价类、无效等价类
满足规则:只需寻找一个全部满足规则的(有效等价类)
不满足规则:需分开,每条不满足条件的举出一个,方便定位错误(无效等价类)
规则的几种情况:
1 若规则是布尔式的
有效、无效分别取一个 一个真,一个假
2. 若规则是区
有效的取一个 无效的,在小于区间的取一个,大于区间的取一个,空或零取一个
3. 规则是集合:
有效取一个 无效的在集合外取一个
4. 规则是必须满足的一个条件:
对无效,要细分无效(先试试其他有效等价类,再试试全部等价类全都不满足)
例:邮箱注册,注册名只能以小写字母开头,设计无效等价类时,先试试其他有效等价类,如大写字母、数字等,再试试其他有效全部都不满足的情况
有效等价类:程序规格说明有意义,合理的输入数据
无效等价类:程序规格说明无意义,不合理的输入数据
ASCII码
7位 表示27=128个字符 每个字符存储占用1个字节
分类:不可见字符
控制字符:LF(换行)、CR(回车)
通信字符
NULL(空)
可见字符
空格
数字
字母(大写、小写)
符号
练习
1.1年龄注册
注册页面要求输入年龄,限制:1到150期间的正整数
1、需求分析—找出全部的输入条件
1)、正整数
2)、[1,150]
注意:分解的过程中,条件之间不用组合(完全独立),在设计有效用例输入的时候再考虑组合(一对多)
2、绘制等价类表格
条件 | 有效等价类 | 有效编号 | 无效等价类 | 无效编号 | |
正整数 | >1 | A01 | 数字 | 小数 | B01 |
负数 | B02 | ||||
0 | B03 | ||||
非数字 | 空(NULL) | B04 | |||
空格 | B05 | ||||
字母 | B06 | ||||
符号 | B07 | ||||
[1,150] | [1,150] | A02 | <1 | B08 | |
>150 | B09 |
3、设计测试用例输入
原则:有效输入—尽可能多去覆盖有效等价类 (一对多)
无效输入---只能覆盖一个无效等价类 (一对一)
目的:A、出现问题可以更好的去定位
B、有可能第一个无效处理后,后续无效值被漏测
输入序号 | 有效输入值 | 覆盖有效等价类 | 输入序号 | 无效输入值 | 覆盖无效等价类 |
1 | 100 | A01、A02 | 2 | 1.8 | B01 |
|
|
| 3 | -9 | B02 |
4 | 0 | B03、B08 | |||
5 | 空(NULL) | B04 | |||
6 | 空格 | B05 | |||
7 | W | B06 | |||
8 | @ | B07 | |||
9 | 200 | B09 |
1.2.年龄注册
某保险公司注册页面要求输入年龄,限制:1到150期间的正整数,其中:
[1,10] 适用的费率 10%
[11,50] 适用的费率 30%
[51,150] 适用的费率 80%
条件 | 有效等价类 | 有效编号 | 无效等价类 | 无效编号 | |
正整数 | >1 | A01 | 数字 | 小数 | B01 |
负数 | B02 | ||||
0 | B03 | ||||
非数字 | 空(NULL) | B04 | |||
空格 | B05 | ||||
字母 | B06 | ||||
符号 | B07 | ||||
[1,150] | [1,10] | A02 | <1 | B08 | |
[11,50] | A03 | >150 |
| ||
[51,150] | A04 |
|
|
输入序号 | 有效输入值 | 覆盖有效等价类 | 输入序号 | 无效输入值 | 覆盖无效等价类 |
1 | 5 | A01、A02 | 4 | 1.8 | B01 |
2 | 30 | A01、A03 | 5 | -9 | B02 |
3 | 100 | A01、A04 | 6 | 0 | B03、B08 |
|
|
| 7 | 空(NULL) | B04 |
8 | 空格 | B05 | |||
9 | W | B06 | |||
10 | @ | B07 | |||
11 | 200 | B09 |
1.3.扩充
考虑全角和半角问题(GB231)
其中,半角占1个字节
全角占2个字节
字符集
1、ASCII
2、GB2312 -> GB18030 一个汉字占2个字节
BIG5(繁体)
3、ISO Unicode (UTF-16) -> UTF-8(变长存储) 一个汉字可能占3个字节
条件 | 有效等价类 | 有效编号 | 无效等价类 | 无效编号 | |
正整数 | >1(半角) | A01 |
|
|
|
|
| ||||
| 0 | B03 | |||
>1(全角) | A02 | 半角字符 | 空(NULL) | B04 | |
空格 | B05 | ||||
字母 | B06 | ||||
符号 | B07 | ||||
全角字符 | 空格 | B08 | |||
字母 | B09 | ||||
符号 | B10 | ||||
汉字 (字符集) | GB-2312 | B11 | |||
BIG-5 | B12 | ||||
[1,150] | [1,150] | A03 | <1 | B13 | |
>150 | B14 |
分解粒度:根据功能的重要性决定(用例图----执行者角色,考虑用户的关注功能)
根据成本、时间决定
取消负数、小数的原因:
1、前提:在编辑框内输入年龄,程序在接收编辑框的内容时,一般以字符(或字符串)的形式接收,再根据需要进行类型转换,如年龄,需要转换为整型
2、小数中的“小数点”和负数中的“负号”都认为是符号,不允许保存
边界值
取值(5个):上点、内点、离点
1、上点、内点取值与区间的开闭无关
2、离点和上点互为有效
作用:(有序、有范围)等价类的补充
补充:考虑数据类型的边界
如 int 类型 占4个字节 即 32bit 取值范围[-231, 231-1]
上点:边界上的点
内点:区间内的点
离点:离边界值最近且与上点不属于同一等价类的点(对于小数,没有离点,不用取)
规则的几种情况:
1. 规则是区间:
按上点、内点、离点取
2. 规则是取值的个数:
取最小、最大、中间个数
3.规则是a~z序列:
取a、z
4.规则是集合:
取一个集合内的,取一个集合外的
(0,20)上点是0,20 离点是1,19 [0,20]上点是0,20 离点是-1,21
若规则是下拉菜单:建议每个下拉值都选择一个
2.1.年龄
条件 | 有效等价类 | 有效边界值 | 有效编号 | 无效等价类 | 无效边界值 | 无效编号 | |
正整数 | >=1 | 上点:1 | A01 | 数字 | 小数 |
| B01 |
内点:100 | A02 | 负数 |
| B02 | |||
|
| 离点:0 | 0 | B03 | |||
非数字 | 空(NULL) |
| B04 | ||||
空格 |
| B05 | |||||
大写字母 | 上点:A | B06 | |||||
上点:Z |
| ||||||
内点:M |
| ||||||
符号 | 离点:@ | B07 | |||||
离点:[ |
| ||||||
[1,150] | [1,150] | 上点:1 | A03 | 离点: | 0 | B08 | |
上点:150 | A04 | 离点: | 151 | B09 | |||
内点:100 | A05 |
|
|
|
有效用例输入:1 、100、150
2.2.用户名注册
1、测试需求分析
1、内容:字母、数字、
2、长度:[6,18]
3、约束:字母开头
字母或数字结尾
不允许重名
不允许使用保留字
自动去除首尾空格
2、等价类划分
条件 | 有效等价类 | 有效编号 | 无效等价类 | 无效编号 | |
内容 | 字母 | 大写字母 | A01 | 符号(除下划线) | B01 |
小写字母 | A02 | NULL(空) | B02 | ||
数字 | [0,9] | A03 | 空格 | B03 | |
下划线 | 下划线 | A04 | GB2312 | B04 | |
|
|
| BIG5 | B05 | |
长度 | [6,18] | [6,18] | A05 | <6 | B06 |
>18 | B07 | ||||
约束 | 字母开头 | 大写字母开头 | A06 | 数字开头 | B08 |
小写字母开头 | A07 | 下划线开头 | B09 | ||
|
| 符号(非下划线)开头 | B10 | ||
汉字开头 | B11 | ||||
字母或数字结尾 | 大写字母结尾 | A08 | 下划线结尾 | B12 | |
小写字母结尾 | A09 | 符号(非下划线)结尾 | B13 | ||
数字结尾 | A10 | 汉字结尾 | B13 | ||
不允许重名 | 不重名 | A11 | 重名 | B15 | |
去除首尾空格 | A12 |
|
| ||
不允许使用保留字 | 不使用 | A13 | 使用保留字 | B16 |
3、用例设计
序号 | 有效输入 | 有效边界值 | 序号 | 无效输入 | 无效边界值 |
1 | (当前系统无AAb_4) AAbb_4 | A01、A02、A04、A03 A05、A06、A10 A11、A13 | 5 | abc@a | B01 |
2 | (当前系统无AAb_4) aAbcvb_A | A01、A02、A04、A03 A05、A07、A08 A11、A13 |
| ……….. |
|
3 | (当前系统无AAb_4) aA555b_b | A01、A02、A04、A03 A05、A07、A09 A11、A13 |
| (当前系统存在aaf5bc) (空格)aaf5bc(空格) | B15 |
4 | (当前系统无aaf5bc) (空格)aaf5bc(空格) | A12 |
| Administrator | B16 |
2.3.变量命名
在某一版的编程语言中对变量名称规格作如下规定:变量名称是由字母开头的,后跟字母或者数字的任意组合构成,并且区分字母大小写。编译器能够区分的有效字符数为8个,并且变量名称必须先声明,后使用,在同一声明语句中,变量名称至少必须有一个。
1、测试需求分析
内容:字母、数字
长度:[1,8]
约束:字母开头
大小写敏感
先声明后使用
变量的个数[1,?] (需要和需求人员沟通)
在同一作用域中不允许重名
不能使用关键字
2、等价类划分
3、确定边界值
4、设计用例输入
2.4.进销存价格
代码实现:
if (isNumberString(document.form2.tichen.value,"1234567890.")!=1)
{
alert("价格只能为数字!");
return false;
}
根据代码的实现,价格编辑框只接受键盘的“数字键”和“小数点”共11个字符
等价类
条件 | 有效等价类 | 无效等价类 |
内容 | 数字 | 字母 字母、符号处理方式(路径)相同,认为都是等价的 |
小数点 | ||
约束 | 小数点最多有1个 | >1个小数点 |
|
|
|
2.5.Windows文件命名
目录 目录长度 文件最大长度 目录+文件最大长度
C:\ 3 255个 = 258
C:\ABCD 7 251个 =258
C:\ABCD\AAAA 12 246个 =258
根目录: 255
非根目录: 254 (文件夹最小长度为1)
1、测试需求分析
内容:非“\/:*?"<>|”的字符
长度: 根目录: 255
非根目录: 254 (文件夹最小长度为1)
约束:同目录下不能重名(去除首尾空格)
不同扩展名使用不同的图标
不能为空
总结
1、适用范围:针对程序的输入
2、使用步骤
1)、测试需求分析,找出全部条件(显示、隐士)(条件之间不能交叉或者组合,到设计用例的时候再考虑多条件的组合)
2)、划分等价类
划分依据:相同的处理方式(路径)
分类:有效等价类、无效等价类
3)、使用边界值补充(有序、有范围的)等价类
内容:上点、离点、内点
要求:上点、内点与区间开闭无关,离点和上点互为有效
分类:将边界值分为有效边界和无效边界,填入等价类表格
4)、对每个等价类进行唯一的编号
5)、设计用例的输入
原则:有效等价类,一对多
无效等价类,一对一
3、优点:对输入的考虑充分
4、缺点:如果不清楚系统的实现方式,造成大量的冗余用例(黑盒方法共有)
对于多输入的组合不太适宜
规则的几种情况:
1 .若规则是布尔式的
有效、无效分别取一个 一个真,一个假
2. 若规则是区间
有效的取一个 无效的,在小于区间的取一个,大于区间的取一个,空或零取一个
3. 规则是集合:
有效取一个 无效的在集合外取一个
4. 规则是必须满足的一个条件:
对无效,要细分无效(先试试其他有效等价类,再试试全部等价类全都不满足)
例:邮箱注册,注册名只能以小写字母开头,设计无效等价类时,先试试其他有效等价类,如大写字母、数字等,再试试其他有效全部都不满足的情况
有效等价类:程序规格说明有意义,合理的输入数据
无效等价类:程序规格说明无意义,不合理的输入数据
边界值
上点:边界上的点
内点:区间内的点
离点:离边界值最近且与上点不属于同一等价类的点(对于小数,没有离点,不用取)
规则的几种情况:
1. 规则是区间:
按上点、内点、离点取
2. 规则是取值的个数:
取最小、最大、中间个数
3.规则是a~z序列:
取a、z
4.规则是集合:
取一个集合内的,取一个集合外的
(0,20)上点是0,20 离点是1,19 [0,20]上点是0,20 离点是-1,21
若规则是下拉菜单:建议每个下拉值都选择一个