目录
1 软件测试概述
1.1 软件测试的目标
测试是为了发现程序中的错误而执行程序的过程;好的测试方案是尽可能发现迄 今为止尚未发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错 误的测试。
1.2 测试准则
所有测试都应该能追溯到用户需求;(测试用例设计依据)
应该远在测试开始之前就制定出测试计划;
80%的错误很可能是由 20%的模块造成。
应该从“小规模”测试开始,并逐步进行“大规模”测试;
穷举测试是不可能的;
为了达到最佳的测试效果,可以找独立的第三方公司进行测试工作。
1.3 测试方法
静态测试工具-PMD
静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过 程、接口等来检查程序的正确性。
PMD:是一个代码检查工具,它用于分析 Java 源代码,找出潜在的问题:(在 Eclipse 中 安装 PMD 插件)
1)潜在的 bug:空的 try/catch/finally/switch 语句
2)未使用的代码:未使用的局部变量、参数、私有方法等
3)可选的代码:String/StringBuffer 的滥用
4)复杂的表达式:不必须的 if 语句、可以使用 while 循环完成的 for 循环
5)重复的代码:拷贝/粘贴代码意味着拷贝/粘贴 bug
2 测试方案
所谓测试方案包括具体的测试目的(例如,预定要测试的具体功能),应该输入 的测试数据和预期的结果。通常又把测试数据和预期的输出结果称为测试用例。 (记忆)
通常测试目的包含如下几种:
看测试对象是否满足需求规格说明书和概要设计,满足目前的要求及未来的发展 需求。
看测试对象是否满足概要设计说明书。
看测试对象业务流程的合理性和正确性(详细设计说明书)。
看测试对象的功能、兼容、性能、稳定性、安全测试,是否满足要求。
3 白盒测试
对单一模块测试内部结构是否和详细设计相同,使用黑盒法还是白盒法?如何设 计测试用例?
使用白盒测试法 常见白盒测试法:逻辑覆盖法、基本路径覆盖法
3.1 语句覆盖
选择足够的测试用例,使得程序中每一条可执行语句至少被执行一次。
分析:执行语句 sacbed
测试用例:A=2,B=0,X=任意实数 覆盖 sacbed
语句覆盖特点:语句覆盖对程序的逻辑覆盖很少。语句覆盖不能走过所有支路。 语句覆盖是很弱的逻辑覆盖标准。
3.2 判定覆盖
含义:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该 至少执行一次。
所有判定分支:
(1) a 点判定为 T
(2) a 点判定为 F
(3) b 点判定为 T
(4) b 点判定为 F
测试用例:
Ⅰ. 满足(aTbF)
A=3,B=0,X=3
覆盖 sacbd 结果: x=1
Ⅱ. 满足(aFbT)
A=2,B=1,X=1
覆盖 sabed 结果: x
或者:
Ⅰ. 满足(aTbT)
A=2,B=0,X=4
覆盖 sacbed
Ⅱ. 满足(aFbF)
A=1,B=1,X=1
覆盖 sab
特点:比语句覆盖强,但对程序逻辑的覆盖程度仍不高。
3.3 条件覆盖
含义:不仅每个语句至少执行一次,判定表达式中的每个条件都取到各种可能的 结果。
所有条件:
(1)A>1 (2)A≤1
(3)B=0 (4)B≠0
(5)A=2 (6)A≠2
(7)X>1 (8)X≤1
如果语言具备短路特性,本测试用例,需要增加,测试 B !=0 和 X>1 的用例 A=3,B=1,X=6
条件覆盖特点:条件覆盖通常比判定覆盖强,因为它使每个条件都取到了两个不 同的结果,判定覆盖却只关心整个判定表达式的值。但也有反例,如第二组测试 用例。判定覆盖不一定包含条件覆盖,条件覆盖也不一