Skip to content

Code Review

概述

代码评审(Code Review)是软件开发过程中保证代码质量的重要环节。通过同行评审代码,可以发现潜在问题、分享知识、提高团队整体代码水平。

代码评审意义

提高代码质量

  • 发现 Bug:在代码合并前发现潜在问题
  • 代码规范:确保代码符合团队规范
  • 性能优化:识别性能瓶颈
  • 安全隐患:发现安全漏洞

知识共享

  • 学习机会:从他人代码中学习新技巧
  • 团队理解:了解项目各部分的实现
  • 知识传承:避免知识孤岛

团队协作

  • 统一标准:建立团队编码标准
  • 责任共担:代码是团队的共同资产
  • 沟通桥梁:促进团队成员交流

文档价值

  • 历史记录:记录设计决策和讨论
  • 新人指导:帮助新成员理解代码

评审流程

标准评审流程

创建 PR → 自动检查 → 人工审核 → 修改反馈 → 批准合并

详细步骤

1. 作者准备 PR

bash
git checkout -b feature/new-feature
git add .
git commit -m "feat: add new feature"
git push origin feature/new-feature

创建 PR 并填写完整描述。

2. 指定审核者

根据代码模块指定相关审核者:

bash
gh pr edit --add-reviewer username1,username2

3. 自动化检查

CI/CD 自动运行:

  • 单元测试
  • 代码风格检查
  • 安全扫描
  • 构建验证

4. 审核者评审

审核者查看代码变更,添加评论。

5. 作者响应反馈

根据反馈修改代码:

bash
git add .
git commit -m "refactor: address review comments"
git push origin feature/new-feature

6. 审核者批准

审核者选择 "Approve"。

7. 合并代码

满足所有条件后合并 PR。

评审检查清单

代码正确性

  • [ ] 代码是否实现了预期功能
  • [ ] 是否有明显的 Bug
  • [ ] 边界条件是否处理正确
  • [ ] 错误处理是否完善

代码质量

  • [ ] 代码是否清晰易读
  • [ ] 命名是否有意义
  • [ ] 是否有重复代码
  • [ ] 函数/方法是否过长

测试覆盖

  • [ ] 是否有足够的单元测试
  • [ ] 测试用例是否有效
  • [ ] 边界情况是否测试

性能考虑

  • [ ] 是否有性能问题
  • [ ] 数据库查询是否优化
  • [ ] 是否有不必要的计算

安全考虑

  • [ ] 是否有安全漏洞
  • [ ] 敏感数据是否保护
  • [ ] 输入是否验证

评审工具使用

GitHub 代码审核

查看变更

  1. 打开 PR 页面
  2. 点击 "Files changed"
  3. 浏览文件变更

添加行内评论

  1. 点击代码行号
  2. 输入评论内容
  3. 点击 "Add single comment" 或 "Start a review"

提交审核

  1. 完成所有评论
  2. 点击 "Review changes"
  3. 选择审核结果:
    • Comment:仅评论
    • Approve:批准
    • Request changes:要求修改

GitHub CLI 审核

查看 PR

bash
gh pr view 123
gh pr diff 123

添加评论

bash
gh pr comment 123 --body "LGTM!"

批准 PR

bash
gh pr review 123 --approve
gh pr review 123 --approve --body "Good work!"

请求修改

bash
gh pr review 123 --request-changes --body "Please fix the error handling"

GitLab 代码审核

查看变更

  1. 打开 Merge Request
  2. 点击 "Changes"
  3. 查看文件差异

添加评论

  • 行内评论:点击代码行
  • 讨论评论:在 Discussion 区域

提交审核

点击 "Resolve discussion" 或 "Approve"。

本地审核

检出 PR 分支

bash
gh pr checkout 123

本地运行测试

bash
npm test
npm run lint

本地查看变更

bash
git diff main...HEAD

评审最佳实践

作者最佳实践

提交前自审

bash
git diff main...HEAD

检查自己的代码变更。

编写清晰的 PR 描述

markdown
## 变更目的
实现用户登录功能

## 变更内容
- 添加登录 API
- 实现前端登录表单
- 添加单元测试

## 测试方法
1. 运行 npm test
2. 访问 /login 页面
3. 输入测试账号登录

## 相关 Issue
Closes #456

保持 PR 小而专注

  • 每个 PR 只做一件事
  • 控制变更在 400 行以内
  • 便于快速审核

及时响应反馈

  • 快速回复评论
  • 说明修改原因
  • 感谢审核者

审核者最佳实践

及时审核

  • 在 24 小时内开始审核
  • 不要让 PR 积压

建设性反馈

markdown
建议:这里可以使用 Array.find 替代 for 循环

const user = users.find(u => u.id === id);

区分问题和建议

markdown
问题(必须修改):
这里缺少错误处理,可能导致程序崩溃。

建议(可选):
考虑使用更语义化的变量名。

解释原因

markdown
建议添加空行分隔逻辑块,提高可读性:

function calculateTotal(items) {
  const subtotal = items.reduce((sum, item) => sum + item.price, 0);
  
  const tax = subtotal * 0.1;
  
  return subtotal + tax;
}

认可好的代码

markdown
这个抽象做得很好!大大简化了代码逻辑。

团队最佳实践

建立评审标准

创建 CONTRIBUTING.md 文件说明评审标准。

使用 PR 模板

创建 .github/pull_request_template.md

自动化检查

配置 CI/CD 自动运行测试和检查。

代码所有者

使用 CODEOWNERS 文件自动指派审核者:

/src/auth/ @auth-team
/src/api/ @api-team
*.test.js @qa-team

评审技巧

快速审核技巧

先看整体,再看细节

  1. 阅读 PR 描述
  2. 查看文件列表
  3. 浏览主要变更
  4. 深入细节审核

关注关键区域

  • 业务逻辑
  • 安全相关代码
  • 性能关键路径
  • 错误处理

使用过滤

在 GitHub 上:

  • 隐藏空白变更
  • 按文件类型过滤

常见问题检查

安全问题

javascript
if (password === "admin123") {
}

建议:使用环境变量或配置文件。

性能问题

javascript
for (const user of users) {
  const orders = await getOrders(user.id);
}

建议:使用批量查询避免 N+1 问题。

代码重复

javascript
function validateEmail(email) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}

function checkEmail(email) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}

建议:提取公共函数。

错误处理缺失

javascript
const data = JSON.parse(jsonString);

建议:添加 try-catch 处理。

总结

  • 代码评审是保证代码质量的重要手段
  • 建立标准化的评审流程
  • 作者要编写清晰的 PR 描述
  • 审核者要提供建设性反馈
  • 使用工具提高评审效率
  • 保持小而专注的 PR
  • 及时响应和完成评审