一种基于逆向工程的模型库构造方法

文档序号:6636930阅读:396来源:国知局
一种基于逆向工程的模型库构造方法
【专利摘要】本发明公开了一种基于逆向工程的模型库构造方法。该方法包括如下步骤:通过网络爬虫从互联网上抓取开源项目的源代码;清理抓取的源代码获取有效的源代码文件;对有效的源代码文件逆向工程分析构建初始的UML类图;对初始的UML类图进行精化处理得到精简的UML类图;将精简的UML类图保存至图数据库中。本发明可以将互联网上大量的源代码转换成为UML类图模型,并将这些模型精化后存入到非关系数据库,实现了模型库的构造。通过对逆向工程的进一步精化使得本发明产生的类图模型包含有更多的代码结构信息,较其他方法更精确。
【专利说明】一种基于逆向工程的模型库构造方法

【技术领域】
[0001] 本发明涉及计算机编程领域中的逆向工程,模型持久化工程。

【背景技术】
[0002] 随着开源浪潮的推进,万维网上涌现出了大量的开源代码网站,如Google Code, Sourceforge, Github等等,在这些网站上我们可以轻易地获得大量的开源源代码。而海量 的开源代码同时也带来了代码理解困难,代码查询困难,代码存在异构性等一系列的难题, 这些难题直接影响到了我们对开源代码的复用效率。
[0003] 软件模型是以结构化的视图来展现一个软件系统。对于人的感知来说,图形毫无 疑问的比文字便于理解,而且通过模型可以消除底层代码存在的异构性,这样便解决了代 码理解的难题。同时由代码产生的模型与源代码之间存在着一一对应的关系,通过理解模 型,理解模型中的结构可以同时理解代码中的结构,快速定位到代码中的核心部分,有利于 工程人员对代码进行分析和复用。遗憾的是现在万维网上虽然存在着大量的源代码,但是 却缺乏一个有效的,可使用的模型库。
[0004] 逆向工程(又称反向工程),是一种技术过程,即对一项目标产品进行逆向分析及 研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出 功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要 目的是,在不能轻易获得必要的生产信息下,直接从成品的分析,推导出产品的设计原理。
[0005] 逆向工程是一种分析目标系统的过程,其目的是识别出系统的各个组件以及它们 之间的关系,并以其它的形式或在较高的抽象层次上,重建系统的表征。软件逆向工程也可 被视作"开发周期的逆行"。在此定义下,对一项软件程序进行逆向工程,类似于逆行传统瀑 布模型中的开发步骤,即把实现阶段的输出(即软件程序)还原回在设计阶段所做的构思。 软件逆向工程仅仅是一种检测或分析的过程,它并不会更改目标系统。


【发明内容】

[0006] 本发明所要解决的问题是为互联网上开源代码构建模型,以方便软件工程师分析 使用。
[0007] 为解决上述问题,本发明采用的方案如下:
[0008] -种基于逆向工程的模型库构造方法,包括如下步骤:
[0009] Sl :通过网络爬虫从互联网上抓取开源项目的源代码;
[0010] S2 :清理抓取的源代码获取有效的源代码文件;
[0011] S3 :对有效的源代码文件逆向工程分析构建初始的UML类图;
[0012] S4 :对初始的UML类图进行精化处理得到精简的UML类图;
[0013] S5 :将精简的UML类图保存至图数据库中;
[0014] 其中,所述步骤S4包括如下步骤:
[0015] S41 :对源代码进行静态语义分析构建抽象语法树;
[0016] S42 :从抽象语法树中找出符合特定规则的结构,并从初始的UML类图中提取符合 特定规则的结构所对应的模型元素;
[0017] S43 :将提取的模型元素组成精简的UML类图。
[0018] 进一步,所述步骤S3和步骤S4,步骤S4和步骤S5之间采用基于XMI格式的UML 模型交换文件作为中间媒体。
[0019] 进一步,所述图数据库为Ne〇4j数据库。
[0020] 进一步,所述步骤S5包括如下步骤:
[0021] S51 :将精简的UML类图中的类元作为图结构的节点存入图数据库;
[0022] S52:将精简的UML类图中的类元之间的关系作为图结构的节点关系存入图数据 库。
[0023] 本发明的技术效果如下:
[0024] 1、本发明可以将互联网上大量的源代码转换成为UML类图模型,并将这些模型精 化后存入到非关系数据库,实现了模型库的构造。
[0025] 2、通过对逆向工程的进一步精化使得本发明产生的类图模型包含有更多的代码 结构信息,较其他方法更精确。

