笔者在多年的软件开发过程中,阅读过不少成熟软件的源码,通过参考借鉴先进软件的设计理念,少走了很多弯路。多年的经验告诉我要想在软件架构设计上有快速进步,唯有站在巨人的肩膀上,逆向工程便是通向巨人肩膀的一条捷径。然而做过逆向工程的人都知道,要想对源码进行逆向工程,发掘设计者的设计理念和意图实在是一件不容易的事情。但是,只要掌握了一定的方法和技巧,逆向工程也不是不可能的任务。本文重点针对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在这方面可以说已经是登峰造极。
2. Java studio enterprise 8.1
非常棒的java IDE, 由Sun主导开发,功能堪比eclipse。但是个人感觉易用性方面略迅与eclipse。本身就支持java源码到UML的转换,但是与 together eclipse存在同样的问题——占用了大量的PC资源。可以根据个人喜好在java studio与eclipse之间做出选择,个人还是推崇eclipse.
3. rational rose
功能强大的建模工具,以UML为核心,支持多种语言的逆向工程。在图形显示方面,性能较together eclipse和java studio优异。目前只支类图的逆向工程,不支持从源码直接生成顺序图。
4. staruml
只能算是个画图工具,以UML为核心,不支持逆向工程。
5. sourceinsight
功能完整的逆向工程工具,支持多种语言,C/C++开发人员尤其偏爱。支持调用树(call hierarchy),引用搜索(reference search),类型树(type hierarchy),函数或变量的申明搜索(declaration search)。简单的函数调用关系的图形化显示。
不支持源码调试功能。
6. rhapsody7.0
功能强大的UML建模工具,堪比rational rose, 支持多种语言逆向工程,嵌入式开发人员尤其偏爱。相比rational rose, rhapsody提供了更为严格的UML规范,支持更为精确的代码生成,甚至可以生成makefile. 针对不同的开发平台有不同的配置。
分享到:
相关推荐
文档"新手请看-老手无视.docx"很可能是针对Java逆向工程初学者的一份教程,它可能涵盖了基本的术语解释、常用的逆向工程工具以及如何使用这些工具来分析和理解Java代码。对于新手来说,这将是一个宝贵的资源,能够...
逆向工程(Reverse Engineering)是一种技术手段,通常用于理解已有的软件系统,分析其内部结构和逻辑,以便改进、维护或复制其功能。在Java领域,逆向工程常常被用来生成源代码,尤其是在处理遗留系统或者没有源码...
在MyBatis框架中,逆向工程(Reverse Engineering)是指通过数据库表结构来自动创建相应的Java类和XML配置文件。这一过程涉及到以下几个核心概念: 1. **MyBatis Generator**: 这是一个强大的工具,可以读取数据库...
2. **逆向工程(Reverse Engineering)**:在软件开发中,逆向工程是指通过分析现有的系统或程序来了解其工作原理。在MyBatis中,逆向工程特指从数据库表结构生成对应的Java模型类、Mapper接口和XML配置文件,使得...
MyBatis逆向工程是开发过程中的一项重要工具,它允许开发者通过配置,自动根据数据库表结构生成对应的Java实体类、Mapper接口以及XML映射文件,极大地提高了开发效率。这一特性在快速构建数据访问层时尤为有用,避免...
2. **逆向工程原理**:逆向工程(Reverse Engineering)是指从已有的系统或代码出发,分析其内部结构和设计,以便理解和改进。在MyBatis中,逆向工程是基于数据库表结构,反向生成Java代码的过程。 3. **配置文件**...
在Java Web开发中,MyBatis作为持久层框架,逆向工程是其一个重要的辅助功能。 首先,我们来了解MyBatis逆向工程的基本概念。逆向工程(Reverse Engineering)通常是指将现有的程序或系统分解,以理解其设计和工作...
逆向工程(Reverse Engineering)在这里是指将现有的数据库表结构转换为可编程代码的过程。在MyBatis逆向工程中,这个过程通常包括以下几个步骤: 1. 配置:首先,你需要配置generatorConfig.xml文件,这个文件包含...
MyBatis逆向工程生成是数据库表到Java实体类、Mapper接口及XML配置文件的一种自动化工具,极大地提高了开发效率。这个过程涉及到多个步骤和技术概念,接下来我会详细解释这些知识点。 1. **MyBatis框架**: MyBatis...
逆向工程(Reverse Engineering)在软件开发中是指从已存在的系统中提取信息,并用于创建或更新文档、设计或代码的过程。在MyBatis中,逆向工程主要用来简化数据库与Java代码之间的映射关系设置,减少手动编写的工作...
逆向工程(Reverse Engineering)在MyBatis中的应用主要是指自动生成MyBatis的Mapper接口、Mapper XML配置文件以及对应的实体类,极大地简化了开发过程,减少了手动编写这些重复代码的工作量。 MyBatis逆向工程的...
MyBatis 3 的逆向工程(Reverse Engineering)是一个强大的工具,它可以帮助开发者自动生成数据库模型、DAO(Data Access Object)层以及 SQL 映射文件,极大地提高了开发效率。在这个过程中,开发者只需要配置好...
MyBatis逆向工程(Reverse Engineering)是一种自动化工具,它可以帮助开发者快速生成基于MyBatis框架的持久层代码,包括Mapper接口、Mapper XML文件、实体类以及DAO实现类。通过逆向工程,开发者可以从数据库中的表...
在本文中,我们将深入探讨 Hibernate Core 的几个关键功能:代码生成、逆向工程、Ant 任务以及相关工具的使用。 1. **代码生成**: Hibernate 提供了一套工具,可以自动生成基于数据库模式的Java实体类、Hibernate...
在进行项目开发时,逆向工程(Reverse Engineering)是一种节省时间的工具,它能根据数据库表结构自动生成对应的实体类(Model)、Mapper接口和XML配置文件,以及DAO层的实现,极大地提高了开发效率。 标题提及的...
而MyBatis的逆向工程(Reverse Engineering)则是它的一个强大功能,它能自动生成SQL映射文件、Mapper接口以及对应的实体类,极大地减轻了开发者的工作量,尤其是当数据库表结构复杂时。 一、MyBatis逆向工程简介 ...
逆向工程(Reverse Engineering)在软件开发中是一个常见的实践,尤其是在数据库驱动的项目中。通过逆向工程,可以从现有的数据库结构生成相应的 Java 源代码,这大大节省了开发者手动创建这些对象的时间,同时也...
6. **逆向工程(Reverse Engineering)**:反编译是逆向工程的一部分,逆向工程是通过分析已有的程序来推断其设计和实现过程。 7. **版权与法律问题**:需要注意的是,反编译可能会涉及到版权问题,除非获得原始...