代码审查(Code Review)

代码审查(Code Review,又称代码复查)是通过阅读和评估源代码的方式,确保代码在设计、实现、性能、安全和可维护性等方面满足团队标准与业务需求。

参考资料:

核心理念:代码审查的目标是“帮助别人变得更好”,而不是“替别人写代码”。


一、为何要进行代码审查

代码审查的目的不仅是发现缺陷,更是持续提升团队整体工程质量和能力的过程:


二、谁来审查

角色职责
作者(Author)提交改动的人,应在提交前自检并准备好说明。
审查者(Reviewer)负责从设计、规范、性能、安全等维度提出反馈。
维护者(Maintainer)对核心模块或仓库质量负责,有最终合并权。
新成员(Observer)可旁听或参与小型审查,学习代码质量标准。

原则上:代码由作者外的至少一名高级开发人员审查。对于核心或高风险变更,应由两人以上共同审查。


三、审查什么

代码审查的关注点包括但不限于以下方面:

  1. **设计合理性**:是否符合系统架构与设计约束。
  2. **可读性与可维护性**:命名、结构、注释是否清晰。
  3. **功能正确性**:是否满足需求,无逻辑或边界错误。
  4. **测试质量**:是否覆盖主要场景,测试是否健壮。
  5. **性能影响**:是否引入明显性能回退。
  6. **安全性**:是否存在潜在安全漏洞。
  7. **兼容性**:是否考虑上下游系统的接口影响。

四、审查策略

4.1 必备检查项

4.2 业务高压线

4.3 历史故障点

4.4 变更分级

级别示例审查要求
高风险核心逻辑、数据库结构、跨模块接口≥2人审查
中风险新功能、业务逻辑调整1人审查
低风险文档更新、UI微调、注释优化可快速审查

4.5 内容分级


五、审查标准


六、审查原则


七、审查形式

7.1 同步评审(CR讲解)

开发者现场讲解代码思路与变更内容,审查者同步提问、讨论。适用于核心模块、复杂逻辑、跨模块变更。

特点:

7.2 异步评审(CR Review)

开发者通过工具(如 GitLab MR、Gerrit、GitHub PR)提交代码,由审查者异步评审。

特点:

原则:小而多。每次提交的变更量应尽量小,以提高审查效率。


八、审查工具

工具特点
Git / GitLab / GitHub最常用,支持 MR/PR 工作流
Gerrit适合大型企业级项目,支持严格权限控制
UpsourceJetBrains 提供的专业代码审查平台
SonarQube静态扫描结合人工审查,提升整体质量
Lint 工具自动化格式和规范检查,减少低级问题

九、代码飞检(Code Spot Check)

代码飞检是由质量负责人或架构师对随机模块或高风险变更进行独立审查。目标是发现系统性问题、违规实践或潜在技术债。


十、万物评审(Review Everything)

代码审查只是质量体系中的一个环节。真正的工程文化应做到“万物可评审”,包括:

通过多人参与、视角多样的方式,提升决策的完整性与前瞻性。

10.1 评审流程五问

  1. **为什么要做?**(目标与价值)
  2. **怎么做?**(设计与实现)
  3. **哪里做?**(影响范围)
  4. **何时做?**(时机与节奏)
  5. **谁来做?**(责任与角色)

10.2 成本与收益分析

10.3 评审形式

10.4 参与人员

角色职责
发起者发起评审,提供材料与背景
主持人控制节奏,保持讨论聚焦
作者讲解内容,接受反馈
评审员提出意见与建议
记录员记录结论与改进项
团队关键成员负责最终决策或签核

十一、度量与改进(可选)

建立代码审查指标体系,用数据反哺流程优化:

指标含义
审查覆盖率被审查提交占比
审查时长平均从提交到通过时间
缺陷发现率每次审查发现的有效问题数
审查参与度团队成员参与情况
审查满意度审查过程反馈

十二、总结

代码审查不是形式,而是一种工程文化。它让“代码质量”从个人责任变为团队共识

审查的目标是更好的产品、更强的团队和更健康的技术生态。