代码理解、逆向工程、最佳概念和工具。JAVA

代码理解、逆向工程、最佳概念和工具。JAVA,java,uml,reverse-engineering,Java,Uml,Reverse Engineering,对于任何程序员来说,架构师最苛刻的任务之一就是理解他人的代码 例如,我是一名承包商,被雇来迅速营救某个项目。修复bug,计划全局重构,因此我需要最有效的方法来理解代码。概念列表、它们的优先级和用于此的最佳工具是什么 据我所知:反向代码工程创建对象模型(为每个包创建图表并不那么方便),创建序列图(该工具以调试模式连接到系统,并从运行时生成图表)。一些可视化技术,使用一些工具不仅可以使用.java,还可以使用JPA等实现工具,如Hibernate。不是为所有的代码库生成图表,而是添加一些类,然后添加

对于任何程序员来说,架构师最苛刻的任务之一就是理解他人的代码

例如,我是一名承包商,被雇来迅速营救某个项目。修复bug,计划全局重构,因此我需要最有效的方法来理解代码。概念列表、它们的优先级和用于此的最佳工具是什么

据我所知:反向代码工程创建对象模型(为每个包创建图表并不那么方便),创建序列图(该工具以调试模式连接到系统,并从运行时生成图表)。一些可视化技术,使用一些工具不仅可以使用
.java
,还可以使用
JPA
等实现工具,如
Hibernate
。不是为所有的代码库生成图表,而是添加一些类,然后添加它使用的类


Sparx Enterprise Architect是逆向工程领域的最新技术还是相去甚远?还有其他更好的工具吗?理想情况下,该工具可以让我像自己编写代码一样理解代码:)

到目前为止,最重要的工具是你的耳朵、舌头和喉咙。询问熟悉代码的人——他们将能够帮助您更好地理解其总体架构,而不是任何软件工具

自动逆向工程的完整UML模型通常几乎毫无用处,因为它们无法区分重要的抽象和实现细节——这是此类模型的全部要点

当您调查细节时,软件工具在回答非常具体的问题时更有用,例如“此方法从何处调用?”或“什么类实现此接口”——任何好的IDE都可以做到这一点。调试器也可以提供帮助—在代码的关键点放置断点,并在遇到断点时查看调用堆栈通常非常有启发性。

这本书详细介绍了这一点。不幸的是,没有附带银弹:-)

然而,它列出了许多接管遗留代码的有用技术。简言之

  • 至少采访一些最初的开发者(如果他们还在的话)关于
    • 开发历史:阶段、版本
    • 现状
    • 团队社会结构、政治、动态:人们何时加入和离开以及为什么加入和离开
    • 臭虫:典型的,最简单的,最难的
    • 代码质量:最干净/最丑陋的零件
    • 配置数据:形式、内容和用途
    • 单元/集成/手动/。。。测试用例和数据
    • SCM分支结构和用法
    • 文件:记录了什么,在哪里,是最新的
    • 外部接口联系人
  • 在演示过程中观察开发人员/用户以查找
    • 主要特征
    • 典型用例
    • 使用轶事
    • 好/坏、缺失/多余功能
  • “在一小时内读取所有代码”
    • 获取类层次结构、接口的高级视图
    • 如果需要,参加多个会议
    • 确定大型结构(这些结构通常包含重要功能)
    • 寻找设计模式
    • 检查评论(它们可能会泄露很多信息,但也可能会产生误导)
  • 略读文件(如有)
    • 只需记录特定类型文档的可用性,例如规范、UML图、Wiki、Javadoc等
    • 它有用吗?为什么
    • 它是最新的吗

请详细说明Michaels提到的优秀IDE,它可以帮助您:

我经常使用以下Eclipse工具:

  • 当光标放置在标识符中时,Shift-F2会显示该标识符的Javadoc(如果有的话)。很适合航海
  • 将鼠标悬停在标识符上会弹出一个包含Javadoc的框(如果有的话)。用于在编写时进行提醒,例如方法调用
  • 声明视图显示定义光标所在关键字的源。这将在光标移动时更新
  • F3转到当前标识符的定义
  • 标识符上的Ctrl-T在弹出窗口中显示所有子类和实现。在处理接口时非常有用
  • 标识符上的F4在面板中显示该标识符的实现层次结构,可以对其进行导航。了解事物之间的联系非常有用。这包括类和接口

EclipseUML Omondo是最好的Java反向工程工具。如果不在同一个包中,它将反转所有java代码、所有包甚至与接口的类交互。太棒了。 您还可以反转: -.类 -休眠注释 -JPA注释

我喜欢这个工具的地方是我的代码是干净的,因为所有的模型信息都保存为xmi格式,而不是作为标记保存在我的代码中。您还可以使用图表作为模型视图,在每个现有包中创建小文档。非常好,并且尊重官方的UML2.2规范。
唯一的问题是它真的太贵了所以这个价格对我来说是个止损

我对整个UML(包括Java的反向工程)使用Enterprise Architect,它工作得非常完美。

并没有提取高级架构,但它确实使您更容易在Java代码中攀爬:我们的。这将读取源代码(以及支持的类文件),并生成Javadoc样式的文档以及双向超链接到Javadoc信息的源文本。
(我是它背后的负责人之一)。

@TofuBeer:是的,对不起,我搞错了链接;答案也修正了。我要编辑链接。。。但我想我应该先确定它是正确的:-)