基于测试赋值的 Alloy 模型求解器草图绘制
1. 引言
在构建可靠系统时,软件模型的构建起着至关重要的作用。Alloy 是一种著名的基于关系的建模语言,已广泛应用于学术和工业领域。它拥有基于 SAT 的分析器,能在用户定义的范围内进行自动分析,找到使模型公式为真的实例,还能找出反驳感兴趣属性的反例。
然而,Alloy 公式的正确性推理需要格外小心,因为存在过度约束(排除有效赋值)和约束不足(允许无效赋值)这两种基本错误。为解决此问题,我们引入了一种新方法——使用测试赋值来绘制 Alloy 模型草图。用户无需编写完整模型,只需编写带有空洞的部分模型,并提供编码可能片段的正则表达式和作为测试用例的有效和无效赋值,草图绘制框架会根据给定片段和赋值完成部分模型。
我们的草图绘制框架 ASketch 专注于绘制 Alloy 模型的几个构造,包括关系表达式、逻辑运算符和量词。它通过将草图绘制问题转化为 Alloy 语言本身的约束求解问题,使用约束求解技术探索候选 Alloy 模型的搜索空间,最终使用 Alloy 分析器找到填充空洞的解决方案。
2. 示例
为说明 ASketch 方法,我们来看一个无环单链表的部分 Alloy 模型:
one sig List { header: lone Node }
sig Node { link: lone Node }
pred Acyclic() { \Q,q\ n: Node | n \CO,co\ \E,e\ => n \CO,co\ \E,e\ }
q := {| all|no|some|lone|one |}
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



