测试用例设计方法

学习目标

  • 熟练掌握等价类划分方法
  • 熟练掌握边界值法
  • 熟练掌握因果图
  • 熟练掌握判定表
  • 了解正交排列法
  • 熟练掌握场景法
  • 了解错误推论法

一、等价类划分

1. 思想

将输入的数据,根据数据各自的特性,划分成若干个范围,再从每个范围内挑选出个别数据, 来做代表数据进行测试。若代表数据通过了测试,则认为所在的整个数据范围都通过了测试。

生活里的例子:某食品仓库中存有3个批次的面包,质检人员从每个批次中抽取两包代表样品,进行抽样测试, 若抽样的面包质检合格,则认为该批次的面包都是合格的,允许进行销售。

2. 应用场景

界面中有数据输入的控件,如:输入框、文件选择、时间选择

3. 等价类分类

  • 有效等价类:正向、正确的数据范围
  • 无效等价类:反向、错误的数据范围

4. 用法

  • 填写等价类表:要求包含正向、反向的取值范围
  • 根据等价类表编写测试用例(或思维导图用例)

实战演练一

假设有如下需求:


设置便签的标题,要求

  • 字符个数最少为1个字符,最多为40个字符
  • 不能包含 / : * ?这些特殊字符

明确需求:


确定有效等价类和无效等价类:


编写测试用例如下:


注意事项:

  • 有效等价类的数据可以组合起来,即:一条正向的测试用例可以包含多个有效等价类范围
  • 无效等价类的数据需要独立测试,在测试时间充裕的情况下,可以进行组合错误数据进行补充测试
  • 可以多使用发散性思维,去进行补充等价类范围
  • 数据类型通常需要覆盖:数字(整数、正数、负数、小数)、字母(大写、小写)、国语(根据不同国家,使用不同国语)、特殊符号(标点符号、输入法自带符号、emog表情)

实战演练二(需求分析当测试用例使用)

假设有如下需求:


解析:这是一个典型的表单页面,主功能是“创建活动”。如图可见,界面中只有【选择控件】和【输入控件】,外加一个【提交按钮】, 产品经理将每个控件的输入条件、报错提示均进行了详细描述,因此我们可以轻松地使用等价类划分的方法来一个个控件分解需求

  • 例如,针对【活动图片】文件选择:

根据需求描述,可以在需求分析里增加如下分解:


该需求注意点:
  • 图片格式:需求中说允许传jpg图片格式,但没说JPE、JPEG这两种图片格式。但从技术角度上来说,这三种图片格式都是互通的。 一般情况下,只要说了其中一种允许上传,也默认其他两种互通的格式也是允许上传的,不要为了这个与开发扯皮。
  • 图片大小:需求说明“最上限”是500kb,但是没说“最下限”多少kb,又因为文件字节单位在kb之下的,还有B单位(即byte), 因此在未说明“最下限”的情况下,只要说明是大于0即可,不要较真非要找到一个最小值。
  • 图片大小:测试数据选取的是300kb的数据,但是真实在执行测试时,不用非要找到一个刚好300kb整的图片,只要在300kb左右即可, 稍大一点 或 少小一点 都无伤大雅。
  • 无效等价类的非图片格式:非图片格式有常规的文档格式、压缩包格式、多媒体格式等。同时,你也需要非文件格式的情况, 如:aaa、bbb、ccc这种瞎编的格式,当然这条用例的优先级会降低,属于延伸测试。

二、边界值

1. 思想

在有效数据和无效数据之间,存在边界点,边界点属于易出错、易受影响的区域,应单独对边界值进行分析测试

生活里的例子:某地区发生灾难,除了灾难中心以外,附近四周的地区也会收到一定影响

2. 应用场景

有数据输入的控件,且输入的数据与“数值”相关,如:年龄18~60岁、最多输入10字符、保留4位小数、有效期24小时等

3. 边界值分类

  • 最大值:max 【有效数据中的最大值】
  • 最小值:min 【有效数据中的最小值】
  • 有效最大次边界:max- 【比最大值 小1个单位】
  • 无效最大次边界:max+ 【比最大值 大1个单位】
  • 有效最小次边界:min+ 【比最小值 小1个单位】
  • 无效最小次边界:min- 【比最大值 大1个单位】

4. 用法

  • 填写数据分析表:要求包含正向、反向的取值范围、边界取值
  • 根据数据分析表编写测试用例(或思维导图用例)

