转自http://blog.csdn.net/myself_way/article/details/11108057 感谢@Greling
- Concepts -
model checking是一项重要的自动验证技术。由Clarke和Emerson以及Quielle和Sifakis在1981年提出。主要通过显式状态搜索或隐式不动点计算来验证有穷状态并发系统的模态/命题性质。模型检测可以自动执行。
基本思想是,用状态迁移系统(s)和模态逻辑公式(F)来代表系统,前者表示系统的行为,后者描述系统的性质。将”系统是否具有某项性质“转化为数学问题”S是否是F的一个模型“。对有穷状态系统,这个问题是可判定的。
模型检测在应用时需要考虑效率和内存空间需求,为了符合分析的要求,需要研究减少模型本身或验证的复杂性。主要方法有不同类型的抽象、程序切片、模型分解、验证性质的分解等。
(1)抽象:省略系统的细节,用尽可能少的状态刻画系统的行为。
(2)程序切片:去掉程序中不影响要验证性质的语句减少模型的复杂性
(3)模型分解:将一个模型分解成若干部分,分别验证,降低复杂性。
(4)验证性质的分解:同(3)。
- Automatic Tools -
这个很少涉及,摘自网上的总结:
(1)SMV,检测有限状态系统(FSS)是否满足CTL(计算树逻辑)
(2)SPIN,检测FSS是否满足PLTL(命题线性时序逻辑)
(3)CWB,检测系统间的等价关系、PRE-ORDER关系及系统是否满足mu演算公式。
(4)Murphi.
模态逻辑的三种常用逻辑是CTL,PLTL和mu演算,各自有相应的模态算子(算子指的是某个分支、所有分支、下一状态)。mu演算可作为模型检测的一般框架。
- Usage -
模型检测的优点在于能用自动搜索代替手动证明来解决验证的问题。
模型检验包括三部分:
(1)基于命题的时态逻辑的规范语言;
(2)表示被验证系统的编码状态机的方法;
(3)验证算法,对状态空间的智能搜索确定规范的真假。
应用在软件测试领域,模型检验的一大优势是,如果规范没有被发现,模型检验能够给出反例,可以用来debug程序或系统。
- Limitation -
模型检验中的状态爆炸是一个要解决的问题,通常状态数会随着进程数指数级增长。
抽象映射是简化模型检验的另一种方法,但,尽管抽象系统能够保持具体系统的许多性质,也会丢失某些性质。
- Conclusion -
算法设计三步:(1)需求规范;(2)建立可执行的系统模型;(3)开发可扩展的算法。
算法目标:(1)检验需求是否满足;(2)需求不满足时进行诊断。