如何使用AI进行CodeReview_人工智能

编写不当的代码可能会导致应用程序损坏、网站被黑以及代价高昂的安全漏洞。多年来各种科技公司已经开发了各种工具和范例来改进软件开发。 

业界为提高软件开发效率而开发的一些工具和范例,包括:

  • 代码解析器:直接内置于 IDE(集成开发环境)中,可以在编辑器中发现错误,就像文字处理器强调拼写错误一样
  • CI(持续集成):一种团队编码实践,其中不断地将更改添加到代码库中,以便尽早发现错误
  • 敏捷编码:一种专注于增量和迭代开发的编码方法。
  • Scrum 方法:强调团队合作的编码方法。
  • Linting:静态代码分析。
  • 单元测试:自行测试组件和代码单元。 
  • 结对编程:两人一组编码。

另一种方法称为Code Review。多年来,随着更自动化的CodeReview方法的出现,这个术语的含义已经发生了变化。但基本含义保持不变:代码由编写代码的程序员以外的其他人(或其他人)审查 。审稿的目的是发现错误或改进风格,类似于作家的校对员。

不幸的是,手动CodeReview很容易出错并且会占用大量时间。而且自动审查缺乏复杂性,无法发现更复杂的错误。

人工智能 (AI) 和机器学习 (ML) 技术可以解决这两个问题。人工智能既可以应用于实际的审查过程,也可以应用于软件开发周期,因此在需要审查时代码已经处于良好状态。

手动审核会花费更少的时间,因为错误更少。人工智能驱动的审查是由经过数百万行正确代码测试的人工智能模型执行的,有时可以发现更细微的错误,因为它们所使用的数据集非常庞大。

在本文中,我们将探讨人工智能CodeReview如何提高软件开发效率并显着减少软件开发人员团队损失的时间。

  • 什么是CodeReview?
  • 使用人工智能进行CodeReview有哪些好处?
  • 如何使用人工智能进行CodeReview
  • 使用人工智能进行CodeReview时要避免的错误
  • 进行人工智能驱动的CodeReview的最佳实践

什么是CodeReview?

CodeReview最初是指两个或更多程序员面对面以审查代码并提出改进建议。这种性质的CodeReview仍然存在。如今,人们假设在进行手动CodeReview时代码已经通过了其他工具。

手动CodeReview会议有助于发现自动化工具通常无法发现的样式或代码效率错误。但它们也有缺陷:

  • 代码更改常常是在不理解的情况下就草草盖章的。 
  • 前辈的意见有时可能不正确,但会被优先考虑。 
  • 初级开发人员可能会犹豫是否要发言。

在更现代的用法中,CodeReview仍然指同行检查代码是否存在错误或风格不一致的情况。但这种审查通常是作为版本控制系统的一部分在开源项目中单独完成的。反馈以评论的形式留下。

如何使用AI进行CodeReview_程序员_02

GitHub 上已批准的CodeReview。

该系统减少了较长的会议时间,但如果有很多审核要做,则仍然很耗时。借助人工智能,手动审核速度更快,甚至可以完全跳过简单的更改。

使用人工智能进行CodeReview有哪些好处?

人工智能CodeReview工具通常会分析数百万行代码,以“学习”什么构成“良好”的编码实践,然后向编码人员提出建议。

与人类CodeReview不同,人工智能CodeReview完全基于数据,而人类CodeReview可能会出现性格冲突、资历级别和个人观点等问题。

根据人工智能CodeReview工具,它可以执行以下一项或多项操作:

  • 发现代码中可能导致其无法正确编译的错误。
  • 检测样式错误或最佳实践错误。该代码在技术上可能“正常工作”,但其编码可能会变得难以维护。
  • 向代码中添加有关更改内容的注释。 

人工智能帮助程序员的其他方式

人工智能还可以协助编码过程。这样,个人开发人员就有更好的机会编写无错误的代码。 

例如,你可以在处理一段代码时使用 ChatGPT 进行较小的CodeReview和改进。 

