Page 208 - 《软件学报》2020年第9期
P. 208
郭肇强 等:基于信息检索的缺陷定位:问题、进展与挑战 2829
件,并对这些文件根据相似度得分进行排序;
(3) 抽取特征.从目标项目中抽取有利于缺陷定位的特征信息(例如版本历史信息、堆栈信息等).这些特征
信息会在第(5)步中集成到检索模型用于优化排序结果;
(4) 构建查询.IRBL 方法将缺陷报告当作一条查询语句.使用步骤(1)中的方法对缺陷报告中的标题和描
述进行数据预处理,可以获得该缺陷报告对应的一组词汇;
(5) 检索和排序.使用一种 IR 模型(例如 VSM [28] ,LSI [33] ,SUM [23] ,LDA [34] 等)进行建模,并利用步骤(3)中的
特征优化模型,对建立好索引的语料库计算查询语句和每个源代码文件之间的相似程度(例如文本相
似度),然后按照相似度得分高低对这些源代码文件进行降序排序.
经过上述 5 个步骤,IRBL 模型会对每份缺陷报告输出一份排序列表.需要说明的是:除非代码版本更迭导致
源文件内容更新,否则步骤(1)和步骤(2)通常只需要执行一次,而步骤(3)~步骤(5)在每次收到新的缺陷报告后都
需要执行.
Fig.1 Overview of IR-based bug localization
图 1 基于信息检索的缺陷定位方法流程概览
1.3 IRBL研究内容
目前,IRBL 领域的研究重点是模型改良和模型评估,以下分别从两方面列出 IRBL 研究面临的主要挑战并
和对应的研究内容.具体内容将在第 3 节和第 4 节详细介绍.
1.3.1 模型改良(见第 3 节)
IR 模型最初是为检索非结构化的自然语言文本设计的,因此适合处理纯自然语言文本的应用.对于缺陷定
位应用来说,不论是软件库中的代码文件还是软件平台收到的缺陷报告,其中都包含着丰富的结构信息.当 IR
模型被直接应用到具有特定结构化信息的软件代码库检索时,会遇到来自以下两方面挑战.
(1) 有用特征使用不完全.对源代码来说,有大量可以使用的附加特征(如提交历史 [32] 、代码结构 [24,25,30,31]
等)可以辅助定位缺陷.对缺陷报告来说,其中包含了标题(title)和描述(description)两部分内容,每部分
中包含的词汇的权重是有差别的 [35] ;
(2) 无用信息过滤不充分.源代码中的关键字是一种干扰词汇 [24,28] ,例如关键字“public”,“class”和“int”等
等.这类词汇对于文本语义没有任何帮助,并且几乎会出现在所有的代码文件中.代码中的部分注释
组成另一类干扰词汇,例如,代码文件的许可证注释(license comments)通常和文档语义无关.这类词汇
会影响检索模型的效果.
上述挑战使得 IRRL 模型的定位性能低下.为了解决上述挑战,IRBL 领域研究的一个重点在于模型改良.即
不断对模型进行修改以提高其定位准确性.可行的探索方向是挑选较好的 IR 模型;从各个角度分析代码和缺陷
报告的特征信息并将其集成到 IR 模型中.现有研究人员已经挖掘出包括版本历史、代码结构、堆栈踪迹等多