Java白盒测试
Java的代码测试分为以下两大类:
- 静态测试方法
不执行程序的测试方法。
主要用于测试文档和代码(文档) - 动态测试方法
通过运行程序来发现缺陷的测试方法
黑盒测试方法
白盒测试方法
今天我们主要讲解一下动态测试中的白盒测试。
白盒测试
白盒测试,也称结构测试、逻辑驱动测试、基于程序本身的测试、程序员测试。
白盒测试需要完全了解程序结构和处理过程,因此要在程序开发完成之后,按照程序内部逻辑测试程序,检验程序中每条通路是否按照预定要求工作。
它与我们熟悉的黑盒测试有很大不同:
测试思路
- 逻辑覆盖法
语句覆盖
判定覆盖
条件覆盖
判定-条件覆盖
条件组合覆盖 - 路径覆盖法
- 测试难度:路径覆盖>条件覆盖>语句覆盖
- 测试效果:路径覆盖>条件覆盖>语句覆盖
测试步骤
- 获得需求、获得/画出程序流程图/算法图
如: - 画出控制流图
一定要根据需求和算法流程图来画图,目的是弄清预期结果。
如:
选择覆盖方法设计测试用例
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 等 - 静态源代码分析工具
类似于编译器,能够检查源代码,发现违反编程语言语法规则和大量定义编程规范的代码