AI辅助代码生成究竟有多好?

本文探讨了生成式AI在软件开发中的广泛应用,如GitHubCopilot和AmazonCodeWhisperer,它们通过自动化和代码建议加快开发速度。然而,文章强调了代码质量、安全性和重用问题的重要性,以及AI辅助编码可能导致的过度编写和潜在错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然在软件开发中使用生成式AI工具越来越普遍,但代码质量、安全性和代码重用问题却一直被忽视。

生成式AI辅助编码让开发人员可以使用自然语言提示或部分代码输入来基于数字工具更快、更准确地编写代码。(就像一些电子邮件平台一样,这些工具还可以在实时编写代码时自动建议补全代码。)

0fa6dea0a43c06311bc856d57b9f0ef9.jpeg

AI辅助代码生成工具在软件工程领域越来越普遍,出乎意料的是,它们已成为大多数组织尝试生成式AI(genAI)的低垂果实。采用率正在暴涨。原因是即便这些工具仅建议新应用程序的基线代码,自动化工具也可以消除原本需要耗费在手动代码创建和更新上的大量时间。

专门从事软件开发的市场研究公司Evans Data Corp.对434名AI和机器学习开发人员进行了一项跨国调查。当被问及他们最有可能使用genAI工具创建什么时,最多回答是软件代码,其次是算法和大型语言模型(LLM)。他们还表示,期望生成式AI能够缩短开发周期并更容易添加机器学习功能。

根据Gartner Research的数据,到2027年,将有70%的专业开发人员使用AI驱动的编码工具,而2023年9月这一比例不到10%。Gartner还表示,在未来三年内,80%的企业将把AI增强的测试工具集成到其软件工程工具链中——比去年年初大约15%的水平显著增加。

用于生成式AI自动化软件开发的顶级工具之一是GitHub Copilot。GitHub Copilot由GitHub、OpenAI和微软开发的生成式AI模型提供支持,并从公共存储库中出现的所有自然语言中训练而来。

自从去年推出GitHub Copilot for Business以来,已有超过50,000家组织注册使用它,包括Etsy和HelloFresh等数字化公司,以及Autodesk、Dell Technologies和高盛等领先企业,据微软开发者部门公司副总裁Amanda Silver表示。(微软于2018年收购了GitHub。)

根据Silver的说法,GitHub Copilot现在拥有超过130万付费订阅者。她说:“有着5万份许可证,Accenture现在是GitHub迄今为止最大的Copilot客户。”

除了GitHub的Copilot之外,一些最受欢迎的代码生成工具还包括Google Bard、Amazon CodeWhisperer、由GPT驱动的Microsoft 365 Copilot、Replit、Divi AI、Tabnine、Refact.ai和Codeium。大多数工具都是免费的或作为更大AI驱动订阅服务的一部分提供。

AI驱动的软件增强工具对于开发人员的效率和生产力影响巨大。例如,Amazon Web Services (亚马逊云科技)进行了一项生产力挑战,发现使用其CodeWhisperer代码开发工具的开发人员比不使用该工具的开发人员平均快57%完成任务的可能性高27%。

(Amazon Q 是由Amazon为企业使用而开发的基于生成式AI的聊天机器人,也是其CodeWhisperer工具的支撑。Amazon Q由Amazon Bedrock提供支持,后者可访问一系列模型,包括来自Amazon Titan家族的模型。)

根据一项Amazon-Persistent研究,使用Amazon CodeWhisperer的定制功能的开发人员完成任务的速度比不使用定制功能时快28%。

例如,5名亚马逊开发人员使用Amazon Q Code Transformation仅用两天时间就将1,000个生产应用程序从Java 8升级到Java 17。据一位亚马逊发言人透露,每个应用程序的平均时间不到10分钟,而以前升级一个应用程序需要两天时间。

自从2023年4月正式上市以来,Amazon CodeWhisperer已吸引了超过10万客户。例如,软件开发和外包服务公司HCLTech正在为5万多名HCLTech工程师、云从业人员和开发人员部署Amazon CodeWhisperer,为内部使用和为客户构建安全应用程序。

未来两年,Accenture计划让5万名开发工程师注册Amazon Web Services AI服务,包括Amazon Q和Amazon CodeWhisperer。

由于基于LLM的生成式AI软件开发工具训练数据包括数百万甚至数十亿行代码,最受欢迎的平台能够处理任何编程语言,从C到Python。

