Halo:基于Eclipse的逆向工程工具

video

贡献于2013-10-26

字数:0 关键词: Eclipse开发工具

Halo ::::基于基于基于基于 Eclipse 的逆向工程工具的逆向工程工具的逆向工程工具的逆向工程工具 王王王王 鑫鑫鑫鑫 1,,,,裘裘裘裘 佺佺佺佺 2,,,,孙洪涛孙洪涛孙洪涛孙洪涛 3 (1. 天津大学计算机科学与技术学院,天津 300072;2. 天津人民广播电台网络部,天津 300070 ; 3. 天津市公安局信息通信处,天津 300020) 摘摘摘摘 要要要要::::在集成开发环境 Eclipse 平台上为 Java 项目构建逆向工程工具 Halo ,描述 Halo 工具的设计思路和实现步骤,包括利用抽象语法 树从程序源代码提取模型信息的方法,通过改进的 Sugiyama 布局算法将提取出的逻辑模型变换成适合于开发者阅读的 UML 类图,讨论 Halo 工具构建过程中的技术难点并给出相应的解决方案。实验结果表明,Halo 工具能够满足开发者对逻辑模型可视化的需求。 关键词关键词关键词关键词::::逆向工程;Eclipse 平台;UML 类图;自动布局;Halo 工具 Halo: Reverse Engineering Tool Based on Eclipse WANG Xin 1, QIU Quan 2, SUN Hong-tao 3 (1. School of Computer Science and Technology, Tianjin University, Tianjin 300072, China; 2. Network Department, Tianjin People’s Broadcasting Station, Tianjin 300070, China; 3. Information and Communication Department, Tianjin Public Security Bureau, Tianjin 300020, China) 【【【【Abstract 】】】】This paper presents an approach to build a reverse engineering tool, named Halo, for Java projects on the Eclipse platform, a popular integrated development environment; it describes the design ideas and the implementation steps of the Halo tool, which include how to extract model information from program source code using abstract syntax trees, and how to transform, using the adapted Sugiyama layout algorithm, the extracted logical model to the UML class diagrams that are suitable for developers to read. It also discusses some technical difficulties in building the Halo tool and gives the corresponding solutions. Experimental results show that the Halo tool is able to meet the requirements of developers for RE. 【【【【Key words 】】】】reverse engineering; Eclipse platform; UML class diagram; automatic layout; Halo tool DOI: 10.3969/j.issn.1000-3428.2012.01.011 计 算 机 工 程 Computer Engineering 第 38 卷 第 1 期 Vol.38 No.1 2012 年 1 月 January 2012 ····软件技术与数据库软件技术与数据库软件技术与数据库软件技术与数据库···· 文章编号文章编号文章编号文章编号::::1000 ————3428(2012)01 ————0045 ————03 文献标识码文献标识码文献标识码文献标识码::::A 中图分类号中图分类号中图分类号中图分类号::::TP311 1 概述概述概述概述 随着计算机应用领域的不断扩大,需要解决的问题复杂 度越来越高,软件开发的规模与日俱增。面向对象的分析与 设计[1] 虽然在一定程度上提高了软件开发生产率,但大规模 系统开发还必须遵循迭代式和增量式过程[2] 。设计模型会影 响程序代码的编写;程序代码的实现细节也同样会影响设计 模型的总体架构。从设计转换到实现称为正向工程,从实现 转换到设计称为逆向工程。正向工程和逆向工程合在一起称 为双向工程。 设计模型在较高抽象级别上展现系统的静态结构和动态 行为,在设计阶段它受到了开发者的高度重视。但进入实现 阶段,细节信息不断涌入,往往迫于时间压力,这些细节不 能被及时反映到模型上,模型与实现之间不能有效同步,设 计模型此时便失去了其原有作用。如果能够根据实现代码自 动恢复设计模型,即进行一次逆向工程操作,那么新模型又 可以准确表明系统的当前情况。开发者可以在新模型的基础 上继续完善代码。 要进行高效率、高可靠性的迭代式、增量式开发必须借 助于计算机辅助软件工程(Computer Aided Software Engi- neering, CASE)工具,以实现双向工程操作的自动化。由于统 一建模语言(Unified Modeling Language, UML)[3] 设计模型和 通用程序设计语言(如C++ 和Java)之间存在着语法和语义不 一致现象[4] ,因此从实现代码自动恢复到UML 模型的逆向工 程一直是软件工程领域的研究热点。 本文基于 Eclipse 平台构建了一个名为 Halo 的逆向工程 工具。从整体上看,Halo 工具将 Java 源代码作为输入数据; 将 UML 类图作为输出结果。Halo 工具从程序源代码生成的 抽象语法树中提取模型信息,通过改进的 Sugiyama 布局算 法[5] 将提取出的逻辑模型变换成适合于开发者阅读的 UML 类图。 2 逆向工程逆向工程逆向工程逆向工程 文献[6] 将逆向工程定义为:对一个软件系统进行分析, 目标是:(1) 识别组成系统的组件及其相互关系;(2) 以另外一 种形式或在更高的抽象级别上重新表示系统。 本文讨论的逆向工程是指从源代码到设计模型的转换, 即将源代码文本作为分析对象,得到的结果是用建模语言表 示的设计模型。这符合上述定义中的第(2) 条,即将系统表示 由较低抽象级别转换为较高抽象级别。 2.1 CASE 工具构造工具构造工具构造工具构造 作为软件工程的一个重要分支,逆向工程的主要目标是 改善软件开发环境,提高软件的生产率,实现迭代式开发的 自动化。逆向工程技术可以直接用于构造 CASE 工具。 CASE 工具应该全面支持双向工程已是不争的事实。然 而,无论是知名的商业工具(如 Rational Rose),还是流行的 基金项目基金项目基金项目基金项目::::国家自然科学基金资助项目(50738003);天津大学自主创 新基金资助项目(60302010) 作者简介作者简介作者简介作者简介::::王 鑫(1981 -),男,讲师、博士,主研方向:数据库技 术,软件工程;裘 佺,助理工程师;孙洪涛,助理工程师、硕士 收稿日期收稿日期收稿日期收稿日期::::2011-06-08 E-mail ::::wangx@tju.edu.cn 46 计 算 机 工 程 2012 年 1 月 5 日 开源工具(如 ArgoUML),在对逆向工程的支持方面或多或少 存在缺陷。如果源代码的集合为 S,模型的集合为 M,则正 向工程表示为映射 F(M) = S,逆向工程表示为映射 R(S) = M。 在理想情况下,等式 R(F(M)) = M 应该成立,但很少有 CASE 工具能做到这一点。因此,CASE 工具需要一个强大的逆向 工程引擎作为其核心部件。 2.2 CASE 工具工具工具工具与开发环境的整合与开发环境的整合与开发环境的整合与开发环境的整合 支持双向工程的 CASE 工具必须完全融入到集成开发环 境(Integrated Development Environment, IDE)中才能发挥其应 有的作用。这要求 IDE 能够全面、系统地为外界提供各种功 能的接口,大多数商业产品 IDE 很难做到这一点。幸运的是, 开放源代码的 Eclipse 是一个基于插件(plug-in)构建的 IDE, 其系统架构非常适合于开发者为其提供新的插件,从而实现 新的功能。因此,选择 Eclipse 作为构建逆向工程工具的研究 平台。 3 逆向工程工具的设计逆向工程工具的设计逆向工程工具的设计逆向工程工具的设计 逆向工程实际上分为两大步骤: (1) 从源代码中提取设计模型,该模型不包含任何用于显 示输出的信息; (2) 对设计模型进行可视化处理,得到含有显示输出信息 (如位置、大小)的模型视图。前者属于软件工程的研究范畴, 后者则是图形绘制技术在软件工程中的应用。 3.1 系统流程系统流程系统流程系统流程 Halo 工具的功能定位是:基于 Eclipse 平台的逆向工程 工具。在现阶段,Halo 将 Eclipse 工作区中的 Java 项目作为 其输入数据,将 Ecore 模型和 UML 类图作为其输出数据。其 中,Ecore 是 UML 模型的一个子集,是利用 Eclipse 建模框 架(Eclipse Modeling Framework, EMF)创建的设计模型,它相 当于 UML 中的元模型,即 MOF。 Eclipse 集成开发环境具有基于插件的开放体系结构。任 何用户或开发者都可以编写自己的插件,实现所需的特殊功 能。用户编写的插件和系统中原有的插件具有同等的地位。 实际上,Eclipse 系统本身就是在一个只提供基本资源管理的 最小化平台上使用插件搭建起来的 IDE。将 Halo 逆向工程工 具作为 Eclipse 的一个插件,可以使逆向工程操作无缝融合 到 IDE 中。开发者能够在编码过程中随时生成 UML 类图, 以查看系统的结构。 Halo 系统流程如图 1 所示。Halo 先根据 Java 源代码生 成 Ecore 模型,它是不含视图信息的设计模型。然后,Halo 根据 Ecore 模型生成含有视图信息的 UML 类图。 图图图图 1 Halo 系统流程系统流程系统流程系统流程 3.2 数据流数据流数据流数据流 如果将逆向工程工具理解为一种数据变换程序,那么逆 向工程操作是将文本形式表示的源代码变换为设计模型和具 有布局信息的视图。Halo 工具的数据流简要描述为: (1)Java 源代码:Java 源代码从 Eclipse 工作区流向逆向 工程处理模块; (2)Ecore 模型-0:内存中的 Ecore 模型流向磁盘的 ecore 文件; (3)Ecore 模型-1:从磁盘上的 ecore 文件读取 Ecore 模型 到内存中; (4)UML 类图:内存中的 UML 类图流向磁盘上的 Halo 文件。 由于整个逆向工程操作分为“模型提取”和“布局显示” 两大步骤,因此将 Halo 划分成“逆向工程引擎”和“布局管 理器”2 个主要功能模块。其中,逆向工程引擎负责从源代 码中提取设计模型;布局管理器负责对设计模型进行可视化 处理。 4 逆向工程工具的实现逆向工程工具的实现逆向工程工具的实现逆向工程工具的实现 Halo 插件充分利用了 Eclipse 平台中已有的技术。从整 体上说,Halo 本身是一个 GEF 程序,它使用图形编辑器显示 UML 类图;Halo 的逆向工程引擎使用 JDT 获取 Java Model , 用 EMF 动态生成 Ecore 模型。GEF、JDT 与 EMF 为 Eclipse 平台的重要插件。由于 Eclipse 平台提供了这些便利功能,因 此能够基于 IDE 构建逆向工程工具。图 2 是 Halo 的系统结 构图。使用 Halo 进行逆向工程操作时的数据流程主要包括: (1) 将用户选定的 Java 项目通知 JDT; (2)JDT 根据该 Java 项目中的源代码获取 Java Model ,并 由此进一步生成类层次结构; (3) 逆向工程引擎根据 Java 类层次结构,利用 EMF 动态 地构造 Ecore 模型; (4) 将该 Ecore 模型通知布局管理器; (5) 布局管理器首先根据指定的 Ecore 模型,利用 GEF 生 成 UML 类图;然后通过改进的 Sugiyama 布局算法调整 UML 类图中各个元素的位置和大小;最后显示具有可读性的 UML 类图。 图图图图 2 Halo 系统结构系统结构系统结构系统结构 4.1 逆向工程引擎逆向工程引擎逆向工程引擎逆向工程引擎 逆向工程引擎是 Halo 的关键部件,它关系到 Halo 的执 行效率和输出结果准确度。目前,大多数逆向工程工具使用 基于事实提取器(fact extractor)的引擎,少数工具使用基于抽 象语法树(AST)的引擎[7] 。 事实提取器不对源代码进行全面的语法解析,而是通过 一些具体的、特定的技术和技巧对源代码进行文本过滤,提 取设计模型要用到的信息。因此,事实提取器的构造没有统 第 38 卷 第 1 期 47 王 鑫,裘 佺,孙洪涛:Halo :基于 Eclipse 的逆向工程工具 一的规范可以遵循,其内部结构相对较为复杂,对源代码的 分析粒度较粗。 基于 AST 分析源代码,首先要使用一个完整的解析器对 源代码进行语法解析,生成相应的 AST,在 AST 的基础上进 行逆向工程。这种方法虽在效率上比事实提取器低,但 AST 提供的信息是完备的,可以对源代码进行细粒度分析,而且 从 AST 到设计模型的映射可遵循一定的规则。 JDT 是 Eclipse 中用于 Java 开发的重要组件。JDT 中包 含内置的 Java 解析器,可根据 Java 项目方便地生成 Java Model 或 AST,从而访问源码中的各种语法元素。因此 JDT 是 Eclipse 中进行 Java 源代码分析的理想工具。 Halo 将其逆向工程引擎构建在 JDT 之上。首先,用 JDT 获得选定 Java 项目的 Java Model ;然后,在 Java Model 中提 取类层级(class hierarchy)结构;最后,将类层级结构映射为 Ecore 模型。 4.2 布局管理器布局管理器布局管理器布局管理器 从逆向工程引擎中输出的 Ecore 模型不含有任何关于图 形显示和布局的信息。没有经过布局的类图不具有可读性, 这样的类图对于开发者来说是难以理解的。布局管理器的作 用是决定类图中各个元素的位置和大小,以增强整个类图的 可读性。实际上,类图是一个有向的平面层次图。图中的类 元素是顶点,继承关系是边。如何使用计算机对平面图形进 行自动布局属于图形绘制技术的研究范畴。其中的 Sugiyama 算法[5] 是自动布局平面层次图的经典算法。 Halo 布局管理器根据 Java 逆向工程的特点(如 Java 只支 持类的单继承),在文献[5] 的基础上对 Sugiyama 算法做了进 一步优化。改进的 Sugiyama 算法以类层次结构作为处理对 象,通过两大步骤完成 UML 类图的自动布局工作: (1) 最小化交叉点数目:自上而下根据重心(barycenter)重 新排列每层中顶点的顺序,使图中边与边之间交叉点的总数 目达到最小值; (2) 调整顶点水平坐标:根据每层中各个顶点的优先级, 调整顶点的水平坐标,达到规定的布局原则;但在此过程中 要保持顶点的原有顺序不发生变化。布局管理器按照改进的 Sugiyama 算法的计算结果确定类图中各个元素的位置和大 小。经 Halo 自动布局后的一个 5 层类层次如图 3 所示。 图图图图 3 Halo 自动布局后的自动布局后的自动布局后的自动布局后的 5 层类层次层类层次层类层次层类层次 5 实验实验实验实验结果结果结果结果 本节给出使用 Halo 工具对一个中等规模的 Java 项目进 行逆向工程的实验结果。所选的 Java 项目 Draw2d 是 Eclipse 中的一个二维绘图工具包,具有典型的类层次结构。实验在 ThinkPad T410i 笔记本电脑上进行,其 CPU 为 Intel Corei5 双核 2.27 GHz ,内存为 8 GB ,硬盘为 500 GB 。Draw2d 对应 的 Java 项目包括 244 个 Java 编译单元。用 Halo 进行逆向工 程花了 5.7 s。生成的 UML 类图包括 8 个包、210 个类(包括 内部类)、34 个接口、185 个属性、1 365 个操作和 156 个泛 化关系。图 4 是对 Draw2d 项目进行逆向工程后某个包所属 UML 类图的界面效果。 图图图图 4 Draw2d 项目的逆向工程实验效果项目的逆向工程实验效果项目的逆向工程实验效果项目的逆向工程实验效果 6 结束语结束语结束语结束语 本文描述了基于 Eclipse 平台为 Java 项目构建逆向工程 工具 Halo 的过程。Halo 对支持单继承的 Java 语言给出了逆 向工程的解决方案,即从程序源代码生成的抽象语法树中提 取模型信息,通过改进的 Sugiyama 布局算法将提取出的逻 辑模型变换成适合于开发者阅读的 UML 类图。未来的研究 工作包括:Halo 工具对于大规模项目的有效理解,对具有多 继承关系的类图进行自动布局等方面。 参考文献参考文献参考文献参考文献 [1] Blaha M, Rumbaugh J. Object-oriented Modeling and Design with UML[M]. 2nd ed. Englewood Cliffs, USA: Prentice-Hall, 2004. [2] Booch G, Maksimchuk R, Engel M, et al. Object-oriented Analysis and Design with Applications[M]. 3rd ed. Redwood City, USA: Addison-Wesley Professional, 2007. [3] Object Management Group. OMG Unified Modeling Language (OMG UML) Infrastructure Version 2.3[Z]. 2010. [4] 王 鑫, 袁晓洁. 实现 UML 二元关系的规范化方法[J]. 计算机 工程, 2006, 32(21): 79-81. [5] Sugiyama K, Tagawa S, Toda M. Method for Visual Understanding of Hierarchical System Structures[J]. IEEE Transactions on Systems, Man, and Cybernetics, 1981, 11(2): 109-125. [6] Chikofsky E J, Cross II J H. Reverse Engineering and Design Recovery: A Taxonomy[J]. IEEE Software, 1990, 7(1): 13-17. [7] Wang Xin, Yuan Xiaojie. Towards an AST-based Approach to Reverse Engineering[C]//Proc. of 2006 IEEE Canadian Conf. on Electrical and Computer Engineering. Washington D. C., USA: IEEE Computer Society Press, 2006. 编辑 张正兴

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档