我被分配了重构Delphi单元的任务。哇。 10000行代码,无文档,大量复制和粘贴代码。
这里有很多复制和粘贴的方法都可以重构,无论如何我在所有这些行中丢失了,我有接口部分,我可以“找到我的方式”,但一般来说,yuo建议如何解决这个问题那种任务?
感谢。
答案 0 :(得分:25)
我还建议为http://www.refactoring.com/catalog/和http://www.industriallogic.com/xp/refactoring/catalog.html添加书签。
获得罗伯特“叔叔鲍勃”马丁等人的清洁代码:敏捷软件工艺手册的副本也没有什么坏处。识别坏代码很容易。当你编写好的代码时,要知道的更难了。
提醒:专注于重构您需要处理的代码。很容易开始挖掘兔子洞并花费数月时间重构与手头任务无关的代码。
为自己省点麻烦。不要试图“修复”代码并同时重构它。重构第一个,然后修复错误或添加新功能。请记住,重构正在修改而不会改变外部行为。
拒绝尝试完全重写的冲动。我很难理解,满足用户要求的糟糕代码比干净代码要好。蹩脚的代码总是可以逐步改进,直到引起骄傲为止。
答案 1 :(得分:16)
我认为您可以做的最好的事情是为界面编写DUnit Tests。它会强制您理解现有代码,在调试过程中提供帮助,并确保在重构后界面的行为相同。
Top 12 Reasons to Write Unit Tests适用于您的情况:
答案 2 :(得分:5)
我遇到过类似的情况。我向你表示哀悼!
在我看来,最重要的是你实际上理解了今天的所有代码。比我更好的思维可以简单地阅读代码并理解它。但是,我不能。
在阅读了一般概述的代码之后,我通常会在调试器中反复单步执行它,直到我开始看到一些操作模式并识别我之前读过的代码。也许这很明显,但我想我会提到它。
您也可以考虑创建一个在当前代码上运行的优秀测试套件。
答案 3 :(得分:3)
接口部分是否包含一堆类定义?如果是这样,为每个类创建一个新单元并将每个类移动到它自己的单元。
如果你使用Delphi 2007或更好,你可以使用“refactor / Move”选项将这些类移动到新的(名称空间) )单位。
下一步是将大班分成小班。这只是很多手动工作。
一旦你的代码被划分为多个单元,你可以检查每个单元,检测相同的代码并生成基类,这些基类将用作共享相似功能的两个类的父类。 / p>
答案 4 :(得分:2)
除了理解代码等之外,这些工具还可以帮助重构和重新组织项目:
Model Maker是功能强大的设计,反向工程和重构工具:http://www.modelmakertools.com/modelmaker/index.html
Model Maker Code Explorer是Delphi IDE的强大插件,可帮助重构,代码导航等:http://www.modelmakertools.com/code-explorer/index.html
答案 5 :(得分:1)
我会使用某种UML工具来生成som类图和其他图表以获得系统的概述,并开始像@Workshop Alex那样分裂和评论。
答案 6 :(得分:0)
使用像Doxygen这样的工具来帮助您映射代码。
帮助就是here
答案 7 :(得分:-1)
从小处开始,最后进行部分或全部重写。开始创建基类以完成拼图的各个部分,而无需更改输出。冲洗重复,直到你有一个新的,可支持的代码库。 一旦你点击了那些copy-n-paste例程,你就会有基类来完成这项工作,这真的有助于加快这项任务。