【干货】从GPT到Copilot:AI生成代码缺陷分类与缓解策略完全指南!

【干货】从GPT到Copilot:AI生成代码缺陷分类与缓解策略完全指南!

简介

本文是对AI生成代码中缺陷的系统化文献综述研究,分析了72篇高质量论文。研究发现功能缺陷(78%)和语法缺陷(42%)是最常见的AI生成代码问题,不同AI模型(如GPT、Copilot)各有特定的缺陷倾向。文章提出了八大类缺陷分类体系,并总结了四种主要缓解策略:提示工程、代码增强模块、自主编码代理和基于程序分析的方法。研究强调了在利用AI生成代码时需保持谨慎,采取多层次质量保证措施,以充分发挥AI在软件开发中的潜力。


引言:AI编码的机遇与挑战

近年来,大型语言模型(LLMs)如GPT、Claude、GitHub Copilot等,正在彻底改变软件开发的方式。开发者们越来越多地利用这些AI工具来生成代码片段、辅助编程,甚至进行代码翻译和调试,极大地提高了生产力和效率。然而,在这股技术浪潮的背后,一个不容忽视的问题浮出水面:AI生成的代码中存在大量缺陷(Bugs)

这些缺陷不仅可能导致程序运行错误、性能下降,还可能引发严重的安全漏洞,给软件的可靠性和维护带来巨大挑战。为了系统地了解AI生成代码中缺陷的本质、类型和分布,并探索有效的缓解策略,研究人员对相关文献进行了全面的梳理和分析。本文将基于这篇题为《A Survey of Bugs in AI-Generated Code》的综述论文,带您深入探索AI生成代码中的“Bug”世界。

研究方法:系统化的文献综述

为了全面理解AI生成代码中的缺陷,研究者采用了一种严谨的 系统化文献综述(Systematic Literature Review, SLR) 方法。该方法旨在通过系统性地识别、分析和综合现有软件工程研究中的证据,以揭示AI生成代码中缺陷的类型、分布和模式。

整个研究流程如下图所示,包括搜索、筛选、质量评估、数据提取与分析等关键步骤:

研究者从Google Scholar和Scopus等数据库中检索了相关文献,并制定了严格的筛选标准,最终从660篇候选文献中确定了72篇符合要求的高质量研究论文。这些论文涵盖了不同的编程语言、数据集和AI模型,为后续分析提供了坚实的基础。

AI生成代码中的缺陷分类

论文的核心贡献之一是提出了一套全面的AI生成代码缺陷分类法。研究者将AI生成的代码缺陷分为八大类,并进一步细分为十二个子类,如下图所示:

1. 功能缺陷(Functional Bugs)

这类缺陷直接导致软件无法按预期运行,是最常见的一类缺陷。它又可以细分为:

  • 语义缺陷(Semantic Bugs):代码语法正确,但含义或意图与开发者期望不符,导致程序无法完成任务。
  • 逻辑缺陷(Logic Bugs):算法或业务逻辑错误,导致输出结果不正确。
  • 函数/方法相关缺陷(Function/Method-related Bugs):函数或方法的参数、返回值、调用方式等出现问题。
  • API/包/库相关缺陷(API/Package/Library-related Bugs):与外部库或API的使用不当有关。
  • 变量/对象/属性相关缺陷(Variable/Object/Parameter-related Bugs):变量、对象或参数的使用错误。
  • 类型错误(Type Error):数据类型不匹配导致的错误。
  • 其他功能缺陷(Other Functionality Bugs):无法归入上述子类的功能性问题。

2. 可靠性缺陷(Reliability Bugs)

这类缺陷影响软件的稳定性和性能,例如:

  • 性能相关问题(Performance-related Bugs):程序运行缓慢、资源消耗过大。
  • 稳定性相关问题(Stability-related Bugs):程序可能崩溃、死锁或行为不可预测。

3. 语法缺陷(Syntax Bugs)

代码不符合编程语言的语法规则,通常在编译或解释阶段就会被检测到。

4. 代码风格与标准问题(Code Style and Standards Issues)

代码虽然能运行,但不符合编码规范或最佳实践,影响可读性和可维护性。

5. 幻觉缺陷(Hallucination Bugs)

AI模型生成看似合理但实际上是错误或不存在的内容,这是AI生成代码特有的问题。

