微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 AI智能编程助手正在改变软件开发:奈良先端科学技术大学首次揭示代码生成工具在开源项目中的真实表现

AI智能编程助手正在改变软件开发:奈良先端科学技术大学首次揭示代码生成工具在开源项目中的真实表现

2025-10-14 22:49
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2025-10-14 22:49 科技行者

在软件开发的世界里,一场悄无声息的革命正在发生。想象一下,有一个非常聪明的编程助手,它不仅能够理解你想要什么功能,还能直接为你写代码、修改bug、甚至自动提交到GitHub上供其他开发者审核。这听起来像科幻小说,但实际上已经成为现实。

这项由日本奈良先端科学技术大学的渡边未来、柏川雄太郎、布里塔尼·里德、饭田元等研究者,以及加拿大皇后大学的李浩、艾哈迈德·哈桑共同完成的开创性研究,于2025年9月发表在软件工程领域的顶级会议上。研究团队首次深入分析了567个由Claude Code(一款AI编程工具)在157个不同开源项目中创建的代码贡献,为我们揭开了AI智能编程在真实世界中的表现。

研究团队发现了一个令人振奋的现象:这些由AI生成的代码贡献中,有83.8%最终被项目维护者接受并合并到主代码库中。这就好比一个新来的程序员,十次提交的代码中有八次都能通过老员工的审核,这个成功率已经相当不错了。更有趣的是,在被接受的代码中,有54.9%完全不需要修改就能直接使用,这意味着AI已经能够产出相当高质量的代码。

然而,这个故事还有更深层的内容。研究团队像侦探一样仔细分析了每一个代码贡献的细节,从AI最擅长处理什么类型的任务,到人类开发者需要对AI的代码做哪些修改,再到有些代码为什么会被拒绝。这些发现不仅让我们了解了当前AI编程工具的真实能力,也为未来的发展指明了方向。

一、AI编程助手最喜欢做什么:从重构到测试的全方位表现

当我们深入观察AI编程助手Claude Code在开源项目中的表现时,就像观察一个新员工的工作习惯一样有趣。研究团队发现,AI和人类程序员在处理不同类型任务时确实表现出了明显的偏好差异。

首先让人惊讶的是,AI特别热衷于做那些让人类程序员感到枯燥的重复性工作。比如代码重构,这就像重新整理一个杂乱的房间,让所有东西都摆放得更整齐,但功能完全不变。AI在这方面的表现远超人类,24.9%的AI贡献都涉及重构,而人类只有14.9%。这很好理解,因为重构往往遵循一些固定的规则和模式,而AI恰恰擅长识别和应用这些模式。

更令人印象深刻的是AI在测试方面的表现。测试就像给软件做体检,确保各个功能都能正常工作。18.8%的AI贡献都与测试相关,而人类只有4.5%。有一个特别精彩的例子:一个AI助手为某个项目系统性地添加了测试,将代码覆盖率从70%提升到94%。它不仅增加了测试数量,还针对之前完全没有测试的代码路径、核心方法的验证、操作逻辑检查,以及SQL生成中的错误处理等关键场景都添加了相应的测试。这就像一个非常细心的质检员,不放过任何一个可能出问题的角落。

AI还特别擅长处理文档工作。22.1%的AI贡献涉及文档更新,相比之下人类只有14.0%。这包括更新用户手册、修正格式错误、改进API文档说明等。有个生动的例子是,一个AI为项目文档添加了实用的代码示例,纠正了格式不一致的问题,并且优化了配置描述,让新用户更容易上手。这就像一个贴心的助手,总是记得把说明书写得清楚明白。

在代码优化方面,AI也表现出色。结合代码风格改进和性能优化,AI的贡献占比达到12.7%,而人类只有3.2%。AI特别善于发现那些微小但重要的优化机会,比如消除数据库查询中的通配符选择来提升性能,或者解决代码检查工具发现的命名规范问题。这些改进看似微不足道,但积累起来能显著提升代码质量。

不过,AI也有自己的局限性。在项目维护和配置任务方面,AI和人类表现相当,分别占20.7%和21.2%。但这些任务往往需要对项目的整体架构和长期规划有深入理解,比如依赖包的升级策略、版本发布流程等。虽然AI能够处理这些任务,但通常需要更多的人工指导。

特别有趣的是,AI创建的代码贡献经常是"一箭多雕"的。40%的AI贡献同时解决多个问题,而人类只有12.2%。最常见的组合包括功能开发加测试(9.0%)、重构加测试(7.7%)、以及bug修复加测试(7.7%)。这显示了AI的一个优势:它能够系统性地思考,在解决主要问题的同时顺带处理相关的次要问题。就像一个高效的管家,一次出门就能把几个不同的事情都办好。

