CN109408114B - 一种程序错误自动修正方法、装置、电子设备及存储介质 - Google Patents

一种程序错误自动修正方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN109408114B
CN109408114B CN201810950683.5A CN201810950683A CN109408114B CN 109408114 B CN109408114 B CN 109408114B CN 201810950683 A CN201810950683 A CN 201810950683A CN 109408114 B CN109408114 B CN 109408114B
Authority
CN
China
Prior art keywords
program
student
nodes
programs
variant
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810950683.5A
Other languages
English (en)
Other versions
CN109408114A (zh
Inventor
王甜甜
许家欢
王克朝
苏小红
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Harbin Institute of Technology
Original Assignee
Harbin Institute of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Harbin Institute of Technology filed Critical Harbin Institute of Technology
Priority to CN201810950683.5A priority Critical patent/CN109408114B/zh
Publication of CN109408114A publication Critical patent/CN109408114A/zh
Application granted granted Critical
Publication of CN109408114B publication Critical patent/CN109408114B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供了一种程序错误自动修正方法、装置、电子设备及存储介质,包括:S1根据待进行修正的学生程序从预先设定的多个模板程序获取与学生程序最为匹配的模板程序作为示例程序;S2根据学生程序以及示例程序进行语法树匹配,获取两个程序中语法结构相似节点和语法结构不同节点;S3获取两个程序相同功能变量的映射表;S4生成第一代变异体种群;S5根据测试通过次数以及和示例程序的相似度计算变异体的适应度;S6采用交叉和变异操作生成新一代变异体种群;S7循环执行S5和S6直到有变异体可以通过所有规定的测试用例或达到预设迭代次数,将适应度最高的变异体作为学生程序的修正程序以及其对应的编辑序列的操作作为修正方案输出。

Description

一种程序错误自动修正方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机技术领域,具体涉及一种程序错误自动修正方法、装置、电子设备及存储介质。
背景技术
学生程序的自动修正在教育领域和软件自动修正领域,都有着重要的应用。
现今我国当代大学生计算机编程教育和计算机行业公司招聘人才的过程中,mooc课堂、acm程序设计竞赛、各学校的代码评审系统以及牛客网、赛码网等计算机领域就业和招聘人才在线编程测试等网站非常流行,深受广大学生、教师和公司企业的欢迎。这些网站上提供大量的编程题和编译系统,可以在线编程,在线对学生提交的程序代码编译运行,为学生提供程序是否正确的结果。学生可以在这些网站上大量的做编程题,提高自己的编码水平。学生将自己写的程序代码提交给系统,系统会使用设置好的测试用例运行学生程序,如果全部通过则代表accept,如果有未通过的测试用例则代表wrong answer。然而学生在做编程题的过程中,经常会遇到各种各样的错误导致无法通过系统的检测。现有的编程题检测网站只能告诉学生程序是正确的或不正确的,但是不能提示学生错误的具体位置和程序的更改方案。对于教师在指导学生修正程序时会耗费大量时间,尤其是现在流行的网络课堂,教师无法对学生进行一一指导。如果可以将程序自动修正的方法运用于学生程序代码测评系统中,当学生提交的代码有错误时,则系统会给出一到多个针对学生提交的代码的修正程序和修正方案提供给学生作为参考。这种方法既可以为多次修改提交均不能通过系统测评的学生提高积极性,也可以给参与指导教学的老师带来极大的便利。
目前已有很多关于程序自动修正的方法和工具,如GenProg、PAR、RSRepair等,但是现有的程序自动修正方法多为面向工业领域的代码,面向工业领域的代码通常由成熟的工程师完成,代码规模大,错误较少,通常默认为单个错误,修正方法多为从自身程序代码中挖掘提取操作符或单条语句与可疑错误位置的代码进行插入、删除或替换操作,以此方法生成变异体。而学生程序代码由缺少编程经验的学生完成,代码规模小,程序结构多样,包含错误较多且语句缺乏规范性,按照传统的自动修正方法从自身提取修正代码生成变异体并不适用。
发明内容
针对现有技术中的缺陷,本发明提供一种程序错误自动修正方法、装置、电子设备及存储介质。
具体地,本发明提供以下技术方案:
第一方面,本发明提供了一种程序错误自动修正方法,包括:
S1、根据待进行修正的学生程序从预先设定的多个模板程序获取与所述学生程序最为匹配的模板程序作为示例程序;其中,所述待进行修正的学生程序是学生提交的含有缺陷的完成相应题目要求且无法通过所有规定的测试用例的程序;所述多个模板程序是教师提供的多个完成相应题目要求且能够通过所有规定的测试用例的程序,其中,每个模板程序都是语法结构不同的格式规范的程序;
S2、根据所述学生程序以及所述示例程序进行语法树匹配,获取两个程序中语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值;
S3、对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,并将得到的执行值序列进行匹配,获取两个程序相同功能变量的映射表;
S4、通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,并将两个程序中选中的节点进行变异操作,以及将变异操作存储在编辑序列中,生成第一代变异体种群;
S5、将当前最新一代变异体种群中的编辑序列的操作应用于所述学生程序上,生成对应的变异体,使用所述预设测试用例执行所有变异体,通过所述预设测试用例的执行结果、变异体与所述示例程序中对应节点的语法结构的匹配度计算变异体的适应度;
S6、按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行交叉和变异操作,形成新的编辑序列,生成新一代变异体种群;
S7、循环执行S5和S6直到有变异体可以通过所有规定的测试用例或达到预设迭代次数,将适应度最高的变异体作为所述学生程序的修正程序以及其对应的编辑序列的操作作为修正方案输出。
进一步地,所述S1具体包括:
将预先设定的多个模板程序以及待进行修正的学生程序分别生成对应的语法树,其中语法树的每一个节点对应程序代码中一段结构规范的代码;
将学生程序的语法树与每一个模板程序的语法树进行子树匹配,将与学生程序的语法树匹配程度最高的模板程序作为示例程序。
进一步地,所述S2具体包括:
从所述学生程序和所述示例程序的语法树中通过最大公共子树匹配的方式寻找语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值,其中,对语法结构不同节点赋予更高的权值;
其中,从所述学生程序和所述示例程序的语法树中通过最大公共子树匹配的方式寻找语法结构相似节点和语法结构不同节点是指,对两个程序的语法树提取出来的节点序列使用最长公共子序列匹配算法记录匹配路径,两个节点为语法结构相似节点的条件是两个节点对应代码结构相同、它们父节点对应结构相同且两节点对应代码不完全相同;其中,不满足语法结构相似节点条件的均为语法结构不同节点。
进一步地,所述S3具体包括:
对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,对两个程序中每个变量的执行值序列分别做序列匹配,相似度最大的两个值序列对应的变量为相同功能变量,存储到变量映射表中,获取两个程序相同功能变量的映射表。
进一步地,所述S4具体包括:
通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,将被选择的学生程序节点与示例程序节点进行变异操作,变异操作包含插入、删除和替换三种操作,将操作名称、学生程序节点、示例程序节点记录在编辑序列中,预设数量的编辑序列构成第一代变异体种群;
其中,插入操作是将被选择的示例程序节点插入到被选择的学生程序节点后面,删除操作是将被选择的学生程序节点从学生程序语法树中删除,替换操作是将被选择的示例程序节点替换掉学生程序中被选择的节点。
进一步地,所述S5具体包括:
将所述第一代变异体种群中的编辑序列的操作应用于所述学生程序上,将编辑序列中所有操作完成后,对语法树进行重构,得到每个编辑序列对应的变异体,使用所述预设测试用例执行变异体得到执行结果,将示例程序的语法树和变异体的语法树进行子树匹配得到两棵子树的匹配程度,将匹配程度和执行结果按照下面公式进行计算,得到变异体的适应度:
fitness(P)=wposT×|t∈posT|Ppassest|+wnegT×|t∈negT|Ppassest|+wsimilarSimpleTreeMatching(P,S)
其中,P表示变异体,S表示示例程序;fitness(P)表示变异体的适应度,posT表示成功测试用例集合;negT表示失败测试用例集合;t表示一个测试用例;|t∈posT|Ppassest|表示之前成功执行的测试用例执行变异体P时依然成功的个数;|t∈negT|Ppassest|表示之前执行失败的测试用例执行变异体P时变为执行成功的个数;SimpleTreeMatching(P,S)表示变异体P和示例程序S的子树匹配相似度;wposT表示成功测试权重,wnegT表示失败测试权重,wsimilar表示程序匹配权重。
进一步地,所述S6具体包括:
使用轮盘赌选择法按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行插入、删除和替换的变异操作,将变异操作添加到变异体对应的编辑序列中存储,再通过轮盘赌算法选择编辑序列两两进行交叉操作,形成新的编辑序列,生成新一代变异体种群。
第二方面,本发明还提供了一种程序错误自动修正装置,包括:
第一获取模块,用于根据待进行修正的学生程序从预先设定的多个模板程序获取与所述学生程序最为匹配的模板程序作为示例程序;其中,所述待进行修正的学生程序是学生提交的含有缺陷的完成相应题目要求且无法通过所有规定的测试用例的程序;所述多个模板程序是教师提供的多个完成相应题目要求且能够通过所有规定的测试用例的程序,其中,每个模板程序都是语法结构不同的格式规范的程序;
第二获取模块,用于根据所述学生程序以及所述示例程序进行语法树匹配,获取两个程序中语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值;
第三获取模块,用于对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,并将得到的执行值序列进行匹配,获取两个程序相同功能变量的映射表;
第一代变异体种群生成模块,用于通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,并将两个程序中选中的节点进行变异操作,以及将变异操作存储在编辑序列中,生成第一代变异体种群;
变异体适应度计算模块,用于将当前最新一代变异体种群中的编辑序列的操作应用于所述学生程序上,生成对应的变异体,使用所述预设测试用例执行所有变异体,通过所述预设测试用例的执行结果、变异体与所述示例程序中对应节点的语法结构的匹配度计算变异体的适应度;
交叉变异模块,用于按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行交叉和变异操作,形成新的编辑序列,生成新一代变异体种群;
迭代输出模块,用于循环执行变异体适应度计算模块和交叉变异模块直到有变异体可以通过所有规定的测试用例或达到预设迭代次数,将适应度最高的变异体作为所述学生程序的修正程序以及其对应的编辑序列的操作作为修正方案输出。
第三方面,本发明还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述程序错误自动修正方法的步骤。
第四方面,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述程序错误自动修正方法的步骤。
由上述技术方案可知,本发明提供的程序错误自动修正方法,从正确的模板程序中挖掘语法树子树替换到含有缺陷的学生程序中,可以保证程序结构和功能的完整性,减少变异体不能通过编译的情况,并且可以修正代码不规范的学生程序和无法通过任何测试用例的学生程序;此外,本发明利用学生程序和模板程序的结构和执行特征值差异识别及变量映射方法,通过与学生程序语法结构最为相似的模板程序,快速精确定位到学生程序的可疑错误位置,节省错误定位时间的同时提高了错误定位的准确性;此外,本发明在遗传编程算法的基础上将模板程序中正确的逻辑结构转移到含有缺陷的学生程序中,并不断结合缺陷程序自身的语法和语义特征进行进化,自动生成高质量的变异体。进一步地,可以将本发明提供的程序错误自动修正方法集成到学生程序自动评分系统中,提供教师用户和学生用户使用,教师提供题目和模板程序以及测试用例,学生可在线编程和在线测试,得到修正程序和修正方案作为参考,因此本发明具有很好的推广应用前景。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的程序错误自动修正方法的流程图;
图2是本发明一实施例提供的程序错误自动修正方法的实现原理示意图;
图3是步骤101的过程处理示意图;
图4是步骤102的过程处理示意图;
图5是步骤103的过程处理示意图;
图6是步骤104的过程处理示意图;
图7是步骤105和步骤106的过程处理示意图;
图8是本发明另一实施例提供的程序错误自动修正装置的结构示意图;
图9是本发明又一实施例提供的电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供了一种程序错误自动修正方法,该方法针对学生程序的规模小、错误个数和种类多、缺乏语句规范性等特点,提出一种基于示例演化的学生程序错误自动修正方法,尤其适用于Java程序错误自动修正。下面将通过具体实施例对本发明提供的程序错误自动修正方法进行详细说明。
本发明一实施例提供了一种程序错误自动修正方法,参见图1,该方法包括如下步骤:
步骤101:根据待进行修正的学生程序从预先设定的多个模板程序获取与所述学生程序最为匹配的模板程序作为示例程序。
在本步骤中,所述待进行修正的学生程序是指学生提交的含有缺陷的完成相应题目要求且无法通过所有规定的测试用例的程序;所述多个模板程序是指教师提供的多个完成相应题目要求且能够通过所有规定的测试用例的程序,其中,每个模板程序都是语法结构不同的格式规范的程序。
步骤102:根据所述学生程序以及所述示例程序进行语法树匹配,获取两个程序中语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值。
步骤103:对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,并将得到的执行值序列进行匹配,获取两个程序相同功能变量的映射表。
在本步骤中,所述插桩是指在程序代码中的变量声明语句和赋值语句后面插入标准输出语句将变量的名称和值输出,从而得到程序中每个变量在执行测试用例时值的变化情况。本步骤所述映射表是一个Map结构,将学生程序和模板程序中相同功能的变量名一一对应存储。
步骤104:通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,并将两个程序中选中的节点进行变异操作,以及将变异操作存储在编辑序列中,生成第一代变异体种群。
步骤105:将当前最新一代变异体种群中的编辑序列的操作应用于所述学生程序上,生成对应的变异体,使用所述预设测试用例执行所有变异体,通过所述预设测试用例的执行结果、变异体与所述示例程序中对应节点的语法结构的匹配度计算变异体的适应度。
需要说明的是,本步骤采用语法结构+特征值差异识别的方法,综合考虑语法结构差异以及测试用例执行得到的结果共同确定变异体的适应度。
步骤106:按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行交叉和变异操作,形成新的编辑序列,生成新一代变异体种群。
步骤107:循环执行步骤105和步骤106直到有变异体可以通过所有规定的测试用例或达到预设迭代次数,将适应度最高的变异体作为所述学生程序的修正程序以及其对应的编辑序列的操作作为修正方案输出。
根据上面描述可知,本实施例提供的基于示例演化的程序错误自动修正方法,具体是按以下步骤完成的:一、对学生程序与大量模板程序建立语法树,对学生程序与每一个模板程序进行语法树匹配,得到语法结构最为相近的模板程序为示例程序;二、对学生程序与示例程序进行语法树匹配,得到语法结构相似节点和不同节点,分别赋予每个节点不同的权值;三、对学生程序和模板程序插桩并编译运行,得到两个程序的执行值序列并进行值序列匹配,得到两个程序相同功能变量的映射表;四、通过轮盘赌选择法根据学生程序和示例程序的节点权值进行选择,权值高的不同节点被选中的概率较大,将两个程序选中节点进行变异(插入、删除、替换)操作,将变异操作存储在编辑序列中,生成第一代变异体种群;五、将编辑序列的操作应用于学生程序上,生成对应的变异体,使用测试用例执行所有变异体,通过测试用例的执行结果和变异体与示例程序的语法结构匹配度计算变异体的适应度;六、按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行交叉和变异操作,维护种群中变异体的数量和多样性;七、循环执行步骤五、六直到有变异体可以通过所有的测试用例或达到迭代次数,输出适应度最高的变异体和变异步骤作为修正程序的参考。
此外,结合图2所示的实现原理图可知,本实施例是从大量的模板程序中选择与学生程序语法结构最为相似的示例程序,使用公共子树匹配方法从学生程序和示例程序中定位到错误节点的位置,对两程序相同功能的变量结合测试用例执行进行变量映射,然后将学生程序进行变异生成初始种群,使用改进后的遗传编程算法进行适应进化自动修正学生程序,最终得到修正程序和修正方案供学生参考。
由上面描述可知,本实施例提供的程序错误自动修正方法,实际上为基于示例演化的学生程序自动修正方法,它涉及示例演化的程序框架以及程序自动修正方法。本实施例的目的是要解决在编程教学中,对学生编写的含有多个缺陷的、代码风格多样的程序代码,从教师提供的标准模板程序中挖掘合适的修正代码进行错误自动修正问题,以及精确定位到学生程序的错误位置和发掘学生程序与模板程序中相同功能的变量问题。基于示例演化的学生程序自动修正方法由相似程序识别与挖掘的模板程序匹配方法、学生程序和模板程序的结构和特征值差异识别即变量映射、程序自动修正模型组成。本实施例提供的程序错误自动修正方法,以含有缺陷的学生程序、教师提供的模板程序、测试用例作为输入,即可得到学生程序的修正代码及修正方案。
由上面描述可知,本实施例提供的程序错误自动修正方法,从正确的模板程序中挖掘语法树子树替换到含有缺陷的学生程序中,可以保证程序结构和功能的完整性,减少变异体不能通过编译的情况,并且可以修正代码不规范的学生程序和无法通过任何测试用例的学生程序;此外,本实施例利用学生程序和模板程序的结构和执行特征值差异识别及变量映射方法,通过与学生程序语法结构最为相似的模板程序,快速精确定位到学生程序的可疑错误位置,节省错误定位时间的同时提高了错误定位的准确性;此外,本实施例在遗传编程算法的基础上将模板程序中正确的逻辑结构转移到含有缺陷的学生程序中,并不断结合缺陷程序自身的语法和语义特征进行进化,自动生成高质量的变异体。进一步地,可以将本实施例提供的程序错误自动修正方法集成到学生程序自动评分系统中,提供教师用户和学生用户使用,教师提供题目和模板程序以及测试用例,学生可在线编程和在线测试,得到修正程序和修正方案作为参考,因此本实施例具有很好的推广应用前景。
在一种可选实施方式中,参见图3,上述步骤101具体通过如下方式实现:
将预先设定的多个模板程序以及待进行修正的学生程序分别生成对应的语法树,其中语法树的每一个节点对应程序代码中一段结构规范的代码;
将学生程序的语法树与每一个模板程序的语法树进行子树匹配,将与学生程序的语法树匹配程度最高的模板程序作为示例程序。
需要说明的是,语法树子树匹配方法由学生程序语法树与大量模板程序语法树通过树的遍历得到相应的记录以该节点为根的子树信息、节点内容长度、节点类型、父节点、根节点、在源码中起始位置等信息的节点序列,将节点序列进行最长公共子序列匹配,匹配方法为两个节点的结构和两个节点对应的父节点的结构均相同且两个节点对应的代码内容不完全相同,得到与学生程序语法结构最为相近的模板程序作为示例程序。
在一种可选实施方式中,参见图4,上述步骤102具体通过如下方式实现:
从所述学生程序和所述示例程序的语法树中通过最大公共子树匹配的方式寻找语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值,其中,对语法结构不同节点赋予更高的权值;
其中,从所述学生程序和所述示例程序的语法树中通过最大公共子树匹配的方式寻找语法结构相似节点和语法结构不同节点是指,对两个程序的语法树提取出来的节点序列使用最长公共子序列匹配算法记录匹配路径,两个节点为语法结构相似节点的条件是两个节点对应代码结构相同、它们父节点对应结构相同且两节点对应代码不完全相同;其中,不满足语法结构相似节点条件的均为语法结构不同节点。
可见,在本实施方式中,学生程序与示例程序的语法结构差异识别方法由两个程序的语法树通过子树匹配的方式得到不相似节点(也称不同节点)位置,从而获得两个程序的每个语法节点及其对应的权值。
在一种可选实施方式中,参见图5,上述步骤103具体通过如下方式实现:
对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,对两个程序中每个变量的执行值序列分别做序列匹配,相似度最大的两个值序列对应的变量为相同功能变量,存储到变量映射表中,获取两个程序相同功能变量的映射表。
可见,在本实施方式中,学生程序与示例程序的执行特征值变量映射方法由学生程序和示例程序的语法树通过插桩得到新的程序执行测试用例后获得程序中每个变量的执行值序列,通过执行值序列的匹配检测到两个程序中相同功能不同变量名的变量,将对应的变量存储在变量映射表中。
在一种可选实施方式中,参见图6,上述步骤104具体通过如下方式实现:
通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,需要说明的是,语法结构不同的节点权值较高,被选择的概率较大。将被选择的学生程序节点与示例程序节点进行变异操作,变异操作包含插入、删除和替换三种操作,将操作名称、学生程序节点、示例程序节点记录在编辑序列中,预设数量的编辑序列构成第一代变异体种群;
其中,插入操作是将被选择的示例程序节点插入到被选择的学生程序节点后面,删除操作是将被选择的学生程序节点从学生程序语法树中删除,替换操作是将被选择的示例程序节点替换掉学生程序中被选择的节点。
在一种可选实施方式中,参见图7,上述步骤105具体通过如下方式实现:
将所述第一代变异体种群中的编辑序列的操作应用于所述学生程序上,将编辑序列中所有操作完成后,对语法树进行重构,得到每个编辑序列对应的变异体,使用所述预设测试用例执行变异体得到执行结果,将示例程序的语法树和变异体的语法树进行子树匹配得到两棵子树的匹配程度,将匹配程度和执行结果按照下面公式进行计算,得到变异体的适应度:
fitness(P)=wposT×|t∈posT|Ppassest|+wnegT×|t∈negT|Ppassest|+wsimilarSimpleTreeMatching(P,S)
其中,P表示变异体,S表示示例程序;fitness(P)表示变异体的适应度,posT表示成功测试用例集合;negT表示失败测试用例集合;t表示一个测试用例;|t∈posT|Ppassest|表示之前成功执行的测试用例执行变异体P时依然成功的个数;|t∈negT|Ppassest|表示之前执行失败的测试用例执行变异体P时变为执行成功的个数;SimpleTreeMatching(P,S)表示变异体P和示例程序S的子树匹配相似度;wposT表示成功测试权重,wnegT表示失败测试权重,wsimilar表示程序匹配权重。
在一种可选实施方式中,参见图7,上述步骤106具体通过如下方式实现:
使用轮盘赌选择法按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行插入、删除和替换的变异操作,将变异操作添加到变异体对应的编辑序列中存储,再通过轮盘赌算法选择编辑序列两两进行交叉操作,形成新的编辑序列,生成新一代变异体种群。
参见图7,本实施方式是在GenProg算法的基础上根据学生程序规模小、错误种类和数量多、程序结构不规范等特点,有针对性的对其进行改进。对种群中每一条编辑序列在学生程序语法树中进行相应操作,将编辑序列中所有操作完成后,对语法树进行重构,得到每个编辑序列对应的变异体。使用测试用例执行变异体得到执行结果,将模板程序的语法树和变异体的语法树进行子树匹配得到两棵子树的匹配程度,将匹配程度和执行结果按照下面公式进行计算,得到变异体的适应度:
fitness(P)=wposT×|t∈posT|Ppassest|+wnegT×|t∈negT|Ppassest|+wsimilarSimpleTreeMatching(P,S)
其中,P表示变异体,S表示示例程序;fitness(P)表示变异体的适应度,posT表示成功测试用例集合;negT表示失败测试用例集合;t表示一个测试用例;|t∈posT|Ppassest|表示之前成功执行的测试用例执行变异体P时依然成功的个数;|t∈negT|Ppassest|表示之前执行失败的测试用例执行变异体P时变为执行成功的个数;SimpleTreeMatching(P,S)表示变异体P和示例程序S的子树匹配相似度;wposT表示成功测试权重,wnegT表示失败测试权重,wsimilar表示程序匹配权重。
然后使用轮盘赌选择法按照变异体的适应度在所有变异体适应度的占比为概率选择变异体进行插入、删除和替换的变异操作,将变异操作添加到变异体对应的编辑序列中存储,再通过轮盘赌算法选择编辑序列两两进行交叉操作,形成新的编辑序列,生成新一代的编辑序列种群。重复执行该过程直到有变异体可以通过所有测试用例或达到一定的迭代次数,将适应度最高的变异体作为修正程序以及其对应的编辑序列的操作作为修正方案输出。
具体地,本实施方式对GenProg算法进行了如下改进:一、采用从示例程序中挖掘语法树子树来进行变异代替从程序自身挖掘语句或操作符;二、采用二维数组存储编辑序列,只使用数字存储修正操作步骤,每三个数字为一次操作代替变异体的存储,在执行变异体之前将编辑序列中的操作应用到学生程序中,生成变异体;三、改进后的适应进化方法相比传统遗传编程方法要多一步变异体与示例程序的语法树子树匹配计算,较传统适应度计算占用时间多,但是适应度的值更加精确,不会出现大量变异体适应度均为0的现象;四、使用学生程序和示例程序的语法树子树匹配方法来定位错误位置;五、变异方法为在数组上添加操作序列,复杂度为O(1),交叉方法为两个数组进行交叉,复杂度为O(n)。六、能够修复含有多个错误的程序。
基于相同的发明构思,本发明另一实施例提供了一种程序错误自动修正装置,参见图8,该装置包括:第一获取模块21、第二获取模块22、第三获取模块23、第一代变异体种群生成模块24、变异体适应度计算模块25、交叉变异模块26和迭代输出模块27,其中:
第一获取模块21,用于根据待进行修正的学生程序从预先设定的多个模板程序获取与所述学生程序最为匹配的模板程序作为示例程序;其中,所述待进行修正的学生程序是学生提交的含有缺陷的完成相应题目要求且无法通过所有规定的测试用例的程序;所述多个模板程序是教师提供的多个完成相应题目要求且能够通过所有规定的测试用例的程序,其中,每个模板程序都是语法结构不同的格式规范的程序;
第二获取模块22,用于根据所述学生程序以及所述示例程序进行语法树匹配,获取两个程序中语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值;
第三获取模块23,用于对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,并将得到的执行值序列进行匹配,获取两个程序相同功能变量的映射表;
第一代变异体种群生成模块24,用于通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,并将两个程序中选中的节点进行变异操作,以及将变异操作存储在编辑序列中,生成第一代变异体种群;
变异体适应度计算模块25,用于将当前最新一代变异体种群中的编辑序列的操作应用于所述学生程序上,生成对应的变异体,使用所述预设测试用例执行所有变异体,通过所述预设测试用例的执行结果、变异体与所述示例程序中对应节点的语法结构的匹配度计算变异体的适应度;
交叉变异模块26,用于按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行交叉和变异操作,形成新的编辑序列,生成新一代变异体种群;
迭代输出模块27,用于循环执行变异体适应度计算模块和交叉变异模块直到有变异体可以通过所有规定的测试用例或达到预设迭代次数,将适应度最高的变异体作为所述学生程序的修正程序以及其对应的编辑序列的操作作为修正方案输出。
本实施例所述的程序错误自动修正装置可以用于执行上述实施例所述的程序错误自动修正方法,其原理和技术效果类似,此处不再赘述。
基于相同的发明构思,本发明又一实施例提供了一种电子设备,参见图9,所述电子设备具体包括如下内容:处理器901、存储器902、通信接口903和总线904;
其中,所述处理器901、存储器902、通信接口903通过所述总线904完成相互间的通信;所述通信接口903用于实现各建模软件及智能制造装备模块库等相关设备之间的信息传输;
所述处理器901用于调用所述存储器902中的计算机程序,所述处理器执行所述计算机程序时实现上述实施例所述程序错误自动修正方法中的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
步骤101:根据待进行修正的学生程序从预先设定的多个模板程序获取与所述学生程序最为匹配的模板程序作为示例程序;其中,所述待进行修正的学生程序是学生提交的含有缺陷的完成相应题目要求且无法通过所有规定的测试用例的程序;所述多个模板程序是教师提供的多个完成相应题目要求且能够通过所有规定的测试用例的程序,其中,每个模板程序都是语法结构不同的格式规范的程序。
步骤102:根据所述学生程序以及所述示例程序进行语法树匹配,获取两个程序中语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值。
步骤103:对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,并将得到的执行值序列进行匹配,获取两个程序相同功能变量的映射表。
步骤104:通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,并将两个程序中选中的节点进行变异操作,以及将变异操作存储在编辑序列中,生成第一代变异体种群。
步骤105:将当前最新一代变异体种群中的编辑序列的操作应用于所述学生程序上,生成对应的变异体,使用所述预设测试用例执行所有变异体,通过所述预设测试用例的执行结果、变异体与所述示例程序中对应节点的语法结构的匹配度计算变异体的适应度。
步骤106:按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行交叉和变异操作,形成新的编辑序列,生成新一代变异体种群。
步骤107:循环执行步骤105和步骤106直到有变异体可以通过所有规定的测试用例或达到预设迭代次数,将适应度最高的变异体作为所述学生程序的修正程序以及其对应的编辑序列的操作作为修正方案输出。
基于相同的发明构思,本发明又一实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述程序错误自动修正方法中的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
步骤101:根据待进行修正的学生程序从预先设定的多个模板程序获取与所述学生程序最为匹配的模板程序作为示例程序;其中,所述待进行修正的学生程序是学生提交的含有缺陷的完成相应题目要求且无法通过所有规定的测试用例的程序;所述多个模板程序是教师提供的多个完成相应题目要求且能够通过所有规定的测试用例的程序,其中,每个模板程序都是语法结构不同的格式规范的程序。
步骤102:根据所述学生程序以及所述示例程序进行语法树匹配,获取两个程序中语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值。
步骤103:对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,并将得到的执行值序列进行匹配,获取两个程序相同功能变量的映射表。
步骤104:通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,并将两个程序中选中的节点进行变异操作,以及将变异操作存储在编辑序列中,生成第一代变异体种群。
步骤105:将当前最新一代变异体种群中的编辑序列的操作应用于所述学生程序上,生成对应的变异体,使用所述预设测试用例执行所有变异体,通过所述预设测试用例的执行结果、变异体与所述示例程序中对应节点的语法结构的匹配度计算变异体的适应度。
步骤106:按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行交叉和变异操作,形成新的编辑序列,生成新一代变异体种群。
步骤107:循环执行步骤105和步骤106直到有变异体可以通过所有规定的测试用例或达到预设迭代次数,将适应度最高的变异体作为所述学生程序的修正程序以及其对应的编辑序列的操作作为修正方案输出。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上实施例仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种程序错误自动修正方法,其特征在于,包括:
S1、根据待进行修正的学生程序从预先设定的多个模板程序获取与所述学生程序最为匹配的模板程序作为示例程序;其中,所述待进行修正的学生程序是学生提交的含有缺陷的完成相应题目要求且无法通过所有规定的测试用例的程序;所述多个模板程序是教师提供的多个完成相应题目要求且能够通过所有规定的测试用例的程序,其中,每个模板程序都是语法结构不同的格式规范的程序;
S2、根据所述学生程序以及所述示例程序进行语法树匹配,获取两个程序中语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值;
S3、对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,并将得到的执行值序列进行匹配,获取两个程序相同功能变量的映射表;
S4、通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,并将两个程序中选中的节点进行变异操作,以及将变异操作存储在编辑序列中,生成第一代变异体种群;
S5、将当前最新一代变异体种群中的编辑序列的操作应用于所述学生程序上,生成对应的变异体,使用所述预设测试用例执行所有变异体,通过所述预设测试用例的执行结果、变异体与所述示例程序中对应节点的语法结构的匹配度计算变异体的适应度;
S6、按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行交叉和变异操作,形成新的编辑序列,生成新一代变异体种群;
S7、循环执行S5和S6直到有变异体可以通过所有规定的测试用例或达到预设迭代次数,将适应度最高的变异体作为所述学生程序的修正程序以及其对应的编辑序列的操作作为修正方案输出。
2.根据权利要求1所述的方法,其特征在于,所述S1具体包括:
将预先设定的多个模板程序以及待进行修正的学生程序分别生成对应的语法树,其中语法树的每一个节点对应程序代码中一段结构规范的代码;
将学生程序的语法树与每一个模板程序的语法树进行子树匹配,将与学生程序的语法树匹配程度最高的模板程序作为示例程序。
3.根据权利要求1所述的方法,其特征在于,所述S2具体包括:
从所述学生程序和所述示例程序的语法树中通过最大公共子树匹配的方式寻找语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值,其中,对语法结构不同节点赋予更高的权值;
其中,从所述学生程序和所述示例程序的语法树中通过最大公共子树匹配的方式寻找语法结构相似节点和语法结构不同节点是指,对两个程序的语法树提取出来的节点序列使用最长公共子序列匹配算法记录匹配路径,两个节点为语法结构相似节点的条件是两个节点对应代码结构相同、它们父节点对应结构相同且两节点对应代码不完全相同;其中,不满足语法结构相似节点条件的均为语法结构不同节点。
4.根据权利要求3所述的方法,其特征在于,所述S3具体包括:
对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,对两个程序中每个变量的执行值序列分别做序列匹配,相似度最大的两个值序列对应的变量为相同功能变量,存储到变量映射表中,获取两个程序相同功能变量的映射表。
5.根据权利要求4所述的方法,其特征在于,所述S4具体包括:
通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,将被选择的学生程序节点与示例程序节点进行变异操作,变异操作包含插入、删除和替换三种操作,将操作名称、学生程序节点、示例程序节点记录在编辑序列中,预设数量的编辑序列构成第一代变异体种群;
其中,插入操作是将被选择的示例程序节点插入到被选择的学生程序节点后面,删除操作是将被选择的学生程序节点从学生程序语法树中删除,替换操作是将被选择的示例程序节点替换掉学生程序中被选择的节点。
6.根据权利要求5所述的方法,其特征在于,所述S5具体包括:
将所述第一代变异体种群中的编辑序列的操作应用于所述学生程序上,将编辑序列中所有操作完成后,对语法树进行重构,得到每个编辑序列对应的变异体,使用所述预设测试用例执行变异体得到执行结果,将示例程序的语法树和变异体的语法树进行子树匹配得到两棵子树的匹配程度,将匹配程度和执行结果按照下面公式进行计算,得到变异体的适应度:
fitness(P)=wposT×|t∈posT|Ppassest|+wnegT×|t∈negT|Ppassest|+wsimilarSimpleTreeMatching(P,S)
其中,P表示变异体,S表示示例程序;fitness(P)表示变异体的适应度,posT表示成功测试用例集合;negT表示失败测试用例集合;t表示一个测试用例;|t∈posT|Ppassest|表示之前成功执行的测试用例执行变异体P时依然成功的个数;|t∈negT|Ppassest|表示之前执行失败的测试用例执行变异体P时变为执行成功的个数;SimpleTreeMatching(P,S)表示变异体P和示例程序S的子树匹配相似度;wposT表示成功测试权重,wnegT表示失败测试权重,wsimilar表示程序匹配权重。
7.根据权利要求6所述的方法,其特征在于,所述S6具体包括:
使用轮盘赌选择法按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行插入、删除和替换的变异操作,将变异操作添加到变异体对应的编辑序列中存储,再通过轮盘赌算法选择编辑序列两两进行交叉操作,形成新的编辑序列,生成新一代变异体种群。
8.一种程序错误自动修正装置,其特征在于,包括:
第一获取模块,用于根据待进行修正的学生程序从预先设定的多个模板程序获取与所述学生程序最为匹配的模板程序作为示例程序;其中,所述待进行修正的学生程序是学生提交的含有缺陷的完成相应题目要求且无法通过所有规定的测试用例的程序;所述多个模板程序是教师提供的多个完成相应题目要求且能够通过所有规定的测试用例的程序,其中,每个模板程序都是语法结构不同的格式规范的程序;
第二获取模块,用于根据所述学生程序以及所述示例程序进行语法树匹配,获取两个程序中语法结构相似节点和语法结构不同节点,并为每个节点赋予不同的权值;
第三获取模块,用于对所述学生程序和所述示例程序进行插桩,得到两个插桩后的程序,使用预设测试用例执行两个插桩后的程序,获得两个程序中每个变量的执行值序列,并将得到的执行值序列进行匹配,获取两个程序相同功能变量的映射表;
第一代变异体种群生成模块,用于通过轮盘赌选择法根据节点对应的权值对所述学生程序以及所述示例程序中的节点进行选择,并将两个程序中选中的节点进行变异操作,以及将变异操作存储在编辑序列中,生成第一代变异体种群;
变异体适应度计算模块,用于将当前最新一代变异体种群中的编辑序列的操作应用于所述学生程序上,生成对应的变异体,使用所述预设测试用例执行所有变异体,通过所述预设测试用例的执行结果、变异体与所述示例程序中对应节点的语法结构的匹配度计算变异体的适应度;
交叉变异模块,用于按照每个变异体适应度与所有变异体适应度之和的比例作为概率选择变异体进行交叉和变异操作,形成新的编辑序列,生成新一代变异体种群;
迭代输出模块,用于循环执行变异体适应度计算模块和交叉变异模块直到有变异体可以通过所有规定的测试用例或达到预设迭代次数,将适应度最高的变异体作为所述学生程序的修正程序以及其对应的编辑序列的操作作为修正方案输出。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述程序错误自动修正方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述程序错误自动修正方法的步骤。
CN201810950683.5A 2018-08-20 2018-08-20 一种程序错误自动修正方法、装置、电子设备及存储介质 Active CN109408114B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810950683.5A CN109408114B (zh) 2018-08-20 2018-08-20 一种程序错误自动修正方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810950683.5A CN109408114B (zh) 2018-08-20 2018-08-20 一种程序错误自动修正方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN109408114A CN109408114A (zh) 2019-03-01
CN109408114B true CN109408114B (zh) 2021-06-22

Family

ID=65464333

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810950683.5A Active CN109408114B (zh) 2018-08-20 2018-08-20 一种程序错误自动修正方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN109408114B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110262957B (zh) * 2019-04-12 2022-12-27 江西财经大学 一种相似程序间测试用例的重用方法及其实现系统
CN116594870B (zh) * 2023-04-26 2024-02-23 南通大学 一种基于可疑语句变异的错误定位方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104077227A (zh) * 2014-07-08 2014-10-01 大连海事大学 一种基于b/s架构的程序源代码的评判系统及方法
CN104407889A (zh) * 2014-11-11 2015-03-11 百度在线网络技术(北京)有限公司 应用程序的修复方法和装置
US9015712B1 (en) * 2012-06-29 2015-04-21 Emc Corporation Environment template-driven environment provisioning in a virtual infrastructure
CN104731583A (zh) * 2015-02-16 2015-06-24 翁建广 基于习题和知识点编号记录的学习方案生成系统及方法
US9477463B2 (en) * 2013-08-12 2016-10-25 Khan Academy, Inc. Systems and methods for creating a program spin-off
CN106537332A (zh) * 2014-06-13 2017-03-22 查尔斯斯塔克德拉珀实验室公司 软件分析系统和方法
CN107145381A (zh) * 2017-04-05 2017-09-08 同济大学 面向实践教学的mips‑cpu测试工具
CN108345468A (zh) * 2018-01-29 2018-07-31 华侨大学 基于树和序列相似度的编程语言代码查重方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160179476A1 (en) * 2012-09-13 2016-06-23 Samir Issa Method Of Operating A Software Engine For Storing, Organizing And Reporting Data In An Organizational Environment Through User Created Templates And Data Items By Executing Computer-Executable Instructions Stored On A Non-Transitory Computer-Readable Medium
US10331541B2 (en) * 2016-06-14 2019-06-25 Open Invention Network Llc Collaborative data sharing and data modification application

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9015712B1 (en) * 2012-06-29 2015-04-21 Emc Corporation Environment template-driven environment provisioning in a virtual infrastructure
US9477463B2 (en) * 2013-08-12 2016-10-25 Khan Academy, Inc. Systems and methods for creating a program spin-off
CN106537332A (zh) * 2014-06-13 2017-03-22 查尔斯斯塔克德拉珀实验室公司 软件分析系统和方法
CN104077227A (zh) * 2014-07-08 2014-10-01 大连海事大学 一种基于b/s架构的程序源代码的评判系统及方法
CN104407889A (zh) * 2014-11-11 2015-03-11 百度在线网络技术(北京)有限公司 应用程序的修复方法和装置
CN104731583A (zh) * 2015-02-16 2015-06-24 翁建广 基于习题和知识点编号记录的学习方案生成系统及方法
CN107145381A (zh) * 2017-04-05 2017-09-08 同济大学 面向实践教学的mips‑cpu测试工具
CN108345468A (zh) * 2018-01-29 2018-07-31 华侨大学 基于树和序列相似度的编程语言代码查重方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
《自动程序修复方法研究述评》;王赞等;《计算机学报》;20180331;第41卷(第3期);第588-610页 *
基于变异的软件错误定位方法研究综述;迟洋等;《智能计算机与应用》;20171031;第7卷(第5期);第157-160页 *
基于遗传编程的学生程序修正方法;王克朝等;《计算机应用研究》;20180630;第35卷(第6期);第1773-1777页 *

Also Published As

Publication number Publication date
CN109408114A (zh) 2019-03-01

Similar Documents

Publication Publication Date Title
Wang et al. Search, align, and repair: data-driven feedback generation for introductory programming exercises
CN109271326B (zh) 云数据库的测试方法及其装置、设备和存储介质
CN103838672A (zh) 一种通用报表的自动化测试方法及装置
CN102567201B (zh) 跨模型的图形用户界面测试脚本自动修复方法
CN102567565B (zh) 一种电缆参数的处理方法和系统
CN109710237A (zh) 一种基于自定义二维报表的在线修改校验方法及设备
CN110399286B (zh) 一种基于独立路径的测试数据自动生成方法
CN109408114B (zh) 一种程序错误自动修正方法、装置、电子设备及存储介质
KR102160780B1 (ko) 버그 정정 시스템 및 버그 정정 방법
CN104657269A (zh) 一种嵌入式开发学习自动纠错方法及系统
CN110309214A (zh) 一种指令执行方法及其设备、存储介质、服务器
CN113254024A (zh) 代码继承关系优化方法、装置、设备及存储介质
US20090064092A1 (en) Visual programming language optimization
CN115858404B (zh) 一种基于eda的图形用户界面的测试系统
Sharma et al. Automated checking of the violation of precedence of conditions in else-if constructs in students' programs
CN116226220A (zh) 一种基于逻辑结构和属性特征的遥感流程推荐方法
CN115640155A (zh) 基于语句依赖和补丁相似性的程序自动修复方法与系统
CN113157551B (zh) 一种面向ros的差分模糊测试方法
Rahiman et al. CopyPoppy–A Source Code Plagiarism Detector
CN114461193A (zh) 一种通信协议代码的生成方法、装置、设备及存储介质
Zündorf A heuristic for the subgraph isomorphism problem in executing PROGRES
CN113282495A (zh) 一种基于轨迹监控的Java软件故障定位方法
CN113918474B (zh) 一种基于数据模式的测试用例管理方法及设备
CN110618932A (zh) 基于Web自动化测试的输入框测试方法及可读存储介质
CN117971704B (zh) 一种青少年编程场景的自我引导代码纠错数据集生成方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant