首页 > 代码库 > 白盒测试

白盒测试

白盒测试方法:

1 程序结构分析:

        程序的结构形式是白盒测试的主要依据。程序结构分析包括:       

        1、控制流分析:            

            •通过控制流图矩阵来表示程序的控制流程图。
 
            •分析程序的控制流是为了使编写出的程序有好的结构。

        对于程序结构提出以下4点基本要求,这些要求是写出的程序不应包含:

      ①  转向并不存在的标号;    

      ②  没有用的语句标号;

      ③  从程序入口进入后无法达到的语句;

      ④不能达到停机语句的语句。 

       目前主要是通过编译器和程序分析工具来实现程序控制流分析。

 

        2、数据流分析:              

    •数据流分析是分析程序中未定义变量的使用和未曾使用的变量定义。
 
    •目前通过编译器或程序分析工具通过数据流分析
 
    •利用数据流分析的结果可以进行代码编译优化。 

 

        3、信息流分析 :

    •目前信息流分析主要用在验证程序变量间信息的传输遵循保密要求。
 
    •信息流分析主要分析输出值跟输入值之间的影响关系。
 
    •程序的信息流关系,为软件开发和确认提供了十分有益的工具

2 逻辑覆盖:  

    1、语句覆盖:

      •结构测试是依据被测程序的逻辑结构设计测试用例,驱动被测程序运行完成的测试。
 
      •结构测试中的一个重要问题是,测试进行到什么地步就达到要求,可以结束测试了。这就是说需要给出结构测试的覆盖准则。
                

         为方便讨论,我们将结合一程序段加以说明各种逻辑覆盖则:

      IF (( A > 1) AND ( B = 0 ))THEN

             X = X / A

      IF (( A = 2) OR ( X > 1 ) THEN                  

             X = X + 1

  

       其中“AND”和“OR”是两个逻辑运算符。右图给出了它的流程图。a、b、c、d和e是控制流上的若干程序点。 

       该程序共有4条语句,其中2条条件判断语句,2条赋值语句。

         语句覆盖的含意是,在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次。

             对于上述程序段,选用的测试用例是:A=2,B=0,X=3  case1 

        则程序按路径a c e执行。这样该程序段的4个语句均得到执行,从而作到了语句覆盖。

    2、判定覆盖:

           按判定覆盖准则进行测试是指,设计若干测试用例,运行被侧程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。

                判定覆盖又称为分支覆盖。

            仍以上述程序段为例,若选用的两组测试用例是:   A=2,B=0,X=3;          A=1,B=0,X=1 

           则可分别执行路径ace和abd,从而使两个判断的4个分支c、e和b、d分别得到覆盖。

    3、条件覆盖:

       条件覆盖是指,设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。              

    4、判定-条件覆盖:

      判定-条件覆盖要求设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。

    5、路径覆盖:

      按路径覆盖要求进行测试是指,设计足够多测试用例,要求覆盖程序中所有可能的路径

    6、测试覆盖准则:

 1、FOSTER的ESTCA覆盖准则

          Foster 通过大量的实验确定了程序中谓词最容易出错的部分,得出了一套错误敏感测试用例分析ESTCA (Error Sensitive Test Cases Analysis)规则。事实上,规则十分简单:

    [规则1]  对于A rel B(rel可以是<, =和>)型的分支谓词,应适当地选择A与B的值,使得测试执行到该分支语句时,A<B, A=B和A>B的情况分别出现一次。

    [规则2]  对于A rel1 C(rel1可以是>或是<,A是变量,C是常量)型的分支谓词,当rel1为<时,应适当地选择A的值,使:

          A = C - M

        (M是距C最小的容器容许正数,若A和C均为整型时,M = 1)。同样,当rel1为>时,应适当地选择A,使:

          A = C + M

    [规则3]  对外部输入变量赋值,使其在每一测试用例中均有不同的值与符号,并与同一组测试用例中其它变量的值与符合不一致。

3 程序插装: 

    •程序插装方法简单地说是借助往被测程序中插入操作来实现测试目的的方法。
 
    •程序插装技术能够按用户的要求,获取程序的各种执行过程中的信息,成为测试工作的有效手段。

4 其他白盒测试方法简介:

    1、域测试:

      •域测试的“域”是指程序的输入空间。
      •输入空间又可分为不同的子空间,每一子空间对应一种不同的计算。
      •子空间的划分是由程序中分支语句中的谓词决定的。
      •域测试正是在分析输入域的基础上,选择适当的测试点以后进行测试的。
      •域测试有两个致命的弱点,一是为进行域测试对程序提出的限制过多,二是当程序存在很多路径时,所需的测试点也就很多。
 
    2、符号测试:
      •符号测试的基本思想是允许程序的输入不仅仅是具体的数值数据,而且包括符号值,这一方法也是因此而得名。
 
      •普通测试执行的是算术运算,符号测试则是执行代数运算。因此符号测试可以认为是普通测试的一个自然的扩充。
 
      •从符号测试方法使用来看,问题的关键在于开发出比传统的编译器功能更强,能够处理符号运算的编译器和解释器。
 
      •目前符号测试存在一些未得到圆满解决的问题,分别是

        1、分支问题

        2、二义性问题

        3、大程序问题

        3、Z路径覆盖

        4、程序变异

     3.Z路径覆盖:

      •完成路径测试的理想情况是做到路径覆盖,但路径太多。因此对循环机制进行简化,从而极大地减少路径的数量,使得覆盖这些有限的路径成为可能。我们称简化循环意义下的路径覆盖为Z路径覆盖。
 
      •对于程序中的所有路径可以用路径树来表示
 
      •设法遍历了所有的叶结点,那就得到了所有的路径,生成每个路径的测试用例,就可以做到Z路径覆盖测试。

    4.程序变异:

      •程序变异方法与前面提到的结构测试和功能测试都不一样,它是一种错误驱动测试。
 
      •错误驱动测试方法,是指该方法是针对某类特定程序错误的。
 
      •错误驱动测试主要有两种,即程序强变异和程序弱变异。
 

白盒测试