Codex 是 ChatGPT 的创建者 OpenAI 创建的另一个工具。Codex 经过明确培训,可以帮助完成计算机编程任务。语言模型通常通过 API 访问。 

例如,GitHub 的 CoPilot AI 编码工具使用 Codex API。

使用 AI 进行CodeReview以提高性能

性能问题很难调试,因为可能有多种因素造成。此外,应用程序性能优化通常需要对代码及其硬件进行广泛的审查才能正确调试。

然后再考虑当今软件的分布式特性。在不同云平台上运行的微服务架构和无服务器功能将应用程序变成了复杂的野兽,需要鸟瞰图进行调试。托管这些离散代码位的硬件也在调试性能中发挥着作用。

理想情况下,人工智能的CodeReview将从可观察性过程中获得的数据纳入这些系统中。 

著名的可观测平台 New Relic 已经使用 应用 智能(机器学习的一种形式)来减少客户的警报噪音。亚马逊的人工智能CodeReview器 CodeGuru 使用人工智能来分析巨大的代码体。它的姊妹产品 CodeGuru Profiler 可分析已投入生产的应用程序。我们在 Amazon 的帮助页面上找不到 CodeGuru Profiler 使用 AI 的具体提及,但它确实表示它可以对应用程序的性能做出“智能”决策。

如何使用人工智能进行CodeReview

通过将一些代码复制并粘贴到 ChatGPT 中,可以对小代码部分进行CodeReview。或者通过将 Amazon 的 CodeGuru 连接到您的存储库来在整个代码库上进行操作。

每种类型的工具都适用于软件开发周期的不同阶段。

让我们看看在典型的软件开发周期中会使用哪些人工智能工具以及何时使用:

1. 结对编程/人工智能辅助编码

结对编程是使用人工智能工具进行编码的行为,该工具会在您编码时建议代码或更正。此类工具通常与您的 IDE(集成开发环境)集成。

当公司雇用程序员时,人工智能辅助编码工具可以显著帮助开发人员更快、更高效地工作。 

智能代码

Microsoft 推出了 IntelliCode 来帮助您使用 AI 开发代码。

如何使用AI进行CodeReview_最佳实践_03

使用 Visual Studio IntelliCode 进行人工智能驱动的开发。

IntelliCode 是一个有效的工具,它在 GitHub 上搜索特定函数在其他代码项目中使用的真实示例。对于寻找特定功能最佳实践的新程序员来说,这可能很有用。 

它不会搜索您的自定义函数,只会搜索内置函数。目前它支持 Python、JavaScript/TypeScript 和 Java。 

如何使用AI进行CodeReview_程序员_04

IntelliCode 的实际应用。 

GitHub 副驾驶

GitHub 的 CoPilot 是另一个可以帮助您直接在 IDE 中进行编码的工具。CoPilot 是与 ChatGPT 和 Codex 的创建者 OpenAI 联合开发的。

如何使用AI进行CodeReview_应用程序_05

Visual Studio Code 中的 GitHub CoPilot

如何使用AI进行CodeReview_应用程序_06

CoPilot 根据注释生成代码。

如何使用AI进行CodeReview_人工智能_07

CoPilot 正确调试了一些代码。 

输入提示后,在 PC 上按 Ctrl + Enter,CoPilot 就会开始工作,由 Codex 提供支持。 

聊天GPT

ChatGPT 并未直接集成到 IDE 中,但它是一个出色的辅助工具,您可以要求:

  • 为你写代码
  • 调试代码
  • 审查代码

以下是 ChatGPT 在此开发阶段可以执行的操作的一些示例。

从头开始编写代码:

如何使用AI进行CodeReview_应用程序_08

ChatGPT 用 Python 编写了一个简单的游戏。

游戏完美运行:

如何使用AI进行CodeReview_应用程序_09

调试代码

ChatGPT 还可以用于查找错误。我们修改了上面的代码,添加了一个很难发现的错误:程序员向用户输入了错误的消息,告诉用户猜测更高而不是更低。发现这些类型的错误通常是一场噩梦。让我们看看ChatGPT是如何管理的:

