您对软件模型检查的体验是什么?

时间:2008-08-24 16:08:47

标签: algorithm correctness formal-methods formal-verification model-checking

  • 您使用了哪些类型的应用程序model checking
  • 您使用的模型检查工具是什么?
  • 您如何总结您的技术经验,特别是评估其提供更高质量软件的有效性?

在我学习的过程中,我有机会使用Spin,这引起了我对实际模型检查进行了多少以及组织从中获取多少价值的好奇心。在我的工作经历中,我从事过业务应用程序,其中(自然)没有考虑将正式验证应用于逻辑。我真的很想了解SO人员的模型检查经验和关于这个主题的想法。模型检查是否会成为我们工具箱中应该使用的更广泛使用的开发实践?

5 个答案:

答案 0 :(得分:3)

我刚刚完成了一个关于模型检查的课程,我们使用的大工具是SpinSMV。我们最终使用它们检查常见同步问题的属性,我发现SMV更容易使用。

尽管这些工具使用起来很有趣,但我认为当你将它们与动态强制执行程序约束的东西结合起来时它们真的很闪耀(这样可以更容易地验证关于程序的“有用”的东西)。我们最终得到Spring WebFlow framework,它使用XML编写类似状态机的文件,指定哪些网页可以转换到哪些网页,并使用SMV能够对所述应用程序执行验证({{3} }})。

为了回答你的上一个问题,我认为模型检查绝对有用,但我更倾向于使用单元测试作为一种让我对提供最终产品感到放心的技巧。

答案 1 :(得分:2)

我们在教学,系统设计和系统开发中使用了几个模型检查器。我们的工具箱包括SPIN,UPPAL,Java Pathfinder,PVS和Bogor。每个都有自己的优点和缺点。所有人都发现人类无法发现的模型存在问题。它们的可用性各不相同,但大多数都是按钮自动化。

何时使用模型检查器?我会说,每当你描述一个必须具有(或没有)特定属性的模型时,它就会比一些概念更大。任何认为他们能够描述和理解更大或更复杂的东西的人都在欺骗自己。

答案 2 :(得分:2)

  

您使用了哪些类型的应用程序进行模型检查?

我们使用Java Path Finder模型检查器来验证某些安全性(死锁,竞争条件)和时间属性(使用线性时态逻辑来指定它们)。它支持Java(字节码)上的经典断言(如NotNull) - 用于程序模型检查。

  

您使用了什么型号检查工具?

我们使用Java Path Finder(用于学术目的)。它是NASA最初开发的开源软件。

  

您如何总结您的技术经验,特别是评估其提供更高质量软件的有效性?

程序模型检查存在状态空间爆炸(内存和磁盘使用)的主要问题。但是,有各种各样的技术可以减少问题,处理大型工件,例如部分降阶,抽象,对称性降低等。

答案 3 :(得分:0)

我使用SPIN在PLC软件中找到并发问题。它发现了一种意想不到的竞争条件,通过检查或测试很难找到。

顺便问一下,有没有“傻瓜旋转”一书?我必须从“SPIN模型检查器”一书和各种在线教程中学习它。

答案 4 :(得分:0)

我在大学期间对这个问题做了一些研究,扩展了State Exploring Assembly Model Checker

我们使用虚拟机来遍历程序的每个可能的路径/状态,使用A *和一些启发式,具体取决于错误的类型(死锁,I / O错误,......)

它受到Java Pathfinder的启发,并且与C ++代码一起使用。 (GCC可以编译的所有内容)

但是根据我们的经验,由于GUI相关的问题,创建初始测试环境所需的工作以及巨大的硬件要求,这种技术很快就不会在业务应用中使用。 (由于巨大的状态空间,你需要大量的RAM和磁盘空间)