实战演练一

假设有如下需求:


要求:

  • 【姓名】:1~20字符,不能包含数字,不能为空
  • 【年龄】:18~60之间的整数,不能为空
  • 如果填写的信息正确,注册成功,并给出如下提示信息:

  • 并在【注册信息】文本框中反显出相应的注册信息,如下图:

明确需求:


根据等价类+边界值规则,可填写数据分析表:


注意:“姓名”的“字符长度”1~20 等同于 1、20、2、19,因此只要测试有效边界值即可,不需要专门再去有效等价类中找一个值
注意:“姓名”的“字符长度”<1 等同于 0,因此两条可合并为1条用例
注意:“姓名”的“字符长度”>20 等同于 21,因此两条可合并为1条用例

注意:“年龄”的“规则”18~60 等同于 18、19、60、59,因此只要测试有效边界值即可,不需要专门再去有效等价类中找一个值
注意:“年龄”的“规则”<18 等同于 17,因此两条可合并为1条用例
注意:“年龄”的“规则”>60 等同于 61,因此两条可合并为1条用例

编写测试用例如下:


实战演练二(需求分析当测试用例使用)

还是活动图片的需求:


根据需求描述,可以在需求分析里增加如下分解:


三、因果图

1.思想

界面中有多个控件,不同控件之间存在组合或限制关系。不同的输入条件会得到不同的输出结果,同时条件和条件之间存在相互依存、互斥等关系。使用画图的方式理清这些关系

2. 基本图形符号

以图形的方式表明“输入条件”和“输出结果”之间存在的关系

  • 恒等于(相等)
    • 如果a=1,那么b=1:如果输入条件a是真的,那么输出结果b也是真的
    • 如果a=0,那么b=0:如果输入条件a是假的,那么输出结果b也是假的

    图形:


  • 与(和、并且)
    • 全1为1:所有的输入条件都是真的,那么输出结果也是真的
    • 有0则0:所有的输入条件中存在1个假的,那么输出结果就是假的

    例如登录功能的“用户名”和“密码”之间的关系:


    图形:


  • 或(或者)
    • 全0为0:所有的输入条件都是假的,那么输出结果也是假的
    • 有1则1:所有的输入条件中存在1个真的,那么输出结果就是真的

    例如作为乘客上飞机:


    图形:


  • 非(相反)
    • 如果a=1,那么b=0:如果输入条件a是真的,那么输出结果b就是假的
    • 如果a=0,那么b=1:如果输入条件a是假的,那么输出结果b就是真的

    图形:


3. 限制图形符号

以图形的方式表明“输入条件”和“输入条件”之间存在的关系

  • 互斥(E-exclude)
    • 可以不选,如果选择只能选择1个


    图形:


  • 唯一(O-only)
    • 必须选择1个,不能多选,不能不选(有且仅有1个)


    图形:


  • 包含(I-include)
    • 至少选1个,可以多选,但不能不选


    图形:


  • 要求(R-require)
    • 如果a=1,那么要求b=1
    • 如果a=0,那么b的值无所谓(1、0都可以)


    图形:


  • 屏蔽(M-mask)
    • 如果a=1,那么b=0
    • 如果a=0,那么b可能是1,可能是0


    图形:


实战演练一

假设有如下系统:


列出所有的“因”(输入条件)

  • ① 投币:50元
  • ② 投币:100元
  • ③ 充值:50元
  • ④ 充值:100元

列出所有的“果”(输出条件)

  • a.充值成功
  • b.找零
  • c.退卡
  • d.未按充值按钮,重新操作!
  • e.未按投币按钮,重新操作!
  • f.投币金额不足!

列出所有的“因”之间的组合关系

  • ① 投50 + ③ 充50
  • ① 投50 + ④ 充100
  • ② 投100 + ③ 充50
  • ② 投100 + ④ 充100
  • ① 投50
  • ② 投100
  • ③ 充50
  • ④ 充100

列出所有的“因”之间的限制关系

  • ① 投50 、 ② 投100属于互斥
  • ③ 充50 、 ④ 充100属于互斥

