# 代码审查流程规范 **文档版本**: v1.0 **生成日期**: 2026-04-08 **适用范围**: User Management System (UMS) 项目 --- ## 一、审查角色与职责 ### 1.1 角色定义 | 角色 | 职责 | 要求 | |------|------|------| | **作者 (Author)** | 自审、修复问题、响应反馈 | 熟悉代码逻辑 | | **审查者 (Reviewer)** | 全面审查、标注问题、给出建议 | 了解业务和安全要求 | | **仲裁者 (Arbiter)** | 解决争议、最终决策 | 资深开发者/架构师 | ### 1.2 职责边界 **作者职责**: 1. 提交前完成自审检查清单 2. 确保代码可编译、可测试 3. 及时响应审查反馈 4. 修复问题时主动沟通 **审查者职责**: 1. 按时完成审查(常规 4h 内) 2. 提供具体、可操作的反馈 3. 公平、一致地执行标准 4. 记录审查结果 **仲裁者职责**: 1. 解决审查争议 2. 判定标准模糊地带 3. 优化审查流程 --- ## 二、审查触发条件 ### 2.1 必须审查 | 条件 | 说明 | |------|------| | 所有 PR 到 main | 任何合入 main 的代码必须审查 | | 安全相关变更 | 认证、授权、加密相关 | | 基础设施变更 | 配置、部署、CI/CD | | 数据库 schema 变更 | 迁移文件 | ### 2.2 简化审查(可选) | 条件 | 说明 | |------|------| | 文档更新 | *.md 文件 | | 测试用例补充 | 仅新增测试 | | 依赖更新 | 无代码变更 | | 配置调整 | 明确无风险 | --- ## 三、审查执行流程 ### 3.1 阶段一:准备工作 ``` 审查者接收 PR 后: 1. 阅读 PR 描述,理解变更目的 2. 查看关联的 Issue/Ticket 3. 确认影响范围 4. 准备审查清单 ``` ### 3.2 阶段二:自动化检查 ```bash # 后端检查 go vet ./... go build ./cmd/server go test ./... -count=1 gosec ./... # 安全扫描 # 前端检查 npm run lint npm run build npm test npm audit # 覆盖率检查 go test -coverprofile=coverage.out go tool cover -func=coverage.out | tail -1 ``` ### 3.3 阶段三:代码审查 #### 审查顺序(建议) 1. **接口/API 层** - 先看暴露的接口是否合理 2. **业务逻辑层** - 核心逻辑实现 3. **数据访问层** - 数据库操作 4. **基础设施** - 错误处理、日志 5. **测试** - 覆盖率、有效性 #### 审查要点 **文件维度**: - [ ] 新增文件是否必要 - [ ] 删除文件是否安全 - [ ] 修改文件是否最小化 **安全维度**: - [ ] 输入验证 - [ ] 权限检查 - [ ] 敏感数据处理 - [ ] 加密实现 **正确性维度**: - [ ] 逻辑正确 - [ ] 边界处理 - [ ] 错误处理 - [ ] 并发安全 **性能维度**: - [ ] 数据库查询 - [ ] 缓存使用 - [ ] 资源释放 ### 3.4 阶段四:反馈与修复 #### 评论格式 ```markdown 🔴 **[级别] 问题标题** 位置: `file.go:42` **问题描述**: [清晰描述问题] **为什么这是个问题**: [解释风险或影响] **建议修复**: ```code // 建议的代码 ``` --- 🟠 **[级别] 问题标题** ... --- 🟡 **[级别] 问题标题** ... --- 💭 **[挑剔] 可选优化** ... --- ✅ **做得好的地方** [具体表扬] ``` #### 修复确认 | 问题级别 | 修复要求 | 确认方式 | |----------|----------|----------| | 🔴 | 必须修复 | 重新审查 | | 🟠 | 必须修复 | 截图确认或重新审查 | | 🟡 | 建议修复 | 修复后标注或提供理由 | | 💭 | 可选 | 可忽略,提供理由即可 | ### 3.5 阶段五:完成审查 #### Approve 条件 ``` □ 所有 🔴🟠 问题已修复 □ 🟡 问题 ≤ 3 个或有明确修复计划 □ 覆盖率不下降 > 5% □ 审查者确认理解变更 ``` #### 评论模板 ```markdown ## 审查结论 ✅ **可以合并** **评分**: X.X/10 **亮点**: - [1] - [2] **遗留问题**: - [1] (P1, @负责人) - [2] (P2, @负责人) **后续关注**: - [建议后续优化项] ``` --- ## 四、审查时效管理 ### 4.1 SLA 要求 | PR 优先级 | 首次审查 | 修复后复核 | 最大周期 | |-----------|----------|------------|----------| | P0 (安全/紧急) | 1 小时 | 30 分钟 | 4 小时 | | P1 (重要) | 4 小时 | 1 小时 | 24 小时 | | P2 (常规) | 8 小时 | 2 小时 | 48 小时 | | P3 (优化) | 24 小时 | 4 小时 | 72 小时 | ### 4.2 超时处理 ``` 1. 超过 SLA 50% → 提醒(@审查者) 2. 超过 SLA 100% → 升级(@Tech Lead) 3. 超过 3 天无响应 → 仲裁者介入 ``` --- ## 五、争议解决 ### 5.1 常见争议场景 | 场景 | 解决方式 | |------|----------| | 问题级别判定分歧 | 参照分级标准,模糊取高 | | 是否必须修复 | 审查者决定,仲裁者终裁 | | 代码风格偏好 | 参考规范,无标准则接受 | | 性能优化必要性 | 量化数据支持 | ### 5.2 仲裁流程 ``` 1. 作者提出仲裁请求 2. 审查者陈述理由 3. 仲裁者审查双方观点 4. 仲裁者做出最终决定 5. 记录仲裁结果(供后续参考) ``` --- ## 六、审查质量保证 ### 6.1 审查者自我检查 ``` 审查前: □ 我理解这次变更的目的吗? □ 我知道如何验证这些变更吗? 审查中: □ 我是否检查了所有相关文件? □ 我的反馈是否具体且可操作? □ 我的反馈是否公平、一致? 审查后: □ 我的评分是否合理? □ 我的反馈是否有教育价值? ``` ### 6.2 审查质量指标 | 指标 | 定义 | 目标 | |------|------|------| | 审查一致性 | 同类问题的判定一致率 | > 90% | | 反馈质量 | 作者满意度评分 | > 4.0/5 | | 审查效率 | 平均审查时间 | < 4h | | 缺陷逃逸率 | 合并后发现的问题数 | < 2/版本 | --- ## 七、特殊场景处理 ### 7.1 大型 PR ``` 当 PR > 500 行变更时: 1. 请求作者拆分为多个 PR 2. 或分批审查(核心逻辑优先) 3. 明确标记哪些部分已审查 4. 剩余部分安排后续审查 ``` ### 7.2 紧急修复 ``` 当生产环境需要紧急修复时: 1. 允许先合并后审查(需要 Tech Lead 批准) 2. 24 小时内完成审查 3. 发现问题立即发版修复 4. 事后复盘,总结经验 ``` ### 7.3 外部贡献 ``` 当接收外部 PR 时: 1. 所有审查标准相同 2. 增加许可证检查 3. 增加贡献协议确认 4. 必要时要求补充签名 ``` --- ## 八、审查记录归档 ### 8.1 归档内容 | 内容 | 位置 | 保存期限 | |------|------|----------| | PR 审查评论 | GitHub PR | 永久 | | 审查报告 | `docs/code-review/` | 永久 | | 争议解决记录 | `docs/team/disputes.md` | 永久 | | 审查指标汇总 | `docs/team/metrics/` | 1 年 | ### 8.2 报告生成 每次全面审查后生成报告: ``` docs/code-review/CODE_REVIEW_REPORT_YYYY-MM-DD.md ``` 报告模板见 `CODE_REVIEW_STANDARD_V2.md` 第 7 节。 --- ## 九、持续改进 ### 9.1 流程回顾 | 周期 | 内容 | 负责人 | |------|------|--------| | 每月 | 审查效率分析 | Tech Lead | | 每季度 | 流程优化讨论 | Team | | 每半年 | 规范更新 | 代码审查专家 | ### 9.2 改进建议 团队成员可以通过以下方式提出改进建议: 1. 在 `docs/team/improvements/` 创建提案 2. 在 Team Meeting 中讨论 3. PR 到本文档 --- *本文档由代码审查专家 Agent 制定,版本: v1.0* *最后更新: 2026-04-08*