清理大型旧版 Java 项目

我被指派在一个巨大的Java项目上做一些工作,开发人员几次迭代的影响是显而易见的。没有标准的编码风格,格式,命名约定或类结构。当我遇到一个使用Javadoc的课程时,这是一个好日子,单元测试是一个快乐的白日梦。

到目前为止,我们这些参与该项目的人一直在“融入”,适应我们正在研究的任何类的现有惯例,但现在是时候强加一些秩序和一致性了。

这是一个艰巨的挑战,我正在寻找人们对此类任务的任何建议。是否有任何特别有效的策略或陷阱需要注意?尝试一下是个好主意吗?

编辑补充:我不想给人留下项目不好的印象 - 它实际上设计得很扎实,写得很好。它只是感觉到它的年龄和维护的必然性......


答案 1

我发现Eclipse对于这样的操作来说是一个非常强大的工具。

很多人都发誓使用命令行工具和基于模式的文本编辑器进行编程,但是使用完整的IDE进行重大重构具有很强的优势:

  • 自动、实时编译可在错误发生时以及发生的所有位置向您显示错误。仅仅因为你做了一个改变,而课堂上没有任何东西或立即包中断,并不意味着你没有在其他地方制造问题。在日食中,红旗会上升到软件包树上,引导您直接到达它们。
  • 基于图形的重命名和移动。重命名代码元素的影响可能比您知道的影响要大得多。Eclipse将向您显示所讨论元素的每个实例的详细信息,以及如何通过重命名来更改它。
  • 自动导入管理使您可以省去确保所有导入都井井有条的工作。Eclipse 将在使用导入时自动添加导入,并使用操作灯泡标记未使用的导入,以便一键删除。
  • 使用代码样式可确保所有源文件对所有内容都使用相同的格式。空格,缩进,新行,括号都可以为您格式化。这适用于创建新代码以及更新现有文件的情况。

除了 Eclipse 的工具集之外,您还可以考虑利用其他现代 Java 工具来确保您的代码始终正常运行。

  • 测试套件允许您不断确保所做的任何更改都不会对项目的功能产生负面影响。如果要重构一个功能,请编写两到三个测试用例来演示其工作方式。确保它们在任何更改之前和之后运行。这是在问题成为问题之前发现问题的最简单方法。
  • 使用 Maven 等工具协助进行依赖关系、测试、编译和部署。不要浪费时间再次执行上述任何任务。专注于编写完成工作的代码。

编辑:

我个人也更喜欢Eclipse,因为我是做重构的人,而不是一些对我的代码几乎一无所知的自动化工具。


答案 2

可以使用工具对项目中的源代码强制实施通用格式。除此之外,请参阅Michael Feathers的《有效使用遗留代码》(其中“遗留代码”被定义为“没有单元测试的代码”),其中描述了如何将遗留代码逐步转换为经过全面测试和可测试的代码。


推荐