理解大型Java程序

理解大型Java程序,java,Java,我正在从事一个java项目,我必须对它进行扩展(添加更多功能)。但我不知道在合并它们之前我应该如何学习现有的一个。 有什么具体的路径我应该遵循吗? 我可以用一种方式运行它,这样我就可以一个语句一个语句地看到程序的执行情况吗 我对它的理解有些执着,谢谢。您可以在调试器/您选择的IDE中启动它,然后一步一步地完成它,尽管最好是找到更熟悉源代码的人来为您提供概述,或者查找关于从何处开始的文档。选择一项您了解需求的功能。找到该功能的入口点,并按照该功能的代码进行操作。它应该能让您很好地理解体系结构是如何

我正在从事一个java项目,我必须对它进行扩展(添加更多功能)。但我不知道在合并它们之前我应该如何学习现有的一个。 有什么具体的路径我应该遵循吗? 我可以用一种方式运行它,这样我就可以一个语句一个语句地看到程序的执行情况吗


我对它的理解有些执着,谢谢。

您可以在调试器/您选择的IDE中启动它,然后一步一步地完成它,尽管最好是找到更熟悉源代码的人来为您提供概述,或者查找关于从何处开始的文档。

选择一项您了解需求的功能。找到该功能的入口点,并按照该功能的代码进行操作。它应该能让您很好地理解体系结构是如何工作的。

我建议您也从调试开始,这样您就可以一步一步地完成程序

这是一个关于堆栈溢出的经常性问题。到处都有很好的答案:

此外,本书可能有助于:


“耐心和毅力征服一切。”-拉尔夫·沃尔多·爱默生(Ralph Waldo Emerson)

与已经编写的代码集成可能非常困难。根据我的经验,关于已经编写的代码,我得到的一些最好的线索来自方法签名(函数输入到输出的映射)。该方法的签名可以为您提供有关程序的许多提示,即特定方法在较大程序的上下文中的位置,尤其是如何适合该程序。通常,一个方法签名加上一个描述性的方法名可以提供足够的危险信息,特别是在Java这样的类型化语言中


虽然我不建议逐行运行代码并查看更改(因为这通常意味着大量的工作),但对于真正难看但重要的代码,有时这是必要的(在使用DDD编写C程序之前,我肯定已经这样做了)。在这种情况下,一个快速的谷歌搜索揭示了一个图形化的java调试器,它可以做到这一点;似乎还有一个版本的DDD可以与Java一起使用

这里有另一种方法,它很粗糙,但我发现在过去无法附加调试器时很有用。如果您正在查看一段代码,但很难确定是谁在调用它,您可以抛出一个新的运行时异常,捕获它并打印堆栈跟踪

try { throw new RuntimeException("who is calling me"); } catch (RuntimeException e) { e.printStackTrace(); } 试一试{ 抛出新的RuntimeException(“谁在呼叫我”); }捕获(运行时异常e){ e、 printStackTrace(); }
  • 文件:

    如果你有文档,它会很有帮助。但这可能是一个陷阱,因为许多文档已经过时,它们可能会误导您

  • 修正错误:

    您可以从错误修复或新功能植入开始。从小范围开始工作,这将是很容易的工作。在错误修复期间,您可以越来越多地理解代码

  • 作为代码的基线,我通常会使用git
  • 进行应用程序的构建
  • 运行它
  • 如果基线失败或构建过程太复杂,请创建一个分支并修复它
  • 创建一个分支并修改一个字符串或一些在修改代码时会显示一些可见更改的内容
  • 如果javadoc不是通过ant或build文件创建的,那么创建一个新的分支来完成这项工作
  • 如果没有JUnit测试用例(或者有但不起作用),创建一个分支并修复它
  • 创建一个新分支来进行合并
  • 如果您使用的是Eclipse或类似的产品,请参见以下内容

  • 如果您是唯一的开发人员,请创建一个新分支,并为代码格式化和清理设置项目设置。然后执行代码格式化和清理。这将允许您为将来的工作建立一个更稳定的基线。如果没有,尝试与其他人协调
  • 安装FindBugs、Checkclipse、PMD以在代码库上执行一些简单的检查。查看WTF有时会让你更好地了解事情是如何运作的(或不是)
  • 安装Eclemma并查看实际测试了多少代码

  • 遗留代码--生命中所有问题的原因和解决方案[接管项目-]的可能重复()感谢您的快速回复,但问题是它是一个名为YETI的软件测试程序,我在eclipse中通过提供所需的参数和要测试的类来运行它,但在单击“单步执行”按钮后,程序出现异常,但没有调试器,运行平稳。我尝试了此操作,但在几个步骤后,它出现classnotfoundexception,因此无法继续。我怀疑是否有人使用过Java的独立调试器过去10年的课程。所有JavaIDE都有集成良好的调试器,没有包的文档。