我删掉了一段 "看起来很有用" 的代码,结果测试提的 bug 少了三分之一

0 阅读2分钟

先说结论:一段代码在不在,比它写得漂不漂亮更重要。

Github二维码.png

👆了解更多

我们组有个运行了快两年的老服务,一直有个很奇怪的现象:线上日志里偶尔会出现一些莫名的报错,但功能看起来又没受影响,大家排查几次都没找到根因,就慢慢没人管了。这些报错像房间里的大象,谁都知道,谁也不碰。

直到有一次需求要在这块逻辑上加个开关,我顺手翻到了那段 "源头" 代码 —— 一个两年前加进来的兼容逻辑,专门处理一个已经下线了的第三方接口。

这个第三方接口早就关停了,可这段兜底代码还留在主流程里,每次请求都要先走一遍空判断、再走一遍异常捕获,浪费性能不说,还掩盖了后面真正业务的异常。

我做了个决定:删掉它,看看会发生什么。

删完重新跑测试,意外的是,之前那些让人摸不着头脑的报错,直接消失了三分之一。原因很简单 —— 那段死代码一直在悄悄吞掉真正的异常,把问题都藏在兜底逻辑里,让后面的业务代码永远暴露不出真实错误。

事后复盘,这段代码存在的原因只有一个:当初加它的人怕 "万一第三方接口又恢复了",就一直留着。可两年过去了,这个 "万一" 从来没发生过,反而成了整个模块里最大的隐患。

这件事给我的三点教训

  1. "以防万一" 的代码,大多数时候是负债不是资产 没有明确触发条件的兜底逻辑,只会掩盖真实问题。真正需要的时候,版本控制里都还留着,随时可以找回来。
  2. 删代码之前,先看它被调用的真实路径 别只看注释和名字,去查它到底在哪个流程里被触发、有没有依赖方。确认是死代码,就果断删。
  3. 日志里反复出现但查不到的报错,大概率是被兜底逻辑吞了 这种问题不能靠 "忽略",要么删掉吞异常的代码让问题暴露,要么就把异常升级到真正该处理的层级。

结尾

很多人觉得删代码比写代码简单,其实恰恰相反。删掉一段 "看起来有用" 的代码需要勇气,更需要把整条链路想清楚。 当代码量积累到一定程度,真正的优化不是再加东西,而是敢不敢做减法。 你线上有没有那种 "谁都看不懂但谁都不敢动" 的代码?欢迎评论区聊聊。