代码评审从来不是点个同意那么简单
上周跟着跑研发工位访谈,看到个开发对着屏幕皱了快十分钟眉。他提交的PR挂了三天,评审意见攒了17条,最后一条是“这个变量名我觉得不够表意”。
他差点把键盘扣了。
代码评审意见逐条标注在代码行的屏幕截图
说实话,很多人搞了好几年代码评审,根本没搞懂这件事的核心目的是什么。

CI流程拦截不符合代码规范的提交的流程图
我见过一次很典型的取舍。某团队做订单超时自动取消的逻辑,一开始新人写的方案是,用一个定时任务每分钟扫全量超时订单,代码写得很快,测试用例也全过了。评审的时候没人揪着变量名好不好看,全在算代价:现在每天10万单的时候,扫一次全表要8秒,等单量翻到100万,这个定时任务跑一次要多久?会不会把数据库连接池占满,拖垮正常的下单接口?最后大家凑出来的方案是,把超时消息扔到延迟队列里,到点再触发取消逻辑,虽然多写了两百行消息消费的兜底代码,但算下来,哪怕单量翻十倍,数据库的压力也不会涨。
这事没那么玄。代码评审的核心从来不是证明写代码的人水平不行,是把可能要花几个小时甚至几天排查的线上问题,在代码还没合并到主分支的时候就掐掉。
被误解成挑刺的评审现场
现在太多团队把代码评审搞成了两个极端。一种是纯走流程,PR弹窗弹出来,扫三秒就点同意,连改了哪几行都没仔细看。之前碰到个团队,线上出了个隐蔽的内存泄漏,查了半天才发现,那段出问题的代码,当时三个评审人全秒点了同意,连半句评论都没留。另一种是彻底走偏成批斗会,评审人拿着放大镜找不痛快,你少写个空行、变量名用了a和b、循环里多打了一行调试日志,都能揪出来写三行意见,完全不管这段代码是要赶在大促节点上线的应急逻辑。 最离谱的一次,我看到个资深开发给新人写的登录接口提意见,说你这里的密码加密算法为什么不用我们三年前废弃的那个?新人问理由,他说“我觉得那个更安全”。翻了翻内部文档,那个废弃算法去年刚出过两次高危漏洞,连维护分支都早就删干净了。评审该抓的从来不是格式问题
格式问题本来就不该占用评审人的精力。Pre-commit钩子、lint工具、格式化插件,把所有能机器校验的规则全扔给自动化流程,别让人当人肉格式检测器。之前跟个研发负责人聊,他们团队之前每周花在调整代码格式上的评审时间超过12小时,后来把所有格式化规则配到CI流程里,不符合规范的代码根本弹不出评审申请,一下子省出来的时间,全用来查真正的风险点。 那真正要抓的是什么?是这段代码改了之后,会不会把原来的多分支判断搞混了?是新增的数据库查询有没有走对索引?是异常分支触发的时候,会不会把带敏感信息的请求参数直接抛到前端日志里?是做缓存更新的时候,有没有考虑到多实例部署下的缓存击穿问题?