在代码规模方面,AI通常比人类更"大手笔"。AI贡献的代码平均增加48行,而人类平均增加24行。同时,AI写的代码描述也更详细,平均355个单词,而人类只有56个单词。这可能是因为AI会详细记录自己的思考过程和所做的改动,这对代码审核者来说是很有帮助的信息。

这些发现揭示了一个重要趋势:AI正在成为处理重复性、规则性工作的得力助手,让人类程序员能够将更多精力投入到需要创造性思维和深度理解的任务上。同时,AI的系统性思维也为软件开发带来了新的可能性。

二、成功率超八成但仍需人工把关:AI代码的接受度分析

当我们把AI生成的代码比作学生的作业时,结果显示这位AI学生的表现相当不错,但还不是班里的尖子生。研究团队发现,83.8%的AI代码贡献最终被接受,这个成绩虽然不错,但确实比人类程序员的91.0%接受率要低一些。这就像一个勤奋的实习生,大部分工作都能完成得很好,但偶尔还是需要老员工的指导和修正。

更有趣的是代码审核的时间。AI代码的平均审核时间是1.23小时,而人类代码是1.04小时,差异并不大。这说明审核者对AI代码并没有特别的偏见或额外的谨慎,他们基本上用同样的标准和流程来评估这些代码。

那么,那些被拒绝的AI代码都出了什么问题呢?研究团队像法医一样仔细分析了每一个被拒绝的案例,发现了一些非常有趣的模式。

最常见的拒绝原因并不是代码质量问题,而是项目演进的自然结果。12.1%的拒绝是因为其他开发者或团队选择了不同的解决方案。就像你精心准备了一道菜,但发现别人已经做好了另一道同样美味的菜。有个典型例子是,一个AI提交的功能改进最终被关闭,项目维护者说:"我们可能会回到这个方案,但现在我们用不同的方式解决了根本问题。"

第二大原因是AI有时候过于"勤奋",创建了一些仅用于验证目的的代码提交。5.5%的拒绝是因为这些代码只是为了触发自动化检查(比如持续集成流程),并不是真正要合并的功能。这就像有人为了测试门铃是否正常工作而按了很多次,但实际上并不想进门。

代码规模过大也是一个重要问题,占拒绝原因的3.3%。一个被拒绝的大型代码贡献收到了这样的评论:"关闭这个,支持更小、更专注的PR,让审核更可管理。"这强调了协作开发中的一个重要原则:即使功能正确,如果改动太大,也会给审核带来困难。

项目演进导致的过时问题同样占3.3%。这就像你为修理一台老电视准备了零件,但发现家里已经换了新电视。随着项目需求的变化或新功能的实现,一些AI的贡献可能在提交时就已经不再需要了。

技术问题相对较少,只占4.4%的拒绝案例。这些问题主要包括设计方案不够优化(2.2%)、实现过于复杂(1.1%)、以及引入bug或破坏兼容性(1.1%)。比如有个AI的代码被拒绝,是因为它绕过了项目特定的序列化机制,违反了架构原则。另一个例子是,审核者发现现有的主题已经能实现同样功能,AI的实现反而增加了不必要的复杂性。

战略性不匹配的问题占2.2%,包括1.1%是因为没有增加价值,另外1.1%是因为不符合社区兴趣。这类拒绝往往涉及"做什么"而不是"怎么做"的问题。比如一个AI的贡献虽然技术上正确,但被维护者判断为没有解决真正的性能瓶颈。

贡献者不活跃导致的拒绝占2.2%。这些AI贡献被提交后,当审核者提出修改建议时,没有人跟进处理,最终被自动关闭。这反映了AI工具使用中的一个现实问题:虽然AI能生成代码,但还需要人类来处理后续的交互和修改。

特别值得注意的是,有1.1%的拒绝明确是因为对AI生成代码缺乏信心。一个贡献者甚至主动关闭了自己的AI代码提交,明确表示担心Claude输出的准确性。这反映了一个重要的社会技术障碍:即使AI技术在进步,人们对其可靠性的信任仍需要时间建立。

最令人困惑的是,63.7%的被拒绝AI代码没有收到任何解释性评论或讨论就被关闭了。这种"沉默的拒绝"让人无法了解真正的拒绝原因,也反映了在评估AI生成贡献时存在的透明度挑战。

这些发现告诉我们,虽然AI在代码生成方面已经相当成熟,但在项目协作的社会性方面还有改进空间。大多数拒绝并不是因为AI"不够聪明",而是因为它还不能完全理解项目的动态演进、团队的决策过程,以及开源社区的协作文化。

