重构一个有效的项目

Sau*_*kas 7 refactoring

假设你有一个写得很差的项目,包含很多代码气味,wtfs等等.而且,它的代码结构非常复杂,很难为它添加任何新功能.另一方面,该项目按预期工作.

您想重构项目,或许将其移至新框架,您将如何解决此问题?您是否会尝试从头开始构建一个新的或使用某些技术(指定)将工作项目转换为新项目?


我想稍微澄清一下这个问题,因为在说"重构"时我的意思是什么.

我将举一个关于汽车的例子,把它想象成一个软件项目.假设你已经建造了自己的汽车.它的构造非常奇怪:发动机是倒置的,因此所有的管道都是不同的,电线缠绕在一起,没有人知道它们从哪里开始或结束等.

然而,一切都运转正常:你可以轻松地将它带到商店,工作等.但是,它的油耗有点太高了.此外,如果您曾经想要安装新的前灯,那么电线中的所有混乱都将是一场灾难.

你不能购买一个新的,所以你必须以某种方式重构汽车:将发动机的位置改为正常,使电线整洁,等等.你需要这样做,因为迟早你需要更换发动机,前大灯,安装新的立体声等.另一方面,你仍然需要一些东西来驱使你每天早上上班,所以你必须确保你不要搞砸一切.

现在让我们回到这个项目.你如何重建像上面这辆车一样复杂的项目,同时不会打扰它的主要功能和目的.


我还想把它变成一个社区维基.请编辑.

到目前为止,主要趋势是:

链接:

Car*_*ter 6

工作是你应该重构的唯一一种项目.如果您正在修复错误,那么您正在改变行为,并且重构明确是关于改变行为.但是工作有不同的定义.好的 - 重构的有用之一 - 经过了良好的单元测试.如果你有良好的测试覆盖率(自动测试!),你就可以重构了.如果你不...

阅读Michael Feathers的遗留代码有效工作.蚕食代码.选择一个特别冒犯你的WTF,并通过自动单元测试测试它的地狱.然后用合理的东西替换WTF,确保测试继续通过.泡沫,冲洗,重复.

重构低悬的果实.


Joh*_*ers 5

首先,创建一套自动化单元测试,并确认您具有高代码覆盖率(70%或更高).在重构期间,您将经常运行这些测试,以说服自己(和管理层)您没有破坏任何东西.

没有单元测试=没有重构.


让我改变主意.你不需要单元测试-你从测试需要高的代码覆盖率被频繁地运行,因为你改变了代码.这些可以是自动化单元测试或自动功能测试.

我不相信手动测试是一个充分的替代品.在重构过程中,它们不太可能频繁运行.如果没有不断保证代码在修复过程中没有被破坏,重构就不太可能成功.