关键词:
自动修正
示例演化
遗传编程
错误定位
变量映射
语法树
摘要:
本文研究了程序自动修正方法,并设计了一个学生程序自动修正系统,针对高校Java语言课程的编程练习,为学生提交的有缺陷的程序代码提供修正方案。由于学生程序具有程序规模小、含有丰富的模板程序、程序中包含多个缺陷等特征,教师人工检查大量学生程序的错误会耗费大量的时间和精力。目前现有的程序自动修正方法多为针对工业程序,且能够修正的错误具有局限性,取决于变异算子的设计,以及现有修正方法大多只能修正程序中的单个错误,对于包含多个缺陷的程序则无法解决,且程序修正的准确性一般依赖于错误定位的准确性,故修正的时间效率较低,占用空间较大。本文针对学生程序的特点研究基于示例演化的学生程序修正方法,并完成系统设计,设计并实现了基于示例演化的Java学生程序自动修正系统,学生在本系统上练习编程题,可以对学生提交的程序代码进行自动修复,为学生用户提供修正方案作为参考,减少教师的工作量。针对上述问题,本文完成了如下工作:首先,使用遗传编程算法中的适应进化结构作为系统的整体框架,从程序的变异方法、变异体的存储、种群的生成和适应度的计算几个方面改进传统的遗传编程方法,不断迭代选择淘汰不适合的变异体,从中选择修正程序。其次,采用从示例程序的语法树中挖掘与学生程序的语法树相似结构的子树并与之替换的方法进行程序的变异,实现程序的自动修正。为了提高程序自动修正的准确性,采用语法树子树挖掘匹配的方法,选择与学生程序的语法结构最为近似的教师模板程序作为标准示例程序,从相似度最大的标准示例程序中进行语法树子树匹配挖掘和替换。为了提高自动修正的时间效率,本文采用了语法树结构相似度算法,匹配学生程序的语法树和示例程序的语法树的语法结构相似性,静态的定位两棵语法树的在相同结构下的相似但不完全相同的节点,提高该类节点被遗传算法选择的概率,避免盲目选择错误位置。最后,本文使用真实求职编程网站上的题目与学生提交的程序作为测试集,通过实验分析验证了程序自动修正系统可以准确修复存在多个缺陷的学生程序并给出修正方案。