有个软件要测试。有一组测试人员。预算中有一些钱。时间表中有一些时间。我们现在就开始。测试人员试图破坏产品:发现错误、报告错误、在必要时与程序员沟通,并尽最大努力找出问题所在。最终他们停下来说“我们完成了”。他们怎么知道什么时候停止?什么时候有足够的测试?很明显——当 没有更多的错误 并且产品可以发货时!如果你这样想,我有个坏消息要告诉你。你 根本就错了 。
glenford myers 在他的伟大著作《软件测试的艺术》中完美地解释了所有这些。我在这里再总结一下。
首先,“测试是为了 发现错误 而执行程序的过程”(第 6 页)。注意,本意是找错误。不是为了证明产品工作正常,而是为了证明它 没有按预期工作 。任何测试人员的目标都是展示产品如何损坏,它如何在不同的输入下失败,它如何在压力下崩溃,它如何误解用户,它如何不满足要求。这就是为什么博士。迈尔斯称测试是“一个破坏性的,甚至是虐待狂的过程”(第 6 页)。这是大多数测试人员不理解的。
第二,任何软件都有 无限多的错误 。博士迈尔斯说,“你无法通过测试程序来保证它没有错误”(第 10 页)并且“找到程序中的所有错误是不切实际的,通常是不可能的”(第 8 页)。这也是大多数测试人员不理解的地方。他们认为错误数量有限,他们必须找到并收工。没有限制!在任何软件产品中,错误的数量都是无限的。无论产品多小或大、复杂或简单、新旧。
考虑到这些公理,让我们尝试决定测试人员何时必须停止。据博士说meyers,“测试程序时最难回答的问题之一是确定何时停止,因为无法知道刚刚检测到的错误是否是最后一个剩余的错误”(第 135 页)。
无论我们给他们多少时间,他们都无法找到所有错误。他们有动力找到越来越多的人。但在某个时候我们必须做出决定并发布产品。看起来我们会发布它,里面有错误?确实是的!我们将发布一个 充满错误的 产品。唯一的问题是已经发现了多少,以及它们有多重要。
让我们把它们放在一起。错误太多,无法在合理的时间内找到所有错误。然而,我们迟早要发布一个新版本。与此同时,测试人员总是会告诉我们那里有更多的错误,他们可以找到更多,只是需要更多时间。该怎么办?
博士迈耶斯说,“既然测试的目标是发现错误,为什么不让完成标准检测到一些预定义的错误数量呢?” (第 136 页)。事实上,我们应该预测有多少错误刚好可以找到,以便对产品已准备好交付有足够的 信心 。然后,发布它,有意识地了解它仍然有无限数量的尚未发现的错误。
object thinking 中的 david west 说“软件被发布以供使用,不是在已知它是正确的时候,而是在发现错误的速度减慢到管理层认为可以接受的速度时”(第 13 页)。
因此,退出测试过程的唯一有效标准是发现 预测 数量的错误。