如何重构具有10000行而没有文档的Delphi单元?

LaB*_*cca 13 delphi refactoring

我被分配了重构Delphi单元的任务.哇.10000行代码,无文档,大量复制和粘贴代码.

这是复制和粘贴的许多方法,可以重构,无论如何我在所有这些线路中丢失,我有接口部分,我可以"找到我的方式",但一般来说,yuo建议如何处理这种任务?

谢谢.

Ken*_*ran 26

  1. 获取Micheal Feathers 有效使用遗产代码的副本.它具有各种技术,可以安全地重构代码,使其在测试框架下运行.示例主要是Java和C++,但应该很容易理解.
  2. 安装第三方重构工具(或多个),例如CodeRush for Delphi(遗憾地不再开发),Castalia或ModelMaker Code Explorer.Delphi内置了一些重构支持,但根据我的经验,它太有限了,并且往往会扼杀非常大的代码库.
  3. 买一份西米安.它没有对Object Pascal的直接支持,但它的纯文本解析器运行良好.如果有足够的人请求支持Object Pascal,我确定他们会添加它.我还没有发现任何其他代码重复检测工具像Simian一样强大.

我还建议将http://www.refactoring.com/catalog/http://www.industriallogic.com/xp/refactoring/catalog.html加入书签.

罗伯特"叔叔鲍勃"马丁等人获得一份清洁代码:敏捷软件工艺手册也不会有什么坏处.识别坏代码很容易.当你编写好的代码时,更难以知道.

提醒一句:专注于重构您需要处理的代码.很容易开始挖掘兔子洞并花费数月时间重构代码,这些代码与手头的任务无关.

并为自己省一些麻烦.不要试图"修复"代码并同时重构它.首先重构,然后修复错误或添加新功能.请记住,重构正在修改而不会改变外部行为.

抵制尝试完全重写的冲动.我学到了很难的方法,即满足用户要求的糟糕代码比清理代码要好得多.蹩脚的代码总是可以逐步改进,直到它引起骄傲.

  • +1用于分离重构和修复错误。您甚至可以通过编写因错误而成功的测试来协助进行单元测试。当它们开始失败时,可以将它们删除,或者更好地重写,因为错误已被修复。 (2认同)
  • 这个答案是一个值得探索的矿山。谢谢。 (2认同)

spl*_*ash 16

我认为你能做的最好的事情就是编写DUnit Tests为界面.它会强制您理解现有代码,在调试过程中提供帮助,并确保在重构​​后界面的行为相同.

12强的原因编写单元测试你的情况完全适用:

  • 测试减少新功能中的错误.
  • 测试减少现有功能中的错误.
  • 测试是好的文档.
  • 测试降低了变革成本.
  • 测试改进设计.
  • 测试允许重构.
  • 测试约束功能
  • 测试抵御其他程序员
  • 测试很有趣
  • 测试迫使你减速和思考
  • 测试使开发更快
  • 测试减少恐惧(害怕改变,害怕破损,害怕更新)


Rob*_*ank 5

我遇到过类似的情况.我向你表示哀悼!

在我看来,最重要的是你实际上理解了今天的所有代码. 比我更好的思维可以简单地阅读代码并理解它.但是,我不能.

在阅读完总览的代码之后,我通常会在调试器中反复单步执行它,直到我开始看到一些操作模式并识别我之前读过的代码.也许这很明显,但我想我会提到它.

您可能还考虑创建一个在当前代码上运行的良好测试套件.