Page 213 - 《软件学报》2020年第9期
P. 213

2834                                 Journal of Software  软件学报 Vol.31, No.9,  September 2020

         及代码中的注释和标识符信息相结合来提升定位性能.考虑到现有技术没有使用到软件仓库的动态特性,Rao
         等人  [87] 在 2015 年提出了一个可以随着数据演化增量更新 LSA 模型参数的定位框架.
         3.1.3    LDA 模型
             LDA 是一种生成式的统计主题模型,同时也是一种典型的词袋模型.它将一篇文档看成是词语之间没有先
         后顺序和上下文关联的一组词语集合,文档中的这些词语属于多个主题,并且每个词语都由其中一个主题生成.
         LDA 模型在模块化和可扩展方面强于 LSI 模型.与此同时,它在基于主题模型的信息检索应用上十分有效.在
         IRBL 领域里,LDA 模型也是在早期研究中就被应用到 IRBL 领域中,并且在近年来仍有部分研究关注于改良
         LDA 模型.以下是该模型的相关应用.
             2008 年,Lukins 等人 [27] 就明确提出使用 LDA 模型检索源代码进行缺陷定位.在 2010 年,他们再次使用 LDA
                            [3]
         模型来构建 IRBL 方法 .他们得出结论,基于 LDA 的缺陷定位方法的定位准确度与目标项目尺寸或者源代码
         的稳定性没有显著关联.因此,LDA 有广泛的应用前景.在 2011 年时,Nguyen 等人                  [49] 提出了基于 LDA 主题模型
         的新方法 BugScout,使得缺陷定位效果有明显提升.2018 年,Wang 等人              [98] 在他们的方法 STMLocator 中使用了
         LDA 模型,并且利用代码库的历史信息来进行有监督的学习,进一步发掘了 LDA 模型的性能.
         3.1.4    其他 IR 模型
             除了上述 3 种主流的 IR 模型之外,还有其他一些模型也被某些研究者用来进行缺陷定位.
             2010 年,通过聚集和挖掘被相同位置共同引用的历史缺陷报告,Chen 等人                     [85,112] 提出一个有效的使用协同
         位置收缩(co-location shrinkage,简称 CS)技术的支持向量机模型(CS-SVM)来检索潜在的缺陷位置.2011 年,Rao
         等人  [23] 使用平滑一元模型(smoothed unigram  model,简称 SUM)进行缺陷定位工作.在他们的实验结果中,SUM
         的缺陷定位性能比 VSM,LSI 和 LDA 都要优秀.2012 年,Sisman 等人          [60] 使用 DFR 偏离随机性(divergence from
         randomness,简称 DFR)模型进行缺陷定位.该模型会根据文档特征概率与纯非判别随机分布的差异,来评估文档
         对查询的恰当性.
             除了手动构建 IR 模型,还有一些研究使用了现成的信息检索工具.例如,Saha 等人                      [24] 在他们的方法 BLUiR
         中使用了 Indri  [113] ,Kilinc 等人 [90] 和 Rahman 等人 [35] 则使用 Apache Luence 作为他们方法的检索模型.
         3.2   使用特征分析

             直接应用 IR 模型进行检索很难得到令人满意的结果,因此需要进一步进行特征分析来改良 IRBL 模型.代
         码库和缺陷报告都不是由纯自然语言组成的文本,它们具有一些领域相关的结构化信息和特征.对这些特征进
         行挖掘,可以在一定程度上提升检索结果的准确性.综合现有文献的研究,我们发现对,代码库和缺陷报告提取
         的特征主要包括版本历史、相似报告、代码结构、堆栈踪迹以及其他一些不常用的特征.本小节从提取特征的
         角度来介绍现有研究如何通过对特征进行细致地挖掘来提升定位模型的性能.
         3.2.1    版本历史
             软件项目在演化过程中会通过版本更迭来实现对项目的更新和完善(例如修复缺陷、添加新功能等),每一
         次变更都会向代码库中添加丰富的历史信息(例如日志信息、文件变动信息等).与此同时,多数缺陷正是在代码
         变动的过程中因为开发人员主观疏忽或者是客观设计不合理而被引入到项目中,所以分析版本这些历史信息
         有利于为缺陷定位或者预测任务带来一些提示性的帮助.在现有的 IRBL 方法中,很多方法已经将版本历史信
         息作为一个重要的特征组件来提升方法的性能.版本历史特征的应用示例过程如图 4 所示.
             2010 年,Chen 等人 [85,112] 利用历史缺陷报告和历史被修复的模块信息为新收到的缺陷寻找可能的位置,其
         中特别利用了缺陷报告之间的共位置关系.在他们的方法中,如果两个缺陷报告的修复模块相同,那么认为这两
         个缺陷报告有共位置关系.
             2012 年,Sisman 等人 [60] 挖掘版本历史时应用到以下两点先验知识:(1)  在短期内被多次提交的修改很可能
         会包含缺陷;(2)  历史上包含缺陷的文件在之后版本中可能仍然有缺陷.其中,先验知识(1)也被应用在 Rahman
         等人  [103] 的方法中.相比前两个方法,Wang 等人       [31] 和 Youm 等人 [74] 考虑到新发现的缺陷通常是由最新的提交引
         入而非远古提交,因此在他们的方法中,只考虑近期的版本历史而完全丢弃距提交的新缺陷报告超过 k 天的版
   208   209   210   211   212   213   214   215   216   217   218