本文主要是介绍Model Checking 杂谈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在计算机科学中,模型检测或property checking是检查一个系统的有限状态模型是否满足给定的specification(a.k.a. correctness)的方法。这通常与硬件或软件系统相关联,其中规范包含活动性要求(例如,避免活动锁)和安全性要求(例如,避免表示系统崩溃的状态)。
为了从算法上解决这个问题,系统模型及其规范都用某种精确的数学语言来表述。 为此,将问题表述为逻辑上的任务,即检查结构是否满足给定的逻辑公式。 该一般概念适用于多种逻辑以及适当的结构。 一个简单的模型检查问题包括验证给定结构是否满足命题逻辑中的公式。
overview
当两个描述不相等时,将使用属性检查进行验证。在改进过程中,对规范进行了补充,这些细节在高级规范中是不必要的。由于这是不可能的,因此无需根据原始规范验证新引入的属性。因此,严格的双向等效检查放宽到单向属性检查。实现或设计被视为电路的模型,而规格是模型必须满足的特性。
已经开发出一类重要的模型检查方法,用于检查硬件和软件设计的模型,其中规范是由时间逻辑公式给出的。时态逻辑规范的开拓性工作是由Amir Pnueli完成的,他因“将时态逻辑引入计算科学中的先天性工作”而获得1996年的图灵奖。模型检查始于C和D的A,B和A的开创性工作。Clarke,Emerson和Sifakis分享了2007年的图灵奖,以表彰他们在模型检查领域的开拓和发展。[8] [9]
模型检查最常用于硬件设计。对于软件来说,由于不确定性(请参阅可计算性理论),该方法不能完全采用算法。通常,它可能无法证明或反证给定的属性。在嵌入式系统硬件中,有可能通过UML活动图[10]或控制解释的Petri网[11]来验证交付的规范。
通常以工业硬件描述语言或专用语言的源代码描述形式给出该结构。这样的程序对应于有限状态机(FSM),即,由节点(或顶点)和边组成的有向图。一组原子命题与每个节点相关联,通常说明哪些存储元素是一个。节点表示系统的状态,边缘表示可能更改状态的可能过渡,而原子命题表示执行点所具有的基本属性。
形式上,问题可以表述为:给定所需的属性(表示为时间逻辑公式p以及具有初始状态s的结构M),确定是否{\ displaystyle M,s \ models p} M,s \ models p 。如果M是有限的(如在硬件中一样),则模型检查将简化为图形搜索。
symbolic model checking
略
Techniques
模型检查工具面临着状态空间的组合爆炸,通常被称为状态爆炸问题,必须解决该问题才能解决大多数实际问题。有几种方法可以解决此问题。
-
Symbolic algorithm避免了显式构造有限状态机(FSM)的图结构。相反,它们使用量化命题逻辑中的公式隐式表示图形。 Ken McMillan [14]的工作以及诸如CUDD [15]和BuDDy。[16]之类的开源BDD操作库的开发使二进制决策图(BDD)的使用变得流行。
-
Bounded model checking algorithms将FSM展开固定的步数k,并检查是否可以在k步或更短的步长发现属性冲突。这通常涉及将受限模型编码为SAT的实例。可以用越来越大的k值重复该过程,直到排除了所有可能的违规(参见迭代加深深度优先搜索)。
-
Abstraction试图首先通过简化系统来证明系统的属性。简化的系统通常不满足与原始系统完全相同的属性,因此可能需要refinement过程。通常,人们要求抽象是合理的(抽象证明的属性对原始系统是正确的);但是,有时抽象是不完整的(并非原始系统的所有真实属性都对抽象是正确的)。抽象的一个示例是忽略非布尔变量的值,而仅考虑布尔变量和程序的控制流。这样的抽象虽然看起来可能很粗糙,但实际上足以证明例如。互斥的属性。
-
反例指导的抽象细化(CEGAR)开始检查粗略(即不精确)的抽象并对其进行迭代细化。当发现违规(即反例)时,该工具会对其进行可行性分析(即违规是真实的还是抽象不完全的结果?)。如果违反(反例)是真实的,则将其报告给用户。如果不是,则使用不可行证明来完善抽象,然后再次开始检查。
最初开发模型检查工具来推理离散状态系统的逻辑正确性,但此后已扩展为处理实时且有限形式的混合系统。
First-order logic
略
Tools
Here is a partial list of model-checking tools that have a Wikipedia page:
- Alloy (Alloy Analyzer)
- BLAST (Berkeley Lazy Abstraction Software Verification Tool)
- CADP (Construction and Analysis of Distributed Processes) a toolbox for the design of communication protocols and distributed systems
- CPAchecker: an open-source software model checker for C programs, based on the CPA framework
- ECLAIR: a platform for the automatic analysis, verification, testing, and transformation of C and C++ programs
- FDR2: a model checker for verifying real-time systems modelled and specified as CSP Processes
- ISP code level verifier for MPI programs
- Java Pathfinder: an open-source model checker for Java programs
- Libdmc: a framework for distributed model checking
- mCRL2 Toolset, Boost Software License, Based on ACP
- NuSMV: a new symbolic model checker
- PAT: an enhanced simulator, model checker and refinement checker for concurrent and real-time systems
- Prism: a probabilistic symbolic model checker
- Roméo: an integrated tool environment for modelling, simulation, and verification of real-time systems modelled as parametric, time, and stopwatch Petri nets
- SPIN: a general tool for verifying the correctness of distributed software models in a rigorous and mostly automated fashion
- TAPAs: a tool for the analysis of process algebra
- TAPAAL: an integrated tool environment for modelling, validation, and verification of Timed-Arc Petri Nets
- TLA+ model checker by Leslie Lamport
- UPPAAL: an integrated tool environment for modelling, validation, and verification of real-time systems modelled as networks of timed automata
- Zing[19] – experimental tool from Microsoft to validate state models of software at various levels: high-level protocol descriptions, work-flow specifications, web services, device drivers, and protocols in the core of the operating system. Zing is currently being used for developing drivers for Windows.
这篇关于Model Checking 杂谈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!