分享好友 最新动态首页 最新动态分类 切换频道
GitHub谎报了Copilot的统计数据!两年了,我们还是没办法证明AI编程助手能提高代码质量
2024-12-26 23:43

转自:InfoQ - 核子可乐、Tina

“如果没有 AI 就写不出好代码,那你可能压根就没资格搞开发。”

一些人认为生成式 AI 的第一个杀手级应用场景已经出现了,那就是 AI 编程工具。无论是 Curosr 还是 GitHub Copilot,都在商业化上取得了成功。有机构估计,到 2024 年 11 月,Cursor 的年经常性收入(ARR)已经达到 6500 万美元。而 GitHub Copilot 的数据更漂亮,根据今年 7 月份从微软财报电话会议来看,GitHub Copilot ARR 已经超过 3 亿美元,占 GitHub 今年整体增长的 40%。

微软一直在不遗余力地推广 GitHub Copilot。GitHub 称人工智能从根本上改变了软件开发,Copilot 已经帮助开发人员将编码速度提高了 55%。其首席执行官 Thomas Dohmke 还曾放话说“不久后 80% 的代码将由 Copilot 编写。”

但问题仍然存在:使用 GitHub Copilot 编写的代码质量客观上是更好还是更差?

今年初,GitClear 收集并分析了 2020 年 1 月至 2023 年 12 月期间编写的 1.53 亿行更改的代码,经分析后发表报告称,GitHub Copilot 的参与反而降低了代码质量。这份报告流传甚广,争议也不小,其结论肯定不是他们愿意看到的。

GitHub 显然希望支持“GitHub Copilot 能提高代码质量”的观点。今年 11 月,GitHub 自己进行了一项研究,称其具有“科学意义”。在这项研究中,他们声称,使用 Copilot AI 模型编写的代码在功能性、可读性、可靠性、可维护性和简洁性等方面“显著提升”。

不幸的是,这一研究过程和结果遭到软件开发人员的强烈质疑。博主 ThePrimeTime 直呼 “Github 谎报了 Copilot 的统计数据”,而另一位来自罗马尼亚的 Dan Cîmpianu 则专门为此发表博文,抨击 GitHub Copilot 关于代码质量言论中的统计数据不够严谨。

GitHub 拒绝对此事以及业界的批评意见发表置评。

1“我们震惊于微软对自家工具效果的研究居然如此轻率”

GitHub 这份研究表明,使用 Copilot 后开发人员:

  • 在顺利通过研究中所有十项单元测试的几率提升了 56%(p=0.04);

  • 使用 GitHub Copilot 时,每发生一个错误所间隔的代码行数平均增长 13.6%(p=0.002);

  • 所编写代码的可读性、可靠性、可维护性和简洁性提高了 1% 到 3%(分别为 p=0.003、p=0.01、p=0.041 和 p=0.002);

  • 代码获得审核通过的几率提高了 5%(p=0.014)。

研究的第一阶段面向 243 名至少拥有五年 Python 编程经验的开发人员,他们被随机分配使用 GitHub Copilot(104 人)或不使用 GitHub Copilot(98 人)——最终只有 202 位开发人员提交了有效调查结果。

两组均尝试创建一个 Web 服务器来处理某虚构餐厅的评论功能,且须接受十项单元测试的检验。之后,每份提交内容都由至少十位参与者审查——但整个调查过程的实际审查次数只有 1293 次,而非 202 份结果的十倍 2020 次。

这个样本大小也是绝了,GitHub 自诩为“10 亿开发者的家”,但在研究其大力宣传的产品之一时,却仅仅选择了 243 名开发者进行研究。

这些开发者分为两组,一半使用 Copilot,另一半作为对照组。实际上参与者共有 243 人,其中 121 人(是“一半加一人”?)使用了 Copilot,另外 121 人没有使用。在这两组中,分别只有 104 人和 98 人提交了有效的结果。较真一点的话,104 比 98 仅多出 6%,这 算是显著差异吗?

那么他们到底测试了什么呢?

简而言之就是:

所有参与者都被要求完成一项编码任务,为 Web 服务器编写 API 端点。

Cîmpianu 认为从任务的选择来看,这是一个有偏见的实验,因为编写基本的增删改查(CRUD)应用程序正是网络上绝大多数教程的主要内容,是开发中最无聊、最重复、最没有灵感、认知上最不受挑战的方面之一,因此肯定会在相关代码被包含在模型使用的训练数据当中。

在他看来,最好选择其他更为复杂的选题,比如涉及大型 SQL 查询、正则表达式、Shell 脚本部署的多样化任务,而不仅仅是定义一些 REST 接口和 Python 中的类型提示。

