清理大型遗留Java项目

And*_*ndy 14 java legacy formatting refactoring code-structure

我被指派在一个庞大的Java项目上做一些工作,并且几个迭代开发人员的影响是显而易见的.没有标准的编码风格,格式,命名约定或类结构.这是我和Javadoc一起上课的好日子,单元测试是一个快乐的白日梦.

到目前为止,我们这个项目的人已经"融入",适应我们正在进行的任何类别的现有惯例,但现在是时候强加一些秩序和一致性.

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

编辑添加:我不想给人一种项目不好的印象 - 它实际上是设计稳固而且写得很好.它只是感受它的年龄和维护的必然性......

Jak*_*ton 11

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

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

  • 自动实时编译可以在发生错误时及其发生的任何地方显示错误.仅仅因为你做了一个改变而且课堂上没有任何内容或者立即打包,并不意味着你没有在其他地方创造过问题.红旗会在eclipse中的包树上直接引导你.
  • 基于图形的重命名和移动.重命名代码元素可能会产生比您所知的更大的影响.Eclipse将向您显示相关元素的每个实例的详细信息以及重命名将如何更改它.
  • 自动导入管理允许您完成处理工作,确保所有导入都有序.Eclipse将在使用时自动添加导入,并使用动作灯泡标记未使用的导入,以便一键删除.
  • 使用代码样式确保所有源文件对所有内容使用相同的格式.空格,缩进,换行,括号都可以为您格式化.这可以在您创建新代码以及更新现有文件时起作用.

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

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

编辑:

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


Jer*_*man 6

您可以使用工具在项目的源代码中强制使用通用格式.除此之外,请参阅Michael Feathers的" 有效使用遗留代码"(其中"遗留代码"被定义为"没有单元测试的代码"),其中描述了如何逐步将遗留代码转换为经过充分测试和可测试的代码.