模型检查:原理、算法与工具
1. 引言
在开发硬件或软件系统时,我们通常从一系列需求开始。这些需求大多源于客户的需求,有些则来自设计决策和其他约束条件。最终的系统应满足这些需求,除了可扩展性和性能等一般需求外,还有许多与系统功能相关的正式需求,如活性需求(如坏事永远不会发生)、公平性需求(如系统持续进行有意义的操作)以及规定事件时间顺序的需求(如事件 A 只能在事件 B 之后发生)。
为了满足这些需求,一种常见的方法是构建一个模型,检查该模型是否满足需求,然后证明系统符合该模型。在过去的 20 年里,人们开发了自动检查模型是否符合正式需求的方法,即模型检查。
然而,在现实中,大多数情况下并没有系统的正式模型。要使用一些测试方法,往往需要手动构建正式模型,而这个过程很容易出错,因为很多时候只能依靠客户的非正式需求规格说明和系统开发人员的专业知识来构建模型。
自动机学习领域提供了一种解决方案,它可以从黑盒系统中生成正式模型,这种方法至少可以比较系统的不同版本。但我们可以采用更直接的方式来满足最终系统的需求,即结合模型检查和模型学习,这种方法被称为自适应模型检查或黑盒检查。其基本思想是通过机器学习算法学习黑盒模型的一部分,然后使用该模型进行需求的模型检查。如果发现反例,可能是系统不满足需求,也可能是模型不充分,此时需要改进模型。
2. 预备知识
- 确定性有限状态自动机(DFA) :DFA 是一个 5 元组 (M = (\Sigma, Q, \delta, q_0, F)),其中 (\Sigma) 是有限字母表,(Q) 是有限非空状态集,(\delta: Q \times \