6. 系统缺陷(System Bugs)

与系统层面相关的问题,例如:

  • 内存缺陷(Memory Bugs):内存泄漏、越界访问等。
  • I/O缺陷(I/O Bugs):输入输出操作问题。
  • 数据库缺陷(Database Bugs):与数据库交互的问题。
  • 硬件缺陷(Hardware Bugs):与硬件相关的问题。
  • 配置缺陷(Configuration Bugs):配置错误。
  • 访问/权限缺陷(Access/Permission Bugs):权限问题。

7. 测试缺陷(Test Bugs)

测试代码本身存在的缺陷,可能导致测试结果不可靠。

8. 其他/未指定缺陷(Others/Unspecified Bugs)

无法归入上述类别的缺陷。

通过分析72篇研究论文,研究者发现功能缺陷和语法缺陷是最常见的缺陷类型,分别出现在78%和42%的研究中。下图直观地展示了不同缺陷类型的出现频率:

在我们的错误分类法中,大多数类别在手动编写的代码中都很常见。然而,幻觉错误是AI生成代码中的一个独特现象。在AI和NLP领域,幻觉通常指的是模型生成不准确或编造的信息,尽管这类信息在表面上可能看起来合理。由于我们的研究专注于AI生成代码,且大多数幻觉错误的定义都很广泛,一些通常属于一般错误类别的错误实际上也可能被认为是模型幻觉造成的。

例如,许多研究报告了未定义变量、对象或方法等错误,这些错误传统上被归类为功能错误类别下的语义错误。然而,在AI生成代码的上下文中,这些错误通常是由模型幻觉造成的。

图5(b)显示了每个类别中可能由幻觉造成的错误比例。由于大多数类别,如功能错误、语法错误和系统错误,都与代码的预期行为或逻辑相关,这些类别中的错误往往反映了未能满足功能需求,因此很可能是幻觉的结果。然而,其他错误类别,如稳定性错误和代码风格与标准问题,可能只包含少量可以归因于幻觉的错误。

我们的分析依赖于对幻觉相关错误的广义定义,在对选定研究中的错误进行分类时,以捕获模型幻觉可能造成的错误。事实上,在这些研究中明确标记为幻觉错误的案例比例相当小,这表明当前研究尚未调查这种错误类型或模型幻觉在引入错误中的作用。这也突出了未来研究的一个重要方向。

不同AI模型的缺陷倾向

研究者还分析了不同AI模型生成缺陷代码的倾向。下图显示了在研究中被频繁提及的模型家族及其版本数量:

研究发现,GPT家族模型(如GPT-3, GPT-4)是被研究最多的模型,其次是Llama家族、InCoder家族和CodeGen家族。不同模型家族生成的缺陷类型也有所不同。例如,GPT家族模型最常产生功能缺陷,而Copilot则较多产生可靠性缺陷和语法缺陷。下表总结了不同模型家族观察到的缺陷类型:

缺陷的缓解策略

针对AI生成代码中的缺陷,研究者总结了四种主要的缓解方法:

    1. 提示工程与策略(Prompt Engineering and Strategies):通过精心设计输入提示来引导AI模型生成更高质量的代码。例如,使用few-shot示例、Chain of Thought(CoT)推理、提供上下文信息等。
    1. 代码增强模块/框架(Code Enhancement Modules/Frameworks):集成多种技术(如静态分析、语法检查、程序分析)来增强代码生成质量。例如,RustGen、LLM4PLC等框架。
    1. 自主编码代理(Autonomous Coding Agents):让AI代理独立执行编程任务,通过迭代反馈和协作来改进代码。例如,INTERVENOR、PairCoder等。
    1. 基于程序分析的方法(Program-analysis-based Methods):利用静态、动态或混合分析技术来识别和修复缺陷。例如,BatFix、Ngasm等工具。

下表总结了这些缓解方法的分布情况:

结论与展望

这项综述研究为我们提供了对AI生成代码中缺陷的全面理解。它不仅揭示了缺陷的类型、分布和模式,还分析了不同模型生成缺陷的倾向,并总结了现有的缓解策略。

核心发现包括:

  • • 功能缺陷和语法缺陷是AI生成代码中最常见的缺陷类型。
  • • 不同AI模型家族在生成缺陷的倾向上存在差异。
  • • 提示工程是当前最广泛采用的缺陷缓解策略,而基于程序分析的方法则提供了更结构化和确定性的修复途径。

