【译】借助 AI 驱动的代码审查,大规模提升代码质量
在微软,我们一直在寻找提高开发人员生产力和代码质量的方法。在这一领域,我们最具影响力的创新之一是 AI 驱动的代码审查助手 —— 一款增强拉取请求(PR,pull request)审查的 AI 工具。这款 AI 助手最初只是一项内部实验,如今已扩展到支持公司内超过 90% 的 PR,每月影响超过 60 万个拉取请求。它帮助我们的工程师更快地发现问题、更早地完成 PR,并执行一致的最佳实践 —— 所有这些都在我们标准的开发工作流程中进行。我们是与开发部门的数据和 AI 团队密切合作开发出这一功能的。内部积累的经验和知识被融入到 GitHub 的 AI 驱动代码审查服务中,现在让外部客户也从中受益。这是一个很好的例子,说明第一方(1P)创新如何塑造了第三方(3P)产品,以及外部使用如何持续为内部改进提供信息。
用 AI 解决 PR 审查中的实际问题
拉取请求(PR)是开发工作流程中的关键部分,但也存在一些问题。审查人员常常把时间花在低价值的反馈上,比如语法问题或命名不一致,而更有意义的问题 —— 如架构决策或安全影响 —— 可能被忽视或延迟处理。另一方面,作者可能难以提供足够的背景信息,特别是当 PR 规模较大或涉及多个文件时。还有规模方面的挑战:面对成千上万的开发人员和代码库,确保每个 PR 都能得到及时、彻底的审查并非易事。我们曾见过 PR 等待数天甚至数周才被合并,或者重要反馈被遗漏的情况。这些痛点促使我们尝试在审查过程中引入 AI 辅助。目标是让 AI 处理审查中重复性的或容易被忽视的方面,让人类审查人员能够专注于更高层次的问题。
我们的解决方案是将 AI 代码审查器集成到现有的 PR 工作流程中。每当创建一个拉取请求时,AI 助手会自动作为审查人员之一参与进来。它的功能如下:
- 自动检查和评论:AI 审查代码变更,并像人类审查人员一样留下评论。它会标记一系列问题 —— 从简单的风格不一致和小错误,到更微妙的问题,如潜在的空引用或低效算法。例如,如果开发人员引入的一个方法没有妥善处理错误情况,AI 可能会在特定的差异行上给出警告并附上解释。这些评论会出现在 PR 讨论线程中,因此作者和其他审查人员都能看到并采取行动(就像同事发表的意见一样)。每个建议都有一个相关类别,例如异常处理、空检查、敏感数据等,这有助于理解相关影响。通过及早发现这些问题,AI 减少了人类同行的审查负担,并确保明显的问题不会被遗漏。
- 建议改进:除了审查之外,助手甚至会提出具体的代码改进建议。如果它识别出一个 bug 或不理想的代码模式,会提出更正后的代码片段或替代实现方案供作者采用。虽然它功能强大,但也设计了安全保障措施。当 AI 建议代码更改时,不会直接提交。作者仍拥有控制权 —— 可以审查、编辑建议,并通过明确点击 “apply change” 选项来决定是否接受建议。所有更改都会记录在提交历史中,以保持问责制和透明度。
- PR 摘要生成:AI 还会生成 PR 摘要 —— 本质上是 AI 撰写的对代码变更内容的描述。这解决了一个常见问题,即许多 PR 没有完善的描述。AI 会查看差异,并尝试解释变更的意图,突出关键变更。审查人员发现这非常有用:它帮助我们了解整体情况,而无需手动解读每个文件。
- 交互式问答(“询问 AI”):审查人员还可以在 PR 讨论中与助手进行对话。如果代码中的某些内容不清楚,审查人员可以向 AI 询问有关代码的问题或请求阐明。例如,“为什么这里需要这个参数?” 或者 “这个变更对模块 X 有什么影响?”AI 可以分析代码并提供答案,就像一个随叫随到的知识渊博的共同审查员。
AI 审查器之所以有效,关键在于它能自然地融入现有的工作流程。它就像其他任何审查人员一样 —— 无需学习新的用户界面,无需安装额外的工具。开发人员可以在 PR 线程中与它进行对话式交流,感觉就像团队中一个无缝的延伸部分。它甚至可以配置为在 PR 一创建就自动参与,作为第一个审查人员 —— 随时待命,随时准备就绪。这种无摩擦的集成是其获得高采用率和产生巨大影响的关键。
对质量和速度的影响
AI 审查器的采用和影响是显著的。其带来的一些好处如下:
- 更快的审查周期:由于 AI 对每个 PR 进行初步审查,团队发现完成拉取请求的总体时间有所减少。根据早期实验和数据科学研究,5000 个采用 AI 代码审查器的代码库,其 PR 完成时间中位数提高了 10 - 20%。AI 通常在 PR 创建后的几分钟内就能发现问题并提出改进建议,这意味着作者可以及早解决这些问题,而无需等待人类审查人员的时间安排。这也意味着对于小的修复,来回沟通的次数减少,因此 PR 可以更快地获得批准和合并。
- 更高的代码质量:它通过在各个方面提供有关编码标准和最佳实践的指导,帮助提高代码审查的基准质量。在很多情况下,AI 标记出了可能被忽视的错误 —— 例如,发现缺失的空检查或顺序错误的 API 调用,这些都可能导致运行时错误。通过在代码合并前发现这些问题,我们防止了下游可能发生的潜在事故。
- 开发人员学习:它可以像一位导师一样,审查每一行代码并解释可能的改进。特别是对于新员工,它可以作为有用的指南,加速他们的入职过程和对最佳实践的学习。
定制化:为团队量身定制审查
其提供的一个强大功能是可配置性和可扩展性。团队可以自定义体验,以提供特定于代码库的指导原则。此外,团队还可以定义特定于其场景的自定义审查提示。公司各团队正在利用这些定制功能进行专门的审查,例如根据历史崩溃模式识别回归问题,或确保具备发布和变更管控。
第一方和第三方解决方案的协同进化
一个很自然的问题是:微软内部的 AI 审查如何惠及更广泛的开发社区?作为 AI 驱动代码审查的首批采用者和内部测试者,我们很早就有了相关经验,能够根据工程团队的直接反馈,快速迭代改进审查质量、可用性和开发人员信任度。内部获得的见解、模式和成功案例不仅验证了 AI 辅助审查的价值,还有助于定义诸如内联建议和人机协作审查流程等体验。这个反馈循环对 GitHub 推出 Copilot 拉取请求审查功能起到了重要作用,该功能于 2025 年 4 月全面上市,为全球数百万开发人员带来了这些创新。
同时,使用 GitHub Copilot 进行拉取请求审查所收集到的经验教训正被整合到微软的内部开发流程中。这种协同演进确保微软的开发人员和更广泛的开发社区都能从代码审查领域的 AI 进步中受益。
最终思考
AI 驱动的代码审查是推动我们大规模改变代码审查方式的催化剂。通过将大型语言模型的力量与人类工作流程的严谨性相结合,它使开发人员能够更快地编写更好的代码。审查人员获得更深刻的见解,作者得到可操作的反馈,团队能够更有信心地前进。
而这仅仅是开始。随着在定制化和质量方面的持续投入,AI 有望重新定义微软的开发人员体验。展望未来,我们专注于加深其上下文感知能力 —— 引入特定于代码库的指导、参考过去的 PR,并从人类审查模式中学习,以提供更符合团队规范和期望的见解。这将使审查人员能够完全专注于高价值的反馈,而 AI 处理主要的常规检查,从而简化审查流程,提高速度和一致性。这是一个我们所期待的未来 —— 在 AI 的全程支持下,发布高质量代码变得更容易、更快速。
无论您是在微软,还是在更广泛的开发社区中贡献力量,AI 都能帮助您更智能地编写代码。尝试 GitHub Copilot 的代码审查功能,将 AI 融入您的工作流程吧。
原文链接:https://devblogs.microsoft.com/engineering-at-microsoft/enhancing-code-quality-at-scale-with-ai-powered-code-reviews/
【译】借助 AI 驱动的代码审查,大规模提升代码质量的更多相关文章
- .NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量
随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入. 如何确保提交代码的质量和提 ...
- 程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...
程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...
- 我是如何在公司项目中使用ESLint来提升代码质量的
ESLint:你认识我吗 ESLint是一个语法规则和代码风格的检查工具. 和学习所有编程语言一样,想要入门ESLint,首先要去它的官网看看:https://eslint.org/. ESLint的 ...
- PHP之提升代码质量36计
转载:https://www.binarytides.com/35-techniques-to-enhance-your-php-code/ 1.不要使用相对路径 常常会看到: require_onc ...
- 为了增强团队的协作和高效开发,提升代码质量,TGideas团队一起制订的代码规范。主要包括五部分内容:PC规范、移动端规范、性能优化、CP规范、其他项目规范
http://tguide.qq.com/main/index.htm
- AI驱动的超分辨技术落地实践
近年来,随着深度学习技术的快速发展,基于AI的超分辨技术在图像恢复和图像增强领域呈现出广阔的应用前景,受到了学术界和工业界的关注和重视.但是,在RTC视频领域中,很多AI算法并不能满足实际场景下的应用 ...
- 微软发布云端基因服务:推动AI驱动的精准医疗
微软发布云端基因服务:推动AI驱动的精准医疗 2018年03月07日 00:00:00 微软研究院AI头条 阅读数:117 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...
- 迈入 8K 时代,AI 驱动超高清 “视” 界到来
2021 年,超高清迈入 "8K" 时代.超高清视频将带来全新视听体验,但超高清生产在内容生产层面也面临着超高清存量少.生产设备更新换代慢.制作周期成倍增加的困境.在 7 月 10 ...
- NPC AI驱动最基本过程
NPC AI驱动最基本过程 NPCmgr中比较重要的是加载NPC和一个NPCAI的一个指针 他利用map那个线程的定时到底做了啥呢 void NPCmgr::npcAITimer() { time_t ...
- 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...
随机推荐
- FastAPI数据库集成与事务管理
title: FastAPI数据库集成与事务管理 date: 2025/04/18 00:15:34 updated: 2025/04/18 00:15:34 author: cmdragon exc ...
- Kali安装JDK8以及JDK11、JDK17切换
声明:本文分享的安全工具和项目均来源于网络,仅供安全研究与学习之用, 如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关. 瓜神学习网络安全 公众号 背景 很久之前更新了一次ka ...
- smail log插桩(模板)
即插即用 后面都用hook了,但是为了方便,还是分享下吧 Log const-string v0, "MYTAG" const-string v1, "Message&q ...
- Agent安装与使用
Agent安装与使用 前置条件 安装jdk17 下载 https://dlcdn.apache.org/skywalking/java-agent/9.1.0/apache-skywalking-ja ...
- 【HUST】网安|操作系统实验|实验三 内存管理
文章目录 任务 任务1 Win/Linux编写二维数组遍历程序,理解局部性的原理. 1. 提示 2. 任务代码 3. 结果及说明 任务2 Windows/Linux模拟实现OPT和LRU淘汰算法. 1 ...
- Typora中markdown文件无法识别行内公式(内联公式)
行内公式属于LaTeX扩展语法,而不属于Markdown的通用标准.为了使Typora予以解析,需要在Typora的"文件"-"偏好设置"中,勾选"内 ...
- 全网资源无水印下载!支持抖音、视频号、小红书等,Rubik下载介绍
在日常生活和工作中,我们经常要用到一些优质的影音或图片素材,然而,随着各种平台的限制越来越多,不是需要付费订阅后才能下载,就是完全不提供下载渠道,想要找到一个广泛又好用的下载工具变得格外困难 Rubi ...
- 基于libwchnet&Mbedtls实现HTTPS
引言: 本文将介绍使用CH32V307VCT6以及官方协议栈(libwchnet)搭配Mbedtls作为客户端通过HTTPS访问百度并获取百度首页数据. 一.HTTPS概述与SSL/TSL简介 HTT ...
- 踩坑之MySQL安装及修改初始密码
不得不说,mysql client的安装及改初始密码步骤多,繁琐,坑也不少,下面就总结下安装流程及遇到的那些坑(Windows): 1.安装 安装地址:https://dev.mysql.com/do ...
- 小白也能行!10分钟用Cursor搭建个人博客网站(零基础教程)
一.Cursor是什么?Cursor是一款基于AI的智能代码编辑器,它整合了GPT-4技术,可以帮助我们: 自动生成代码 解释代码含义 修复代码错误 对话式编程指导特别适合编程新手使用,传统搭建博客需 ...