论文部分内容阅读
错误修复耗时耗力,且在软件开发过程中不可避免,因此研究代码错误自动修复技术对提高软件开发效率具有重要意义。近年来基于“生成-检验”框架的自动修复技术得到了研究界的广泛关注。“生成-检验”系统以程序源代码和测试集为输入,生成可能的代码修改方案,使得修改后程序能够通过测试集。现有系统在公开测试集上的实验效果表明“生成-检验”系统具有修复代码错误的能力,但在执行效率、修复正确率上仍有较大优化空间。基于此,本文提出在系统模块优化(错误定位、搜索引擎)与框架扩展两个方面对基于“生成-检验”框架的代码错误自动修复技术展开研究,提高系统的执行效率和修复正确率。本文的主要工作有:·针对错误定位模块,本文首次提出测试期望错误对SFL算法定位精度产生负面影响这一问题,并给出实验数据支持。在此基础上,本文提出一种测试期望纠错算法,通过计算测试用例执行路径之间的相似度找出不合理的测试期望判断结果,即识别测试期望对测试结果的错误判断并将其修复。实验表明,使用纠错后的测试期望能够使SFL定位精度明显提高。·针对搜索引擎模块,本文提出一种“预过滤”算法,针对与表达式修改、替换相关的修复方案,该算法能够在检验器检验前滤除不可能成功的修复方案,减少检验器检验的工作量,从而压缩搜索空间,提高搜索效率。实验表明,“预过滤”算法能够使搜索空间压缩到过滤前的10%左右,在某些复杂程序中搜索空间的压缩比例甚至小于1%。·针对“生成-检验”框架,本文提出两种扩展方案。其一是“交互式调试”,目的是使系统利用开发人员对程序运行状态的判断提高系统错误定位精度,从而提高运行效率。实验表明,交互式系统能够加速开发人员的调试过程。其二是“融合针对特定类型错误修复算法的可扩展框架”,目的是利用其他技术路线的优势增强系统修复能力。本文给出了可扩展框架的实现方案,并以空指针异常修复算法为例在框架中完成二次开发。实验表明,系统能够完成空指针异常修复功能,框架扩展方案具有可行性。