白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。“白盒”法全面了解程序内部逻辑结构,对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。


  
白盒测试

  白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化分别是:
  1.语句覆盖每条语句至少执行一次;
  2.判定覆盖每个判定的每个分支至少执行一次;
  3.条件覆盖每个判定的每个条件应取到各种可能的值;
  4.判定/条件覆盖同时满足判定覆盖条件覆盖;
  5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次;
  6.路径覆盖使程序中每一条可能的路径至少执行一次;
  语句覆盖
  IF CONDITION THEN
  DO_SOMETHING;
  ELSE
  DO_SOMETHING_ELSE;
  END IF;
  优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
  缺点:由于这种测试方法仅仅针对程序逻辑中显示存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。
  判定覆盖
  IF CONDITION THEN
  DO_SOMETHING;
  ELSE
  DO_SOMETHING_ELSE;
  END IF;
  优点:判定覆盖比语句覆盖要多几乎一倍的测试路径, 当然也具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性, 无须细分每个判定可以得到测试用例。
  缺点:大部分的判定语句是由多个逻辑条件组合而成 (如,判定语句中包含AND、OR、CASE),若仅仅判断其整个终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
  条件覆盖
  例:(1)IF (A>1) AND (B=0) THEN X=X/A
     (2)IF (A=2) OR (X>1) THEN X=X+1


  
实例

  优点:条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。
  缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
  判定-条件覆盖


  
实例

  优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。
  缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况。
  条件组合覆盖


  
XY取值

  优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。
  缺点:线性地增加了测试用例的数量。
  路径覆盖


  
XY取值

  优点:可以对程序进行彻底的测试,比前面五种的覆盖面都广。
  缺点:由于路径覆盖需要对所有可能的路径进行测试 (包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。
  白盒测试的优缺点
  优点:1. 针对程序内部进行覆盖测试,覆盖率较高 2. 能较早期的发现程序中的缺陷
  缺点:1. 设计过于复杂 2. 无法验证程序的外部特性 3. 需求变更时,付出的代价较大


  
白盒测试覆盖测试