黑盒测试用例设计方法


前言

以下文章提取于微信公众号:测试小哥进阶

这几天作者在面试,面试过程中作者会对测试方法这方面的进行提问。发现很多人对测试方法的定义、优点、缺点还是有点欠缺。当然了,作者也只知道部分,像一部分测试方法作者也没有用过,所以没有一个明显的感知,只停留在理论的阶段。下面进入正题,趁着有时间赶紧把常用的测试方法总结一波。

一、测试方法

首先,我比较常用的测试方法一般都是:等价类、边界值、判定表、错误推断法、场景法、流程分析法等。除此之外,还有其它的测试方法,如:正交表、因果图等。下面我们来说说这些测试方法的特征及特点。

1.1 等价类划分法

等价类划分是指:把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。等价类分有效等价类和无效等价类。

举例:一个程序规定只能输入1946年到至今的年份。其中,设计测试用例可以设计如下:

  • 输入1946年到至今的任一年份
  • 输入小于1946及大于至今的年份
  • 输入4位数以上及以下的数字
  • 输入正确的4位数字符

其中,第一点及第四点为有效等价类,其余二点为无效等价类。那么是怎么区分有效和无效呢?如下:

有效指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。而无效与有效是相反的,无效指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。像等价类一般都用于设计输入框的验证测试用例。像这种的优点和缺点也是非常明显的。

使用等价类的优点是简单高效,可以快速评估测试用例的数量。缺点也是非常明显的,如:有效与无效的测试用例年份都是随机选取的,这种情况不一定可以发现BUG,所以一般都会测试多次来验证结果的随机性;除此之外,使用等价类也只考虑了输入的有效和无效,没有考虑到多个输入条件。所以一般都是结合其它测试方法来设计测试用例。

在设计的时候建议一条用例尽可能覆盖多的有效等价类,一条用例只能覆盖一条无效等价类。

下面是我在百度搜的一个例子图片,可以帮助读者更好的理解,如下:
在这里插入图片描述

1.2 边界值分析法

边界值分析法是对等价类的一个补充,它使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。

如:一个程序只能输入1-12的月份。设计测试用例可以设计如下:

  • 输入小于1的月份
  • 输入月份等于0
  • 输入月份大于1小于12(2)
  • 输入月份大于1小于12(11)
  • 输入月份等于1或12
  • 输入月份大于12

我们可以看到上面设计的用例都是在等价类的边界上以及两侧的情况设计的。

1.3 错误推测法

错误推测法是基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。该方法比较注重测试人员在对应行业或产品的经验累积。测试人员需要列举出产品中所有可能有的错误和容易发生错误的特殊情况,然后设计测试用例。

如:输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行。这些都是容易发生错误的情况。测试人员可选择这些情况下的例子设计测试用例。

1.4 因果图

因果图是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。因果图法着重测试规格说明中的输入与输出间的依赖关系。

下面拿百度的例子举例:假设需求为:有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”、“雪碧”、或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。

首先,我们需要确定需求中的原因与结果:
在这里插入图片描述
后在确定原因与结果的逻辑关系:C1 与 C2 需要一个中间结果Cm1, C3、C4、C5 需要一个中间结果Cm2;

在确定因果图中的约束:C1 与 C2 是或的关系, C3、C4、C5 是或的关系;

然后在画出因果图并转化为决策表:
在这里插入图片描述
将原因C1、C2、C3、C4、C5按二进制由小到大分别取值,并分析中间结果的成立与否,进而得出下面的简化版(即中间结果Cm1、Cm2成立的情况)
在这里插入图片描述
简化版:
在这里插入图片描述
最后我们在根据决策表设计测试用例。从这个例子我们知道了使用因果图设计测试用例的设计步骤:

  • 确定软件规格(需求)中的原因和结果;
  • 确定原因和结果之间的逻辑关系;
  • 确定因果图中的各个约束(constraints);
  • 画出因果图并转换为决策表;
  • 根据决策表设计测试用例。

1.5 场景法

