常用测试方法

Mr.he...大约 13 分钟testMethods

1. 等价类划分法

1.1. 为什么要学习等价类?

案例:计算两个1到100之间整数的和

分析:如果按照穷举测试,有效的测试用例都至少需要100个,需要消耗大量的时间去进行测试,也是非常无聊繁琐的工作。

image-20230601112514088

1.2. 等价类的概念

在所有测试数据中,具有某种共同特征的数据子集。

等价类划分为:

  • 有效等价类:满足需求的数据子集
  • 无效等价类:不满足需求的数据子集

1.3. 等价类划分法设计用例步骤

  1. 明确需求
  2. 确定有效和无效等价类
  3. 提取数据编写测试用例

提示

无效等价类的设计规则:需求、长度、类型(字母、特殊符号、汉字、小数)、空输入

1.4. 典型应用场景

具有典型输入框的场景,如登录注册页面,各种表单。

1.5. 案例1:验证QQ账号的合法性

要求:6~10位自然数

我们按照上面的设计用例步骤,可做出如下数据:

CleanShot 2023-06-02 at 11.16.10@2x

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. 上点:边界上的点(正好等于)(1,99)
  2. 离点:距离上点最近的点(刚好大于、刚好小于)(0,2,98,100)
  3. 内点:范围内的点(区间范围内的数据)(20,50,60)

image-20230601161226977

2.3. 7个点优化为5个点

上面的7个点对我们设计测试用例来说,还是比较多,我们通过-99到99之前数据的和来分析下,减少重复的点。

上点:-99,99

内点:50

离点:-98,-100,98,100

2.3.1. [-99,99]

取值包含-99和99时。

CleanShot 2023-06-01 at 17.08.58@2x

分析:其中的点-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时。

CleanShot 2023-06-01 at 17.16.19@2x

分析:其中的点-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时。

CleanShot 2023-06-01 at 17.23.34@2x

分析:其中的点-98,50,98,99为有效点,-100,-99,100为无效点。

按照理解来说,测上点-99,99时也测到了离点-100,100,这样理解的话就可以去掉离点-100,100,只需测五个点(-99,-98,50,98,99)。

7个优化为5个点

