【译】借助 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/

 


 
原创作者: MeteorSeed 转载于: https://www.cnblogs.com/MeteorSeed/p/18988988
### 代码安全审计方法 代码安全审计涉及多个方面的工作流程和技术手段,旨在识别和修复软件中的安全隐患。一种常见的做法是从定义明确的安全策略出发,确保所有参与人员都理解并遵循既定的标准和指南[^1]。 对于具体的审计工作而言,采用自动化工具辅助人工审查是一种高效的方式。这类工具能够在大规模项目中迅速定位潜在的风险点,减轻开发者负担的同时提高了工作效率。例如,Betterscan作为一款先进的代码安全编排与审计解决方案,不仅支持多种编程语言下的源码扫描功能,还提供了详细的报告生成功能来帮助团队更好地理解和处理发现的问题。 另外,在实施过程中引入人工智能技术也逐渐成为趋势之一。借助于机器学习算法的支持,AI静态代码审计平台可以在更短时间内完成复杂逻辑的理解以及深层次缺陷的挖掘,从而进一步增强了安全性保障措施的效果[^2]。 ### 使用的工具 在选择适合自己的代码安全审计工具时,可以根据实际需求考虑以下几个选项: - **Betterscan**:这是一款专注于代码安全性的多功能工具,适用于不同类型的开发环境。除了基本的语法检查外,还能深入到业务层面进行威胁建模分析,提供全面而细致的结果反馈。 - AI驱动型静态分析器:利用最新的自然语言处理技术和模式匹配机制,此类产品特别擅长捕捉那些难以被传统方式察觉的新颖攻击向量或隐蔽漏洞。它们通常具备良好的扩展性和自适应能力,随着新威胁情报不断更新迭代其检测模型。 此外还有专门面向特定脚本语言设计的专业化工具集可供选用,比如用于Perl程序的质量评估就有相应的专用套件存在,可以帮助维护者及时掌握现有资产状况并采取相应改进措施[^3]。 ```perl use strict; use warnings; sub analyze_code { my ($file_path) = @_; open(my $fh, '<', $file_path) or die "Could not open '$file_path' $!"; while (my $line = <$fh>) { chomp($line); # 这里可以加入具体规则实现对每一行代码的合规性验证 } close($fh); } ``` 此段伪代码展示了如何构建一个简单的文件读取循环框架,可用于遍历待审阅的目标文档集合,并在此基础上集成更多定制化的检验逻辑。 ### 最佳实践建议 为了使代码安全审计达到理想效果,应当注重以下几点原则: - 定期开展培训活动,提高全员信息安全意识; - 建立健全内部管理制度,明确规定各项操作规程; - 积极采纳新兴科技成果,持续优化现有的防护体系; - 加强跨部门协作沟通,形成合力共同应对挑战; - 对每一次审核结果认真总结经验教训,推动整体水平稳步上升; 通过上述多管齐下式的努力方向指引,相信任何组织都能够建立起一套科学合理的代码安全保障机制,进而为用户提供更加可靠的产品和服务体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值