论文部分内容阅读
问题报告和代码提交之间的关联在软件验证和维护方面起着重要的作用。然而,在实际软件项目中,关联信息并不总能在软件的开发或维护的过程中被明确提供。目前,最常见的做法是依赖枯燥且极易出现错误的人工检查方式实现缺失关联的恢复。 问题报告和代码提交的提交日志、源代码文件之间通常存在相似文本,大量研究基于该假设设计并实现了自动化的缺失关联恢复方法。然而,仅依赖问题报告和提交日志、源代码变更间的文本相似性,难以获得令人满意的自动化关联恢复方法。 本论文基于对已有方法的分析,聚焦“如何合理使用代码提交相关文件构建有效关联恢复方法”和“如何使用有限的真关联数据构建有效关联恢复方法”这两个关键问题。本研究工作的主要贡献有: 1.对代码提交中文件与修复行为的相关程度进行了分析,提出了一种新的关联恢复方法FRLink。FRLink方法引入了非源代码文件以增加更多可能的相似文本,同时,该方法过滤了代码提交中与问题修复无关的源代码文件,减少了噪音数据,实现了对缺失关联的恢复。通过对比已有的研究,本论文说明了非源代码文件的引入,以及对代码提交中与修复无关的源代码文件的过滤,能够有效提高缺失关联恢复方法性能。 2.在FRLink方法中非源代码文件对于方法性能的提升起到了很大作用。为了验证该发现的通用性,理解性能改进的具体原因,本论文进一步讨论了非源代码文件在关联恢复方法中的作用。基于FRLink方法,在18个开源项目上验证了非源代码文件的作用。通过经验学习,发现对于问题报告,非源代码文件能够提供比提交日志更多的相似信息。多数的软件项目中,通过在关联恢复方法中包含非源代码文件,可以过滤大量的假关联,同时识别更多的真关联,使缺失关联恢复方法的性能获得的提升。 3.实际软件项目中,由于关联缺失问题的普遍存在,可以用于模型训练的真关联通常十分有限。本论文指出使用真关联和假关联数据实现的关联恢复方法,在仅能获得少量真关联的情况下,性能下降十分明显。实际上,将缺失关联问题建模成为基于正例和无标记数据学习的问题,可以有效改进关联恢复方法性能。基于这一思路,本论文对FRLink方法做出了改进,提出了一种基于正例和无标记数据的增强关联恢复方法PULink,并和FRLink进行了比较。结果显示,PULink方法相比于FRLink,在数据集中仅包含少量正例的情况下,依然能够有效恢复缺失关联数据。