人人都会AI编程

14.4 遗留代码理解与梳理技巧

更新时间:2026-06-28

面对一团糟的祖传代码,别急着骂娘,也别一上来就重构。先活下来,再搞明白,最后才动手改。

1. 让代码跑起来是第一要务

  • 能编译、能运行、能看到日志,比看100遍源码都强
  • 先配好环境,哪怕是在本地 hack 数据库连接字符串也要跑通
  • 小技巧:在 main 或接口入口加个打印,确认这行代码真的会执行

2. 从"入口"往"里"追,别从"里"往"入口"猜

  • 找 HTTP 接口、定时任务、MQ 消费者这些触发点
  • 用 IDE 的"查找用法"(Find Usages)反向追踪,别靠全文搜索猜调用关系
  • 画一张简单的调用链:Controller → Service → DAO,先理主干,不管细节

3. 先找"边界"和"契约"

  • 关注输入输出:这个方法接收什么参数?返回什么?抛哪些异常?
  • 关注外部依赖:调了哪些数据库表?发了什么 MQ?调了第三方接口吗?
  • 把这些外部交互点列出来,你就掌握了 70% 的业务逻辑

4. 用"特征测试"(Characterization Test)锁定行为

  • 在改动前,先写个单元测试把当前输出记录下来(哪怕结果是错的)
  • 目的不是验证正确性,而是确保你改完后,输出没变(或明确知道变了哪里)
  • 示例:原来代码返回 null,你的测试就断言返回 null,重构后再改正确逻辑

5. 打印日志比断点更管用

  • 在关键路径插临时日志:log.info("=== 进入xx方法,参数:{}", param)
  • 跑一遍业务场景,看日志流向,比静态看代码效率高 10 倍
  • 用完记得删或改 debug 级别,别留垃圾

6. 别试图一次看懂全部

  • 第一次梳理只关注你要改的那个小功能涉及的路径
  • 其他分支标注"TODO:黑盒,暂不关心"
  • 代码是渐进的,改一次懂一块,三个月后就全熟了

7. 善用 Git 历史当"文档"

  • git blame 看最后谁改的,直接去找人问(如果还在职)
  • 看提交信息里的需求单号,去 Jira/禅道找原始需求背景
  • 对比半年前版本的代码,看哪些是被"临时修补"坏的

8. 边读边写"脏文档"

  • 准备一个 markdown 文件,边读边记:坑点、魔法数字含义、奇怪的 if 条件
  • 不用写得漂亮,关键词就行,比如:// 这里 if(x==3) 是因为历史数据兼容
  • 下次再来改时,你会感谢自己

9. 重构前先复制一份

  • 对要改的方法,先整体复制命名为 xxx_old,注释掉备用
  • 改崩了能瞬间回滚,心理有底才敢动手
  • 确认没问题后,再删旧代码

10. 承认有些代码就是屎山,别幻想洗干净

  • 只要业务还在跑,能不动就不动
  • 核心业务逻辑外面包"防腐层",别钻进去改
  • 记住:你的目标是完成需求,不是获得代码洁癖奖状

一句话总结:遗留代码面前,"胆小甚微"是美德,"大胆假设"是找死。先当考古学家,再当建筑师。