Amazon的CodeWhisperer作为Amazon Toolkit for Visual Studio (VS) Code和JetBrains的一部分提供。它目前支持Python、Java、JavaScript、TypeScript、C#、Go、Rust、PHP、Ruby、Kotlin、C、C++、Shell脚本、SQL、Scala、JSON、YAML和HCL。

GitHub首席运营官Kyle Daigle在早前接受Computerworld采访时表示:“在我们早期的试验中,我们做了很多Python、JavaScript和类似语言的工作。GitHub主要是一家Ruby公司,但我们也使用Go、C和FirGit等语言。因此,我们扩展了Copilot的使用案例,并在不同的语言中使用它。但总的来说,Copilot能够处理大部分在公共领域中的语言。”

仅依赖基于自然语言处理的用户提示,生成式AI辅助代码生成器就能提供从代码片段到完整功能的软件代码建议。更新还可以使这些工具变得更好。

例如,亚马逊表示,对其CodeWhisperer工具的更新将代码接受率从所有语言和使用案例的平均约20%提高到35%。

亚马逊CodeWhisperer和Amazon Q软件开发总监Doug Seven在一篇博客中表示:“现在,通过包含在CodeWhisperer中的Amazon Q,开发人员可以询问他们的代码,并利用Amazon Q的功能来查找代码中的错误、优化代码并翻译他们正在处理的代码。”

为什么AI辅助编码如此强大?

AI辅助编码广受好评的一个原因是,用户不必精通软件开发。自然语言处理允许即使是业务用户也可以简单地写一个提示,然后得到满足任何项目需求的软件。

例如,用户可以用自然语言写一条注释来概述一个特定任务,比如”使用服务器端加密上传文件”。基于这一信息,CodeWhisperer会直接在开发平台中推荐一个或多个代码片段来完成该任务,据一位亚马逊发言人透露。

许多编码工具还附带增强的代码安全功能扫描和代码修复建议。有些甚至带有”偏差”过滤和引用追踪器,可以检测一个代码建议是否类似于开源训练数据。后者是AI驱动编码助手的重要功能。

亚马逊和其他供应商还在尝试辅助非开发人员为业务目的生产应用程序的工具。例如,一位亚马逊发言人表示,该公司将非开发人员的参与视为使AI无处不在的一个优先事项。他们在内部病毒式传播后公开发布了PartyRock,这是一款娱乐教育生成式AI应用程序构建器,允许非开发人员在沙箱环境中与生成式AI和LLM一起工作。

Seven在接受Computerworld采访时表示:“你可以尝试构建不同的应用程序。我们将看到各种不同的工具出现在不同的场景中使用生成式AI。我认为我们只是触及了表面,还会在更多不同的地方看到生成式AI的身影。”

准确率各不相同

Seven表示,CodeWhisperer的代码接受率在30%到40%之间,但这并不意味着它编写的代码存在错误或问题。接受率是指生成式AI工具是否正确理解了开发人员的要求。

Seven形容开发人员和AI代码生成器之间的互动类似于一场对话,开发人员要求它生成某些内容,然后通过后续请求来修改要求。CodeWhisperer生成无错误且可用代码的能力”相当高”,尽管Seven说亚马逊没有透露内部指标。

从实际情况来看,开发人员和IT领导人认为,流行的基于AI的代码增强工具正确生成可用代码的能力在50%到80%之间。

AI驱动的软件交付提供商Digital.ai的首席执行官Derek Holt表示:“我们曾经对此有一个假设。现在,我们开始在实际研究中看到这一点。”

根据去年康奈尔大学的一项研究,不同的生成式AI编码工具之间存在很大差异。该研究显示,ChatGPT、GitHub Copilot和Amazon CodeWhisperer正确生成代码的比率分别为65.2%、64.3%和38.1%。

尽管该研究已经有一年的历史,但这些AI辅助代码工具的准确率”或多或少与今天相同”,这是加州大学洛杉矶分校Henry Samueli工程与应用科学学院的研究生布拉克·耶蒂斯蒂伦(论文主要作者)的观点。

GitClear是一款用于GitHub和GitLab的开发人员工具,提供代码分析和git统计。 它研究了2020年至2023年间超过1.53亿行代码,重点关注了代码修改率、重复和代码年龄等关键指标转变,探讨了像GitHub Copilot这样的AI工具对编程实践的影响。

GitClear的发现之一是,使用Copilot后,开发人员的编码速度提高了55%。当GitClear将GitHub的代码质量和可维护性与人工编写的代码进行对比时,发现对于经验不足的开发人员来说,使用AI辅助编程的优势更大。

