3Software Engineering at Google

代码审查

代码质量

代码审查审查流程可读性一致性

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第3章:代码审查(Code Review)

一、导读

1.1 本章学习目标

第3章讲解代码审查——Google 保证代码质量的核心实践。

本章的核心学习目标包括:

  • 理解代码审查的目的和价值
  • 掌握审查流程和最佳实践
  • 学会成为好的审查者和被审查者

1.2 为什么本章如此重要

代码审查不仅仅是找 bug——它是知识传播、代码质量、团队建设的核心实践。Google 要求每一次代码修改都必须经过审查。

1.3 核心问题引导

代码审查的真正目的是什么?

如何平衡审查速度和审查质量?

审查者应该关注什么?

如何处理审查中的分歧?


二、核心概念详解

2.1 审查的目的

代码审查的多重目的:

1. 正确性:代码是否做了它应该做的?
2. 可读性:代码是否易于理解?
3. 一致性:代码是否符合团队规范?
4. 可维护性:代码是否易于修改?
5. 安全性:代码是否有安全漏洞?
6. 知识传播:审查者是否学到了新东西?

2.2 审查流程

Google 的审查流程:

1. 作者提交变更(CL - Changelist)
2. 自动检查(lint、测试、构建)
3. 人工审查
   - 至少一个审查者批准
   - OWNERS 批准(如果需要)
4. 合并

审查速度目标:
- 1 个工作日内响应
- 小的 CL 优先审查
- 大的 CL 拆分审查

2.3 审查者指南

审查者应该关注:

1. 设计
   - 这个修改是否属于正确的代码位置?
   - 是否有更简单的设计?

2. 功能
   - 代码是否做了作者想要它做的?
   - 是否有边界情况没有处理?

3. 复杂性
   - 代码能否更简单?
   - 是否有不必要的抽象?

4. 测试
   - 是否有正确的测试?
   - 测试是否清晰、有用?

5. 命名
   - 变量名是否清晰?
   - 命名是否一致?

6. 注释
   - 注释是否解释了"为什么"?
   - 是否有过时的注释?

2.4 被审查者指南

被审查者的最佳实践:

1. 小的变更
   - 每个 CL 只做一件事
   - 大的重构分多个 CL

2. 清晰的描述
   - 说明为什么要做这个修改
   - 说明如何测试

3. 积极回应
   - 快速回应审查意见
   - 解释不同意的理由
   - 接受合理的建议

4. 感谢审查者
   - 审查是无偿劳动
   - 感谢他们的时间

三、实战案例

3.1 案例一:好的审查评论

不好的评论:
"This is wrong."(这不对。)

好的评论:
"I think this approach might have an issue with null values. 
Consider using Optional<String> instead of String for the 
return type of getUserEmail(). This would make it explicit 
that the email might not be present.

What do you think about:

Optional<String> getUserEmail() {

return Optional.ofNullable(user.getEmail());

}

"
原则:
- 解释为什么
- 提供具体建议
- 保持尊重和开放

四、本章小结

审查目的:正确性、可读性、一致性、可维护性、安全性、知识传播。

审查流程:自动检查 + 人工审查,1 天内响应。

审查者:关注设计、功能、复杂性、测试、命名。

被审查者:小变更、清晰描述、积极回应。


五、思考与练习

你的团队有代码审查吗?如何改进?

如何平衡审查速度和审查质量?

如何处理审查中的技术分歧?


3/8代码审查
0%