[点晴永久免费OA]AI正在使全球代码质量下降!1.53亿行代码深度分析报告出炉
当前位置:点晴教程→点晴OA办公管理信息系统
→『 经验分享&问题答疑 』
想不到,AI 生成的内容影响数据质量的问题,已经在代码上出现了。最近,GitClear 发布的一项调查报告显示,用 AI 写代码,正在导致「全球代码质量面临下行趋势」。 这引起了全网热烈讨论: 「借助 AI 提供商,您可以将代码生成速度提高 50%(即使是您不理解或无法编写的代码),但代价是代码的质量和可持续性不断下降。」 「我们要追求的,到底是质量还是速度?」 调查中,GitClear 分析了从 2020 年 1 月到 2023 年 12 月之间编写的 1.53 亿行代码更改数据, ——1.53 亿行代码,是目前已知最大的用于评估代码质量差异的数据集。 调查发现了什么?我们先看下面这张图: 图中展示了 4 年中的代码改动率——编写后不到两周就被撤销或更新的代码行百分比,——深色部分表示受 AI 代码生成工具影响的时间。 调查中同样发现,「新增代码」和「复制粘贴代码」的比例相对于「更新」、「删除」和「移动」代码的比例在增加。 这貌似说明开发人员在大量使用 Copilot 等 AI 代码生成工具,快速生成了大量代码,但随后发现了代码中的问题,——GitClear 的报告预计在 2024 年,这个代码改动率将达到 2021 年 AI 出现前的两倍。 另外一点就是,AI 代码生成工具不太理会人类程序员的一些原则(比如「重复造轮子」这件事),也就造成了代码库中越来越多的重复代码。 ——不过很多码农都是「CV 程序员」,这样看来,AI 也算是学到了精髓。 2023 年,GitHub Copilot 大放异彩。在短短不到两年时间内,这款 AI 编程助手从一个「原型」迅速成长为「核心工具」,被全球数百万开发者在数十万家企业中广泛应用,开启了 coding 的新时代。 对此,GitHub 发表了多篇研究论文,探讨了 AI 在软件开发领域的增长与影响。 速度提升 55%,GDP 增加 1.5 万亿 研究表明,使用 Copilot 的开发者编码速度可以提高「55%」,导致总的代码量增加了 46%,并且为全球创造了 1.5 万亿美元 GDP。 有了这样的成绩,也就不难理解为什么 GitHub 的 CEO Thomas Dohmke,会在繁忙的工作之余,专门撰写关于 AI 革命的文章。 在 2023 年 2 月 Copilot 个人版用户超过一百万之后,GitHub 又推出了 GitHub Copilot for Business 版本。 那么,有多少开发者在用 AI 来编写代码呢? GitHub 与 Wakefield Research 在 2023 年 6 月的一项研究中指出,92% 的美国大型公司的开发者表示他们使用了 AI 编程工具。并且有 70% 的开发者认为使用 AI 带来了明显的好处。 不过,O’Reilly Publishing 在 2023 年 8 月给出的调查数据显示,67% 的开发者没有用过 ChatGPT 或 Copilot。不管怎样,GitHub 在市场上仍有巨大的潜力等待挖掘。 ——然而,大语言模型(LLM)生成的代码引发的一个问题是: 这些代码的质量和可维护性到底怎么样? 面对 AI 滔滔不绝吐出的一大堆代码,程序员似乎不太容易发现其中的问题——毕竟都不是自己写的。 还有,众所周知,当程序员接手前人留下来的*山代码时,应该遵守的「潜规则」是: 如果这个代码能够正常运行,就千万不要妄想去重构。 AI 生成代码背后的挑战 无法否认,Copilot 实实在在的提升了开发者的编码效率。GitHub 的研究显示,使用 Copilot 的开发者满意度提升了 75%。 做初期产品开发的人是满意了,可后面负责长期维护的人就蛋疼了。 资深代码研究者 Adam Tornhill(著有《代码即犯罪现场》)对此持保留态度: 使用 Copilot 可以使代码编写速度提高 55%,但如果是本就不应该编写的代码呢? 如《Clean Code: A Handbook of Agile Software Craftsmanship》一书的作者 Robert Martin 所说,代码的阅读时间是编写时间的十倍。快速编写糟糕的代码,意味着给后来的代码阅读者带来了巨大的负担。 此外,AI 代码助手还带来了其他问题: 比如代码助手擅长生成代码,却不擅长修改;当有多个生成工具给出建议时,评估哪个更好是很耗费时间的; 最后,AI 代码助手与开发者的动机可能不同,对于代码优化来说,AI 往往倾向于提出最有可能被接受的建议。 所以,相比于经验更丰富的开发人员,初级开发者更倾向于接受 AI 给出的代码建议: 而老鸟们深知,随着时间推移,代码的维护成本会越来越高。 代码操作介绍 GitClear 将代码变更分为七个类别(研究中涉及前六种): 1. 新增代码:首次提交的代码行,代码行是全新的,不包括对现有代码行的小幅修改,也不包括那些被添加、移除后又重新添加的代码行。 2. 删除代码:被删除并提交的代码行,且至少在随后的两周内未被重新加入。 3. 移动代码:将一行代码剪切并粘贴到新文件或同一文件内的新函数中。「移动」的操作仅涉及位置的变换,代码内容不发生改变。 4. 更新代码:修改大约三个或更少的单词来更改原有代码行。 5. 查找/替换代码:从三个或更多位置移除相同字符串,并用一致的内容进行替换。 6. 复制/粘贴代码:在一次提交中,将相同的代码行内容复制到多个文件或函数中。 7. 无操作代码:指一些微小的代码变更,比如空格或同一代码块内行号的变化。 GitClear 自 2020 年起根据这些操作对 git 仓库进行分类,并在 Diff Delta 文档中提供了代码操作的具体示例。 截至 2024 年 1 月,GitClear 分析并分类了大约十亿行代码,这些代码来自商业客户(如 NextGen Health, Verizon)和流行的开源仓库(如 Facebook React, Google Chrome)。 其中,1.53 亿行代码为有意义的变更,被用于本研究。 最后,还有一个单独的定义叫做「搅动」(churn),意思是代码被创建、推送到 git 仓库后,在接下来的两周内被撤销或大幅修改。 ——也就是咱们最开始分析的那张图,可以将「搅动」理解为,作者一开始编写、提交并推送到公司 git 仓库的代码有问题,后来发现了。 数据分析 下表根据 GitClear 的数据,分析了不同的代码行操作数量,并按照代码的编写年份进行分类。 表中的前六项就是上面提到的代码变更的前六个类别,而最后一项是「搅动」。 将表格数据绘制成下面的图表,可以更清晰地看出各种代码操作类型的变化趋势,比如,图表中的浅蓝色细线显示了「Churn」类型代码的变化: 对于 2024 年的预测,这里使用 OpenAI 的 gpt-4-1106-preview 助手,对现有数据进行二次回归分析。 通过对比 2022 年与 2023 年的操作频率差异,识别出了三个可能影响代码质量的警示信号: 危险信号 2023 年,我们目睹了代码搅动、移动和复制粘贴方面的显著变化,这些变化背后的含义值得深入探讨。 代码搅动的新趋势 「代码搅动(Churn)」反映了推送到代码仓库后,在接下来的两周内被撤销、移除或更新的代码比例。 过去,当开发者完全自主编写代码时,这种情况相对罕见——2023 年之前,仅有3-4% 的代码会发生搅动。 然而,2022 年,随着 Copilot 的首次亮相和 ChatGPT 的问世,代码搅动率的预兆性跳升至9%。 2022 至 2023 年间,AI 助手的崛起与仓库中错误代码的增加密切相关。 假设 Copilot 在 2021 年的普及率为0%,2022 年为5-10%,2023 年达到 30%,这些变量之间的 Pearson 相关系数高达 0.98,显示了它们的同步增长。 随着代码搅动成为常态,错误代码部署到生产环境的风险也随之增大。如果这一趋势持续到 2024 年,超过7% 的代码更改可能会在两周内被撤销,这是 2021 年的两倍。 据此,报告预计 Google DORA 在年底发布的「2024 Devops 状态」报告中,将显示「变更失败率」的上升。当然前提是研究包含了 2023 年使用 AI 辅助的开发者数据。 代码移动减少,反映出重构和复用的减少 代码移动通常出现在对现有代码系统进行重构时。 重构系统,特别是代码的移动,是代码复用的基础。随着产品范围扩大,开发者会将现有代码重组到新的模块和文件中,以便新功能复用。 对经验丰富的开发者而言,代码复用的好处显而易见——与新增代码相比,复用的代码已经过测试并在生产环境中证明其稳定性。 复用的代码往往已被多人修改,更可能包含文档,这有助于新人更快理解模块。 随着标记为「复制粘贴」的代码增加,AI 助手似乎在抑制代码的复用,而是提供了一种重复现有代码的简单方式,而不是鼓励重构和遵循「不要重复自己(DRY)」的原则。 复制粘贴代码增多,预示着未来的维护困难 长期来看,复制粘贴代码可能是对代码可维护性的影响最大的因素。 当代码行被重复使用时,本质上意味着「我没有时间去评估之前的实现方式」。 选择复制粘贴新代码而没有复用代码,会使得未来的维护工作变得更加困难,因为需要整合那些实现相同功能的平行代码的实现方式。 大多数开发者更喜欢「实现新功能」而不是「解读可能可复用的代码」,因此复制粘贴的代码往往会长时间存在。 而且在经验缺乏的团队中,可能没有有能力且有权威的代码维护者来删除那些重复的代码。 即便是资深开发者,要充分理解代码从而删除某些重复的代码,所需的努力也是非常巨大的。 如果没有 CTO 或工程负责人主动安排时间来减轻技术债,那么「自上而下的时间压力」就会成为新添加的复制粘贴代码,让这些代码永远无法整合到改善长期开发速度的库中的又一个原因。 由于 GitClear 只统计单次提交中的重复代码,2023 年测得的 11% 复制粘贴比例可能只是只是今年复制粘贴代码非常小的一部分。 总结 根据报告评估的两个关键数据点显示,2023 年代码质量出现了严重的下降。这种情况与大语言模型(LLM)的广泛应用,尤其是 AI 代码助手的流行有直接关联。 GitHub 与 Wakefield Research 在 2023 年的一项调查反映出开发者已经意识到代码质量的下降。 当被问及「在没有 AI 辅助的情况下,你认为应该评估哪些指标?」他们最关注的是「协作与沟通」,紧随其后的是「代码质量」。 而当问题变为「在使用 AI 辅助时,你认为应该评估哪些指标?」他们的答案发生了变化,其中「代码质量」跃升为最受关注的问题,「生产环境中的问题事件」也上升至第三位: 单个开发者的情况可能无法说明为何「代码质量」和「生产环境中的问题事件」在使用 AI 时显得更加重要,但报告的数据揭示了一个可能的原因: 当开发者被一波又一波看似合适、能短期内解决问题的建议所淹没时,他们很容易不断增加代码量,却忽视了代码的优化和复用。 ——如果按一下 Tab 键就能解决当前的问题,为什么要费心思管以后的事情? AI 助手和 Copilot 将如何重塑开发者的角色?随着 AI 技术的广泛应用,毫无疑问,我们已经进入了一个代码增长速度空前的新时代。 那么,2024 年的问题可能是:谁来收拾事后的烂摊子? 网友讨论 面对 AI 带来的「全球代码质量下行」,网友也是深有体会: 谴责型:「我在两个月后取消了订阅(Copilot),因为我花了太多精力去修复所有代码错误。而且在处理任何复杂的事情或与 SQL 有关的事情时,它基本上是无用的(即使我提前加载了整个模式)。」 大佬型:「写下所有东西其实要花的功夫少得多,因为我知道自己想写什么,而且修正自己的错误比修正机器人的错误更容易」。 悲天悯人型:「我为那些将被这种垃圾彻底击垮的初学者而哭泣。」 中立型:「Copilot 能做的事让我很吃惊,但确实不能说生成的代码很好。生成的代码肯定得改,但是确实能帮你省不少时间」。 参考资料: 转自公众号新智元 该文章在 2024/2/2 8:54:30 编辑过 |
关键字查询
相关文章
正在查询... |