写点什么

代码屎山噩梦加速来袭,都是 AI 生成代码的锅?

  • 2024-01-25
    北京
  • 本文字数:2259 字

    阅读完需:约 7 分钟

大小:1.06M时长:06:09
代码屎山噩梦加速来袭,都是AI生成代码的锅?

“周边很多程度员一直在使用,都是用上就离不开了!”知乎上,在“大家现在使用哪些 AI 辅助编程工具?节省了多少工作量?”话题下,答主“以默”说道。

 

按照“以默”了解的情况,AI 辅助编程工具估计至少能帮程序员减少 30%的工作量。对于工具,他表示“当然首选 GPT,也可能是唯一答案!国产在这方面差距很大。”“综合能力水平: 4.0>3.5>国产大模型。模型能力越强,越好用!”

 

现在用 AI 辅助编程已经是很多程序员的选择,但随着 AI 软件开发迅速普及,代码质量又会随之受到怎样的影响?⻓期代码研究员 Adam Tornhill 就曾表示担忧,AI 辅助编程的主要挑战在于,它非常容易生成大量本来就不应该编写的代码。

 

根据最新研究,结果确实令人忧心。除了代码返工(即代码在添加后不久即遭删除)以外,重复代码比例升高等问题愈发严重。

主要让“添加代码”

 

自 2021 年 6 月推出 beta 版以来,GitHub Copilot 已经掀起 AI 编码的一波流域。据公司 CEO Thomas Dohmke 介绍,该软件目前拥有超 100 万付费订阅开发者,已经让开发任务的速度提高了 55%。而且在启用 Copilot 的文件中,有 46%的代码量是由 AI 生成。

 

根据来自开发者分析公司 GitClear 的研究,基于从 1.5 亿行已更改代码中收集到的数据,调查发现其中三分之二来自以匿名方式共享数据的私营企业,三分之一则来自谷歌、Facebook 及微软等技术大厂的开源项目。

 

这项研究着眼于经过添加、更新、删除、复制及移动的代码,并排除掉 GitClear 预先定义的“噪音”,例如被提交至多个分支的相同代码、空行及其他无意义的代码行。

 

但 GitClear 的研究将关注重点放在代码质量、而非数量上,并观察到 AI 助手主要是在提供“代码添加建议,但很少涉及代码的更新、移动或删除建议”。

 

研究人员还指出,“根据奖励设计,代码建议算法更倾向于提供最可能被采纳的建议”。尽管看似有理,但这明显忽略了代码简洁、易读等特性的重要意义。

GitClear 分析得出的代码更改趋势

 

对代码质量做精准衡量并不容易。研究人员也的确发现了一些变化趋势,表明代码的添加、删除、更新和复制/粘贴量大大提高,但代码移动比例却有所下降。他们还发现代码返工率大幅增加,从 2020 年的 3.3%提升到目前的 7.1%。

 

一般来讲,代码移动是开发者进行代码重构的关键指标。具体来讲,就是在改进代码设计和结构的同时,确保不改变行为。

 

研究人员初步猜测这种趋势可能与 AI 编码技术的日益普及相关,但真实原因仍有待验证。他们还严厉批评了大量复制/粘贴代码的负面影响,称“这种对 AI 生成代码的无脑使用,将对代码的长期可维护性产生灾难性的影响”。

 

但过度使用复制/粘贴并不算是新问题。开发人员之所以这样做,很可能是因为无脑照搬比调整和重用现有代码更快、更省事,或者同一项目下多位开发者之间沟通不畅,抑或是从开发示例/编码问答网站上“抄袭”了太多内容。

 

GitClear 研究人员并没有具体讨论应如何解决调查中发现的这些问题,而是转向了“后续研究问题”。但他们也建议工程部门领导者应当“监督提交数据,并考虑其对未来产品维护造成的影响”。

 

这次研究可能在一定程度上让那些担心被 AI 工具取代的开发者们感到放心。代码分析公司 CodeScene 最近开展的一项 AI 代码重构研究也得出结论,“在编码环境中,AI 还远无法取代人类;当前的 AI 太容易出错,且完全不具备安全修改现有代码的水平。”

代码质量,谁更应该关注

 

可以肯定的是,AI 编码助手绝不会就此消失,反而是像一切新工具那样不断改进,并由开发者学习优化思路、改善使用效果。

 

其实,现在开发者们也已经意识到了代码质量的问题。在 GitHub 与 Wakefield Research 的调查报告中,当被调查的程序员被问到,“在积极使⽤⼈⼯智能时,应该根据哪些指标进⾏评估?”“代码质量”成为最关⼼的问题,

 


但另一方面,更应该关注代码质量问题的其实是公司领导层。

 

“我公司的领导曾经就动过用代码行数衡量每个人的工作量这种想法。 研发人员每周代码量至少在 500 行以上,一个月必须在 2000 行以上。 甚至他还搞来了第三方的测算软件,输入 git 账号来计算你的代码量。然后在一次技术会议上,全体组员忍无可忍的怼了技术总监。“知乎上有网友分享到。

 

