彻底的测试和“无错误”的成本

时间:2010-03-11 16:15:26

标签: theory

当我学习软件开发时,我们被告知实际上“无bug”软件在数学上是不可能的,除了最琐碎的程序。对于一个数学思想来说,很容易看出基本的东西,如可能的输入数量和平台的可变性,使得不仅不可能(在实际时间内),而且对于任何缺乏核能发电的经济上都是愚蠢的。

然而,我不断听到商界人士滔滔不绝地说:“据了解,软件将没有错误,如果并非所有错误都应该免费修复”。我通常回答“不,我们将修复在(x)周的UAT期间发现的任何错误”,其中x由合同定义。这导致了很多争论,并且对那些完全愿意承诺不可能的人失去了工作。

有没有人知道(或可以表达一个)一个很好的解释为什么“无bug”不现实或标准 - 你的普通中层经理可以理解?

3 个答案:

答案 0 :(得分:1)

请参阅Gödel's incompleteness theorems

另见Hilbert's second problem

另见Turing: Halting Problem

另请参阅有关人数的MSFT财务报告以及Microsoft产品中针对Microsoft产品的错误报告,以获得较少的智能解释。

答案 1 :(得分:1)

也许解释它的最好方法是阅读一些真正的,真的,真的不想要软件错误的地方,以及他们对此做些什么。 (您可以使用NASA作为示例,并首先启动Ariane 5作为此类软件错误发生的示例。)中层管理人员倾向于与故事和并行示例相关。

或者,找出一方承诺不可能的交易会发生什么(并且它比开发人员更喜欢发生)。如果你能证明它对受诺者来说并不好,那可能会有所帮助。

此外,您可能希望进入您需要的最低限度,以承诺无错误的软件,这将是一个真正全面的规范。

答案 2 :(得分:1)

我经常通过简单解释大多数程序是如何成为状态引擎,并且一旦开始与现实世界接口,可能的输入状态的数量迅速达到无穷大:因为此处的用户正在输入X虽然Y发生在那里,但是在Z的50ms内发生了......等等。

当然,大约五分钟后,他们的眼睛往往会釉面。但至少我试过了。