未来研究方向包括:

  • • 构建统一的、可扩展的基准数据集,用于评估和比较不同模型的缺陷模式和缓解效果。
  • • 探索更复杂的上下文相关场景,以及AI在软件工程流程中的更深层次集成。
  • • 针对特定模型和缺陷模式,开发更有效的训练和修复策略。

对于开发者和研究人员而言,这份综述强调了在利用AI生成代码时需要保持谨慎,并采取多层次的质量保证措施。只有充分理解并有效管理AI生成代码中的缺陷,我们才能充分发挥AI在软件开发中的潜力,构建更可靠、更安全的软件系统。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈,帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习和面试资料已经上传ZEEKLOG,朋友们如果需要可以微信扫描下方ZEEKLOG官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Read more

极致性能的服务器Redis之Hash类型及相关指令介绍

极致性能的服务器Redis之Hash类型及相关指令介绍

目录 1. Hash介绍 2. hset 3. hget 3. hdel 5. hkeys 6. hvals 编辑 7. hgetall  8. hexists 9. hmget 10. hlen 11. hsetnx 12. hincrby 13. hincrbyfloat 1. Hash介绍 Redis 哈希类型是键值对的集合,字段与值均支持字符串、数字等类型,适合建模用户信息、配置项等对象类数据。其支持单字段 / 多字段的增删改查、字段存在性判断、值自增自减等原子操作,且底层通过压缩列表或哈希表优化存储,空间利用率高、查询效率快,是 Redis 中存储结构化数据的核心类型之一。 在Redis中因为本身就是按照哈希的KV结构来进行存储的,所以当我们想要使用Redis里面的哈希的时候,实际上是哈希的哈希,在后者中,

By Ne0inhk
《算法题讲解指南:优选算法-二分查找》--21.山峰数组的的峰顶索引,22.寻找峰值

《算法题讲解指南:优选算法-二分查找》--21.山峰数组的的峰顶索引,22.寻找峰值

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》 《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心 ✨未择之路,不须回头 已择之路,纵是荆棘遍野,亦作花海遨游 目录 21. 山峰数组的的峰顶索引 题目链接: 题目描述: 题目示例: 解法(二分查找): 算法思路: C++算法代码: 算法总结及流程解析: 22. 寻找峰值 题目链接: 题目描述: 题目示例: 解法(二分查找): 算法思路: C++算法代码: 算法总结及流程解析: 结束语 21. 山峰数组的的峰顶索引 题目链接: 852. 山脉数组的峰顶索引 - 力扣(LeetCode) 题目描述: 题目示例: 解法(

By Ne0inhk
【组合数学 动态规划】P6870 [COCI2019-2020#5] Zapina|普及+

【组合数学 动态规划】P6870 [COCI2019-2020#5] Zapina|普及+

本文涉及知识点 组合数学汇总 C++动态规划 [COCI2019-2020#5] Zapina 题目描述 有 n n n 个不同的人和 n n n 道不同的题。 第 i i i 个人开心当且仅当他被分配到 i i i 道题,题号不限。 求让至少一个人开心的分配方案数。 输入格式 一个正整数: n n n。 输出格式 一个数字:你的答案 m o d 10 9 + 7 \bmod 10^9+7 mod109+7。 样例 #1

By Ne0inhk
蓝桥杯算法总结

蓝桥杯算法总结

序章 现处于大学生阶段,蓝桥杯算法竞赛算是我们的入门级竞赛,所以我们必须重视起来。 在这个算法总结中,我会用通俗易懂的语言,细致地讲述相关算法,希望能通过我的笔记,为大家带来一些帮助。 内容持续更新,坚持日更! 有任何想法可以在评论区提出,感谢观看。 递推和递归 递推 先简单介绍一下 递推算法:自底向上,由已知条件推导出位置结果的一种算法 核心:状态转移    边界+关系式 废话不多说,直接从题目入手理解递推思想 在这里选用信息学奥赛一本通的题:https://ybt.ssoier.cn/problem_show.php?pid=1314 题目意思理解: 从A点到B点的路径数,并且经过马能到达的点都无效,我们先做好前期的工作准备 //马走日,移动的位置(马能到达的点) int mx[] = {-1,-1,-2,-2,1,1,

By Ne0inhk