代码审查(仍然)是为了什么?
在深入探讨人工智能辅助代码审查之前,我们不妨先回顾一下代码审查的有效性所在。代码审查远不止是查找漏洞。一次好的代码审查应该具备以下特点:
- 发现缺陷和安全问题
- 确保代码质量高
- 在团队内部共享知识,并保持代码库模式和标准的一致性。
- 保障长期可维护性
人工智能并不会改变这些,它只是转移了瓶颈。模型可以快速识别未使用的导入,但它无法判断新的端点是否会损害你的隐私保护,也无法判断今天是否是解决你一直回避的那个复杂抽象问题的合适时机。合并按钮仍然需要(而且我们认为永远都需要)开发者的指纹。想要深入了解有效的代码审查实践,请查看我们的代码审查指南。
我们从 GitHub Copilot 的代码审查功能中学到了什么
今年早些时候,GitHub Copilot 代码审查团队对开发者进行了深入访谈,了解他们的代码审查流程。他们还向我们详细介绍了他们的代码审查工作流程。这些访谈揭示了三个共同的模式:
- 对 AI 没有特殊待遇:审阅者对模型生成的差异进行了与其他开发者生成的差异一样严格的审查。
- 自我审查提高了标准:在提交 PR 之前运行 Copilot 审查的开发者通常会消除一整类琐碎的挑剔之处(例如,简化导入、缺少测试),从而减少了大约三分之一的来回沟通。
- 人工智能并不能取代人类的判断:编程往往涉及权衡取舍。LLM(法学硕士)可以帮助你了解这些权衡取舍,但最终还是要有人根据组织的目标和标准来决定采取哪条路径。
一个核心原则很快变得清晰:人工智能可以增强开发者的判断力,但无法取代它。从置信度评分到问题警示解释,我们的研究结果正在指导我们如何构建 Copilot 的代码审查功能。
GitHub Copilot 代码审查功能通常可用。
让 AI 队友帮你完成第一轮审查。GitHub Copilot 的代码审查代理通常适用于所有 Copilot 套餐,它能在人工审核差异之前发现 bug、性能问题,甚至提出修复建议。你可以在仓库规则中启用自动审查,也可以直接在 GitHub、GitHub Mobile 或 VS Code 中按需向 Copilot 发起请求。
人工智能今天能处理(和不能处理)什么
法学硕士们在审查的“基础”阶段就已经非常出色了:
- 机械扫描。 “是否有拼写错误?”“所有论点都已使用吗?”
- 模式匹配。 “这看起来像是 SQL 注入”或“你忘记等待那个 Promise 对象了”。
- 吹毛求疵的一致性。 “变量名这里用蛇形命名法,那里用驼峰命名法。”
不久之后,他们将能够做更多的事情,例如理解产品和领域背景。但他们在以下方面仍然存在不足:
- 架构和权衡取舍。我们应该拆分这项服务吗?是否应该在本地缓存?
- 指导。解释为什么某种模式很重要以及何时应该打破它。
- 价值观。我们是否应该开发这个功能?
这些机制让开发者能够随时了解最新进展并掌握主动权。这一原则是我们持续开发 GitHub Copilot 的基石。
现代代码审查指南
最有效的AI辅助代码审查方法,甚至在你提交拉取请求之前就开始了。不妨把它看作是开发领域的黄金法则:像你希望代码审查员对待你那样对待他们。
在集成开发环境 (IDE) 中使用 AI 进行代码自检。
在提交代码之前,请在 IDE 中运行 GitHub Copilot 代码审查工具,它可以帮你找出显而易见的问题,让你的团队成员专注于那些需要开发者洞察力才能解决的细微问题。Copilot 代码审查工具可以梳理你暂存的差异,提供文档字符串建议,并标记空引用错误。之后,你可以在提交 PR 之前修复它发现的所有问题,这样你的团队成员就不会看到这些无关信息。
对你的代码负责
即使你使用人工智能生成代码,也不代表它就不是你的代码。一旦你提交了代码,你就必须对其负责。这意味着你需要理解代码的功能,确保它符合团队的标准,并确保它能与代码库的其他部分良好集成。
如果人工智能代理编写了代码,那么在我的名字出现在 git blame 名单上之前,我有责任清理它。Jon Wiggins,Respondology 的机器学习工程师
通过自动化持续集成(CI)门控运行你的代码
你的流水线应该已经运行了单元测试、密钥扫描、CodeQL 查询、依赖项检查和代码风格检查。继续这样做。快速失败,及时发现问题。
个人代码卫生实用技巧:
- 在集成开发环境(IDE)中查看自己的代码。
- 确保变量名称、注释和结构符合团队的规范。
- 在将 AI 生成的代码添加到 pull request 之前,务必对其进行彻底测试。
利用人工智能将注意力集中在那些需要你做出关键判断的领域。
人工智能在代码审查中的真正威力不在于取代开发人员担任审查员,而在于处理那些可能拖慢审查流程的繁琐工作,从而让开发人员能够专注于他们判断力最有价值的地方。
人工智能并不会取代您现有的自动化检查。
在开发人员开始代码审查之前,请确保测试通过、代码覆盖率指标达标,并且静态分析工具已完成其工作。这将为更有意义的讨论奠定坚实的基础。 您可以使用 LLM 不仅来捕获语法问题,还可以捕获模式、潜在错误和风格不一致。具有讽刺意味的是,LLM 尤其擅长捕获 LLM 自身会犯的错误,随着越来越多的 AI 生成代码进入我们的代码库,这一点变得越来越重要。
明确定义角色
明确规定何时应考虑 AI 反馈,何时应优先考虑人工判断。例如,代码架构以及与业务目标和组织价值观的一致性应由其他开发人员负责。使用 AI 审查冗长重复的 PR 尤其有用,因为这类 PR 很容易遗漏一些细节。
构建可持续的AI辅助审查流程的实施技巧
- 制定清晰的指导原则,明确何时在代码审查中使用 AI、信任哪些类型的反馈,以及当开发人员对 AI 代码审查结果有异议时如何向上级汇报。例如,使用 GitHub Copilot,您可以自定义指令,为 Copilot 如何与您的代码交互设置明确的规则。
- 根据团队反馈和不断发展的 AI 功能,定期更新指南。请记住,随着代码库和 AI 工具的演进,今天有效的方法明天可能就不再适用。
- 鼓励团队就人工智能辅助评审的优势和局限性展开公开讨论。分享正面和负面的经验,帮助每个人学习并改进方法。
- 利用评审人员的反馈不断改进自动化测试策略,持续优化自动化流程。找出可以自动化解决重复出现问题的模式。
开发商的判断仍然至关重要
虽然人工智能可以处理代码审查中的大部分日常工作,但对于架构决策、指导和知识转移,以及需要了解产品和用户的特定情境决策而言,开发人员的判断仍然是不可替代的。 即使LLM(法学硕士)变得越来越智能,仍有三项评审任务顽固地需要人类来完成:
- 架构权衡:我们应该拆分这项服务吗?本地缓存?现在偿还技术债务还是以后再偿还?
- 导师制和文化:公关讨论帖是团队的课堂。机器人无法向初级工程师讲述那个奇怪正则表达式背后的故事。
- 伦理和产品价值:“我们是否应该开发这个产品?”是人工智能无法回答的问题。
目标是让开发人员专注于他们最擅长的领域,从而提高他们的工作效率。


苏公网安备 32059002002276号
