首页 > 代码库 > [EA]反向工程
[EA]反向工程
最近正在接手Java维护项目iDrive,代码不多,大概在5~6K左右,但是里面的关系有点乱,于是想通过EA反向工程,从Java代码直接生成UML图,利于快速了解其代码结果。http://blog.csdn.net/jsutluo/article/details/6737240
搜索了下,下面这篇文档值得参考。
================通过eclipse生成UML图
笔者在多年的软件开发过程中,阅读过不少成熟软件的源码,通过参考借鉴先进软件的设计理念,少走了很多弯路。多年的经验告诉我要想在软件架构设计上有快速进步,唯有站在巨人的肩膀上,逆向工程便是通向巨人肩膀的一条捷径。然而做过逆向工程的人都知道,要想对源码进行逆向工程,发掘设计者的设计理念和意图实在是一件不容易的事情。但是,只要掌握了一定的方法和技巧,逆向工程也不是不可能的任务。本文重点针对java语言的逆向工程,并不完全适用于其他语言。
逆向工程的基本方法和步骤:
1. 软件功能性试用。
输入:用户手册(user manual),功能列表(feature list),软件的release版本。
输出:用例(use case)
方法:软件试用。
2. 代码动态结构剖析,又叫功能流(flow)的剖析。
目的: 功能流的是软件的核心,它代表了软件实现该功能的方法,决定了软件的基本架构。
输入:源代码,用例
输出: 活动图,顺序图。
方法:可以用的手段有动态和静态两种。动态手段包括设置断点(break point), 查看调用栈(call stack);静态手段包括通过集成开发环境(IDE)直接对函数调用进行跟踪,包括正向跟踪(直接查看被调函数)和反向跟踪(查找函数的调用者 (reference)),或者使用UML reverse engineering工具直接从代码逆向生成顺序图(sequence diagram)
3. 代码静态结构剖析,又叫模块结构剖析。
目的:静态结构的主要作用是增强代码的复用性,可维护性和扩展性。通过分析代码的静态结构,我们可以得出代码的复用模式。
输入:软件设计文档(design document), 类似于java doc的代码结构文档,源代码。
输出:模块结构图,类图。
方法:通过UML reverse engineering工具直接从代码生成类图(class diagram)。通过观察代码的组织方式(目录结构)。
1. eclipse
eclipse是我最喜欢的java开发工具,优秀的人机交互界面给开发人员带来了不尽的便捷,丰富的插件让eclipse更易于扩展和定制。在源码逆向工程方面,它也提供了最简洁丰富的功能。
针对源码的动态剖析,eclipse的JDT提供了函数直接跳转,调用树(call hierarchy),引用搜索(reference search),变量的读操作搜索(read access search), 变量的写操作搜索(write access search),函数或变量的申明搜索(declaration search)。最重要的还有eclipse提供了功能强大的java集成调试环境。
针对源码的静态剖析,JDT提供了,类型树(type hierarchy),接口实现搜索(implementor search).
如果您想把这些信息用UML图表示出来,可以使用together eclipse, 它可以把源码和模型动态关联起来。并提供了丰富的UML逆向生成的功能。但是together eclipse对PC配置要求较高,在笔者的AMD sempron 2200/512M/80G的配置下,勉强能够使用。如果要分析源码规模在百万行的项目,该软件对PC资源的消耗太大,个人并不推荐。
eclipse已经提供了完整的逆向工程功能,虽然与UML的结合方面并不是很理想,但是笔者还是强烈推荐eclipse。原因很简单,将软件设计图形化的工作还是交给大脑直接做比较简单,我们最需要的功能是随时可以得到我们想要的源码信息。eclipse在这方面可以说已经是登峰造极。
======================通过EA,从JAVA生成UML图
主要的任务是把source包导入到EA中,然后利用里面的反向工程自动生成UML图
1 首先 先创建一个工程 勾选出里面的class
2 然后在工程的任意一个文件夹上点击鼠标右键 选中code engineering 然后选import source directory
3然后就是进行一些必要的设置 ,比如选择语言 uml都显示什么之类的 我是按照package显示的
4然后就可以开始了 全部导入完成以后 可以在project browser里面找到这些UML图 然后单击屏幕最下方的一个树形图一样的小图标 ,自动排布一下就可以了
5package里面的类可以粘贴到任意的一个UML图中,如果和这个UML有联系,比如是这个package里面的类的一个子类的话,EA都会在粘帖完后自动的形成关系。
================EA和eclipse连接方法
本节向大家介绍一下Eclipse和UML工具EA的连接方面的知识,其连接主要有四个步骤,希望通过本节的学习你能够掌握Eclipse和UML工具EA的连接方法,下面是具体介绍。
Eclipse和UML工具EA的连接方法
EA(EnterpriseArchitect)很小,才30M,对计算机要求不高,但功能却要比其他的软件还要多。全面支持UML2.0,比其他工具更符合UML规范。支持java、c、dephi、c#、php、VB等语言的正向代码生成和逆向UML图生成。EA有Windows和linux版本,通过MDGlink工具可以和ECLIPSE、点NET等开发工具连接,UML图和代码互相生成,真正的所见即所得,嘿嘿。
因为网上关于EA的文章不多,特写这篇文章,希望对使用Eclipse和使用UML设计工程的人有帮助。
运行要求:
Ecplise3.1.X(3.2没测试,不知道怎样)
WindowsXP
或Windows2000SP4
记住必须这样,否则安装会不成功。
1.下载
首先要下载UML工具EA,地址是:http://www.sparxsystems.com.au/products/ea_downloads.html
然后下载EA和Eclipse连接的工具MDGlinkforeclipse,地址是:
http://www.sparxsystems.com.au/products/mdg_eclipse.html
以上两个工具都是30天试用,但足够用了。
Eclipse就不用说了,我用的是3.1,下载了语言插件,变成中文版的了,帮助都是中文,嘿嘿。
2.安装
好了,先安装好UML工具EA,运行Easetup.exe就结束,简单。
然后是安装MDGlinkforEclipse就是那个EAEcplise.zip,分两步。
第一步:解压缩EAEcplise.zip后有一个jar和一个exe文件。把jar文件拷贝到你的Ecplise的plugins目录下面。比如:d:\eclipse\plugins
这个jar文件是有版本的,比如org.sparx.mdg.eclipse_1.0.19.jar,这个的版本就是1.0.19,要确认d:\eclipse\plugins目录下面没有其他版本的该文件。
第二步,运行那个exe文件,就是EAEclipse.exe,安装。
现在运行UML工具EA,如果MDGlink安装成功,应该在EA主菜单的TOOLS目录后面有一个Add_Ins目录。没有这个目录的话说明link安装不成功,EA可以用,但不能和Eclipse连接。出现这种情况要看你的操作系统是否符合安装要求,比如2000没安装sp4等等,具体请看EAECLIPSE.zip里面的帮助文档。
点击Add_ins/Eclipse/Option,出现一个对话框,输入你的Eclipse.exe的地址,比如:\eclipse\eclipse.exe。
3.将Eclipse工程和UML工具EA工程连接
点EA的主菜单File/newproject,新建一个EA工程。
点击主菜单Add_Ins/ConnectExternalProject/Ecplise,出现一个对话窗口,同时Eclipse自动启动,事先启动Eclipse也没问题。
在EA对话窗口的下部分是选择Ecplise工程,选择好后点击Connect按钮,工程连接完毕。
4.,实现UML和代码同步
在UML工具EA中点击Add_Ins/MeragewithEclipse,出现一个窗口,窗口中Selecttype是选择同步方式的,none只生成UML类图;Forward是正向生成代码,就是把EA中的UML图转换成Eclipse工程里面的java文件;Reverse是逆向工程,就是把Ecplise工程中的代码生成UML图;Both是同时正向逆向的意思。
以上连接完毕。
!!!切记:MDGlink不支持中文,所以选择Forward或Both后原来Ecplise工程里面程序的中文注释都会变成乱码!!!
另外,用EA的类图生成的类代码里面总在最后生成一个方法,在Ecplise中会报错,将其删除即可。另外可以通过修改EA中的生成程序模板去掉这个方法生成。