找回密码
 注册

Sign in with Twitter

It's what's happening?

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 144|回复: 0

AI In Code Reviewing

[复制链接]
发表于 2025-11-15 20:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

×
作者:微信文章



什么是基于人工智能的代码审查?

没有人能一开始就写出完美的代码,在涉及企业级解决方案时尤其如此。代码审查对于确保生产代码能够平稳且高效地运行是必不可少的。

传统的代码审查需要开发人员手动检查每一行代码,以捕捉错误、执行标准并提出改进建议。虽然这种方式是有效的,但该过程往往很耗时,容易出现人为错误,而且缺乏一致性。多次审查甚至会增加更多的复杂性。 基于人工智能的代码审查借助机器学习和高级算法来提升这一过程,实现审查过程的自动化并加以改进。这些智能系统不仅能识别语法错误,还能理解代码运行的上下文环境,提供超越表面问题的深刻见解。
基于人工智能的代码审查的深度

人工智能驱动的工具会分析项目目标、其他代码组件的功能,以及近期的更改可能会对整个系统产生怎样的影响。例如,在审查应用程序编程接口(API)时,人工智能可以评估与现有系统的兼容性、评估对基础设施的影响,并确保遵循最佳实践。这种审查方式能确保每一行代码都能与整个系统妥善整合,与项目目标完美契合。

基于人工智能的代码审查中通常会考虑的常见因素包括:
    遵循编码标准:确保代码遵循项目特定的约定,比如命名规范和目录结构。对现有代码的影响:评估更改是否会引入漏洞,或者是否需要更新文档。基础设施与性能:评估对系统性能和基础设施要求方面的潜在影响。安全性与健壮性:识别潜在漏洞,确保新增代码是安全的。一致性与优化:与现有应用程序编程接口(API)保持一致,并针对手头的问题优化解决方案。

由于人工智能可以一次性查看整个代码库,这些审查确实能够改进软件开发实践,确保每一行代码都能良好运行,并与整个系统完美融合。

但不要仅仅依赖人工智能,毕竟它并不完美,肯定会犯错。不过在大多数情况下,这些自动化的人工智能审查确实能派上用场。当你在做一些新颖的事情时,人工智能会遇到很多困难,在这种情况下你应该始终仔细检查。
与传统代码审查的区别

传统代码审查有点像校对文档中的语法和拼写错误,而不关心其背后的内容或意图。它确实有用,但可能会遗漏诸如情节漏洞或角色不一致等更大的问题。

代码审查通常遵循一种结构化的方法:一名开发人员编写代码后将其交给另一名开发人员进行评估。评审人员会全面检查提交的代码,分析每一行并提供注释、评论、疑问或指出潜在问题。该过程一般如下展开:
    创建拉取请求(Pull Request):

开发人员创建一个拉取请求(PR),记录所做的更改并请求进行审查。
    审查过程: 另一名开发人员或工程经理审查该拉取请求,重点关注以下特定标准:
      确保更改与相关任务单(ticket)的范围相符。验证业务逻辑实现的正确性。通过撤销不必要的更改以及遵循编码标准来维护或提高代码质量。检查潜在的安全漏洞。
    批准或拒绝:
      批准:如果代码符合所有标准,评审人员批准拉取请求以便合并。拒绝:如果发现问题,评审人员会就必要的更新提供详细反馈。
    迭代:

开发人员根据反馈修改代码,然后重复该过程,直至获得批准。

这种工作流程已经成为现代开发的基石,确保了协作和质量。它取决于评审人员能否提供反馈以及开发人员对实施更改的响应能力。

传统的代码审查将代码视为独立个体,而基于人工智能的代码审查则将代码视为更大整体的一部分。它们不仅能识别简单的错误,还能发现可能在特定场景下影响应用程序行为的更细微问题。这种方式能确保更高的代码质量、更快的开发周期以及更强的安全性。

w1.jpg
传统代码审查面临的挑战

相比之下,基于 AI 的代码审查将代码视为更大图景的一部分。它们不仅可以识别简单的错误,还可以发现可能影响应用程序在特定场景中行为的更微妙的问题。这种方法可确保更高的代码质量、更快的开发周期和增强的安全性。

w2.jpg

