中文

联合利用缺陷报告与测试用例实现更优的自动程序修复

软件工程 2023-02-08 v4

摘要

自动化程序修复已在工业界部署,但人们对修复质量仍存担忧。近期研究表明,修复工具产生不正确(但看似正确)补丁的主要原因之一是缺陷定位(FL)不完善。本文证明,在定位缺陷时结合自然语言缺陷报告与测试执行的信息,可对修复质量产生显著的积极影响。例如,采用此种缺陷定位的现有修复工具能够正确修复 Defects4J 基准中 7 个此前无任何工具正确修复的缺陷。我们开发了 Blues,这是首个无需训练数据的、基于信息检索的语句级缺陷定位技术。我们进一步开发了 RAFL,这是首个用于结合多种缺陷定位技术的无监督方法,其性能优于一种有监督方法。利用 RAFL,我们将 Blues 与基于频谱的(SBFL)技术结合,创建了 SBIR。在 815 个真实缺陷上的评估表明,SBIR 始终将其缺陷语句的排名置于其底层技术之上。随后,我们修改了三种前沿修复工具 Arja、SequenceR 和 SimFix,使其内部缺陷定位分别使用 SBIR、SBFL 和 Blues。我们在 689 个真实缺陷上评估了所产生补丁的质量。Arja 与 SequenceR 从 SBIR 中显著受益:使用 SBIR 的 Arja 正确修复 28 个缺陷,而使用 SBFL 仅 21 个、使用 Blues 仅 15 个;使用 SBIR 的 SequenceR 正确修复 12 个缺陷,而使用 SBFL 仅 10 个、使用 Blues 仅 4 个。SimFix(其内部机制可克服较差的缺陷定位)使用 SBIR 与 SBFL 均正确修复 30 个缺陷,但使用 Blues 仅 13 个。我们的工作是首个同时利用多种软件制品进行自动化程序修复的研究,且我们有前景的发现表明该方向的未来研究很可能富有成果。

关键词

引用

@article{arxiv.2011.08340,
  title  = {Better Automatic Program Repair by Using Bug Reports and Tests Together},
  author = {Manish Motwani and Yuriy Brun},
  journal= {arXiv preprint arXiv:2011.08340},
  year   = {2023}
}

备注

accepted in ICSE'23 technical track