为什么要编写/执行一个其结果永远不会被使用的测试?

软件测试 测试创建
2022-01-18 15:17:37

最近与朋友的一次讨论谈到了已执行但其结果从未使用过的测试的主题。为什么要麻烦运行它们?为什么还要写它们呢?

想到它们我们都同意是有用的——我们一直这样做,想出一个我们可以运行的测试,然后出于任何原因决定不运行它。

但实际上执行它——或者甚至写出来——似乎没那么有用。

我们中的一个人说“嗯,审计员可能想看看结果”,我回答说“那么你正在使用结果,不是吗?”

其他人说“你以后可能需要结果,所以你现在运行测试以防万一”,我回答说“YAGNI”(你不需要它)。

三法则规定至少有三个不同的理由来运行这样的测试;我试图弄清楚它们可能是什么。有任何想法吗?

4个回答

-您有运行 N 个测试或运行此特定测试(但不提供结果)的合同。

- 相当于阻挠议案的测试。您知道,如果您进行过多测试,您会发现更多错误并危及版本,因此您运行的测试毫无价值。

- 以便有人可以在零后果环境中学习系统。我不认为这是学习系统的最佳方式,但我已经看到这样做了。

这是一个非常奇怪的问题。当然,如果我们接受您的前提,即永远不会使用测试结果——任何人,无论出于何种原因,在任何时间点都不会使用——我们必须得出结论,运行测试毫无意义。

我不知道你为什么发布这个问题。希望我们得到什么样的答复?“您可能想要运行测试,因为现在是冬天,并且热量已经消失,保持温暖的唯一方法是在将手放在 CPU 上的同时运行此测试。” “不”,你会说,“CPU产生的热量是一种测试结果,我已经说过永远不会使用测试结果,所以你不能这样暖手。”

然后其他人会回答,“也许你正在与伊朗交战,你知道运行他们的核燃料后处理厂的计算机依靠电池供电,而这个测试会占用大量 CPU 时间,所以如果你在他们的计算机上运行测试,你可以耗尽电池,关闭他们的核后处理厂,阻止他们制造核武器,赢得战争。” 你会回答:“耗尽电池是一种测试结果,我告诉你测试结果永远不会被使用,所以你不能这样耗尽电池。”

也许您希望有人回答:“如果我想运行测试以产生结果怎么办?” 你会说,“不,如果你有产生结果的欲望,那么实际产生它们是满足这种欲望的一种方式,因此是一种使用结果的方式,我只是说你不能那样做。”

当然,可以想象你的前提是错误的。也许最好举一个您认为永远不会使用其结果的测试示例,并询问我们是否同意您的看法。

我认为这是一个进步:

  1. 你写一个测试是因为你有一个理由,如果这个理由不存在你就不会写它
  2. 您运行测试是因为您要获得结果,如果不需要此结果,您将不会运行它
  3. 您报告测试是因为需要数据,如果未报告此数据,那么您将不包括它

如果你有这三个中的任何一个,这是我用来确定测试的,那么你总是可以回到导致你编写、运行或报告测试的步骤。如果这些要求发生了变化,并且发生了这种情况,那么测试可能已经过时,但有时它是需要的。

执行从未报告过结果的测试总是伴随着探索性测试、bug bashes、dog-fooding 等。

探索时执行的许多测试至少由进行测试的人使用,除非该人只是简单地“猜测”。