论文部分内容阅读
由于近些年来软件程序应用领域逐渐扩大,这便导致软件规模也会随之变大。因为程序中日渐增加的缺陷会导致程序运行时出现错误的频率越来越大,这种缺陷程序存在的隐患将会影响到整个软件领域。所以,尽可能提前的发现并且修复程序中可能存在的缺陷,是当前软件工程学科中非常值得研究的方向。在修复程序缺陷的问题上,自动修复编程错误,也称为程序修复,在一定程度上提高了修复程序缺陷的效率,推动了软件开发的进程。然而,目前的程序修复方法仍然存在修复率低以及修复类型少等问题,修复效果有待提升。在程序修复的语法错误修复方面,对于修复部分缺陷程序语句,有时可能需要分析整个程序结构,从而浪费了大量的有效时间。而在对程序修复的语义错误修复方面,对程序语句进行有效的结构语义分析又成为了目前语义错误修复的主要限制。针对上述问题,本文提出了一种基于缺陷上下文的深度学习方法来进行错误程序的自动修复,主要分为不考虑编译信息的语法错误修复方法、考虑编译信息的语法错误修复方法和语义错误修复方法。首先,对于修复程序语法错误,本文采用不考虑编译信息的语法错误修复方法和考虑编译信息的语法错误修复方法,采用编译器对程序语句分别进行不编译和编译处理,在该处理的基础上再利用深度学习技术对程序的缺陷语句进行预测并得到对应修复。其次,对于修复程序语义错误,本文主要是采用语义错误修复方法,将基于历史缺陷修复程序对的自动程序修复转化为一个机器学习问题,即挖掘同一个编程任务的大量历史缺陷修复程序对中的缺陷修复上下文作为学习语料,对缺陷程序中存在语义错误的程序语句进行有效修复。另外,本文对所提出的不考虑编译信息的语法错误修复方法、考虑编译信息的语法错误修复方法和语义错误修复方法进行了实验评估。实验结果表明,本文提出的不考虑编译信息的语法错误修复方法比当前自动程序修复方法在学生错误程序生成的数据集上进一步修复了缺陷程序。本文提出的考虑编译信息的语法错误修复方法和语义错误修复方法也在该数据集上可以分别修复一定的对应错误类型缺陷程序。