7

我有没有评论的复杂项目。该项目是用 Java 编写的,但有多个主类,使用多个 .txt 文件(如模板)并使用多个 .bat 文件。我不知道从哪里开始以及如何开始发现该项目,因为我需要对该项目进行一些更改。

4

11 回答 11

6

和其他人一样,我说这是一个缓慢的过程。

然而,在过去多次这样做,这是我的方法:

  1. 确定代码满足的尽可能多的要求。这可能会为您提供一些理由,说明为什么某些事情在您深入研究时会如此。找到这些的常用方法是查找任何可用的测试。自动化的最好,但通常它们与评论一样缺失。

  2. 找到代码的入口点。这些将为您提供可以戳代码的地方,以查看不同的输入如何影响流程。常见的入口点是代码加载“主要”类型的函数、服务接口、网页回发等。

  3. 绘制代码图。寻找可以构建代码的黑/白框图片的工具。对我来说这是无价之宝。我有时会打印出大量列表,然后用标记和尺子进行攻击。您的目标是创建自己的代码流流程图(心理或其他方面)。

  4. 使用上述(迭代地)为您认为应该发生的代码构建一组输出,并将您可能已经知道的输出添加到这些输出中,例如日志、数据文件、数据库写入等。

  5. 最后,如果您有时间,最好在自动化测试工具中创建一些手动测试来验证上述内容。这是我开始让调试器看到代码中的细节的地方。

这种方法通常让我有信心做出改变。

请注意,这是一个迭代过程,可以通过部分代码或您认为合适的整体来完成。我通常喜欢从上到下的方法开始,然后当我获得一些洞察力时,我会向下钻取直到细节变得压倒性,然后我重复。然而,这只是因为我的思想以这种方式工作——你可能会有所不同。祝你好运。

于 2010-10-28T20:40:13.370 回答
3

我通常从 doxygen 开始,打开每个提取选项(尤其是 EXTRACT_ALL 和 EXTRACT_PRIVATE),并启用 SOURCE_BROWSER、HAVE_DOT、CALL_GRAPH 和 CALLER_GRAPH 选项(您还需要安装 dot)。这样可以很好地查看软件。对于每个函数,调用都在图表中显示和链接,源也从那里链接。

虽然 doxygen 适用于 C 和 C++,但它也适用于 Java 源代码(设置 OPTIMIZE_OUTPUT_JAVA 选项)。

于 2010-10-29T09:04:30.653 回答
3

找到主要的 Main 类。起点。开始绘制类和它们拥有的对象以及它们引用的外部实体的图片。跟随所有分支,直到找到合乎逻辑的结局。

我过去使用过 UML 逆向工程工具,虽然视觉效果很好,但对我来说,单步执行代码一直是最难但也是最好的方法。

而且,当您逐步浏览每件作品时,您可以添加自己的评论。

于 2010-10-28T20:02:13.023 回答
2

我会尝试在代码中找到最接近您怀疑需要开始进行更改、设置断点并开始调试的位置的第一个入口点。检查局部变量的内容,并随着您熟悉发生的事情而更深入地工作。然后,当您对将要使用的代码领域有了基本的了解后,就可以开始摆弄一些小改动了。测试你对它的理解。试着用图表描绘你看到的事情。如果您可以自信地做到这一点,您将能够决定是否需要返回并继续了解有关代码的更多信息,或者您是否知道足以完成您需要完成的事情。

于 2010-10-28T20:02:49.177 回答
2

哎呀。恐怕没有快速的方法可以做到这一点。注释掉一行(或两行)-> 测试-> 看看有什么中断。您还可以在这里和那里放置中断语句并运行调试器。这应该给你一些指示你是如何到达那里的(即类之间的层次结构是什么)。

希望最初的开发人员使用了一些您可以识别和做笔记的模式。做很多笔记。首先尝试理解高层结构并从那里开始工作。

准备好花费无尽的时间不了解事情在做什么。

与客户交谈并尝试了解该项目的用途,以及它所做的所有事情。某个地方的某个人必须对那里的东西提出一些要求,即使只是在电子邮件中。

于 2010-10-28T20:04:51.573 回答
0

是的,这听起来是个很糟糕的地方。

我想说最好的方法是逐行遍历程序。尝试把握代码中的大局,并在纸上和代码中的注释中写下很多注释。

于 2010-10-28T20:39:25.497 回答
0

最好和首先要做的事情之一是尝试构建和运行代码。这听起来可能有点简单,但是当您接管未记录的代码时,问题是您甚至无法构建和运行它。不知何时开始。

于 2010-10-31T19:31:43.577 回答
0

我想说,一个好的方法是使用 javadoc 或 doxygen 的类图功能生成文档,然后在运行代码时遍历使用 doxygen 生成的类图,看看谁调用了什么。每次我从事这样的项目时,这对我来说都非常有用。

于 2010-10-28T23:17:46.350 回答
0

开始是使用自动化的 uml 建模工具(如果您使用 eclipse,则可以使用插件),并开始创建各种类的 UML 图,以查看它们在高级别的方面如何相关并可视化代码。这已经帮助了很多次

于 2010-10-28T19:59:44.717 回答
0

如果正在生成日志文件,请查看它以了解从起点(主类)的流程。否则,请放置调试语句以了解流程。

于 2010-10-28T20:01:05.683 回答
0

我完全同意发布的大多数答案。

我可以添加使用逆向工程代码并创建类图的开发工具,以全面了解所涉及的内容。

然后你需要耐心。但是,当您通过...

祝你好运!

于 2010-10-28T23:28:12.483 回答