写点什么

代码屎山噩梦加速来袭,都是 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:006710

评论 1 条评论

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