运行时验证:技术、案例与展望
1. 运行时验证的背景与程序合成技术
在软件开发中,常常会遇到需求未被形式化甚至根本不存在的情况,这使得验证观察到的执行的正确性变得不可能,传统的运行时验证技术也因此失效。而程序合成技术为解决缺乏形式化规范的问题提供了途径。
程序合成技术通过观察运行系统的行为来学习其特定方面。具体过程分为两个阶段:首先是学习阶段,观察执行以产生合成属性;然后是验证阶段,根据学习到的属性检查执行情况。在某些情况下,学习过程甚至会在验证阶段持续进行。
当没有形式化规范时,程序合成能够自动生成可检查的规范。它在验证不断发展的系统的正确性方面具有很大潜力。例如,系统的组件经常会被新组件替换,以扩展、修改、移除或纠正现有系统的功能,但更新后的系统可能比原始系统包含更多故障。这时,从被替换组件推断出的属性可用于在运行时发现新组件中的可能故障。此外,对于在对最终运行环境了解有限的情况下开发的程序,程序合成技术也非常有效,因为它可以直接在实际环境中进行推断,从而使学习到的行为依赖于系统的使用上下文。
适合程序合成技术的系统包括基于组件的系统、移动系统、基于代理的系统、普适系统、无线网络和自适应系统等。学习到的属性还可用于构建测试套件和检查观察到的行为是否符合已知属性。
不过,程序合成技术要在运行时有效应用,需要具备轻量级的特点,并且能够推断出有意义且可进一步检查的属性。本文主要关注基于不变量检测的学习技术,这些技术通过监控单个执行来推断不变量,即测量参数上在所有或大多数执行中都成立的属性和关系。
2. 不变量检测技术
2.1 变量上的不变量检测
Ernst 等人提出了一种自动
超级会员免费看
订阅专栏 解锁全文
1168

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



