常用测试方法
1. 等价类划分法
1.1. 为什么要学习等价类?
案例:计算两个1到100之间整数的和
分析:如果按照穷举测试,有效的测试用例都至少需要100个,需要消耗大量的时间去进行测试,也是非常无聊繁琐的工作。
1.2. 等价类的概念
在所有测试数据中,具有某种共同特征的数据子集。
等价类划分为:
- 有效等价类:满足需求的数据子集
- 无效等价类:不满足需求的数据子集
1.3. 等价类划分法设计用例步骤
- 明确需求
- 确定有效和无效等价类
- 提取数据编写测试用例
提示
无效等价类的设计规则:需求、长度、类型(字母、特殊符号、汉字、小数)、空输入
1.4. 典型应用场景
具有典型输入框的场景,如登录注册页面,各种表单。
1.5. 案例1:验证QQ账号的合法性
要求:6~10位自然数
我们按照上面的设计用例步骤,可做出如下数据:
2. 边界值分析法
2.1. 为什么要学习边界值分析法?
案例:测试两个两位数整数之间的和(即-99到99之间数据求和)?
分析:通过经验发现,程序员在写代码的时候,非常容易混淆>=,>,<,<=
运算符号,造成在边界的时候非常容易出错。
//判断输入的数据是否小于-99或者大于99,如果小于-99或大于99给出错误提示
If Val(Text1.Text) >= 99 or Val(Text1.Text) <=- 99 Then
MsgBox ("输入的参数值必须大于-99同时小于99")
Else if
Val(Text2.Text) >= 99 or Val(Text2.Text) <= -99 Then
MsgBox ("输入的参数值必须大于-99同时小于99") Then
Else
Text3.Text = Val(Text1.Text) + (Text2.Text)
End if
End if
注意
输入的数据包含99或者-99时,边界条件设置出错:代码中将“>”写成了“>=”,将“<”写成了“<=”,造成输入99和-99时也会出错,这就不符合-99到99之间数据求和的要求了,但我们只使用等价类划分法的话,是很有可能测不到该种错误情况的,所以需要使用边界值分析法。
2.2. 边界范围的确定
- 上点:边界上的点(正好等于)(1,99)
- 离点:距离上点最近的点(刚好大于、刚好小于)(0,2,98,100)
- 内点:范围内的点(区间范围内的数据)(20,50,60)
2.3. 7个点优化为5个点
上面的7个点对我们设计测试用例来说,还是比较多,我们通过-99到99之前数据的和来分析下,减少重复的点。
上点:-99,99
内点:50
离点:-98,-100,98,100
2.3.1. [-99,99]
取值包含-99和99时。
分析:其中的点-99,-98,50,98,99为有效点,-100,100为无效点。
按照理解来说,测上点-99,99时也测到了离点-98,98,这样理解的话就可以去掉离点-98,98,只需测五个点(-100,-99,50,99,100)。
2.3.2. (-99,99)
取值不包含-99,99时。
分析:其中的点-98,50,98为有效点,-100,-99,99,100为无效点。
按照理解来说,测上点-99,99时也测到了离点-100,100,这样理解的话就可以去掉离点-100,100,只需测五个点(-99,-98,50,98,99)。
2.3.3. (-99,99]
取值不包含-99,包含99时。
分析:其中的点-98,50,98,99为有效点,-100,-99,100为无效点。
按照理解来说,测上点-99,99时也测到了离点-100,100,这样理解的话就可以去掉离点-100,100,只需测五个点(-99,-98,50,98,99)。
7个优化为5个点
上点:必选(不考虑区间开闭) 内点:必选(建议选择中间范围) 离点:开内闭外(考虑开闭区间,开区间选择内部离点,闭区间选择外部离点)
2.4. 设计测试用例步骤
- 需求分析
- 划分等价类
- 确定边界
- 上点
- 内点
- 离点
- 设计测试用例
2.5. 典型应用场景
数据存在边界 >,>=,<,<= 大于 小于等于,6-10位QQ号等。
2.6. 案例1:QQ账号(6——10位自然数)
需求分析
划分等价类
确定边界
需求 | 数学表示 | 上点 | 内点 | 离点 | 精简5点 |
---|---|---|---|---|---|
6—10位自然数 | [6,10] | 6 10 | 8 | 5 7 9 10 | 5 6 8 10 11 |
设计测试用例
我们可以按照确定出来的5点,设计出来5个测试用例,但是通过和之前设计的等价类划分法核对,我们可以发现,有3个测试用例(5,6,11)和之前在等价类划分中设计的是重复的,因此可以删掉,只保留2个测试用例即可。
3. 判定表
3.1. 判定表法的引入
案例:验证“若用户欠费或者关机,则不允许主被叫”功能的测试
等价类边界值分析法主要关注单个输入类条件的测试,并未考虑输入条件之间的各种组合、输入条件与输出结 果之间有相互制约关系的测试
3.2. 概念
存在多个输入条件、多个输出结果,输入和输入之间有组合关系,输入和输出之间有依赖或制约关系。
如上引例可以通过以下表格表示出:
3.3. 判定表组成
条件桩:所有输入条件,如欠费状态、关机状态
动作桩:所有的可能的输出结果,如允许主被叫、不允许主被叫
条件项:单个条件的取值范围,一般都是有效等价类和无效等价类
表示方式:
- 字符:
- 真/有效等价类/Y
- 假/无效等价类/N
- 数字:
- 真/有效等价类/1
- 假/无效等价类/0
- 字符:
动作项:基于每一种条件的组合,得到确认的结果,如打不通等
提示
在测试中我们对于真假表示说明常用以下两种方式替代:
表示形式 | 真 | 假 |
---|---|---|
数字 | 1 | 0 |
符号 | Y | N |
相关信息
规则:判定表中贯穿条件项和动作项的一列就是一条规则 假设有n个条件,每个条件的取值有2个(0,1),全组合有2^n种规则
这里就是2个条件,每个条件2个取值,可得到2^n=4种组合。
3.4. 设计测试用例的步骤
- 明确条件桩(找到所有的输入条件)
- 明确动作桩(找到所有的输出结果)
- 对条件桩进行全组合
- 明确每个组合对应的动作桩(基于每一种条件的组合情况,确定本组合下的输出结果。)
- 设计测试用例,每行数据对应一条测试用例
3.5. 使用场景:
多条件组合情况
3.6. 案例1:用户呼叫
若用户欠费或关机,则不允许主被叫。
3.7. 案例2:订单状态
- 订单检查,如果金额大于500元,又未过期,则发出批准单和提货单;
- 如果金额大于500元,但过期了,则不发批准单与提货单;
- 如果金额小于500元,则不论是否过期都发出批准单和提货单;
- 在过期的情况下,不论金额大小还需要发出通知单。
3.8. 案例3:文件修改
如果想对文件进行修改,输入的第一列字符必须是A或B,第二列字符必须是一个数字。
- 如果第一列字符不正确,则给出信息L;
- 如果第二列字符不正确,则给出信息M。
4. 因果图(扩展)
4.1. 概念
用图解的方法表示输入的各组合关系,写出判定表,进而设计测试用例的一种【黑盒测试】方法。
4.2. 使用场景
适用于分析程序输入条件的各种组合情况,以及输入和输出之间的依赖关系。
4.3. 核心要素
- 因:条件
- 果:结果
4.4. 基本符号(掌握)
- 恒等(-):条件成立,结果成立。
- 非(~)NOT:条件成立,结果不成立;条件不成立,结果成立。
- 或(V)OR:只要有一个条件成立,结果就成立;所有条件都不成立时,结果才不成立。
- 与/且(^)AND:多个条件必须同时成立,结果成立;只要有一个不成立,结果就不成立。
4.5. 设计测试用例的步骤
- 需求分析
- 画出因果图
- 将因果图转换为判定表
- 生成测试用例
该方法使用很少,画因果图很麻烦,还不如直接写判定表,了解一下就行。
4.6. 案例1:文件修改
如果想对文件进行修改,输入的第一列字符必须是A或B,第二列字符必须是一个数字。
- 如果第一列字符不正确,则给出信息L;
- 如果第二列字符不正确,则给出信息M。
5. 正交法(扩展)
5.1. 核心思想
用最小的测试用例获得最大的测试覆盖率。
5.2. 正交表
一种特制的表,一般的正交表标记为
说明
k代表因素(输入参数)
m叫水平(输入参数的取值)
n代表测试用例数
读法:k因素m水平
5.3. 基于正交表设计测试用例的步骤
- 需求分析
- 确定因素与水平(因素:控件名称;水平:每个控件对应的取值)
- 确定要采用的正交表
- 将正交表中的字母用文字代替
- 设计测试用例(一行就是一条测试用例)
5.3.1. 案例1:字符属性设置程序
窗体中有多个控件(字体、字符样式、颜色、字号),每个控件有多个取值
- 字体:仿宋、楷体、华文彩云
- 字符样式:粗体、斜体、下划线
- 颜色:红色、绿色、蓝色
- 字号:20号、30号、40号
5.3.1.1. 测试用例设计步骤
需求分析
窗体中有多个控件(字体、字符样式、颜色、字号),每个控件有多个取值
确定因素与水平
确定要采用的正交表
找到我们常用的正交表中的4因素3水平。
将正交表中的字母用文字代替
设计测试用例
设计测试用例,就是每一行实验号为一个测试用例,这里略过。
5.4. 基于allpairs设计测试用例的步骤
- 需求分析
- 确定因素与水平(因素:控件名称;水平:每个控件对应的取值)
- 将确定的因素与水平复制到txt文件中
- 打开DOS窗口,进入allpairs目录,运行命令:
allpairs.exe test.txt > result.txt
- 根据生成的新文件编写测试用例(一行就是一条测试用例)
提示
该方法暂确认只能在win下使用,mac下暂无。
5.4.1. 案例2:用户筛选按钮
假设有一个用户筛选功能,有3个输入分别是体型、年龄段、性别,
- 体型有3个取值:胖、适中、瘦;
- 年龄段有3个取值:老人、青年、儿童;
- 性别有2个取值:男,女;
基于allpairs设计测试用例如下:
TEST CASES | |||
---|---|---|---|
case | 体型 | 年龄段 | 性别 |
1 | 胖 | 老人 | 男 |
2 | 胖 | 青年 | 女 |
3 | 适中 | 老人 | 女 |
4 | 适中 | 青年 | 男 |
5 | 瘦 | 儿童 | 男 |
6 | 瘦 | 老人 | 女 |
7 | 胖 | 儿童 | 女 |
8 | 适中 | 儿童 | ~男 |
9 | 瘦 | 青年 | ~男 |
因为性别只有两个取值,导致8和9用例取得值为
~男
,这个我们不管,这里直接用男就行,用女也行,都一样。
6. 场景法(流程图法)
6.1. 概念
场景法就是模拟用户操作软件时的场景,主要用于测试多个功能之间的组合使用情况。
6.2. 使用测试阶段
- 集成测试
- 系统测试
- 验收测试
单元测试还没到使用阶段,主要是开发人员自己对代码的功能进行测试,或者测试人员对单个功能测试,不涉及功能组合的情况。
6.3. 设计测试用例的步骤
需求分析
绘制流程图
设计测试用例
每一条能走的流程路径就是一条测试用例
6.4. 流程图常用符号
开始或结束:椭圆
方向或路径:箭头
处理或操作:长方形
判断:菱形
输入或输出:平行四边形
6.5. 绘制流程图
- 确认场景中关键业务步骤
- 确定业务之间的先后顺序
- 用箭头连接即可
6.6. 绘制工具
Microsoft Visio
各种流程图软件
6.6.1. 案例1:缺陷跟踪管理流程
案例2:ATM机取款流程
取款流程
流程图
7. 错误推测法
概念:利用经验或智慧发现程序中可能犯错的地方。
使用场景
重要功能
使用同类型产品
任务急、时间紧、资源少
相关信息
比如一个测试很熟悉医疗软件或者测试经验十分丰富的话,那么他就可以根据自己的经验
提示
还有一些其他的测试方法(如:状态迁移法)我们在后续进行学习。
8. 测试用例设计方法总结
- 具有输入功能,但输入之间没有组合关系==》【等价类】
- 输入有边界 如长度、类型==》【边界值】
- 多输入、多输出、输入与输入之间存在组合关系、输入与输出之间存在依赖或制约关系==》【判定表、因果图】
- 用最少的测试用例获得最大测试覆盖率时 ==》【正交法】
- 多个功能的组合测试 ==> 【场景法、流程图】
- 最后推荐使用【错误推测法】来进一步补充测试用例