利用AI代码审查大规模提升代码质量 - Engineering@Microsoft
利用AI代码审查大规模提升代码质量 - Engineering@Microsoft
在微软,我们一直在寻找提高开发者生产力和代码质量的方法。在这一领域,我们最具影响力的创新之一便是AI驱动的代码审查助手——一种增强拉取请求(PR)审查的AI工具。这款AI助手最初只是一个内部实验,如今已扩展,支持公司内超过90%的PR,每月影响超过60万个拉取请求。它帮助我们的工程师更快地发现问题、更早地完成PR,并强制执行一致的最佳实践——所有这些都集成在我们标准的开发工作流中。我们与开发者事业部的数据和AI团队紧密合作,共同构建了这一能力。内部开发的经验教训已被整合到GitHub的AI驱动代码审查产品中,并惠及外部客户。这是一个第一方(1P)创新如何塑造第三方(3P)产品,以及外部使用如何持续反馈内部改进的范例。
用AI解决PR审查中的实际问题
拉取请求(PR)是开发工作流的关键部分,但同时也存在一些摩擦。审查者经常将时间花在低价值的反馈上,比如语法问题或命名不一致,而更有意义的关注点——如架构决策或安全影响——却可能被忽视或延迟。另一方面,作者可能难以提供足够的上下文,尤其是当PR很大或跨多个文件时。此外,还有规模挑战:拥有数千名开发者和仓库,确保每个PR都得到及时且彻底的审查非常困难。我们曾见过PR等待数天甚至数周才被合并的情况,或者重要反馈被遗漏。这些痛点促使我们尝试在审查过程中引入AI辅助。目标是让AI处理重复性高或容易被忽视的审查方面,从而让人类审查者专注于更高层面的问题。
我们的解决方案是将AI代码审查器集成到现有的PR工作流中。每当创建一个拉取请求时,AI助手会自动作为审查者之一参与其中。它的具体功能如下:
- 自动检查与评论:AI审查代码变更,并像人类审查者一样留下评论。它会标记一系列问题——从简单的风格不一致和小bug,到更细微的问题(如潜在的空引用或低效算法)。例如,如果开发者引入的方法没有正确处理错误条件,AI可能会在该差异行上留下带有警告和解释的评论。这些评论会出现在PR讨论线程中,供作者和其他审查者查看并采取行动(就像同事给出的意见一样)。每条建议都附带一个类别,如异常处理、空检查、敏感数据,这有助于理解相关影响。通过及早发现这类问题,AI减少了人类同行的审查负担,并确保明显的问题不会被遗漏。
- 改进建议:除了审查,助手还会建议具体的代码改进。如果它发现bug或次优的代码模式,会提出修正后的代码片段或替代实现供作者采纳。虽然它功能强大,但其设计也考虑到了安全保障。当AI建议代码变更时,不会直接提交。作者仍然控制着整个过程——审查、编辑,并通过明确点击"应用更改"选项来决定是否接受建议。所有变更都会归入提交历史记录,从而确保责任归属和透明度。
- PR摘要生成:AI还会生成PR摘要——本质上是用AI编写的描述,说明代码变更的内容。这解决了常见问题:很多PR没有写好的描述。AI会查看差异并尝试解释变更意图,突出关键变化。审查者发现这非常有用:它帮助我们理解整体情况,而无需手动解读每个文件。
- 交互式问答("询问AI"):审查者还可以在PR讨论中与助手进行对话。如果代码中有不清楚的地方,审查者可以就代码向AI提问或请求澄清。例如,"这里为什么需要这个参数?"或者"这个变更对模块X有什么影响?"AI能够分析代码并提供答案,像一个按需可用的知识渊博的联合审查者。
AI审查器之所以有效,是因为它能够自然地融入现有工作流。它被当作其他任何审查者一样对待——无需学习新的UI,无需安装额外的工具。开发者可以直接在PR线程中与其进行对话式交互,感觉就像是团队的无缝延伸。甚至可以配置为在PR创建时自动参与,作为第一个审查者——始终在线,随时待命。这种无摩擦的集成是其高采用率和影响力的关键。
对质量和速度的影响
AI审查器的采用和影响非常显著。一些好处包括:
- 更快的审查周期:AI对每个PR进行初步审查后,团队注意到完成拉取请求的总时间有所减少。根据早期实验和数据科学研究,使用AI代码审查器的5000个仓库观察到了PR完成时间的中位数提升了10%到20%。AI通常能在PR创建后几分钟内捕获问题并提出改进建议,这意味着作者可以提前处理这些问题,无需等待人类审查者的时间安排。这也意味着减少了因小修小改而产生的来回沟通次数,因此PR可以更快地被批准和合并。
- 提高代码质量:它通过在整个代码库中提供关于编码标准和最佳实践的指导,帮助提升代码审查的基准质量。在一些案例中,AI标记了可能被忽略的bug——例如,发现一个缺失的空检查或一个可能导致运行时错误的API调用顺序错误。通过在代码合并前捕获这些问题,我们预防了下游的潜在事故。
- 开发者学习:它可以充当一位导师,审查每一行代码并解释可能的改进。对于新员工尤其如此,它可以作为有用的指南,加速入职过程并促进最佳实践的学习。
定制化:为你的团队量身定制审查
提供的强大功能之一是其可配置性和可扩展性。团队可以定制体验,提供特定于仓库的指南。此外,团队可以定义特定于场景的自定义审查提示。公司内的各个团队正在利用这些定制功能进行专业审查,比如根据历史崩溃模式识别回归,或者确保飞行实验和变更门控到位。