知识卡片

基于SPIN的架构验证流程与EHA模型设计动机

结构图卡

内容

SPIN是贝尔实验室开发的模型检验工具,擅长分析分布式系统和通信协议的逻辑一致性,用Promela语言规范化验证模型,能报告死锁、无效循环、未定义接收等问题,采用on-the-fly技术无须构建全局状态图即可按需生成部分状态、支持完整的LTL模型检验。基于SPIN验证架构的整体流程是:读入架构设计文档中UML顺序图信息、转换成EHA(扩展层次自动机)模型;从约束文件读取LTL描述的约束信息;综合EHA模型和LTL语句生成Promela模型,输入SPIN验证;SPIN给出验证结果,若违反约束则生成反例,反馈回架构描述文档定位错误位置。选择EHA而非把整个顺序图直接建模成一个确定有限自动机(DFA),是出于对复杂度和可扩展性的权衡:若把整张顺序图当作一个DFA整体处理,状态之间的转移会高度关联、自动机会过于复杂,在演化方面的表述能力也很差;EHA的解法是把顺序图当成一个层次自动机整体,每个对象各自对应一个独立的”串行自动机”,用树形结构把这些串行自动机关联起来,并明确禁止串行自动机之间的直接状态转换——这个设计把原本纠缠在一起的整体状态空间,拆分成多个相对独立、只在局部内部转移的子自动机,大幅降低了状态间关联的复杂度。此外,EHA还把”事件触发时的相应动作”从转移本身剥离出来、放进转移目标状态的活动里,这是专门为了方便描述架构演化——演化操作(如增删消息)作用在状态的”活动”上比作用在转移的复合结构上更容易被形式化地描述和推理。

结构图

flowchart TD
    A[UML顺序图<br/>XML描述文档] --> B[转换为EHA<br/>扩展层次自动机]
    C[约束文件<br/>LTL时态逻辑] --> D[生成验证模型]
    B --> D
    D --> E[Promela模型]
    E --> F[SPIN验证器]
    F -->|满足约束| G[验证通过]
    F -->|违反约束| H[生成反例<br/>反馈定位错误位置]

参考来源

- 位置:《软件架构理论与实践》第14章《软件架构形式化验证》"14.4.1 SPIN简介"及"14.4.3 架构模型"节之"2.扩展层次自动机"(源文件:_epub-src/OEBPS/text00115.html) - 结论依据:原文说明"将整个顺序图作为一个确定有限自动机(DFA)的形式化描述方法使得自动机过于复杂,而状态之间的转移相互关联,使得在演化方面的表述能力非常差……本节采用扩展层次自动机(EHA)来形式化描述顺序图,即将顺序图作为一个层次自动机整体,每个对象视作一个串行自动机,用树形结构关联对象,禁止串行自动机之间的状态转换",直接支撑本卡片的结构图与内容解释。 - 原始内容:由于考虑到UML顺序图与状态图之间的关联性,参考状态图的层次自动机形式化描述方法,本节采用扩展层次自动机(Extended Hierarchical Automata,EHA)来形式化描述顺序图……大大降低了状态与状态之间关联的复杂度。