选择重构而不是完全重写的标准

时间:2012-12-11 11:07:51

标签: php refactoring project codebase

我正在开发一个项目,其代码库大约有3500个文件,可能比实际上少了几百个。这个项目是用PHP制作的,而且非常混乱,在这种情况下,它意味着文档很难理解OOP和程序编程是混合的,依赖性不清楚,以及那些使初学程序员具备所需的系统的人。

说实话,他们所做的是令人印象深刻的,它是一种有效的产品。但调试和添加新功能是一项真正的苦差事。

现在我的问题是什么是一些好的标准,我们应该重构整个项目或做一个完整的重写。我应该提一下,在我们去的时候重写系统的一部分可能是不行的,因为一切都是相互依赖的。

3 个答案:

答案 0 :(得分:3)

如果应用程序很大,成功并且做了有趣的事情,尝试手动重写它可能会失败。重写将永远不会有足够的质量来取代原件,你不能扔原件,直到它,所以你将继续必须增强原件,直到更换准备好。两倍的工作,没有额外的价值。你可能会更好地保留应用程序并清理它。

您可能会考虑两个有助于减少代码库大小的想法:

  • 对代码运行测试覆盖率。通常人们使用它来验证应用程序功能,但是如果你运行测试覆盖率并且只是在一段时间内运行应用程序代码,它会告诉你的是什么代码没有被识别,因此可能已经死了。如果系统混乱,可能会有很多死代码,这是查找候选人的简单方法。有一些测试覆盖工具可以以较低的开销收集整个应用程序的数据;你可以在生产代码上使用它们。

  • 运行克隆检测器。这将找到重复的代码。直接复制很容易删除。一个好的克隆检测器不仅可以找到相同的克隆,而且可以找到参数克隆,即已经复制/粘贴/编辑但可以用参数汇总的方式的代码。参数克隆需要更多的技巧才能删除,但找到它们会告诉您可能错过的抽象,并删除它们(通过替换对象或方法)将缺少的抽象插入到您的代码中,使得涉及该想法的进一步维护更容易。 (这不是一个众所周知的事实,但如果你真的使用测试覆盖来验证功能,克隆删除也会提高测试覆盖率!)

答案 1 :(得分:0)

如果应用程序已经运行并且没有出现重大故障,那么我将保留大部分故障,因为从头开始重写所有内容总是很昂贵。

也许您应该考虑减少文件/行的数量,无论您在哪里看到重复的代码,使对象/函数尽可能地集中所有内容。这对最终维护有很大帮助,并且不需要大量时间。特别是如果它是由初学者所说的那样写的,你很容易找到改进的“错误方法”。

答案 2 :(得分:0)

基本标准可能是时间(=金钱) 当事情很重要时,估计总是很难。将其拆分为最小的块。

注意观点。您的估计可能与之前程序员的估计不同,因为它会偏向您喜欢的样式。也许更好的选择是聘请以前的程序员来“修复”代码。

无论如何,您应该说明调用应用程序写得好并且易于维护的最低要求, 与老板和团队讨论这个问题,分成尽可能小的冲刺并估算所有冲刺所需的时间。

如果你能够说服你的老板重写整体ROI会更好,那就重写一下吧。否则,学习“新风格”。如果您能够在重写时间内完成业务,或者有空闲时间,那么您很幸运。如果代码是可测试的,或者你至少有一些单元测试,那你就更幸运了。 如果这是不可能的,你应该实现功能测试,至少可以帮助解决这两种情况(重构或重写)。

请注意,我们每个人都可能更喜欢从头开始重写,而不是重构。 然后重写这个重写的...

因此,重构始终是一个不错的选择,假设您已经有测试或者您可以轻松实现测试。