易君召
发布于 2026-08-27 / 作者:易君召 / 27 阅读
0

如何高效进行代码审查(Code Review)

代码审查核心目标:找缺陷、统一规范、传递知识,而不是挑错、辩论风格。低效 CR 常见问题:review 大 MR、纠结无意义格式、不看业务逻辑、只看表面语法、反馈模糊。下面分提交方、评审方、流程机制、工具、避坑要点完整落地。

一、提交人:写好 MR/PR,是高效 CR 的前提

很多 CR 慢,根源是提交者。

  1. 控制单次变更体量

    • 理想单 MR:200‑400 行代码,最大不要超过 800 行。

    • 大功能拆成多个小 PR,按接口、领域、模块拆分;不要一次性扔几千行等待评审。

    • 无关改动剥离:格式化、换行、变量命名重构单独提交,不和业务逻辑混在一起。

  2. 写清晰的 MR 描述

    • 做了什么、为什么改、关联需求 /issue、测试点、边界 case、风险点。

    • 复杂逻辑画简单流程图;数据库变更标注 SQL、回滚方案。

    • 自测完毕再提 CR:单元测试、接口测试、边界场景,不要把测试工作丢给评审人。

  3. 做好自我预审 提交前自查清单:

    • 有没有硬编码、密码密钥、打印敏感信息

    • 异常是否捕获,会不会吞异常

    • SQL 有无索引、N+1、大事务

    • 空值、入参校验

    • 重复代码、可以抽公共方法

    • 单元测试是否覆盖正向、异常场景

原则:不要让评审人帮你找低级 bug

二、评审人:高质量评审,抓重点,不抠细枝末节

评审优先级(从高到低),优先看高风险项

  1. 业务逻辑正确性:是否满足需求,有没有逻辑漏洞,边界条件,错误分支。

  2. 安全风险:注入、越权、敏感数据泄露、权限校验。

  3. 性能问题:循环查库、大内存、锁粒度、慢 SQL、并发问题。

  4. 可维护性:复杂逻辑是否注释、命名、是否过度设计、重复代码。

  5. 架构 & 模块设计:是否符合系统分层、职责是否合理。

  6. 测试覆盖:单元测试、集成测试是否到位。

  7. 编码规范、格式:最低优先级,工具能搞定的不要人工争论。

工具可以自动搞定:格式化、空格、命名规范、静态检查,交给 linter、sonar,人工不要在 CR 里反复吵架空格。

评审实操技巧

  1. 分批看,不要一口气硬啃大 MR 大 PR 拆分看模块,分段评审,避免疲劳漏看问题。

  2. 先理解业务,再看代码 先看 MR 描述,明白要解决什么问题,再逐行读代码;不要上来就抠语法。

  3. 反馈要具体,不要模糊吐槽 ❌ 不好的反馈:这里写得很乱、这个写法不行 ✅ 好的反馈:

这里循环内查询数据库,会出现 N+1 问题,建议批量查询;参考 xxx 工具类。 这个分支没有异常处理,如果调用失败会直接抛出,建议增加 try‑catch 并打印日志。

区分三类意见:

  • 必须修改(blocker):逻辑 bug、安全、性能严重问题,不允许合并。

  • 建议优化(optional):可以改,也可以后续迭代,不强求本次。

  • 讨论(question):不确认意图,向提交人提问,不是命令对方修改。

  1. 尊重他人,对事不对人 聚焦代码,不评价人;鼓励说明方案优点,再提改进点。

三、流程机制:团队规则,从制度上保证 CR 效率

  1. 明确准入规则

  • MR 过小(几行 hotfix)也要 review;过大直接打回拆分。

  • CI 先跑过:编译、单元测试、静态代码扫描、代码规范检查,CI 不通过不进入人工评审。把低级问题拦截在机器阶段。

  1. 设置评审人、响应时效

  • 指定 1‑2 名熟悉该模块的人评审,不要全员抄送。

  • 约定响应 SLA:例如工作日 24h 内给出第一轮反馈,避免 MR 挂几天没人看。

  1. 区分 hotfix 紧急修复 线上故障补丁,走轻量化 CR,但不能完全跳过;记录后续复盘。

  2. 不要追求 “完美代码” CR 目标是生产可用,不是重构整个系统。不要借 CR 做大范围无关重构,重构单独开任务。

  3. 闭环管理 每条评论要处理:修改 / 讨论达成共识 / 接受暂不修改并记录。全部解决后再合并。

四、工具链提升 CR 效率

类型

工具示例

作用

Git 平台

GitLab / Gitee / GitHub PR/MR

代码评审基础,行级评论、变更对比

静态代码分析

SonarQube、SpotBugs、ESLint、Pylint

自动找 bug、漏洞、规范问题

测试

JUnit、Testcontainers

单元测试,CI 自动执行

格式工具

Prettier、Google‑Java‑Format

统一代码格式,消灭格式争吵

最佳实践:把 lint、静态检查、单元测试全部集成 CI 流水线,机器解决格式、低级 bug。

五、常见坑 & 最佳实践

  1. ❌ 大几千行 MR 提交评审 ✅ 小粒度迭代拆分,小 PR 更容易发现问题,也更容易 review。

  2. ❌ 评审人只看语法,不看业务逻辑 ✅ 优先业务逻辑,语法交给静态检查。

  3. ❌ CR 变成架构辩论会,在 MR 里讨论全新架构 ✅ 架构、方案提前文档评审,代码 review 阶段只校验实现是否符合既定方案。

  4. ❌ 只提问题不给思路 ✅ 指出问题同时给出参考方案,减少提交人猜怎么改。

  5. ❌ 提交人直接忽略评论强行合并 ✅ blocker 问题必须处理;建议类问题可以讨论,达成共识。

  6. ❌ 新人没人带,CR 只打回不给指导 ✅ 对于新人,CR 同时承担知识传递,解释为什么要这么改。

六、简易 CR 检查清单(可团队直接复用)

业务

  • 是否满足需求,边界、异常场景是否考虑?

  • 错误处理是否完备?失败后日志、告警是否到位?

安全 & 数据

  • 输入参数校验,防止越权、注入?

  • 密钥、敏感信息是否硬编码?

性能

  • 是否循环查询数据库?有无 N+1?

  • 锁、事务范围是否合理?

代码质量

  • 命名易懂,复杂逻辑有注释;无大量复制粘贴代码。

  • 单元测试覆盖主要分支。

工程

  • CI 全部通过;无无关的改动。


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/efficient-code-review-practices-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/