一、模型检测的过程:
Modeling 建模 将设计转换为模型检测工具可接受的形式。
Specification 规约 使用时序逻辑等方法描述设计所必须满足的特性或者说设计需要验证的性质。
但模型检查提供了检查设计模型是否满足给定性质的方法,但是无法确定给定性质是否涵盖了系统应该满足的所有属性。
Verification 验证 对于之前建模所建立的模型和规约所描述的性质进行自动验证,如果模型不符合性质则给出相应的反例路径。
对于程序的不可判定性,可以通过控制其有界性来得到一个有限状态的系统,使得程序具有判定性。(将*系统划分为无穷个有界系统使程序具有可判定性)
模型检测方法:首先将要检验的系统转换为状态迁移图(即Kripke结构),规范被表示为时态逻辑公式,然后由模型检测器来决定
K
⊨
φ
K \models \varphi
K⊨φ是否为真,若不为真则模型检测器输出一个反例,这也意味着传统的软件测试检查错误相比验证(证明错误不存在)更快。
模型检测研究过程中出现的两个最主要的问题:
1.由于状态空间爆炸提出的算法改进。
2.建模的扩展。将模型检查框架扩展到Kripke结构和时态逻辑之外。Kripke结构是各种通信有限状态机的自然表示。但对于*迭代和递归、*并发和分布、进程创建和重新配置、*数据类型、实时和网络物理系统、概率计算、安全方面等,为了有效地抽象这些特征,我们需要将建模和规范框架扩展到克里普克结构和经典时态逻辑之外。一些扩展保持可判定性,通常通过构造有限状态抽象,这将建模挑战与算法挑战联系起来;另一些扩展牺牲了可判定性,但是保持了模型检查的能力,以便在系统设计过程的早期自动、系统地发现错误。
二、模型检测的优势:
1.验证的自动化,无需模型检测领域的专业人员辅助。
2.模型检测可以用于设计的各个阶段,既可以用于抽象的模型,也可以用于实现的代码。
3.适用于检验并发方面的错误。
模型检测相比于其他验证程序的方法最大的特点在于,它可以调试和分析现实世界中存在的所有可以建模为动态的状态转换系统的目标。
三、模型检测研究过程中出现的两个最主要的问题
模型检验研究的一个重要部分集中在处理状态空间爆炸的算法方法上,这些方法避免了显式构造完整的Kripke结构,之所以不构造完整的Kripke结构是因为由于每个状态表示给定的时间点下的全局系统状态,所以所有的状态本质上是待验证系统的内存快照(类似网站快照),因此,状态空间的大小与内存大小成指数关系。因此,即使对于相对较小的系统,也不可能直接计算和分析整个相应的Kripke结构。我们大致可以将这些方法分为三大类
第一类:对状态空间进行约简——用于模型检查的结构化方法利用了定义系统的语法表达式的结构。大型硬件和软件系统被模块化地描述,例如,子例程(过程和方法调用)用顺序结构来表示,交互并行硬件组件和软件进程(线程、参与者)用并发结构来表示。虽然状态空间可能是有限的,但它可以是非常大的,构造和探索代表整个状态空间的Kripke结构将牺牲任何优势,比如从研究系统的定义中可以获得的对称性。故而使用“扁平化”来对系统进行描述。诸如对称约简、动态状态空间探索、偏序约简、假设保证推理和参数验证等技术避免了盲目的扁平化,并以某种方式利用系统结构来获得更好的性能。
并发软件系统的搜索优化技术(第六章),并发软件系统的复杂性源于并发过程中大量可能的交错。所谓的偏序约简利用了这样一个事实,即来自不同进程的独立事件的顺序对计算结果并不重要。
组合推理(第12章)通过分治法的思想和复杂系统的模块化定义对系统部件的正确性证明推导到整体系统的正确性证明,这种方法从(通常更简单的)系统部件的正确性证明中获得了整体系统正确性的证明。
通常,关于系统部件的证明不是完全独立的,但是,关于系统某个部件的证明可能会对其他部件的行为做出假设,这被称为“假定-保证推理”。
第二类:对状态空间采用符号编码的方法进行描述减少了内存空间的占用——符号方法通过符号逻辑中的表达式表示Kripke结构的状态集和转换关系,而不是通过状态或转换的显式枚举。符号编码——无论是通过二进制决策图(BDD)、命题公式,还是无量词的一阶约束——都可以极大地压缩表示状态集的数据结构,如果能够有效地执行必要的操作,在验证工具的实际性能上有数量级的改进。第7章和第8章致力于使用二进制决策图(bdd)进行模型检查。作为布尔函数的一种数据结构,二进制决策图比布尔公式和电路的优点是可以在常数时间内检查可满足性和等价性。当在第1.2.3节中讨论的CTL定点算法中使用时,基于二进制决策图的状态集编码在实践中常常能实现数据结构的指数级减少。在20世纪90年代,基于二进制决策图的模型检查获得了显著的性能改进,这对硬件行业中模型检查的成功至关重要。
虽然最初术语“符号模型检查”就是指代基于二进制决策图的模型检查,但最近其他状态集和路径的符号编码(布尔和更通常的情况下)已被证明在不同的情况下是有用的。第9章和第10章介绍了基于SAT的模型检查,一种LTL的符号模型检查方法。正如在第1.2.4节中所讨论的,LTL有套索(缰绳)状的反例,并且布尔公式可以用来根据命题逻辑来指定反例存在的约束条件。通过求解这些约束条件,布尔可满足求解器可以计算出反例的组成部分,或证明反例的不存在性。这样,基于SAT的模型检测可以从SAT解决的最新改进中获益。在最初的公式中,基于SAT的模型检查是不完整的,因为它只能找到有界长度的反例路径(“有界模型检测”),第十章讨论了实现完整性的方法。如今,基于SAT的模型检查是硬件行业的标准工具,也用于位精确的软件模型检查。为了表达非布尔域上的状态,布尔逻辑可以被无量词一阶逻辑的可判定理论取代,即SAT模理论(SMT)。SMT求解器(第11章)是一种强大的决策程序,它发展迅速,并成为许多现代软件模型检查器的基础。第26和31章讨论了布尔域和非布尔域模型检查的一般定点算法。
第三类:抽象(第13-15章)是一种更激进的压缩状态空间的方法。抽象将克里普克结构中的K简化为更小的同态图像
K
^
\hat{K}
K^——抽象模型——它保留了原始结构的某些属性,可以更有效地进行分析。换句话说,抽象模型是系统的有原则的过度逼近。例如,原始结构和抽象结构之间的模拟关系的存在保证了原始结构上的树形反例不会在抽象中丢失,尽管可能存在仅出现在抽象中的“虚假反例”。形式上,如果
K
^
\hat{K}
K^模拟K,那么对于整个ACTL*对应ϕ,
K
^
⊨
φ
\hat{K} \models \varphi
K^⊨φ那么
K
⊨
φ
K \models \varphi
K⊨φ,但反过来这些都不成立。原始结构和抽象结构之间的其他关系保留了不同的规范逻辑。
许多现代模型检查器的一个关键要素是反例引导的抽象精化——一种通过构建精度不断提高的迭代抽象模型来验证系统的算法方法。为此,通过向抽象模型添加先前从系统描述中忽略的细节来分析和消除虚假反例,以便改进抽象,直到发现真实的反例(即缺陷),或者不再出现虚假反例并且系统得到验证;参见图6。第14章讨论了内插,一种在路径内定位证明中的断言的聚合逻辑方法,可用于识别和消除虚假反例。第15章介绍了基于谓词抽象的软件验证的现代介绍,其中抽象模型的状态使用程序计数器和程序变量上的约束(“谓词”)来描述。
模型检测研究的另一个重要部分是建模的扩展。虽然待验证系统可以使用克里普克结构建模的广泛的系统,但是对于一些关键的应用,基本的状态转移系统模型必须用额外的特征来扩充。对于建模软件来说,有限状态转移系统有四种典型的扩展情景,它们对于建模某些重要的系统类别是必不可少的。
- 安全协议的模型检测
安全协议为形式化方法提供了一个完美的应用领域:它们通常很小,但很难被正确处理,它们的正确性至关重要。然而,任何安全协议的方法都必须处理非有限状态的概念,如随机数和密钥、加密和解密以及未知的攻击者。 - 图形游戏
图形游戏是具有多个参与者的状态转移系统的扩展。在每个状态中,一个或多个参与者选择动作,这些动作一起决定系统的下一个状态。需要图形游戏来为具有多个组件、流程、参与者或代理的系统建模,这些组件、流程、参与者或代理具有不同的、有时是冲突的目标。即使系统是单一的,它的环境有时也必须独立考虑,就像两人游戏中的对手一样。 - 概率系统
概率系统是状态转移系统,例如离散时间马尔可夫链或马尔可夫决策过程,其中根据概率分布从某些状态选择下一个状态。概率系统可以模拟不确定性。 - 实时和混合系统
实时和混合系统是具有连续组件的离散状态转移系统的扩展。在实时系统中,连续组件是时钟,它测量和约束状态转换可能发生的时间;具有这种时钟和时钟约束的有限自动机的扩展称为“时间自动机”;在混合系统中,有限自动机可以用更常见的连续变量来扩展,例如,表示物理系统的位置或温度。虽然时间自动机已经成为连续时间状态转换系统的标准模型,但是需要混合自动机来建模由硬件和软件控制的物理系统(“网络物理系统”)。时间和混合自动机的某些特性仍然是可判定的;在其他情况下,我们有模型检查的半算法,它计算验证问题的答案,但在某些情况下可能形成死循环。
四、模型检测的未来
基于硬件和软件的系统越来越普遍,越来越复杂。我们看到从多核处理器到数据中心、传感器网络和云,它们的并发级别不断提高。此外,基于硬件和软件的系统越来越多地部署在安全关键的情况下,从控制和连接心脏的起搏器到飞机的物理控制系统。随着系统复杂性和关键性的急剧增长,对有效验证技术的需求也在增长。换句话说,模型检测的机会比比皆是。我们期望相应的研究工作继续在可伸缩性和建模挑战方面取得进展,将更大和更多样的验证问题纳入模型检测技术的范围。模型检查已经被集成到硬件的设计过程中。在不久的将来,我们预计模型检查将在软件开发实践中取得类似的进展,特别是在容易出错的以控制为中心(而不是以数据为中心)的软件领域,包括系统软件(内核、调度程序、设备驱动程序、内存和通信协议等)、分布式算法和并发数据结构、以及软件定义网络、信息物理系统----(与物联网相似的概念,与物联网相比,它还强调控制)等。
其次,虽然在过去,新技术主要是由性能(摩尔定律)和功能(新特性)的提高驱动的,但我们认为,在未来,系统的正确性、可靠性、安全性和整体健壮性将发挥越来越大的作用,也是软件和硬件产品的一个主要区分。我们已经在现代软件系统研究中看到了这种趋势,在现代软件系统研究中,性能曾经是主要的标准,但正确性最近已经在编译器,操作系统和分布式系统研究中占据了中心位置。这一趋势将进一步增加模型检测等形式化验证技术的影响。
我们认为还有第三个,甚至更基本的原因,模型检测的越发重要的原因是状态迁移系统的出现,它是计算机控制的动态系统设计和研究的通用模型。状态迁移系统是连续动力系统的离散模拟。随着数字技术的兴起,基于状态迁移系统(或“离散事件系统”)的模型在系统工程中变得普遍存在。它们同样适用于人类设计的形式化的动态的包括各种图表、图表和组织中发生的工作流、交互和自适应结构的规则,以及定义物理世界中发生的连续过程的离散抽象。模型检查——作为分析状态迁移系统的中心范例——这仅仅是它在广泛的不同领域应用的开始,从工程(应用)到科学、商业、法律等等领域。
除了介绍模型检测的未来发展前景之外,还介绍了模型检测当前热点研究的两个方向,以及两个潜在的模型检测新应用领域。
- 将模型检测的应用从简单的验证性质转向综合(自动构架符合要求的系统)
在第一个趋势中,当前的许多研究致力于从验证走向综合。验证是检测给定系统是否满足给定规范的任务;综合是构建满足给定规格的系统的任务。虽然全自动功能合成仅在受限的情况下才是有效且实用的,例如高级语言编程,或者对给定的构建块进行电路合成,但是一般的合成任务在需要细化或完成给定的部分系统描述以满足某些属性的设置方面已经取得了很大的进展。通常合成的属性是非功能性的;例如,并发的顺序程序可以自动配备同步结构,如锁或原子区域,以使程序在不改变其顺序语义的情况下安全地并行执行。更一般地说,“计算机辅助编程”的目标是将程序员从繁琐但容易出错的实现细节中解放出来,这样他们就可以专注于设计的功能,同时自动满足设计安全和容错方面的其他要求。反应式(或顺序式)综合是指满足给定时间规范的状态迁移系统的综合,该规范约束期望系统的输入/输出行为;这个问题在数理逻辑、控制理论、博弈论和反应式编程中有平行的历史,并在第二章中详细讨论。最近,大量的工作致力于模板和语法引导的合成方法,并在合成中使用归纳以及学习技术。 - List item