用 Java 理解大公司项目的最佳方法是什么?
6 回答
关于这个主题,有一个很好的播客/采访戴夫托马斯(“实用程序员”戴夫),在这里。
他称之为“软件考古学”。
由于许多不同的原因,组织经常失去对其代码库的控制。知识被遗忘,人们离开。人们很容易将代码库误认为是考古问题,如果不是因为基于它的关键任务应用程序一直在运行,直到需要修改或增强某些东西,然后突然你有一大堆没人理解的源代码但这已在一夜之间成为世界上最重要的事情。
接受大量代码的捷径很少。一般来说,一个人必须在寻求“理解它”与为“完成任务”做出有针对性的务实改变的压力之间取得平衡。
你永远不会知道公司每一段代码的每一行。您可以做的是了解这些类、它们的作用以及它们之间的关系。
首先从类的角度对代码的流动方式有最基本的了解,重点关注完成大部分工作的大型类。一旦你了解那里发生的事情,就开始关注小班。坚持下去,直到你对少数几个类有很好的理解。
此外,您可以将其分解为贵公司拥有的常见编程任务。一旦你有了这些研究的清单,实施它们所涉及的内容。
最后一点就是经验。您可以根据需要研究代码,但没有什么可以替代实际代码。编写程序、进行测试以及查看现有代码的运行方式是学习新系统的最佳方式。
开始编写单元测试——你做了一些有用的事情(这可能会让你有更多的时间来理解代码)并且你可以深入了解功能。此外,当他们在此过程中出现时开始提问,您将能够提出非常具体的问题,并且您可能会给您的同事留下深刻印象:)
我经常从几个地方开始构建/打包/部署脚本和配置文件——根据我们所讨论的应用程序的大小,它们可以告诉你很多关于内部结构、外部依赖关系的信息,并突出显示需要进一步挖掘的内容.
接下来,您可以使用代码覆盖率工具并记录一个简单场景的覆盖率,大致指出哪些区域正在执行它。这是在跟踪分析器下运行的一个变体。堆转储对于了解基本数据结构也很有用。
最后,在各种情况下查看应用程序日志,尽管这些信息通常太多,您需要知道您在寻找什么。
所有这些都应该让您对整个应用程序有一个很好的了解。之后,您需要启动一个调试器并开始在代码中戳。向您的同事询问他们最喜欢的断点位置 - 通常每个人都有一些。
如果您正在使用 Java 或 C#,请确保您了解您的 IDE 以及如何使用查找用法。还有更高级的静态分析和理解工具,如 Structure101(我最喜欢的)、SonarJ 或 LattixDSM。
一些 UML 逆向工程工具可以生成类图,但通常它们会产生太多噪音,并且手动进行修剪假设您可以区分重要和不重要(新代码库通常不是这种情况)。如果你得到其中之一,我建议从基本类开始,并使用“添加依赖项”功能逐步探索应用程序。
做一个简单的第一个任务,不要急于求成。环顾四周,利用时间学习和了解环境。检查调用堆栈,使用调试器。当您有解决方案时,请您的同行进行代码审查,并向他们学习。然后接另一项任务,再接再厉,再接再厉……
你很快就会到那里:)
文档我的朋友,寻找管理器模式寻求 jsp 代码玩 不要害怕做小的改动,看看会发生什么,了解逻辑和构建块,远离文档差的公司。