把一套跑了六年的老系统重构完,说几条坑

技术 495 字

十一月,我们花了四个月做的一次重构终于上线了。这套服务跑了六年,最早是两个人写出来的,后来陆续有十几个人改过,代码里能看出每一任维护者的风格。

技术方案我不细说,说说流程上真正有用的几条。

1、先加测试,再动代码

老系统没有单元测试。我的第一个月什么都没重构,就是给它补测试,覆盖率做到七成左右。这一步看起来浪费时间,实际是后面所有动作的前提——没有它,你改任何一行都不知道会不会把别的地方弄坏。

2、不要一次全换

一开始有人提议推倒重写。我们没这么做,理由是业务不能停,而且老代码里有一些没人说得清为什么那么写的分支,很可能对应着某个真实存在的异常场景。最后用的是绞杀式的做法:新逻辑一层层包在外面,老代码一块块退役。

3、数据迁移要能反复跑

迁移脚本写成幂等的,可以反复执行。测试环境里我们跑了十几遍,每次都发现新的边界情况。上线那天反而很平静,因为这些坑都在测试里踩完了。

4、留一条退路

新老两套逻辑并行跑了两周,用开关控制走哪条,比对两边输出的差异。有差异的地方一条条看过去,大部分是正常的格式差异,但也有两处是真的漏了逻辑。

重构最大的收获不是代码变好了,是那些没人知道的隐式规则被显式地写了出来。

返回首页