关键词:
缺陷定位
软件工程实践
信息检索
词嵌入
代码嵌入
摘要:
缺陷定位是缺陷修复过程的关键步骤之一,同时也是一项具有挑战的软件任务。围绕缺陷定位,目前已有大量学术研究。然而,这些研究成果在实践中很少得到应用。为了了解产生这一现状的原因,本文从工业界和开源社区软件工程实践者的视角对缺陷定位相关技术的研究进行了评估。随后,为了帮助回答评估过程中实践者关于定位技术可靠性的疑问,本文对当前主流的基于信息检索的文件级缺陷定位技术的优劣性、局限性和可替代性进行了分析,并利用相关技术的不可替代性显著改善了已有技术的定位效果。同时,针对实践者对函数级缺陷定位技术的需求,在分析已有研究现状的基础上,对当前技术在缺陷报告和函数代码语义方面表征不足的问题,本文提出了一套基于词嵌入和代码嵌入的函数级缺陷定位技术。本文的主要工作和研究成果如下:1.缺陷定位相关技术研究的实践评估。针对大量缺陷定位相关技术研究成果在实践中很少得到应用的问题,本文从实践层面对缺陷定位相关技术研究进行了评估。通过评估,明晰了缺陷定位相关技术研究对实践开发的意义,厘清了实践者不愿采纳缺陷定位相关技术的原因,辨明了实践者期望的缺陷定位相关技术的改进方向。具体地,本工作首先通过文献回顾总结了已有的缺陷定位相关技术研究。随后,通过对来自不同背景的软件工程实践者进行问卷调查和访谈,本工作首次从实践者的视角对缺陷定位相关技术研究存在的意义和潜在问题进行了深入分析。研究发现,实践者普遍认可缺陷定位相关技术研究的重要性(包括促进缺陷修复和帮助计划安排等)。部分实践者对相关技术的可靠性等提出了疑问。在评估过程中,一些实践者对现有缺陷定位相关技术研究的改进提出了一系列建议,包括加强对其他类型信息的整合(如截图、开发者档期等)和对预测结果提供依据等。2.基于信息检索的文件级缺陷定位技术的评估和改进。为了帮助回答实践者对缺陷定位技术可靠性的疑问,同时为改进该类技术提供参考线索,本工作对当前主流的基于信息检索的文件级缺陷定位技术进行了评估。同时,利用评估结果提出了新的缺陷定位技术并显著改善了已有方法的定位效果。具体地,本工作首次对当前最先进的三种基于信息检索的文件级缺陷定位技术进行了分析,重点评估了三种技术在无偏倚数据集上的优劣性、可替代性和在具体缺陷类型上的局限性。同时,利用研究过程中发现的三种技术彼此不可替代的特性,提出了将三种技术进行整合的缺陷定位框架CombineBL。通过在六个Java项目上实验发现,CombineBL能显著提升三种定位技术的定位效果:Accuracy@1 平均增幅 6.28%-10.5%,MAP 平均增幅 4.87%-9.86%,MRR 平均增幅 7.05%-12.15%。3.基于词嵌入和代码嵌入的函数级缺陷定位技术。为了弥补已有研究对缺陷报告和函数代码语义表征不足的问题,本工作提出了使用词嵌入和代码嵌入技术增强缺陷报告和函数代码语义表征的解决方案。实验表明,词嵌入和代码嵌入技术在提升函数级缺陷定位效果方面具有较大潜力。具体地,在本章提出的基于词嵌入和代码嵌入的函数级缺陷定位技术中,缺陷报告和函数代码使用不同的特征空间进行语义表征,即使用词嵌入模型表征缺陷报告和使用代码嵌入模型表征函数代码。通过在五个Java项目上实验发现,当推荐函数个数为10时,该技术能准确定位10%-33.33%的软件缺陷。这在一定程度上表明了使用词嵌入和代码嵌入技术表征缺陷报告和函数代码语义的可行性。本文的研究,一方面为缺陷定位相关技术的研究人员提供了许多有参考价值的线索。同时,本文提出的一些有趣且富有挑战性的研究问题,也为我们未来的研究工作奠定了基础。