[论文阅读] 人工智能 + 软件工程 | 揭秘ChatGPT在软件开发问题解决中的有效性:一项实证研究

揭秘ChatGPT在软件开发问题解决中的有效性:一项实证研究

论文:What Makes ChatGPT Effective for Software Issue Resolution? An Empirical Study of Developer-ChatGPT Conversations in GitHub

arXiv:2506.22390
What Makes ChatGPT Effective for Software Issue Resolution? An Empirical Study of Developer-ChatGPT Conversations in GitHub
Ramtin Ehsani, Sakshi Pathak, Esteban Parra, Sonia Haiduc, Preetha Chatterjee
Subjects: Software Engineering (cs.SE)

研究背景:当开发者遇上ChatGPT

想象一下,你是一名软件开发人员,正在为一个棘手的bug焦头烂额。你听说ChatGPT能快速解决编程问题,于是满怀期待地向它描述了问题,结果却得到了一堆错误代码或无关建议。这并非个例——在当今软件开发领域,像ChatGPT这样的对话式大语言模型(LLMs)正被广泛使用,但并非所有开发者与LLM的对话都能有效解决问题。

根据GitHub的2023 Octoverse报告,超过92%的开发者使用包括ChatGPT在内的AI编码工具。这些工具看似无所不能,能生成代码、推荐库、甚至调试程序,但实际效果却参差不齐。Stack Overflow等传统问答平台的流量正在下降,开发者越来越依赖LLMs,但他们也面临着新的挑战:如何判断ChatGPT的回答是否有用?为什么有些对话高效解决问题,而有些却毫无帮助?

这就像我们去医院看病,同样的症状,不同的医生诊断结果和治疗方案可能大相径庭。我们需要知道:什么样的"问诊方式"(即开发者与ChatGPT的对话模式)能带来更好的"治疗效果"(问题解决)?哪些"病情"(软件开发任务)更适合用这种"疗法"(ChatGPT辅助)?

创新点:首次深入剖析开发者与ChatGPT的对话动态

  1. 首个标注数据集:创建了包含876个开发者-ChatGPT对话的手动标注数据集,其中686个与GitHub问题直接相关,为该领域研究提供了宝贵的基础资源。

  2. 多维度分析框架:从对话、项目和问题三个层面构建指标体系,全面揭示有效对话的特征,而非仅关注单一维度。

  3. 缺陷分类体系:首次系统梳理ChatGPT无效回复的常见缺陷,为改进LLM设计提供明确方向。

研究方法和思路:像侦探一样拆解对话之谜

1. 数据收集与预处理

  • 数据来源:通过GitHub API收集2023年1月至2024年4月期间公开的开发者-ChatGPT对话链接,形成876个对话的数据集,较之前的DevGPT数据集规模翻倍。

  • 数据清洗

    • 过滤非英语对话
    • 用[CODE]和[ERROR]替换代码片段和错误信息,聚焦文本分析
    • 使用GPT-4识别代码片段并手动验证

2. 对话有效性判断

就像侦探根据线索判断嫌疑人,研究者设计了三类"线索"来判断对话是否有帮助:

  • 文本线索:开发者是否明确表扬ChatGPT(如"ChatGPT帮我快速解决了这个问题")或利用其建议进行进一步探索。
  • 表情符号赞赏:开发者是否用❤️或等表情表达认可。
  • 直接实现:检查后续提交的代码是否直接采用了ChatGPT的建议(使用NiCad代码克隆检测工具)。

3. 任务分类与指标分析

  • 任务分类:将开发者请求分为9类,如代码生成、工具推荐、bug修复等(见表1)。
任务类别 定义 示例
代码生成与实现 生成类、函数等代码构件 “创建一个bash脚本来执行服务器关闭程序”
工具/库/API推荐 询问特定库或工具的用法 “我在使用React的TouchableOpacity时,为什么用户拖动列表时透明度会变浅?”
bug识别与修复 调试程序、分析堆栈跟踪 “我的CSS字体出现了这些问题[堆栈跟踪]”
  • 多维度指标分析
    • 对话指标:从结构(如代码片段数量)、语言(如礼貌词汇使用)、语篇(如主题连贯性)等方面分析。
    • 项目指标:考察项目规模(星标数、贡献者数)和开发者经验(公共仓库数、贡献次数)的影响。
    • 问题指标:分析问题难度(讨论时长、参与开发者数)和类型(编译错误、系统设计等)与有效性的关系。

主要贡献:给开发者和研究者的实用指南

  1. 开发者实用指南

    • 提供"高效对话配方":保持提示简洁、结构清晰,避免同时提出多个问题。
    • 明确"任务适配清单":知道何时使用ChatGPT最有效(如代码生成),何时需谨慎(如代码解释)。
  2. 工具开发方向

    • 为提示优化工具提供设计依据,例如自动检测过长的代码片段或不清晰的指令。
    • 指导开发针对特定任务的LLM插件,提升薄弱领域(如代码解释)的表现。
  3. LLM研究启示

    • 揭示LLM在软件开发场景中的短板,如对项目特定知识的缺乏,为模型微调提供方向。
    • 提出结合检索增强生成(RAG)和代理工作流等技术路径,提升LLM在复杂问题上的表现。

