【问题标题】:the best or speedest way to understand uncommented and complex project [closed]理解未注释和复杂项目的最佳或最快方式[关闭]
【发布时间】:2010-10-28 19:54:09
【问题描述】:

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

【问题讨论】:

  • 我相信这种情况被称为“地狱”。
  • 与客户交谈。只有他们可能知道他们想要什么。
  • 我的第一条建议是,与客户坦诚相待,告诉他们需要时间来解决问题,并要求比您认为需要的时间更长。
  • 我知道客户想要什么,但我不知道在项目中的哪里实现。

标签: project-management project projects-and-solutions solution


【解决方案1】:

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

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

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

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

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

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

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

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

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

【讨论】:

  • 6.开始添加缺少的文档
【解决方案2】:

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

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

而且,当您逐步完成每件作品时,您可以添加自己的 cmets..

【讨论】:

  • 最简单的查找方法是使用 .bat 文件 - 查看从命令行调用了哪些类,这是您的入口点。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    希望最初的开发者使用了一些你可以识别和做笔记的模式。做很多笔记。从尝试理解高层结构开始,然后从那里开始。

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        首先是使用自动化 uml 建模工具(如果您使用 eclipse,则可以使用插件),然后开始创建各种类的 UML 图,以查看它们之间的关系并可视化代码.这帮助了很多次

        【讨论】:

        • 如果这个插件能识别.bat和.txt文件。
        • @GoGoo:我指的是 java 类。试试这个soyatec.com/main.php 它有免费版本。您创建 java 代码的可视化 uml 图并开始可视化项目。一旦你从高层次上理解了代码,就会更容易找到代码的哪一部分做了什么,以及在哪里深入研究。
        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          是的,这听起来很糟糕。

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              我完全同意发布的大部分答案。

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

              那么你需要耐心。但是当你通过时,你会成为一个更强大、更聪明的开发者......

              祝你好运!

              【讨论】:

                【解决方案11】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-08-07
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-06-22
                  • 1970-01-01
                  • 2019-01-03
                  • 1970-01-01
                  相关资源
                  最近更新 更多