CN115237469A - 一种基于云服务源码的多模式架构逆向解析方法 - Google Patents
一种基于云服务源码的多模式架构逆向解析方法 Download PDFInfo
- Publication number
- CN115237469A CN115237469A CN202210868373.5A CN202210868373A CN115237469A CN 115237469 A CN115237469 A CN 115237469A CN 202210868373 A CN202210868373 A CN 202210868373A CN 115237469 A CN115237469 A CN 115237469A
- Authority
- CN
- China
- Prior art keywords
- source code
- dependency
- module
- tree
- maven
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
Abstract
本发明涉及一种基于云服务源码的多模式架构逆向解析方法,通过工具获取云服务器上仓库上的程序源代码,然后通过解析源代码来完成逆向解析出用整个程序的架构。该方法可以调用解析工具,获取所有源代码文件的抽象语法树,根据抽象语法树信息构造源代码工程的程序分析树,并分析程序分析树的元素(文件、类、函数、变量)耦合信息,构造树节点间的依赖关系,整合程序分析树的元素耦合信息,构造所有源代码文件的依赖关系图;可对生成的源代码文件依赖图针对经典模式、Maven项目单模块模式、Maven项目多模块模式聚合出源代码模块的依赖关系图和组件的关系依赖图。
Description
技术领域
本发明涉及一种解析方法,具体涉及一种基于云服务源码的多模式架构逆向解析方法,属于软件维护中多模式架构逆向解析的技术领域。
背景技术
逆向工程(Reverse Engineering)技术被定义为通过对系统的分析,实现对目标系统由低层到高层的抽象,描述软件系统的结构、逻辑以及组件之间的相互作用。通常首先以―种容易理解和分析的形式收集系统信息,然后逆向恢复到更高抽象层次上的系统模型(如组件图)。这些数据还可以进一步被用于逆向分析,从而获得更高抽象层次上的系统表示,如用于设计模式、系统体系结构等的逆向恢复。“架构分层结构信息恢复方法”实际上属于“逆向工程”的研究和实践范畴,属于软件架构恢复技术领域,其主要目的是从工程项目中获取所需的架构信息。
在当今软件飞速发展的时代,软件系统的复杂度将随着软件的演化而不断增大,比如Android演化到如今的代码规模已经突破亿行。同时软件系统的质量随着软件的演化而逐渐下降,对该软件系统的维护也越来越难,维护成本也随之提高。在这种情况下,人们逐渐认识到软件架构在软件工程中的重要性,软件架构能为用户提供一个设计层次上的视图,使用户能够更加容易理解系统,并且能够准确定位所需维护的代码和影响的记围。软件架构可以帮助开发人员在保持外部行为不变的前提下,通过改变软件内部结构来增加软件易理解性、可扩展性和可重用性等,进而改进软件质量。
虽然已有一些架构逆向解析的方法,但存在很多问题,如不完全能够全自动恢复、恢复时间长、无法恢复超大型项目、恢复的架构缺乏层次易理解性差等问题。本发明从项目源码出发,通过逆向解析技术获得源码的文件依赖关系图、模块依赖关系图、组件依赖关系图,并可为超大型项目提供架构恢复服务。
发明内容
本发明正是针对现有技术中存在的问题,提供一种基于云服务源码的多模式架构逆向解析方法,该技术方案提供基于云服务源码的多模式架构逆向解析方法,通过分析云服务源码分析树的元素(文件、类、函数、变量)耦合信息,提取程序不同粒度层次实体间的信息进一步提取出架构层面的耦合关系,来完成对整个云服务程序的逆向解析。
为了实现上述目的,本发明的技术方案如下,一种基于云服务源码的多模式架构逆向解析方法,所述方法包括以下步骤:
步骤1:获取云服务源码,配置获取云服务器上源码的工具,获取所需要逆向解析项目的源码及相关代码信息。
步骤2:根据解析获取的源代码,提取源码信息,生成源码文件的依赖关系图:
步骤3:根据生成的源码文件的依赖关系图,进一步构建模块的关系依赖图:
步骤4:根据生成的源码模块的依赖关系图,进一步构建组件的依赖关系图,完成逆向解析。
步骤2具体如下:
1)编写源码解析器,获取所有源代码文件的抽象语法树;
2)根据抽象语法树信息构造源代码工程的程序分析树,分析程序分析树的元素(文件、类、函数、变量)耦合信息,构造树节点间的依赖关系;
3)整合程序分析树的元素耦合信息,构造所有源代码文件的依赖关系图。
步骤3具体如下:
1)进行模块化预处理,依据文件间依赖关系以及目录结构信息,对文件依赖图进行聚合,消除噪音文件,并使聚合的模块的粒度介于文件与目录之间;
2)模块化过程:
a)经典项目模式的模块化:通过判断两个节点是否存在继承、实现、声明定义,判断两个节点是否存在双向依赖、闭环依赖等规则在文件依赖图的基础上去除了强依赖类型和结构,从而完成模块化;
b)Maven单模块模式的模块化:Maven单模块在模块化处理过程中,查找项目中符合controller、dao、service命名规则的目录名,完成模块化处理;
c)Maven多模块模式的模块化:Maven是一个以POM文件作为项目对象模型,通过一小段描述信息来管理项目的构建,通过解析POM文件得到源码的POM依赖树,查找POM依赖树中的叶子节点,完成模块化处理;
3)整合模块化过程中产生的信息,生成源码模块的依赖关系图。
步骤4:根据生成的源码模块的依赖关系图,进一步构建组件的依赖关系图,完成逆向解析,分为三种不同的组件化规则:
1)经典项目模式的组件化,
a)借助模块的依赖关系图计算考量两实体间依赖关系的强弱的数值,即模块间的依赖强度;
b)将所有的依赖密集对根据实体间的依赖强度大小排序,依赖强度大的实体优先聚合,不断迭代,最终得到组件依赖图;
2)Maven单模块项目的组件化,
在Maven项目单模块的组件化过程中,由于POM依赖树只有单节点,所以将
项目名称作为组件名,且只有一个组件。
3)Maven多模块项目的组件化,
遍历POM依赖树,将POM根节点下的第一层POM文件节点的名称作为组件名,完成Maven多模块组件化处理。
本发明方法从云服务器获取程序源码,提取程序源码中不同粒度层次实体间的信息进一步提取出架构层面的耦合关系,来完成对整个云服务程序的逆向解析。
相对于现有技术,本发明具有如下优点,本发明方法通过从云服务器上获取得到的源码,提取出程序源码的语法树,进而提取出源码中不同层次粒度实体间的依赖关系进而逆向解析出系统架构。本发明与现有逆向解析方法相比,主要有以下一些优点:
1、本发明采用逆向解析方法,是针对部署在云服务器上的程序,能够全自动化获取程序源码,能够有效的缩短逆向解析云服务程序的时间。传统的逆向解析方法,需要手动将云服务上的项目下载到本地。随着软件的快速发展,系统复杂度越来越大,开发人员越来越多,从而云服务器程序在开发过程中会部署在Gitlab上,难以将程序导入至逆向解析工具中。而本发明采用的逆向解析方法,集成了云服务器代码管理工具,可以自动化操作部署在云服务器上的程序源码,解决了传统逆向解析方法对于云服务源码难获取的缺点,能够效的缩短逆向解析云服务程序的时间;
2、与传统逆向解析方法相比,本方法基于源代码的多信息架构提取即是通过对源代码的自动分析,提取出代码各逻辑实体的相关信息,如文件间的引用关系,类之间的泛化关系(继承、实现)、关联关系(组合、聚合及其它关联关系)及依赖关系(参数类型依赖、返回类型依赖、声明变量类型依赖),函数间的调用关系等。本方法解析源码中所有实体间的相关信息,并对全部实体相关信息进行简化处理,进一步提取出云服务程序的文件依赖图。
3、与传统逆向解析方法相比,本方法采用自底向上与自顶向下相结合的方法,既有自底向上对项目源码底层信息的掌握,又有自顶向下对项目架构信息的理解,解决了自底向上的聚类算法其准确度和效率的存在问题以及自顶向下中项目项目架构信息难获取完备的设计文档的问题。
4、与传统逆向解析方法相比,本方法提高架构图的易理解性,实现多层次的架构恢复,提取出程序的模块依赖图和组件依赖图,产生不同粒度的抽象,并支持不同层次之间的映射关系,以便相关人员既能对软件架构产生宏观认识,也能逐层深入,了解架构与实现之间的联系。本方法将对软件实现多层次架构恢复,控制构件的颗粒度,采取逐层深入的方式,避免生成架构图过于复杂,生成既面向开发人员又面向管理人员的多层次的架构图。
附图说明
图1是本发明的流程图;
图2是本发明的体系结构示意图,表示本发明中涉及的数据处理组件及其之间的联系;
图3是本发明的流程图;
图4是具体实施方式实施例中的接口组合流程图。
具体实施方式
为了加深对本发明的理解,下面结合附图对本实施例做详细的说明。
实施例1:参见图1-图4,一种基于云服务源码的多模式架构逆向解析方法,图1给出了我们所采用的方法中具体的执行步骤,下面结合附图1对发明的技术方案中每个步骤进行详细说明:
1.从服务器获取源码。本方法采用JGit工具,在后端编写一个可以自动化获取部署在云服务器上源码的服务。在自动化获取云服务源码服务上,本方法可以记录云服务程序的创建人、创建时间、拉取分支、拉取程序人、拉取时间、拉取结果、日志记录。自动化获取云服务源码后,将记录保存至MySQL,用于后续的代码逆向解析。
2.逆向解析源码得到程序的文件依赖图。通过分析程序的抽象语法树,提取各层次粒度实体间依赖信息,如文件间的引用关系,类之间的泛化关系(继承、实现)、关联关系(组合、聚合及其它关联关系)及依赖关系(参数类型依赖、返回类型依赖、声明变量类型依赖),函数间的调用关系。整合元素间的耦合挂你,构造所有源代码文件的依赖关系图。
3.对文件依赖图信息进行整合得到模块依赖图。进行模块化预处理,依据文件间依赖关系以及目录结构信息,对文件依赖图进行聚合,消除噪音文件,并使聚合的模块的粒度介于文件与目录之间。然后针对经典模式(没有用Maven构建的项目),过判断两个节点是否存在继承、实现、声明定义,判断两个节点是否存在双向依赖、
闭环依赖等规则在文件依赖图的基础上去除了强依赖类型和结构,从而完成模块化处理;针对Maven单模块项目,Maven单模块多使用MVC三层架构分层,查找项目中符合controller、dao、service命名规则的目录名,完成模块化处理;针对Maven
多模块项目,Maven是一个以POM文件作为项目对象模型,通过一小段描述信息来管理项目的构建。通过解析POM文件得到源码的POM依赖树,查找POM依赖树中的叶子节点,完成模块化处理。
4.对模块依赖图信息进行组件化处理得到组件依赖图。对模块依赖图进行聚合,得到组件依赖图。具体的步骤为:针对经典模式(没有用Maven构建的项目),借助模块的依赖关系图计算考量两实体间依赖关系的强弱的数值,将所有的依赖密集对根据实体间的依赖强度大小排序,依赖强度大的实体优先聚合,不断迭代,最终得到组件依赖图;针对Maven单模块项目,将文件名作为唯一组件;针对Maven多模块项目,解析得到项目的Pom依赖树,将第一层树节点的ID名称作为组件。
实施例2:
为了方便描述,我们假定有如下简化的应用实例:
目标软件云服务程序,有多个文件如a1、a2、a3、a4,b1、b2、b3、b4,c1、c2、c3、c4。
1.设计获取云服务源码接口
该接口所需参数为云服务器所需要的账号、密码,其格式均为String类型。通过所获取的账号密码,对所在云服务上的程序拉取源码,将云服务程序的创建时间、创建人、拉取分支、拉取时间、拉取代码结果及日志记录在数据库中。
2.逆向解析源码得到程序的文件依赖图
调用JDT解析器,获取所有源代码文件(a1、a2、a3、a4,b1、b2、b3、b4,c1、c2、c3、c4)的抽象语法树,分析源代码元素的各种耦合信息,通过分析类的成员变量,获取类之间的组合和关联信息,整合程序分析树的元素耦合信息,构造所有源代码文件(a1、a2、a3、a4,b1、b2、b3、b4,c1、c2、c3、c4)的依赖关系图,如图2所示。
3.对文件依赖图信息进行整合得到模块依赖图
进行模块化预处理,在形成文件依赖图之后,依据文件间依赖关系以及目录结构信息,对文件依赖图进行聚合,消除噪音文件,并使聚合的模块的粒度介于文件与目录之间。最后按照经典模式、Mavne单模块模式、Maven多模块模式得到多个模块之间的依赖关系图(a1、a2),(a3、a4),(b1、b2),(b3、b4),(c1、c2),(c3、c4),如图3所示;
4.对模块依赖图信息进行组件化处理得到组件依赖图
对所获得的模块依赖图进行组件化处理。考量所有模块的依赖强度{a1、a2},{a3、a4},{b1、b2},{b3、b4},{c1、c2},{c3、c4},按照经典模式、Maven单模块模式、Maven多模块模式提取出组件级别的层次结构,如A{(a1、a2),(a3、a4)},B{(b1、b2),(b3、b4)},C{c1、c2),(c3、c4)},如图4所示。
使用本发明的方法,可以自动获取云服务源码,完善自动化逆行解析的流程;然后通过对源码进行逆向解析,提取源码中元素的耦合信息,完整的元素耦合信息数量庞大、难以理解,我们将简化这些信息,进一步整合得到源码的文件依赖图;提取出程序的模块依赖图和组件依赖图,实现多层次的架构恢复,从而更易理解系统架构。
需要说明的是上述实施例,并非用来限定本发明的保护范围,在上述技术方案的基础上所作出的等同变换或替代均落入本发明权利要求所保护的范围。
Claims (5)
1.一种基于云服务源码的多模式架构逆向解析方法,其特征在于,所述方法包括以下步骤:
步骤1:获取云服务源码:
步骤2:根据解析获取的源代码,提取源码信息,生成源码文件的依赖关系图:
步骤3:根据生成的源码文件的依赖关系图,进一步构建模块的关系依赖图:
步骤4:根据生成的源码模块的依赖关系图,进一步构建组件的依赖关系图,完成逆向解析。
2.根据权利要求1所述的基于云服务源码的多模式架构逆向解析方法,其特征在于,
步骤1:获取云服务源码,配置获取云服务器上源码的工具,获取所需要逆向解析项目的源码及相关代码信息。
3.根据权利要求2所述的基于云服务源码的多模式架构逆向解析方法,其特征在于,
步骤2具体如下:
1)编写源码解析器,获取所有源代码文件的抽象语法树;
2)根据抽象语法树信息构造源代码工程的程序分析树,分析程序分析树的元素耦
合信息,构造树节点间的依赖关系;
3)整合程序分析树的元素耦合信息,构造所有源代码文件的依赖关系图。
4.根据权利要求3所述的基于云服务源码的多模式架构逆向解析方法,其特征在于,
步骤3具体如下:
1)进行模块化预处理,依据文件间依赖关系以及目录结构信息,对文件依赖图进行聚合,消除噪音文件,并使聚合的模块的粒度介于文件与目录之间;
2)模块化过程:
a)经典项目模式的模块化:通过判断两个节点是否存在继承、实现、声明定义,判
断两个节点是否存在双向依赖、闭环依赖等规则在文件依赖图的基础上去除了强
依赖类型和结构,从而完成模块化;
b)Maven单模块模式的模块化:Maven单模块在模块化处理过程中,查找项目中
符合controller、dao、service命名规则的目录名,完成模块化处理;
c)Maven多模块模式的模块化:Maven是一个以POM文件作为项目对象模型,通
过一小段描述信息来管理项目的构建,通过解析POM文件得到源码的POM依赖
树,查找POM依赖树中的叶子节点,完成模块化处理;
3)整合模块化过程中产生的信息,生成源码模块的依赖关系图。
5.根据权利要求3或4所述的基于云服务源码的多模式架构逆向解析方法,其特征在于,步骤4:根据生成的源码模块的依赖关系图,进一步构建组件的依赖关系图,完成逆向解析,分为三种不同的组件化规则:
1)经典项目模式的组件化,
a)借助模块的依赖关系图计算考量两实体间依赖关系的强弱的数值,即模块间的依赖强度;
b)将所有的依赖密集对根据实体间的依赖强度大小排序,依赖强度大的实体优
先聚合,不断迭代,最终得到组件依赖图;
2)Maven单模块项目的组件化,
在Maven项目单模块的组件化过程中,由于POM依赖树只有单节点,所以将
项目名称作为组件名,且只有一个组件。
3)Maven多模块项目的组件化,
遍历POM依赖树,将POM根节点下的第一层POM文件节点的名称作为组件名,完成Maven多模块组件化处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210868373.5A CN115237469A (zh) | 2022-07-22 | 2022-07-22 | 一种基于云服务源码的多模式架构逆向解析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210868373.5A CN115237469A (zh) | 2022-07-22 | 2022-07-22 | 一种基于云服务源码的多模式架构逆向解析方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115237469A true CN115237469A (zh) | 2022-10-25 |
Family
ID=83676081
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210868373.5A Pending CN115237469A (zh) | 2022-07-22 | 2022-07-22 | 一种基于云服务源码的多模式架构逆向解析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115237469A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116541307A (zh) * | 2023-06-29 | 2023-08-04 | 云筑信息科技(成都)有限公司 | 一种对比pom版本的数据处理方法 |
-
2022
- 2022-07-22 CN CN202210868373.5A patent/CN115237469A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116541307A (zh) * | 2023-06-29 | 2023-08-04 | 云筑信息科技(成都)有限公司 | 一种对比pom版本的数据处理方法 |
CN116541307B (zh) * | 2023-06-29 | 2023-10-20 | 云筑信息科技(成都)有限公司 | 一种对比pom版本的数据处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Tisi et al. | On the use of higher-order model transformations | |
Didonet Del Fabro et al. | Towards the efficient development of model transformations using model weaving and matching transformations | |
Rasool et al. | Flexible design pattern detection based on feature types | |
WO2007124057A2 (en) | Computer program generating | |
CN103714290A (zh) | 一种软件行为获取、监控与验证方法 | |
CN115237469A (zh) | 一种基于云服务源码的多模式架构逆向解析方法 | |
CN109992271B (zh) | 一种基于代码词汇和结构依赖的分层架构识别方法 | |
Muhammad et al. | Near-miss clone patterns in web applications: An empirical study with industrial systems | |
CN105988792A (zh) | 核电软件开发自动化系统和方法 | |
Boronat et al. | Two Experiences in Software Dynamics. | |
Folli et al. | Refactoring of UML models using AGG | |
Smirnov et al. | Revizor: a data-driven approach to automate frequent code changes based on graph matching | |
CN113946568A (zh) | 一种数据治理系统以及方法 | |
Rowe et al. | Rotor: First steps towards a refactoring tool for ocaml | |
Romanov et al. | Approaches for Representing Software as Graphs for Machine Learning Applications | |
Kaur et al. | Review on Software Cloning and Clone Detection | |
CN108647018A (zh) | 可实时预览的代码生成系统 | |
García-Díaz et al. | MCTest: towards an improvement of match algorithms for models | |
Karthik et al. | A collaborative method for code clone detection using a deep learning model | |
Selway et al. | Integration of visual contracts and model transformation for enhanced MDE development | |
Welch et al. | Engineering and employing reusable software components for modular verification | |
Jordan¹ et al. | Check for updates Automated Integration of Heteregeneous Architecture Information into a Unified Model | |
Stephan et al. | Model clone detection and its role in emergent model pattern mining | |
Mushtaq et al. | Detection of J2EE patterns based on customizable features | |
Shahzad et al. | A clone management framework to improve code quality of foss projects |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |