基于缺陷上下文深度学习的程序修复方法
发布时间:2021-11-19 12:05
由于近些年来软件程序应用领域逐渐扩大,这便导致软件规模也会随之变大。因为程序中日渐增加的缺陷会导致程序运行时出现错误的频率越来越大,这种缺陷程序存在的隐患将会影响到整个软件领域。所以,尽可能提前的发现并且修复程序中可能存在的缺陷,是当前软件工程学科中非常值得研究的方向。在修复程序缺陷的问题上,自动修复编程错误,也称为程序修复,在一定程度上提高了修复程序缺陷的效率,推动了软件开发的进程。然而,目前的程序修复方法仍然存在修复率低以及修复类型少等问题,修复效果有待提升。在程序修复的语法错误修复方面,对于修复部分缺陷程序语句,有时可能需要分析整个程序结构,从而浪费了大量的有效时间。而在对程序修复的语义错误修复方面,对程序语句进行有效的结构语义分析又成为了目前语义错误修复的主要限制。针对上述问题,本文提出了一种基于缺陷上下文的深度学习方法来进行错误程序的自动修复,主要分为不考虑编译信息的语法错误修复方法、考虑编译信息的语法错误修复方法和语义错误修复方法。首先,对于修复程序语法错误,本文采用不考虑编译信息的语法错误修复方法和考虑编译信息的语法错误修复方法,采用编译器对程序语句分别进行不编译和编译处...
【文章来源】:哈尔滨工业大学黑龙江省 211工程院校 985工程院校
【文章页数】:79 页
【学位级别】:硕士
【部分图文】:
论文结构图
哈尔滨工业大学工程硕士学位论文-12-(4)模型测试:对数据集中的测试集进行预处理,通过编码映射得到测试数据集的向量矩阵,然后将数据送入经过训练好的Transformer模型进行缺陷程序的自动检测和修复,模型的输出结果为建议修复程序语句。图2-1不考虑编译信息的语法错误修复总体流程2.3不考虑编译信息的语法错误修复方法数据处理本方法是基于大量的学生C语言程序基础上的,然而对于原始的这种程序代码,程序语句中含有大量的不必要的冗余信息,例如:代码注释。在数据预处理阶段首先要对数据集中无用信息进行删除,另外为了适应模型训练数据集的要求,需要对缺陷程序数据进行标准化处理,实际操作在后续小节做详细介绍。为了后续数据处理的方便,需要对原始程序代码进行代码行编码。本方法在实际操作中还需将处理过存储在数据库中的原始训练数据集进行筛选过滤,过滤掉代码长度过短和过长的数据集。另外考虑到实际搜集的学生C语言程序数量较少,为了适应深度学习的大数据集要求,在这里需要对上述处理好的原始数据集进行程序代码的变异操作,变异操作分为两类:typomutator、undeclaredmutator。在变异操作之后会构成错误程序语句和修复语句集,再按照在标准化过程中统计构成的词典构造本方法下的向量编码映射,映射后的训练集向量矩阵存储于数据集下。不考虑编译信息的语法错误修复方法的数据处理流程如图2-2所示,可分为如下四个步骤。
哈尔滨工业大学工程硕士学位论文-13-图2-2不考虑编译信息的语法错误修复方法数据处理流程2.3.1程序预处理本方法采用的数据集是学生的C语言程序,所以本阶段需要对这些数据进行统一的标准化处理,并为每一个程序分配唯一的程序id和对应的任务id。在设计标准化处理时,将每个C语言字符对应标准化为(kind,value)。Value值处理过程:类型名、关键字、特殊字符和库函数在不同程序之间共享,我们在标准化程序时保留它们;对于常量、字符串等采取统一的符号表示,如:0用#表示。Kind值处理过程:利用编写好的正则表达式来匹配程序语句中的每一个C语言字符,得到其对应的类型值。结合之前标准化处理得到的,在程序表示中对行号进行编码,例如第L行的语句S用(L,S)表示,具有k行的程序P表示为(L1,S1),…,(Lk,Sk)<eos>,其中L1,...,Lk是行号,而S1,...,Sk是在相应行的语句的token序列。将处理后的数据利用SQLite数据库进行建表保存。缺陷程序的标准化示例如图2-3所示。图2-3缺陷程序的标准化示例
【参考文献】:
期刊论文
[1]C/C++程序缺陷自动修复与确认方法[J]. 周风顺,王林章,李宣东. 软件学报. 2019(05)
[2]软件错误自动定位关键科学问题及研究进展[J]. 王克朝,王甜甜,苏小红,马培军. 计算机学报. 2015(11)
本文编号:3505001
【文章来源】:哈尔滨工业大学黑龙江省 211工程院校 985工程院校
【文章页数】:79 页
【学位级别】:硕士
【部分图文】:
论文结构图
哈尔滨工业大学工程硕士学位论文-12-(4)模型测试:对数据集中的测试集进行预处理,通过编码映射得到测试数据集的向量矩阵,然后将数据送入经过训练好的Transformer模型进行缺陷程序的自动检测和修复,模型的输出结果为建议修复程序语句。图2-1不考虑编译信息的语法错误修复总体流程2.3不考虑编译信息的语法错误修复方法数据处理本方法是基于大量的学生C语言程序基础上的,然而对于原始的这种程序代码,程序语句中含有大量的不必要的冗余信息,例如:代码注释。在数据预处理阶段首先要对数据集中无用信息进行删除,另外为了适应模型训练数据集的要求,需要对缺陷程序数据进行标准化处理,实际操作在后续小节做详细介绍。为了后续数据处理的方便,需要对原始程序代码进行代码行编码。本方法在实际操作中还需将处理过存储在数据库中的原始训练数据集进行筛选过滤,过滤掉代码长度过短和过长的数据集。另外考虑到实际搜集的学生C语言程序数量较少,为了适应深度学习的大数据集要求,在这里需要对上述处理好的原始数据集进行程序代码的变异操作,变异操作分为两类:typomutator、undeclaredmutator。在变异操作之后会构成错误程序语句和修复语句集,再按照在标准化过程中统计构成的词典构造本方法下的向量编码映射,映射后的训练集向量矩阵存储于数据集下。不考虑编译信息的语法错误修复方法的数据处理流程如图2-2所示,可分为如下四个步骤。
哈尔滨工业大学工程硕士学位论文-13-图2-2不考虑编译信息的语法错误修复方法数据处理流程2.3.1程序预处理本方法采用的数据集是学生的C语言程序,所以本阶段需要对这些数据进行统一的标准化处理,并为每一个程序分配唯一的程序id和对应的任务id。在设计标准化处理时,将每个C语言字符对应标准化为(kind,value)。Value值处理过程:类型名、关键字、特殊字符和库函数在不同程序之间共享,我们在标准化程序时保留它们;对于常量、字符串等采取统一的符号表示,如:0用#表示。Kind值处理过程:利用编写好的正则表达式来匹配程序语句中的每一个C语言字符,得到其对应的类型值。结合之前标准化处理得到的,在程序表示中对行号进行编码,例如第L行的语句S用(L,S)表示,具有k行的程序P表示为(L1,S1),…,(Lk,Sk)<eos>,其中L1,...,Lk是行号,而S1,...,Sk是在相应行的语句的token序列。将处理后的数据利用SQLite数据库进行建表保存。缺陷程序的标准化示例如图2-3所示。图2-3缺陷程序的标准化示例
【参考文献】:
期刊论文
[1]C/C++程序缺陷自动修复与确认方法[J]. 周风顺,王林章,李宣东. 软件学报. 2019(05)
[2]软件错误自动定位关键科学问题及研究进展[J]. 王克朝,王甜甜,苏小红,马培军. 计算机学报. 2015(11)
本文编号:3505001
本文链接:https://www.wllwen.com/kejilunwen/zidonghuakongzhilunwen/3505001.html