Any Program Has an Unlimited Number of Bugs

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

这听起来可能有些奇怪,但我会证明它:无论一个软件有多么庞大或稳定,它都有一个无限数量的尚未发现的错误。无论我们已经找到并修复了多少个错误,仍然有太多错误无法计算。

让我们以这个简单的Java方法作为例子,它计算两个整数的和:

这个简单的程序有着无限数量的错误。

为了证明这一说法,我们只需要将两个想法结合在一起:

  • 其次,需求和期望可以是功能性的和非功能性的。后者包括性能、弹性、健壮性、可维护性,以及其他几十个非功能性需求

显然,这个方程中至少有两个不明确的变量:用户期望和可维护性。我们无法精确地确定它们,这就是为什么它们产生的错误数量没有限制。

当然,整个错误集合中只有一个非常有限的子集对业务有实际影响。程序中存在的大部分错误即使在发布给用户之后也可能仍然存在—没有人会发现它们,或者它们对用户体验造成的损害微不足道。

最后,请再仔细看一下sum()方法。这些错误怎么样:

  • 它没有任何用户文档。

  • 它的设计不是面向对象的。

  • 它不能求和三个或更多的数字

  • 它不会对double类型的数字求和。

  • 它不会自动将 long 转换为 int

  • 如果一个参数为零,它不会跳过执行。

  • 它不会缓存先前的计算结果

  • 没有日志记录

  • Checkstyle 会抱怨,因为参数没有使用 final 关键字。

我相信你可以找到更多。

顺便说一下,Glenford J. Myers在他的书《软件测试的艺术》中也说了类似的话,我之前对此进行了评论。

Bill Hetzel,《软件测试完全指南》(1993年):“对测试的一些理论限制:‘我们永远无法确定规范是否正确’,‘没有测试系统能够识别出每个正确的程序’,‘我们永远无法确定一个测试系统是否正确’。这些理论限制告诉我们,我们永远无法确定我们对程序应该做什么(期望或所需的结果)有完全的理解,而且无论我们付出多少时间和精力,我们构建的任何测试系统都会有失败的可能性。简而言之,无论我们付出多少时间和精力,我们都无法达到100%的信心!”

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 05:17

sixnines availability badge   GitHub stars