`
guoyiqi
  • 浏览: 999148 次
社区版块
存档分类
最新评论

重构代码的7个阶段

 
阅读更多

第一阶段 – 绝望

在你开始去查看你想要重构的模块的,你会觉得好像很简单,这里需要改一个类,那里需要改两到三个函数,重写几个函数,看上去没什么大不了的,一两天就搞定了。于是你着手开始重构,然后当你调整重构了一些代码,比如改了一些命名,修理了一些逻辑,渐渐地,你会发现这个怪物原来体型这么大,你会看到与代码不符甚至含糊不清的注释,完全摸不着头脑的数据结构,还有一些看似不需要方法被调了几次,你还会发现无法搞清一个函数调用链上的逻辑。你感到这个事可能一周都搞不定,你开始绝望了。

第二阶段 – 找最简单的做

你承认你要重构的这个模块就是一个可怕的怪物,不是一两下就可以搞定的,于是你开始着干一些简单的事,比如重新命名一下几个函数,移除一些代码的阻碍,产生几个常量来消除magic number,等等,你知道这样做至少不会让代码变得更糟糕。

第三阶段 – 再次绝望

但是接下来的事会让你再次撞墙。你会发现那些代码的瑕疵是些不痛不痒的事,改正这些事完全于事无补,你应该要做的事就是重写所有的东西。但是你却没有时间这么干,而这些代码剪不乱理还乱,耦合得太多,让你再一次绝望。所以,你只能部分重写那些不会花太多时间的部分,这样至少可以让这些老的代码能被更多的重用。虽然不完美,但是至少可以试试。

第四阶段 – 开始乐观

在你重构这个模块几天之后,不断的重构了几次,虽然你发现改善代码的进度太慢了,但此时,你已知道代码应该要被改成什么样,你在痛苦之后也锁定了那些那修改的类。是的,虽然你的时间预算已经超支,虽然要干的事比较多,但你还是充满希望,觉得那是值得的。

第五阶段 – 快速了结

这个时候,你知道你花了太多的时间,你感到你所面对的情况越来越让你越到不安,你明白你自己已经陷入了困境。你原本以为只需要一次简单的重构,然而现在你要面对的是重写所有的东西。你开始意识到原因是因为你是一个完美主义者,你想让代码变得完美。于是你开始在怠慢你文档,并到到一个捷径来重写老的代码,你开始采用一些简单而粗暴,快速而有点肮脏的方法。虽然不是很完美,但你就是这样去做了。然后,你开始运行测试做UT,发现UT报告上全是红色,几乎全都失败了,你恐慌了,于是快速地fix代码,然后让UT 能工作。此时,你拍拍自己胸口,说到,没问题 ,于是就反代码提交了。

第六阶段 – 修改大量的Bug

你的重写并不完美,虽然其过了测试,但是那些测试对于你的新的代码有点不太合适,虽然他们都没有报错,但是他们测试得范围太小了,没有覆盖到所有的情况和边界。所以,在这以后,你还需要几周的时间不得不来修改越来越多的bug,这使得你的设计在每一次quick-fix后就变得越来越难看。此时,代码已经不像你所期望的那样完美了,但你依然觉得他还是比一开始要好一些。这个阶段可能历经几个月。

第七阶段 – 觉悟

经过了6个月,你重写的模块又出了一个比较严重的bug。这让你重构的那个模块变得更难堪。你发现出的这个问题是和当初的设计不一致,你还发现被你重构掉的那段老的代码并不是当初看上去的那么坏,那段老的代码确实考虑到了一些你未曾考虑到的事情。这个时候,你团队里有人站出来说这个模块应该被重构或是重写,而你却不动声色地一言不发,并希望那个站出来的人能在几个月后能觉悟起来。

——————

不知道这是不是你的经历,我经历过很多次这样的事。对于很多维护性质的项目,我几乎不敢动,那怕看到代码很不合口味。那些从来没有写过代码的敏捷咨询师一定会说用TDD或是UT可以让你的重构更有效也更容易,但我想告诉你,这种脱离实际的说法很不负责任,这就好比说——我在杀猪的时候遇到了一些麻烦,因为我对猪的生理结构不清楚,或是这本来就是一头畸形的猪,导致我杀的猪很难看,而伟大的敏捷咨询师却告诉我,要用一把更快更漂亮的刀 。软件开发永远不是那么简单的事,杀猪也一样。

分享到:
评论

相关推荐

    如何对代码进行重构:重构代码的7个阶段

    下面是重构代码的几个阶段,文章来自:The7stagesofrefactoring,下面的翻译只是意译。  第一阶段-绝望  在你开始去查看你想要重构的模块的,你会觉得好像很简单,这里需要改一个类,那里需要改两到三个函数,重写...

    重构改善既有代码的设计PPT课件

    重构是软件开发过程中的一个重要环节,它关注于改善已有代码的设计,以提高代码的可读性和维护性,同时保持原有功能不变。通过重构,程序员能够更有效地管理代码,提升开发效率,减少错误,并促进团队成员之间的沟通...

    重构改善既有代码的设计第2版.pdf

    重构改善既有代码的设计第2版.pdf 本书主要讨论了如何通过重构来改善既有代码的设计,...本书为读者提供了一个系统的指南,帮助读者了解如何通过重构来改善既有代码的设计,提高代码的可维护性、可读性和可扩展性。

    重构-改善既有代码的设计

    最后,重构是一个持续的过程,它与软件开发的其他阶段紧密相连,如需求分析、设计、编码和测试。通过不断地重构,我们可以保持代码的活力,使其适应不断变化的需求,从而提高软件产品的生命力和竞争力。 总的来说,...

    重构 代码优化企业实战

    所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元...原则上,优化可以在编译的各个阶段进行,但最主要的一类是对中间代码进行优化,这类优化不依赖于具体的计算机。

    多帧图像超分辨率重构代码和分析

    "多帧图像超分辨率重构代码和分析"是一个项目,它提供了实现这一技术的具体代码,同时也包含了对这些代码的解释和测试结果。 项目中的核心概念可能包括: 1. **多帧融合**:使用多帧图像进行超分辨率重构,可以...

    重构_改善既有代码的设计

    - 重构可以在开发的任何阶段进行,但它通常在添加新功能或修复bug之前进行,以确保代码的整洁性。 3. **重构步骤**: - **准备阶段**:确保有足够的测试覆盖,以便重构后验证代码的行为没有变化。 - **识别问题*...

    软件重构技术(重构介绍、重构原则、代码的坏味道。。。)

    重构,正如标题所言,包括了“重构介绍”、“重构原则”以及“代码的坏味道”等多个方面,旨在提高代码的可读性、可维护性和整体质量。 首先,我们来探讨“重构介绍”。重构是一种系统性的修改现有代码的过程,目的...

    重构-改善既有代码的设计(含中文PDF,英文chm)

    《重构:改善既有代码的设计》是一本由Martin Fowler所著的经典软件工程书籍,它深入探讨了如何通过重构技术提升代码质量、可维护性和设计的优雅性。这本书对于开发者来说是不可或缺的参考文献,无论是在团队协作...

    重构中错误代码

    总的来说,重构中的错误代码问题涉及了设计原则、代码结构、耦合度、抽象层次等多个方面。通过持续的代码审查、应用设计模式和遵循最佳实践,我们可以有效识别并修复这些问题,从而实现更高质量的软件系统。

    配电网络重构matlab代码

    本压缩包提供的代码正是针对这一主题,对于初学者来说,是一个学习和理解配电网络重构技术的宝贵资源。 首先,我们要了解配电网络重构的基本概念。配电网络重构是指通过改变配电网的开关状态,调整网络结构,以达到...

    软件重构 软件重构经典PPT

    为了有效地进行重构,建立一个强大的测试体系至关重要,包括自我测试代码、使用如JUnit这样的测试框架,并持续添加更多的测试用例。通过这些测试,可以确保重构过程中的代码质量不会下降,同时也能在早期发现和修复...

    OpenCV三维重构代码

    在计算机视觉领域,三维重构是一项关键技术,...深入学习和理解这些代码,将有助于掌握OpenCV进行三维重构的具体实践方法。在实际应用中,优化匹配策略、选择合适的标定板、调整匹配参数等都是提升重构质量的关键因素。

    重构-改善既有代码的设计+中文版.pdf

    通过重构,开发人员可以在项目的任何阶段对代码进行打磨和优化,从而确保软件系统的长期可维护性和稳定性。 书中的内容不仅仅是理论上的讲解,还包括了大量的实践指导。重构的方法包括但不限于:提炼类、提炼方法、...

    SharpRefactor(C#代码重构工具)

    现阶段主要用于C#代码重构。 所谓重构也就是“保持软件的外在功能不变,重新调整其内部结构”。 关于每种重构模式的含义,请参见http://www.refactoring.com/ 具体功能参见具体版本的特性列表。 对重构很...

    重构-改善既有代码的设计+中文版 pdf

    4. 在软件开发的任何阶段,当代码变得难以理解或难以修改时,通过重构可以清晰化代码结构。 书中还详细阐述了重构的具体步骤和实施细节。例如,重构的具体操作可能包括将某些代码移动到另一个类中,或者将某些代码...

    重构重构重构

    - 重构时机:在项目维护阶段或代码质量下降时进行,避免在项目初期过度重构。 - 重构风险:需谨慎评估重构可能带来的风险,如时间成本、团队成员的接受程度等。 - 技术债务:及时处理技术债务,避免积累过多导致...

Global site tag (gtag.js) - Google Analytics