写点什么

如何进行大规模重构

  • 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:474336
用户头像

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

关注

评论

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

GitHub上架即下架!《分布式系统人人都是架构师》全彩笔记开源

Java 分布式 系统架构 架构师

MobTech MobPush|厂商通道支持

MobTech袤博科技

提高单元测试质量的低代码思路

赫杰辉

Java 后端 低代码 单元测试

嘉为蓝鲸研发运营一体化解决方案入选金融信创优秀解决方案

嘉为蓝鲸

金融 解决方案 一体化

一文详解扩散模型:DDPM

京东科技开发者

人工智能 AIGC 企业号 3 月 PK 榜 DDPM

Python:直观地查看某个物品使用一段时间之后每天的平摊价格

强劲九

Python 面试 matplotlib 算法题

跨越前后端排障鸿沟,精准排障,让IT人员不“撕逼”

嘉为蓝鲸

告警 后端技术 IT 运维

行业分析| anyRTC智慧视频监控的应用

anyRTC开发者

人工智能 音视频 智慧城市 智慧交通 视频监控

小程序营销模版——企业和开发者的应用形态

没有用户名丶

小程序容器

KubeVela 1.7 版本解读:接管你的已有工作负载

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

喜报|得帆信息成为中国信通院“卓信大数据计划”成员单位

得帆信息

低代码 中国信通院

MobTech MobPush|智能标签推送

MobTech袤博科技

一文带你搞懂如何优化慢SQL

京东科技开发者

数据库 sql 优化 企业号 3 月 PK 榜

借AI之势,打破创意与想象的边界

阿里云CloudImagine

阿里云 AIGC

强大的PDF文档处理:Acrobat Pro DC 2023 中文版

真大的脸盆

Mac PDF Mac 软件 pdf编辑器 PDF文档处理

2023 微信公开课黄铁鸣企业微信最新动态:1200w、5亿客户、GMV上千亿

B Impact

CVPR 2023 大模型研讨会召开在即,国际技术竞赛正式开赛

飞桨PaddlePaddle

2步搞定拼版!AD通用拼版技巧分享!

华秋PCB

工具 PCB 原理图 PCB设计 拼版

如何构建用户体验优化体系?

嘉为蓝鲸

IT运维 用户体验设计 用户体验分析

阿里架构调整完毕,成立云智能集团全面独立经营,张勇兼任CEO

B Impact

通信云服务全球突围,融云助力互联网产业出海「外卷」

融云 RongCloud

互联网 通信 融云

多工厂、多基地数字化生产管理有难题?得帆云iPaaS可以帮你

得帆信息

集成

AI系统简介和分类

陈磊@Criss

平台使用体验和大客户推荐指数稳居第一,得帆信息入选《2022中国低代码全景产业研究报告》

得帆信息

低代码平台

一份GitHub star过万的1121页图解算法让“他”成功杀进字节跳动

程序知音

Java 算法 编程语言 后端技术

在 Rainbond 上使用 Curve 云原生存储

北京好雨科技有限公司

云原生 kubernete 分布式存储 rainbond

OceanBase大事记(2023年3月)

OceanBase 数据库

数据库 oceanbase

云服务过载控制的前世今生

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

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