【问题标题】:Code understanding, reverse engineering, best concepts and tools. Java代码理解、逆向工程、最佳概念和工具。爪哇
【发布时间】:2011-02-09 03:08:06
【问题描述】:

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

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

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

Sparx Enterprise Architect 在逆向工程方面是最先进的还是远非如此?还有其他更好的工具吗?理想情况下,该工具可以让我理解代码,就好像我自己写的一样:)

【问题讨论】:

    标签: java uml reverse-engineering


    【解决方案1】:

    Object-Oriented Reengineering Patterns》一书详细介绍了这一点。不幸的是,没有附加灵丹妙药:-)

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        我经常使用以下 Eclipse 工具:

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

            不会提取高级架构,但确实可以更轻松地绕过您的 Java 代码:我们的Java Source Code Browser。这会读取源代码(和支持类文件)并生成 Javadoc 样式文档以及双向超链接到 Javadoc 信息的源文本。 (我是它背后的负责人之一)。

            【讨论】:

            • @TofuBeer:是的,对不起,我搞砸了链接;也已在答案中修复。
            • 我打算编辑链接...但我想我应该先确保它是正确的 :-)
            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 2011-05-14
              • 2021-08-16
              • 1970-01-01
              • 2012-02-06
              • 2011-05-26
              • 2018-09-20
              • 1970-01-01
              • 1970-01-01
              • 2012-03-15
              相关资源
              最近更新 更多