Appearance
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,username23. 自动化检查
CI/CD 自动运行:
- 单元测试
- 代码风格检查
- 安全扫描
- 构建验证
4. 审核者评审
审核者查看代码变更,添加评论。
5. 作者响应反馈
根据反馈修改代码:
bash
git add .
git commit -m "refactor: address review comments"
git push origin feature/new-feature6. 审核者批准
审核者选择 "Approve"。
7. 合并代码
满足所有条件后合并 PR。
评审检查清单
代码正确性
- [ ] 代码是否实现了预期功能
- [ ] 是否有明显的 Bug
- [ ] 边界条件是否处理正确
- [ ] 错误处理是否完善
代码质量
- [ ] 代码是否清晰易读
- [ ] 命名是否有意义
- [ ] 是否有重复代码
- [ ] 函数/方法是否过长
测试覆盖
- [ ] 是否有足够的单元测试
- [ ] 测试用例是否有效
- [ ] 边界情况是否测试
性能考虑
- [ ] 是否有性能问题
- [ ] 数据库查询是否优化
- [ ] 是否有不必要的计算
安全考虑
- [ ] 是否有安全漏洞
- [ ] 敏感数据是否保护
- [ ] 输入是否验证
评审工具使用
GitHub 代码审核
查看变更
- 打开 PR 页面
- 点击 "Files changed"
- 浏览文件变更
添加行内评论
- 点击代码行号
- 输入评论内容
- 点击 "Add single comment" 或 "Start a review"
提交审核
- 完成所有评论
- 点击 "Review changes"
- 选择审核结果:
- 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 代码审核
查看变更
- 打开 Merge Request
- 点击 "Changes"
- 查看文件差异
添加评论
- 行内评论:点击代码行
- 讨论评论:在 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评审技巧
快速审核技巧
先看整体,再看细节
- 阅读 PR 描述
- 查看文件列表
- 浏览主要变更
- 深入细节审核
关注关键区域
- 业务逻辑
- 安全相关代码
- 性能关键路径
- 错误处理
使用过滤
在 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
- 及时响应和完成评审
