给定程序中包含的错误数量是否有上限?如果已知指令的数量,那么可以说程序不能包含超过'n'的错误吗?例如,以下函数可以包含多少个错误?
double calcInterest(double amount) {
return -O.07 / amount;
}
解析器会计算函数中的四个术语,我可以计算这些错误:
显然,给定有限数量的指令,错误的数量不是无限的。或者,可以说该函数接受2 ^ 64个输入,其中有多少产生正确的输出。但是,有没有办法正式证明上限?
答案 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)
如果虫子足够重要的话,只需要一个。