请注意,这些图表中的百分比加起来不等于 100%,因为计算是由大模型完成的。

而且 GitHub 没有充分解释图表内容,图表显示在使用 Copilot 的开发人员中,有 60.8% 通过了全部十项单元测试;而不使用 Copilot 的开发者中,只有 39.2% 通过了所有测试。

根据该公司提供的开发者总数,意味着全部使用 Copilot 的 104 名开发人员中有 63 人通过,不使用 Copilot 的 98 名开发者中有约 38 名通过。但 GitHub 随后发帖指出,“在研究的第一阶段,我们通过十项单元测试对 25 名随机分配开发者编写的匿名提交代码进行盲审,其中同时包含在使用及未使用 GitHub Copilot 条件下编写的代码。”

Cîmpianu 发现这里明显存在矛盾。一种可能的解释是 GitHub 在表达上不够严谨,实际是从成功通过所有测试的 101 名开发者中,随机挑选出 25 名进行代码审查。

更重要的是,Cîmpianu 对另一项结论同样表达了异议,即使用 Copilot 的开发者产生的代码错误明显更少。GitHub 方面提到,“使用 GitHub Copilot 每写 18.2 行代码会出现一次代码错误,而不使用的测试组每写 16.0 行代码就会出现一次错误。这意味着使用 GitHub Copilot 的开发者在每次出错所间隔的代码量增长了 13.6%(p=0.002)。”

Cîmpianu 认为这里的 13.6% 是一种误导性的统计数据,因为其对应的其实只有两行代码。虽然有人认为随着时间推移,这个数字还会逐渐增加,但他指出这里所谓的错误减少并不是真正提高代码质量,更多只是编程风格问题或者 linter 警告。

GitHub 自己也在代码错误的定义部分承认,“其中不包括会阻止代码按预期运行的功能性错误,而仅代表不良编程实践方面的错误。”

也就是说 GitHub 所指的错误不包括实际的错误或实际的语法错误,它们包括:

命名不一致、标识符不明确、行过长、空格过多、缺少文档、代码重复、分支或循环深度过多、功能分离不足以及复杂性可变。

Cîmpianu 指出,实际上,“ 不是错误,而是 linter 警告”。

接下来,GitHub 展示了 Copilot 在平均水平上生成的代码质量提升了约 3%(别忘了,他们强调这是“具有统计学意义”的结果),具体如下图所示:

Cîmpianu 对于 GitHub 宣称的,Coiplot 辅助编写的代码在可读性、可靠性、可维护性及简洁性方面提高 1% 到 3% 的说法同样感到不满。

代码风格和代码审查的指标往往非常主观,人们曾因 eslint 规则、缩进风格、大括号位置以及其他“细枝末节”而展开过激烈争论。我们必须承认,人类的直觉是评估这些测试类别的唯一指标。但调查报告也没有提供关于代码评估方式的具体解释。

Cîmpianu 进一步抨击 GitHub 选取参与代码测试的同一批开发人员进行代码评估,认为应当选择公正的第三方评审员。

“好在他们至少还选择了通过所有单元测试的开发人员来审查代码。但请注意,各位朋友,千万别被随机挑选 25 位开发者、3% 的改进指标蒙蔽了双眼。这帮所谓开发者唯一的资历(至少在研究中提到的资历)就只是工作过五年并且通过了十项单元测试。”

Cîmpianu 对此表达了不满。“我对 GitHub 为提升 Copilot 的营销可信度所做的这极少的努力感到非常失望,更让人不解的是,他们竟然认为通过一个人为设计的实验,在几乎完全主观的指标上最多提升 5% 就值得夸耀。即便我勉强承认生产力整体提升了 5%,这看起来也完全不是为了开发者,而更像是一种迎合拥有预算决策权的高管们的 营销策略。”

2“不要雇用鹦鹉来做工程师的工作”

Cîmpianu 指出,GitClear 于 2023 年底发表的一份报告曾提到,GitHub Copilot 的参与反而降低了代码质量。

这份报告指出,使用 AI 助手进行编程未必有助于提高产品代码质量,像 GitHub Copilot 这样的 AI 工具实际上只会给出添加代码的建议,却无法提供更新或者删除代码的建议。这会引发严重的代码冗余问题。此外,他们还注意到“流失代码”急剧增加,也就是需要进行频繁修改的代码,这往往代表代码质量堪忧。

