软件测试---白盒测试
静态测试主要是在程序设计阶段进行测试,而动态测试主要是在程序运行阶段进行测试,通过运行程序发现错
误。
在平常的软件/系统测试,大多数都是默认为动态测试。为了发现更多的错误,需要运行一些有效的方法。同测
试任何产品一样一般有两种方法:一是如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能
正常使用;此方法属于黑盒测试法。二是如果知道产品内部工作过程,可以通过测试来检验产品内部结构及处理过程
是否按照规格说明书的规定正常运行。此方法书白盒测试法。
这两种方法都属于动态测试法,今天我就来走进白盒测试法,看看它的内部消息。
白盒测试法也被世人称为结构测试或逻辑驱动测试。测试人员把程序视为一个透明的白盒子,需了解程序的内部
结构和处理过程,以检查处理过程的细节为基础,要求对程序的结构特性做到一定的程度覆盖,对程序中的所有逻辑
路径进行测试,并检验内部控制结构是否哦有错,确定实际的运行状态与预期的状态是否一致。
由于白盒测试是以程序的结构为依据的,所以被测对象基本上是源程序,以程序的内部逻辑结构为基础设计测试用
例。白盒测试可以用以下几种方法:
咱们就从上往下逐一解说一下吧!
一。逻辑覆盖
逻辑覆盖是一组覆盖方法的总称。这组覆盖方法的测试过程逐渐进行越来越完整的通路测试。测试数据覆盖程序
逻辑的 程序可以划分为不同的等级。
1.语句覆盖
基本思想:设计足够的测试用例,运行被测程序,是程序的每条可执行语句至少执行一次。
例如,程序流程图是一个被测模块的处理算法。
其中有两个判断,每个判断都包含复合条件的逻辑表达式,为了满足语句覆盖,程序额执行路径应该是sacbed。选择
测试用例为A=2,B=0,X=4(实际上X可以是任意实数)
2.判定覆盖
基本思想:设计足够的测试用例,运行被测试程序,不仅使得被测程序中每条语句至少执行一次,而且每个判断表达
式至少获得一次“真”值或“假”值,从而使得程序的每一个分支至少都通过一次,因此,判定覆盖也称为分支覆
盖。
例如,选择下面两组测试数据,就可以做到判定覆盖:
1)A=3,B=0,X=3 (覆盖sacbd)
2)A=2,B=1,X=2(覆盖sabed)
对于多分支的判定,判定覆盖要使每一个判定表达式获得每一种可能的值来测试。
3.条件覆盖
基本思想:设计足够多的测试用例,不仅每条语句至少执行一次,而且使得判定表达式中的每个条件都能获得各种
可能的结果。
例如,上图的例子共有2个判定表达式,每个表达式中有两个条件,共有4个条件:
A>1,B=0,A=2,X>1
要选择足够多的数据,使得上图在a点和b点两判定表达式中分别有下述各种结果出现:
a点:A>1,A<=1,B=0,B!=0
b点:A=2,A!=2,X>1,X<=1
才能达到条件覆盖的标准。
为满足上述要求,选择以下的测试数据。
1)A=2,B=0,X=4(满足A>1,B=0,A=2和X>1的条件,执行路径,sacbed)
2)A=1,B=1,X=1(满足A<=1,B!=0,A!=2和X<=1的条件,执行路径sabd)
可以看出,以上两组测试用例不但满足了条件覆盖标准,而且同时满足了判定覆盖标准在这种情况下,条件覆盖比判
定覆盖强,但也有例外的情况。
4.判断--条件覆盖
判断--条件覆盖实际上是前两种方法结合起来的一种设计方法,它是判定和条件覆盖的交集,即设计足够的测试用例
使得判定表达式中的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。
例如:对于上图的的例子,下述两组测试数据满足判定条件覆盖标准:
1)A=2,B=0,X=4
2)A=2,B=1,X=1
这两组测试数据也就是为了满足条件覆盖标准最初选取的两组数据。因此,有时判定条件覆盖也并不比条件覆盖更强
的。
5.条件组合覆盖
条件组合覆盖是比较强的覆盖。基本思想:设计足够的测试用例,使得每个判定表达式中条件的各种可能组合都至少
出现一次。
例如,上图的例子,两个判定表达式共有4个条件,有8种可能的条件组合:
1)A>1,B=0 2)A>1,B!=0
3)A<=1,B=0 4)A<-1,B!=0
5)A=2,X>1 6)A=2,X<=1
7)X!-2,X>1 8)A!=2,X<=1
要覆盖8种条件组合,并不一定要设计8组测试数据,下面4组测试用例就可以满足条件组合覆盖标准
1)A=2,B=0,X=4(针对1)5)两种组合,执行路径sacbed)
2)A=2,B=1,X=1(针对2)6)两种组合,执行路径sabed)
3)A=1,B=0,X=2(针对3)7)两种组合,执行路径sabed)
4)A=1,B=1,X=1(针对4)8)两种组合,执行路径sabd)
6.路径覆盖
基本思路:设计所有的测试用例,来覆盖程序中所有可能的执行路径。
例如,上图的例子,选择以下测试用例覆盖程序中的4条路径
1)A=1,B=1,X=1(执行路径sabd)
2)A=1,B=1,X=2(执行路径sabed)
3)A=3,B=0,X=3(执行路径sacbd)
4)A=2,B=0,X=4(执行路径sacbed)
可以看出,路径覆盖没有覆盖所有的条件组合覆盖。
二。循环覆盖
循环是程序 的主要逻辑结构,企图覆盖含有循环结构的所有路径同样是不可能的,但是可以通过限制循环次数来
测试,对单循环和嵌套循环分别来考虑。
1.单循环
设m为可允许执行循环的最大次数,可以从4个方面考虑测试用例的设计
1)只执行循环0次
2)只执行循环1次
3)执行循环n次,n<m
4)执行循环m-1次,m次,m+1次
2.嵌套循环
步骤为:
1)对内循环进行单循环测试,此时置外循环为最小循环计数值
2)由内向外,进行下一层的循环测试
三。基本路径测试
上图的例子只有4条路径比较简单,但是在实际问题中,即使是一个不太复杂的程序路径也是一个很庞大的数
字,为了解决这一个难题。只好将覆盖的路径数压缩到一定范围内。而基本路径测试是在程序控制流程图的基础上,
通过分析控制结构的环路复杂性导出基本可执行路径集合,从而设计测试用例,设计出的测试用例保证这些路径至少
通过一次。
使用基本路径测试技术设计测试用例的步骤如下:
1)使用详细设定设计结果或源程序画出相应的程序图(流图)。程序图是程序流程图的抽象化,它是反映
控制流程图的有向图,其中小圆圈称为结点,代表程序流程图中每个处理符号。即矩形框,菱形框等,有箭头的连线
表示控制流向,称为程序图中的边或路径。
2)计算程序图G的环形复杂度V(G)
3)确定线性独立路径的基本集合