白盒测试用例设计方法

时间:2022-03-11 14:27:41 来源:网友投稿

1. 白盒测试用例设计方法 1.1. 白盒测试概述 由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。由于我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的情况下被执行。由于代码中的笔误是随机且无法杜绝的,因此我们要进行白盒测试。

白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。

1. 白盒的测试用例需要做到 Ø 保证一个模块中的所有独立路径至少被使用一次;

Ø 对所有逻辑值均需测试 true 和 false;

Ø 在上下边界及可操作范围内运行所有循环;

Ø 检查内部数据结构以确保其有效性。

2. 白盒测试的目的 通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;
在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。

3. 白盒测试的特点 依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。

4. 白盒测试的实施步骤 1)
测试计划阶段:根据需求说明书,制定测试进度。

2)
测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例。

3)
测试执行阶段:输入测试用例,得到测试结果。

4)
测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。

5. 白盒测试的方法 总体上分为静态方法和动态方法两大类。

Ø 静态分析:是一种不通过执行程序而进行测试的技术。静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。

Ø 动态分析:主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后 , 对软件系统行为的分析。动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。下面要介绍的六种覆盖测试方法属于动态分析方法。

6. 白盒测试的优缺点 Ø 优点:迫使测试人员去仔细思考软件的实现;
可以检测代码中的每条分支和路径;
揭示隐藏在代码中的错误;
对代码的测试比较彻底;
最优化 Ø 缺点:费用昂贵;
无法检测代码中遗漏的路径和数据敏感性错误;
不验证规格的正确性。

1.2. 白盒测试基本技术 1.2.1. 控制流图 1.2.1.1. 定义 程序流程图是软件开发过程中进行详细设计时,表示模块内部逻辑的一个常用的、也非常有效的图示法。程序流程图详细地反映了程序内部控制流的处理和转移过程,它一般是进行模块编码的参考依据。在程序流程图中,通常拥有很多种图示元素,例如,“矩形框”表示一个计算处理过程,而“菱形框”表示一个判断条件等。通常测试人员为某个程序模块做白盒测试过程中,在做与路径相关的各种分析的时候,这些非常细节的信息往往是不太重要。因此,为了更清晰突出地显示出程序的控制结构,反映控制流的转移过程,一种简化了的程序流程图便出现了,就是程序的控制流图。在控制流图中一般只有两种简单的图示符号:节点和控制流。

1)
节点。以标有编号的圆圈表示。它一般代表了程序流程图中矩形框所表示的处理、以及领形框所表示的判定条件,以及两条活多条节点的汇合点等。一个节点就是一个基本的程序块,它可以是一个单独的语句(如if条件判断语句,或循环语句),也可以是多个顺序执行的语句块。

2)
控制流。以带箭头的弧线表示,用来连接相关的两个节点。它与程序流程图中的控制流所表示的意义是一致的,都是知识了程序控制的转移过程。为了便于处理,每个控制流也可以标有名字,这是继就相当于向图中的边。每条边必须要终止某一节点。

1.2.1.2. 控制流图的基本控制结构的图形符号 在控制流图中,其基本的控制结构所对应的图形符号如下图。

(a)顺序结构 (b)IF ELSE结构 (c)多分支结构 (d)循环结构 1.2.2. 六种覆盖方法 首先为了下文的举例描述方便,这里先给出一张程序流程图。

1. 语句覆盖 1)
主要特点:语句覆盖是最起码的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。

2)
用例设计:(如果此时将A路径上的语句1—〉T去掉,那么用例如下)
   X  Y  路径  1  50  50  OBDE  2  90  70  OBCE 3)
优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。

4)
缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。在本例中去掉了语句1—〉T去掉,那么就少了一条测试路径。在if结构中若源代码没有给出else后面的执行分支,那么语句覆盖测试就不会考虑这种情况。但是我们不能排除这种以外的分支不会被执行,而往往这种错误会经常出现。再如,在Do-While结构中,语句覆盖执行其中某一个条件分支。那么显然,语句覆盖对于多分支的逻辑运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。

2. 判定覆盖 1)
主要特点:判定覆盖又称为分支覆盖,它要求设计足够多的测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。每个判断的取真、取假至少执行一次。

2)
用例设计:
   X  Y  路径  1  90  90  OAE  2  50  50  OBDE  3  90  70  OBCE 3)
优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。

4)
缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。

3. 条件覆盖 1)
主要特点:条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。

2)
用例设计:
   X  Y  路径  1  90  70 OBC  2 40   OBD 3)
优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。

4)
缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。

4. 判定/条件覆盖 1)
主要特点:设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。

2)
用例设计:
   X  Y  路径  1  90  90  OAE  2  50  50  OBDE  3  90  70  OBCE  4  70  90  OBCE 3)
优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。

4)
缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况。

5. 组合覆盖 1)
 主要特点:要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。

2)
用例设计:
   X  Y  路径  1  90  90  OAE  2  90  70  OBCE  3  90  30  OBDE  4  70  90  OBCE  5  30  90  OBDE  6  70  70  OBDE  7  50  50  OBDE 3)
优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。

4)
缺点:线性地增加了测试用例的数量。

6. 路径覆盖 1)
主要特点:设计足够的测试用例,覆盖程序中所有可能的路径。

2)
用例设计:
   X  Y  路径  1  90  90  OAE  2  50  50  OBDE  3  90  70  OBCE  4  70  90  OBCE 3)
优点:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。

4)
缺点:由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。而在有些情况下,一些执行路径是不可能被执行的,如:
If  (!A)B++;

  If  (!A)D--;

这两个语句实际只包括了2条执行路径,即A为真或假时候对B和D的处理,真或假不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦 仅供参考

推荐访问:白盒测试用例设计方法