自动化软件测试的投资回报率解析

  存在许多不成功的AST尝试和与实施AST相关的神话,再加上缺乏足够的AST知识,导致人们提出这样的问题:“我们为什么要自动化?”第4章阐明并澄清了一些围绕在AST周围的神话以及应该避免的陷阱,但在这里我们首先重点回答“为什么要自动化?”

  我们通过描述软件测试中一些关键实践以及许多可以自动化的方面来阐释“为什么要自动化”。这里讨论的目的是在“为什么要AST”的上下文中培养读者关于软件测试关键实践的意识。

  AST是一种解决当今许多软件测试人员面临的挑战的关键技术。经验表明,如果正确实施了AST,则可以达到以下效果:

  1. 减少软件测试时间和成本。

  2. 改进软件质量。

  3. 通过扩大测试覆盖率加强手动测试工作,取代手动测试这种日常进行的体力活。

  4. 进行手动测试难以完成的(比如,在特定条件下检测内存泄漏、并发测试以及性能测试)、需要更高的成本、更长的计划、更高的质量(对于任何软件开发和产品来说又都是重要的参数)的任务。

  我们将讨论AST如何对每一条作出贡献。

  当今测试软件面临的挑战

  如今测试软件所面临的主要挑战是:客户希望更多的软件功能,交付得更快,造价更便宜,同时,他们希望软件的质量即使不能超过他们的期望,但至少要达到预期。

  这意味着软件测试团队责任重大,更多的功能意味着每个要测试的软件基线更大、更复杂,这意味着要为每次交付执行更多的测试用例。对其他程序而言,更快的交付意味着只能花更少的时间来测试每次交付,而且每年要交付很多次,也许是三四个产品版本而不是一两个。更多的交付也意味着更多的回归测试周期。降低成本意味着用较少的工作时间完成测试。简而言之,是更多的软件需要测试,测试的频度更高,但是投入更少的人员。

  NIST发表一个报告开篇指出:

  降低软件开发成本并提高软件质量是美国软件行业的重要目标。但是,支持美国计算机经济所需的基础软件的复杂性正在以惊人的速度增长。软件产品的规模不再仅以几千行代码来衡量,取而代之是数以百万行计的代码。这种日益增加的复杂性以及平均市场生命周期的减少使许多软件产品高度关注软件质量。

  这份报告还估算每年软件导致的错误将消耗美国经济约59.5亿美元,他们预计通过改进测试可以减少三分之一的费用。

  在过去几十年里,商业硬件和软件技术在开发实践、理论和工具方面取得重大进展,这些实践、理论和工具具备了全新的、有创造性的、价格合理的和及时处理信息的能力。此外,通过复用标准接口、通用架构框架和通用功能库可以进一步减少时间和成本。

  因为要减少开发时间,但又要创建可复用的组件,所以高效并且彻底地测试软件变得前所未有的重要。开发人员进行的软件测试不再是只在软件开发的初期使用,以后不再使用了。因为要递增地构建软件,以及更高的软件复用能力,那么在产品交付之前,软件测试需要执行并复用许多次。而在过去,复杂处理系统的成本主要消耗在硬件上,结果导致传统的测试方法学主要围绕硬件演化。然而,当今开发的大多数系统主要建立在不太昂贵的硬件上,而主要的日程和成本都坚定不移地以软件开发和测试为中心。

  现今的系统主要以软件为基础,随着复杂性的增加,越来越依赖于成功复用在其他程序中开发的软件。尽管开发实践和工具已经取得进展,但加快系统交付速度和减少成本的目标不能单纯依靠更快地编写软件,而没有相应的测试实践和工具。