三、过半代码无需修改直接采用:AI代码的修订需求程度

当我们进一步观察那些被接受的AI代码时,发现了一个相当令人鼓舞的现象。就像评判一份初稿的质量一样,研究团队发现54.9%的AI代码可以"一稿过",也就是完全不需要任何修改就能直接使用。相比之下,人类程序员的"一稿过"率是58.5%,两者差距并不大。这意味着AI已经能够生产出相当高质量的可用代码。

对于那些需要修改的代码,情况同样令人惊喜。无论是AI代码还是人类代码,都通常需要大约2次修订提交才能最终完成。在修改工作量方面,统计分析显示AI代码和人类代码之间没有显著差异。这就像两个不同的厨师做菜,虽然风味可能略有不同,但都需要差不多的调味次数才能达到完美状态。

具体来看修改的内容,研究团队发现了一些有趣的模式。当需要修改时,额外变更的文件数量相对于原始提交增加了50%,这个比例在AI代码和人类代码中完全相同。不过在代码行数的变化上,人类代码的修改幅度稍大一些,平均增加121.1%,而AI代码增加94.3%。这可能反映了人类在修改时往往会进行更大范围的重组,而AI的修改相对更加精确和集中。

这种相似性其实透露了一个重要信息:一旦审核者决定接受一个代码贡献,无论它来自AI还是人类,后续的打磨工作量基本相当。这说明AI已经跨越了"能用"的门槛,达到了与人类程序员相当的基础质量水平。

更深层的含义是,这种等价性为AI工具的广泛应用提供了强有力的支持。如果AI能够生成与人类质量相当的初始代码,那么团队就可以将AI作为提高开发效率的有效工具,而不是需要额外投入大量修正成本的"麻烦制造者"。

从实际应用的角度来看,这些发现为开发团队提供了重要的决策依据。当团队考虑引入AI编程工具时,可以预期大约一半的AI生成代码可以直接使用,另一半需要的修改工作量与人类代码相当。这意味着AI能够显著减少初始编码的工作量,而不会在后期修改阶段造成额外负担。

研究还发现,AI代码修改的类型分布相当均匀,没有特别集中在某一类问题上。这表明AI在各个方面的能力都比较均衡,不存在明显的薄弱环节。当然,这也意味着在各个方面都还有改进的空间。

特别值得注意的是,在需要持续迭代的开发环境中,这种修改模式的相似性尤其重要。它表明AI可以很好地融入现有的代码审核和迭代流程,而不需要团队为AI代码建立特殊的处理流程。

这些发现也为AI工具的未来发展指明了方向。既然AI已经在基础质量上与人类相当,下一步的重点应该是提高"一稿过"的比例,减少需要修改的情况。同时,对于那些确实需要修改的代码,如何让AI更好地响应人类的反馈意见,也是一个值得深入探索的方向。

四、修订重点:bug修复占主导地位的四大改进方向

当AI代码需要修改时,人类审核者主要关注哪些方面呢?研究团队详细分析了214个需要修订的AI代码贡献,发现了一个清晰的优先级排序,就像医生诊断时会按症状的严重程度来处理一样。

bug修复毫无争议地占据了首位,45.1%的修订都与修复功能性错误相关。这就像房子的基础结构问题,必须优先处理。研究团队发现,AI生成的代码经常在错误处理方面过于乐观。有个典型例子是,一个并发错误传播的问题需要引入基于通道的通信机制,确保致命错误能够立即从工作进程中传递出来。另一个例子是将文件操作失败从警告升级为致命错误,因为审核者认识到某些失败条件应该停止执行,而不是在可能损坏的状态下继续运行。这些修改揭示了AI的一个持续性限制:它经常实施乐观的错误处理策略,无法很好地区分可恢复和不可恢复的失败情况。

文档更新紧随其后,占27.4%的修订。虽然AI有时会生成或更新代码注释,但经常无法保持所有相关文档的同步。有个生动的例子是,一个修订删除了安装文档中过时的可选依赖部分,这些内容应该在相关代码更改时一并删除。这种脱节意味着在实践中,人类审核者需要花费相当多的精力确保文档、README文件和代码注释准确反映AI的代码更改。

代码重构占25.7%的修订,这表明AI提交的初始代码虽然功能正确,但审核者经常需要重新组织以更好地符合项目架构、增强可维护性并减少技术债务。有个例子是,审核者将分散在多个入口点的冗余初始化逻辑整合到统一的服务中。在这个案例中,数据库迁移和文件同步的通用功能从独立组件中提取出来,移到共享模块中,改善了错误处理和日志记录的一致性。这表明虽然AI的初始提交功能正确,但审核者经常需要重构以更好地与项目架构对齐。