基于 AI 的代码审查
    耗时的: 人工审核可能会成为瓶颈,从而延迟代码的交付。人为错误: 审阅者可能会忽略细微的错误或安全风险,尤其是在紧迫的期限内。不一致: 不同的审阅者可能有不同的标准和关注领域,从而导致反馈不一致。

基于 AI 的代码审查通过提供一致、公正和快速的评估来应对这些挑战,使开发人员能够专注于更复杂和更具战略性的任务。
由人工智能和机器学习驱动

人工智能和机器学习是基于人工智能的代码审查智能化背后的驱动力。这些技术使审查工具能够从过往的代码中学习,识别正常模式,并基于大量数据预测潜在问题。它们的主要关注点不仅仅是捕捉遗漏的分号,而是理解一个小的更改可能会以意想不到的方式对系统产生连锁反应。

很可能这些代码审查助手是基于某种大型语言模型(LLM)构建的,鉴于这些大型语言模型已经见过大量的数据,它们很容易理解好的代码是什么样的以及最常见的错误有哪些。
代码审查领域中的人工智能工具

有许多 AI 驱动的工具和平台提供这项服务。其中值得注意的是:
    GitHub Copilot:协助代码生成,并提供实时建议。亚马逊的 CodeGuru:专注于识别性能问题并推荐改进方案。Snyk 的 DeepCode:利用人工智能分析代码中潜在的漏洞和脆弱性。

这些工具利用机器学习和高级算法来自动化流程、提出优化建议,甚至生成代码片段来解决已发现的问题。随着时间的推移,此类工具的采用肯定会越来越多。
CodeRabbit

在基于人工智能的代码审查工具不断发展的背景下,CodeRabbit可能会成为 Copilot 以及其他大型实验室开发的工具的有力竞争对手。

CodeRabbit 将人工智能融入审查过程,既是引导者又是助手。以下是 CodeRabbit 提升上下文感知代码审查的方式,它所提供的功能不仅能简化开发过程,还能显著增强开发流程:
CodeRabbit 的主要功能

    拉取请求摘要: 自动生成拉取请求的全面摘要,按文件或目录细分更改。这使开发人员能够快速掌握修改,而无需手动测试和迭代的繁琐过程。与代码聊天: 通过允许开发人员通过聊天界面直接与工具互动来增强交互性。开发人员可以询问有关建议更改的详细说明、提出替代方案或提供更正以增强工具的学习效果。深入的代码审查: 对每个新提交进行彻底的增量审查,仔细检查每段代码。它可以发现可能被遗漏的潜在问题、错误或漏洞,并提供详细的解释和可行的建议。可提交建议: 包括一项功能,允许开发人员直接应用建议的更改,从而最大限度地降低错误进入生产环境的风险,并确保更高质量的最终产品。

w3.jpg

CodeRabbit 系统设计

CodeRabbit 不仅仅是一个传递给 LLM 模型的简单包装器。为了规避上下文大小限制,CodeRabbit 使用一种创新的多 LLM 和多阶段方法来扩展对更大更改集的审查。与基于 AI 的代码完成工具不同,代码审查是一个更复杂的问题。审阅者上下文比开发人员上下文广泛得多,因为审阅者不仅需要发现明显的问题,还需要了解拉取请求的更大上下文和多个文件中的更改。

由于 LLM 受其上下文窗口的限制。CodeRabbit 使用一种巧妙的技术来处理这个问题并提供全面的答案。

摘要层:
    为每个文件生成摘要并确定关键上下文的优先级。递归摘要提取相关细节,确保较大的变更集适合 LLM 的上下文窗口。

增量审阅:以增量方式(例如,按文件、块或提交)分析更改,以保持在令牌限制范围内,同时保留有意义的上下文。
CodeRabbit 与竞争对手的比较

虽然 GitHub Copilot、CodeGuru 和 DeepCode 等工具提供了有价值的功能,但 CodeRabbit 通过其全面的功能集和无缝集成功能脱颖而出:
    综合摘要: 与一些主要关注代码生成或性能问题的工具不同,CodeRabbit 提供了详细的拉取请求摘要,为开发人员节省了大量时间。交互式界面: 基于聊天的交互使 CodeRabbit 与众不同,使审查过程更具吸引力和洞察力。高级集成: CodeRabbit 与 Jira 和 Linear 等问题管理工具无缝集成,增强了问题跟踪和项目管理。持续学习: CodeRabbit 不断从交互中学习,随着时间的推移改进其反馈和建议,确保它与项目不断变化的需求保持一致。

