写点什么

如何进行大规模重构

  • 2010-08-30
  • 本文字数:1144 字

    阅读完需:约 4 分钟

从定义上看,重构意味着改变程序的内部结构,而不改变外部的功能行为。 这样做大多是为了提高程序的非功能性属性,从而提高代码的质量。然而,即便是经验丰富的敏捷开发者,在进行大规模的重构时也是如履薄冰。社区中的成员对掌控大规模重构的几种方式进行了讨论。

在最近的讨论中,Andreas 想要知道三种可能完成大规模重构的方法中哪种最好。他的方式包括,

  • 一次完成——定义最终状态的结构,然后将代码一次完成。
  • 分而治之——将一大团乱七八糟的代码分为两段,然后重复这样的操作,直至完成……
  • 压制(Strangling)——压制类

大多数回应者都认为“一次完成”几乎不会成功的。 Aaron Digulla 指出他在整个职业生涯中一直使用压制的方法。这种想法是要慢慢地将不好的代码变为崭新的优质代码,并在过程中用测试来保证转换的正确性。这种策略的优势在于,因为你是从小片段慢慢开始的,因此风险很小。David Hall 和 Shane MacLaughlin 强调了分而治之方法的重要性,但也要针对程序所有修改的部分编写充分的测试。一些人建议完全推倒重写,但是正如 InfoQ 之前的一篇文章所说的,那会让你面临一系列的挑战

Sibylle Peter 和 Sven Ehrke 提到,他们使用的方法是,先对工作进行评估,然后为大规模的重构制定主要计划。对于每个重构步骤,他们都会遵循以下三步:

  • 分析: 定义 想要的结果,并找到达到目的的方法。
  • 实现: 应用重构技术 来相应地改变代码。
  • 稳定: 应用一些方法, 确保实现的结果是 持久的。

另一种让大规模重构得以进行的方法是“天皇牌”(Mikado)方法。回顾天皇牌方法的历史,我们会发现它与 Daniel Brolund Ola Ellnestam 所做的工作有关,而它的名字来自于天皇牌游戏。根据这个方法,

修改代码就像进行天皇牌游戏一样。当你想要对代码库做出修改时,几乎无法以正确的方式做出准确的修改 你需要做些准备、移动代码、抽取类等等。我们很少会第一次就抓到天皇牌。 更多的是,在“重构天皇”可用之前,你需要做一系列的变动,有条不紊地向你的牌堆的底部进发,以达到目的。

使用天皇牌方法,首先要记住最终的目的。对于任何需要重构的代码,我们首先要创建一幅依赖图,在上面写下最终的目标。下一步是识别出想要达到目标所需要的直接前提,然后以这种方式继续识别依赖关系,直到达到没有任何前提或者依赖的叶子节点。 这可能是开始重构最好的方式。一旦有了依赖关系图,那么核心思想就是从叶子节点一步一步回溯,直到达到目标。

这种方法强调了撤销操作的重要性,团队不应该害怕因为回退而抛弃一些改变。他还建议不要停止分析,而应该从最基本步骤开始,然后理解顺序。现在他们已经提供了关于“天皇牌”方法的书的草稿版本。

因此,大规模重构很难做,做好这项工作的关键在于要识别出起点,然后沿着路线小步前进。

查看英文原文: How To Do Large Scale Refactoring

2010-08-30 08:473835
用户头像

发布了 340 篇内容, 共 129.5 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

Android事件体系全面总结+实践分析,爆火的Android面试题

android 程序员 移动开发

Android之内存泄漏调试学习与总结,面试总结

android 程序员 移动开发

Android-MVP模式详解,差点无缘Offer

android 程序员 移动开发

androidui设计原理,享学课堂Android架构师vip

android 程序员 移动开发

令人心动的1024 | 旺链科技为全体程序员们准备了满满惊喜!

旺链科技

区块链 程序员 1024我在现场

Android-Binder机制及AIDL使用,Android高级面试题

android 程序员 移动开发

androidjetpack视频,扔物线五期

android 程序员 移动开发

中科柏诚与国际经管学院培养人才 助推文化振兴

联营汇聚

webpack 或 esbuild:为什么不是两者兼而有之?

吴脑的键客

JavaScript 大前端 webpack

Android 400道面试题通关宝典助你进大厂,android插件化开发指南

android 程序员 移动开发

Android中高级岗面试为何越来越难,细节决定成败

android 程序员 移动开发

BAT面试Java岗经验汇总:面试重点+精选面试120题+6条面试经验!

Java 程序员 面试

Python代码阅读(第45篇):柯里化

Felix

Python 编程 Code Programing 阅读代码

模块1实战

在路上

2021Android常见笔试题,吐血整理

android 程序员 移动开发

AndroidHook机制连简单实战都不会凭什么拿高薪,在线面试指南

android 程序员 移动开发

androidwebview开发,动脑学院vip视频破解

android 程序员 移动开发

2021Android大厂高频面试题,前方高能

android 程序员 移动开发

电子CRM软件是中小型企业的重要工具

低代码小观

企业管理 系统 CRM 电子 管理应用

Android 400道面试题通关宝典助你进大厂,Android性能优化推荐书

android 程序员 移动开发

Android-App的设计架构经验谈,附学习笔记+面试整理+进阶书籍

android 程序员 移动开发

阿里的JVM性能优化面试题到底有多难?这四大问题你能答出多少!

Java 编程 程序员

2021Android大厂面试题来袭,腾讯T3面试官透露

android 程序员 移动开发

四大常用MQ的优缺点和应用场景选择

偶尔善良

RocketMQ RabbitMQ Activemq Kafk

android webview!动脑学院课程值得买吗

android 程序员 移动开发

价值百万!深入学习Java高并发编程(第三版)全网首发

Java架构追梦

Java 架构 面试 线程 并发

androidui设计,android享学课堂vip课程下载

android 程序员 移动开发

androidwebview设置,享学课堂Android架构师第一期

android 程序员 移动开发

区块链综述

CECBC

Activity的6大难点你会几个,安卓开发权威指南

android 程序员 移动开发

2021Android大厂面试题来袭,Android程序员如何通过跳槽薪资翻倍

android 程序员 移动开发

如何进行大规模重构_研发效能_Vikas Hazrati_InfoQ精选文章