浅谈模型检测技术

什么是模型检测

美国的Clarke和Emerson以及法国的Quielle和Sifakis在1981年分别提出模型检测(Model Checking)的最初概念,他们开发了一套用于判断硬件和软件的设计模型是否满足规范的方法。主要通过显式状态搜索隐式不动点计算来验证有穷状态并发系统的模态/命题性质。当系统检测失败时,还可以用它确定问题存在的位置。

由于模型检测可以自动执行,并能在系统不满足性质时提供反例路径,因此在工业界比演绎证明更受推崇。尽管限制在有穷系统上是一个缺点,但模型检查可以应用于许多非常重要的系统,如硬件控制器通信协议都是有穷状态系统。很多情况下,可以把模型检测和各种抽象与归纳原则结合起来验证非有穷状态系统(如实时系统)。

模型检测的基本思想是用状态迁移系统(S)表示系统的行为,用模态逻辑公式(F)描述系统的性质。这样“系统是否具有所期望的性质”就转化为数学问题“状态迁移系统S是否是公式F的一个模型?”,用公式表示为S╞F。对有穷状态系统,这个问题是可判定的,即可以用计算机程序在有限时间内自动确定。

模型检测方法

模型检测应用过程中,需要考虑增加效率和减少内存空间需求,此外,需要研究减少模型本身或验证性质的复杂性,主要方法有不同类型的抽象、程序切片、模型分解、验证性质的分解等。

  1. 抽象的基本方法是抽掉系统中的细节、用尽可能少的状态来刻画系统的动作过程。如下图所示,把一堆状态简化为一个状态。原来系统称为具体系统,而简化了的系统称为抽象系统。抽象系统能够保持具体系统的许多性质,但也会丢失某些性质。


    浅谈模型检测技术_第1张图片
    抽象图例
  2. 程序切片的基本十法界将程序中不影响所要验证的性质的语句去年以减少模型的复杂性。
  3. 模型分解的方法是将一个模型分解成若干部分,或者分别验证,或者提供一个较好的组合方法以降低验证的复杂性。同样,一个需要验证的性质也有可能分解成若干部分,然后分别验证。

算法的设计验证

  1. 需求规范
    需求规范可以用两种方式给定
    • 基于状态的需求,用转换系统指明系统的可观察行为
    • 基于特性的需求,用说明性的方式

需求规范的无矛盾性和完全性仍然是一个问题。现在还缺乏某些外部需求的形式化,例如安全性(隐私),可重构性(不相互干扰的构造性),服务质量(抖动度)等。

  1. 建立可执行的系统模型
    可执行的模型要求忠实性,即模型必须与被验证系统保持语义,而且必须是可检验的。这样,你验证的特性才能在实际系统中实现。为了避错和纠错,模型应该能从系统描述自动产生。对于硬件验证,此事从RTL描述出发,比较容易完成。而对于软件,可能只能在抽象级别上进行。扩展UML进行调度和资源管理无法提供严格的定时特性。而扩展硬件描述语言,像SystemC和TLM由于缺乏形式语义只能用于模拟。

  2. 开发可扩展的算法
    面对大系统,一个解决办法是根据特定的语义范畴开发抽象技术,即在特定语义领域求解不动点方程。另一个解决办法是面对复杂性,用分而治之的途径。过去,特性被分成两部分:阶段-结论。现在,我们需要组合验证的理论,把验证组合起来,形成一个大的验证。


软件的模型检测

随着软件规模的越来越大,使得人工的验证软件变得越来越难,而且人工的验证本身是否可靠也是一个很大的问题。因此,软件模型检测研究的目的就是扩展自动验证技术的应用领域,将其用于程序的推理,无论是在程序处理的验证还是性质的验证上,都要最大程度的增加自动化的比例。
软件模型检测是用来在程序执行过程中证明性质正确性的技术。它源于逻辑和定理证明,这两者都给出了基础问题形式化的基本概念,并提供了分析逻辑问题的算法流程。

你可能感兴趣的:(浅谈模型检测技术)