【软件测试】软件测试方法之黑盒测试方法和白盒测试

白盒测试方法

一、概念
白盒测试也称结构测试逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。它可以形象得用下图表示:
在这里插入图片描述

二、白盒测试方法应该遵循的原则

  • 保证一个模块中的所有独立路径至少被测试一次。
  • 所有逻辑值均需测试真 (true) 和假 (false) 两种情况。
  • 检查程序的内部数据结构,保证其结构的有效性。
  • 在上下边界及可操作范围内运行所有循环。

白盒测试主要是检查程序内部的逻辑结构,也就是对所有逻辑路径进行测试,是一种穷举路径的测试方法。
三、测试用例设计方法
白盒测试常用的测试用例方法有:
1、逻辑覆盖
以程序的内部逻辑结构为基础,主要分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖。

  • 语句覆盖:语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次。
  • 判定覆盖:判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。
  • 条件覆盖:条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。
  • 判定-条件覆盖:判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。
  • 条件组合覆盖:条件组合覆盖的基本思想是设计足够的测试用例,使得程序中每个判断的所有可能的条件取值组合都至少出现一次。

2、路径覆盖
它主要是再程序控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
路径覆盖:路径覆盖就是设计所有的测试用例,来覆盖程序中的所有可能的执行路径。
路径覆盖这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。
3、基本路径测试法
(1)在白盒测试中还有一种非常重要的测试方法就是基本路径测试法。
它的一般流程是:

  • 依据代码绘制流程图
  • 确定流程图的圈复杂度
  • 确定线性独立路径的基本集合
  • 设计测试用例覆盖每条基本路径

(2)下面简单介绍一下基本路径测试方法中的相关概念
控制流图
如下图所示:
在这里插入图片描述

其中(a)图示一个含有两个出口判断和循环的程序流程图,我们把它简化成(b)的形式,称这种简化了的程序流程图叫做控制流图。
圈复杂度(v(G))
圈复杂度:代码逻辑复杂度的度量,提供了被测代码的路径数量。复杂度越高,出错的概率越大。
在这里插入图片描述
它的计算方式一般有三种:

  • V(G) = 区域数量(由节点、连线包围的区域,包括图形外部区域)
  • V(G) = 连线数量 - 节点数量 + 2
  • V(G) =简单可预测节点数量 + 1

圈复杂度为几就有几条独立执行路径
四、举例说明各个测试方法的应用
1、逻辑覆盖
我们要进行设计测试用例的图如下:

在这里插入图片描述

(1)语句覆盖:
只需设计一个测试用例:
a=2,b=1,c=6;
(2)判定覆盖

  • a=2,b=1 ,c=6可覆盖判断M的Y分支和判断N的Y分支;
  • a=-2,b=-1 ,c=-3可覆盖判断M的N分支和判断N的N分支 。
    这两组测试用例可覆盖所有判定的真假分支。
    (3)判定覆盖
    判断M表达式:
    设条件 a>0
    取真记为 T1
    取假记为 F1
    条件 b>0
    取真 记为 T2
    取假 记为 F2
    判断Q表达式:
    设条件 a>1
    取真 记为 T3
    取假 记为 F3
    条件 c>1
    取真 记为 T4
    取假 记为 F4
    设计的测试用例如下表所示:

在这里插入图片描述
它覆盖了判定M的N分支和判断N的Y分支
(4)判定-条件覆盖
设计的测试用例如下表所示:
在这里插入图片描述
(5)条件组合覆盖
设计的测试用例如下表所示:
在这里插入图片描述

2、路径覆盖
设计的测试用例如下所示:
在这里插入图片描述

黑盒测试方法

一、概念
黑盒测试也称功能测试数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用。
在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性,,如下图所示:
在这里插入图片描述
二、黑盒测试的测试方法
1、等价类划分
等价类划分是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。等价类是某个输入域的子集,在该子集中每个输入数据的作用是等效的。
它主要分为:

  • 有效等价类: 是有意义的、合理的输入数据构成的集合。可检查程序是否实现了规格说明中所规定的功能和性能。
  • 无效等价类:与有效等价类的定义恰巧相反。

2、边界值分析法
(1)定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
(2)与等价划分的区别

  • 边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
  • 边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。

(3)设计方法:

  • 确定边界情况(输入或输出等价类的边界)
  • 选取正好等于、刚刚大于或刚刚小于边界值作为测试数据

3、判定表方法
(1)定义:在实际应用中,许多输入是由多个因素构成,而不是单一因素,这时就需要多因素组合分析。对于多因素,有时可以直接对输入条件进行组合设计,不需要进行因果分析,即直接采用判定表方法。
一个判定表由“条件和活动”两部分组成,也就是列出了一个测试活动执行所需的条件组合,所有可能的条件组合定义了一系列的选择,而测试活动需要考虑每一个选择。
(2)判定表方法步骤

  • 列出所有的条件桩和动作桩;
  • 填入条件项;
  • 填入动作项,制定初始判定表;
  • 简化、合并相似规则或者相同动作

4、因果图法
(1)定义:多种输入条件的组合,产生多种结果设计测试用例。
(2)设计方法:

  • 分析软件规格说明文档描述的哪些是原因(输入条件),哪些是结果(输出条件),给每个原因和结果赋予一个标识符。
  • 找出原因与结果,原因与原因之间的对应关系,划出因果图
  • 在因果图上标上哪些不可能发生的因果关系,表明约束或限制条件
  • 根据因果图,创建判定表,将复杂的逻辑关系和多种条件组合很具体明确的表示出来
  • 把判定表的每一列作为依据设计测试用例。

条件与条件之间又存在以下约束关系
在这里插入图片描述

5、场景法
(1)定义:用例场景用来描述流经用例的路径,从用例开始到结束遍历这条路径上所有基本流和备选流。
(2)基本流和备选流如下图所示
在这里插入图片描述

直黑线表示基本流是经过用例的最简单的路径。
备选流用不同的彩色表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中(如1和3);也可能起源于另一个备选流(如2),或者终止用例而不再重新加入到某个流(如2和4)。
6、正交实验法
7、功能图法
每个程序的功能通常由静态说明和动态说明组成:

  • 静态说明描述了输入条件和输出条件之间的对应关系
  • 动态说明描述了输入数据的次序或者转移的次序。

功能图法就是为了解决动态说明问题的一种测试用例的设计方法