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

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

         研究方法.在第 6 节分析 IRBL 领域的研究所面临的挑战.最后,在第 7 节总结本文的内容.

         1    研究问题

         1.1   IRBL概要介绍
             信息检索技术早期被用来在代码中进行概念/特征定位(不同文献中的术语略有差别:concept location                         [13−15] ,
         feature location [16−18] 或者 concern localization [19−22] )任务,其目的是从代码库中找出与特定功能相关的代码.后来
         演变为使用信息检索技术对缺陷进行定位(IRBL),并成为目前主流的静态缺陷定位研究方法.具体来说,程序中
         的特征是指能够被开发者感知或者看见的功能,其中,那些想要被抛弃并且被移除的“功能”便可以看作是一种
         特殊的特征(即缺陷).特征定位是指从项目中找出具有指定特征的那部分源代码.因此,对于要在程序中抛弃并
         移除的“功能”的定位,便逐步变成现有的基于信息检索的缺陷定位.
             IRBL 方法关注的对象是缺陷报告和软件源码.从技术角度看,IRBL 方法将缺陷定位任务看作是进行信息
         检索(IR)的过程.Rao 等人    [23] 在 2011 年总结了信息检索领域的 IR 术语与软件工程领域在缺陷定位时所用术语
         的对照关系如表 1 所示.据此,IRBL 任务执行过程可以描述如下:IRBL 模型将缺陷报告看作查询(query),将报告
         中的文本进行分词处理组成查询语句.同时,将项目源码看作文档库(documents),对每份源文件进行预处理,构
         造出一个语料库.当收到缺陷报告时,从报告中构建查询语句并在文档库中检索(retrieval),根据查询语句与每个
         文档的相似度通过索引(index)将所有文档降序排列后反馈给开发者.在结果列表中,包含缺陷的文件(buggy
         files)尽可能排列在靠前的位置.开发者按照列表顺序对代码进行审查,可以在花费较少的工作量的情况下找到
         有缺陷的源文件,从而加速缺陷定位的进程.

                     Table 1    Parallels between IR terminology and the more traditional SE terminology
                                  表 1   IR 术语与传统软件工程术语的对照关系
                             IR 术语                           软件工程术语
                           文档(document)                     代码库中的源文件
                            查询(query)                   缺陷报告和/或它的文本描述
                            词汇(terms)                         标识符名称
                           检索(retrieval)                       缺陷定位
                            索引(index)                          源代码库
             IRBL 方法能够获得众多研究者和软件开发者的关注主要得益于这类方法在应用时具有以下两点优势.
             (1)  外部依赖少    [24−27] .相比于动态定位,技术静态技术不需要执行测试用例来触发缺陷,并且不需要工作
                 在可运行的目标软件系统中,只需要从源代码和缺陷报告中收集信息即可进行定位.因此,它们具备
                 使用简单的特点,从而可以应用于软件开发或维护过程的任何阶段;
             (2)  计算成本低    [24,27] .IRBL 方法对源码文档的排序的主要依据是缺陷报告与文档之间的文本相似度,这
                 部分分值的计算对现在的机器来说是十分简单,通常可以快速给出排序结果.因而这类方法具备反馈
                 迅速的特点,所以在应用时的用户体验良好.而动态方法通常需要执行目标程序,实际响应时间和计
                 算成本取决于目标程序的复杂程度.
         1.2   IRBL方法流程
             本小节对 IRBL 方法的流程进行细致描述.综合该领域的多个优秀的研究工作                         [24,25,28−32] ,IRBL 方法的流程
         主要包含建立语料库、构建索引、抽取特征、构建查询以及检索排序这 5 个基本步骤,如图 1 所示.
             (1)  建立语料库.对代码库中的每个源代码文件的文本进行分词,同时对分好的词汇进行预处理,主要包
                 括去除关键词(例如“int”“public”等)、去除停用词(例如“a”“the”等)、词根还原(例如,“delegating”还原
                 为“delegate”)、拆分复合词(例如,“TypeDeclaration”分为“type”和“declaration”)等.处理完成之后,每个
                 源文件对应一组词汇,所有源文件构成了整个项目的语料库;
             (2)  构建索引.为语料库中的所有源代码文件构建索引,模型可以在后续步骤中根据索引信息找到指定文
   202   203   204   205   206   207   208   209   210   211   212