了解没有注释且复杂的项目的最佳或最快方法

7

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


13
我认为这种情况被称为“地狱”。 - Travis Gockel
与客户交流,只有他们可能知道他们想要什么。 - leppie
5
我的第一条建议是,要坦诚面对客户,告诉他们这需要时间去解决,并请求比你实际需要的时间更多的时间。请注意,翻译中不包含解释或其他内容。 - J. Polfer
我知道客户想要什么,但我不知道在项目中哪里实现。 - Ballon
11个回答

6
与其他人一样,我认为这是一个缓慢的过程。
然而,基于我以前的经验,以下是我的方法:
1.确定代码满足的尽可能多的要求。这可能会让你深入了解某些事情为什么是这样的。查找任何可用的测试是发现这些内容的常见方法。自动化测试是最好的,但通常它们和注释一样缺失。
2.找到代码的入口点。这些将为您提供可以探究不同输入如何影响流程的地方。常见的入口点是代码加载“主”类型函数、服务接口、网页回传等。
3.绘制代码图表。寻找能够构建黑/白盒子图片的工具。对我来说,这非常有价值。我有时会打印出大型清单,并用标记和尺子攻击它们。你的目标是创建自己的代码流程图(心理或者其他方式)。
4.使用上述方法(迭代),构建一组您认为应该发生的代码输出,并添加到这些输出中,例如日志、数据文件、数据库写入等。
5.最后,如果有时间,请创建一些手动测试,尽可能在自动化测试套件中验证上述内容。这是我开始使用调试器查看代码细节的地方。
这种方法通常使我有信心进行更改。
注意,这是一个迭代的过程,可以根据需要对代码部分或整体进行操作。我通常首先采用自上而下的方法,然后随着深入了解,我会钻取细节,直到细节变得不可承受,然后我重复此过程。然而,这只是因为我的思维方式如此 - 你可能不同。祝好运。

1
  1. 开始添加缺失的文档说明。
- Lie Ryan

3
找到主要的Main类,这是起点。 开始画出类和它们所拥有的对象以及它们引用的外部实体的图像。 跟随所有分支直到找到一个逻辑上的结尾。
过去我使用过UML反向工程工具,虽然视觉化很好,但对我来说,逐步浏览代码始终是最困难但也是最好的方法论。
当你逐步查看每个部分时,可以添加自己的注释。

1
最简单的方法是使用.bat文件来查找 - 查看从命令行调用了哪些类,这就是您的入口点。 - KevinDTimm

3

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

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


2
我建议你在代码中找到最接近你需要开始做出改变的地方,设置断点并开始调试检查本地变量的内容,随着你逐渐熟悉情况,逐步深入。然后,当你对要处理的代码区域有了基本了解时,开始尝试一些小的更改。测试你对它的理解。 尝试绘制你所看到的发生的事情。如果你能自信地做到这一点,你就能决定是否需要回去继续学习更多关于代码的知识,或者你已经知道足够的知识来完成你需要完成的任务。

2
哎呀,恐怕没有快速的方法来完成这个任务。你可以注释掉一行或两行代码,进行测试,看看会出现什么问题。你也可以在代码中加入断点,然后运行调试器。这样可以让你了解到你是如何到达这里的(即类之间的层次结构)。
希望原开发者使用了一些你能识别的模式并做了笔记。要记录下所有东西,从理解高层结构开始,逐步深入。
准备花费无数个小时来理解它在做什么。
与客户沟通,试着了解项目的目的,以及其中涉及的所有事情。某个地方必须有人对其中的内容进行了一些要求,即使只是在邮件中提到过。

0

其中最好的和首要的事情之一是尝试构建和运行代码。这听起来可能有点简单化,但当你接手未记录的代码时,问题在于你甚至无法构建和运行它。你不知道从哪里开始。


0
一个好的开始是使用自动化的 UML 建模工具(如果你使用 Eclipse,你可以使用插件),并开始创建各种类的 UML 图表,以便在高层次上了解它们之间的关系并可视化代码。这在很多时候都有帮助。

如果这个插件能够识别.bat和.txt文件。 - Ballon
@GoGoo:我指的是Java类。试试这个网站http://www.soyatec.com/main.php,它有免费版本。你可以创建Java代码的可视化UML图并开始可视化项目。一旦你高层次地理解了代码,就会更容易找到代码的哪个部分做什么,以及从哪里入手。 - Cratylus

0

如果有日志文件生成,请查看以了解从起始点(主类)开始的流程。否则,请加入调试语句以了解流程。


0

是的,那听起来确实是一个很糟糕的处境。

我认为最好的方法就是逐行浏览程序。试着理解代码中的整体情况,并写下许多笔记,既可以在纸上,也可以在代码注释中。


0
我认为,一个好的方法是使用javadoc或doxygen的类图特性生成文档,然后在运行代码时遍历使用doxygen生成的类图,看看谁调用了什么。每次我在这样的项目上工作时,这个方法都非常有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接