代码理解,逆向工程,最佳概念和工具。 Java的

对于任何程序员来说,架构师都是最苛刻的任务之一,他们正在理解其他代码。

例如,我是承包商,雇用很快就救出一些项目。 修复错误,计划全局重构,因此我需要最有效的方法来理解代码。 什么是概念列表,它们的优先级和最佳工具?

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

Sparx Enterprise Architect是逆向工程还是最先进的技术还是远远不够? 还有其他更好的工具? 理想情况下,该工具会让我理解代码,就好像我自己编写的那样:)

面向对象的面向对象重新设计模式详细介绍了这一点。 不幸的是没有附上银弹:-)

但是,它列出了许多用于接管遗留代码的有用技术。 简单来说

  • 至少采访一些原始开发人员(如果他们还在身边)
    • 发展历史:阶段,发布
    • 目前的状况
    • 团队社会结构,政治,动态:何时以及为什么人们加入和离开
    • 错误:典型的,最简单的,最难的
    • 代码质量:最干净/最丑陋的部分
    • 配置数据:表单,内容和用法
    • unit / integration / manual / …测试用例和数据
    • SCM分支结构和用法
    • 文档:记录的内容,是最新的
    • 外部接口的联系人
  • 在演示期间观察开发人员/用户以查找
    • 主要特点
    • 典型的用例
    • 用法轶事
    • 好/坏,缺少/多余的function
  • “在一小时内阅读所有代码”
    • 获得类层次结构,接口的高级视图
    • 如果需要,可以多次参加
    • 识别大型结构(这些通常包含重要function)
    • 寻找设计模式
    • 检查评论(他们可以揭示很多,但也可能会误导)
  • 脱脂文件(如果有的话)
    • 只记录特定类型文档的可用性,例如规范,U​​ML图,Wiki,Javadoc等。
    • 是有用的,为什么(不)
    • 它是最新的

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

自动反向工程的完整UML模型通常几乎无用,因为它们无法区分重要的抽象和实现细节 – 这是这些模型的重点。

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

只是详细说明Michaels提到可以帮助您的好IDE:

我经常使用以下Eclipse工具:

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

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

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

不提取高级体系结构,但确实更容易爬上Java代码:我们的Java源代码浏览器 。 这将读取源代码(和支持类文件),并生成Javadoc样式文档以及双向超链接到Javadoc信息的源文本。 (我是其中的主要负责人之一)。

我使用Enterprise Architect进行整个UML(包括使用Java进行逆向工程),它运行得很好。