软件测试的原则

软件测试是实施软件或应用程序以识别缺陷或错误的过程。对于应用程序或软件的测试,我们需要遵循一些原则来使我们的产品没有缺陷,这也有助于测试工程师花费他们的精力和时间来测试软件。在本节中,我们将学习软件测试的七个基本原则。

软件测试的七个基本原则如下:

  1. 测试证明软件存在缺陷(Testing shows the presence of defects)
  2. 穷尽测试是不可能的(Exhaustive Testing is not possible)
  3. 尽早介入测试(Early Testing)
  4. 缺陷具有集群性(Defect Clustering)
  5. 杀虫剂悖论(Pesticide Paradox)
  6. 测试是上下文相关的(Testing is context-dependent)
  7. 无错误谬论(Absence of errors fallacy)

这七个原则是由 Rex Black 、 Erick Van Veenendaal 和 Dorothy Graham 的研究 “软件测试基础”(ISTQB 认证)总结的,可以作为大多数测试项目的核心指南。

接下来,让我们一一看看七种不同的软件测试原则。

原则一:测试证明软件存在缺陷

需要特别指出,在进行测试时,我们只能确定应用程序或软件有任何错误或缺陷,并不是说测试没有发现错误就说明软件没有缺陷。

进行测试的主要目的是借助各种方法和测试技术来识别未知错误的数量,因为整个测试应该可以追溯到客户需求,这意味着要找到可能导致产品无法满足客户需求的任何缺陷。

通过对任何应用程序进行测试,我们可以减少错误的数量,这并不意味着应用程序没有缺陷。即便对产品或者应用程序进行了多次的、比较彻底的测试都没有发现任何缺陷,执行多种类型的测试时也似乎没有任何错误,这也不能证明软件是 100% 完美的。比如,在生产服务器部署的时候,终端用户仍然有可能会遇到那些在测试过程中没有发现的 bug。

原则二:穷尽测试是不可能的

有时,在整个实际测试过程中,使用输入数据的有效和无效组合来测试所有模块及其功能是非常困难的,因为它需要大量的时间。一般来说,项目周期里永远不可能允许测试团队在项目中进行大量有效的组合测试。

因此,不要执行详尽的测试,因为它需要无限的决心,而且大多数艰苦的工作都是不成功的。所以在实际测试中,我们通常会根据模块的重要性完成这种类型的变化,因为产品时间表不允许我们执行这种类型的测试场景。

随着系统承载业务越来越多,代码规模也越来越庞大,算法逻辑越来越复杂。要让测试完全覆盖是不可能的,通常可以采取以下策略进行测试:

  • 精准测试:改动什么测什么;
  • 二八原则:只测重点;
  • 等价划分;
  • ……

原则三:尽早介入测试

这里的早期测试(Early Testing)意味着所有的测试活动都应该在软件开发生命周期的需求分析阶段的早期阶段开始,以识别缺陷,因为如果我们在早期阶段发现错误,它就会在最初阶段得到修复,与在测试过程的未来阶段确定的情况相比,这可能会使我们花费更少。

为了进行测试,我们需要需求规范文件;因此,如果需求定义不正确,则可以直接修复,而不是在另一个阶段(可能是开发阶段)修复它们。

原则四:缺陷具有集群性

缺陷聚类(Defect Clustering)定义了在整个测试过程中,我们可以检测到与少量模块相关的错误数量。我们有多种原因,例如模块可能很复杂;编码部分可能很复杂,等等。

这些类型的软件或应用程序将遵循 Pareto 原则(帕累托法则,又称二八法则),该原则表明我们可以大约识别到,80% 的 Bug 是由 20% 的模块引起的。借助这一点,测试团队可以利用自己的知识和经验,确定要测试的潜在模块进行重点测试,从而有助于节省时间和精力。但这种方法也有缺点,一旦测试人员只专注于一小块区域,他们可能会错过其他区域的错误。

原则五:杀虫剂悖论

杀虫剂悖论(Pesticide paradox)描述的是:当我们反复使用相同的杀虫剂的时候,会有少量害虫产生免疫而存活下来,使得杀虫剂失去药效。同样,在软件测试中,如果我们在特定时间内一次又一次地执行同一组测试用例,那么这些测试将无法发现软件或应用程序中的新错误。

杀虫剂悖论是指测试人员一直使用相同的方法或手段去重复测试,这些测试只适用于一些有限的模块,而不是整个系统。这种测试可能很难发现 bug,甚至无法发现 bug。因此,为了涵盖项目的各个部分,它要求测试团队经常审查和更新测试用例

原则六:测试是上下文相关的

测试是一个上下文相关的,因为不同的产品或项目都有自己的需求、特性和功能。例如电子商务网站、商业网站等,需要根据应用程序的上下文来完成特定的测试,这样才有意义。

原则七:无错误谬论

一旦应用程序经过全面测试并且在发布前没有发现任何错误,那么我们可以说该应用程序 99% 没有错误。但是,当应用程序在不正确的需求上进行测试时,发现缺陷并在给定的时间段内修复它们可能无济于事,因为测试是在错误的规范上进行的,这不适用于客户的要求。

没有错误谬误(Absence of errors fallacy)意味着,软件测试不仅仅是为了找出 Bug 而存在的活动,还需要确认软件是否满足用户的期望和需求,如果产品不能满足用户的需求,即使没有出现任何缺陷,这个产品也是失败的。

“没有错误” 并不是我们的追求,以终为始,快速给客户创造最大的价值才是我们孜孜不倦的追求。