重构 20K 行库的提示 [已关闭]

2022-08-30 14:22:09

我已经向马里奥的答案颁发了100点的赏金,但如果我看到新的好答案,可能会开始第二个100点的赏金。这就是为什么我保持这个问题的开放性,并且不会选择最终答案,尽管我已经将赏金授予了马里奥。

这似乎是一个简单的问题(研究代码和重构),但我希望那些有更多经验的人能给我一些可靠的建议。

该库是一个开源的20,000行库,全部在一个文件中,我自己没有写过。代码看起来写得很糟糕,单个文件甚至是一个更大的问题,因为每次我想进行更改时,它至少会冻结日食半分钟,这是我认为值得将此库重构为更小的类的原因之一。

因此,除了阅读代码并尝试理解它之外,在重构这样的库时,是否有常见(或不那么常见)的提示?你有什么建议让我的生活更轻松一点?

感谢大家的评论。


答案 1

以下一般原则适用:

  1. 分而治之。将文件拆分为较小的逻辑库和函数分组。您将通过这种方式了解有关库的更多信息,并使其更易于理解和增量测试。

  2. 删除重复项。查找重复的函数和概念,并用标准库函数或库中的集中式函数替换它们。

  3. 添加一致性。平滑参数和命名。

  4. 添加单元测试。这是重构库最重要的部分。使用 jUnit(或类似工具),并添加可用于验证函数是否正确且未更改的测试。

  5. 添加文档。在编写测试时记录您对一致、改进的库的理解。


答案 2

如果代码写得不好,很可能有很多克隆。然后,找到并摆脱克隆可能会使它更易于维护,并减小其大小。

您可以找到各种克隆检测器,这些检测器专门用于PHP:

在检测有趣克隆的能力方面,按从最低到最多的能力顺序排列(恕我直言,我对CloneDR有很强的个人兴趣)。

如果代码写得很糟糕,很多代码可能已经死了。找出哪个部分在实践中执行,哪个部分不执行是值得的。测试覆盖率工具可以让您很好地了解这个问题的答案,即使在没有测试的情况下(您只需手动练习程序)。测试覆盖率工具所说的执行,显然并没有死。什么不执行...可能值得进一步调查,看看是否可以删除它。测试覆盖率工具也可用于告诉您单元测试执行了多少代码,如另一个答案所建议的那样。最后,测试覆盖率工具可以帮助您找到某些功能的位置:从外部执行功能,并且测试覆盖率工具所说的执行的任何代码都可能相关。

我们的 PHP 测试覆盖率工具可以收集测试覆盖率数据。


推荐