在过去的50年里,有很多关于测试原则的建议,它们为所有的测试提供了通用的指导。
- 测试显示缺陷的存在,而不是显示不存在缺陷
测试能够显示缺陷的存在,但是不能证明不存在缺陷。测试降低了软件中遗留的缺陷未被发现的可能性,但是即使没有发现缺陷,也不能证明软件是完全正确的。 - 穷尽测试是不可能的
除了一些非常小的场景,完全测试(输入和前置条件的所有组合)是不可能的。作为穷尽测试的替代,应该使用风险分析、测试技术和优先级划分来集中测试的工作量。 - 尽早测试以节约时间和成本
为了尽早发现缺陷,应该尽可能早的在软件开发生命周期的前期开始静态和动态测试。尽早测试有时称为前移。在软件生命周期的早期进行测试有助于减少或者消除高成本的变更(见3.1节)。 - 缺陷集群效应
在版本发布之前的测试中,少量的模块通常包含了大部分的缺陷,或者造成了大部分运行中的失效。在测试或者运行环境中,预测的缺陷集群和实际观察到的缺陷集群是风险分析的重要输入,从而可以集中测试工作量(就像原则2中提到的) - 杀虫剂悖论
如果反复执行同样的测试,最终这些测试将无法发现任何新的缺陷。为了检测新的缺陷,需要更新测试和测试数据,以及编写新的测试(测试不再能有效发现缺陷,就像杀虫剂在一段时间后也不再能有效杀虫一样)。有些情况下,杀虫剂悖论具有有益的结果,例如自动化的回归测试,它发现的回归的缺陷数量相对较少。 - 测试依赖于上下文
不同上下文需要进行不同的测试。例如:安全关键的工业控制软件的测试和电子商务移动APP的测试是不同的。另外一个例子是,敏捷项目中的测试和顺序生命周期项目中的测试也是不同的(见2.1节)。 - 没有错误的谬论
有些组织期望测试人员能够运行所有可能的测试并发现所有可能的缺陷,但是原则2和原则1 告诉我们这是不可能的。此外,期望仅仅通过发现并修复大量的缺陷来保证系统的成功是不现实的(即错误的理念)。例如:完整测试所有描述的需求并修复所有发现的缺陷,仍然会制造出难以使用的系统,它无法满足用户的需要和期望,或比其他竞争类产品更差。
关于这些例子和其他测试原则,可以参考Myers 2011、Kaner 2002和Weinberg 2008。