场景法是通过运用场景来对系统的功能点或业务流程的描述,从而提高测试效果。场景法一般包含基本流、备用流、异常流,从一个流程开始,通过描述经过的路径来确定的过程,经过遍历所有的基本流和备用流来完成整个场景。图解如下:
在这里插入图片描述
那么,什么是基本流,备选流、异常流呢?

  • 基本流:基本流表示通过业务流程时输入都正确,能达到目标的流程;
  • 备选流:备选流表示通过业务流程时输入错误(或者操作错误)导致流程存在反复,但是经过纠正后仍能达到能达到目标的流程;
  • 异常流:异常流表示通过业务流程时输入错误(或者操作错误)产生异常终止流程。

对于用户来说,用户希望入度唯一,出度唯一。每一个流程都包含一个从未走过的流程节点。假设有一台取款机,用户去取款,那么:

  • 基本流为:插卡 ---- 输入正确密码 ---- 输入金额 ---- 取款 ---- 取卡;
  • 备选流为:插卡 ---- 输入错误密码 ---- 输入正确密码 ---- 输入金额 ---- 取款 ---- 取卡;
  • 异常流为:插卡 ---- 输入3次错误密码 ---- 锁卡。

我们可以知道,在用场景法设计测试用例时:

  • 理解需求,确定业务流程(基本流程、备选流程、异常流程);
  • 绘制流程图,再次确认流程路径;
  • 根据业务流程图,抽取测试路径(每一路径需含一个未走过得路径);
  • 细化路径,利用等价类边界值方法细化路径,抽取测试用例。

1.6 判定表

判定表,也叫决策表。是对多种输入条件下软件系统执行不同动作的分析工具,它可以把复杂的逻辑关系和多种组合的情况表达得具体明确。那么,判定表的组成元素有哪些呢?

判定表通常由条件桩、条件项、动作桩、动作项组成;

  • 条件桩: 被测对象的所有输入;
  • 条件项:被测对象的输入取值;
  • 动作桩:被测对象可能采取的操作/表现;
  • 动作项:在各个条件项的组合下,被测对象所采取的动作/表现。

例:三好学生中,思想品质、身体、学习对应的是条件桩。成为三好学生和没成为三好学生便是动作桩。
在这里插入图片描述
我们在来说说判定表设计用例步骤:

  • 确定规则的个数,在判定表里的规则是指,条件桩进行排列组合后的集合,对应到判定表右侧的所有列,每一列都可以对应一个测试用例。如果有3个条件,每个条件有2个取值,则有 2 x 2 x 2 = 8种规则,判定表中则有8列;
  • 列出所有的条件桩和动作桩;
  • 填入条件项;
  • 填入动作桩和动作项;
  • 化简,合并相似规则;
  • 将每条规则转化为用例。

我们在来解析下判定表的步骤:

  • 判定表的化简与合并:

化简工作是以合并相似规则为目标。如果表中有两条或多条规则具有相同的动作,并且其条件项之间存在极为相似的关系,即可将其合并。下图中,E1的取值都是 X,且C1 和 C2的取值相同,C3 的取值不同,那么可以得出,只要C1 和C2 取值为 Y/N,无论C3 怎么取值,结果都是 X;
在这里插入图片描述
下图中E1 的取值为X,C1和C3 的取值相同,且第一列的C2 取值包含了第二列的 C2的取值范围,所以第二列是重复的,可以去掉第二列;
在这里插入图片描述
假设:在日常工作中,我们经常会使用到打印机。那么如何才能正常使用打印机呢?

  • 我们先来看看正常流程,我们需要确保电脑有打印机的驱动,打印机正常工作、打印机的纸张充足、打印机墨粉充足才能满足打印;
    在这里插入图片描述

  • 得到条件桩和动作桩
    在这里插入图片描述

  • 生成判定表
    在这里插入图片描述

  • 化简
    在这里插入图片描述

