软件错误是否始终是逻辑矛盾?

时间:2019-11-22 20:42:24

标签: debugging automated-tests propositional-calculus

在研究命题逻辑时,我想到了以下问题:

软件错误是否总是程序和规范之间的逻辑矛盾?

请考虑以下示例: 我们的规范告诉我们“如果前提A和B是真实的,我们就采取行动C。”。

实现如下:

main ()
  if A then C
  if B then C

很明显,由于(考虑到上面的程序)“ 我们将前提A或前提B为真 ”,因此显然该规范不适合实现。

将我们的规范和程序表示为命题公式,我们得到以下方程式:

enter image description here

我们将规范转换为CNF并应用了分辨率演算,现在我们可以很容易地看到第一个子句与最后一个子句相矛盾。因此,此公式无法令人满意,因此我们的规范与我们的实现相矛盾。

现在是我的问题了(因为上面只是一个例子):

假设有完整的文档,对于每个软件错误都是如此吗?

,如果是这样的话:

如果将完整的规范转换为命题公式,是否可以使软件错误查找过程自动化?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:这称为“模型检查”,在像英特尔这样的大公司的计算机科学中很常见,以检查硬件是否实际在执行应做的事情。

最近,模型检查也开始在软件开发中越来越多地发生。例如,美国宇航局和微软正在广泛使用这项技术。

其基本形式如下:将规范转换为逻辑语句,然后编译器将给定的软件程序转换为树形结构,称为“ Kripke结构”。模型检查器将这些作为输入,并给出规范不完整的反例或发出真值。

https://en.wikipedia.org/wiki/Model_checking