一般公司考核代码量相对简单直观,但是代码质量考核就不那么容易了:满足用户需求,

合理的进度、成本、功能关系,具备扩展性和灵活性等都不是那么可量化的指标。

 

关于代码质量对业务影响的研究表明,一般来说,由于技术债务和糟糕的代码,公司平均浪费了开发人员 23%~ 42%的时间。但似乎这还不够令人感到担忧,关于软件开发人员由于技术债务而导致的生产力损失的研究还发现,开发人员经常“被迫”引入新的技术债务,因为公司一直在用代码质量换取新功能等短期收益。

 

现在企业为“降本增效”引入 AI 辅助工具是可以理解的,但需要注意扬长避短、合理使用。根据 Alphacodium 的说法,大模型生成单个冗长函数的结果很差,代码通常包含错误或逻辑错误,大模型也往往在需要思考、推理并做出严格、重要决策的代码任务中遇到困难。

 

代码生成与其他对话不同,它需要匹配目标语言的精确语法、识别最佳路径和边缘情况、关注问题规范中的众多小细节,并解决其他特定于代码的问题和要求。因此,在自然语言生成中许多优化和技巧可能对代码任务无效。

 

如何让 AI 辅助编程更好地帮助开发者,也需要各方努力。

 

参考链接:

 

https://devclass.com/2024/01/24/ai-assistance-is-leading-to-lower-code-quality-claim-researchers/

https://www.zhihu.com/question/640036429

https://zhuanlan.zhihu.com/p/626643788

https://github.blog/2023-06-13-survey-reveals-ais-impact-on-the-developer-experience/

2024-01-25 15:006787

评论 1 条评论

发布
用户头像
AI辅助编程肯定是进步,但仅仅是增加代码只会恶化系统可理解性。系统结构的搭建和具体功能模块的编写应该使用不同的技术,不幸的是,现在并没有区分。系统结构搭建应该用流程图等可视化工具。我在这篇文章里面做了解释:https://xie.infoq.cn/article/704602cda30fc8f608ccaf494
2024-01-28 13:35 · 上海
回复
没有更多了
发现更多内容

为什么我们的微服务中需要网关?

做梦都在改BUG

Java 微服务 网关

c++11 map遍历 条件匹配,else

linux大本营

map C++11

软件测试/测试开发丨测试工具篇(附答案)

测试人

面试 软件测试 自动化测试 测试开发

Gmail 推出与聊天、空间和会议应用程序集成的新设计

外贸IT程序客

私有云裸机物理服务器角色规划

穿过生命散发芬芳

私有云 三周年连更

c++11 获取当前机器唯一编码

linux大本营

C++

c++ 使用Glog 生成多个具有相同等级的日志文件

linux大本营

c++ 日志 glog

RPM常用命令以及组合使用场景

天翼云开发者社区

HarmonyOS 3.1系统隐藏的这几个小细节 你都发现了么

最新动态

从领先实践看港口行业资产管理数智化变革

用友BIP

linux unlikely函数

linux大本营

Linux unlikely函数

c++11 分边在两个map中执行相同操作,代码如何优化

linux大本营

c++ map

Linux查看端口是哪个进程起的

linux大本营

Linux 进程

初始化列表的形式完成类的成员变量的初始化,防止类型收窄,用main 函数举例说明

linux大本营

c++ namespace 构造函数

基于Linux系统的PXE搭建方法

天翼云开发者社区

c++ 使用Glog 生成多个具有相同等级的日志文件

linux大本营

c++ 日志 glog

织密“安全云网”,天翼云探索构建分布式多场景云服务稳定性保障体系!

天翼云开发者社区

linux 自定义段 c

linux大本营

Linux C语言 系统调用

window c++ select 参数列表介绍

linux大本营

TCP socket select I/O 多路复用

关于C语言的系统相关的桌面程序编程书籍推荐吗

linux大本营

C语言

hyperscan hs_scratch_t 结构

linux大本营

正则表达式 C语言 存储 结构体 hyperscan

git 如何在本地有更改的情况下,使用命令获取远端最新代码

linux大本营

git

创新实力强劲!天翼云荣获中国专利奖

天翼云开发者社区

河北电信“天翼云开放实验室”在雄安揭牌,加速算力资源落地!

天翼云开发者社区

websocket如何走网关

linux大本营

TCP websocket

软件测试/测试开发丨常见面试题与流程篇(附答案)

测试人

软件测试 面试题 自动化测试 测试开发

http 多交易事务

linux大本营

HTTP

C++中怎么判断Qtableview一行满了自动换行

linux大本营

c++

用c++lamda函数计算阶乘

linux大本营

c++

聊点技术 | 架构瘦身,让Bonree ONE跑得更轻

博睿数据

智能运维 博睿数据 一体化智能可观测 ONE有引力

恒拓高科 | 惊艳亮相北京军博会,首次参展获圆满成功!

BeeWorks

代码屎山噩梦加速来袭,都是AI生成代码的锅?_AI&大模型_核子可乐_InfoQ精选文章