【干货】从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

❿⁄₁₁ ⟦ OSCP ⬖ 研记 ⟧ 密码攻击实践 ➱ NTLM哈希传递攻击

❿⁄₁₁ ⟦ OSCP ⬖ 研记 ⟧ 密码攻击实践 ➱ NTLM哈希传递攻击

郑重声明:本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。 🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论 | 保持连接💬 🌌 立即前往 👉晖度丨安全视界🚀 ▶ 信息收集  ▶ 漏洞检测 ▶ 初始立足点  ▶ 权限提升 ▶ 横向移动 ➢ 密码攻击 ➢ NTLM哈希传递攻击🔥🔥🔥 ▶ 报告/分析 ▶ 教训/修复 目录 1.密码破解 1.1 破解Windows哈希实践 1.1.1 NTLM哈希传递攻击概述 1.1.1.1 什么是NTLM哈希传递? 1.1.1.2 攻击应用场景 1.1.

By Ne0inhk

【数学建模】(LeetCode 1227)小鸟回笼/飞机座位问题

题目 有 nnn 只小鸟,各有自己的笼子(编号 1,2,⋯ ,n1, 2, \cdots, n1,2,⋯,n)。第一天,第一只小鸟(编号 1)没有回到自己的笼子(笼 1),而是随机进了其它某个笼子。后续的小鸟每天回来时,如果自己的笼子空着就进自己的笼子,否则从剩下的空笼子中随机选一个。 问:最后一只回笼的小鸟回到自己笼子的概率是多少? 这个问题和经典的飞机座位问题等价(见下),但需要注意的时初始条件不同,下面的问题第一个人位置也是随机的(可能回到自己的位置),而上面小鸟回笼问题则是在没有回到自己的笼子情况下。 有nnn位乘客即将登机,飞机正好有nnn个座位。第一位乘客的票丢了,他随便选了一个座位坐下。剩下的乘客将会:如果他们自己的座位还空着,就坐到自己的座位上;当他们自己的座位被占用时,随机选择其他座位,问: 第nnn位乘客坐在自己的座位上的概率是多少? 解答 **解:**设当所有鸟回到笼子后鸟和笼子编号的映射为 f(n)=m

By Ne0inhk
【优选算法必刷100题】第031~32题(前缀和算法):连续数组、矩阵区域和

【优选算法必刷100题】第031~32题(前缀和算法):连续数组、矩阵区域和

🔥艾莉丝努力练剑:个人主页 ❄专栏传送门:《C语言》、《数据结构与算法》、C/C++干货分享&学习过程记录、Linux操作系统编程详解、笔试/面试常见算法:从基础到进阶 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬艾莉丝的简介: 🎬艾莉丝的算法专栏简介: 目录 031  连续数组 1.1  解法一:暴力解法 1.2  解法二:前缀和在哈希表中 1.3  算法实现 1.3.1  C++实现 1.3.2  Java实现 1.4  博主手记 032  矩阵区域和 2.1

By Ne0inhk
Flutter 组件 vnlunar 适配鸿蒙 HarmonyOS 实战:高精度农历算法,构建民俗文化日期与节气治理架构

Flutter 组件 vnlunar 适配鸿蒙 HarmonyOS 实战:高精度农历算法,构建民俗文化日期与节气治理架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 vnlunar 适配鸿蒙 HarmonyOS 实战:高精度农历算法,构建民俗文化日期与节气治理架构 前言 在鸿蒙(OpenHarmony)生态迈向全球化部署、涉及多语言本地化(L10n)及深层文化特性适配的背景下,如何实现准确的阴阳历(农历)转换、二十四节气计算及民俗节日提醒,已成为提升应用“人文温度”与本地化竞争力的核心要素。在鸿蒙设备这类强调分布式时间同步与低功耗常驻显示(AOD)的环境下,如果应用依然依赖简单的查表法或通过网络接口获取农历信息,由于由于闰月计算的复杂性或离线环境限制,极易由于由于计算偏移导致传统节日提醒的误报。 我们需要一种能够实现天文级算法推演、支持高精度节气定位且具备纯 Dart 离线运作能力的历法治理方案。 vnlunar 为 Flutter 开发者引入了标准化的阴阳历转换协议。它不仅支持对天干地支、生肖及闰月的精确解构,更针对东南亚等地区的历法细微差异提供了专项适配。在适配到鸿蒙 HarmonyOS 流程

By Ne0inhk