列 5/ 9/ 10/ 11/ 12/ 13/ 15/ 16 中,结果都是E2 = 1,且不管C2/C3/C4 的值是什么,只要C1=0,所以可以合并这几列;
列 4/ 7/ 8/ 15中,结果都是 E3=1,不管C3和C4 取什么值,只要 C1=1和C2=0,所以合并这几列;
列 3/6 中,结果都是 E4=1, 不管 C4取什么值,只要 C1=1、C2=1和 C3=0,所以这两列可以合并。

在实际的工作中,也许我们很难把这种方法运用起来,因为当条件越多时,用例的判定表会变得异常庞大。但是其中的思想值得我们去学习。

1.7 正交实验法

正交实验法是从大量的(实验)数据(测试例)中挑选适量的,有代表性的点(例),从而合理地安排实验(测试)的一种科学实验设计方法。类似的方法有:聚类分析方法,因子方法方法等。

因为个人不怎么用,所以这里就不举例子了,我们来看看利用正交实验设计测试用例的步骤:

  • 提取功能说明,构造因子–状态表

把影响实验指标的条件称为因子,而影响实验因子的条件叫因子的状态。利用正交实验设计方法来设计测试用例时,首先要根据被测试软件的规格说明书找出影响其功能实现的操作对象和外部因素,把他们当作因子,而把各个因子的取值当作状态。对软件需求规格说明中的功能要求进行划分,把整体的概要性的功能要求进行层层分解与展开,分解成具体的有相对独立性的基本的功能要求。这样就可以把被测试软件中所有的因子都确定下来,并为确定个因子的权值提供参考的依据。确定因子与状态是设计测试用例的关键。因此要求尽可能全面的正确的确定取值,以确保测试用例的设计作到完整与有效。

  • 加权筛选,生成因素分析表

对因子与状态的选择可按其重要程度分别加权。可根据各个因子及状态的作用大小,出现频率的大小以及测试的需要,确定权值的大小。

  • 利用正交表构造测试数据集

正交表的推导依据Galois理论(这里省略,需要时可查数理统计方面的教材)。

1.8 功能图分析法

功能图分析法是功能图由状态迁移图和布尔函数组成。状态迁移图用状态和迁移来描述。一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变。同时要依靠判定表或因果图表示的逻辑功能。

例,一个简化的自动出纳机ATM的功能图。功能图介绍:

  • 一个程序的功能说明通常由动态说明和静态说明组成。动态说明描述了输入数据的次序或转移的次序。
  • 静态说明描述了输入条件与输出条件之间的对应关系。对于较复杂的程序,由于存在大量的组合情况,因此,仅用静态说明组成的规格说明对于测试来说往往是不够的。必须用动态说明来补充功能说明。功能图方法是用功能图FD形式化地表示程序的功能说明。并机械地生成功能图的测试用例。
  • 功能图模型由状态迁移图和逻辑功能模型构成。状态迁移图用于表示输入数据序列以及相应的输出数据。在状态迁移图中,由输入数据和当前状态决定输出数据和后续状态。逻辑功能模型用于表示在状态中输入条件和输出条件之间的对应关系。逻辑功能模型只适合于描述静态说明,输出数据仅由输入数据决定。测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成。功能图方法其实是是一种黑盒白盒混合用例设计方法。
  • 功能图方法中。要用到逻辑覆盖和路径测试的概念和方法,其属白盒测试方法中的内容。逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计方法。该方法要求测试人员对程序的逻辑结构有清楚的了解。由于覆盖测试的目标不同,逻辑覆盖可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖。下面我们指的逻辑覆盖和路径是功能或系统水平上的,以区别与白盒测试中的程序内部的。

测试用例生成方法:

  • 从功能图生成测试用例,得到的测试用例数是可接受的。问题的关键的是如何从状态迁移图中选取测试用例。若用节点代替状态,用弧线代替迁移,则状态迁移图就可转化成一个程序的控制流程图形式。问题就转化为程序的路径测试问题(如白盒测试)问题了

测试用例生成规则:

  • 为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,须定义下面的规则。在一个结构化的状态迁移(SST)中,定义三种形式的循环:顺序,选择和重复。但分辨一个状态迁移中的所有循环是有困难的。

