AI 时代的代码审查:当每个 PR 都是 6000 行 diff
在 AI 编程工具普及的今天,代码审查面临着前所未有的挑战。一位开发者在 Lobsters 上分享了他的困境:同事们都全面拥抱了 AI,结果每个送到他面前审查的 PR 平均有大约 6000 行 diff。而众所周知,即使比这小一个数量级的 PR 也已经太大,无法进行有效的审查。
问题的本质
AI 编程工具极大地降低了生成代码的成本。开发者可以在几分钟内生成几百甚至几千行代码,而在以前这可能需要几天的工作。但代码生成的速度远远超过了人类审查代码的速度。
这导致了一个严重的失衡:
- 生成速度:AI 可以在几分钟内生成数千行代码
- 审查速度:人类审查 6000 行 diff 可能需要数小时甚至数天
- 审查质量:面对如此大规模的变更,审查者往往只能粗略浏览,无法发现深层问题
结果就是,很多 PR 实际上没有得到有效的审查,只是被" rubber-stamped "(盖章通过)。
为什么大 PR 难以审查
研究和实践都表明,PR 大小与审查质量之间存在明确的关系:
- 认知负荷:人类的工作记忆有限,一次只能处理有限的信息。6000 行 diff 远超认知负荷的极限
- 上下文丢失:在大规模变更中,审查者很难记住前面看到的内容与后面内容之间的关联
- 疲劳效应:长时间审查会导致注意力下降,后期的审查质量显著降低
- 难以测试:大规模变更通常包含多个独立的改动,难以一次性理解和验证
一般建议是,单个 PR 最好控制在 400 行以内,最多不超过 1000 行。超过这个范围,审查质量会急剧下降。
AI 时代的应对策略
面对 AI 生成的大量代码,团队需要调整代码审查的策略和流程:
1. 强制拆分 PR。建立团队规范,要求超过一定行数(如 500 行)的 PR 必须拆分成多个小 PR。可以使用工具自动检测 PR 大小并提醒拆分。
2. 分层审查。将审查分为不同层次:
- AI 辅助审查:先用 AI 工具进行初步审查,检查语法错误、风格问题、常见 bug
- 自动化测试:确保 CI/CD 流水线中有充分的单元测试、集成测试和静态分析
- 人类重点审查:人类审查者只关注架构设计、安全漏洞、业务逻辑等 AI 难以判断的方面
3. 关注变更意图而非代码细节。对于 AI 生成的代码,审查者应该重点关注:
- 这个变更解决了什么问题?
- 解决方案的思路是否合理?
- 是否有更简单的方案?
- 测试是否充分?
- 性能和安全是否有保障?
而不是逐行检查代码的语法和风格(这些应该由工具自动检查)。
4. 建立 AI 代码生成规范。制定团队内部的 AI 使用规范:
- AI 生成的代码必须经过充分测试
- AI 生成的 PR 必须明确标注
- AI 生成的代码需要额外的审查关注
- 限制单次 AI 生成的代码量
5. 投资自动化工具。更多地依赖自动化工具来保证代码质量:
- 静态分析工具(如 SonarQube、CodeQL)
- 安全扫描工具(如 Snyk、Trivy)
- 测试覆盖率检查
- 性能基准测试
- 依赖漏洞扫描
代码审查的未来
AI 不会取代代码审查,但会改变代码审查的方式。未来的代码审查可能是:
- AI 对 AI 的审查:AI 生成的代码先由 AI 审查工具进行初步检查
- 人类专注于高阶决策:人类审查者只关注架构、设计、安全等关键决策
- 实时协作审查:AI 辅助的实时代码审查,在代码生成的同时就进行检查
- 数据驱动的审查:基于历史数据和指标,自动识别高风险变更并分配更多审查资源
代码审查的核心价值——确保代码质量、分享知识、团队协作——不会因为 AI 而消失。但审查的方式和重点需要适应 AI 时代的新现实。
对于面临 6000 行 PR 的开发者来说,最实际的建议是:与团队沟通,建立 PR 大小规范,投资自动化工具,把人类审查的精力集中在真正重要的地方。AI 可以加速代码生成,但不能替代对代码质量的认真把关。
原文链接:https://lobste.rs/s/7tpc5q/surviving_code_reviews_era_ai