总结:ChatGPT的"能力图谱"与"避坑指南"

解决的主要问题

  1. 有效性之谜:揭开为何只有62%的对话有效,发现有效对话更简短、易读,且在语义和语言风格上更一致。

  2. 任务适配性:绘制ChatGPT的"能力图谱",明确其在代码生成等任务中的优势和在代码解释等任务中的不足。

  3. 缺陷诊断:提供ChatGPT无效回复的"故障代码",如信息错误、不全面、模糊不清等,帮助开发者识别和规避风险。

主要成果

  • 量化有效性:发现62%的对话有帮助,代码生成(62%)、工具推荐(57%)和bug修复(66%)最有效。
  • 关键成功因素:有效对话的特征包括清晰指令、低话题转换、项目规模大、开发者经验丰富等。
  • 缺陷分类:无效回复中54例信息错误、39例不全面、14例模糊不清,为改进提供靶点。

思维导图

[论文阅读] 人工智能 + 软件工程 | 揭秘ChatGPT在软件开发问题解决中的有效性:一项实证研究_第1张图片


详细总结

一、研究概述

本文对686个GitHub问题线程中开发者与ChatGPT的对话进行实证分析,旨在明确有效对话的特征。研究通过分类任务类型、分析对话/项目/问题指标,揭示了ChatGPT在问题解决中的表现差异及无效回复的常见缺陷。

二、核心发现
  1. 对话有效性
    • 整体仅有62%(428/686)的对话对问题解决有帮助。
    • 最有效任务为代码生成(196例,62%)、工具/库/API推荐(182例,57%)和bug修复(120例,66%)。
    • 最困难任务是代码解释(26例,仅11例有帮助)和信息检索。
  2. 对话特征对比
    指标类别 有帮助对话特征 无帮助对话特征
    结构 含更多代码片段、错误信息 代码片段过大(平均长度-0.13)、API提及过多
    语言 礼貌词汇+73%、积极语气+48% 词汇独特性-22%、句子不完整+63%
    语篇 主题连贯性高、语义相似度高 话题频繁转换、语言风格匹配低
  3. 项目与问题因素
    • 项目规模:有帮助对话多来自大项目(文件数、代码行数更多)和流行项目(星标数更高)。
    • 开发者经验:贡献次数多的开发者更易产生有效对话。
    • 问题复杂度:有帮助对话多针对简单问题(解决时间短、参与开发者少),复杂问题(如系统重构)效果差。
  4. 无效回复缺陷
    • 错误信息(54例):如提供错误代码或不良实践。
    • 不全面(39例):回答过于泛化,如SE信息检索任务中。
    • 模糊不清(14例):表述含混导致开发者困惑。
    • 无关/过时(19例):推荐已废弃库或偏离问题语境。
    • 幻觉(11例):虚构不存在的API或功能。
三、实践意义
  1. 交互策略:提供简洁明确的提示,避免长代码片段和多话题切换,及时反馈。
  2. 工具开发:基于对话指标开发提示优化工具,如自动检测代码片段长度。
  3. LLM优化:针对薄弱任务(如代码解释)进行微调,结合检索增强生成(RAG)减少幻觉。

关键问题

  1. ChatGPT在哪些软件开发任务中最有效?
    • 答案:ChatGPT在代码生成与实现(196例,62%有效)、工具/库/API推荐(182例,57%有效)和bug识别修复(120例,66%有效)任务中表现最佳。这些任务通常具有明确的技术范围,如编译错误修复或功能脚本生成。
  2. 有效与无效对话的核心差异是什么?
    • 答案:有效对话更简短精炼(词汇量-42%)、结构清晰(代码片段适中),且语义一致性高(主题连贯性强)。无效对话常包含冗长内容(句子数+41%)、过大代码片段(平均长度+13%)和频繁话题切换
  3. ChatGPT无效回复的最常见问题是什么?
    • 答案:无效回复中信息错误(54例)和不全面(39例)最为常见。例如,在工具推荐任务中,ChatGPT可能推荐过时库或提供无法运行的代码,而在信息检索中回答过于泛化,缺乏具体上下文。

一段话总结

这篇实证研究分析了686个GitHub问题线程中开发者与ChatGPT的对话,发现仅62%的对话对问题解决有帮助。ChatGPT在代码生成、工具/库/API推荐等任务中表现突出,而在代码解释和最新信息获取上较为吃力。研究还指出,有帮助的对话通常更简短、易读,且在语义和语言风格上更一致,同时较大的项目和经验丰富的开发者能更有效地利用ChatGPT,其无效回复中最常见的问题是信息错误和不全面。

你可能感兴趣的:(前沿技术,论文阅读,人工智能,软件工程)