黑盒测试用例设计

测试用例的构成要素

  • 用例编号:唯一标识 如QQmail_login_001
  • 用例标题:简要描述测试目的 何种情况下做何事有何结果
  • 测试项目:所属项目
  • 用例级别:重要程度,优先级 P1>P2>P3
  • 预设条件:执行前提,如环境/数据 — 非必须
  • 测试输入
  • 执行步骤
  • 预期结果:与执行的实际结果对比

在实际中根据项目要求对用例设计要素进行调整

黑盒测试用例设计方法

从理论上讲,黑盒测试只能通过穷举输入测试。但是实际工作中这种方法是不可行的。所以衍生出多种黑盒测试用例设计方法,包括等价类划分法、边界值分析法、错误推测法、因果图发、判定表驱动法、正交试验设计法、功能图法、场景法等。

等价类

分类代替穷举,根据功能需求分类

等价类:在所有测试的数据中,具有某种共同特征的子集

等价划分:是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。

有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合.利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。

无效等价类:与有效等价类的定义恰巧相反。无效等价类中是无效输入,系统预期返回一个错误值。测试无效输入能确保软件具有更高的可靠性。

设计测试用例时,要同时考虑这两种等价类.因为,软件不仅要能接收合理的数据,也要能经受意外的考验.这样的测试才能确保软件具有更高的可靠性。

划分准则

等价类划分准则

  • 在输入条件规定了取值范围或值的个数的情况下,则可以确立有一个有效等价类和两个无效等价类。—-如手机号由11位构成,无效则大/多于或者小/少于
  • 在输入条件规定了输入值的集合或者规定了“必须如何”的条件情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则) —- 如要求电话都是数字,无效的情况可能是字母/汉字/特殊字符等多种情况
  • 在输入条件是一个布尔量的情况下,可以确定一个有效等价类和一个无效等价类。  
  • 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。

测试用例规则
  1. 为每一个等价类规定一个唯一的编号。
  2. 设计一个新的测试用例,使其尽可能多的覆盖尚未被覆盖的有效类。重复这一步,直到所有的有效等价类都被覆盖为止。
  3. 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类被覆盖为止。

边界值

大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。经验证明,考虑了边界调节的测试用例与其他没有考虑边界条件的测试用例相比,具有更高的测试回报率。

相比与等价类法,多了一个步骤:确定上点,离点,内点

上点 离点 内点
  1. 如果是闭区间,例如[1,10]。那么上点就是1,10。内点就是区间内任意一个数字,例如5。离点则是0,11
  2. 如果是开区间,例如(1,10)。那么上点就是1,10。内点就是区间内任意一个数字,例如5。离点则是(2,9)
  3. 这两个最大的区别就是在于离点的不同,概括起来一句话就是闭两边,开中间。也就是说闭区间的离点是区间外边相邻的两个数字(0,11),开区间的离点就是区间里边相邻的两个数字(2,9)。如两位整数加法器数的范围为-99—99,则应测试-99,-100和99,100

继续以电话号码的地区嘛为例,现在需要关注的是边界,如无效等价类6要测小于四位数的情况,现在的边界值就是3位

判定表

使用等价类方法时对于输入域及输出域存在关联时无法覆盖,可以理解为判定表通过组合覆盖更多的情况

优点:能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表适合于处理这类问题。

判定表要素

1)条件桩(Condition Stub):列出了问题得所有条件。通常认为列出的条件的次序无关紧要。—- 输入

2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。—- 输入的结果

3)条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。—条件集合

4)动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。 —- 动作集合

规则及规则合并

1)规则:任何一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。

2)化简:就是规则合并有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。

如果动作结果一样,对于某些因素取“1”或“0”没有影响,即以“—”表示,并合并

步骤:定义条件桩与动作桩 –> 设计优化判定表 –> 填写动作项 –> 简化判定表 –> 抽取用例(每个规则一条用例)

假定:优先警告缺纸,然后警告没有墨粉,最后警告驱动程序不对。

判定表的优/缺点

优点:把复杂的问题按各种可能的情况一一列举,简明而易于理解,也避免遗漏。

缺点:不能表达重复执行的动作,如循环结构。判定表不能很好的伸缩。如有n个条件的判定表有2^n个规则。

因果图

判定表的指数增长不适合复杂的条件,是先组合再分析关系;而因果图是先考虑所有输入/输出条件的相关制约关系及组合,输入与输出的关系,再根据分析的关系转化为判定表的规则

输入和输出的关系

输入条件之间的关系

输出条件之间的关系

设计步骤:

  1. 分析程序规格说明的描述中,哪些是原因,哪些是结果。
  2. 分析程序规格的描述中语义的内容,并将其表示成连接各个原因与各个结果的“因果图”。
    由于语法或环境的限制,有些原因与原因之间、原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。
  3. 把因果图转换为决策表。用0和1标识,中间状态也放在开始里面
  4. 根据决策表中的每一列设计测试用例。
    即:找出原因、结果 – 找出关系,画因果图 – 找出约束和限制,加上标记 – 转化为决策表 – 为每一个规则设计测试用例

场景法

软件几乎都是用事件触发来控制流程的,时间触发时的情景形成场景,同一事件不同的触发顺序和处理结果形成事件流

事件流和备选流

基本流:仅有一个基本流;经过用例的最简单的路径,指每个步骤都“正常”运作时所发生的事 —-正常

备选流 :可以有多个;可选的或备选的情况 ,异常事件流程。—- 异常

场景是事件流的一个实例,由基本流或(基本流+备选流)的步骤组成,表明了用户执行系统操作系列。从开始到结束才算一个场景,其实画出来有点像UML中的流程图

备选流越多,场景越多,执行路径越多,将导致场景爆炸。

选取典型场景进行测试,其基本如下:
1、最少场景数等于基本流与备选流的总数。
2、有且唯一有一个场景仅包含基本流。
3、对应某个备选流,至少应该有一个场景覆盖备选流,且在该场景中应尽量避免覆盖其他备选流。

上图的用例场景如下:

正交法

根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了“均匀分散,齐整可比”的特点,正交试验设计是一种基于正交表的、高效率、快速、经济的试验。

正交实验设计方法:从大量的测试案例中挑选适量的、有代表性的例子,从而合理地安排测试的一种科学实验设计方法。通常用于配置测试

因素与水平

因素数:条件因子的个数

水平数:条件因子取值的个数,取所有条件因子中取得值数目最大的那个。

正交表

根据因素数水平数最小实验次数n,选择合适的正交表。

n = ∑(每列因素的水平数-1) + 1,也就是说正交表的行数要取大于n的最小值

把变量的值映射到表中,每一行即一个测试用例。

使用正交表设计用例,(1)确定因素的取值范围或集合,(2)采用等价类划分、边界值分析等方法确定测试数据,(3)将确定的测试数据作为对应因素的水平值,(4)根据合适的正交表设计用例。

并不是我们想要什么正交表就有什么正交表,我们选取正交表时只能从现有的正交表中进行选择,而且选择的正交表要满足上述中的因素数、水平数、和最小实验次数n,在这个前提下选择实验次数最少的一个。

步骤:分析需求获取因子及水平 –> 根据因子及水平数选择正交表 –> 替换因子水平,获取实验次数 –> 细化输出测试用例

错误推测法

经验和直觉,没有具体的步骤,基于以往的项目经历对常出问题的点针对性设计测试用例

一般不单独使用,要在其他测试方法之上进行针对性测试

总结

可以关注该作者的文章