基于修复模板的软件缺陷自动修复方法研究
作者单位:河南工业大学
学位级别:硕士
导师姓名:曹鹤玲;段捷文
授予年度:2023年
学科分类:08[工学] 0835[工学-软件工程] 081202[工学-计算机软件与理论] 0812[工学-计算机科学与技术(可授工学、理学学位)]
主 题:软件缺陷自动修复 修复模板 上下文 遗传编程 代码相似性
摘 要:缺陷修复是软件维护的一个重要组成部分,是降低软件开发成本和提高软件质量的关键。软件缺陷自动修复在软件开发过程中降低调试和维护成本等方面具有很大的潜力。近年来,许多软件缺陷自动修复方法被证明在软件开发中是有用的,然而如何减少对巨大搜索空间的搜索,提高补丁质量进而提高软件缺陷自动修复方法的成功率和效率仍然是具有挑战性的问题。针对上述问题,本文研究了两种基于修复模板的软件缺陷自动修复方法,并将两种软件缺陷修复方法集成为一个修复工具,主要研究内容如下:(1)针对软件缺陷自动修复中修复材料选取随机和导航的问题,提出了基于预定义模板和上下文感知的软件缺陷自动修复方法(Pre-defined Template and Context Aware based Automatic Software Repair),并实现了缺陷修复工具PCRepair。首先,该方法采用Ochiai缺陷定位技术定位到可疑缺陷语句,并生成可疑缺陷语句列表。其次,将可疑语句的上下文与修复模板的上下文相匹配,采用上下文感知缩小对搜索空间的搜索,为可疑语句生成候选补丁。然后,使用加权融合相似度的补丁优先级排序技术对候选补丁排序,将排序过后的候选补丁依次通过配套的测试用例。最后,直到生成了一个合理的补丁或验证完所有的候选补丁。在Defects4J数据集上的六个项目中的395个缺陷进行实验,实验结果表明,PCRepair正确修复了38个缺陷,并与j Gen Prog、Historical Fix、JAID、ACS、KPAR、ELIXIR、AVATAR、Nopol、Fix Miner、Sketch Fix、CODIT和Tufano19等方法相比较,PCRepair在缺陷修复成功率和效率上优于现有方法。(2)针对软件缺陷自动修复中修复粒度太粗和补丁质量较差的问题,提出了基于图挖掘模板和遗传编程的软件缺陷自动修复方法(Graph Mining Template and Genetic Programming based Automatic Software Repair),并实现了缺陷修复工具MGRepair。首先,该方法采用Ochiai缺陷定位技术定位到可疑缺陷语句,并生成可疑缺陷语句列表。其次,将可疑语句的上下文与图挖掘模板的上下文相匹配,为可疑语句生成初始化种群,根据遗传编程的变异和交叉操作对缺陷程序进行演化,生成新个体。然后,将候选补丁依次通过配套的测试用例,使用测试用例的优先级排序技术对测试用例进行降序排列。最后,过滤掉未能通过测试用例的补丁并将通过测试用例的补丁进行输出。在Defects4J数据集上的六个项目中的395个缺陷进行实验,实验结果表明,MGRepair正确修复了41个缺陷,并与j Gen Prog、Historical Fix、JAID、ACS、KPAR、ELIXIR、AVATAR、Nopol、Fix Miner、Sketch Fix、CODIT和Tufano19等方法相比较,MGRepair在缺陷修复成功率和效率上优于现有方法。(3)本文将PCRepair与MGRepair两种软件缺陷自动修复方法集成为一个修复工具Bug Fix。该修复工具主要由缺陷定位模块、补丁生成模块以及补丁验证模块三大模块组成。该修复工具使用方法简明,只需要根据该工具的说明执行即可,具有相应的应用价值。