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

郭肇强  等:基于信息检索的缺陷定位:问题、进展与挑战                                                      2827


         that, the related techniques are discussed. Finally, the opportunities and challenges are summarized in this field and the research directions
         in the future are outlined.
         Key words:    information retrieval; bug localization; software maintenance; bug report

             软件缺陷(software bug)是伴随软件产品整个生命周期的产物.特别对于大型软件,由于其复杂的结构和众
         多的开发者,缺陷不可避免地在开发过程中被引入.软件缺陷的存在,极大地降低了软件质量并且增加了软件的
         维护成本,严重的缺陷可能会给企业造成经济损失甚至对人的生命安全造成威胁.为了提升软件的质量,软件产
         品要在不断更新换代或者版本更迭中对已经发现的缺陷进行清除.从历史数据来看,对缺陷的清除工作消耗了
         接近一半的软件开发和维护成本              [1] .因此,在学术界有大量的研究者致力于缺陷相关(包括但不限于缺陷预
                                   [6]
         测 [2,3] 、缺陷定位 [4,5] 和缺陷修复 等)的研究.其中,非常重要并且耗费时间和精力的一个任务是对缺陷进行定
         位,即找出产生该缺陷的软件实体(例如源文件).
             当软件中的缺陷被发现时,根据缺陷产生时的软件状况,用户或者软件系统会记录缺陷相关的信息,并且生
                                                   [7]
         成一份半结构化的缺陷报告上传到缺陷追踪系统上 .软件维护人员对缺陷的修复工作始于阅读缺陷报告,在
         理解缺陷的基础上,他们从代码库中查找与缺陷报告描述内容相关的代码实体进行审查,直至找出产生该缺陷
         的位置.值得注意的是:一个在实际开发项目通常包含成百上千甚至更多的源文件,手工从其中找出与缺陷相关
         的那极小部分代码是十分困难的.为此,开发人员急需借助于缺陷自动定位工具来辅助他们查找产生缺陷位置.
             为了帮助开发人员快速找到产生缺陷的位置,研究者们提出了多种自动化的缺陷定位(bug localization,简
         称 BL)解决方法.现有的解决方法可以根据是否需要执行测试用例划分为动态缺陷定位方法和静态缺陷定位方
         法.其中,动态缺陷定位方法要运行被测程序来收集程序执行的动态信息(包括执行路径和结果等),根据这些信
                                                                                     [4]
         息来定位缺陷语句在代码中的可疑位置.这类方法的主流思路被称为基于程序频谱的缺陷定位 .由于直接运
         行目标程序,这类方法通常可以在较细的粒度上对缺陷进行定位,但是需要消耗执行程序的时间和资源成本.因
         此,这类方法有助于对代码进行调试.而静态缺陷定位方法不需要直接运行被测程序,这类方法主要分析代码和
         缺陷报告中的静态信息(包括文本、代码实体等),然后计算每个代码实体(源文件)和报告中的静态信息的相似
         度分值,最后根据得分将可疑的代码实体推荐给开发者.静态方法的优势在于使用简单,成本低廉(不需要运行
         代码).同时,它的不足是定位粒度较粗糙,通常在文件或者方法级别对缺陷进行定位.可以看出,这类方法适用于
         帮助开发者快速找到缺陷报告所描述的问题的相关位置.
             近年来,静态缺陷定位研究工作的一类主流方法是基于信息检索的缺陷定位(information retrieval  based
         bug localization,简称 IRBL).该领域目前的研究重点在于改良 IRBL 方法和完善 IRBL 的评价体系两方面.截止
         2020 年 3 月,已有 20 多种(仍在增长)不同 IRBL 方法和多种不同的评价指标被提出.从现有研究结果来看,IRBL
         方法在实验评估中已经取得了较高的性能.然而,由于现实中不同项目代码的结构和风格存在差异性,并且收到
         的缺陷报告内容质量参差不齐,目前的 IRBL 方法仍然存在局限性,在现实的实践应用中仍然面临一些挑战.
             (1)  方法所用的特征由人工设计,对目标项目依赖高,在其他项目上迁移性能较差;
             (2)  目前,这些方法仅在实验评估中取得较好性能分数,但是由于各自实验设置的差异性,开发者无法准
                 确判断哪一种方法最具有实用性.因此,这些方法在生产实践中的表现结果未知;
             (3)  现有方法仅仅给开发者推荐出与缺陷有关的代码文件列表,没有包含任何有助于定位的提示信息.
             值得注意的是,目前学术界已有多份综述性的工作                  [4,8−12] 对缺陷定位领域的技术研究进行总结.这些工作对
                                                                             [4]
         多种特定类型的缺陷定位技术进行了整理和归纳,包括基于程序频谱的缺陷定位技术 、基于程序变异的缺陷
         定位技术    [12] 等.但是据我们所知,还没有一项工作对 IRBL 这种特定类型的缺陷定位方向进行总结(截止 2020 年
         3 月).由于对 IRBL 研究的论文体量已经较为庞大并且是一类热门的研究方向,为了弥补这一空白,同时方便后
         续相关研究工作的进行,本文首次对近 10 年来 IRBL 的研究历史进行回顾,对现有的成果进行分类介绍和总结,
         并在此基础上指出该领域面临的挑战.
             本文在第 1 节概述主要的研究问题.第 2 节说明本综述的文献检索方式和文献汇总信息.然后,分别在第 3
         节和第 4 节从模型改良和模型评估两个方面介绍近年的研究进展.在第 5 节分类别地介绍缺陷定位领域的其他
   201   202   203   204   205   206   207   208   209   210   211