以图形方式表达因果关系

  • ① 投50 + ③ 充50 = a.充值成功 + c.退卡

  • ① 投50 + ④ 充100 = b.找零 + c.退卡 + f.投币金额不足!

  • ② 投100 + ③ 充50 = a.充值成功 + b.找零 + c.退卡

  • ② 投100 + ④ 充100 = a.充值成功 + c.退卡

  • ① 投50 = d.未按充值按钮,重新操作!

  • ② 投100 = d.未按充值按钮,重新操作!

  • ③ 充50 = e.未按投币按钮,重新操作!

  • ④ 充100 = e.未按投币按钮,重新操作!

以图形方式表达因之间的限制关系

  • ① 投50 、 ② 投100属于互斥

  • ③ 充50 、 ④ 充100属于互斥

编写成测试用例:


四、判定表

1. 思想

界面中有多个控件,不同控件之间存在组合或限制关系。不同的输入条件会得到不同的输出结果,同时条件和条件之间存在相互依存、互斥等关系。使用表格的方式理清这些关系

2. 判定表结构


  • 条件桩:列出所有的输入条件
  • 动作桩:列出所有的输出结果
  • 条件项:选择的条件
  • 动作项:对应的结果
  • 规则:条件+结果的组合为一条规则,即为一条测试用例

实战演练一

假设有如下系统:


画出判定表,列出组合和限制关系:


编写成测试用例:


实战演练二

假设有如下需求:


画出判定表,列出组合和限制关系:


需求分析中加入操作逻辑:


五、正交排列

1. 思想

界面中可操作的控件较多,且每个控件可选择不同的输入选项,若使用穷举方式,将花费大量时间。因此可使用正交排列,选出最优最有代表性的组合进行测试

2. 正交表

据说是日本数学科学家花了多年研究出来,在数学领域的科研成功。具备能从海量数据中挑选最优、最少的数据进行统计的特征,因此,被测试行业借鉴使用。

公式解析:


  • L:行
  • n:总行数
  • m:每列的最大值,也叫做“水平”
  • k:列数,也叫做“因素”

