题目:Combining Deep Learning with Information Retrieval to Localize Buggy Files for Bug Reports
作者:An Ngoc Lam, Anh Tuan Nguyen, Hoan Anh Nguyen, and Tien N. Nguyen
单位:Iowa State University, USA
出版:ASE2015
 
解决的问题

1、自动通过bug报告定位bug文件。
2、解决可能出现的bug报告和源码的技术技术术语和自然语言词汇不匹配问题。
3、DNN难以扩展问题。

 
方案

本文提出HyLoc,将改进的VSMDNN联系在一起。rVSM提取特征来查看文本相似度,DNN用于测量他们之间的相关性,学习将bug报告的术语和源码中不同的代码token、术语联系到一起,其中这些术语,token频繁出现在报告和对应bug文件中。
l  为了从bug报告和源码的关联中提取特征。使用了DNNDNN包含两个分开的空间。降维后,将特征喂给两个DNN
1、一个DNN学习bug报告文本和代码文本token(例如注释)的联系
2、另一个DNN学习bug报告文本和代码token(例如标识符,API
l  针对DNN的扩展性的限制问题,本文采用基于DNN的自动编码机,减少特征空间维度,且保留重要信息,删除多余信息。
l  除了rVSM文本相似特征和DNN的关联特征,本文还整合了第三种特征,元数据特征。提取bug修复历史如YeKim的做法。例如,最近修复的文件比很久之前修复的文件仍包含bug的可能性更大。因此,计算文件代码修复近因得分,将其作为元数据特征。
l  为了将这三个类型的特征联系起来,本文使用了DNN,作为非线性特征连接器,来计算针对一个bug报告的文件的最终得分。

贡献点
1HyLoc,是bug定位系统,将IRDNN结合的模型。同时,本位使用了降维技术和特征连接技术
2、实验表明HyLoc比现有方法有改进。
 
方法
bug定位组合模型
A、关键设计方案


1、使用DNN作为词汇差异的桥梁。将bug报告和源码中不同类型的特征在不同空间中处理。为了计算bug报告和文件间的相关度,本文认为报告是文本,提取文本token。对于源码,本文提取一下特征1)标识符2APIAPI方法调用和类)3)文本注释4)代码中使用的API的文本描述。本文将不同类型的特征分到俩个空间,建立特征向量。使用两个DNN:一个是学习bug报告文本和源码文本token的相关性,一个是学习bug报告文本和代码token的相关性。这两个空间的基本原理是DNN通过不同性质的特征的权重来识别这种关系。
2、使用DNN进行特征组合。将DNNrVSM,以及bug修复历史组合到一起。通过充分的训练数据,层中的权重映射出特征的权重。且DNN的非线性函数优于线性。
3、使用DNN进行降维。训练DNN模型,可以编码原始特征向量,最大化原始向量和解码向量的相似性,通过编码。
B、模型架构

图片:1.png



1是整个模型架构。通过训练,得到bug报告和它的对应一个bug文件的正向对。同时也可以创建负向对,即与报告文本相似但是没有bug的文件。
对于每一对,提取特征,建立特征向量。每个向量的元素都表示特征类型中特征的重要性的值。使用相应的自动编码器DNN将每种类型特征的特征向量降维。降维后,将其喂给DNN学习对于每个bug报告的bug文件。DNN相关性评估输出叫做相关性分数,喂给基于DNN的特征组合器,学习权重,将三种类型组合在一起。特征组合器的权重有助于设置特征在确定bug报告的bug文件中的重要性。需要注意相关性评估和特征组合的所有DNN每一层都可以独立训练,可以认为是无监督的RBM
对于给定bug报告B,将其与每一个源码文件f配对。特征提取,建立特征向量对,对于B,得到最终分数。分数越高表示f约可能是B表示的bug

基于DNN的相关性评估

图片:2.png



2表示DNN的特征降维和相关性评估。特征向量喂给映射DNN,映射DNN输出串联到一个大的向量中,作为DNN相关性评估模型的输入。评估模型的输出是相关性分数,本文使用两个DNN来学习相关性:
1、第一个DNN学习bug报告和源码特征的文本特征相关性。叫做DNN BR-to-Code DNN.
2、第二个DNN,学习bug报告和注释和API描述的文本特征相关性,叫做DNN BR-to-Text
DNN
分开的原因是第一个是源码,第二个是自然语言。bug报告可能都包含。这两个DNN是区分现有方法的关键。对于每个相关性评估的DNN,使用RBM,且只有一个隐藏层。两个DNN的输出喂给相关性输出模型,训练中,它的输出分数0-1,1表示相关。

实验

A、实验设置和指标
数据集:使用了和Ye相同的数据集,如表1

图片:3.png



bug报告中有源码链接和bug文件,API文档。http://dx.doi.org/10.6084/m9.figshare.951967(简直完美)。
注意:由于源码文件数量很大,不可能全部训练,则选择训练文本相似度在前300的作为负样本。在预测界定,仍然计算了项目中所有文件的分数和排名。本文按照bug报告时间戳按照时间来排序。对于除最小项目AspectJ之外的所有项目,我们将bug报告分为10个fold,其中fold1是最旧的,fold10是最新的。用foldi训练,用foldi+1测试。对于AspectJ,将报告分为3folds。
本文使用了三种指标来评估。
1、Top-ranked
accuracy。如果给定bug报告的bug文件之一在top-k列表中,则算作一击,否则认为misss。Top-k accuracy是所有fold中的hit数占总建议数的百分比。
2、MAP
3、MRR
B、组件和参数对准确度的影响
评估了不同组件和参数对准确度的影响,本文选在了Tomcat
1) 不同组件的准确度:如图3,图3中,标有DNN的线显示了模型的准确性,仅使用DNN来计算bug-report-to-file相关性作为唯一的功能。

图片:4.png



为了更好的说明DNN,rVSM和DNN+rVSM,本文使用了文氏图,图4。

图片:5.png



本文的目标是评估有多少重叠面积DNN + rVSM组合模型和DNN和rVSM模型的正确结果。
3)两个空间中连接术语:NLP中,DNN可以映射和链接词汇,这些词汇在语义或者语法上有相近的位置在连续的特征空间中(至少在一些维度上)
本文对图2模型进行训练后,使用所有bug报告中的每一个文本token作为输入,将它与源码中每个代码token和注释、文档中的文本token配对。本文使用DNN 计算每个对的输出分数,最后,对bug报告中每一个文本token,产生了源码中相关token列表,按照相关性分数排序。表2展示了一些相关术语在bug报告25060,尽管使用了不同词汇术语,但是DNN可以将它们组合在一起。尽管使用了不同的词汇术语(例如context对ctx和envCtx),但是CNN可以将他们联系起来。初次之外,术语resource没有在bug文件StandardContext.java中出现,然而DNN可以将它与文件中例如virtualClasspath,changeSessID,setSecureClass联系在一起。由于他们频繁在bug报告和bug源码中成对出现,所以DNN可以定位和排列这个bug文件为最高。

图片:6.png



4)特征组合比较:我了比较特征组合通过DNN和通过learn-to-rank的区别,本文建立了另一个实验模型,三种类型的特征通过learn-to-rank连接,比较准确度,结果显示,top-1精确度,DNN高于LRCombine22%,而top-5高10%,结果表明,非线性组合比线性的效果好。
C、准确度比较
比较HyLoc与最新的方法,比如朴素贝叶斯,LR,BugLocator。使用Ye数据集

图片:7.png


D、效率

图片:8.png

posted on 2017-12-10 19:25  gracias_lucy  阅读(336)  评论(0编辑  收藏  举报