一、概念
白盒测试也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。它可以形象得用下图表示:
二、白盒测试方法应该遵循的原则
白盒测试主要是检查程序内部的逻辑结构,也就是对所有逻辑路径进行测试,是一种穷举路径的测试方法。
三、测试用例设计方法
白盒测试常用的测试用例方法有:
1、逻辑覆盖
以程序的内部逻辑结构为基础,主要分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖。
语句覆盖
:语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次。判定覆盖
:判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。条件覆盖
:条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。判定-条件覆盖
:判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。条件组合覆盖
:条件组合覆盖的基本思想是设计足够的测试用例,使得程序中每个判断的所有可能的条件取值组合都至少出现一次。2、路径覆盖
它主要是再程序控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
路径覆盖
:路径覆盖就是设计所有的测试用例,来覆盖程序中的所有可能的执行路径。
路径覆盖这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。
3、基本路径测试法
(1)在白盒测试中还有一种非常重要的测试方法就是基本路径测试法。
它的一般流程是:
(2)下面简单介绍一下基本路径测试方法中的相关概念
控制流图
如下图所示:
其中(a)图示一个含有两个出口判断和循环的程序流程图,我们把它简化成(b)的形式,称这种简化了的程序流程图叫做控制流图。
圈复杂度(v(G))
圈复杂度:代码逻辑复杂度的度量,提供了被测代码的路径数量。复杂度越高,出错的概率越大。
它的计算方式一般有三种:
圈复杂度为几就有几条独立执行路径
四、举例说明各个测试方法的应用
1、逻辑覆盖
我们要进行设计测试用例的图如下:
(1)语句覆盖:
只需设计一个测试用例:
a=2,b=1,c=6;
(2)判定覆盖
它覆盖了判定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、功能图法
每个程序的功能通常由静态说明和动态说明组成:
功能图法就是为了解决动态说明问题的一种测试用例的设计方法