When Do You Stop Testing?

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

有一个需要测试的软件。有一个测试团队。预算中有一些资金。计划表中有一些时间。我们现在开始。测试人员努力试图破坏产品,寻找错误,报告错误,在必要时与程序员沟通,尽力找出问题。最终他们停止并说“我们完成了”。他们如何知道何时停止?什么时候测试足够了?很明显——当“没有更多的错误”并且可以发货的时候!如果你这样想,我有个坏消息告诉你。你是“根本错误”的。

Glenford Myers在他的精彩书籍《软件测试艺术》中对这一切进行了完美的解释。我在这里再次进行总结。

首先,“测试是执行程序的过程,目的是发现错误”(第6页)。请注意,目的是发现错误。不是为了证明产品运行正常,而是为了证明它不能按照预期工作。任何测试人员的目标都是展示产品如何被破坏,如何在不同的输入下失败,如何在压力下崩溃,如何误解用户,如何不能满足要求。这就是为什么Myers博士称测试为“一种破坏性、甚至是虐待性的过程”(第6页)。这是大多数测试人员不理解的。

其次,任何软件都有无限数量的错误。Myers博士说“你无法测试一个程序以保证它是无错误的”(第10页),还说“在一个程序中找到所有错误是不切实际的,通常是不可能的”(第8页)。这也是大多数测试人员不理解的。他们认为错误的数量是有限的,他们必须找到并结束一天的工作。实际上并没有限制!任何软件产品中的错误数量都是无限的。无论产品是多小还是多大,多复杂还是多简单,新的还是旧的。

在考虑这些公理时,让我们尝试决定测试人员何时应该停止。根据Myers博士的说法,“在测试程序时,一个最难回答的问题之一是确定何时停止,因为没有办法知道刚刚发现的错误是否是最后剩下的错误”(第135页)。

无论我们给予他们多少时间,他们都无法找到所有的错误。而且他们会有动力找到更多的错误。但是在某个时间点上,我们必须做出决定并发布产品。看起来我们将发布一个内部有错误的产品?是的,确实!我们将发布一个充满错误的产品。唯一的问题是已经找到了多少错误以及它们的严重程度。

让我们把这一切都放在一起。有太多错误无法在合理的时间内找到所有错误。然而,我们必须早点或晚点发布一个新版本。与此同时,测试人员将始终告诉我们那里还有更多错误,他们可以找到更多,只需要更多时间。该怎么办?

Myers博士说“既然测试的目标是发现错误,为什么不将完成标准设定为检测到一些预先定义数量的错误?”(第136页)。确实,我们应该预测需要找到多少错误才足够,以便具有可接受的信心水平,表明产品已经准备好进行交付。然后,有意识地发布它,明白它仍然有无限数量的未被发现的错误。

David West在他的书《对象思维》中说“软件发布是为了使用,而不是在被认为是正确的情况下发布,而是当发现错误的速度放慢到管理层认为可以接受的水平时”(第13页)。

因此,退出测试过程的唯一有效标准是发现了预测数量的错误。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-15 at 07:06

sixnines availability badge   GitHub stars