Cupid:利用ChatGPT进行更准确的重复错误报告检测

互联不一般哥 2024-06-24 20:45:26

Cupid: Leveraging ChatGPT for More Accurate Duplicate Bug Report Detection

Ting Zhang;Ivana Clairine Irsan;Ferdian Thung;David Lo

Singapore Management University, Singapore

引用:Ting Zhang, Ivana Clairine Irsan, et al. Cupid: Leveraging ChatGPT for More Accurate Duplicate Bug Report Detection [J]. arXiv preprint arXiv:2308.10022, 2023.

论文:https://arxiv.org/abs/2308.10022

摘要

本文提出了 Cupid,一种利用 ChatGPT 改进传统重复 bug 报告检测 (DBRD) 方法准确性的新方法。Cupid 通过 ChatGPT 在零样本设置下提取 bug 报告中的关键词,并将其作为 REP 方法的输入,从而提高 DBRD 的性能。在三个开源项目数据集上的实验结果表明,Cupid 在所有数据集上均实现了最先进的召回率@10 分数,比之前的最佳方法提高了 6.7% - 8.7%。此外,Cupid 也超越了最先进的基于深度学习的 DBRD 方法。本研究强调了将大型语言模型与传统 DBRD 技术相结合以改进软件工程任务性能的潜力。

1 引言

随着软件系统的不断发展和壮大,bug 的存在变得不可避免。bug 报告是用户向开发者报告 bug 的主要渠道,而大多数软件项目使用 issue 跟踪系统来管理 bug 报告和跟踪 bug 修复进度。然而,许多 bug 报告实际上是现有 bug 报告的重复,这会导致开发者在修复相同 bug 上浪费时间和精力。因此,识别重复 bug 报告对于提高 bug 管理效率至关重要。

多年来,研究人员提出了各种 DBRD 方法,包括基于深度学习和非深度学习的方法。深度学习方法在大型 bug 存储库中表现良好,但在包含典型数量问题(例如约 10k 个问题)的存储库中,其性能往往不如传统方法。传统方法通常基于词袋模型,无法捕获 bug 报告的语义信息。

最近,大型语言模型 (LLM) 在自然语言处理 (NLP) 任务中取得了突破性进展,为改进 DBRD 方法提供了新的可能性。然而,直接使用 LLM 进行 DBRD 面临一些挑战,例如计算成本高、忽略其他 bug 报告的信息以及 LLM 的推理能力有限。

为了解决这些问题,本文提出了 Cupid,一种结合现代 LLM 和传统 DBRD 技术的新方法。Cupid 使用 ChatGPT 从 bug 报告中提取关键词,并将其作为 REP 方法的输入。实验结果表明,Cupid 在三个数据集上均优于现有的 DBRD 方法,并在召回率@10 方面实现了最先进的性能。本研究表明,间接利用 ChatGPT 与现有方法相结合可以有效地提高 DBRD 的性能,并为未来探索创新方法利用最先进技术与传统技术相结合铺平了道路。

2 方法技术

方法主框架图

Cupid 主要包含三个阶段:

1. 应用选择规则

根据描述的长度和内容选择需要 ChatGPT 处理的 bug 报告。

长描述和包含代码片段或 URL 的描述被选中,因为它们对 REP 的处理更具挑战性。

2. 使用提示模板运行 ChatGPT

使用精心设计的提示模板,引导 ChatGPT 从选定的 bug 报告中提取关键词。

这些关键词保留了 bug 报告的主要意义,并为 DBRD 提供了更有效的输入。

3. 检索潜在的主 bug 报告

使用 REP 方法,将 ChatGPT 提取的关键词输入,检索测试 bug 报告的潜在的主报告。

REP 方法结合文本特征和类别特征,并使用 BM25F 函数计算文本相似度。

2.1 应用选择规则

