Java白盒测试

Java的代码测试分为以下两大类:

  • 静态测试方法
    不执行程序的测试方法。
    主要用于测试文档和代码(文档)
  • 动态测试方法
    通过运行程序来发现缺陷的测试方法
    黑盒测试方法
    白盒测试方法

今天我们主要讲解一下动态测试中的白盒测试。

白盒测试

白盒测试,也称结构测试、逻辑驱动测试、基于程序本身的测试、程序员测试。

java 测试函数 java测试方法有哪些_白盒测试


白盒测试需要完全了解程序结构和处理过程,因此要在程序开发完成之后,按照程序内部逻辑测试程序,检验程序中每条通路是否按照预定要求工作。

它与我们熟悉的黑盒测试有很大不同:

java 测试函数 java测试方法有哪些_用例_02

测试思路

  • 逻辑覆盖法
    语句覆盖
    判定覆盖
    条件覆盖
    判定-条件覆盖
    条件组合覆盖
  • 路径覆盖法
  • 测试难度:路径覆盖>条件覆盖>语句覆盖
  • 测试效果:路径覆盖>条件覆盖>语句覆盖

测试步骤

  1. 获得需求、获得/画出程序流程图/算法图
    如:
  2. 画出控制流图
    一定要根据需求和算法流程图来画图,目的是弄清预期结果。
    如:

选择覆盖方法设计测试用例

1.语句覆盖法

  • 目标
    程序中的每个可执行语句至少被执行一次
  • 度量(覆盖度)
    被执行的语句数/所有可能的语句数
    被执行的路径数/所有可能的路径数
  • 用例
    a=2,b=1,c=6
    用例对语句的覆盖率:100%
    用例对路径的覆盖率:25%
  • 语句覆盖能发现语句错误
  • 语句覆盖不能发现逻辑错误/条件错误

2.分支/判定覆盖

  • 目标
    程序中的每个判定的取真分支和取假分支至少执行一次
  • 用例
    a=2,b=1,c=6
    a=-1,b=1,c=1
    用例对语句的覆盖率:100%
    用例对路径的覆盖率:50%
  • 分支/判定覆盖能发现逻辑错误
  • 分支/判定覆盖不能发现组合判断中的条件错误

3.条件覆盖

  • 目标
    程序每个判定中每个条件的可能取值至少满足一次
  • 未必比 C1 更全面
  • 不能发现逻辑错误
  • 用例

4.判定-条件覆盖

  • 目标
    每个条件中的所有可能取值至少执行一次,同时,每个判定的可能结果至少执行一次。
  • 可能会导致某些条件掩盖了另一些条件。
  • 用例

5.条件组合覆盖/多条件覆盖

  • 目标
    每个判定中的所有的条件取值组合至少执行一次。
  • 比条件覆盖全面
  • 用例

6.路径覆盖

  • 目标
    用例覆盖程序中的所有可能的执行路径。
  • 不切实际
    因为涉及到相当长和几乎无穷尽的路径数。
    任何可能的循环在程序段中都被视为是可能的路径。
  • 用例
  • 路径覆盖优化
    McCabe 的基路径方法

    从源节点到汇节点的线性独立路径数(根据圈复杂度计算)
    * V(G)=e-n+2p=10-7+2=5
    * 当规模很小时,我们可以直观地标识独立路径。
    以下给出的是用节点/边序列表示的路径:
    * p1:A,B,C,G/1,4,9
    * p2:A,B,C,B,C, G/1,4,3,4,9
    * p3:A,B,E,F,G/1,5,8,10
    * p4:A,D,E,F,G/2,6,8,10
    * p5:A,D,F,G/2,7,10
  • 案例

测试工具

  • 内存资源泄漏检查工具
    如 Numega 中的 BounceChecker,Rational 的 Purify 等
  • 代码覆盖率检查工具
    如 Numega 的 TrueCoverage , Rational 的 PureCoverage , TeleLogic 公司的 Logiscope
  • 代码性能检查工具
    如 Logiscope 和 Macabe 等
  • 静态源代码分析工具
    类似于编译器,能够检查源代码,发现违反编程语言语法规则和大量定义编程规范的代码