【问题标题】:Reverse Engineering poorly documented Java from source [closed]从源代码逆向工程记录不良的Java [关闭]
【发布时间】:2011-09-14 18:15:07
【问题描述】:

我是一名系统工程师,应届大学毕业生,我刚刚接到了一个异常艰巨的项目。

我们有一个遗留系统,我们合法拥有整个代码及其所有权利。问题是代码的文档记录很差,很少的文档不完整,有时是错误的,并且原始开发人员不可用。

它使用自定义 Perl 构建脚本,需要来自 CPAN 的一千个模块才能工作,而我不知道 Perl。 UML 的逆向工程失败了,除了 Doxygen 并且仅限于继承图和调用图。

我得到了一块巨大的黑板,我正在慢慢地浏览代码、建模包,然后是其中的嵌套包。

我的问题是我是否正在从正确的方向进行逆向工程。在开发 UML 和编写设计文档时,我正在从最底层开始努力弄清楚什么叫做什么。我做了一个封装图,但很难弄清楚在这么高的水平上发生了什么。

我查阅的一篇学术论文建议我还制作了一个新的需求文档,这会使我的速度更加慢,而且我不知道这是否是个好主意,因为其他开发人员总是忙于保持遗留系统的正常运行。

有没有什么书可以帮助我,我是否从正确的角度来解决这个问题?我应该聘请了解 Perl 和 JMX 的合同工来帮助我吗?

【问题讨论】:

  • 您可能会发现另一个用于了解 Java 代码的工具是 Google 的 Code Analytix,它包括对依赖性分析的支持。 code.google.com/javadevtools/codepro/doc/index.html
  • 如果我是你,如果我有选择的话,我根本不会为 UML 烦恼。这并不是说 UML 不好,只是仅仅强调 UML 不会让您对代码库有更深入的了解。如果可以的话,坚持使用简单的类图和调用图和 DFD。您的目标是了解代码库,而不是获得漂亮的图片。
  • @Vineet:当您绘制图表以帮助您理解代码时,您不妨让它们成为有效的 UML,以确保它们对其他人的意义与对您的意义相同。跨度>
  • @Michael,是的,这在一定程度上会有所帮助。但是在做过类似的事情后,我想我会在那里借我的经验。当设计良好时,UML 会有所帮助。但是,当所有的设计都不好时,逆向工程图几乎没有作用,因为必须重构代码以使图表看起来更好。
  • @Vineet:我同意逆向工程图大多没用,尽管我想说问题在于图表的价值在于显示重要结构而忽略了其余部分,这是你做不到的自动(尽管查看哪些类最依赖可能有一些价值,因为它们可能很重要)。

标签: java uml reverse-engineering


【解决方案1】:

Michael Feathers 所著的《有效地使用遗留代码》一书可能比我们在这里能告诉你的任何东西都更能帮助你。

但是,您需要为自己澄清的最重要的事情(从您的问题听起来并不完全清楚)是:您的目标是什么?你想用这个代码库实现什么?

如果答案是(听起来)“能够有效地维护现有项目”,那么尝试直接构建系统的完整高级模型可能不是最有效的路径。一次记住的内容可能太多了。

在这种情况下,我会尝试仅了解您当前需要修改的系统用例;通过代码跟踪方法调用(可能在正在运行的系统上使用调试器)以查看涉及哪些部分。为几个不同的用例执行此操作,您将开始看到模式,然后记录这些模式并逐渐将它们组合成系统的高级图像。

【讨论】:

  • 虽然当前的目标是澄清代码并帮助维护它,但最终它将通过适当的文档和更清晰的设计模式进行重新设计。
  • 不管那本书已经被订购并在途中。
  • 我会支持迈克尔的 cmets。在实践中,重新设计软件在增量完成时效果最好,Feathers 书提供了大量关于将测试引入现有应用程序的技术建议。构建测试将使您更好地理解现有代码,并且幸运的是,您可以一次重新构建它。
  • 希望对此答案 +10。试图理解一个文档很差的大型遗留应用程序基本上是徒劳的。即使您确实了解了它,但在您处理其他事情然后回到旧版应用程序的那一刻,它也不再有意义,您将难以理解您编写的文档。我过去曾多次犯过这个错误,并从中吸取了教训。只需尝试一次了解一点点,即如果您需要修改某个功能或在新应用程序中重新创建某些功能。考虑一下您将这些小块理解为一次性的努力。
  • @sqn:这不是好兆头,但是一旦您了解这些类的用途,现代 Java IDE 的重构工具就可以轻松(除非使用反射)重命名安全他们。
【解决方案2】:

This tool可能帮助你。

或者如果遗留系统写得不好,它可能会造成巨大的难以理解的混乱,但我希望它会有所帮助。

【讨论】:

    【解决方案3】:

    如果是 Java 代码,那么深度逆向工程将非常有帮助。 查看文档:http://www.ejb3.org/jar_file_reverse/jar_file_reverse.html

    【讨论】:

      猜你喜欢
      • 2018-09-20
      • 2011-12-28
      • 2011-05-01
      • 1970-01-01
      • 2014-03-26
      • 2016-07-09
      • 2010-10-15
      • 2014-03-26
      • 2011-10-06
      相关资源
      最近更新 更多