代码风格改进占22.1%的修订,主要涉及强制命名约定、纠正格式以及解决AI工具遗漏的静态分析警告。有个例子是,审核者处理了AI原始代码中存在的多个静态分析违规,包括未使用的导入、声明但从未引用的异常变量,以及不正确的导入排序。这些更改主要是装饰性的但对集成是必要的,表明当前的AI经常在项目特定的风格规则上表现不佳,需要人工干预来维护可读性和一致性。

项目管理任务占19.9%的修订,通常涉及AI忽略的项目级元数据,如版本升级或发布说明。比如一个修订包含了从"3.0.0-alpha01"到"3.0.0-alpha02"的简单但关键的版本升级,这是新发布所必需的步骤,但AI没有执行。这种模式表明AI能力中的特定差距:虽然它们成功修改应用代码,但经常无法将相应更改传播到项目级配置文件。因此,这些基本的管理任务落到人类审核者身上,以确保项目的版本控制和发布过程保持一致和准确。

功能增强占14.6%的修订,显示人类审核者在审核过程中识别出AI实现通常提供核心功能但遗漏高级特性或边缘情况。有个例子是,一个修订扩展了AI最初实现的基本PR审核API功能,增加了多行注释支持,包括行定位的新参数、参数组合的验证逻辑以及全面的测试覆盖。这种增强表明AI生成的实现经常提供核心功能,但遗漏了开发者在审核过程中识别出的高级特性或边缘情况。

构建配置调整占13.3%的修订。一个修订解决了静态分析工具与较新Go版本之间的兼容性问题。AI的初始实现没有考虑版本不兼容性,导致Go 1.24.1的构建失败。修订更新了静态分析工具版本,配置为运行减少的检查集,并修改构建过程以在静态分析失败时继续。这个临时解决方案允许构建管道运行,同时计划在后续更新中进行全面修复。

测试覆盖补充虽然只占15.5%的修订,但添加的测试套件经常是实质性的,覆盖原始提交未处理的边缘情况和失败路径。有个例子是为GPU X-VGA支持检测功能添加了全面的单元测试,这些测试在AI的初始提交中完全缺失。新测试覆盖了设备参数生成、检测过程验证、错误处理场景和配置流程验证。AI实现了GPU支持功能但没有相应的测试覆盖,这被审核者识别为需要补救的差距。

CI/CD和性能优化代表了修订的较小但关键部分,总计7.9%。CI/CD修改相对罕见,只占6.6%的修订,但对维护健康的管道至关重要。性能改进出现在更小的比例中,只有1.3%,比如当审核者为AI实现的高效但可能过时的存储驱动程序添加缓存清除机制以确保数据新鲜度时,从而同时实现准确性和性能。

特别值得注意的是,AI在修订过程中仍然保持活跃参与。41.1%的修订AI代码都有Claude的共同署名,占修订过程中所有提交的34.1%。这表明开发者不仅依赖AI工具进行初始代码生成,还在审核期间依赖它们进行迭代改进。AI共同署名在修订中的大量存在强调了AI系统在整个软件开发周期中的持续作用。

这些发现强调了一个重要观点:虽然AI生成的代码是一个强有力的起点,但人类监督对确保正确性、可维护性以及遵守项目标准仍然至关重要。同时,AI和人类在开发过程中的持续协作也预示着未来软件开发的新模式。

Q&A

Q1:Claude Code生成的代码有多少能被开源项目接受?

A:研究显示83.8%的Claude Code生成代码最终被项目维护者接受并合并,虽然略低于人类程序员的91.0%接受率,但这个成功率已经相当不错。更重要的是,在被接受的代码中,有54.9%完全不需要修改就能直接使用。

Q2:AI编程助手最擅长处理什么类型的编程任务?

A:AI特别擅长处理重复性和规则性任务。研究发现24.9%的AI贡献涉及代码重构,18.8%涉及测试相关工作,22.1%涉及文档更新。AI在这些需要系统性思维但相对机械化的任务上表现远超人类程序员。

Q3:当AI代码需要修改时,主要问题出在哪里?

A:45.1%的修改集中在bug修复上,特别是错误处理方面的问题;27.4%需要更新文档以保持同步;25.7%需要重构以符合项目架构;22.1%需要改进代码风格以符合项目规范。这表明AI代码虽然功能基本正确,但在细节完善和项目标准遵循方面还需人工把关。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-