审阅由 GitHub Copilot、ChatGPT 或其他代理等 AI 工具生成的代码正成为现代开发者工作流的关键环节。本指南提供实用技术,强调人工监督和测试的重要性,并包含示例提示,以展示 AI 如何在审查过程中提供帮助。
尤其是对于遗留代码库和较大的拉取请求,彻底的审查流程至关重要。将人工专业知识与自动化工具相结合,可确保 AI 生成的代码符合质量标准、契合项目目标并遵循最佳实践。
借助 Copilot,你可以简化审查流程,提高发现 AI 生成代码潜在问题的能力。
1. 从功能检查开始
始终首先运行自动化测试和静态分析工具。
- 确保代码可以编译,所有测试均通过。检查是否出现新的警告或错误。
- 使用类似 CodeQL 和 Dependabot 等工具来捕获漏洞和依赖问题。
- 参见 Generating unit tests 和 Creating end-to-end tests for a webpage,了解使用 Copilot 验证代码的示例。
示例提示
哪些用于验证此代码更改的功能测试不存在或缺失?此代码可能引入哪些潜在的漏洞或安全问题?
2. 验证上下文和意图
检查 AI 生成的代码是否符合项目的目的和架构。
- 审查 AI 输出是否与你的需求和设计模式保持一致。
- 自问:“这段代码解决了正确的问题吗?它遵循我们的约定吗?”
- 使用你的 README、文档和最近的拉取请求作为 AI 的上下文起点。告诉 AI 哪些来源可信,哪些不使用,并提供良好的示例供其参考。
- 尝试 Synthesizing research,了解 Copilot 如何利用文档和研究来指导代码生成。
- 在让 AI 执行研究和规划任务时,考虑将 AI 的输出提炼为结构化产物,以便成为未来 AI 任务(如代码生成)的上下文。
示例提示
这段重构后的代码如何与我们的项目架构保持一致?你识别出哪些相似功能或已确立的设计模式并以其为模型?审查此代码时,做了哪些关于业务逻辑、设计偏好或用户行为的假设?这种方法可能存在哪些问题或限制?
3. 评估代码质量
人工标准仍然重要。
- 关注可读性、可维护性以及清晰的命名。
- 避免接受难以理解或重构时间超过重写时间的代码。
- 倾向于文档完善、包含清晰注释的代码。
- 查看 Improving code readability and maintainability,获取审查和重构生成代码的提示和技巧。
示例提示
这段代码存在哪些可读性和可维护性问题?如何改进此代码以提升清晰度和简洁性?请建议替代结构或变量名以增强可读性。如何将此代码拆分为更小的、可测试的单元?
4. 仔细审查依赖项
对新包和库保持警惕。
- 检查建议的依赖是否存在且得到积极维护。考虑新依赖的来源和贡献者,确保它们来自信誉良好且非竞争的渠道。
- 审查许可证。避免引入与项目许可证不兼容的代码或依赖(例如,在 MIT 许可证项目中使用 AGPL-3.0,或没有声明许可证的依赖)。
- 警惕出现幻觉式或可疑的包(如根本不存在的包),或 slopsquatting(对 LLM 的一种理论性攻击,使用假冒或恶意包)。
- Creating templates 展示了 Copilot 如何协助依赖设置,但最佳实践是始终自行验证建议的包。
- 使用 GitHub Copilot code referencing 来审查与公开可用代码的匹配情况。
示例提示
分析附带的 package.json 文件,列出所有依赖及其对应的许可证。此 package.json 文件中列出的每个依赖是否都在积极维护(即未归档且最近有维护者活动)?
5. 发现 AI 特有的陷阱
AI 工具有可能出现独特的错误。
- 查找幻觉式 API、被忽略的约束或错误的逻辑。
- 留意被删除或跳过而非修复的测试。
- 对看似正确但与意图不符的代码保持怀疑。
- 参见 Debugging invalid JSON,了解捕获细微错误并使用 Copilot 调试的示例。
示例提示
删除失败测试的代码更改背后的原因是什么?请提供一些替代方案,以修复测试而不是删除它。此代码可能无法正确处理哪些潜在的复杂情况、边缘案例或场景?此代码提出了哪些需要人工判断或领域专业知识才能正确评估的具体技术问题?
6. 使用协作审查
配对工作和团队反馈有助于捕捉细微问题。
- 请团队成员审查复杂或敏感的更改。
- 使用检查清单确保覆盖所有关键审查点(功能性、安全性、可维护性)。
- 在团队内分享成功的提示和 AI 使用模式。
- 参见 Communicate effectively,获取如何协作使用 Copilot 并记录发现的示例。
7. 尽可能自动化
让工具处理重复性工作。
- 设置 CI 检查以进行代码风格、Lint 和安全性检测。
- 使用 Dependabot 进行依赖更新和警报。
- 使用 CodeQL 或类似扫描器进行静态分析。
- 《Finding public code that matches GitHub Copilot suggestions》展示了 Copilot 如何帮助追踪代码模式并自动化搜索任务。
- 考虑具备推理能力的 AI 代理是否能帮助自动化审查流程的部分环节。例如,构建一个自我审查代理,在请求人工审查之前评估草案拉取请求的准确性、语气以及业务逻辑。
8. 持续改进你的工作流
拥抱新的 AI 工具和技术可以使你的工作流更高效。
- 记录审阅 AI 生成代码的最佳实践。
- 鼓励团队中的“AI 冠军”分享技巧和工作流程。
- 更新你的入职和贡献指南,以包括 AI 审查技术和资源。使用仓库中的
CONTRIBUTING.md文件记录对 AI 生成源码和内容的期望,参见 Setting guidelines for repository contributors。 - 参考 GitHub Copilot Chat Cookbook 获取灵感,并在团队文档中分享有用的配方。
延伸阅读
- Human Oversight in Modern Code Review 在 GitHub Resources 中