从功能图生成测试用例的过程:

  • 生成局部测试用例:在每个状态中,从因果图生成局部测试用例。局部测试用例由原因值(输入数据)组合与对应的结果值(输出数据或状态)构成。
  • 测试路径生成:利用上面的规则(三种)生成从初始状态到最后状态的测试路径。
  • 测试用例合成:合成测试路径与功能图中每个状态中的局部测试用例。结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。
  • 测试用例的合成算法:采用条件构造树。

因为该方法作者也没怎么了解过,所以百度了下定义,实例就不进行说明了。


二、优缺点

说了那么多,我们在来看看这些测试方法的优缺点。

2.1 等价类划分法

优点:等价类划分法的优点是考虑了单个输入域的各类情况,避免了盲目或随机选取输入数据的布完整性和覆盖的不稳定性;

缺点:等价类划分法虽然简单易用,但是没有对组合情况进行充分的考虑。需要结合其它测试用例设计的方法进行补充。

2.2 边界值分析法

优点:更全面更系统的测试边界上存在的问题,是最有效的测试用例设计方法之一;

缺点:只能作为一个对其他设计方法的补充;这种方法表面上听起来简单,但有的边界值非常微妙,不容易确定下来;只适用于多个变量相互独立又都代表实际物理量的情况,对变量之间的依赖关系则考虑不到。

2.3 错误推测法

优点:充分发挥人的直觉和经验、集思广益、方便使用、快速切入;

缺点:难以知道测试的覆盖率、可能丢失大量未知的区域、带有主观性且难以复制、只能作为测试设计的补充,不能单独用来设计测试用例。

使用场景:先用其他方法设计测试用例,再使用错误猜测法补充用例。

2.4 因果图

优点:有助于用一个系统的方法选择出高效的测试用例集;通过将规格说明转换为布尔逻辑网络,就可以指出规格说明的不完整和不明确之处;

缺点:尽管因果图方法确实能产生一组有效的测试用例,但通常它不能生成全部应该被确定的有效测试用例。最好是单独考虑边界值分析等方法。

难点:因果图法最具难度的部分是将因果图转换为判定表。但这个过程是有算法的,即意味着我们可以编写程序来自动完成这个过程。

应用场景:在界面中有多个控件,控件之间有组合或限制关系,不同的输入组合会对应不同的输出结果,如果想弄清楚不同的输入组合到底对应哪些输出结果,可以使用因果图/判定表法。(因果图/判定表法比较适合测试组合数量较少的情况,一般少于20种)

2.5 场景法

优点:涉及到业务流程的适合用场景法;

缺点:只验证业务流程,不验证单点功能。一般先采用等价类划分、边界值分析、错误推断法、判定表等方法对单点功能进行验证,验证通过后再采用场景法进行业务流程的验证。

重点:场景法最主要的是能够分析出基本流、备选流、异常流。

难点:场景法测试的难点在于对业务的理解,业务越复杂测试难度越大。

2.6 判定表

优点:能够把复杂的问题简单化,按照功能的各个条件进行组合,便于分析。

缺点:无法对循环体结构类型进行分析;随着条件的变多,判定表会变得异常庞大(规则数为条件的可选数量乘积),实战性不高。

适用范围:

  • 条件的排列顺序不影响执行操作;
  • 规则的排列顺序不影响执行操作;
  • 每当某一个规则的条件已经满足,并确定要执行的操作后,不必检验别的规则;
  • 如果某一个规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。

2.7 正交实验法 & 功能图分析法

这二种方法实例比较少,设计用例时我也没有用过。所以优缺点就不说啦!想了解的可直接百度~


三、结语

最后,值得一提的是,测试人员在设计测试用例的时候需要发散思维,不能‘太死板’。在模块、功能、测试点、测试用例之间需要分清主次关系。除此之外,测试人员还需要在产品、实现、行业内 上进行思考。如:测试需求的背景、业务逻辑、是否需要、是否合适等方面;在系统的架构及实现等方面;在行业内类似产品及标准规范等方面。

那么,本篇文章就到这了。886~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值