缺陷定位是软件工程研究最活跃的领域之一.大部分软件缺陷都会被提交到类似于Bugzilla和Jira的缺陷追踪系统中.由于提交的缺陷报告数量过多,开发人员不能及时处理,因而迫切需要一个自动化工具来帮助开发人员识别缺陷相关源代码文件.研究人员已提出了大量缺陷定位技术.基于信息检索的软件缺陷定位技术(information retrieval-based bug localization,简称IRBL)利用了缺陷报告的文本特性,并且由于计算成本低、对不同的程序语言更具普适性而成为缺陷定位领域的研究热点,取得了一系列研究成果.然而,IRBL技术也在数据预处理、相似度计算和工程应用等方面存在诸多挑战.鉴于此,对现有的IRBL技术进行梳理总结,主要内容包括:(1)梳理了IRBL中数据预处理的过程和信息检索通用方法;(2)对IRBL技术中利用的数据特征进行了详细的分类和总结;(3)总结了技术评估中使用的性能评估指标;(4)归纳出了IRBL技术的关键问题;(5)展望了IRBL技术的未来发展.
Bug localization is one of the most active domains in software engineering. Most of the bugs are submitted to bug tracker systems, e.g., Bugzilla and Jira. Because of the large number of the submitted bug reports, it is difficult for developers to resolve these defects in time. Therefore, an automatic tool to help developers to identify bug related files is needed. Many bug localization technologies have been proposed by researchers. Taking advantages of the text nature of bug report, information retrieval technologies are adopted to solve bug localization problems. Due to the low computing cost and the applicability to various programming languages, information retrieval-based bug localization (IRBL) technologies become hot spots in bug localization and acquire a series of achievements. However, challenges still exist in data preprocessing, similarity calculation, and engineering application. Therefore, current IRBL technologies are summarized. The contributions of this study are: (1) the data preprocess methods and general information retrieval algorithms are summarized; (2) the feature categories are concluded and classified; (3) the performance measures are concluded; (4) the current problems in IRBL technologies are highlighted; and (5) the trends of IRBL technologies are outlooked.
在软件开发过程中, 由于软件代码日益复杂, 软件缺陷通常无法避免.根据IEEE标准定义, 软件缺陷是指软件产品中存在的, 使产品无法满足软件需求及其规格要求, 需要修复的瑕疵、问题[
为了对缺陷修复过程进行管理, 缺陷跟踪系统(bug tracking system), 如Bugzilla等, 被广泛应用到现代软件系统[
为了修复缺陷, 开发者需要根据缺陷报告描述, 确定该缺陷的源代码位置, 即软件缺陷定位[
● 动态缺陷定位技术是指通过分析程序运行时执行行为(如运行出错的测试用例)判断缺陷位置[
● 静态缺陷定位技术不需要执行测试用例, 利用源代码静态分析(如函数调用关系、数据依赖关系、类型约束等), 对比一系列编程规则(如程序语言语法、编程规范)判断缺陷位置[
当前, 静态缺陷定位研究的一类主流方法是基于信息检索的软件缺陷定位(information retrieval-based bug localization, 简称IRBL)技术, 也是本文重点关注的研究问题.其目的在于利用缺陷报告内容, 半自动或全自动地确定相关源代码文件或函数, 从而降低开发成本, 提高开发效率.信息检索(information retrieval, 简称IR)是指给定查询, 从文档库中获取与该查询相关文档的过程.在IRBL技术中, 一个新提交的缺陷报告被看作为一次查询, 软件系统所有源文件或函数被看作为文档库, 从而将缺陷定位规约为信息检索问题.其基本思路是:对文档库中每个文档(文件或函数), 利用一个或多个特征(如词袋(bag of words)特征)量化表示该文档与给定缺陷报告, 计算二者相关度分数(如文本相似度), 并整合这些相关度分数, 最终对文档库所有文档按照与缺陷报告相关度高低排序.相比已有缺陷定位技术, 应用IR技术进行缺陷定位具有以下优势.
(1) 与基于动态程序分析的缺陷定位相比, IRBL技术计算成本更低[
(2) 与传统基于静态程序分析的缺陷定位相比, IRBL技术对程序语言更具普遍性; 同时, IRBL技术针对性更强, 能够针对给定缺陷报告, 充分利用缺陷报告提供的信息, 分析该缺陷所在代码位置.
然而, IRBL技术也存在着作为静态缺陷定位方法的不足.目前, IRBL技术只能定位到方法粒度, 无法定位到具体代码行, 而且缺陷定位准确度受缺陷报告质量影响较大, 缺陷报告由人工整理的缺陷信息组成, 缺陷提出者的专业水平高低导致缺陷报告质量参差不齐; 而如何精准地将缺陷信息从缺陷报告中提取并加以利用, 也是IRBL技术的难点之一.
基于上述优劣势, IRBL技术得到软件工程研究者广泛关注, 产生了一批IRBL研究成果, 其中, Lukins等人于2008年ICPC论文首次提出直接基于IR方法的缺陷定位技术[
尽管IRBL技术研究者提出了大量有价值的理论与技术, 但缺乏对现有理论与技术的统一与整合, 尚无针对目前IRBL技术研究工作的梳理与归纳.鉴于此, 本文拟针对基于信息检索缺陷定位技术的研究进展, 从该技术使用的软件数据源、信息检索方法、相关度计算与整合以及技术评估等角度进行梳理、归纳和总结; 同时, 本文总结了当前IRBL技术存在的关键难点和未来发展方向.
本文采用以下流程完成对文献进行索引与选取.
● 首先定义文献选取标准:该文献针对IRBL技术中的相关度计算与整合以及技术评估等方面提出新理论、新技术, 或者该文献对IRBL技术相关理论技术提供实证研究支持, 或者对其应用进行实证研究讨论.
● 此外, 该文献应公开发表在期刊、会议、技术报告或书籍中.
依据以上标准, 本文通过以下3个步骤对文献进行检索和筛选.
(1) 本文文献搜索主要通过ACM Digtal Library、IEEE Xplore Digital Library、Springer Link Online Library以及Google Scholar等.论文检索的关键字包括Information Retrieval Based Bug Localization、IR-Based Bug Localization、Text Retrieval Based Bug Localization、Query Bug Localization、IR-Based Fault Localization等, 同时在标题、摘要、关键词和索引中进行检索.
(2) 本文对软件工程领域的主要期刊与会议进行在线搜索, 具体包括TOSEM、TSE、EMSE、ASEJ、JSEP、IST、ASC、ICSE、FSE、ASE、ISSTA、ICSM/ICSME、MSR、ICPC、WCRE、APSEC、QRS等.
(3) 本文基于上述步骤所获取的文献集合, 对文献逐一查看, 从文献的参考文献中进一步筛选出与基于信息检索的缺陷定位理论相关的文献.
通过以上文献索引与选取, 共计60篇文献纳入本文后续文献总结中.其中, 有45篇为IRBL技术的相关度计算与整合以及技术评估方法等提供了新理论和新思路; 另外15篇通过实证研究, 从IRBL技术可用性、可重复性以及其面临挑战等方面展开探讨.
文献分布
distribution
文献发表年份统计
Statistics on literature publication year
综述框架
Overview framework
本文第2节介绍缺陷定位的例子, 然后引出IRBL的通用步骤, 对IRBL技术中的数据预处理的通用方法进行梳理.第3节介绍通用的信息检索技术.第4节从不同数据源出发, 对IRBL新技术新理论研究进展进行系统分析和比较.第5节介绍用于评估IRBL技术性能的常用评价指标.第6节总结目前IRBL技术研究面临的关键问题, 包括数据噪音处理、多源数据特征提取、技术重现以及工程实践等方面.第7节展望IRBL技术未来发展趋势.第8节对本文进行总结.
本节介绍关于基于信息检索的缺陷定位技术的预备知识.具体而言, 本文在第2.1节通过展示缺陷定位的例子, 来进一步帮助读者理解缺陷定位问题; 在第2.2节中描述了基于信息检索的缺陷定位方法的通用步骤; 在第2.3节梳理了数据预处理的一般方法.
缺陷报告(ID:184845)及其Eclipse项目中的相关代码
Bug report (ID: 184845) and related code in Eclipse project
然而, 在软件开发的过程中, 开发人员经常收到这样的缺陷报告:缺陷报告描述的语言和程序源码中的语言并不是完全相同, 汇报缺陷报告的人员使用了和源码中不同的词汇描述了他们所遇到的问题, 因而开发人员不得不跨越两种描述之间的鸿沟来解决问题.例如,
缺陷报告(ID:234568)及其Eclipse源码中的相关代码
Bug report (ID: 234568) and related code in Eclipse project
基于信息检索的缺陷定位技术一般研究框架
General research framework of bug localization technology based on information retrieval
在数据集的构建过程中, 为了评估IRBL技术的性能, 研究人员需要收集已经修复的缺陷及其对应的源代码文件.研究人员通过以下启发式规则来建立缺陷报告和源代码文件之间的链接.
(1) 扫描所有提交信息, 检查是否有按照“issue618”、“bug1111”等规则标记的提交记录.
(2) 每个提交记录修改的文件即为改缺陷报告对应的源代码文件.
收集缺陷报告极其相应的源代码文件后, 需要进行语料库创建.为此, 需要对每个源代码文件进行词法分析, 并创建一个词法符号的向量.一些词汇, 比如保留字(如int、double、char等)、分隔符、运算符在所有程序中都是一致的, 应该被剔除.英语停用词(如he(他), she(她), the(这))也应被剔除.很多在程序中定义的变量实际上是单词的串联, 例如,
● 变量
● 变量
这些复合符号应被分隔成单独的符号.许多符号具有相同的词根形式.例如, “reads”“reading”和“read”有着相同的词根“read”.我们使用Porter词干算法[
创建语料库后, 语料库中的所有文件都被建立索引.通过使用这些索引, 研究人员就可以快速定位到包含被查询词的文件, 再根据它们的相关性对文件进行排名.
缺陷定位将整个缺陷报告作为查询的内容来构造查询语句, 为此, 需要从缺陷报告的标题和描述中提取单词, 删除停用词, 将每个单词转化为词根形式, 并使用它来搜索已建好索引的源代码语料库中的相关文件.
由于缺陷报告的文本特性, 许多信息检索的通用方法在IRBL技术中得到了应用.研究人员不仅利用这些方法进行缺陷报告和源代码文件的相似度计算, 还利用这些算法来提取其他数据源的特征, 例如相似缺陷报告等.在本节中, 本文分别介绍了3种信息检索的通用基本方法, 即向量空间模型、主题模型和词嵌入, 它们是构建缺陷定位工具的基础; 在第3.4节介绍了相似性度量方法.
向量空间模型(VSM)是IRBL中一种常用的向量表示算法, 许多研究人员都利用VSM模型来表征缺陷报告和源代码[
其中,
●
●
为了给稀有的词更高的权重, 逆文本频率等于该词文档频率(
给定查询语句和语料库, VSM首先将查询语句和语料库中的每个文档转化成词袋; 然后, 它对词袋中的每个词计算
隐含狄利克雷分布(latent Dirichlet allocation, 简称LDA)是一种主题建模的常用算法, 它是一种词袋模型, 认为一篇文档可以包含多个主题, 文档中的每个词都是由某个主题生成的.LDA给出文档属于每个主题的概率分布, 同时给出每个主题上词的概率分布.许多研究人员都利用LDA来表示缺陷报告和源代码[
LDA的输入为:作为训练集的文本语料库和一系列的参数, 包括主题的数量(
通过这种方式, 将文档
词的分布式是一种深度学习方法, 表示假设出现在相似上下文中的词往往具有相似的含义[
词嵌入通常使用基于神经网络的语言模型来学习得到.Mikolov等人[
确定性模型如VSM、词嵌入等模型, 对文档和查询的规范化表示通常使用余弦相似性度量.
其中,
在IRBL技术中, 研究人员发现, 经典VSM在排序时对待不同文本不是一视同仁的:越短的文本更容易排名靠前, 越长的文本通常具有较低的相似性, 因而很难排名靠前.然而在缺陷定位算法中, 较大的源文件往往更容易包含缺陷.为此, 他们提出了修订的向量空间模型(rVSM)[
修订后的向量空间模型是IRBL技术中常用的相似度计算方法.研究人员经常使用rVSM来衡量缺陷报告和源码之间的相似性[
关于概率模型如UM, LDA和BM25等模型, 研究人员一般利用似然概率和KL散度来度量相似性.
● 似然概率
●
对于LDA, 如果
在IRBL技术中, 除了当前缺陷报告和代码文件, 研究人员利用了软件开发中的多种数据源来协助进行缺陷定位.该步骤是IRBL技术的关键步骤, 本文分别从不同的数据源对这些IRBL算法进行总结.具体而言, 研究人员利用以下几种数据特征:当前缺陷报告、缺陷跟踪仓库、版本控制仓库、堆栈跟踪信息、其他软件开发数据.在下文将介绍这些IRBL算法和其中使用的主要信息检索的技术.
这一类IRBL算法从当前缺陷报告和当前版本的源代码文件中提取有效信息.具体而言, 研究人员利用了: (1)代码的文本特征; (2)代码的结构信息进行分析.为了表征当前版本的文件信息, 其中很多算法利用历史数据进行训练.
这一类IRBL利用缺陷报告的文本型特征, 将源代码文件也视为单纯的文本文件, 运用通用的信息检索方法进行缺陷的定位.在最初的IRBL技术中, 研究人员仅利用缺陷报告和源代码文件进行定位[
Thomas等人[
后来的IRBL工作中, 也都会使用以上方法或其组合来对当前缺陷报告和代码文件进行相似度的计算.
研究人员发现, 源代码文件中不仅有丰富的文本信息, 还有代码特有的结构信息, 例如代码注释、类名、方法名和变量名等.在IRBL中, 利用这些结构信息可以有效地区分不同的代码文件, 带来精度上的提升.
Bread等人将LDA模型和源代码中的结构信息结合起来进行缺陷定位[
Sisman等人同样利用了代码的结构信息[
虽然Sisman等人利用了代码的空间结构, 并且通过查询重构的方式提升了IRBL技术的性能.但是研究人员更期望一种通用的算法, 能够利用代码的结构信息度量缺陷报告和源代码文件的相似程度.Saha等人提出的工具BLUiR中, 分别利用了代码文件中的4个代码结构的字段(类、方法、变量和注释), 同时将缺陷报告分成标题和正文两个部分, 分别与代码的不同类别字段进行匹配, 利用VSM算法计算相似度, 然后将多个相似度值进行带权重的整合[
另外, Takahashi等人[
这一类方法利用缺陷跟踪仓库中已修复的相似缺陷报告来进行协同过滤.研究人员认为, 相似的缺陷报告通常和相似的缺陷文件相关联[
Zhou等人[
Davies等人[
Gay等人[
研究人员从多个角度, 利用版本控制仓库中的信息.许多研究人员认为:如果一个文件多次修改以修复同一个缺陷或实现同一个功能, 那么这个文件就更有可能是有缺陷的.Sisman等人[
Wang等人[
其中, 参数
Tantithamthavorn等人[
Shi等人[
有时, 缺陷报告包含失败任务堆栈跟踪信息, 如
Eclipse中#110370缺陷报告, 其中包含了堆栈跟踪信息
Bug report #110370 in Eclipse, which contains stack trace information
堆栈跟踪信息显示了在崩溃之前执行的指令序列[
许多利用堆栈跟踪信息的算法都利用了这一算法[
Wu等人[
Moreno等人[
除此之外, 研究人员还利用堆栈跟踪信息来减少IRBL算法的搜索空间.这是因为如果一个程序元素没有出现在出现缺陷的堆栈信息中, 那么就不可能是缺陷.Dao等人[
除了缺陷报告和项目源码外, 很多算法还考虑了其他的软件开发相关数据资源.许多基于信息检索的缺陷定位算法结合了对这些数据资源的利用和处理, 来提高准确性.
(1) 报告者信息:Wang等人[
(2) API库的描述:Ye等人利用一系列领域内的知识来对缺陷报告相关的文件进行排名[
(3) 项目需求信息:Rath等人[
(4) 提交信息:Wen等人[
(5) 系统跟踪日志:Zhou等人[
(6) 测试用例:Le等人[
近年来, 研究人员通常组合上述数据特征以提升IRBL技术的性能.例如, Wang等人[
为此, 数据特征相应的分数通常与预设的权重值线性组合.例如, 线性组合两个特征分数
为了确定线性组合的系数, 一般
除此之外, Ye等人[
Wang等人在AmaLgam的基础上随后还提出了一种启发式近似最优组合模型[
Thung等人将缺陷定位技术集成到流行的Bugzilla缺陷跟踪系统中[
Wang等人提出一个实验平台, 允许研究人员可比较和可重复地评估缺陷定位技术[
Le等人提出了一种技术, 可以预测基于信息检索的缺陷定位技术对特定缺陷报告的有效性[
Xia等人[
与上述专注于找到有缺陷源代码文件的研究不同, Wen等人提出了LOCUS, 它不仅可以找到有缺陷的源代码文件, 还可以找到缺陷是如何产生的[
不仅在软件工程领域有很多IRBL研究, 在人工智能领域, 也有学者进行过IRBL技术相关的研究.Nath等人[
Huo等人[
Gupta等人提出一种基于深度学习的技术NeuralBugLocator[
在IRBL技术的研究中, 为了验证和对比技术的效果, 研究人员需要对提出的新技术进行验证, 用不同的评价指标对技术的性能进行量化评估.本节将详细介绍在IRBL技术中使用的评价指标.
前
平均倒数排名(MRR)是一个常用的信息检索技术评价指标[
其中,
平均精度均值(MAP)是衡量性能的标量, 它已经被证明具有特别好的辨别力和稳定性来评估排序技术[
其中,
然后, 一组缺陷报告BR的MAP是BR中所有缺陷报告的平均精度的平均值.
在基于信息检索的缺陷定位中, 为了修复缺陷, 需要更改一系列源代码文件.使用MAP来测量基于信息检索的缺陷定位技术找到所有相关源代码文件的平均性能.MAP值越高, 基于信息检索的缺陷定位技术性能越好.
在本文中, 对于单个缺陷报告
虽然IRBL技术近年来获得了研究人员的大量关注, 取得了诸多进展, 但是仍然存在一些亟待解决的关键问题.本节从数据噪音处理、多源数据特征提取、技术重现和工程实践这4个方面详述目前IRBL技术中存在的问题.
(1) 缺陷报告的误分类:现有的IRBL技术利用缺陷跟踪系统中已经修复的缺陷进行缺陷的定位, 然而最近有研究人员发现, 存在很多缺陷跟踪系统中的缺陷报告反映的并不是缺陷, 而是代码的重构、增强请求, 或是文档的更改等等, 这些不是缺陷的缺陷报告实际上是误分类的缺陷报告[
(2) 缺陷文件的误分类:现有的IRBL技术在建立缺陷报告和有缺陷文件的关联时, 首先根据提交信息, 通过启发式规则找到修复某一缺陷的提交记录; 然后, 把这一提交路中所有修改的文件视为这一缺陷对应的缺陷文件.然而最近的研究发现, 在修复缺陷的提交中, 很多文件的变更是非必需的, 即不是用来修改缺陷的[
(3) 缺陷报告的质量:现有的IRBL技术将缺陷报告当作查询语句, 然后对所有的源代码文件进行信息检索.然而, 不是所有的缺陷报告都可以能够用来进行缺陷定位的[
现有的IRBL算法从多种软件开发文档中提取多种特征进行组合来提升IRBL算法的效果, 包括源代码文件、缺陷报告、版本控制仓库、缺陷跟踪仓库、开发人员信息等等.然而这些信息的存在形式不同, IRBL算法对不同形式信息源的数据信息进行充分的利用是一大技术难点.
此外, 在IRBL算法中, 相关度的计算模型上存在不同的策略.对于相同的数据源, 不同的研究人员采用不同的算法.例如, 在如何提取文本中的信息时, 有些研究人员赞成使用简单的VSM模型[
虽然缺陷定位算法被广泛研究, 但是研究人员仍然质疑IRBL算法的有效性.这是因为, 大多数的缺陷存在于多行或多个程序方法中[
尽管目前存在相关的工作试图将IRBL技术引至工业界[
● IRBL算法是否可以有效地帮助开发人员进行缺陷定位.
高质量的缺陷报告可以帮助开发者有效地进行缺陷定位, 但并不一定可以有效地帮助IRBL算法实现更好的效果[
● 现有的IRBL算法对于其他编程语言的项目的有效性还未可知.
现有的IRBL算法针对同一种编程语言的项目(Java).然而在实际的开发过程中, 开发者可能利用不同的语言完成不同的任务, 或者在同一个项目中使用不同的编程语言.尽管研究人员已经研究了某些算法在某些语言上的适用性, 但同时也指出了处理不同的语言是挑战.Saha等人研究了缺陷定位技术是否适用于C项目[
● 缺乏IRBL算法训练环境.
IRBL算法需要利用历史已修复的缺陷对算法进行训练, 如果在实际的工程实践中, 已修复的缺陷记录的与之对应的源码文件不够准确, 或项目历史数据缺失, 将对模型的训练带来巨大的挑战.
针对上一节所总结的关键问题, 本节围绕数据集构建、复杂模型构建、工程实践和缺陷修复这4个方面, 展望IRBL缺陷定位研究的未来趋势.
实证研究表明, 现有的IRBL算法所采用的数据集方法存在多种多样的噪音, 降低了数据集质量, 导致IRBL模型训练环境不够准确, 例如缺陷的误分类[
如今, 大型软件项目开发和维护过程大多会利用多个系统进行, 例如利用缺陷跟踪系统、版本控制系统、代码审查系统等.现有的IRBL技术已经利用了这些系统中的多种特征来提高算法的有效性, 例如利用已经修复的相似缺陷[
现有的IRBL算法大多处于实验研究阶段, 想要在工程实践中大量应用还存在诸多挑战.Wang等人研究了基于信息检索的缺陷定位工具在现实场景中的有效性[
缺陷定位的一个热点应用领域是对下一步的缺陷修复提供指导信息.目前, IRBL技术应用到缺陷修复还存在一些难点问题:首先, IRBL技术的定位准确度还不够高, 而且定位粒度较粗糙, 只能定位到方法层面, 开发人员只能按照给定的推荐结果列表逐一审查, 仍然需要花费大量精力找到缺陷具体位置并修复; 其次, 人工提交的缺陷报告质量存在较大差异, 在影响缺陷定位性能的同时, 也影响了开发人员对于缺陷的理解, 造成的理解偏差进一步增大了缺陷修复的难度.未来的研究若能自动化生成缺陷报告, 自动化整理缺陷相关信息, 从而提高缺陷报告质量, 将大大降低IRBL技术数据处理的难度, 进一步提高IRBL技术定位的准确度和通用性, 同时也能帮助开发人员快速理解缺陷, 促进缺陷自动化修复的研究.另一方面, 历史缺陷报告和修复记录蕴含着大量修复指导信息, 根据代码的文本特征和结构特征搜索相似的历史缺陷代码, 或者根据缺陷报告的文本特征和非文本特征搜索相似的历史缺陷报告, 都能检索到相似缺陷.然后追溯修复该历史缺陷的软件变更, 获取修复代码, 进而综合当前缺陷的上下文信息和缺陷定位的结果, 可推荐给开发人员备选缺陷修复代码列表, 帮助他们理解并快速修复缺陷.
近年来, IRBL由于技术计算成本低, 对程序语言更具有普适性, 成为缺陷定位领域的研究热点.本文围绕IRBL技术的数据预处理、相关度计算与整合、模型评估等方面, 梳理并总结了当前的研究进展和关键问题, 并展望了未来的研究趋势.主要工作如下:(1)梳理了IRBL中数据预处理的过程和信息检索通用方法; (2)对IRBL技术中利用的数据特征进行了详细的分类和总结; (3)总结了技术评估中使用的性能评估指标; (4)归纳出了IRBL技术的关键问题; (5)最后展望了IRBL技术的未来发展.
IEEE. IEEE Standard Classification for Software Anomalies. IEEE Std 1044-2009(Revision of IEEE Std 1044-1993), 2010. 1-23.
Tassey G. The economic impacts of inadequate infrastructure for software testing. Technical Report, 7007(011), National Institute of Standards and Technology, 2002.
LaToza TD, Venolia G, DeLine R. Maintaining mental models: A study of developer work habits. In: Proc. of the 28th Int'l Conf. on Software Engineering (ICSE 2006). ACM, 2006. 492-501.
Serrano N, Ciordia I. Bugzilla, ITracker, and other bug trackers. IEEE Software, 2005, 22(2):11-13.
Fan Y, Xia X, Lo D, Hassan AE. Chaff from the wheat:Characterizing and determining valid bug reports. IEEE Trans. on Software Engineering, 2018. 1.
Wong WE, Gao R, Li Y, Abreu R, Wotawa F. A survey on software fault localization. IEEE Trans. on Software Engineering, 2016, 42(8):707-740.
Lucia L, Thung F, Lo D, Jiang L. Are faults localizable? In: Proc. of the 20129th IEEE Working Conf. on Mining Software Repositories (MSR). 2012. 74-77.
Renieres M, Reiss SP. Fault localization with nearest neighbor queries. In: Proc. of the 18th IEEE Int'l Conf. on Automated Software Engineering. 2003. 30-39.
Kochhar PS, Le TDB, Lo D. It's not a bug, it's a feature: Does misclassification affect bug localization? In: Proc. of the 11th Working Conf. on Mining Software Repositories. ACM, 2014. 296-299.
Chen X, Ju XL, Wen WZ, Gu Q. Review of dynamic fault localization approaches based on program spectrum. Ruan Jian Xue Bao/Journal of Software, 2015, 26(2):390-412(in Chinese with English abstract). http://www.jos.org.cn/1000-9825/4708.htm [doi:10.13328/j.cnki.jos.004708]
陈翔, 鞠小林, 文万志, 顾庆.基于程序频谱的动态缺陷定位方法研究.软件学报, 2015, 26(2):390-412. http://www.jos.org.cn/1000-9825/4708.htm [doi:10.13328/j.cnki.jos.004708]
Saha RK, Lease M, Khurshid S, Perry DE. Improving bug localization using structured information retrieval. In: Proc. of the 28th IEEE/ACM Int'l Conf. on Automated Software Engineering (ASE). IEEE, 2013. 345-355.
Lukins SK, Kraft NA, Etzkorn LH. Source code retrieval for bug localization using latent Dirichlet allocation. In: Proc. of the 15th Working Conf. on Reverse Engineering. IEEE, 2008. 155-164.
Lukins SK, Kraft NA, Etzkorn LH. Bug localization using latent dirichlet allocation. Information and Software Technology, 2010, 52(9):972-990.
Harris ZS. Distributional structure. Word, 1954, 10(2-3):146-162.
Blei DM, Ng AY, Jordan MI. Latent dirichlet allocation. Journal of Machine Learning Research, 2003, 3(Jan):993-1022.
Levy O, Goldberg Y. Neural word embedding as implicit matrix factorization. In: Proc. of the Advances in Neural Information Processing Systems. 2014. 2177-2185.
Porter MF. An algorithm for suffix stripping. Program, 1980, 14(3):130-137.
Rao S, Kak A. Retrieval from software libraries for bug localization: A comparative study of generic and composite text models. In: Proc. of the 8th Working Conf. on Mining Software Repositories. ACM, 2011. 43-52.
Sisman B, Kak AC. Assisting code search with automatic query reformulation for bug localization. In: Proc. of the 10th Working Conf. on Mining Software Repositories. IEEE, 2013. 309-318.
Ye X, Bunescu R, Liu C. Learning to rank relevant files for bug reports using domain knowledge. In: Proc. of the 22nd ACM SIGSOFT Int'l Symp. on Foundations of Software Engineering. ACM, 2014. 689-699.
Moreno L, Treadway JJ, Marcus A, Shen WW. On the use of stack traces to improve text retrieval-based bug localization. In: Proc. of the 2014 IEEE Int'l Conf. on Software Maintenance and Evolution. Victoria: IEEE, 2014. 151-160.
Le TDB, Oentaryo RJ, Lo D. Information retrieval and spectrum based bug localization: Better together. In: Proc. of the 10th Joint Meeting on Foundations of Software Engineering. ACM, 2015. 579-590.
Rao S, Medeiros H, Kak AC. An incremental update framework for efficient retrieval from software libraries for bug localization. In: Proc. of the 20th Working Conf. on Reverse Engineering (WCRE). 2013. 62-71.
Nguyen AT, Nguyen TT, Al-Kofahi J, Nguyen HV, Nguyen TN. A topic-based approach for narrowing the search space of buggy files from a bug report. In: Proc. of the 26th IEEE/ACM Int'l Conf. on Automated Software Engineering. IEEE Computer Society, 2011. 263-272.
van der Maaten L, Hinton G. Visualizing data using t-SNE. Journal of Machine Learning Research, 2008, 9:2579-2605.
Uneno Y, Mizuno O, Choi E. Using a distributed representation of words in localizing relevant files for bug reports. In: Proc. of the 2016 IEEE Int'l Conf. on Software Quality, Reliability and Security (QRS). 2016. 183-190.
Hoang T, Oentaryo RJ, Le TDB, et al. Network-clustered multi-modal bug localization. IEEE Trans. on Software Engineering, 2018, 45(10):1002-1023.
Mikolov T, Chen K, Corrado GS, Dean J. Efficient estimation of word representations in vector space. arXiv preprint arXiv: 1301. 3781, 2013.
Mikolov T, Sutskever I, Chen K, Corrado GS, Dean J. Distributed representations of words and phrases and their compositionality. In: Proc. of the Advances in Neural Information Processing Systems. 2013. 3111-3119.
Zhou J, Zhang HY, Lo D. Where should the bugs be fixed? More accurate information retrieval-based bug localization based on bug reports. In: Proc. of the 34th Int'l Conf. on Software Engineering (ICSE). IEEE, 2012. 14-24.
Wong CP, Xiong YF, Zhang HY, Hao D, Zhang L, Mei H. Boosting bug-report-oriented fault localization with segmentation and stack-trace analysis. In: Proc. of the 2014 IEEE Int'l Conf. on Software Maintenance and Evolution. IEEE, 2014. 181-190.
Lam AN, Nguyen AT, Nguyen HA, Nguyen TN. Combining deep learning with information retrieval to localize buggy files for bug reports (n). In: Proc. of the 30th IEEE/ACM Int'l Conf. on Automated Software Engineering (ASE). 2015. 476-481.
Lam AN, Nguyen AT, Nguyen HA, Nguyen TN. Bug localization with combination of deep learning and information retrieval. In: Proc. of the 25th IEEE/ACM Int'l Conf. on Program Comprehension (ICPC). IEEE, 2017. 218-229.
Thomas SW, Nagappan M, Blostein D, Hassan AE. The impact of classifier configuration and classifier combination on bug localization. IEEE Trans. on Software Engineering, 2013, 39(10):1427-1443.
Dallmeier V, Zimmermann T. Extraction of bug localization benchmarks from history. In: Proc. of the 22nd IEEE/ACM Int'l Conf. on Automated Software Engineering. ACM, 2007. 433-436.
Zhang Y, Lo D, Xia X, Scanniello G, Le TDB, Sun JL. Fusing multi-abstraction vector space models for concern localization. Empirical Software Engineering, 2018, 23(4):2279-2322.
Chaparro O, Florez JM, Marcus A. Using bug descriptions to reformulate queries during text-retrieval-based bug localization. Empirical Software Engineering, 2019, 24(5):2947-3007.
Zhang W, Li ZQ, Wang Q, Li J. FineLocator:A novel approach to method-level fine-grained bug localization by query expansion. Information and Software Technology, 2019, 110:121-135.
Almhana R, Mkaouer W, Kessentini M, Ouni A. Recommending relevant classes for bug reports using multi-objective search. In: Proc. of the 31st IEEE/ACM Int'l Conf. on Automated Software Engineering. ACM, 2016. 286-295.
Beard M, Kraft N, Etzkorn L, Lukins S. Measuring the accuracy of information retrieval based bug localization techniques. In: Proc. of the 18th Working Conf. on Reverse Engineering. IEEE, 2011. 124-128.
Wang SW, Lo D. Version history, similar report, and structure: Putting them together for improved bug localization. In: Proc. of the 22nd Int'l Conf. on Program Comprehension. ACM, 2014. 53-63.
Wang SW, Lo D, Lawall J. Compositional vector space models for improved bug localization. In: Proc. of the 2014 IEEE Int'l Conf. on Software Maintenance and Evolution. IEEE, 2014. 171-180.
Wang SW, Lo D. Amalgam+:Composing rich information sources for accurate bug localization:Composing rich information sources for accurate bug localization. Journal of Software:Evolution and Process, 2016, 28(10):921-942.
Ye X, Bunescu R, Liu C. Mapping bug reports to relevant files:A ranking model, a fine-grained benchmark, and feature evaluation. IEEE Trans. on Software Engineering, 2016, 42(4):379-402.
Rath M, Lo D, Mäder P. Analyzing requirements and traceability information to improve bug localization. In: Proc. of the 15th Int'l Conf. on Mining Software Repositories. 2018. 442-453.
Dilshener T, Wermelinger M, Yu YJ. Locating bugs without looking back. In: Proc. of the 13th Int'l Conf. on Mining Software Repositories (MSR 2016). New York: ACM, 2016. 286-290.
Aoi T, Natthawute SL, Shinpei H, Motoshi S. A preliminary study on using code smells to improve bug localization. In: Proc. of the 26th Conf. on Program Comprehension (ICPC). Gothenburg, 2018. 324-327.
Youm KC, Ahn J, Lee E. Improved bug localization based on code change histories and bug reports. Information and Software Technology, 2017, 82:177-192.
Davies S, Roper M, Wood M. Using bug report similarity to enhance bug localisation. In: Proc. of the 19th Working Conf. on Reverse Engineering. IEEE, 2012. 125-134.
Gay G, Haiduc S, Marcus A, Menzies T. On the use of relevance feedback in IR-based concept location. In: Proc. of the 2009 IEEE Int'l Conf. on Software Maintenance. IEEE, 2009. 351-360.
Huo X, Thung F, Li M, Lo D, Shi ST. Deep transfer bug localization. IEEE Trans. on Software Engineering, 2019. Early Access.[doi:10.1109/TSE.2019.2920771]
Bunyamin S, Kak AC. Incorporating version histories in information retrieval based bug localization. In: Proc. of the 9th IEEE Working Conf. on Mining Software Repositories (MSR). IEEE, 2012. 50-59.
Tantithamthavorn C, McIntosh S, Hassan AE, Matsumoto K. The impact of automated parameter optimization on defect prediction models. IEEE Trans. on Software Engineering, 2018, 45(7):683-711.
Shi ZD, Keung J, Bennin KE, Zhang XJ. Comparing learning to rank techniques in hybrid bug localization. Applied Soft Computing, 2018, 62:636-648.
Xiao Y, Keung J, Bennin KE, Mi Q. Improving bug localization with word embedding and enhanced convolutional neural networks. Information and Software Technology, 2019, 105:17-29.
Bettenburg N, Premraj R, Zimmermann T, Kim S. Extracting structural information from bug reports. In: Proc. of the 2008 Int'l Working Conf. on Mining Software Repositories (MSR 2008). New York: ACM, 2008. 27-30.
Schroter A, Schröter A, Bettenburg N, Premraj R. Do stack traces help developers fix bugs? In: Proc. of the 7th IEEE Working Conf. on Mining Software Repositories (MSR 2010). 2010. 118-121.
Wu RX, Zhang HY, Cheung SC, Kim S. CrashLocator: Locating crashing faults based on crash stacks. In: Proc. of the 2014 Int'l Symp. on Software Testing and Analysis. ACM, 2014. 204-214.
Dao T, Zhang LM, Na M. How does execution information help with information-retrieval based bug localization? In: Proc. of the IEEE/ACM Int'l Conf. on Program Comprehension. 2017. 241-250.
Ye X, Shen H, Ma X, Bunescu R, Liu C. From word embeddings to document similarities for improved information retrieval in software engineering. In: Proc. of the 38th IEEE/ACM Int'l Conf. on Software Engineering (ICSE). 2016. 404-415.
Wen M, Wu RX, Cheung SC. Locus: Locating bugs from software changes. In: Proc. of the 31st IEEE/ACM Int'l Conf. on Automated Software Engineering (ASE). IEEE, 2016. 262-273.
Zhou X, Peng X, Xie T, Sun J, Ji C, Liu DW, Xiang QL, He C. Latent error prediction and fault localization for microservice applications by learning from system trace logs. In: Proc. of the 27th ACM Joint European Software Engineering Conf. and Symp. on the Foundations of Software Engineering (ESEC/FSE 2019). Association for Computing Machinery, Inc., 2019. 683-694.
Thung F, Le TDB, Kochhar PS, Lo D. BugLocalizer: Integrated tool support for bug localization. In: Proc. of the 22nd ACM SIGSOFT Int'l Symp. on Foundations of Software Engineering (FSE 2014). Hong Kong: ACM, 2014. 767-770.
Wang XY, Zhou B, Lo D, Xia X, Wang XG, Kochhar PS, Tian Y, Yang XH, Li SP, Sun JL. BOAT: An experimental platform for researchers to comparatively and reproducibly evaluate bug localization techniques. In: Companion Proc. of the 36th Int'l Conf. on Software Engineering (ICSE Companion 2014). Hyderabad: ACM, 2014. 572-575.
Le TDB, Thung F, Lo D. Predicting effectiveness of IR-based bug localization techniques. In: Proc. of the 25th IEEE Int'l Symp. on Software Reliability Engineering. IEEE, 2014. 335-345.
Kochhar PS, Xia X, Lo D, Li SP. Practitioners' expectations on automated fault localization. In: Proc. of the 25th Int'l Symp. on Software Testing and Analysis (ISSTA 2016). New York: ACM, 2016. 165-176.
Parnin C, Orso A. Are automated debugging techniques actually helping programmers? In: Proc. of the 2011 Int'l Symp. on Software Testing and Analysis. ACM, 2011. 199-209.
Xia X, Lo D, Wang XG, Zhang CY, Wang XY. Cross-language bug localization. In: Proc. of the 22nd Int'l Conf. on Program Comprehension. ACM, 2014. 275-278.
Nath A, Domingos P. Learning tractable probabilistic models for fault localization. In: Proc. of the 30th AAAI Conf. on Artificial Intelligence. 2016. 1294-1301.
Huo X, Li M, Zhou ZH. Learning unified features from natural and programming languages for locating buggy source code. In: Proc. of the IJCAI. 2016. 1606-1612.
Huo X, Li M. Enhancing the unified features to locate buggy files by exploiting the sequential nature of source code. In: Proc. of the IJCAI. 2017. 1909-1915.
Gupta R, Kanade A, Shevade S. Neural attribution for semantic bug-localization in student programs. In: Proc. of the Advances in Neural Information Processing Systems. 2019. 11861-11871.
Baeza-Yates R, Ribeiro-Neto B, et al. Modern Information Retrieval. Vol.463, New York: ACM Press, 1999.
Herzig K, Just S, Zeller A. It's not a bug, it's a feature: How misclassification impacts bug prediction? In: Proc. of the 35th Int'l Conf. on Software Engineering (ICSE). San Francisco: IEEE, 2013. 392-401.
Kochhar PS, Tian Y, Lo D. Potential biases in bug localization: Do they matter? In: Proc. of the 29th ACM/IEEE Int'l Conf. on Automated Software Engineering. ACM, 2014. 803-814.
Kim DS, Tao YD, Kim SH, Zeller A. Where should we fix this bug? A two-phase recommendation model. IEEE Trans. on Software Engineering, 2013, 39(11):1597-1610.
Wang QQ, Parnin C, Orso A. Evaluating the usefulness of IR based fault localization techniques. In: Proc. of the 2015 Int'l Symp. on Software Testing and Analysis (ISSTA 2015). Baltimore: ACM, 2015. 1-11.
Mills C, Pantiuchina J, Parra E, Bavota G, Haiduc S. Are bug reports enough for text retrieval-based bug localization? In: Proc. of the 2018 IEEE Int'l Conf. on Software Maintenance and Evolution (ICSME). 2018. 381-392.
Chaparro O, Florez JM, Marcus A. Using observed behavior to reformulate queries during text retrieval-based bug localization. In: Proc. of the 2017 IEEE Int'l Conf. on Software Maintenance and Evolution (ICSME). 2017. 376-387.
Le TDB, Thung F, Lo D. Will this localization tool be effective for this bug? Mitigating the impact of unreliability of information retrieval based bug localization tools. Empirical Software Engineering, 2017, 22(4):2237-2279.
Le TDB, Thung F, Lo D. Predicting effectiveness of IR-based bug localization techniques. In: Proc. of the 25th IEEE Int'l Symp. on Software Reliability Engineering. Naples: IEEE, 2014. 335-345.
Lee J, Kim DS, Tegawendé FB, Woosung J, Yves LT. Bench4bl: Reproducibility study on the performance of IR-based bug localization. In: Proc. of the 27th ACM SIGSOFT Int'l Symp. on Software Testing and Analysis (ISSTA 2018). Amsterdam, 2018. 61-72.
Saha RK, Lawall J, Khurshid S, Perry DE. On the effectiveness of information retrieval based bug localization for c programs. In: Proc. of the 2014 IEEE Int'l Conf. on Software Maintenance and Evolution. IEEE, 2014. 161-170.