【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

用 Mikado 方法重构遗留软件

  • 2012-03-18
  • 本文字数:936 字

    阅读完需:约 3 分钟

在敏捷印度 2012 的一次研讨会上, Daniel Brolund 介绍了 Mikado 方法。此方法主张敏捷团队在面临低质的遗留代码时,采用简单的方法,分成小部分逐步完成重构。

通常,当你想在遗留应用程序中做个简单的改动时,经常会有某些事情出错而使这个改动无法执行——如编译出错、验收测试失败(如果有验收测试!)等。当你修复这些问题后,更多的问题又出现了——直到看上去事情全都失控,你都恨不得来重写这个系统了。

Mikado 方法提出了简单的解决方案。当你进行重构时,一旦发现某些依赖的部分出错了,则画一张图表来表示这些错误,并标明真正去修复错误之前,需要先做什么事情。然后还原你的改动,开始观察那张依赖图中的某个叶子结点。修复那个错误,看它是否会引起更多的问题——如果不会,重复这个过程——继续对剩余部分进行重构并在图中画出更多的叶子、还原你的改动,并再从某个叶子结点开始修复工作。

每当还原代码时,你可能觉得自己又回到了原点,而实际上并没有——比起刚开始,你已经掌握了更多的信息。而且,你也主要是在编译能通过(并且测试通过!)的代码上做修改,而不是大量无法编译的代码, 所以也有可能可以使用 IDE 重构工具。每当一个叶子结点上的问题都修复完了、且不再引起更多错误时,就可以签入代码,在依赖图上把这个叶子结点标记为绿色;当某个结点上的所有叶子结点都是绿色了,你就可以以那个结点为基准开始工作,重复上述的过程,直到完成所有原定的重构工作。这意味着代码是以很小的增量逐渐签入的,且可以直接在主干代码上工作(而不用为此再打分支)。

对于重构大型应用系统,似乎这个图表会变得太庞大且难以控制,但是 Daniel 说通常并不是这样的——依赖图的规模与代码的规模通常并不直接成比例。依赖图的主要目的是清楚地记录每一步重构开始时的目标和范围,以便让自己只朝着这个目标工作,而不是试图一次做太多改动。

Daniel 用一个简单的 Java 程序演示了这个方法(这个程序需要重构以使它能支持多种多样的客户)。在随后一场简单的交流会上,与会者也按照此方法顺利完成了重构。你可以从 Github 上下载这个练习的主要内容,也可以下载这本电子书。你还可以阅读InfoQ 上更早的一篇文章《如何进行大规模重构》了解更多。

查看英文原文: Mikado Method For Refactoring Legacy Software

2012-03-18 00:361814
用户头像

发布了 27 篇内容, 共 72596 次阅读, 收获喜欢 0 次。

关注

评论

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

架构师1期3周作业

FG佳

极客大学架构师训练营

「架构师训练营」第三周课后练习

L

训练营第三周作业 1

仲夏

极客大学架构师训练营

常用设计模式

wing

架构训练营第三周作业

Geek_ce484f

极客大学架构师训练营

week-3-part2 学习总结

陈龙

第三周作业及笔记

橘子皮嚼着不脆

第二讲 学习总结

mm马

极客大学架构师训练营

设计模式总结

天天向上

极客大学架构师训练营

「架构师训练营」第三周课后练习

L

第三周第二题

sean

第二讲 作业一

mm马

极客大学架构师训练营

架构师训练营第 1 期 -Week3 - 代码重构学习总结

鲁大江

设计模式 极客大学架构师训练营

架构师训练营第三周总结

月殇

极客大学架构师训练营

架构训练营第三周作业

Geek_ce484f

极客大学架构师训练营

week-3-part1 手写单例模式

陈龙

架构师训练营 第三周作业

郎哲158

架构师1期第三周总结

FG佳

极客大学架构师训练营

架构师训练营第 3 周课后练习

叶纪想

极客大学架构师训练营

架构师训练营第三周学习总结-设计模式

郎哲158

学习 极客大学架构师训练营

第三周笔记

orchid9

架構師訓練營第 1 期 - 第 03 周總結

Panda

架構師訓練營第 1 期

单例

scorpion

训练营第三周作业 2

仲夏

极客大学架构师训练营

LeetCode题解:49. 字母异位词分组,数组排序,JavaScript,详细注释

Lee Chen

大前端 LeetCode

手写单例模式(登记式/静态内部类)

orchid9

架构师训练营第 1 期 -Week3 - 课后练习

鲁大江

php 单例模式 极客大学架构师训练营 go单例模式

组合模式程序案例

天天向上

极客大学架构师训练营

spring-boot-route(四)全局异常处理

Java旅途

Java Spring Boot

第三周第一题

sean

架构师训练营第 1 期-week3

习习

用Mikado方法重构遗留软件_研发效能_Roopesh Shenoy_InfoQ精选文章