CN104765688B - 一种可动态部署规则的Java程序运行时验证*** - Google Patents
一种可动态部署规则的Java程序运行时验证*** Download PDFInfo
- Publication number
- CN104765688B CN104765688B CN201510181988.0A CN201510181988A CN104765688B CN 104765688 B CN104765688 B CN 104765688B CN 201510181988 A CN201510181988 A CN 201510181988A CN 104765688 B CN104765688 B CN 104765688B
- Authority
- CN
- China
- Prior art keywords
- rule
- event
- sequence
- code
- events
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明一种可动态部署规则的Java程序运行时验证***,该***运行于DiSL字节码注入框架之上,包括验证规则翻译器、部署管理器以及运行时引擎三个模块,所述验证规则翻译器用于将验证规则定义文件翻译成由事件注入代码和规则验证代码组合成验证代码,所述部署管理器用于提供部署验证代码的相关用户接口;所述运行时引擎用于根据接收的验证代码中事件注入代码产生的事件序列,为每个监控对象维护一个事件序列,验证事件注入代码产生的事件序列是否与规则验证代码的事件序列相同,并根据验证情况通过部署管理器对事件注入代码进行实时部署优化。本发明根据运行时验证结果对代码注入进行动态优化,有效降低了验证***的性能开销。
Description
技术领域
本发明涉及运行时程序验证领域,具体是一种可以将规则动态部署的针对Java程序的运行时验证***。
背景技术
程序验证技术对于保证程序的正确性起着关键性作用。程序验证技术主要包括传统的静态程序验证技术和运行时程序验证技术,两者的不同在于开展验证过程的时机。传统的静态程序验证技术包括模型检测和定理证明,旨在对于整个***进行形式化建模验证,其主要缺点在于静态方法导致的状态空间***,使得其不具备可扩展性,无法对大型***进行验证。运行时程序验证技术则只关注程序的具体执行路径是否满足具体的特性,大大减少了验证空间,使得程序验证变得真正可行。
运行时程序验证分为三步,首先通过用户定义或者程序挖掘得到规则描述,然后验证***根据规则通过自动或手动注入代码获取到相关事件,最后验证***根据规则对产生的事件系列进行验证,以检测目标***是否违背规则。
近年来运行时程序验证受到了越来越多的关注,有大量技术被开发出来,主要集中在解决第一步规则描述和第三步验证过程中的问题。
对于第一步,现有技术解决的问题主要是如何增强规则描述语法的表达能力,从而使得规则描述更加简单。现有的描述语法包括:有限状态机模型(FSM)、上下文无关文法(CFG)、扩展正则表达式(ERE)和线性时序逻辑(LTL)等等,已经能够很好地表达各种基本事件序列规则和含参事件序列规则。
对于第三步,现有技术解决的问题主要是如何在产生较小性能开销的前提下完成验证工作。具体的技术有结合静态分析优化注入代码、对监控对象进行采用更好的垃圾回收机制等等,现有的技术已经能够做到在较低的资源耗费下对单个规则进行验证,但多个规则同时验证仍需耗费大量资源。
然而,现有技术对如第二步的探索很少,大部分技术依赖于传统的注入工具,例如AspectJ来注入代码,使得现有验证***有如下缺点:(1)无法在运行时动态部署验证规则(2)无法针对验证结果进行动态注入优化。
通过检索发现,瑞士卢加诺大学开发的Java字节码注入工具DiSL,能够动态部署和反部署注入代码,具有很高的灵活性,同时提供自定义代码编织接口,使得编织时数据能够被收集到,从而用于运行时优化。在本发明的***中,DiSL被选为Java程序运行时验证的字节码注入框架。
发明内容
针对现有动态程序验证技术的不足,本发明提出了可动态部署规则的Java程序运行时验证***,能够在不影响目标程序运行的前提下动态部署、反部署和重部署用户定义规则,具有很高的灵活性,同时能够根据运行时验证结果对代码注入进行动态优化,有效降低了验证***的性能开销。
本发明的技术解决方案如下:
一种可动态部署规则的Java程序运行时验证***,该***运行于DiSL字节码注入框架之上,包括验证规则翻译器、部署管理器以及运行时引擎三个模块。
所述验证规则翻译器用于将验证规则定义文件翻译成由事件注入代码和规则验证代码组合成验证代码;
所述部署管理器用于提供部署验证代码的相关用户接口;
所述运行时引擎用于根据接收的验证代码中事件注入代码产生的事件序列,为每个监控对象维护一个事件序列,验证事件注入代码产生的事件序列是否与规则验证代码的事件序列相同,并根据验证情况通过部署管理器对事件注入代码进行实时部署优化。
优选地,所述验证规则定义文件为AspectJ语言切片语法描述的事件定义和状态机语言定义的事件序列规则。
优选地,所述部署管理器提供的相关用户接口包括:将验证代码注入到目标Java程序的动态部署接口、根据运行时引擎的验证从目标Java程序中移除违反了验证规则和已通过验证的验证代码的动态反部署接口、动态更新目标Java程序中已部署规则的动态重部署接口
优选地,所述运行时引擎包括规则监控器模块和部署优化器模块:
所述规则监控器模块根据接收的验证代码中事件注入代码产生的事件序列,为每个监控对象维护一个事件序列,验证产生的事件序列是否与规则验证代码定义的事件序列相同;
所述部署优化器模块根据规则监控器的验证结果,将已违背规则验证代码的事件注入代码和路径已完全覆盖的事件注入代码动态移除。
优选地,所述验证规则翻译器将将验证规则定义文件翻译成由事件注入代码和规则验证代码组合成验证代码的过程为:
a)验证规则翻译器对验证规则进行词法分析,生成token流;
b)验证规则翻译器对token流进行语法分析,生成事件对象集合和规则对象集合;
c)验证规则翻译器分别将事件对象集合和规则对象集合生成为事件注入代码和规则验证代码。
附图说明
图1为本发明的***结构示意图;
图2为本发明中验证规则定义样本;
图3为本发明中验证规则翻译器架构;
图4为本发明中部署管理器的接口类型示意图。
具体实施方式
本实施例在以本发明技术方案为前提的情况下进行实施,下面对具体的实施方式和操作过程作详细说明。本发明的验证范围包括但不限于这些实施例。
图1所示为可动态部署规则的Java程序运行时验证***架构。结合图1,本实施例的具体流程为:
步骤1)用户提供图2所示验证规则定义文件。
其中:a)验证规则名称为HasNext,验证对象类型为Iterator;
b)事件callHasNext和callNext,由AspectJ语言切片定义;
c)状态机状态集合safe,unsafe
d)事件发生时状态转移规则
e)状态机到达unsafe状态时的动作,包括调用验证失败函数和输出错误信息。
步骤2)验证规则翻译器将验证规则定义文件翻译成验证代码,验证代码包括事件注入代码和规则验证代码。
图3给出了验证规则翻译器的架构和翻译流程,具体为:
a)验证规则翻译器对验证规则进行词法分析,生成token流;
b)验证规则翻译器对token流进行语法分析,生成事件对象集合和规则对象集合;
c)验证规则翻译器分别将事件对象集合和规则对象集合生成为事件注入代码和规则验证代码,其中事件注入代码会被注入到目标Java程序以产生相关事件,规则验证代码则被规则监控器调用以验证事件序列是否满足规则。
步骤3)用户调用部署管理器,将验证代码部署到目标Java程序。
图4给出了部署管理器提供的相关用户接口,包括动态部署接口:将验证代码注入到目标Java程序;动态反部署接口:根据运行时引擎的验证从目标Java程序中移除违反了验证规则和已通过验证的验证代码;动态重部署接口:动态更新目标Java程序中已部署规则目标Java程序的范围可以为包、类、方法以及基本块,
具体实现方式为:
a)部署管理器将验证规则名称映射到具体的验证代码的类名称;
b)部署管理器调用DiSL接口将规则类代码注入到指定代码块范围,并维护注入记录列表;
c)部署管理器在注入记录列表里查询指定范围内的注入记录,调用DiSL接口移除。
步骤4)部署管理器通过DiSL注入框架注入验证代码到运行时引擎。
运行时引擎包括规则监控器模块和部署优化器模块,规则监控器模块接收验证代码产生的事件序列,为每个监控对象维护一个事件序列,验证产生的事件序列是否与规则定义的事件序列相同,部署优化器模块根据规则监控器验证结果,将已违背规则的验证代码和路径已完全覆盖的验证代码动态移除。
其中,规则监控器具体验证流程为:
1)记录部署优化器提供的事件与规则代码列表;
2)接收事件注入代码产生的相关事件;
3)查询事件相关对象的事件序列,如果序列不存在,为该对象创建新的事件序列,将新的事件添加到事件序列中;
4)查询事件与规则代码列表,调用规则验证代码验证事件序列是否满足规则;
5)将验证结果反馈给用户以及部署优化器。
部署优化器具体验证流程为:
1)在注入代码编织过程中被DiSL注入框架调用,从而在此过程中构建用户程序的控制流图;
2)根据规则监控器的验证结果进行优化:如果验证结果为违反了定义规则,则将对应基本块的对应事件产生代码移除,避免多次验证;如果验证结果为未违反,则检查对应基本块所在的所有路径是否都已被验证,如果都已被验证,则将对应基本块的对应事件产生代码移除。
步骤5)DiSL注入框架在编织验证代码过程中回调部署优化器,部署优化器在此过程中构建目标程序控制流图;
步骤6)验证代码开始运行,将产生的相关事件传递给规则监控器;
步骤7)规则监控器为每个验证对象保存一个事件序列,同时验证事件序列是否满足规则,并将验证结果反馈给用户和部署优化器;
步骤8)部署优化器根据实时验证结果决定是否反部署相关注入验证代码,从而提高验证性能;
步骤9)用户也可以根据验证结果调用部署管理器反部署验证代码;
步骤10)部署管理器通过DiSL注入框架移除验证代码,目标代码继续运行。
经过对比实验,本发明***的运行时间开销要比基于AspectJ语言的验证***少21%,堆内存消耗要比基于AspectJ语言的验证***少16%,因此本发明能够有效降低Java程序运行时验证开销。
Claims (5)
1.一种可动态部署规则的Java程序运行时验证***,该***运行于DiSL字节码注入框架之上,包括验证规则翻译器、部署管理器以及运行时引擎三个模块,其特征是:
所述验证规则翻译器用于将验证规则定义文件翻译成由事件注入代码和规则验证代码组合成的验证代码;
所述部署管理器用于提供部署验证代码的相关用户接口;
所述运行时引擎用于根据接收的验证代码中事件注入代码产生的事件序列,为每个监控对象维护一个事件序列,验证维护的事件序列是否与规则验证代码定义的事件序列相同,并根据验证情况通过部署管理器对事件注入代码进行实时部署优化。
2.根据权利要求1所述的可动态部署规则的Java程序运行时验证***,其特征在于所述验证规则定义文件为AspectJ语言切片语法描述的事件定义和状态机语言定义的事件序列规则。
3.根据权利要求1所述的可动态部署规则的Java程序运行时验证***,其特征在于所述部署管理器提供的相关用户接口包括:将验证代码注入到目标Java程序的动态部署接口、根据运行时引擎的验证从目标Java程序中移除违反了验证规则和已通过验证的验证代码的动态反部署接口、动态更新目标Java程序中已部署规则的动态重部署接口。
4.根据权利要求1所述的可动态部署规则的Java程序运行时验证***,其特征是运行时引擎包括规则监控器模块和部署优化器模块:
所述规则监控器模块根据接收的验证代码中事件注入代码产生的事件序列,为每个监控对象维护一个事件序列,验证产生的事件序列是否与规则验证代码定义的事件序列相同;
所述部署优化器模块根据规则监控器的验证结果,将已违背规则验证代码的事件注入代码和路径已完全覆盖的事件注入代码动态移除。
5.根据权利要求1所述的可动态部署规则的Java程序运行时验证***,其特征在于验证规则翻译器将验证规则定义文件翻译成由事件注入代码和规则验证代码组合成的验证代码的过程为:
a)验证规则翻译器对验证规则进行词法分析,生成token流;
b)验证规则翻译器对token流进行语法分析,生成事件对象集合和规则对象集合;
c)验证规则翻译器分别将事件对象集合和规则对象集合生成为事件注入代码和规则验证代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510181988.0A CN104765688B (zh) | 2015-04-17 | 2015-04-17 | 一种可动态部署规则的Java程序运行时验证*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510181988.0A CN104765688B (zh) | 2015-04-17 | 2015-04-17 | 一种可动态部署规则的Java程序运行时验证*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104765688A CN104765688A (zh) | 2015-07-08 |
CN104765688B true CN104765688B (zh) | 2017-12-15 |
Family
ID=53647532
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510181988.0A Active CN104765688B (zh) | 2015-04-17 | 2015-04-17 | 一种可动态部署规则的Java程序运行时验证*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104765688B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106933714A (zh) * | 2017-03-09 | 2017-07-07 | 华东师范大学 | 基于时态逻辑的微控制器运行时验证方法 |
CN106951367A (zh) * | 2017-03-09 | 2017-07-14 | 华东师范大学 | 基于时态逻辑的微控制器运行时验证*** |
CN113191774A (zh) * | 2021-04-19 | 2021-07-30 | 深圳前海移联科技有限公司 | 一种可更新的智能合约的动态验证方法 |
CN113535568B (zh) * | 2021-07-22 | 2023-09-05 | 工银科技有限公司 | 应用部署版本的验证方法、装置、设备和介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6126330A (en) * | 1997-10-29 | 2000-10-03 | International Business Machines Corporation | Run-time instrumentation for object oriented programmed applications |
CN103336742A (zh) * | 2013-07-18 | 2013-10-02 | 北京航空航天大学 | 一种基于Android的自动化软件黑盒测试***及方法 |
-
2015
- 2015-04-17 CN CN201510181988.0A patent/CN104765688B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6126330A (en) * | 1997-10-29 | 2000-10-03 | International Business Machines Corporation | Run-time instrumentation for object oriented programmed applications |
CN103336742A (zh) * | 2013-07-18 | 2013-10-02 | 北京航空航天大学 | 一种基于Android的自动化软件黑盒测试***及方法 |
Non-Patent Citations (4)
Title |
---|
"Event-based runtime verification of Java programs";Marcelo d"Amorim 等;《ACM SIGSOFT Software Engineering Notes》;20050731;全文 * |
"JavaMOP: Efficient parametric runtime monitoring framework";Dongyun Jin 等;《2012 34th International Conference on Software Engineering (ICSE)》;20120609;全文 * |
"Mop: an efficient and generic runtime verification framework";Feng Chen 等;《OOPSLA "07 Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications》;20071025;全文 * |
"基于JAVA-MOP添加逻辑库的方法和策略";周戈 等;《中国电子商情·通信市场》;20140409;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN104765688A (zh) | 2015-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Liu et al. | Pat 3: An extensible architecture for building multi-domain model checkers | |
Henzinger et al. | The embedded systems design challenge | |
CN104765688B (zh) | 一种可动态部署规则的Java程序运行时验证*** | |
CN105868116B (zh) | 基于语义变异算子的测试用例生成和优化方法 | |
Weißleder | Test models and coverage criteria for automatic model-based test generation with UML state machines | |
Gupta et al. | Package level cohesion measurement in object-oriented software | |
CN102968368A (zh) | 一种遍历场景状态图的嵌入式测试用例设计与生成方法 | |
Wang et al. | Symbolic pruning of concurrent program executions | |
Kundu et al. | Partial order reduction for scalable testing of SystemC TLM designs | |
Rugina et al. | An architecture-based dependability modeling framework using AADL | |
Vo | Scalable formal dynamic verification of MPI programs through distributed causality tracking | |
Bunker et al. | Formal hardware specification languages for protocol compliance verification | |
Chouali et al. | Assembling components using sysml with non-functional requirements | |
CN106598766A (zh) | 一种针对ima资源共享机制的状态关联动态分析方法 | |
Jensen et al. | Tools and Algorithms for the Construction and Analysis of Systems | |
Guerrouat et al. | A component-based specification approach for embedded systems using FDTs | |
Zhang et al. | SystemC waiting-state automata | |
Bernardi et al. | Petri nets and dependability | |
Vassev et al. | Model checking for autonomic systems specified with ASSL | |
Benveniste et al. | Contracts for the design of embedded systems, Part II: Theory | |
Lund et al. | 4 Semantics of UML Models for Dynamic Behavior: A Survey of Different Approaches | |
Zhang et al. | GoDetector: Detecting concurrent bug in go | |
Kolano | Tools and techniques for the design and systematic analysis of real-time systems | |
Remenska | Bringing Model Checking Closer To Practical Software Engineering | |
Bogdanov et al. | Working together: Formal methods and testing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |