摘要:软件在开发和维护过程中会产生大量缺陷报告, 可为开发人员定位缺陷提供帮助. 基于信息检索的缺陷定位方法通过分析缺陷报告内容和源码文件的相似度来定位缺陷所在位置, 已在文件、函数等粗粒度级别上取得了较为精确的定位效果, 但由于其定位粒度较粗, 仍需要耗费大量人力和时间成本检查可疑文件和函数片段. 为此, 提出一种基于历史缺陷信息检索的语句级软件缺陷定位方法STMTLocator, 首先检索出与被测程序缺陷报告相似度较高的历史缺陷报告, 并提取其中的历史缺陷语句; 然后根据被测程序源码文件与缺陷报告的文本相似度检索可疑文件, 并提取其中的可疑语句; 最后计算可疑语句与历史缺陷语句的相似度, 并进行降序排列, 以定位缺陷语句. 为评估STMTLocator的缺陷定位性能, 使用Top@N、MRR等评价指标在基于Defects4J和JIRA构建的数据集上进行对比实验. 实验结果表明, 相比静态缺陷定位方法BugLocator, STMTLocator在MRR指标上提升近4倍, 在Top@1指标上多定位到7条缺陷语句; 相比动态缺陷定位方法Metallaxis和DStar, STMTLocator完成一个版本缺陷定位平均消耗的时间减少98.37%和63.41%, 且具有不需要设计和执行测试用例的显著优势.