根据 GitClear 的一项最新研究,代码质量有下降趋势,且存在代码更新(即添加代码后不久即被删除)等问题,重复代码的比例也更高。此项研究重点关注对于代码的添加、删除、更新以及复制 / 粘贴或移动,并排除了 GItClear 定义的“噪音”内容——即在多个分支中重新提交的相同代码、空白行及其他不重要的行。以下是 GitClear 分析师们得出的结论:

GitHub Copilot 的发布成为标志性事件。在不到两年时间里,这款基于 AI 的编程助手已经从“原型”成长为开发工作的“基石”,在数十万家企业中得到几百万开发人员的使用。这种前所未有的增长,意味着代码编写的全新时代就此拉开帷幕。

GitHub 发表了大量关于 AI 对软件开发的助益及影响的深入研究。他们提出的一项重要结论是,开发人员使用 Copilot 时的代码编写“速度提高了 55%”。但大语言模型生成的代码也引发了以下问题:

代码的质量与可维护性,与纯人类编写的代码相比有何变化?AI 生成的代码更接近资深开发人员简洁精致的贡献,还是更接近临时外包商的杂乱产出?

为了回答这个问题,GitClear 分析了 2020 年 1 月至 2023 年 12 月期间编写的约 1.53 亿行修改后代码。这是当前已知的最大高度结构化代码变更数据库,用于评估代码质量的差异。我们从中看到了令人不安的可维护性劣化。

预计整个 2024 年,代码轮换(即在创建后不到两周之内,即被修改或更新的代码行所占的百分比)较 AI 出现之前的 2021 年参考值翻了一番。我们还注意到,“添加代码”和“复制 / 粘贴代码”的百分比相较于“代码更新、删除和移动”有所增加。由此看来,AI 生成的代码更类似于随机贡献,很可能破坏相关代码仓库的严密性。

最后,我们向那些希望保持代码质量的管理人员提出建议,呼吁尽量对 AI 生成代码持谨慎态度。

根据 GitClear 公司创始人 Bill Harding 的介绍,最重要的趋势在于 AI 代码助手更擅长添加代码,而这很可能“引发技术债”。Harding 强调称,“如果您正在独立工作或者想要解决特定新问题,那么快速添加代码的作法当然可取。不过匆忙添加的代码对于日后负责维护的团队则有害无益。”换句话说,代码量并不是越多越好,而且这种危险的趋势很可能成为未来组织难以摆脱的沉重负担。

GitClear 在研究中强调了代码的质量,而非数量,并观察到 AI 更倾向于给出“添加代码的建议,但却从不提供代码更新、移动或者删除的建议”。研究人员还发现,代码助手生成的其实是最可能被接受的代码、而非最好的代码。但这也情有可原,毕竟高度简洁优雅的代码往往可读性较差。根据这份研究报告,对代码质量的衡量往往非常困难。

但研究人员还是发现了一些重要趋势,例如代码的添加、删除、更新以及复制 / 粘贴总量达到了历史最高水平,但代码置换的情况则有所减少。他们还注意到代码更新率有所提高,如今已达 7.1%,但 2020 年时仅为 3.3%。由于开发人员重构代码时往往涉及代码移动,因此通常会将移动作为重构的指标,而重构是指改进代码的设计和结构、但不改变其行为的作法。种种趋势令研究人员感到担忧。

产生这些趋势的原因尚待猜测,但研究人员认为,这与编程 AI 助手的使用量增加有关。他们对复制 / 粘贴代码引发的影响提出了严厉批评,称“代码长期可维护性的劣化将是一场可怕的瘟疫”。

至于这个报告给我们的意义,Reddit 网友对此评论道:“不要雇用鹦鹉来做工程师的工作。”

不少分析师和批评人士似乎也都认同 GitClear 创始人的观点,即 AI 编程助手可能导致公司技术债的急剧增加。麻省理工学院教授 Armando Solar-Lezama 在去年发表的 AI 编程工具讨论文章中就提到,“AI 就像一张全新的信用卡,会以我们前所未见的方式积累技术债。”另一方面,AI 辅助编程的兴起也可能对软件工程师的薪酬产生影响。

Harding 指出,“如果工程技术经理仍然根据修改后的代码行数做出薪酬定位,那么随着这项指标同 AI 技术的结合,一定会出现令人痛心的骗工骗酬行为。”他还强调,很难讲 AI 工具带给软件开发的是否是净收益。虽然使用 AI 能够获取个性化代码答案,但“阅读糟糕的遗留代码也很可能击溃继任开发者们的脆弱神经”。

此外,GitClear 并没有过多讨论如何解决其发现的问题,只提出了一些后续研究打算关注的方向。报告只建议工程技术经理警惕 AI 生成结果,并考虑它们对于产品后续维护造成的影响。总而言之,编程 AI 助手不会消失,只会像其他新工具一样经历漫长的改进期,开发人员也将学会如何更好地加以运用。

