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