本文由智能化软件新技术专刊特约编辑申富饶教授和李戈副教授推荐
社交化编程使得开源社区中的知识可以快速被传播,其中,缺陷报告作为一类重要的软件开发知识,会含有特定的语义信息.通常,开发者会人工地将相关的缺陷报告关联起来.在一个软件项目中,发现并关联相关的缺陷报告可以为开发者提供更多的资源和信息去解决目标缺陷,从而提高缺陷修复效率.然而,现有人工关联缺陷报告的方法是十分耗费时间的,它在很大程度上取决于开发者自身的经验和知识.因此,研究如何及时、高效地关联相关缺陷是对于提高软件开发效率十分有意义的工作.将这类关联相关缺陷的问题视为推荐问题,并提出了一种基于嵌入模型的混合式相关缺陷关联方法,将传统的信息检索技术(TF-IDF)与深度学习中的嵌入模型(词嵌入模型和文档嵌入模型)结合起来.实验结果表明,该方法能够有效地提高传统方法的性能,且具有较强的应用扩展性.
Social coding facilitates the sharing of knowledge in Open-source community. In particular, issue reports, as an important knowledge in the software development, usually contain relevant information, and can thus be linked to other related issues manually. In a project, identifying and linking issues to potentially related issues would provide developers more targeted resource and information when they resolve target issues, thus improving the issue resolution efficiency. However, the current manual linking approach is in general time-consuming and mainly depends on the experience and knowledge of the individual developers. Therefore, investigating how to link related issues timely is a meaningful task which can improve development efficiency of open-source projects. In this study, the problem of linking related issues is formulated as a recommendation problem and a hybrid approach based on embedding models is proposed, combining the traditional information retrieval technique, i.e., TF-IDF, and the embedding models in deep learning techniques, i.e., word embedding and document embedding. The evaluation results show that, the proposed approach can improve the performance of traditional approaches, with a very strong application scalability.
社交化编程(social coding)最早由开源社区GitHub提出, 旨在提供一个对开发者友好的软件开发环境, 帮助开发者进行高效的互联、协同、开发[
链接相关缺陷的过程, 对于开发者快速、有效地修复缺陷是十分重要的.当一个开发者提交一个新缺陷报告后, 其他开发者会参与讨论并对这个缺陷的价值进行评价.在他们的讨论过程中, 参与者可能会链接相关的其他缺陷报告来寻找可能有用的资源和信息.最终, 受助于这些链接和讨论, 缺陷被解决和关闭.然而, 现实世界的链接过程需要耗费大量的时间和人力.尤其对于那些规模庞大的软件项目, 开发者可能需要查找大量的历史缺陷数据, 才能通过它们的文本描述信息定位到相关的缺陷, 并且这样的基于人工的关联方法主要依赖于个体开发者的经验和知识.因此, 设计并实现自动化的缺陷关联方法能够帮助开发者更加聚焦他们的缺陷解决, 也能够帮助项目管理者获取缺陷间的关联关系, 从而提高软件的开发、维护效率.
本文以开源社区GitHub中的软件项目为研究对象, 主要聚焦GitHub中缺陷之间的自动化关联问题.因为GitHub是目前全球最大、最著名的开源社区, 截止2018年3月, 它已经托管了超过8千万的软件版本库.近年来, 学术界也产生了大量基于GitHub数据开展的研究工作[
在本文中, 我们将关联相关缺陷的问题抽象为推荐(recommendation)任务, 为了解决该任务, 我们提出了一种基于嵌入模型的混合式相关缺陷关联方法.该方法将传统的IR技术(TF-IDF)与深度学习技术(词嵌入模型和文档嵌入模型)结合起来, 能够自动化地为新缺陷推荐相关的缺陷报告.对于我们数据库中的每个缺陷报告, 我们将其文本信息(标题和描述)抽取出来并保存到文档里.接下来, 我们利用3种子方法(TF-IDF、WE和DE)分别表征每个缺陷文档的向量, 并计算他们之间的相似度得分.其中, TF-IDF主要从词频的角度提取不同单词间的关联关系, WE和DE则分别从单词和文档出现的上下文角度提取单词间以及文档间的关联关系.最后, 我们将3个子方法得到的相似度得分相加得到最终得分, 进而基于该得分对相关缺陷进行推荐.
为了评价本文方法的有效性, 我们选取了两个著名的GitHub项目作为研究对象:Request项目和Moment项目.在实验验证过程中, 我们将本文方法和4种基准方法(baseline approach)进行比较, 包括NextBug[
● RQ1:与基准方法相比, 本文方法在性能上可以有多少提升?
● RQ2:本文方法对于缺陷语料库是否有很强的依赖性?
● RQ3:本文方法对于训练集规模的依赖如何?
● RQ4:本文方法的训练时间开销如何?
实验结果表明, 基于嵌入模型的混合式相关缺陷关联方法充分地考虑了软件缺陷的词频和上下文信息, 可以明显地提高基准方法的性能; 并且对于不同的缺陷语料库, 本文方法的性能仍然具有一定的可靠性; 且本文方法的训练时间开销较小, 具有很高的应用扩展性.
本文第1节对相关研究背景进行介绍, 结合相关工作引出本文研究问题及方法.第2节详细介绍本文提出的方法框架和技术细节.第3节对实验验证的方法和评价指标进行介绍.第4节介绍具体研究问题下的实验结果.第5节介绍案例分析.最后总结全文.
为了更好地阐述本文工作, 我们首先对相关背景知识和相关工作进行介绍.
测量两个文本的语义相似度是一类经典的研究问题, 现有的解决模型也从向量空间模型(例如TF-IDF)、
词嵌入模型(word embedding, 简称WE)[
文档嵌入模型(document embedding, 简称DE)[
由于词嵌入模型和文档嵌入模型都是从未标记的数据中学习的, 因此可以适用于没有足够标签数据的任务.此外, 嵌入模型更侧重于单词和文档的上下文, 所以可以很好地补充传统的IR技术, 例如, TF-IDF.最近, 一些研究表明, 嵌入模型在软件工程任务中也表现良好[
在缺陷跟踪系统中, 缺陷修复一直是一个复杂、需要不断迭代且耗时的过程, 它涉及整个开发人员社区, 从而引发特定的协同问题[
为了帮助修复缺陷, 许多研究开始分析重复缺陷检测问题[
在GitHub中, 每个托管的项目都与一个缺陷跟踪系统相关联, 该系统提供缺陷跟踪过程中的常用功能, 例如提交缺陷报告、根据缺陷的性质进行标记、标记缺陷不同时间点的解决状态等[
GitHub项目中缺陷链接的示例
An example of issue linking in the GitHub project
为了及时起到作用, 关联相关缺陷报告的链接应该被迅速地发现和提出.但实际上, 这些链接出现的时机主要取决于各个开发者的经验和知识, 所以会产生很多不同.而现实世界查找相关缺陷报告并进行链接的过程是非常耗时的, 很大程度上依赖开发者人工的搜索和定位.例如,
Moment项目中链接延迟(天)的分布
Distribution of link latency (day) in Moment project
因此, 我们需要能够用于链接GitHub项目中相关缺陷的自动化工具.尽管在传统的缺陷跟踪系统中已经提出了许多用于链接相关缺陷资源的自动化方法[
本文将相关缺陷自动关联问题抽象为推荐问题, 即对于开发者给出的查询缺陷, 我们的任务是自动化地推荐与该缺陷相关的其他缺陷.下面我们将详细地介绍我们的方法框架和技术细节.
本文方法的总体框架
Framework of our approach
● 步骤1:从每个缺陷文档中提取所有单词.
● 步骤2:删除停用词、数字、标点符号和其他非字母字符.
https://www.scientificpsychic.com/paice/paice.html)将剩余的单词转换为它们的根形式, 以减少特征维度并将相似的单词统一为一个共同的表示.例如, 像“interests”这样的复数名词将被替换为单数形式的“interest”, 诸如“ate”、“eaten”和“eating”等表示不同时态的形式将被替换为不定形式“eat”.]]>
基于预处理过的缺陷文档数据, 我们分别使用3种子方法(TF-IDF, WE和DE)来计算查询缺陷和每个候选缺陷之间的相似性得分(
●
●
●
最后, 我们将这3个分数相加, 得到每个缺陷对之间的最终相似度得分, 并根据这一得分推荐相关缺陷.其中, 得分越高说明两个缺陷报告之间的语义相似度越高.
接下来, 我们详细介绍3种子方法的技术细节.
TF-IDF(term frequency-inverse document frequency)是目前最流行的信息检索技术之一,
TF-IDF子方法的简要流程
Brief process of TF-IDF sub-method
特别地, 给定一个单词
其中,
Mikolov等人[
WE子方法的简要流程
Brief process of WE sub-method
因此, 给定一个单词集合
其中,
其中, 我们假设上下文单词和目标单词是相互独立的.此时, Pr(
其中,
之后, 我们将每个单词转换为固定长度的向量.这样, 每个文档可以表示为一个矩阵, 其中每行代表一个单词.考虑到不同的文档具有不同数量的单词, 我们通过平均文档包含的所有单词向量将文档矩阵转换为一个向量.特别地, 给定具有
最后, 对于给定的两个文档向量
为构建文档嵌入模型, 我们使用向量分布的bag of words(PV-DBOW)方法[
DE子方法的简要流程
Brief process of DE sub-method
具体地, 给定一组文档
其中, 概率Pr(
其中,
为了评估本文方法的有效性, 我们对GitHub项目进行了实证研究.下面我们分别从实验数据、Ground truth构建、评价指标和实验设置这4个方面进行阐述.
我们选择了两个著名的GitHub项目作为我们的研究对象:Moment(一个轻量级的JavaScript日期库)和Request(一个简化的HTTP请求客户端).我们选择它们主要有两个原因.
(1) 它们非常著名, 并且在GitHub上有很多stars和forks.
(2) 它们都是具有较长生命周期的活跃项目, 拥有众多经验丰富的开发者以及大量历史数据.
两个研究项目的基本数据统计
Basic descriptive statistics of studied two projects
项目 | 创建时间 | Release数 | Star数 | Fork数 | Commit数 | 缺陷报告数 |
Request | 2011-01-23 | 134 | 18 602 | 2 217 | 2 199 | 2 875 |
Moment | 2011-03-01 | 69 | 35 644 | 5 327 | 3 619 | 4 445 |
使用GitHub API, 我们收集了2018年4月之前两个项目的所有缺陷报告数据, 包括缺陷ID、缺陷状态(开放、关闭)、缺陷标题和描述等.
我们的Ground truth构建主要基于实际出现的缺陷URL链接, 即如果两个缺陷报告之间存在URL链接, 我们认为它们是相互关联的.具体来说, 我们定义缺陷
请注意:在本文工作中, 我们只考虑项目内部链接, 暂不考虑跨项目的缺陷链接.最后, 我们在Request项目中总共发现了1 110个缺陷链接对, 在Moment项目中发现了2 406个缺陷链接对.
为了评估我们方法的有效性, 我们使用了3个评价指标:Top-
●
● MAP:它被定义为所有评估查询结果获得的平均精度值(AvgPrec)的平均值.单个待查询缺陷
其中,
● MRR:它被定义为所有推荐结果对应的倒数排序(reciprocal rank, 简称RR)值的平均值, 其中, 单个查询缺陷
在我们的实验中, 我们将数据集内拥有实际链接的、所有已关闭的缺陷都视为待查询缺陷.给定一个待查询缺陷
在本节, 我们介绍具体的实验结果.根据设计的4个研究问题, 我们分别对每个研究问题的研究动机、分析方法、分析结果进行详细阐述.
在第1个研究问题中, 我们试图调查本文方法在缺陷自动化关联任务中的有效性.此外, 由于本文方法结合了TF-IDF和深度学习技术来计算两个GitHub缺陷文本之间的语义相似性, 我们希望分析这种混合式方法是否以及在多大程度上可以改善现有的方法和我们的3种子方法的性能.
因为目前并没有专门针对GitHub缺陷自动关联问题提出的方法, 所以我们将本文方法与传统缺陷跟踪系统中最先进的方法(NextBug[
(1) Request项目:
Request项目内各方法性能比较结果
Performance comparison results in Request project
我们发现, 本文方法可以实现较高的推荐性能.其中,
其次, 我们发现本文方法在所有评价指标上都优于NextBug.相对于NextBug的性能值, 本文方法在
此外我们发现, 与我们的3种子方法相比, 本文方法在所有指标方面也实现了更好的性能.相对于3种子方法性能值, 本文方法分别在
(2) Moment项目:
Moment项目内各方法性能比较结果
Performance comparison results in Moment project
我们同样发现, 本文方法可以实现较高的推荐性能.其中,
我们同样发现, 本文方法在所有评价指标上都优于NextBug.相对于NextBug的性能值, 本文方法分别在
此外, 我们同样发现, 与我们的3种子方法相比, 本文方法在所有指标方面也实现了更好的性能.相对于3种子方法性能值, 本文方法分别在
小结:总的来看, 本文方法可以很好地抽取缺陷文档内单词和文档的上下文信息, 在推荐性能上要优于现有的NextBug方法.此外, 混合式的推荐方法在性能上也优于单独的3种子方法.
在本文方法中, 我们从每个项目的缺陷文本中学习语料库和嵌入模型, 这些缺陷语料库反映了开发者报告缺陷的方式以及它们使用的词汇特点.因此, 在第2个研究问题中, 我们想要研究从不同项目的缺陷语料库中学习嵌入模型是否以及在何种程度上会影响本文方法的性能.对该问题的研究将有助于我们理解合适的语料库对于特定项目相关缺陷推荐任务的重要性.
我们通过交叉使用Request项目和Moment项目的缺陷语料库来验证本文方法的推荐性能, 即对于Request项目和Moment项目, 我们分别使用它们自身的缺陷语料库和另外一个项目的缺陷语料库来进行测试.
(1) Request项目:
Request项目内使用不同缺陷语料库的性能比较结果
Performance comparison results when using different issue corpus in Request project
我们发现, 对于Request项目, 与从它自己的缺陷语料库学习相比, 从其他项目的缺陷语料库中学习会降低本文方法的性能.具体而言, 在
(2) Moment项目:
Moment项目内使用不同缺陷语料库的性能比较结果
Performance comparison results when using different issue corpus in Moment project
我们发现, 对于Moment项目, 与从它自己的缺陷语料库学习相比, 从其他项目的缺陷语料库中学习同样会降低本文方法的性能.具体而言, 在
然而我们发现, 虽然使用其他项目的缺陷语料库时本文方法的性能会下降, 但本文方法仍然要优于基准方法NextBug.在Request项目中, 本文方法在各个评价指标上比NextBug有至少9.2%的提升; 在Moment项目中, 本文方法在各个评价指标上比NextBug有至少5.1%的提升.
小结:实验结果显示, 特定、合适的项目缺陷语料库可以给本文方法带来更好的性能.但是, 即便利用其他项目的缺陷语料库来学习嵌入模型, 本文方法的推荐结果仍然具有一定的可靠性.
因为本文方法所有的子方法(IF-IDF、WE和DE)都需要在一定规模的数据集上进行训练, 所以我们需要考虑训练集规模对于本文方法性能的影响.因此, 在第3个研究问题中, 我们希望分析本文方法在不同规模训练集下性能的变化.
我们分别根据Request项目和Moment项目的训练集规模, 按照10%, 20%, …, 100%的比例各分为10组训练集, 并对基于不同规模训练集训练得到的模型进行性能测试和比较.
Request项目内使用不同规模训练数据集时的性能比较结果
Performance comparison results when using different scale of training dataset in Request project
Moment项目内使用不同规模训练数据集时的性能比较结果
Performance comparison results when using different scale oftraining dataset in Moment project
另外, 我们发现, 随着训练集规模的增加, 在Request项目和Moment项目中, 各个指标值均有增长趋势.这表示大量的模型训练样本将有助于进一步提高本文方法的性能.
小结:本文方法的性能随着训练集规模不同会产生差异, 训练集规模越大, 本文方法的性能越好.下一步可以设计实现增量式的模型训练方法, 即每次只针对新加入的缺陷数据进行训练, 从而降低模型的训练成本.
因为本文方法所有的子方法(IF-IDF、WE和DE)都需要进行预处理和训练才能用于实际的推荐任务, 因此我们需要考虑模型训练的时间开销问题.因此, 在第4个研究问题中, 我们希望分析本文方法的训练时间开销, 以了解本文方法的实用性.
我们通过记录程序执行的开始时间和结束时间, 来获得本文方法的训练时间开销.实验运行在Windows 8 OS(64位), 8GB RAM, Intel(R)Core(TM)i5 2.6GHz的PC上.
在我们的训练过程中, Request项目包含了2 896个缺陷报告和223 595个单词(预处理后), 其词汇量(单个单词数)大小为129 750.而Moment项目包含了4 509个缺陷报告和287 757个单词, 其词汇量为153 673.
训练时间开销(min)
Training time cost in minutes
我们发现, 在两个项目中, TF-IDF子方法比其他两个子方法都需要更少的训练时间, 因为它只训练所有缺陷文本的单词语料库; 而WE和DE子方法都需要训练单词和文档的神经网络, 所以训练时间较长.从总体结果来看, 对于Request项目缺陷的训练时间开销仅为4min左右, 而对于Moment项目缺陷的训练时间开销只需要大约5min.
小结:训练时间开销结果表明, 本文方法可以被很快地离线训练, 且只需完成一次模型训练, 即可用于相关缺陷的关联推荐.较少的训练时间开销也说明本文方法具有很强的应用扩展性, 我们可以进一步基于本文方法研发相关工具和插件.
为了进一步分析本文方法, 我们对实际的缺陷链接对进行了案例分析.案例1(如
request/request#880和request/request#1005的案例分析
Case study of request/request#880 and request/request#1005
案例2(如
request/request#699和request/request#803的案例分析
Case study of request/request#699 and request/request#803
推荐结果显示, NextBug、TF-IDF和WE方法都无法捕获它们的链接关系, 而DE和本文方法都正确判断了它们之间的关联关系.这表明, 当两个相关缺陷没有太多文本信息或没有多个共同单词时, 文档嵌入模型可以很好地通过分析缺陷文档之间的上下文语义信息来帮助本文方法捕获缺陷之间的关联关系.
因此, 通过案例分析, 我们发现融合词嵌入模型和文档嵌入模型后, 本文方法可以更好地捕获两个相关缺陷之间的关联关系.
本文提出了一种基于嵌入模型的混合式相关缺陷关联方法, 用于在GitHub项目中自动链接相关缺陷.本文方法结合了传统的信息检索技术(TF-IDF)和深度学习技术(词嵌入模型和文档嵌入模型).在我们的实证验证中, 我们将本文方法与NextBug方法(传统缺陷跟踪系统中的最先进方法)以及其他3种基准方法(即我们的3种子方法)进行比较.实验结果表明, 本文提出的方法可以很好地融合缺陷语料库的上下文信息, 在性能上要优于基准方法.此外, 我们发现本文方法在项目特定的训练语料库下有助于提高嵌入模型的性能, 即使对于不同项目的缺陷语料库, 本文方法的推荐结果仍能表现一定的可靠性.并且, 较短的时间开销表明本文方法可以有效地进行离线训练, 具有很强的应用扩展性.
Dabbish L, Stuart C, Tsay J, Herbsleb J. Social coding in github: Transparency and collaboration in an opensoftware repository. In: Proc. of the ACM Conf. on Computer Supported Cooperative Work. ACM Press, 2012. 1277-1286.
Gharehyazie M, Ray B, Filkov V. Some from here, some from there: Cross-project code reuse in github. In: Proc. of the Int'l Conf. on Mining Software Repositories. IEEE Press, 2017. 291-301.
Zhang Y, Wang H, Yin G, Wang T, Yu Y. Exploring the use of@-mention to assist software development in github. In: Proc. of the 7th Asia-Pacific Symp. on Internetware. ACM Press, 2015. 83-92.
Zhang Y, Yu Y, Wang H, Vasilescu B, Filkov V. Within-Ecosystem issue linking: A large-scale study of rails. In: Proc. of the 7th Int'l Workshop on Software Mining. ACM Press, 2018. 12-19.
Zhang Y, Wang H, Yin G, Wang T, Yu Y. Social media in GitHub:The role of@-mention in assisting software development. Science China Information Sciences, 2017, 60(3):No.032102.
Wang T, Zhang Y, Yin G, Yu Y, Wang H. Who will become a long-term contributor? A prediction model based on the early phase behaviors. In: Proc. of the 10th Asia-Pacific Symp. on Internetware. ACM Press, 2018. No.9.
Sun C, Lo D, Khoo SC, Jiang J. Towards more accurate retrieval of duplicate bug reports. In: Proc. of the IEEE/ACM Int'l Conf. on Automated Software Engineering. IEEE Computer Society, 2011. 253-262.
Zhou J, Zhang H, Lo D. Where should the bugs be fixed? More accurate information retrieval-based buglocalization based on bug reports. In: Proc. of the Int'l Conf. on Software Engineering. IEEE Press, 2012. 14-24.
Rocha H, Valente MT, Marques-Neto H, Murphy GC. An empirical study on recommendations of similarbugs. In: Proc. of the IEEE Int'l Conf. on Software Analysis, Evolution, and Reengineering. IEEE, 2016. 46-56.
Le Q, Mikolov T. Distributed representations of sentences and documents. In: Proc. of the Int'l Conf. on Machine Learning. JMLR, 2014. 1188-1196.
https://arxiv.org/pdf/1301.3781.pdf]]>
Mikolov T, Sutskever I, Chen K, Corrado GS, Dean J. Distributed representations of words and phrases andtheir compositionality. In: Proc. of the Advances in Neural Information Processing Systems. NIPS, 2013. 3111-3119.
Xu B, Ye D, Xing Z, Xia X, Chen G, Li S. Predicting semantically linkable knowledge in developer onlineforums via convolutional neural network. In: Proc. of the Int'l Conf. on Automated Software Engineering. ACM Press, 2016. 51-62.
Ye X, Shen H, Ma X, Bunescu R, Liu C. From word embeddings to document similarities for improvedinformation retrieval in software engineering. In: Proc. of the Int'l Conf. on Software Engineering. ACM Press, 2016. 404-415.
Yang X, Lo D, Xia X, Bao L, Sun J. Combining word embedding with information retrieval to recommendsimilar bug reports. In: Proc. of the IEEE Int'l Symp. on Software Reliability Engineering. IEEE, 2016. 127-137.
Blei DM, Ng AY, Jordan MI. Latent dirichlet allocation. Journal of Machine Learning Research, 2003, 3(1):993-1022.
Dai AM, Olah C, Le QV. Document embedding with paragraph vectors. arXiv preprint arXiv: 1507.07998, 2015.
Crowston K, Scozzi B. Bug fixing practices within free/libre open source software development teams. Journal of Database Management, 2008, 19(2):1-30.
Jeong G, Kim S, Zimmermann T. Improving bug triage with bug tossing graphs. In: Proc. of the ACM SIGSOFT Int'l Symp. on Foundations of Software Engineering. ACM Press, 2009. 111-120.
Anvik J, Hiew L, Murphy GC. Who should fix this bug? In: Proc. of the Int'l Conf. on Software Engineering. ACM Press, 2006. 361-370.
Guo PJ, Zimmermann T, Nagappan N, Murphy B. Characterizing and predicting which bugs get fixed: Anempirical study of Microsoft windows. In: Proc. of the Int'l Conf. on Software Engineering. IEEE, 2010. 495-504.
Zimmermann T, Nagappan N, Guo PJ, Murphy B. Characterizing and predicting which bugs get reopened. In: Proc. of the Int'l Conf. on Software Engineering. IEEE, 2012. 1074-1083.
Bachmann A, Bird C, Rahman F, Devanbu P, Bernstein A. The missing links: Bugs and bug-fix commits. In: Proc. of the ACM SIGSOFT Int'l Symp. on Foundations of Software Engineering. ACM Press, 2010. 97-106.
Ye X, Bunescu R, Liu C. Learning to rank relevant files for bug reports using domain knowledge. In: Proc. of the ACM SIGSOFT Int'l Symp. on Foundations of Software Engineering. ACM Press, 2014. 689-699.
Zhang Y, Yin G, Wang T, Yu Y, Wang H. Evaluating bug severity using crowd-based knowledge: Anexploratory study. In: Proc. of the Asia-Pacific Symp. on Internetware. ACM Press, 2015. 70-73.
Wang X, Zhang L, Xie T, Anvik J, Sun J. An approach to detecting duplicate bug reports using naturallanguage and execution information. In: Proc. of the ACM/IEEE Int'l Conf. on Software Engineering. IEEE, 2008. 461-470.
Zhang Y, Yin G, Yu Y, Wang H. A exploratory study of@-mention in github's pull-requests. In: Proc. of the 21st Asia-Pacific Software Engineering Conf. IEEE, 2014. 343-350.