来源自我的博客
http://www.yingzinanfei.com/2017/02/01/yunxingshiyanzhenggaishu/
运行时验证的概述
本文将简要介绍运行时验证技术。先给出运行时验证的定义,与和知名的验证技术像模型检测对比并给出测试,同时指出运行时验证的特点。然后,像面向监控编程的运行时验证扩展和基于监控的运行时反射会被简要描述并讨论他们的相同与差异。最后,指出使用运行时验证的约束。
- 简介
- 三种主要的验证技术:
- 定理证明
- 模型检测
- 测试
- 文章的主要内容
- 强调运行时验证的主要思想,并且与其他验证技术相比来讨论其特点
- 在正确属性的线性时序逻辑背景下讨论运行时验证技术
- 总结一些用更严格更有表现力语言的扩展
- 描述一些不仅用于监视还能在监视之下干涉系统的方法
- 讨论对于合同使用的运行时验证技术
- 三种主要的验证技术:
运行时验证技术
- “故障”定义为在当前行为和预期行为间的偏差
- 除了传统验证技术“定理证明”、“模型检测”、“测试”,运行时检测是一个轻量级的新验证技术方向
- 监视器
- 监视器是读入有限路径并生成确定结论的设备
- 在线监视和离线监视
- 运行时验证与模型检测
- 运行时验证起源于模型检测
- 两者主要区别
- 在模型检测中,给定系统的所有执行被用来检测其是否满足给定的正确属性
$\varphi$
,对应于语言包含问题。而运行时检测处理的是字符问题。 - 模型检测通常研究无穷路径,但运行时检测处理有限执行,执行也必须是有限的。
- 模型检测中给出一个完整的模型来研究任意位置的路径,而运行时检测,特别是在处理在线监测时研究的是逐渐增大的有限执行
- 运行时检测只处理观察到的执行,因为他是由真实系统生成的
- 运行时验证与测试
- 运行时验证不研究系统所有可能的执行,这与测试有相似性
- 两者主要区别
- 在测试中,预言通常是直接定义的,而不是由一些高层说明生成
- 测试穷尽一个输入集来测试系统,而运行时验证很少研究这个
- 运行时验证可以被看作是一种“被动测试”
- 当在最终的软件系统上加上监视器后,也可以把运行时验证理解成“永久测试”
- 什么时候使用运行时验证
- 监视器
运行时验证中线性时序逻辑的说明
- 不同层次的运行时验证的表现
- 运行时验证之外
- 运行时验证和合同约束
- 结语
- 简介
再探运行时验证
本文中将提出一个在线性时序逻辑LTL公式下运行时检测中的典型障碍。标准的线性时序逻辑模型是无穷轨迹的,但运行时验证只需要处理有限系统行为。这个问题通常是在给有限轨迹定义LTL语义时提出的,这和无限轨迹语义不完全契合。
我们在有限轨迹中定义一个3值语义(正确true, 错误false, 不确定inconclusive), 这样和无限轨迹最相似。此外,我们描述怎样在给定一个LTL公式后用3输出符号去构建一个确定的有限状态自动机。这个自动机输入有限轨迹然后输出他们的3值LTL语义。这样就能直接部署到运行时检测中。
我们的理念首先用在研究LTL的配置上,然后扩展到研究时间上的线性实时逻辑(简称TLTL)。因此,对于TLTL公式,监视器被构建为运行在有限时间轨迹上的。
我们应用了不定时配置并通过检查一个真实世界案例来验证整个方法。
简介
运行时验证作为补充像模型检测和测试这样的验证技术的工具已经越来越流行。特别是在用于模型检测不适用或不能直接适用的黑盒或灰盒系统中,或者以现在的模型检测器无法分析的系统。
预备知识
介绍一些关于LTL的公式定义。
- 在不计时配置中的3值LTL
- 语义
$LTL_3$
的监视程序
- 在计时配置中的3值LTL——TLTL
- 预备知识
$TLTL_3$
的语法和语义- 事件时钟自动机
$TLTL_3$
的监视程序
实现
讨论怎么实现第3节中描述的不计时情况。展示实际的监视器怎么从LTL公式中自动生成,给出一个当前实现的简要概述,包括监视器生成器(简称为LTL2FSM)和一个日志框架(简称为DIAGNOSTICS)。此外,描述了我们的技术怎么用来避免一个特殊的C++陷阱,即在进入程序主函数前产生线程。
- 有效的监视器代码生成
- 我们的实现:Ltl2Fsm 和 Diagnostics
- 实例:静态初始化排序失败
结论
本文中,我们对计时和不计时的LTL关于有限轨迹都呈现了一个3值语义。我们讨论的三值语义和LTL的无限状态语义相似。
此外, 我们为两种逻辑都开发了有效的监视器生成程序,在一些前缀允许时能立即告警。
我们已经应用了不计时的配置。我们把这个监视器生成工具整合了大型日志工具和单元测试框架。我们已经检查了一个标准C++陷阱并且对此问题提供了一个运行时验证解决方案,这个在工程上和运行时处罚上都非常有效率。
运行时验证中的LTL和TLTL
本文研究在线性时序逻辑LTL和计时的线性时序逻辑TLTL中的运行时验证属性。
- 简介
- 运行时验证与模型检测
- 运行时验证与测试
- 监测离散时间属性
- 监测实时时间属性
- 概要
- 在离散时间配置中的3值LTL
- 预备知识
$LTL_3$
的语法和语义$LTL_3$
的监视器结构- 举例
- 评价
- 正确观察
$LTL_3$
- 好或坏前缀
- 安全与不安全属性
- 信息前缀
- 在实时系统配置中的3值LTL——TLTL
- 预备知识
$TLTL_3$
的语法和语义$TLTL_3$
监视的概述- 运行在事件时钟自动机上的符号
- 符号化状态的空性检测
$TLTL_3$
的监视器程序- 平台适应
- 结论
- 附录
- 评价数据
- 简介
基于规则的运行时验证再探
- 简介
- 相关工作
- 监视上的相关工作
- 规则处理上的相关工作
- LogFire数字模拟语言
- 资源管理系统的需求
- 需求形式化成规则
- 事件和事实的声明
- 规则的通用形式
- 资源排序
- 释放需求
- 不释放和不准许的需求
- 禁止需求
- 监视器的终止和应用
- 在监视器中构成规则
- 应用监视器
- 附加特征
- 事件和事实
- 研究作为数据库的事实内存
- 定义和使用规范模式
- 时序逻辑
- 路径表达
- RETE算法
- RETE算法
- RETE的五个优化
- 规则关联
- 最小条件评价
- 前缀共享
- 前缀就绪
- 后缀就绪
- 对运行时验证评价和修改RETE
- 评价
- 事件和事实
- RETE的优化
- 缺失的索引
- 修改
- 事件处理
- 索引
- 评价
- DSL(数字模拟语言)的实现
- 作为一等公民的名称
- 抽象语法规则
- 从具体到抽象语法
- 用数据可视化来理解程序
- 测试
- 文档
- 实验
- 系统比较
LOGFIRE
: 本文介绍的基于规则的系统,是扩充了事件处理和索引方案的RETE
算法RETE/UL
: 添加了事件处理的对RETE
算法的SCALA
直接实现。LOGFIRE
是附带有索引的此方法优化实现。DROOLS
: 一个主要的最先进的为JAVA
语言制订的基于规则系统,并且能免费从JBoss
社区获取。DROOLS
基于一个RETE
算法的增强实现。RULER
: 是一个应用于JAVA
的运行时验证工具,创建为基于规则的系统,但和RETE
算法相比有点小区别。RULER
在下一步中移除了事实,除非通过规则明确指示保持它。与其相反,RETE
只有在规则中明确指示移除事实时才会移除。LOGSCOPE
: 是一个小规模轻量级的修改版RULER
,强调数据参数化状态机器,应用于SCALA
上。LOGSCOPE
与RULER
相反,研究的是事实的保留除非其在规则中被明确移除。LOGSCOPE
被开发来探索语言特征且不是优化的。TRACECONTRACT
: 一个内部的SCALA DSL
用于状态机器,浅层的DSL
和深层的LTL
,也是一个简单的基于规则的符号(浅层)。应用于重写和标准化公式。TRACECONTRACT
被开发来探索语言特征且不是优化的。MOP
: 是在我们认识内现存的最有效最先进的运行时验证系统。MOP
以插件的方式支持许多不同的逻辑,都使用同样的索引算法来快速访问监视器基于参数事件。一般地,MOP
被设计来监视程序执行(在线监视)。例如,JAVAMOP
验证由运行时JAVA
程序生成的事件,用ASPECTJ
仪表化。在这个评价里日志分析是在程序中插入一个日志阅读器来实现的,从日志中读入每个事件,调用给特定各类事件定义的方法,这些是空的函数体(什么都不做)。对这些空函数体方法的调用用ASPECTJ
仪表化来驱动监视器
- 特定的需求
- 日志
- 结果
- 系统比较
- 结论和未来工作
运行时验证框架
MOP
概述本文给出了关于面向监视的程序框架
MOP
的概述。在MOP
中支持运行时监视并且被支持作为一个基本原则来构建可依赖系统。监视器自动地综合特定属性并连同原始系统来检测动态行为。当一个规范违反或运行时验证时,用户定义的行为会触发,这个可以是任何代码像信息日志记录或运行时恢复。两个MOP
的实例将会介绍:JavaMOP
(适用于Java
程序)和BusMOP
(适用于监视PCI
总线流量)。MOP
的架构也会被讨论,参数轨迹监视和应用实施将被给出。JavaMOP
的综合评价证实了它的效率,特别是和类似的系统相比。BusMOP
的细节实现将被讨论。通常BusMOP
在其监视系统时不会有额外的系统运行开销。- 简介
- 相关工作
- 面向方向的编程语言
- 运行时验证
- 契约式设计
- 其他相关的方法
- 讨论
- 举例
- 相关工作
MOP
框架
- 架构
- 语言客户端
- 逻辑插件
MOP
实例
MOP
语法
- 共享的语法
- 特殊实例的语法
- 特殊逻辑插件的语法
JavaMOP
实例
JavaMOP
语法
BusMOP
实例
BusMOP
语法
JavaMOP
- 参数轨迹切片和朴素监视
- 事件、轨迹、属性和参数
- 监视器和参数监视器
- 朴素参数监视
- 有效地参数监视
- 算法
C<X>
- 启用优化
- 算法
D<X>
- 算法
- 索引
- 集中化索引
- 优化:分散化索引
- 结合模型和关联
- 参数轨迹切片和朴素监视
BusMOP
PCI
总线- 监视设备
PCI
核心模块- 第N系统模块
- 总结接口模块
- 监视器模块
BusMOP
评价
- 逻辑插件
- 有限状态机器
- 扩展正则表达式
- 线性时序逻辑(未来时间)
- 过去时间线性时序逻辑
- 上下文无关文法
- 过去时间线性时序逻辑的调用与返回
- 结论
- 简介