一种基于运行日志的软件结构复现的方法技术

技术编号:26478260 阅读:39 留言:0更新日期:2020-11-25 19:22
本发明专利技术公开了一种基于运行日志的软件结构复现的方法,该方法首先基于插装技术对软件系统进行动态插装,并获得原始日志;然后对原始日志进行预处理操作,即按照业务请求对原始日志分组并得到事件日志;最后使用首次提出的逆向挖掘算法,对事件日志进行挖掘并最终复现软件系统的结构模型。相对于传统获取软件结构模型的方法,本发明专利技术并不需要软件系统的源代码,而是基于成熟的插装技术,对使用Java语言实现的软件系统在运行时植入检测代码从而获得原始日志,最终挖掘得到结构模型。也可以对一个部署完成的软件系统在其正常工作时进行动态插装,而不对软件系统的正常使用造成太大影响。此外,本发明专利技术还提供了一种描述软件结构的形式化类图模型。

【技术实现步骤摘要】
一种基于运行日志的软件结构复现的方法
本专利技术涉及软件逆向工程
,具体涉及一种基于运行日志的软件结构复现的方法。
技术介绍
软件结构模型可以帮助人们理解软件系统的内部组成结构,对软件系统的理解和维护起到极其重要的作用。然而,很多情况下软件系统的模型往往并不是能够直接获得的。例如一些早期就存在的遗留软件,很多文档或者模型已经缺失,或者在快速开发过程中就本身就缺少详细的模型文档,甚至很多遗留软件的源代码都已经缺失。这使得人们难以理解这些软件,从而导致维护遗留系统变成一件很困难的事情,也就无法对软件进行进一步的重用。软件逆向工程能够解决上述问题,具有重大现实意义和经济价值,也越来越受到人们的重视。然而,现有的获得软件结构模型的相关工作都属于静态分析,即通过对软件系统的源代码或者编译后的目标码进行静态分析,从中抽象出软件结构模型的过程。然而正如上文所述,其实在某些情况下用户无法获得软件系统的源代码,这些工作也就无法适用了。同时静态分析常常利用源代码中的不同文件的包含来确定彼此之间的关系,然而很多时候即使包含了某文件的头文件,但在实际上却本文档来自技高网...

【技术保护点】
1.一种基于运行日志的软件结构复现的方法,其特征在于,所述的方法包括以下步骤:/nS1、针对一个由Java编程语言实现的软件系统,基于插装技术在其处于运行时进行动态插装,并收集到原始日志;/nS2、将步骤S1中得到的原始日志进行预处理得到事件日志,即通过识别软件系统处理的业务请求将原始日志中的事件进行分组,从而得到事件日志,所述的事件日志中,一个事件集合称作一个实例,即一个实例是一个事件序列,因此事件日志是实例的集合;/nS3、对步骤S2中得到的事件日志进行词法分析与信息提取,获得事件日志中的类组件集合;/nS4、对步骤S2中得到的事件日志以及步骤S3中获得的类组件集合进行逆向挖掘,获得类组件...

【技术特征摘要】
1.一种基于运行日志的软件结构复现的方法,其特征在于,所述的方法包括以下步骤:
S1、针对一个由Java编程语言实现的软件系统,基于插装技术在其处于运行时进行动态插装,并收集到原始日志;
S2、将步骤S1中得到的原始日志进行预处理得到事件日志,即通过识别软件系统处理的业务请求将原始日志中的事件进行分组,从而得到事件日志,所述的事件日志中,一个事件集合称作一个实例,即一个实例是一个事件序列,因此事件日志是实例的集合;
S3、对步骤S2中得到的事件日志进行词法分析与信息提取,获得事件日志中的类组件集合;
S4、对步骤S2中得到的事件日志以及步骤S3中获得的类组件集合进行逆向挖掘,获得类组件之间的关系信息;
S5、利用形式化后的类图模型记录并描述上述得到的类组件集合与类组件之间的关系信息,进而构建最终的软件结构模型,其中,所述的软件结构模型可进行可视化展示。


2.根据权利要求1所述的一种基于运行日志的软件结构复现的方法,其特征在于,所述的步骤S1过程如下:
S101、在软件系统每个部署的物理节点上,通过分布式插装工具对软件系统进行动态插装处理,该分布式插装工具利用java_agent库和javassist库所提供的技术支持,在软件系统运行时动态地对其植入获得方法运行信息的监测代码;
S102、插装工具在每个部署的物理节点上分布式地产生运行信息,通过日志,对每个部署的物理节点上产生的方法运行信息进行统一的日志收集,并按方法运行信息的产生时间进行排序,得到原始日志。


3.根据权利要求1所述的一种基于运行日志的软件结构复现的方法,其特征在于,所述的原始日志是由若干条软件系统中方法的运行信息组成,一条方法运行信息被定义为一个事件,一个事件包括当前方法执行的相关信息以及当前方法所属类的相关信息,所述的当前方法执行的相关信息包括当前方法名、执行当前方法的线程号、执行当前方法的节点信息、执行当前方法的时间戳与标识当前事件为开始还是结束的时间标识、以及当前执行当前方法的资源信息;所述的当前方法所属类的相关信息包括类名、属性信息、方法信息、构造信息、当前类继承的父类以及当前类实现的接口信息,当前方法执行的相关信息和当前方法所属类的相关信息共同组成一条事件记录。


4.根据权利要求1所述的一种基于运行日志的软件结构复现的方法,其特征在于,所述的步骤S2过程如下:
S201、根据事件的直接调用关系将步骤S1中获得的原始日志初步划分成若干个事件集合;
S202、将步骤S201得到的若干个事件集合按照线程之间的父子线程关系将属于一对父子线程的事件集合进行合并;
S203、将步骤S202得到的若干个事件集合按照节点的通信将相互通信的事件集合进行合并,并得到事件日志。


5.根据权利要求1所述的一种基于运行日志的软件结构复现的方法,其特征在于,所述的步骤S3过程如下:
S301、提取步骤S2得到的事件日志中的一条事件a,若此时在类组件集合中不存在事件a所对应的类组件,则收集事件中的类名、方法信息、属性信息以及构造信息并初步构建成一个类组件,然后将类组件加入类组件集合,按照以上操作对事件日志中的所有事件进行处理,得到初步类组件集合;
S302、提取步骤S301得到的初步类组件集合中的一个类组件A,进行如下两步的判断:
判断1:若类组件A实现了一个接口i,则构建一个类名为接口i且其他信息为空的类组件,并将构...

【专利技术属性】
技术研发人员:徐杨周宏晨林少辉梁梓峰李东
申请(专利权)人:华南理工大学
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1