如何使用AI进行CodeReview_最佳实践_10

手动插入的错误。

如何使用AI进行CodeReview_应用程序_11

ChatGPT 令人惊叹的调试功能。

记录代码

程序员不擅长评论他们的代码,更不用说记录它了。我们要求 ChatGPT 记录上面的代码。 

如何使用AI进行CodeReview_程序员_12

使用 ChatGPT 编写代码文档。

在 PHP 中,您可以使用 PHPDoc 生成文档。我们要求 ChatGPT 将代码转换为 PHP,并包含 PHPDoc 风格的注释,以便稍后可以转换为文档。 

如何使用AI进行CodeReview_应用程序_13

ChatGPT 将 Python 代码转换为 PHP 并包含 PHPDoc 风格的注释。

这些功能有助于使代码更易于阅读并更快地审查。它们还减少了开发过程中的错误,因此程序员有更多时间来提高效率,而不是寻找难以发现的错误。 

关于人工智能在所有领域(写作、图像生成、编码)的一个常见错误是相信人工智能可以处理一切。不可以。但它肯定可以加快这一过程。 

人工智能完成工作后,你必须请专家来审查工作。

2. 代码分析/“linting”

“Linting”是分析静态源代码文件并查找错误的过程。Linting 早在人工智能集成之前就已经存在,但添加人工智能将这个CodeReview工具提升到了一个新的水平。

在 AI 出现之前,Linting 仅限于查找语法错误、检测丢失的代码引用和导入以及其他特定于语言的错误。借助人工智能,linting 现在可以将代码与其数据库中的数百万行源代码进行比较。

凭借其内存库中的“理想代码”库,人工智能可以根据最佳实践提出更改建议。

Linting/静态分析工具包括:

  • Snyk(以前的 DeepCode)
  • 亚马逊代码大师
  • ChatGPT 和 Codex

Snyk (DeepCode) 收集了超过 200,000 个开源代码存储库可供学习。它使用符号人工智能(专注于绘制数学符号之间的相关性的人工智能)和机器学习 (ML) 来执行其任务。

如何使用AI进行CodeReview_最佳实践_14

Snyk (DeepCode) 与 GitHub 同步。

Snyk 在我们发送的代码中没有检测到任何漏洞,因此我们添加了一些 非常糟糕的 PHP 编程。Snyk 在将文件添加到存储库后立即对其进行了标记。 

如何使用AI进行CodeReview_人工智能_15

Snyk 在我们的 PHP 文件中发现了一段高度危险的代码!

亚马逊代码大师

亚马逊的 CodeGuru 是一款功能强大的工具,可为个人和小型企业提供与企业客户相同的功能。注册后,您将代码存储库与 CodeGuru 连接,它就会开始分析它的各个方面。

如何使用AI进行CodeReview_程序员_16

Amazon  CodeGuru 分析存储库。

如何使用AI进行CodeReview_应用程序_17

CodeGuru 分析您的整个代码库并提出建议。

我们对测试项目存储库进行了分析,CodeGuru 提供了改进建议。您还可以对特定分支(项目的独立副本)运行CodeReview。

如何使用AI进行CodeReview_应用程序_18

CodeGuru代码分析。

CodeGuru 无疑是最强大的人工智能CodeReview工具之一。

在最终批准之前,理想情况下,人工也会进行审查。最终审查会快得多,因为人工智能会处理所有繁重的跑腿工作。 Fiverr 有许多专家CodeReview员, 您可以使用它们来对您的代码进行最终检查。 

3. 审查拉取请求

从最真实的意义上来说,这就是“CodeReview”的用武之地。版本控制系统已将这种人工审查流程直接实施到软件开发生命周期中,以减少将错误代码提交到主分支的机会。 

存在可以在此阶段自动审查代码的工具,通过在CodeReview中完成最初的繁重工作来释放宝贵的时间。