GitHub自己的数据显示,初级开发人员使用Copilot的频率比经验丰富的开发人员高出约20%。

GitClear还对500名开发人员进行了相应的调查,问题是”在积极使用AI时,你应该被评估哪些指标?“他们列出的三大问题是代码质量、完成任务的时间和生产事故数量。

GitClear的论文说:“当开发人员被快速简单的建议所淹没,而这些建议只能在短期内有效时,他们就会不断受到诱惑,添加更多代码行,而不去仔细检查是否可以优化现有系统以重复使用。”

更多代码,但更多错误?

据Digital.ai的Holt透露,通过使用自动化工具,开发人员生产的代码增加了45%,但这未必是一件好事。

CodeScene的创始人兼首席技术官亚当·托恩希尔在X/Twitter上说:“然而,AI辅助编程的主要挑战在于生成大量本不应编写的代码变得如此容易。”

另一个问题是,当代码不是由人工生成时,它就会变得更加不透明。因此,出现了质量挑战,包括代码是否能有效地测试错误和安全漏洞等问题。

在开发人员安全平台Snyk去年对使用基于AI的编码工具的软件工程师(96%)进行的一项调查中,超过一半的人表示不安全的AI代码建议很常见。

Holt说:“这并不奇怪。现在还处于初级阶段,我们正在使用某些存储库中的所有代码来训练这些模型。你所做的只是重复最初编写那些代码的开发人员所犯的错误。”

鉴于开发人员大部分时间都花在修复现有代码上,而不是编写新功能上,当代码不是由人工编写时,阅读代码并发现问题就成了另一个问题,Holt说。

即便存在这些问题,开发人员之所以采用Copilot这样的工具,是因为他们相信它能加快生成代码的速度。GitHub的研究发现,“在使用Copilot时,开发人员的工作满意度提高了75%”。

在对450名使用Copilot六个月的Accenture开发人员进行的一项研究中,88%的建议代码被保留下来,构建成功率提高了45%,每个受访开发人员都表示Copilot很有用,这是微软的Silver透露的。

代码修改率、移动和复制/粘贴代码问题

但GitClear也发现,随着AI辅助编程的使用增加,“修改率”、“移动”和”复制/粘贴”代码的比例显著增加。

“修改率”是指推送到存储库的代码在两周内被还原、删除或更新的百分比。在开发人员编写所有自己的代码之前,这种情况相对罕见,只有3%到4%的代码被修改过。

但是,总体代码修改率在Copilot推出测试版的第一年就增加了9%,这也是ChatGPT推出的那一年。

从2022年到2023年,AI助手的兴起与将”错误代码”推送到存储库密切相关。GitClear发现,Copilot的使用率(即用于生成代码的比例)在2021年为0%,2022年为5%到10%,2023年为30%。

GitClear的报告指出:“如果当前模式持续到2024年,届时将有超过7%的代码更改在两周内被还原,是2021年水平的两倍。”

对于长期代码可维护性来说,没有什么比复制/粘贴代码更为严重的了。因为简单重用的代码也可能包含以前的错误、安全漏洞或其他问题。

Holt说:“我毫无疑问我们能够解决这些问题,我们能够在仅由我们最优秀的开发人员编写的少量代码上训练模型。但是现在,如果你得到了一个初级开发人员,而你没有关注这对更广泛的软件开发生命周期意味着什么,你就可能冒一些风险。”

但Seven认为,CodeWhisperer和其他产品的一大优势在于,它们能够检查现有代码中的错误,然后提出修改建议。他说:“所以,它会为你提供进行那种更改的代码。在这种情况下使用Amazon Q [CodeWhisperer]的优势在于,作为开发人员,你有了一个调试伙伴。”

他补充说:“这在检查不熟悉的现有代码中的差异时可能特别有用。而且Amazon Q在这方面确实很出色。”

自动化工具的另一个优势是,它们可以在设置好后自动运行,无需人工干预,开发人员或工程师只需解释一个任务,工具就可以独立完成,无论是开发新应用程序还是调试现有应用程序。Seven说:“在任何一种情况下,代码的准确性和质量都相当高。”

毫无疑问,随着时间的推移,软件生成工具将继续改进,尽管始终需要人工参与。

Holt说:“我的直觉告诉我,开发人员将永远有工作,无论是审查、编目还是两者的结合。我们甚至还没有谈到,交付代码并不是目标。交付客户喜爱的出色功能才是真正的目标。

“所以,依我看,在软件开发领域,我前面还有漫长的职业生涯。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值