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

标签 php refactoring project codebase

我正在开发一个项目,该项目的代码库大约有 3500 个文件,可能比实际少了几百个。这个项目是用 PHP 制作的,非常困惑,在这种情况下,这意味着文档很难理解 OOP,过程编程是混合的,依赖关系不清楚,并且那些创建该系统的人是初学者程序员所需要的一切。

说实话,他们所做的事情令人印象深刻,这是一个可行的产品等等。但调试和添加新功能确实是一件苦差事。

现在我的问题是,我们是否应该重构整个项目或进行完全重写,有哪些好的标准。我应该提到,在我们进行过程中重写系统的某些部分可能是不行的,因为一切都是相互依赖的。

最佳答案

如果应用程序很大、成功并且做了有趣的事情,则尝试手动重写它可能会失败。重写永远不会有足够的质量来取代原始版本,并且在它取代之前你不能扔掉原始版本,这意味着你将继续增强原始版本,直到替代品准备好为止。工作量增加了一倍,没有附加值(value)。保留应用程序并清理它可能会更好。

您可以考虑两种想法来帮助减少代码库的大小:

  • 对代码运行测试覆盖率。通常人们使用它来验证应用程序功能,但如果您运行测试覆盖率并只是长时间运行应用程序代码,它会告诉您哪些代码未执行,因此可能已失效。如果系统一团糟,它可能有很多死代码,这是找到候选代码的简单方法。有一些测试覆盖率工具可以以较低的开销收集整个应用程序的数据;您可以在生产代码中使用它们。

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

关于php - 选择重构而不是完全重写的标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13819051/

相关文章:

php - 如果数据在页面上未对齐,则无法使用循环回显表行

c# - 在 C# 中替换多个字符串元素

java - 在eclipse中,如何让一个项目覆盖另一个项目的类文件

windows - 我应该在哪里放置自定义项目模板,以便 VIsual Studio 2017 拾取它

php - Update Ignore 如果更新值将为负

php - 不同 View 组的自定义错误页面

PHP - 如果单个值等于多个选项

java - 代码是否应该由 EDT(事件调度线程)执行之间的混淆?

c# - 如何用很多参数重构类的方法?

java - Netbeans:安装了Java 模块但不能创建Java 项目,为什么?