此阶段CodeReview的一些工具包括:

  • Codeball:它直接集成到 GitHub 中以自动审查拉取请求。它还会自动生成代码以响应其他审阅者的评论。
  • WhatTheDiff:提供 AI 生成的 Pull 请求更改摘要,因此您无需自己执行。它还根据您对需要完成的操作的人类语言描述来重构代码。 
  • ChatGPT 和 Codex:手动CodeReview(尽管 Codex 可能会通过 API 使用,并且这里的可能性是无限的)。
  • Amazon CodeGuru:用于全面检查,不一定是每个拉取请求。

如何使用AI进行CodeReview_最佳实践_19

WhatTheDiff 自动检测更改,然后在 GitHub 拉取请求中对它们进行评论。

我们要求 ChatGPT 比较两个代码文件,不幸的是,答案有点太罗嗦了。这是因为 ChatGPT 并不是专门针对编码任务进行训练的,而是针对人类语言生成进行训练的。 

如何使用AI进行CodeReview_应用程序_20

当被要求比较两个代码文件时,ChatGPT 给出了啰嗦的回答。

4. 代码测试

无论你的代码看起来多么优秀,所有代码都必须经过测试。以一种或另一种形式使用人工智能来测试应用程序的自动化测试平台包括:

  • 完美
  • 应用工具
  • 功能化

因为这些本身不是CodeReview工具 ,所以我们不会深入研究它们。但它们在加快和改进整个软件开发周期方面值得一提。 

5. 代码分析/性能监控/可观察性

最后,还有可观察性:通过研究系统的输出来了解系统内部的行为。 

Amazon CodeGuru 分析符合此标准。然而,我们并不完全确定它目前使用的人工智能程度如何。

但可观察性完全取决于 数据。内部数据分析工具可以根据预定的标准分析这些输出,以确定异常情况和需要改进的地方。内部人工智能工具可以监控这些输出。 

使用人工智能进行CodeReview时要避免的错误

相信人工智能会处理一切是错误的。

true.co 的 埃罗尔·托克 (Erol Toker) 表示 :“我认为人工智能与《钢铁侠》中的贾维斯类似。”该公司致力于开发人工智能机器人,实现收入自动化。 “它很智能,可以找到“ 什么”  ,但不能找到 “为什么” 。因此,我用它来编写代码和CodeReview,以了解诸如“代码在做什么?”、“哪些最佳实践尚未遵循?”等问题。一旦我知道了这一点,我就可以更多地关注抽象逻辑。“边缘情况是什么?方法或代码结构正确吗?”

每个行业在人工智能方面面临的最重要的问题是对其过于信任。这项技术还处于起步阶段。ChatGPT 激发了许多想象力,但距离我们期望 AI 拥有的能力还很远。

Bing 的 ChatGPT 支持的聊天机器人“Sydney”最近的 失误揭示了这项技术的新生程度。专家们一再警告语言模型容易产生“幻觉”——当这些人工智能系统开始生成不基于所输入的任何数据的响应时。

人工智能编码工具建立在与这些“幻觉”类似的语言模型之上。这并不意味着不应该使用人工智能编码工具:大多数时候,它们都能把事情做好。

但他们的代码应该始终由人工检查。

就 Codeball 而言,  一旦问题看起来很困难,它的人工智能就会停止尝试解决问题,并将其留给人类。这仍然可以捕获人类可以捕获的 66% 的代码缺陷,从而节省大量时间。 

进行人工智能驱动的CodeReview的最佳实践

进行 AI CodeReview时,请记住以下最佳实践:

  • 人工智能是一种工具。所以就这样使用它。它的存在是为了增强人类的能力,而不是取代它。
  • 了解人工智能提出的每一个变化和建议。这也将使您成为一名更好的编码员。
  • 如果您的工具具有“悲观”模式,请使用此模式,而不是对自动化 AI CodeReview更改过于乐观。
  • 对于许多程序员来说,注释代码是一个薄弱环节。使用AICodeReview工具来帮助评论。
  • 使用人工智能并不意味着您不需要对代码运行手动和自动测试。人工智能代码带来的节省时间可用于更深入的测试。