【具体实施方式】
[0026] 下面对本发明做进一步详细说明。
[0027] 本发明的一种基于逆向工程的模型库构造方法主要包括以下五个步骤:
[0028] Sl :通过网络爬虫从互联网上抓取开源项目的源代码;
[0029] S2 :清理抓取的源代码获取有效的源代码文件;
[0030] S3 :对有效的源代码文件逆向工程分析构建初始的UML类图;
[0031] S4 :对初始的UML类图进行精化处理得到精简的UML类图;
[0032] S5 :将精简的UML类图保存至图数据库中。
[0033] 本实施例具体通过编写java代码的程序实现。首先步骤Sl中,通过编写网络爬 虫程序实现从万维网中抓取开源项目的源代码,主要包括两个步骤:
[0034] S11 :使用j soup解析对应开源网站的网页获取项目地址;
[0035] S12 :使用项目地址对应协议的客户端如git,svn,hg批量下载对应的源代码。
[0036] 步骤Sll中,jsoup是一款Java的HTML解析器,提供了一套非常省力的API可直 接解析某个URL地址、HTML文本内容。以google code为例说明运行方式。首先,人工获 取并输入google code的项目列表作为网络爬虫程序的起始网页。然后网络爬虫程序自动 对爬取的内容进行删选,获取每一个项目的主页;再对每一个项目的主页进行分析获得每 一个项目源代码的地址和项目的名称;最后通过git,svn,hg等协议的批处理程序批量获 取源代码。
[0037] 步骤S2 :清理抓取的源代码获取有效的源代码文件。由于步骤Sl抓取得到的源 代码项目中包含有非代码的文件,比如资源文件,而本发明构建UML类图模型只需要分析 源代码文件,因此需要做一步清理的工作,留下有效的源代码文件。例如在java源代码项 目中,只需要留下带有java后缀的源代码文件即可,其他文件可以删除。
[0038] 步骤S3 :对有效的源代码文件逆向工程分析构建初始的UML类图。本步骤的输 入是步骤S2得到的有效的源代码文件,输出为UML类图。本步骤具体通过ArgoUML实现。 ArgoUML是一款开源的UML工具,可以对源代码逆向工程分析生成UML类图。具体如下: [0039] S31 :使用ArgoUML对源代码进行解析,构造 UML类图;
[0040] S32 :使用ArgoUML将构造的UML类图保存为基于XMI格式的UML模型交换文件。
[0041] 也即,本步骤输出的UML类图通过保存于基于XMI格式的UML模型交换文件中。本 发明中步骤S3和步骤S4,步骤S4和步骤S5之间采用基于XMI格式的UML模型交换文件 作为中间媒体的意思是:步骤S3输出的初始的UML类图保存于基于XMI格式的UML模型交 换文件中,保存在基于XMI格式的UML模型交换文件中的初始的UML类图作为步骤S4的输 入;步骤S4输出的精简的UML类图保存于基于XMI格式的UML模型交换文件中,保存在基 于XMI格式的UML模型交换文件中的精简的UML类图作为步骤S5的输入。
[0042] 步骤S4 :对初始的UML类图进行精化处理得到精简的UML类图。该步骤包括以下 三个子步骤:
[0043] S41 :对源代码进行静态语义分析构建抽象语法树;
[0044] S42 :从抽象语法树中找出符合特定规则的结构,并从初始的UML类图中提取符合 特定规则的结构所对应的模型元素;
[0045] S43 :将提取的模型元素组成精简的UML类图。
[0046] 以java代码为例,步骤S41中,使用java语法分析工具分析jdt分析源代码得到 java的AST语法树。步骤S42中,从抽象语法树中找出符合特定规则的结构采用如下表1 的匹配规则,从初始的UML类图中提取符合表1匹配规则的模型元素,然后将提取的模型元 素组成精简的UML类图。
[0047]

【权利要求】
1. 一种基于逆向工程的模型库构造方法,其特征在于,包括如下步骤: 51 :通过网络爬虫从互联网上抓取开源项目的源代码; 52 :清理抓取的源代码获取有效的源代码文件; 53 :对有效的源代码文件逆向工程分析构建初始的UML类图; 54 :对初始的UML类图进行精化处理得到精简的UML类图; 55 :将精简的UML类图保存至图数据库中; 其中,所述步骤S4包括如下步骤: 541 :对源代码进行静态语义分析构建抽象语法树; 542 :从抽象语法树中找出符合特定规则的结构,并从初始的UML类图中提取符合特定 规则的结构所对应的模型元素; 543 :将提取的模型元素组成精简的UML类图。
2. 如权利要求1所述的基于逆向工程的模型库构造方法,其特征在于,所述步骤S3和 步骤S4,步骤S4和步骤S5之间采用基于XMI格式的UML模型交换文件作为中间媒体。
3. 如权利要求1所述的基于逆向工程的模型库构造方法,其特征在于,所述图数据库 为Neo4j数据库。
4. 如权利要求1所述的基于逆向工程的模型库构造方法,其特征在于,所述步骤S5包 括如下步骤: S51 :将精简的UML类图中的类元作为图结构的节点存入图数据库; S52:将精简的UML类图中的类元之间的关系作为图结构中的节点关系存入图数据库。
【文档编号】G06F17/30GK104391706SQ201410720708
【公开日】2015年3月4日 申请日期:2014年12月2日 优先权日:2014年12月2日
【发明者】张天, 许涵斌, 李宣东 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1