给定程序中错误的上限

时间:2009-06-26 03:05:52

标签: language-agnostic

给定程序中包含的错误数量是否有上限?如果已知指令的数量,那么可以说程序不能包含超过'n'的错误吗?例如,以下函数可以包含多少个错误?

double calcInterest(double amount) {
    return -O.07 / amount;
}

解析器会计算函数中的四个术语,我可以计算这些错误:

  • 错误的数字语法
  • 错误的利率(业务要求错误)
  • 错误计算(应该相乘)
  • 潜在除以零

显然,给定有限数量的指令,错误的数量不是无限的。或者,可以说该函数接受2 ^ 64个输入,其中有多少产生正确的输出。但是,有没有办法正式证明上限?

8 个答案:

答案 0 :(得分:4)

如果错误“程序未满足要求”,则错误数量(每行或其他)没有限制,因为对要求数量没有限制

print "hello world"

可能包含一百万个错误。它不会造成粉红色的大象。我留给读者提出999999这个程序不满意的其他要求。

答案 1 :(得分:2)

指令数与程序是否完成用户想要的操作无关。我的意思是,看看GCC如何平衡我的支票簿。越野车越来越没用了!

答案 2 :(得分:1)

这完全取决于你如何定义'bug'。

如果将程序定义为从某个输入到某个输出的函数,并将规范定义为该函数的定义,并将错误视为给定输入上的规范输出的任何差异,那么可以想象有无数的bug - 但这对bug来说有点无用。

答案 3 :(得分:1)

上限是程序可以处于的状态数。由于此数字在实际机器上是有限的,因此可以将状态从1编号为n。对于每个州,您可以标记此状态是否为错误。所以是的,但是即使是一个有16字节内存的小程序也有2 ^ 128个状态,分析所有不同状态的问题是难以处理的。

答案 4 :(得分:0)

对于错误有一个理论上限,但除了最琐碎的程序之外,它几乎不可能计算,尽管engines such as Pex确实给它了旧的大学尝试。

答案 5 :(得分:0)

编程法则:

"If You will find all compile-time bugs, then n logical ones are still hidden, waiting to surprise You at run-time."

答案 6 :(得分:0)

取决于你如何计算错误,这让我说“不,不限制”。我不了解你,但我可以轻松在同一行代码中编写几个错误。例如,这个Java代码中有多少个错误? :-P

public int addTwoNumbers(int x, String y)
{{
    z == x + y;
    return y;
}

答案 7 :(得分:0)

如果虫子足够重要的话,只需要一个。