本节探讨了 Cupid 中的选择规则,这些规则旨在提高效率并保持准确性,同时考虑到 ChatGPT 的计算成本。ChatGPT 的计算成本较高,因此不能对所有 bug 报告进行处理,并且在实际应用中,没有必要对每个新提交的 bug 报告都运行 ChatGPT。因此需要设计一个报告选择规则。Cupid 的选择规则基于 bug 报告的长度和内容,目标是优先处理 REP 难以处理的 bug 报告,同时减少输入 ChatGPT 的 bug 报告数量。

具体选择规则 :

长度 : 选择描述较长的 bug 报告。长度阈值 n 通过计算训练集中描述长度的 75% 分位数确定。长描述通常包含非简洁的堆栈跟踪和代码片段,这使得 REP 难以检索潜在的主 bug 报告。

内容 : 选择描述中包含代码片段或 URL 的 bug 报告。使用正则表达式匹配和选择这些 bug 报告。代码片段和 URL 对开发者可能很有用,但对 DBRD 方法来说可能难以处理。选择这些 bug 报告是因为并非所有代码片段和 URL 都对 REP 有用,而且保留代码片段和 URL 可以帮助 ChatGPT 更好地理解语言。

通过选择规则,Cupid 可以在不牺牲太多准确性的情况下显著减少对 ChatGPT 的查询数量,从而提高效率。选择规则确保了 REP 处理的 bug 报告更具挑战性,从而充分发挥了 Cupid 的优势。

2.2 使用提示模板运行ChatGPT

在第一阶段完成后,本研究选择了描述较长或包含代码片段及URL的错误报告,并在其上应用了ChatGPT。由于先前的实证研究表明ChatGPT对提示词的敏感度较高,因此,为了充分发挥LLMs的能力,本研究构建了Cupid所使用的提示词模板,该模板适用于单轮对话。对于每份错误报告,本研究都会启动一个与ChatGPT的新对话。在获得ChatGPT的回应后,错误报告中的原始摘要和描述会被替换为识别出的摘要和描述的关键词。错误报告的其余部分保持不变。模板如下:

提示词模板

在设计提示词模板时,本研究基于直觉认为错误报告者相较于ChatGPT可能拥有更深厚的专业知识和领域知识。因此,他们在报告错误时使用的语言和术语可能具有较高的相似性,这可以被DBRD方法所利用。因此,本研究选择保留而非替换整个表达式,以便DBRD方法能够处理这些关键信息。为了验证这一直觉,本研究还尝试了其他提示词模板,并将在第5节报告相关实验结果。

2.3 检索潜在的主Bug报告

本小节详细介绍了 Cupid 中使用的 DBRD 方法:REP。REP 通过线性组合七个特征来计算 bug 报告之间的相似度,这些特征包括文本特征和分类特征。如公式1所示,本研究中的REP方法由七个特征的线性组合构成,这些特征涵盖了文本特征和分类特征。

其中,d代表存储库中的一个错误报告,q代表查询(即新的错误报告),是第i个特征的权重,而代表第i个特征。前两个特征主要基于文本,即文本特征,其余五个为分类特征。为了进一步优化BM25F,本研究通过考虑查询中词频的信息提出了BM25Fext。

在中,摘要和描述的字段被表示为单字形式,而在中,则表示为双字形式。因此,BM25Fext的输入数据包括了单字和双字这两种特征。对于,它们分别对应产品、组件和类型这三个分类特征。当错误报告d和查询q的相应字段值相同时,这些特征的值为1,否则为0。至于,它们分别对应优先级和版本这两个分类特征,其值是通过计算错误报告d和查询q相应字段值之间距离的倒数得出的。

3 实验与结果

3.1 实验设置