(1)L4(23

列号
1
2
3
试验号
1
1
1
1
2
1
2
2
3
2
1
2
4
2
2
1

(2)L8(27)

列号
1
2
3
4
5
6
7
试验号
1
1
1
1
1
1
1
1
2
1
1
1
2
2
2
2
3
1
2
2
1
1
2
2
4
1
2
2
2
2
1
1
5
2
1
2
1
2
1
2
6
2
1
2
2
1
2
1
7
2
2
1
1
2
2
1
8
2
2
1
2
1
1
2

(3)L12(211)

列号
1
2
3
4
5
6
7
8
9
10
11
试验号
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
2
2
2
2
2
2
3
1
1
2
2
2
1
1
1
2
2
2
4
1
2
1
2
2
1
2
2
1
1
2
5
1
2
2
1
2
2
1
2
1
2
1
6
1
2
2
2
1
2
2
1
2
1
1
7
2
1
2
2
1
1
2
2
1
2
1
8
2
1
2
1
2
2
2
1
1
1
2
9
2
1
1
2
2
2
1
2
2
1
1
10
2
2
2
1
1
1
1
2
2
1
2
11
2
2
1
2
1
2
1
1
1
2
2
12
2
2
1
1
2
1
2
1
2
2
1

(4)L9(34

列号
1
2
3
4
试验号
1
1
1
1
1
2
1
2
2
2
3
1
3
3
3
4
2
1
2
3
5
2
2
3
1
6
2
3
1
2
7
3
1
3
2
8
3
2
1
3
9
3
3
2
1

(5)L16(45

列号
1
2
3
4
5
试验号
1
1
1
1
1
1
2
1
2
2
2
2
3
1
3
3
3
3
4
1
4
4
4
4
5
2
1
2
3
4
6
2
2
1
4
3
7
2
3
4
1
2
8
2
4
3
2
1
9
3
1
3
4
2
10
3
2
4
3
1
11
3
3
1
2
4
12
3
4
2
1
3
13
4
1
4
2
3
14
4
2
3
1
4
15
4
3
2
4
1
16
4
4
1
3
2

(6)L25(56

列号
1
2
3
4
5
6
试验号
1
1
1
1
1
1
1
2
1
2
2
2
2
2
3
1
3
3
3
3
3
4
1
4
4
4
4
4
5
1
5
5
5
5
5
6
2
1
2
3
4
5
7
2
2
3
4
5
1
8
2
3
4
5
1
2
9
2
4
5
1
2
3
10
2
5
1
2
3
4
11
3
1
3
5
2
4
12
3
2
4
1
3
5
13
3
3
5
2
4
1
14
3
4
1
3
5
2
15
3
5
2
4
1
3
16
4
1
4
2
5
3
17
4
2
5
3
1
4
18
4
3
1
4
2
5
19
4
4
2
5
3
1
20
4
5
3
1
4
2
21
5
1
5
4
3
2
22
5
2
1
5
4
3
23
5
3
2
1
5
4
24
5
4
3
2
1
5
25
5
5
4
3
2
1

(7)L8(4×24

列号
1
2
3
4
5
实验号
1
1
1
1
1
1
2
1
2
2
2
2
3
2
1
1
2
2
4
2
2
2
1
1
5
3
1
2
1
2
6
3
2
1
2
1
7
4
1
2
2
1
8
4
2
1
1
2

(8)L12(3×24

列号
1
2
3
4
5
试验号
1
1
1
1
1
1
2
1
1
1
2
2
3
1
2
2
1
2
4
1
2
2
2
1
5
2
1
2
1
1
6
2
1
2
2
2
7
2
2
1
1
1
8
2
2
1
2
2
9
3
1
2
1
2
10
3
1
1
2
1
11
3
2
1
1
2
12
3
2
2
2
1

(9)L16(44×23

列号
1
2
3
4
5
6
7
试验号
1
1
1
1
1
1
1
1
2
1
2
2
2
1
2
2
3
1
3
3
3
2
1
2
4
1
4
4
4
2
2
1
5
2
1
2
3
2
2
1
6
2
2
1
4
2
1
2
7
2
3
4
1
1
2
2
8
2
4
3
2
1
1
1
9
3
1
3
4
1
2
2
10
3
2
4
3
1
1
1
11
3
3
1
2
2
2
1
12
3
4
2
1
2
1
2
13
4
1
4
2
2
1
2
14
4
2
3
1
2
2
1
15
4
3
2
4
1
1
1
16
4
4
1
3
1
2
2

实战演练

假设有如下需求:


用户在点餐时,可以有如下选择:

  • 店铺:①观沙岭店、②梅溪湖店、③大学城店
  • 用餐方式:①自提带走、②店内用餐、③外送
  • 优惠券:①全场3.8折、②立减8.8元、③新人免单
  • 赠品:①小熊公仔、②咖啡杯、③雨伞

分析需求可发现,有4个控件,每个控件3个选项,则表示应该选择4因子、3水平的正交表;

选择L9(34)表后,将列头填好控件名:


表中间里的数字用对应的选项去填写:


根据每一行的组合编写测试用例:


需求分析中加入操作逻辑:


3. 当没有合适正交表

情况一:当m值不统一,每个控件的选项个数不统一,有合适复合正交表

用户在点餐时,可以有如下选择:

  • 饮料:①奶茶、②酸梅汤
  • 小吃:①蛋挞、②奥尔良烤翅
  • 主食:①大米饭、②意大利面
  • 凉菜:①拍黄瓜、②花生米
  • 餐包:①华夫饼、②烤面包、③早餐包

此时,k值有5个;m值有1个是3选项,有4个是2选项,可选择L12(3×24)表

列号
1
2
3
4
5
试验号
1
1
1
1
1
1
2
1
1
1
2
2
3
1
2
2
1
2
4
1
2
2
2
1
5
2
1
2
1
1
6
2
1
2
2
2
7
2
2
1
1
1
8
2
2
1
2
2
9
3
1
2
1
2
10
3
1
1
2
1
11
3
2
1
1
2
12
3
2
2
2
1

情况二:当m值不统一,每个控件的选项个数不统一,没有合适复合正交表

  • 保存目录:暂时忽略
  • 文件名称:暂时忽略
  • 导出格式:①PNG、②JPG、③PDF
  • 导出品质:①高清、②普通
  • 水印设置:①无水印、②自定义、③默认水印
  • 透明设置:①透明背景、②不透明背景

此时,k值有4个;m值有2个是3选项,有2个是2选项,期望(32×22),但没有该正交表,那么m值取最大值,m=3,选择L9(34

列号
1
2
3
4
试验号
1
1
1
1
1
2
1
2
2
2
3
1
3
3
3
4
2
1
2
3
5
2
2
3
1
6
2
3
1
2
7
3
1
3
2
8
3
2
1
3
9
3
3
2
1

将选项填充之后,发现【导出品质】和【透明设置】的3选项成为了空白格,没有值可填充:

将该控件的其他选项,尽量均匀填充到空白格里:


如果填充完空白格后,发现有重复组合,则再替换其他值,但要遵守平均原则

情况三:当K值没有合适正交表


  • 姓名:填/不填
  • 密码:填/不填
  • 手机:填/不填
  • 地址:填/不填

此时,k值有4个;m值是2,期望(24)没有直接可以使用的正交表,选择K值最接近的,L12(3×24

列号
1
2
3
4
5
试验号
1
1
1
1
1
1
2
1
1
1
2
2
3
1
2
2
1
2
4
1
2
2
2
1
5
2
1
2
1
1
6
2
1
2
2
2
7
2
2
1
1
1
8
2
2
1
2
2
9
3
1
2
1
2
10
3
1
1
2
1
11
3
2
1
1
2
12
3
2
2
2
1

去掉多余的一列,如下图,再进行内容填充:


六、场景法

1. 思想

运用场景来对系统的功能点或业务流程的描述。包括正向主流程和异常流程,从而覆盖所有可能场景。

2. 场景分类

  • 基本流:软件功能按照正确的事件流,中间无任何差错,从开始直接执行到结束的一条正确流程
  • 备选流:软件功能在执行过程中,包含可能存在问题的各支流

图解:

  • 基本流:正向流程
  • 备选流1:始于基本流,由于某些原因偏离基本流,后又因为特定原因回到基本流中
  • 备选流2:始于备选流,一直偏离基本流,最终到场景结束也无法回到基本流
  • 备选流3:始于基本流,由于某些原因偏离基本流,后又因为特定原因回到基本流的起点重新来过
  • 备选流4:始于基本流,由于某些原因偏离备选流,最终到场景结束也无法回到基本流

3. 场景法使用步骤

  • 分析需求,根据需求说明描述出程序的基本流及各项备选流
  • 根据基本流和各项备选流生成不同的场景
  • 针对每一个场景生成相应的测试用例
  • 重新审核生成的所有测试用例,把多余的测试用例去掉,确定好每一个测试用例,并设计测试数据

4. 案例

例:小明要在某购物网站上购买一件衣服,使用场景法设计测试用例

前提条件

  • 假设小明在购物网站上的账号为:ming,密码:123
  • 假设小明的银行卡账号为:62282***1216,密码:123
  • 衣服的价格为:180元

步骤一:列出基本流和备选流





步骤二:根据基本流和备选流来确定场景


步骤三:针对各种场景,设计相应的测试用例


备注:V-表示有效的数值;I-表示无效的数值;N/A表示无效步骤

步骤四:去掉重复的场景,补充测试数据


备注:N/A表示无效步骤

步骤五:编写测试用例


七、错误推论

1. 思想

基于经验和直觉推测程序中所有可能存在的各种错误,有针对性地设计测试用例的方法。

2. 错误推论方向

  • 凭借对项目的理解度:了解项目中薄弱的地方,针对性去使用错误数据和操作,破坏性使用薄弱功能。
  • 凭借个人经验:在以往的项目中积累经验,判断出该类项目可能容易在哪出现问题,针对性做测试。
  • 凭借对开发人员、产品经理的了解:了解同事们的工作风格,判断出“他”可能易在哪些功能点出错。

例如:

  • 需求:只能输入正整数
  • 错推:输入“+10”是否可行;输入“十”是否可行;输入“10.00”是否可行
  • 需求:活动时间为“开始时间yyyy-mm-dd~结束时间yyyy-mm-dd”
  • 错推:[结束时间] 早于 [开始时间]是否可行
  • 需求:某子页面嵌套在菜单中,只能会员能看到该菜单,从而访问该子页面
  • 错推:普通用户直接输入该子页面的网址是否能访问
  • 需求:白银会员99元,白金会员199元,从白银升级到白金会员只需要补差价100元即可,开通会员30分钟内允许退款。
  • 错推:小明开通白银会员花费99元,再补差价100元升级到白金会员,后又申请退白银会员99元。是否允许退款?是否相当于花费100元开通了白金会员?
    错推:小明开通白银会员花费99元,再补差价100元升级到白金会员,后又申请退白金会员。会退款199元还是100元?退款成功后,是否保留白银会员权力?