AI生成代码加速代码屎山噩梦?

2024-02-01 17:25:41 浏览数 (1)

如今,许多程序员选择使用AI来辅助编程,但是随着AI软件开发的快速普及,有关代码质量的担忧越发凸显。长期从事代码研究的Adam Tornhill曾表示,AI辅助编程所面临的主要挑战是,它很容易生成大量原本无需编写的代码。

根据最新的研究,结果确实令人担忧。除了代码反复修改后被删除的问题,重复代码比例也变得越来越严重。

GitHub Copilot 自推出 beta 版以来,迅速席卷了 AI 编码领域。根据公司首席执行官 Thomas Dohmke 的介绍,该软件目前已经吸引了超过一百万付费订阅开发者,有效提高了开发任务的速度达到55%。此外,在启用Copilot的文件中,有46%的代码量是由人工智能生成的。

根据开发者分析公司GitClear的研究,在对1.5亿行已更改代码进行数据收集后发现,三分之二的数据来自私营企业以匿名方式共享的数据,而三分之一的数据则来自谷歌、Facebook和微软等技术大厂的开源项目。

该研究的重点是对经过修改、更新、删除、复制和移动的代码进行处理,同时排除掉GitClear事先定义的“噪音”,比如同一段代码被提交到多个分支、空行和其他没有意义的代码行。

然而,GitClear 的研究集中在代码质量而非代码数量,并且发现 AI 助手主要提供“代码添加建议”,但很少提供代码更新、移动或删除建议。

要精确衡量代码质量并不容易。研究者们也确实发现了一些变化趋势,显示代码的添加、删除、更新和复制/粘贴量都有显著增加,但是代码移动的比例则有所减少。他们还发现代码重复率大幅增加,从2020年的3.3%提高到目前的7.1%。

通常来说,代码移动是开发者重构代码时的一个重要标准。具体来说,就是要在改善代码设计和结构的同时,确保不会改变原有的功能。

研究人员初步推测这一趋势或许与 AI 编码技术的迅速普及有关,但具体原因仍需进一步验证。他们严厉批评了过度使用复制/粘贴代码的负面影响,并指出:“这种对 AI 生成代码的盲目使用,将对代码的长期可维护性产生灾难性的影响。”

然而,过度依赖复制粘贴并不是一个新的问题。开发人员之所以这样做,可能是因为无需调整和重用现有代码,直接复制粘贴更快捷省事。或者可能是由于多个开发者之间的沟通不畅,或者过度从开发示例和编码问答网站上抄袭内容。

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

这项研究可能会在一定程度上安抚那些担心被人工智能工具取代的开发者们。代码分析公司CodeScene最近进行的一项人工智能代码重构研究也得出了结论,“在编码环境中,人工智能远远不能替代人类。”

但可以确定的是,AI 编码助手绝对不会消失,相反它会像所有新工具一样不断进行改进,开发者会学习如何优化它的思路,提高它的使用效果。实际上,现在的开发者们已经开始认识到代码质量的重要性。根据GitHub和Wakefield Research的调查报告显示,在被调查的程序员中,当被问及“在积极使用人工智能时,应该根据哪些指标进行评估?”时,“代码质量”被认为是最重要的问题。

最近的研究显示,代码质量对业务产生的负面影响不可忽视。根据这些研究,通常情况下,由于技术债务和糟糕的代码,公司的开发人员平均浪费了23%~42%的时间。这一结果足以引起我们的关注。另外,有关软件开发人员由于技术债务而导致的生产力损失的研究还指出,开发人员经常不得不引入新的技术债务,因为公司一直在通过牺牲代码质量来换取短期的收益,如新增功能等。

因此,提高代码的可读性和可维护性,注重代码的健壮性和性能优化,确保代码的安全性。代码遵循如命名规范、注释规范、代码风格统一等规范和最佳实践,依然是开发人员需要攻克的课题。而为了达到这些要求,开发人员需要具备扎实的编码能力、良好的团队合作精神以及使用正确的AI编码助手,从而辅助自己高效实现高质量代码输出。

以飞算推出的专注AI生成Java函数的FuncGPT(慧函数)为例,集成多年的编程现场大数据,经过数百万行代码训练,帮助开发人员实现通过自然语言即可实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA。在代码质量方面,由于FuncGPT(慧函数)具备强大的自然语言处理能力,能够准确理解用户对函数的描述和要求,降低了开发沟通成本和理解难度,同时因为经过代码编写最佳实践和大规模机器联合训练,减少了由于人的疏忽和语法错误引起的Bug,因此生成的代码质量有保证。多次内部测试显示,相较市面上ChatGPT等大模型,FuncGPT(慧函数)生成的代码质量更高,更便于开发人员直接使用。

目前,企业引入人工智能辅助工具来实现“降本增效”是可以理解的,但我们需要谨慎运用,充分发挥优势、避免劣势。让 AI 辅助编程更好地帮助开发者需要各方共同的努力。

0 人点赞