本研究使用了来自开源项目Spark、Hadoop和Kibana的三个数据集,每个数据集包含约10k个issue,代表了典型的bug存储库规模。每个数据集都被划分为训练集、验证集和测试集,其中训练集用于训练和验证模型参数,而测试集则用于评估模型性能。在数据集中,我们采用了Zhang等人提供的标注数据,包含了1:1的重复和非重复bug报告对。本研究提出的基准方法包括Cupid、REP、Siamese Pair和SABD。Cupid是结合了ChatGPT和REP的重复bug报告检测方法,而REP是基于信息检索的传统方法,在典型bug存储库中表现优异。Siamese Pair是基于深度学习的早期方法,通过Siamese网络区分相似和不相似的bug报告。SABD则是基于深度学习的最新方法,使用软注意力机制和分类器进行重复bug报告检测。评估指标采用Recall Rate@k (RR@k),该指标衡量了模型正确地将重复bug报告与主bug报告关联起来的比例,其中k代表模型需要考虑的bug报告数量。

本研究在实验设置方面采用了GPT-3.5版本的ChatGPT,并通过开源API进行交互,以提高实验效率和降低成本。对于每个查询bug报告,本研究运行了ChatGPT五次,并对结果进行了聚合,以获得更准确的输出。同样,深度学习模型Siamese Pair和SABD也各自运行了五次,最终结果取平均值。本研究的所有实现细节和实验数据将在https://anonymous.4open.science/r/Cupid/上公开。

在实验步骤方面,本研究首先从数据集中提取出训练集、验证集和测试集,并生成了重复和非重复bug报告对。接着,使用训练集和验证集来训练了REP、Siamese Pair和SABD模型。然后,利用测试集来评估了Cupid、REP、Siamese Pair和SABD模型的性能,并计算了Recall Rate@k (RR@k)指标。在消融实验中,本研究探讨了不同的Prompt Template对ChatGPT在Cupid性能上的影响,以及不同的Selection Rules对Cupid效率和准确性的影响。此外,本研究还比较了ChatGPT与其他大型语言模型(LLMs)如Vicuna-13B、WizardLM-13B和Llama 2-13B-Chat的性能。

在结果分析部分,本研究将比较Cupid与其他基准方法的RR@k指标,以评估Cupid的有效性。同时,本研究还将分析Prompt Template、Selection Rules和ChatGPT对Cupid性能的具体影响,并对实验结果进行解释。

3.2 结果与分析

本研究通过实验评估了 Cupid 在典型 bug 存储库中检测重复 bug 报告的性能,并与现有最先进方法进行比较。主要结果如下:首先,Cupid 在所有三个数据集(Spark、Hadoop 和 Kibana)上均优于现有最先进方法,在 RR@10 指标上取得了显著的提升。

与 REP 相比,Cupid 在 RR@10 指标上提升了 6.7%(Spark)至 8.7%(Kibana);与 SABD 相比,Cupid 在 RR@10 指标上提升了最高 79.2%(Spark)。这表明 Cupid 能够有效地利用 ChatGPT 的语言生成能力,将 bug 报告转化为更适合重复检测的格式,从而提高检测精度。

其次,通过消融实验,本文发现 Prompt Template、Selection Rules 和 ChatGPT 对 Cupid 性能的提升都至关重要。更复杂的 Prompt Template 能够带来更高的 RR@10 指标,表明 prompt 设计对 Cupid 性能至关重要。使用 Selection Rules 可以有效减少需要使用 ChatGPT 处理的 bug 报告数量,同时还能略微提升 Cupid 的 RR@10 指标,表明 Selection Rules 在效率和准确性之间取得了良好的平衡。

最后,本文还发现开源 LLMs 也具有应用于 DBRD 的潜力,值得进一步研究。本研究表明,Cupid 是一种有效的重复 bug 报告检测方法,能够显著提高检测精度,尤其适用于典型 bug 存储库。未来研究方向包括研究 Cupid 在 few-shot in-context learning 设置下的性能,以及将 Cupid 应用于其他 bug 报告管理任务,例如 bug 组件分配和开发者分配。

转述:朱云峰

0 阅读:14

互联不一般哥

简介:感谢大家的关注