某种程度上讲,GitHub 这项研究并没有让使用 Copilot 开发者们松口气。Cîmpianu 也指出,开发者“如果没有 AI 就写不出好代码,那你可能压根就没资格搞开发。”不管 AI 厂商声称提供了多么“先进”的技术,都无法替代个人经验,也无法取代你对自己技术的骄傲和热爱。

参考链接:

https://github.blog/news-insights/research/does-github-copilot-improve-code-quality-heres-what-the-data-says/

https://jadarma.github.io/blog/posts/2024/11/does-github-copilot-improve-code-quality-heres-how-we-lie-with-statistics/

https://www.theregister.com/2024/12/03/github_copilot_code_quality_claims/

https://www.youtube.com/watch?v=IxYN7DKefmI&t=2183s

最新文章
网站制作费用多少合适?小白必看的超实用费用指南
  “做网站会不会很贵啊?”“一万块够不够?几百块行不行?”关于网站制作费用,这些问题估计在不少新手的脑海里盘旋过吧!实际上,网站制作的成本是一个综合考量内容、设计和功能的过程,没有标准答案,但绝对有规律可循。本文结合真实案例
苹果手机助手有哪些?苹果手机用什么助手最好?
  你知道苹果手机助手有哪些?苹果手机用什么助手最好?iOS手机助手哪个好用吗?  现在的苹果手机助手越来越强大,海量游戏应用和软件可随意让用户免费下载。大到几十上百元,小到付费测试版,以及还没有正式上线的所有应用,只需一键
谷歌深夜发布Gemini 2.0,人工智能(159819)、软件30ETF(562930)备受关注
  消息面上,12月11日晚,刚刚发布量子芯片的谷歌,又投下一枚重磅炸弹,正式发布其最新版大模型Gemini 2.0系列,谷歌表示这是他们迄今为止最强大的人工智能模型,“专为智能体时代设计”,并同时介绍了多个智能体应用(AI Agent)。  
航海王鱼人岛篇特别编辑版
影片名称:航海王鱼人岛篇特别编辑版影片别名:影片类型:动漫影片导演:尾田荣一郎影片演员:田中真弓 , 冈村明美 , 中井和哉 , 山口胜平 , 平田广明 , 大谷育江 , 山口由里子 , 矢尾一树 , 长岛雄一 , 宝龟克寿年份地区:2024/日本更新时
规则引擎 drools_Java常用的规则引擎,让你变动的代码更加容易维护
在本文中,我们将介绍Java中一些最受欢迎的规则引擎。规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入
草根站长的源动力-国内站长网站缩影
随着互联网的发展,国内个人网站也迅速雨后春笋般迅速发展。犹如80年代的私营企业发展个人网站的故事也频繁登上各媒体的版面 非官方的统计:目前国内已经有草根站长300万个。已经开始盈利的个人网站 近5万个个人网站的总收入已经超过3亿 这
背包有个十字架的牌子 十大奢侈品包包排名及图标志
背包有个十字架的牌子,是一个备受关注的奢侈品包包品牌。随着时尚产业的发展和消费观念的改变,越来越多的消费者对于高品质、独特设计的包包有着强烈的需求。在这样的市场环境下,背包有个十字架的牌子以其独特的设计和卓越的品质迅速崛起
港股开盘:恒生指数开盘跌0.59%,恒生科指跌0.61%,美团跌近2%
金融界12月17日消息 港股恒生指数开盘跌0.59%,报19678.03点,恒生科技指数跌0.61%,报4387.62点,国企指数跌0.53%,报7095.14点,红筹指数跌0.1%,报3691.93点。大型科技股中,阿里巴巴-W跌0.53%,腾讯控股跌0.89%,京东集团-SW跌1.39%,
玩转serv00虚拟主机(一):零成本搭建wordpress个人博客&入门
不少童鞋在搭建博客、alist、图床等各类web服务的时候苦于云的成本望而却步,但其实搭建web服务也可以用虚拟主机,不少厂商都有免费的虚拟主机,但对于很多童鞋可能是第一次听说虚拟主机,这里就开一个新的系列,玩转serv00家的免费虚拟主
考研民商法学专业容易上岸的大学怎么选择
在准备考研的过程中,选择合适的学校是至关重要的一步。尤其是对于民商法学专业的考生来说,如何找到一所适合自己的学校更是需要认真考虑的事情。本文将为大家提供一份考研选择民商法学学校指南,帮助你在众多院校中做出明智的决定。首先,
相关文章
推荐文章
发表评论
0评