我个人认为与 JIRA 的集成以及 PR 摘要可能会改变整个行业的游戏规则。

w4.jpg

其他代码审阅者比较表
基于人工智能的代码审查的优势

这些高级评审不仅提高了代码质量,还改变了代码的开发方式,并显著影响了项目结果:
    发现细微的差异: 通过一次性查看整个项目,基于 AI 的审查可以检测到可能被忽视的细微差异,例如可能导致意外错误的模块之间的交互。加快开发周期: 基于 AI 的审核具有效率和准确性,可简化开发流程,缩短反馈和修订的周期,并使开发人员能够更快地取得进展。改善软件运行状况和使用寿命: 确保新代码与现有系统无缝集成有助于维护干净且可扩展的代码库,从而提高软件可靠性并简化未来的增强功能。主动增强安全性: 基于 AI 的审查通过考虑更改如何影响整个系统来解决潜在的安全漏洞,从而在安全问题成为威胁之前防止它们。Tailor 开发人员支持: 除了发现问题之外,基于 AI 的评论还提供个性化反馈,营造鼓励持续改进和技能提升的学习环境。

w5.jpg

SonarQube 可能是软件行业中最受欢迎的 SCA。它的主要优势在于其基于规则的分析,可以有效地发现语法错误和标准违规。

现代开发人员用来改进代码的两个最重要的工具是静态代码分析器 (SCA) 和 AI 代码审阅者。

SonarQube 可能是软件行业中最受欢迎的 SCA。它的主要优势在于其基于规则的分析,可以有效地发现语法错误和标准违规。

但是像CodeRabbit 这样的 AI 审阅者更进一步,不仅显示语法错误,还使用他们的上下文化来解决其他错误并推荐以提高效率。

w6.jpg
CodeRabbit 的实际应用

乍一看,你可以看到拉取请求(PR)包含两个代码提交,涉及六个文件的更改。无需逐个点击这六个文件并审查代码更改,而是有一个关于所引入的新功能和增强内容的快速摘要

w7.jpg

文件级别的更改会在一个简短的表格中汇总,接着还有另一个表格展示代码更改是否确实满足现有的软件需求。维护人员无需手动审查功能需求是否确实得到满足。一切都以一种可以直观浏览完整性的方式呈现出来。

w8.jpg

特别要强调的是拉取请求(PR)末尾出现的 “代码库验证” 功能。人工智能检测到对一个旧方法(GetHandler)的引用,并发现 “在结构体中该方法重命名为bGetHandler后,并非所有对该方法的引用都进行了更新”。也许这个更新后的函数名是一个需要纠正的拼写错误,又或许是一个未被一致应用的有意重命名。无论哪种情况,这都可能是一个被人工智能检测到的引入到代码库中的重大变更。

在某些情况下,它可能会生成您可能不想要的东西,并且可能有点不必要。例如,Poem 功能可能是很多人不喜欢的,因为它只会增加噪音。

w9.jpg

但总而言之,我认为 AI 代码审阅者可能对您的软件开发过程有很大的好处。但要小心使用它,它可能会让你变得懒惰,并可能导致你过于相信人工智能。我们离这里还很远。

在很多情况下它会失败,尤其是在涉及新用例时。因为那是 LLM 失败的地方,最终,所有 AI 代码审阅者都使用 LLM 只是为了提出更改建议。因此,如果 LLM 在这些问题上失败,AI 代码审查者也会失败。

基于 AI 的代码审查代表了软件开发的重大飞跃,提供了更高的效率、准确性和一致性。通过将 AI 集成到代码审查流程中,团队可以实现更高的代码质量、更快的开发周期和更高的安全性,同时营造协作和持续的学习环境。

我唯一的建议是明智地使用任何 AI 工具,如果配置或使用不当,它们可能会导致更多错误。不要偷懒,并检查 AI 生成的代码是否具有正确的功能。AI 的好坏取决于您对问题的解释。
主要来源

    https://medium.com/aiguys/ai-in-code-reviewing-f7740eb86b27
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

Archiver|手机版|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网

GMT+1, 2025-11-22 22:07 , Processed in 0.167576 second(s), 30 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表