接手一个没人维护的老项目,我先看的三个地方

去年我接了一个内部系统:上线五年,作者三年前离职,说明文档还是脚手架里带的那份。代码能跑,接口每天有几千次调用,谁也不敢大改。

接下来那个月我做的事情,现在回看可以归结成三个地方。

一、表结构,以及所有改过它的脚本

代码可以重构,数据不能重来。所以我第一天先把表结构和索引导出来,一张一张看。

看的时候我不太关心字段命名,只关心三件事:哪些字段事实上是枚举却没有约束、哪些时间字段存的是本地时间、哪些表在持续变大。

那次就撞上一个典型问题:两张表里的「创建时间」用的不是同一个时区。一张写 UTC,另一张写本地时间,而报表把两张表按月关联统计,每个月头一天的数据都会少。这个问题在业务上吵了两年,谁都以为是报表工具的毛病。

统一到 UTC 的迁移脚本我写了半天,找它花了三天。

二、日志、错误上报和配置

老项目最麻烦的不是代码看不懂,而是出问题的时候你什么都看不见。

我会挨个确认三件事:日志输出到哪里、保留多久;有没有错误上报;配置是从环境变量读的,还是写死在某个文件里。

最想提醒的是配置。很多老项目里会有一份「本地能用」的配置文件被一起带上了服务器,里面混着测试环境的地址。这个坑我自己踩过一次:改完配置重启,接口连到了测试库,当天下午写进去的数据全放错了地方。

所以接手之后我做的第一件「有副作用」的改动,通常是给启动日志加一行 —— 打印当前生效的数据库地址和版本号。看上去没什么技术含量,但它能在出事的第一分钟救你一次。

再就是备份。老项目的数据库往往没人认真备份过,我会在动任何数据之前先手工导一份出来,哪怕它只是躺在硬盘上。

三、最近半年的提交记录

第三个地方是版本库。我一般看两样东西:最近半年谁在提交、都在改哪些文件;以及散落在代码里的 TODO 和 FIXME。

提交记录能告诉你这个项目真实的维护状态。如果最近半年只有一两次提交,说明它已经进入「能不动就不动」的阶段,那我的策略会偏保守:先补测试和监控,不碰核心逻辑。反过来,如果它每周都有人在改,那要小心的是历史包袱 —— 因为那些改动大概率没经过完整的回归。

TODO 注释是另一种情报。它们往往标着当年就知道有问题、但因为排期没处理的地方,通常也是后来最容易出故障的位置。我接手时列了十七条,最后确认有九条是真问题。

收尾

接手老项目最大的心态问题,是想先「把它理顺」。

但五年积累的问题不是一个月能理顺的。你能做的是先给自己搭一张地图:数据在哪里、出问题怎么看见、改动会被谁碰到。

地图画完,后面每一次修改才有底气。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容