一种运行时验证监控器的构造方法

摘 要 :本文结合作者课题内容,介绍了一种运行时验证技术中的监控器构造方法.该方法完整涵盖了从性质规约到监控器模型再到监控程序的全过程,过程中使用了相关开源的第三方软件使得该方法的自动化程度较高.同时由于该监控器的构造是基于三值语义,使得该监控器在一定意义上具有预测性.


关 键 词 :运行时验证;监控器模型;监控程序;三值语义

中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 20-0000-02

1.引言

运行时验证[1]是一种新兴的轻量级程序验证技术.在运行时验证中,通常从系统需求中产生监控器,监控器通过观测程序的执行来检查程序运行过程是否满足系统需求,是传统的软件验证和确认技术,比如测试[2]和模型验证[3]的有效补充.它不但可以有效的检测系统运行中的异常行为,而且也使得在检测到正确性背离时有效地修复系统成为可能.

本文结合作者课题中的相关工作,介绍了一种运行时验证监控器构造方法,该方法结合LTL3 Tools监控器模型生成工具以及JaMOP软件开发工具支持和分析框架,其完整的流程图如图1所示.

论文的组织如下:第二节结合案例介绍如何使用LTL3 Tools工具生成监控器模型即F(finite-state machine, 有限状态机),第三节结合案例介绍如何将监控器模型经过相应处理后,通过JaMOP生成成为监控程序.最后进行总结.

2.监控模型的生成

在运行时验证领域,LTL[4](Linear Temporal Logic,线性时序逻辑)被广泛的应用,相应的监控性质要通过LTL公式进行描述.LTL公式的预测语义,也称三值语义[5](简称LTL3).相较典型的已经被定义而且使用于运行时验证工具的有穷轨迹上的两值语义(true/false)监控器,基于三值语义的监控器非常适合于运行时验证.一方面,三值语义的公平性使得监控器的裁决始终是正确的,另一方面,三值语义的预测性使得监控器有发现一条无穷运行轨迹的最小好[6](坏)前缀的能力,即监控器能尽可能早的作出裁决,因此在一定意义上具有预测性.所以本文的监控器构造也将使用三值语义.三值语义监控器的理论构造过程请参照文献[7].

LTL3 Tools是一个将给定LTL公式φ转换为F(finite-state machine, 有限状态机)表示Mφ的工具集.该工具集为免费使用,在网上可以下载.F可以看作是一个基于三值语义的监控器模型,输入有穷字u,它会判断出是否公式成立.

这里结合一个案例,进行介绍:

对一个软件监测以下需求:直到init后才进行spawn,即只有初始化以后才能调用spawn操作.对应的LTL规约为: !spawn U init

通过ltl2mon(该程序为LTL3 Tools输入规约的入口)程序输入以下命令:$./ltl2mon "(! spawn) U init" | dot -Tps > graph.ps得到对应的F格式的监控器.得到监控器自动机的图形化表示为:

其中,是起始状态,绿色是安全状态,红色是不安全状态.

生成监控器的结果也可以通过如下命令 $ ./ltl2mon "(! spawn) U init" -itest.f > test.txt输出到txt文档中,形成一个文本格式的自动机描述如图3所示:

3.监控程序的实现

我们的最终目的是对定义的LTL规约,生成相应的监控程序.这里我们将使用到JaMOP,它是一个基于Ja的面向对象编程(MOP)软件开发工具支持和分析框架,它支持将F等逻辑转化为Ja程序的监控器,支持面向方面编程的编织模式,是一个自动化程度较高的运行时验证框架.JaMOP有相应的逻辑处理层,用于处理各种逻辑,将其转换成Ja语言的表达方式,并且有相应的处理层根据目标Ja文件输出相应面向方面的监控器表达.

在之前的案例中得到监控器模型的基础上,通过JaMOP生成监控程序的过程如下.

1)对test.txt中描述的的监控器,去除重复和空的迁移条件,例如”label等于”,得到简化的自动机.以“label”对应的字母表为监控事件,依据test.txt简化的自动机,监控目的为监测unsafe的状态,通过转换可以得到的mop文件(这是JaMOP的输入文件,并不是一个可运行的程序).我们开发了一个工具进行转换,其中根据需要可以适当的进行人工修改,这个过程完全通过手动完成也是可以的.

2)按如下命令jamop test.mop执行,得到对应的面向方面文件TestMonitorAspect.aj.

由于作者课题中所考虑的领域基本上都是由C或C++实现,因此没有使用JaMOP的植入功能,即在相应节点中插装一些程序段用于获取监控所关注的系统信息,而主要利用其生成监控程序的功能,这使得作者课题中还为了获取相应的程序信息做了大量的相关工作.如果针对的是由Ja实现的程序,直接利用JaMOP的植入功能将使从目标程序中获取信息环节的工作可以由程序自动完成.作者主要使用其中生成的监控器代码,它位于TestMonitor类中,是一个监控器类,完成自动机的功能.图4是案例中最终生成的监控程序中的一段实现监控器监控过程(即根据观察到的事件发生迁移)的代码,其中利用数组表示不同事件在不同状态时发生的迁移.

图4.案例监控程序中实现监控器监控过程的代码

4.总结和下一步工作

本文结合作者课题中相关内容,介绍了了一种运行时验证监控器的构造方法,该方法结合使用了开源的第三方软件LTL3 Tools和JaMOP,使得其自动化程度较高. 在下一步工作中作者将结合其他课题的工作将该方法整理成一个类似于已经成熟应用的运行时验证工具集Ja-MaC[8]一样的工具,只通过输入相应的监控性质就能完全自动的生成相应的监控器程序.

类似论文

一种运行时验证监控器的构造方法

摘 要 :本文结合作者课题内容,介绍了一种运行时验证技术中的监控器构造方法 该方法完整涵盖了从性质规约到监控器模型。
更新日期:2024-6-6 浏览量:14800 点赞量:4874

居住建筑楼板三种隔音构造之比较

【摘 要】目前我国大部分住宅楼板考虑低造价的原因,隔音不经构造处理,居住者经常听到上下楼邻。
更新日期:2024-3-10 浏览量:45144 点赞量:11141

一种基数据库的CATIA模板设计方法

摘 要:计算机三维辅助设计软件CATIA通过COM接口及模板定义实现图形交互的二次开发,但在CATIA环境下实现复杂的界面设计。
更新日期:2024-3-25 浏览量:46531 点赞量:11286