Language agnostic 给定程序中bug的上限

Language agnostic 给定程序中bug的上限,language-agnostic,Language Agnostic,给定程序中包含的bug数量是否有上限?如果已知指令的数量,可以说程序包含的bug不能超过'n'个吗?例如,以下函数可以包含多少bug double calcInterest(double amount) { return -O.07 / amount; } 解析器将计算函数中的四个项,我可以计算这些错误: 错误的数字语法 错误的利率(业务需求错误) 计算错误(应为乘法) 势能除零 显然,给定有限数量的指令,bug的数量并不是无限的。或者,可以说函数接受2^64个输入,其中有多少个产

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

double calcInterest(double amount) {
    return -O.07 / amount;
}
解析器将计算函数中的四个项,我可以计算这些错误:

  • 错误的数字语法
  • 错误的利率(业务需求错误)
  • 计算错误(应为乘法)
  • 势能除零

显然,给定有限数量的指令,bug的数量并不是无限的。或者,可以说函数接受2^64个输入,其中有多少个产生正确的输出。然而,有什么方法可以正式证明一个上限吗?

错误有一个理论上限,但是对于所有的程序来说,除了最琐碎的程序,几乎不可能计算,尽管它确实让老的大学尝试过。

指令的数量与程序是否做了用户希望它做的事情无关。我的意思是,看看GCC如何平衡我的支票簿。车都出来了,下来就没用了

这一切都取决于您如何定义“bug”

如果将一个程序定义为从某个输入到某个输出的函数,将一个规范定义为该函数的定义,将一个bug定义为给定输入上与规范的任何输出差异,那么是,可以想象,你会有无数个bug,但这是一个毫无用处的bug定义。

编程法则:

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

上限是程序可以处于的状态数。因为这个数字在实际机器上是有限的,所以你可以将状态从1到n进行编号。对于每个状态,您可以标记该状态是否为bug。是的,但即使是一个拥有16字节内存的小程序也有2^128个状态,分析所有不同状态的问题也很棘手。

取决于如何计算bug,这让我说“不,没有限制”。我不知道你的情况,但我可以轻松地在同一行代码中编写几个bug。例如,这个Java代码中有多少bug-P

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

只要一个bug就足够了。

如果bug是“程序未满足的需求”,那么bug的数量没有限制(每行或其他),因为需求的数量没有限制

print "hello world"

可能包含一百万个bug。它不会创造一个粉红色的大象。我将此程序无法满足的其他要求交给读者处理。

这个理论极限是什么?对于您的琐碎应用程序,您的意思是什么?让我们看看…有多少种方式会出现语法错误?一条指令定义为什么?嗯,有很多超过2^8=256个双精度!?您使用“Bug”和“Error”作为等效词。解析器捕获到语法错误、运行时错误(bug)、逻辑错误(bug)和设计错误(缺陷)。我的定义可能与你的不匹配,但问题和检测问题的方式不同。什么时候、什么时候算是bug会改变你问题的最终答案。对于您的问题,至少有两个单独的“bug”计数,源代码中的错误甚至会阻止程序运行,而在运行时发生的错误,“它不会造成粉红大象”。如果文件末尾没有换行符,则可能会创建一个粉红色的大象(未定义的行为)。