0

我正在开发一个程序,该程序应该能够判断我在计算机上运行的任何程序是否会崩溃。

大概可以读入机器代码,构建潜在代码路径的模型,测试每个代码路径在标准和边界条件下的行为,绘制导致未处理异常的条件,然后追溯所有这些步骤以生成所需的设置输入和条件,将触发要采用的异常代码路径。这就像使用模糊调试器,只是更有条理。当然这是很多工作,但它应该在现代硬件上很快完成。

一位同事说,我正在尝试做的事情基本上是不可能的。这对我来说似乎有点极端。鉴于技术发展的摩尔定律曲线,遥不可及的计算能力最终将成为现实——最终。说这样的事情永远不可能发生似乎有点言过其实。

为什么不能这样做?

4

3 回答 3

2

这是一个程序:

accept integer i greater than 2
loop with k from 2 to 2*i
  is k prime?
    is 2*i-k prime?
      exit safely
end loop
do something nasty.

如果你跟踪导致这个程序做一些讨厌的事情的输入,你已经解决了哥德巴赫猜想。您可以在获得诺贝尔奖的同时获得菲尔兹奖章。

这就是说,可以验证某些程序没有做任何令人讨厌的事情。我和其他人正在开发一个框架,您可以在其中使用各种技术来做到这一点。一些例子:

此压缩库可能会出现输入大小为 20、输出大小为 40 的内存错误,但现在不会了。

这种二分搜索可能会失败,但现在不会了。

于 2011-05-12T14:52:02.557 回答
0

这是计算和数学的圣杯之一,被称为Entscheidungsproblem。你不会解决它。这两个领域最聪明的人花了很多年的时间,并证明它无法解决。当 nbt 和 Pascal Cuoq 说这样做会赢得诺贝尔奖和菲尔兹奖时,他们是认真的。

于 2011-10-14T13:11:57.473 回答
0

大概可以读入机器代码,构建潜在代码路径的模型,测试每个代码路径在标准和边界条件下的行为,绘制导致未处理异常的条件,然后追溯所有这些步骤以生成所需的设置输入和条件,将触发要采用的异常代码路径。

是的,这是有可能的,尽管人们理论是这样说的。有多家公司销售的产品完全符合您的描述,其中包括 Vericode、Coverity、Fortify、Klocwork 和 Grammatech。

理论说这是不可能的,假设你想要一些既健全完整的东西。在实践中,只要您的误报率不是太差,您可以同时降低完整性和完整性,并且您将有客户排队购买您的产品。

一旦你放弃了健全性和完整性,不可能定理就不再成立,你就会进入一些更像工程而不是理论的东西。

编辑,对于亚历克斯的评论,
我将采取数学家的捷径,并说由于最初的问题是“有可能”,因此存在几种可行的商业产品证明答案是“是的”。使用商业软件可能产生的经济依赖超出了原始问题的范围。

于 2011-10-15T08:16:16.013 回答