Skip to content

代码审查(Code Review)

代码审查(Code Review)是现代软件开发中保证代码质量的核心实践,通过 Pull Request / Merge Request 机制实现。

Pull Request / Merge Request 流程

创建 PR 的标准流程

bash
# 1. 从主线创建功能分支
git switch main
git pull origin main          # 确保从最新代码开始
git switch -c feature/user-avatar

# 2. 开发功能并提交
git add .
git commit -m "feat(user): 添加用户头像上传功能"
git commit -m "test(user): 为头像上传添加单元测试"

# 3. 推送分支到远程
git push -u origin feature/user-avatar

# 4. 在 GitHub/GitLab 创建 PR(通过 Web 界面或 CLI)
gh pr create --title "feat: 用户头像上传功能" --body "..."

PR 描述模板

在仓库根目录创建 .github/pull_request_template.md

markdown
## 改动内容

简要说明做了什么改动

## 动机与背景

为什么需要这个改动?解决了什么问题?

Closes #(Issue 编号)

## 改动类型

- [ ] Bug 修复(非破坏性改动,修复了一个问题)
- [ ] 新功能(非破坏性改动,新增功能)
- [ ] 破坏性变更(现有功能可能受影响)
- [ ] 文档更新

## 测试说明

- [ ] 已添加单元测试
- [ ] 已通过本地测试
- [ ] 测试步骤:
  1. 步骤一
  2. 步骤二

## 截图(如有 UI 改动)

| 改动前 | 改动后 |
|-------|-------|
| 截图 | 截图 |

## 自查清单

- [ ] 代码遵循项目规范
- [ ] 已自我审查代码
- [ ] 已更新相关文档
- [ ] 没有引入敏感信息

Review 最佳实践

对提交者的建议

提交 PR 前的自查:

bash
# 1. 确保基于最新主线
git fetch origin
git rebase origin/main

# 2. 运行本地测试
npm test
npm run lint

# 3. 检查自己的改动(重要!先自己 review 一遍)
git diff origin/main..HEAD

PR 大小控制(小而聚焦的 PR 更容易被 review):

❌ 一个 PR 包含多个不相关的功能(难以 review)
✅ 每个 PR 只解决一个问题或实现一个功能

理想的 PR:
- 文件改动 < 400 行
- 关注单一问题
- 有清晰的标题和描述

对 Review 者的建议

Review 关注点:

优先级从高到低:

1. 正确性
   - 逻辑是否正确?
   - 边界情况是否处理?
   - 错误处理是否完善?

2. 安全性
   - 是否有 SQL 注入、XSS 等安全漏洞?
   - 是否有敏感信息泄露?
   - 权限控制是否正确?

3. 性能
   - 是否有明显的性能问题?
   - 数据库查询是否合理?

4. 可维护性
   - 代码是否清晰易懂?
   - 是否遵循项目规范?
   - 是否有必要的注释?

5. 测试
   - 测试覆盖是否充分?
   - 测试是否有意义?

Review 评论技巧:

前缀规范:
nit: 小问题,可改可不改(nitpick)
     nit: 变量名可以更具描述性,如 userList → users

q: 问题/疑问
   q: 这里为什么要用 setTimeout?有什么特殊考虑吗?

suggestion: 建议(非强制)
            suggestion: 可以考虑使用 Map 替代 Object,性能更好

blocker: 必须修改(阻止合并)
         blocker: 这里没有处理 null 值,会导致 NPE

处理 Review 意见后的更新方式

方式1:追加新提交

bash
# 根据 review 意见修改
vim src/user.js

# 追加新提交
git add .
git commit -m "fix: 根据 review 添加空值检查"
git push

# PR 自动更新,review 者可以看到改动

方式2:修改原有提交(整理后的 PR)

bash
# 如果想保持整洁的提交历史
# 修改特定提交(使用 fixup 工作流)
git add .
git commit --fixup=abc123   # abc123 是需要修改的原始提交

# 或者直接 amend 最近提交
git add .
git commit --amend --no-edit

# 整理历史
git rebase -i --autosquash origin/main

# 强制推送(PR 中 force push 需要 review 者重新 review)
git push --force-with-lease

两种方式的选择:

  • 追加新提交:review 者容易追踪新改动,PR 历史清晰
  • 修改原提交:最终 merge 历史更整洁,但需要 force push

fixup + autosquash 工作流

这是一种高效的 PR 清理工作流:

bash
# 开发过程中
git commit -m "feat: 添加用户头像功能"  # 主功能提交

# 发现小问题,修复
git commit --fixup HEAD  # 或指定特定 commit SHA-1

# review 要求修改
git add .
git commit --fixup abc123  # abc123 = feat 提交的 SHA-1

# PR 批准后,整理提交历史
git rebase -i --autosquash origin/main
# fixup 提交会自动合并到对应的 feat 提交中

git push --force-with-lease
# merge 到主线(现在历史是整洁的)

总结

实践说明
小型 PR每个 PR 只解决一个问题,< 400 行
清晰描述使用模板,说明原因而不只是做了什么
先自审提交前自己 review 一遍
及时响应Review 意见应在 24 小时内响应
礼貌沟通建议而非命令,询问而非假设
fixup 工作流保持最终提交历史整洁

良好的 Code Review 文化不仅能提升代码质量,还能促进知识共享和团队成长。记住:Review 的目的是让代码更好,而不是找错。