上点:必选(不考虑区间开闭) 内点:必选(建议选择中间范围) 离点:开内闭外(考虑开闭区间,开区间选择内部离点,闭区间选择外部离点

2.4. 设计测试用例步骤

  1. 需求分析
  2. 划分等价类
  3. 确定边界
    • 上点
    • 内点
    • 离点
  4. 设计测试用例

2.5. 典型应用场景

数据存在边界 >,>=,<,<= 大于 小于等于,6-10位QQ号等。

2.6. 案例1:QQ账号(6——10位自然数)

  1. 需求分析

  2. 划分等价类

    CleanShot 2023-06-02 at 11.23.18@2x

  3. 确定边界

需求数学表示上点内点离点精简5点
6—10位自然数[6,10]6 1085 7 9 105 6 8 10 11

CleanShot 2023-06-02 at 11.00.31@2x

  1. 设计测试用例

    我们可以按照确定出来的5点,设计出来5个测试用例,但是通过和之前设计的等价类划分法核对,我们可以发现,有3个测试用例(5,6,11)和之前在等价类划分中设计的是重复的,因此可以删掉,只保留2个测试用例即可。

    CleanShot 2023-06-02 at 14.30.01@2x

3. 判定表

3.1. 判定表法的引入

案例:验证“若用户欠费或者关机,则不允许主被叫”功能的测试

等价类边界值分析法主要关注单个输入类条件的测试,并未考虑输入条件之间的各种组合、输入条件与输出结 果之间有相互制约关系的测试

3.2. 概念

存在多个输入条件、多个输出结果,输入和输入之间有组合关系,输入和输出之间有依赖或制约关系。

如上引例可以通过以下表格表示出:

CleanShot 2023-06-02 at 15.07.45@2x

3.3. 判定表组成

  1. 条件桩:所有输入条件,如欠费状态、关机状态

  2. 动作桩:所有的可能的输出结果,如允许主被叫、不允许主被叫

  3. 条件项:单个条件的取值范围,一般都是有效等价类和无效等价类

    表示方式:

    • 字符:
      • 真/有效等价类/Y
      • 假/无效等价类/N
    • 数字:
      • 真/有效等价类/1
      • 假/无效等价类/0
  4. 动作项:基于每一种条件的组合,得到确认的结果,如打不通等

提示

在测试中我们对于真假表示说明常用以下两种方式替代:

表示形式
数字10
符号YN

相关信息

规则:判定表中贯穿条件项和动作项的一列就是一条规则 假设有n个条件,每个条件的取值有2个(0,1),全组合有2^n种规则

这里就是2个条件,每个条件2个取值,可得到2^n=4种组合。

3.4. 设计测试用例的步骤

  1. 明确条件桩(找到所有的输入条件)
  2. 明确动作桩(找到所有的输出结果)
  3. 对条件桩进行全组合
  4. 明确每个组合对应的动作桩(基于每一种条件的组合情况,确定本组合下的输出结果。)
  5. 设计测试用例,每行数据对应一条测试用例

3.5. 使用场景:

多条件组合情况

3.6. 案例1:用户呼叫

若用户欠费或关机,则不允许主被叫。

image-20230602144309362

3.7. 案例2:订单状态

  • 订单检查,如果金额大于500元,又未过期,则发出批准单和提货单;
  • 如果金额大于500元,但过期了,则不发批准单与提货单;
  • 如果金额小于500元,则不论是否过期都发出批准单和提货单;
  • 在过期的情况下,不论金额大小还需要发出通知单。

CleanShot 2023-06-02 at 14.46.49@2x

3.8. 案例3:文件修改

如果想对文件进行修改,输入的第一列字符必须是A或B,第二列字符必须是一个数字。

  • 如果第一列字符不正确,则给出信息L;
  • 如果第二列字符不正确,则给出信息M。

image-20230602144351183

4. 因果图(扩展)

4.1. 概念

用图解的方法表示输入的各组合关系,写出判定表,进而设计测试用例的一种【黑盒测试】方法。

4.2. 使用场景

适用于分析程序输入条件的各种组合情况,以及输入和输出之间的依赖关系。

4.3. 核心要素

  • 因:条件
  • 果:结果

4.4. 基本符号(掌握)

  1. 恒等(-):条件成立,结果成立。
  2. 非(~)NOT:条件成立,结果不成立;条件不成立,结果成立。
  3. 或(V)OR:只要有一个条件成立,结果就成立;所有条件都不成立时,结果才不成立。
  4. 与/且(^)AND:多个条件必须同时成立,结果成立;只要有一个不成立,结果就不成立。

4.5. 设计测试用例的步骤

  1. 需求分析
  2. 画出因果图
  3. 将因果图转换为判定表
  4. 生成测试用例

该方法使用很少,画因果图很麻烦,还不如直接写判定表,了解一下就行。

4.6. 案例1:文件修改

如果想对文件进行修改,输入的第一列字符必须是A或B,第二列字符必须是一个数字。

  • 如果第一列字符不正确,则给出信息L;
  • 如果第二列字符不正确,则给出信息M。

因果图

5. 正交法(扩展)

5.1. 核心思想

用最小的测试用例获得最大的测试覆盖率。

5.2. 正交表

一种特制的表,一般的正交表标记为

Ln(mk) L_n(m^k)

说明

  • k代表因素(输入参数)

  • m叫水平(输入参数的取值)

  • n代表测试用例数

  • 读法:k因素m水平

5.3. 基于正交表设计测试用例的步骤

  1. 需求分析
  2. 确定因素与水平(因素:控件名称;水平:每个控件对应的取值)
  3. 确定要采用的正交表
  4. 将正交表中的字母用文字代替
  5. 设计测试用例(一行就是一条测试用例)

5.3.1. 案例1:字符属性设置程序

窗体中有多个控件(字体、字符样式、颜色、字号),每个控件有多个取值

  • 字体:仿宋、楷体、华文彩云
  • 字符样式:粗体、斜体、下划线
  • 颜色:红色、绿色、蓝色
  • 字号:20号、30号、40号
5.3.1.1. 测试用例设计步骤
  1. 需求分析

    窗体中有多个控件(字体、字符样式、颜色、字号),每个控件有多个取值

  2. 确定因素与水平

    CleanShot 2023-06-02 at 17.36.55@2x

  3. 确定要采用的正交表

    找到我们常用的正交表中的4因素3水平。

    CleanShot 2023-06-02 at 16.29.58@2x
  4. 将正交表中的字母用文字代替

    CleanShot 2023-06-02 at 17.07.32@2x
  5. 设计测试用例

    设计测试用例,就是每一行实验号为一个测试用例,这里略过。

5.4. 基于allpairs设计测试用例的步骤

  1. 需求分析
  2. 确定因素与水平(因素:控件名称;水平:每个控件对应的取值)

CleanShot 2023-06-02 at 17.36.55@2x

  1. 将确定的因素与水平复制到txt文件中

CleanShot 2023-06-02 at 17.27.39@2x

  1. 打开DOS窗口,进入allpairs目录,运行命令:allpairs.exe test.txt > result.txt
  2. 根据生成的新文件编写测试用例(一行就是一条测试用例)

提示

该方法暂确认只能在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. 绘制流程图

  1. 确认场景中关键业务步骤
  2. 确定业务之间的先后顺序
  3. 用箭头连接即可

6.6. 绘制工具

  • Microsoft Visio

  • 各种流程图软件

6.6.1. 案例1:缺陷跟踪管理流程

缺陷跟踪管理流程

案例2:ATM机取款流程

取款流程

ATM取款流程

流程图

ATM取款流程图

7. 错误推测法

  • 概念:利用经验智慧发现程序中可能犯错的地方。

  • 使用场景

    • 重要功能

    • 使用同类型产品

    • 任务急、时间紧、资源少

相关信息

比如一个测试很熟悉医疗软件或者测试经验十分丰富的话,那么他就可以根据自己的经验

提示

还有一些其他的测试方法(如:状态迁移法)我们在后续进行学习。

8. 测试用例设计方法总结

  • 具有输入功能,但输入之间没有组合关系==》【等价类】
  • 输入有边界 如长度、类型==》【边界值】
  • 多输入、多输出、输入与输入之间存在组合关系、输入与输出之间存在依赖或制约关系==》【判定表、因果图】
  • 用最少的测试用例获得最大测试覆盖率时 ==》【正交法】
  • 多个功能的组合测试 ==> 【场景法、流程图】
  • 最后推荐使用【错误推测法】来进一步补充测试用例