代码审查核心目标:找缺陷、统一规范、传递知识,而不是挑错、辩论风格。低效 CR 常见问题:review 大 MR、纠结无意义格式、不看业务逻辑、只看表面语法、反馈模糊。下面分提交方、评审方、流程机制、工具、避坑要点完整落地。
一、提交人:写好 MR/PR,是高效 CR 的前提
很多 CR 慢,根源是提交者。
控制单次变更体量
理想单 MR:200‑400 行代码,最大不要超过 800 行。
大功能拆成多个小 PR,按接口、领域、模块拆分;不要一次性扔几千行等待评审。
无关改动剥离:格式化、换行、变量命名重构单独提交,不和业务逻辑混在一起。
写清晰的 MR 描述
做了什么、为什么改、关联需求 /issue、测试点、边界 case、风险点。
复杂逻辑画简单流程图;数据库变更标注 SQL、回滚方案。
自测完毕再提 CR:单元测试、接口测试、边界场景,不要把测试工作丢给评审人。
做好自我预审 提交前自查清单:
有没有硬编码、密码密钥、打印敏感信息
异常是否捕获,会不会吞异常
SQL 有无索引、N+1、大事务
空值、入参校验
重复代码、可以抽公共方法
单元测试是否覆盖正向、异常场景
原则:不要让评审人帮你找低级 bug。

二、评审人:高质量评审,抓重点,不抠细枝末节
评审优先级(从高到低),优先看高风险项
业务逻辑正确性:是否满足需求,有没有逻辑漏洞,边界条件,错误分支。
安全风险:注入、越权、敏感数据泄露、权限校验。
性能问题:循环查库、大内存、锁粒度、慢 SQL、并发问题。
可维护性:复杂逻辑是否注释、命名、是否过度设计、重复代码。
架构 & 模块设计:是否符合系统分层、职责是否合理。
测试覆盖:单元测试、集成测试是否到位。
编码规范、格式:最低优先级,工具能搞定的不要人工争论。
工具可以自动搞定:格式化、空格、命名规范、静态检查,交给 linter、sonar,人工不要在 CR 里反复吵架空格。
评审实操技巧
分批看,不要一口气硬啃大 MR 大 PR 拆分看模块,分段评审,避免疲劳漏看问题。
先理解业务,再看代码 先看 MR 描述,明白要解决什么问题,再逐行读代码;不要上来就抠语法。
反馈要具体,不要模糊吐槽 ❌ 不好的反馈:这里写得很乱、这个写法不行 ✅ 好的反馈:
这里循环内查询数据库,会出现 N+1 问题,建议批量查询;参考 xxx 工具类。 这个分支没有异常处理,如果调用失败会直接抛出,建议增加 try‑catch 并打印日志。
区分三类意见:
必须修改(blocker):逻辑 bug、安全、性能严重问题,不允许合并。
建议优化(optional):可以改,也可以后续迭代,不强求本次。
讨论(question):不确认意图,向提交人提问,不是命令对方修改。
尊重他人,对事不对人 聚焦代码,不评价人;鼓励说明方案优点,再提改进点。
三、流程机制:团队规则,从制度上保证 CR 效率
明确准入规则
MR 过小(几行 hotfix)也要 review;过大直接打回拆分。
CI 先跑过:编译、单元测试、静态代码扫描、代码规范检查,CI 不通过不进入人工评审。把低级问题拦截在机器阶段。
设置评审人、响应时效
指定 1‑2 名熟悉该模块的人评审,不要全员抄送。
约定响应 SLA:例如工作日 24h 内给出第一轮反馈,避免 MR 挂几天没人看。
区分 hotfix 紧急修复 线上故障补丁,走轻量化 CR,但不能完全跳过;记录后续复盘。
不要追求 “完美代码” CR 目标是生产可用,不是重构整个系统。不要借 CR 做大范围无关重构,重构单独开任务。
闭环管理 每条评论要处理:修改 / 讨论达成共识 / 接受暂不修改并记录。全部解决后再合并。
四、工具链提升 CR 效率
最佳实践:把 lint、静态检查、单元测试全部集成 CI 流水线,机器解决格式、低级 bug。

五、常见坑 & 最佳实践
❌ 大几千行 MR 提交评审 ✅ 小粒度迭代拆分,小 PR 更容易发现问题,也更容易 review。
❌ 评审人只看语法,不看业务逻辑 ✅ 优先业务逻辑,语法交给静态检查。
❌ CR 变成架构辩论会,在 MR 里讨论全新架构 ✅ 架构、方案提前文档评审,代码 review 阶段只校验实现是否符合既定方案。
❌ 只提问题不给思路 ✅ 指出问题同时给出参考方案,减少提交人猜怎么改。
❌ 提交人直接忽略评论强行合并 ✅ blocker 问题必须处理;建议类问题可以讨论,达成共识。
❌ 新人没人带,CR 只打回不给指导 ✅ 对于新人,CR 同时承担知识传递,解释为什么要这么改。
六、简易 CR 检查清单(可团队直接复用)
业务
是否满足需求,边界、异常场景是否考虑?
错误处理是否完备?失败后日志、告警是否到位?
安全 & 数据
输入参数校验,防止越权、注入?
密钥、敏感信息是否硬编码?
性能
是否循环查询数据库?有无 N+1?
锁、事务范围是否合理?
代码质量
命名易懂,复杂逻辑有注释;无大量复制粘贴代码。
单元测试覆盖主要分支。
工程
CI 全部通过;无无关的改动。
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