CN109783106B - 一种基于编辑距离的自适应反馈程序评测方法及装置 - Google Patents
一种基于编辑距离的自适应反馈程序评测方法及装置 Download PDFInfo
- Publication number
- CN109783106B CN109783106B CN201811629908.3A CN201811629908A CN109783106B CN 109783106 B CN109783106 B CN 109783106B CN 201811629908 A CN201811629908 A CN 201811629908A CN 109783106 B CN109783106 B CN 109783106B
- Authority
- CN
- China
- Prior art keywords
- test case
- output
- student
- program
- preset test
- 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
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Electrically Operated Instructional Devices (AREA)
Abstract
本发明公开了一种基于编辑距离的自适应反馈程序评测方法及装置,通过检测学生程序的编译信息和测试用例信息,排除一些诸如大小写出错、缺失标点符号、顺序出错、有无空格等常见的常见简单错误,并给出相应的修改信息;然后根据预设测试用例输出的考察类型,应用编辑距离,自适应给出学生代码出错点的反馈指导,帮助学生快速找到代码出错的位置以及修改的帮助信息,可以帮助学生快速定位寻找到代码出错位置,同时节省人工成本,具有十分重要的作用。
Description
技术领域
本发明属于计算机技术领域,尤其涉及一种基于编辑距离的自适应反馈程序评测方法及装置。
背景技术
近年来,随着大规模在线课程教学模式的兴起,对于计算机类在线课程中很重要的环节——编程题的测评,由老师人工批改为主转变为在线的自动评阅。
目前对于编程题的自动评阅,主要有两种方法,一种是将学生程序代码编译为可执行文件,然后输入“预设测试用例输入”,得出“学生代码输出”,再和“预设测试用例输出”比对,给出相应得分情况;另一种是结合程序代码特征和复杂性度量,如学生代码的行数、变量个数、复杂度等去评价学生程序代码的质量并给出得分。这两种方法都有个缺陷:当学生代码编译错误,或者测试用例评测不对,在没有得全分的情况下,面对编译、运行等问题,还是难以下手解决,尤其是在编译通过而测试用例不通过的情况下,由于测试用例不能公开,学生代码有可能只是因为测试用例输出的大小写出错、缺失标点符号、顺序出错、有无空格等简单问题而花费大量时间进行调试,而且,老师在帮学生调试、答疑的过程中,需要做很多重复性的工作,如代码复制、编译、运行后才能检测出学生代码问题,工作量大,且费时费力。
发明内容
本发明的目的在于提供一种基于编辑距离的自适应反馈程序评测方法及装置,通过检测学生代码的编译信息和测试用例信息,应用编辑距离,自适应给出学生代码出错点的反馈指导,帮助学生快速找到代码出错位置并有针对的进行修改。
为了实现上述目的,本发明所采用的技术方案为:一种基于编辑距离的自适应反馈程序评测方法,包括以下步骤:
S1,采集学生程序;
S2,编译学生程序,当编译通过时,转入S3;当编译不通过时,给出帮助信息;
S3,运行学生程序,当运行通过时,给出评价合格的信息;当运行不通过时,比较学生程序的运行结果和预设测试用例输出,通过计算两者编辑距离,给出运行不通过的原因;所述编辑距离的计算方法如下:
d[0][0]=0
d[i][0]=0,1≤i≤m
d[0][j]=0,1≤j≤n
其中,d表示一个[m+1][n+1]大小的二维数组,所述d的数组比字符串长度长1个,是因为需要一个[1][1]大小的数组记录其编辑距离为0,d[i][j]表示完成从A(0,i)到B(0,j)的编辑次数,wdel(ai)表示把A[i]删除的一次操作,wins(bj)表示把B[j]插到A[i]的一次操作,wsub(ai,bj)表示把A[i]用B[j]替换的一次操作,m表示字符串A的长度,n表示字符串B的长度。
进一步的,所述步骤S1还包括:在编译学生程序前,检测学生程序,对学生程序中出现的不安全代码进行过滤。
进一步的,所述步骤S2中,当编译不通过时,所述帮助信息包括:错误代码、错误的具体行号和错误的详细说明;
所述错误代码和错误的详细说明均用于查找问题的解决方案,指导学生调试程序;
所述错误的具体行号用于定位错误程序的位置;
进一步的,所述步骤S3中,通过将学生程序的运行结果与预设测试用例输出进行比对来确定运行是否通过,当学生程序的运行结果与预设测试用例输出相同时,则运行通过;否则为运行不通过;
当学生程序的运行结果与预设测试用例输出不同时,给出运行不通过的结果。
进一步的,所述步骤S3中运行不通过时,评测的具体方法为:
第一步,获取题目预设测试用例的输出;
第二步,确定测试用例的考察类型,所述测试用例的考察类型包括:单一字符串型、多个字符串型和单一纯数值型;
第三步,根据测试用例的考察类型,给出运行不通过的具体原因。
进一步的,所述第二步中,测试用例的考察类型确定方法如下:
当预设测试用例输出文本内容有字符或符号时,且字符串间没有空格隔开,则测试用例类型为单一字符串型;
当预设测试用例输出文本内容有字符或符号时,且字符串间以空格隔开,则测试用例类型为多个字符串型;
当预设测试用例输出文本内容只有纯数值或小数点时,则测试用例类型为单一纯数值型。
进一步的,所述第三步的具体方法为:
步骤1,先检查学生程序中的错误是否属于常见简单错误,当属于常见简单错误时,给出反馈信息,指导学生修改程序;当不属于常见简单错误时,转入步骤2;
步骤2,计算学生程序输出结果和预设测试用例输出的编辑距离,其中,
当测试用例类型为单一字符串型时,比较编辑距离和在计算编辑距离过程中记录的添加字符或删除字符个数,确定是否是因为多输出了或少输出了某些字符导致运行不通过;并计算编辑距离占预设测试用例输出字符串长度的比例,确定学生程序输出结果正确的比例,给出用于指导学生修改程序的反馈信息;
当测试用例类型为多个字符串型时,删除学生程序输出结果和预设测试用例输出字符串间的所有空格;计算删除空格后两者间的编辑距离;比较计算出的编辑距离和在计算编辑距离过程中记录的添加字符或删除字符个数,确定是否是因为多输出了或少输出了某些字符串导致的运行不通过;并计算编辑距离占预设测试用例输出字符串长度的比例,确定学生程序输出结果正确的比例,给出用于指导学生修改程序的反馈信息;
当测试用例类型为单一纯数值型时,将学生程序输出结果和预设测试用例输出转换为字符串;计算两者编辑距离,通过编辑距离、学生程序输出结果和预设测试用例输出的长度,判断是否是由于有效位保留问题导致运行不通过,给出用于指导学生修改程序的反馈信息。
进一步的,所述第二步中,测试用例的考察类型还包括多个纯数值型,所述多个纯数值型的确定方法为:当预设测试用例输出文本内容只有纯数值或小数点或空格,且数值间以空格隔开时,则测试用例类型为多个纯数值型。
进一步的,当测试用例的考察类型为多个纯数值型时的评测方法为:
判断学生程序输出结果的数值型个数和预设测试用例输出的数值型个数是否相等;
当相等时,检查学生程序中的错误是否属于常见简单错误,给出用于指导学生修改程序的反馈信息;
当不相等时,判断前min{学生代码输出结果数值型个数,预设测试用例输出数值型个数}个学生代码输出结果和预设测试用例输出是否匹配,确定是否是由于少输出或多输出了数值导致运行不通过,给出用于指导学生修改程序的反馈信息。
一种基于编辑距离的自适应反馈程序的评测装置,用于实现上述评测方法,包括:
运行教师题目的单元,用于按照设定要求执行教师输入的测试题目;
运行学生程序的单元,用于执行所接收到的学生程序,并生成用于编译的执行文件;
学生程序编译单元,用于对学生程序进行编译,并输出相应的编译结果;
学生程序运行单元,用于运行通过编译的学生程序,并输出运行结果;
预设测试用例输出单元,用于与学生程序的运行结果比对以及判断测试用例的考察类型。
与现有技术相比,本发明至少具有如下有益效果:评测服务器接收到学生提交的程序,编译前会屏蔽过滤掉不安全得恶意语句,编译后判断是否编译通过,如果编译不通过,通过编译器反馈错误信息筛选出编译错误代码、编译错误行号、编译错误详细说明,进而帮助学生快速定位到程序编译不通过的代码位置和建议如何修改;如果编译通过,则继续判断是否运行通过,如果运行出错,则通过预设的测试用例输出,得到四种测试用例考察类型:单一字符串型、多个字符串型、单一纯数值型、多个纯数值型,并结合编辑距离得出程序运行不通过的原因,指导学生修改代码,进而提高学生编程效率,同时减轻实验辅导工作量,节省人工成本。
附图说明
图1为本发明的整体流程图;
图2为本发明中编译不通过时的处理流程图;
图3为本发明中判断测试用例考察类型的流程图;
图4为本发明中编辑距离计算过程中的符号说明;
图5为本发明中单一字符串型程序反馈指导过程流程图;
图6为本发明中多个字符串型程序反馈指导过程流程图;
图7为本发明中单一纯数值型程序反馈指导过程流程图;
图8为本发明中多个纯数值型程序反馈指导过程流程图。
具体实施方式
下面结合附图对本发明作进一步的介绍。
如图1所示,本发明一种基于编辑距离的自适应反馈程序评测方法,包括如下步骤,
步骤1,教师端布置编程题目信息,如题目描述、参考答案、开始完成和截止时间、预设测试用例等,其中测试用例根据题目考察点,可设置多个测试用例;
步骤2,学生根据题目要求通过在线编辑器完成题目编写并上传至代码评测服务器,其中在线编辑器有代码高亮显示、折叠、缩进等模拟真实开发环境功能;
步骤3,在评测学生程序代码之前,需检测过滤学生程序,对学生程序中出现不安全代码进行过滤,所述不安全代码包括fdisk-硬盘分区、format-格式化、shutdown-关机等命令,防止恶意代码;
步骤4,编译学生程序,代码中如果由于语法错误导致编译失败,获取编译错误信息,如图2所示,通过对编译器返回的编译错误信息进行筛选整理,分别获得下面信息:
编译错误代码,通过编译错误代码,弹出相应错误代码帮助文档,如MSDN文档,或者打开相应错误代码帮助网页;
编译错误行号,通过编译错误行号,学生可以快速定位找到程序错误位置;
编译错误详细说明,通过编译错误详细说明,可以帮助学生理解编译错误原因,有针对的修改错误代码。
步骤5,如果学生程序编译通过,而运行不通过,则表示学生程序通过“预设测试用例的输入”生成的输出结果和“预设测试用例输出”两段文本不相等。因此,如果需要提供给学生一个比较准确的错误反馈信息需要比对分析学生程序的输出和“预设测试用例输出”的异同,然而,学生编写练习的程序和一般软件产品不同,比如结构简单,大多数有固定的算法模块,如果编译通过而运行不通过,大概率总有这样的情况:学生代码通过“预设测试用例的输入”生成的输出总是朝着“预设测试用例输出”靠近。因此对于学生代码编译通过而运行不通过的错误原因可能是常见简单错误,所述常见简单错误包括:学生代码输出结果大小写出错、中英文标点符号错误、缺失或存在多余的空格、顺序出错、错位问题、数值间存在倍数扩大或缩小等。详细过程如下:
1、通过图3所示过程,结合“预设测试用例输出”,得出测试用例考察类型,测试用例考察类型确定方法如下:
当预设测试用例输出文本内容有字符或符号时,且字符串间没有空格隔开,判断测试用例类型为“单一字符串型”;
当预设测试用例输出文本内容有字符或符号时,且字符串间以空格隔开,判断测试用例类型为“多个字符串型”;
当预设测试用例输出文本内容只有纯数值或小数点时,判断测试用例类型为“单一纯数值型”;
当预设测试用例输出文本内容只有纯数值或小数点或空格,并数值间以空格隔开时,判断测试用例类型为“多个纯数值型”。
2、对于四种不同的测试用例考察类型,需要计算学生代码的输出结果和“预设测试用例输出”的编辑距离。编辑距离用在自然语言处理中,例如拼写检查,根据一个拼错的字符串和其他正确的字符串的编辑距离,判断哪一个或哪几个是比较可能的字符串。对于两段字符串A和B,其中字符串A的长度为m,字符串B的长度为n,其计算方法如下:
d[0][0]=0
d[i][0]=0,1≤i≤m
d[0][j]=0,1≤j≤n
其中d表示一个[m+1][n+1]大小的二维数组(d的数组比字符串长度长1个,是因为需要一个[1][1]大小的数组记录其编辑距离为0),d[i][j]表示完成从A(0,i)到B(0,j)的编辑次数。wdel(ai)表示把A[i]删除的一次操作,wins(bj)表示把B[j]插到A[i]的一次操作,wsub(ai,bj)表示把A[i]用B[j]替换的一次操作;本发明中,有关编辑距离计算过程中的符号说明参见图4。
3、对于测试用例考察类型为“单一字符串型”,处理方法如图5所示,首先判断学生代码输出结果和预设测试用例输出长度是否相等:
3.1学生代码输出结果字符串和预设测试用例输出字符串长度相等时,依次做如下处理:
3.1.1将学生代码输出结果字符串大、小写转换(大写字符转为小写字符、小写字符转为大写字符、全部转为大写字符、全部转为小写字符)后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“字符大小写问题”导致运行不通过;
3.1.2将学生代码输出结果字符串标点符号中英文转换后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“标点符号中英文问题”导致运行不通过;
3.1.3调整修改学生代码输出结果字符串的顺序后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“顺序错误”导致运行不通过;
3.1.4将学生代码输出结果字符串旋转(从首字符到最后一个字符进行多次旋转)后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“存在输出错位问题”导致运行不通过;
3.1.5计算学生代码输出结果字符串和预设测试用例输出字符串的编辑距离edit_Dis,以及编辑距离计算中删除字符次数Ndel,编辑距离计算中添加字符次数Nins,且计算编辑距离占预设测试用例输出比例R=edit_Dis/Lt,其中Lt为预设测试用例输出字符串的长度,如果R<0.5,则中英文反馈指导学生由于“输出与测试用例输出长度相等,但是一半的字符无法匹配”导致运行不通过;如果编辑距离edit_Dis和预设测试用例输出字符串长度相等,则中英文反馈指导学生由于“输出与测试用例输出长度相等,但是所有字符均无法匹配”导致运行不通过。
3.2学生代码输出结果字符串和预设测试用例输出字符串长度不相等时,依次做如下处理:
3.2.1删除学生代码输出结果字符串中所有标点符号(主要是空格、回车等)后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“输出了多余的标点符号”导致运行不通过;
3.2.2删除预设测试用例输出字符串中所有标点符号(主要是空格、回车等)后和学生代码输出结果字符串比较是否相等,如果相等,则中英文反馈指导学生由于“缺少某些标点符号”导致运行不通过;
3.2.3计算学生代码输出结果字符串和预设测试用例输出字符串的编辑距离edit_Dis,以及编辑距离计算中删除字符次数Ndel,如果编辑距离edit_Dis和删除字符次数Ndel相等,则中英文反馈指导学生由于“多输出了某些字符,与预设测试用例输出无法匹配”导致运行不通过;
3.2.4计算学生代码输出结果字符串和预设测试用例输出字符串的编辑距离edit_Dis,以及编辑距离计算中添加字符次数Nins,如果编辑距离edit_Dis和添加字符次数Nins相等,则中英文反馈指导学生由于“少输出了某些字符,与预设测试用例输出无法匹配”导致运行不通过;
3.2.5计算学生代码输出结果字符串和预设测试用例输出字符串的编辑距离edit_Dis,以及计算编辑距离占预设测试用例输出比例R=edit_Dis/Lt,其中Lt为预设测试用例输出字符串的长度,如果R<0.5,则中英文反馈指导学生由于“输出与测试用例输出长度不相等,且一半的字符无法匹配”导致运行不通过;否则显示“输出与测试用例输出长度不相等,且超过一半的字符无法匹配”导致运行不通过。
4、对于测试用例考察类型为“多个字符串型”,处理方法如图6所示,需先判断学生代码输出结果字符串个数Ns(以空格隔开)和预设测试用例输出字符串个数Na(以空格隔开)是否相等:
4.1学生代码输出结果字符串个数和预设测试用例输出字符串个数相等时,依次做如下处理:
4.1.1判断删除学生代码输出结果字符串空格、回车后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“输出内容与测试用例要求大体一致,有多余的空格、回车”导致运行不通过;
4.1.2判断删除预设测试用例输出字符串空格、回车后和学生代码输出结果字符串比较是否相等,如果相等,则中英文反馈指导学生由于“输出内容与测试用例要求大体一致,缺失题目要求的空格或回车(可在输出头、尾检查)”导致运行不通过;
4.1.3将学生代码输出结果字符串大、小写转换(大写字符转为小写字符、小写字符转为大写字符、全部转为大写字符、全部转为小写字符)后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“字符大小写问题”导致运行不通过;
4.1.4将学生代码输出结果字符串标点符号中英文转换后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“标点符号中英文问题”导致运行不通过;
4.1.5调整修改学生代码输出结果字符串的顺序后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“顺序错误”导致运行不通过;
4.1.6将学生代码输出结果字符串旋转(从第一个字符串到最后以个字符串进行多次旋转)后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“存在输出错位问题”导致运行不通过。
4.2学生代码输出结果字符串个数和预设测试用例输出字符串个数不相等时,依次做如下处理:
4.2.1学生代码输出结果字符串个数Ns大于预设测试用例输出字符串个数Na时,判断学生代码输出结果字符串中前Na个字符串是否和预设测试用例输出字符串相等,如果相等,则中英文反馈指导学生由于“前Na个字符串和预设测试用例输出匹配,但多输出了某些字符串”导致运行不通过;
4.2.2学生代码输出结果字符串个数Ns小于预设测试用例输出字符串个数Na时,判断学生代码输出结果字符串中前Ns个字符串是否和预设测试用例输出字符串相等,如果相等,则中英文反馈指导学生由于“前Ns个字符串和预设测试用例输出匹配,但少输出了某些字符串”导致运行不通过;
4.2.3将学生代码输出结果调整顺序后,判断学生代码输出结果字符串中前min{Ns,Na}个字符串是否和预设测试用例输出字符串相等,如果相等,则中英文反馈指导学生由于“输出字符串个数有误,且存在输出顺序问题”导致运行不通过;
4.2.4将学生代码输出结果按照字符串间隔旋转后和预设测试用例输出字符串比较是否部分相等,如果相等,则中英文反馈指导学生由于“输出字符串个数有误,且存在输出错位问题”导致运行不通过;
4.2.5去除掉学生代码输出结果字符串和预设测试用例输出中的所有空格,并计算学生代码输出结果字符串和预设测试用例输出字符串的编辑距离edit_Dis,以及计算编辑距离占预设测试用例输出比例R=edit_Dis/Lt,其中Lt为去除掉空格后的预设测试用例输出字符串的长度,如果R<0.5,则中英文反馈指导学生由于“输出字符串个数与测试用例输出字符串个数不相等,且一半的字符无法匹配”导致运行不通过;否则显示“输出字符串个数与测试用例输出字符串个数不相等,且超过一半的字符无法匹配”导致运行不通过。
5、对于测试用例考察类型为“单一纯数值型”,如图7所示,依次做如下处理:
5.1将学生代码输出结果字符串和和预设测试用例输出字符串转为数值型,按照10的倍数放大或缩小学生代码输出结果,再与预设测试用例输出比较,如果相等,则中英文反馈指导学生由于“输出字符串与预设测试用例输出无法匹配,但是存在10的倍数关系”导致运行不通过;
5.2判断学生代码输出结果字符串和和预设测试用例输出字符串长度是否相等,如果不相等,计算学生代码输出结果字符串和和预设测试用例输出字符串的编辑距离edit_Dis,再比较前min{Ls-edit_Dis,Lt-edit_Dis}(Ls为学生代码输出结果字符串长度,Lt为预设测试用例输出字符串长度)个学生代码输出结果字符串是否和预设测试用例输出字符串相等,如果相等,则中英文反馈指导学生由于“输出字符串与预设测试用例输出无法匹配,但是有效位保留出错”导致运行不通过;
6、对于测试用例考察类型为“多个纯数值型”,需先判断学生代码输出结果数值个数Ns(以空格隔开)和预设测试用例输出数值个数Na(以空格隔开)是否相等,如图8所示:
6.1学生代码输出结果数值个数和预设测试用例输出数值个数相等时,依次做如下处理:
6.1.1判断删除学生代码输出结果字符串空格、回车后和预设测试用例输出字符串比较是否相等,如果相等,则中英文反馈指导学生由于“输出内容与测试用例要求大体一致,有多余的空格、回车”导致运行不通过;
6.1.2判断删除预设测试用例输出字符串空格、回车后和学生代码输出结果字符串比较是否相等,如果相等,则中英文反馈指导学生由于“输出内容与测试用例要求大体一致,缺失题目要求的空格或回车(可在输出头、尾检查)”导致运行不通过;
6.1.3调整修改学生代码输出结果数值的顺序后和预设测试用例输出数值比较是否相等,如果相等,则中英文反馈指导学生由于“多个数值间存在输出顺序错误”导致运行不通过;
6.1.4将学生代码输出结果多个数值进行旋转(从第一个数值到最后一个数值进行多次旋转)后和预设测试用例输出数值比较是否相等,如果相等,则中英文反馈指导学生由于“多个数值间存在输出错位问题”导致运行不通过。
6.2学生代码输出结果数值个数和预设测试用例输出数值个数不相等时,依次做如下处理:
6.2.1学生代码输出结果数值个数Ns大于预设测试用例输出中数值个数Na时,判断学生代码输出结果数值中前Na个数值是否和预设测试用例输出相等,如果相等,则中英文反馈指导学生由于“前Na个数值和预设测试用例输出匹配,但多输出了某些数值”导致运行不通过;
6.2.2学生代码输出结果数值个数Ns小于预设测试用例输出中数值个数Na时,判断学生代码输出结果数值中前Ns个数值是否和预设测试用例输出相等,如果相等,则中英文反馈指导学生由于“前Ns个数值和预设测试用例输出匹配,但多输出了某些数值”导致运行不通过;
6.2.3将学生代码输出结果调整顺序后,判断学生代码输出结果中前min{Ns,Na}个数值是否和预设测试用例输出相等,如果相等,则中英文反馈指导学生由于“输出数值个数有误,且存在输出顺序问题”导致运行不通过;
6.2.4将学生代码输出结果按照数值间隔旋转后和预设测试用例输出比较是否部分相等,如果相等,则中英文反馈指导学生由于“输出数值个数有误,且存在输出错位问题”导致运行不通过。
本发明一种基于编辑距离的自适应反馈程序的评测装置,包括:
运行教师题目的单元,用于按照设定要求执行教师输入的测试题目;
运行学生程序的单元,用于执行所接收到的学生程序,并生成用于编译的执行文件;
学生程序编译单元,用于对学生程序进行编译,并输出相应的编译结果;
学生程序运行单元,用于运行通过编译的学生程序,并输出运行结果;
预设测试用例输出单元,用于与学生程序的运行结果比对以及判断测试用例的考察类型。
通过以上各功能单元来完成老师题目的布置,学生程序的输入、编译和运行等,实现本发明的评测方法,本发明中,采用服务器来实现上述装置的功能。
以上结合附图对本发明的实施方式进行了阐述,但本发明不局限于上述具体的实施方式,上述具体的实施方式仅仅是示意性的,指导性的,而非限制性的,在不脱离本发明精神和范围前提下,本发明会有各种变化和改进,这些变化和改进都属于本发明要求保护范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (4)
1.一种基于编辑距离的自适应反馈程序评测方法,其特征在于,包括以下步骤:
S1,接收学生程序;
S2,编译学生程序,当编译通过时,转入S3;当编译不通过时,给出帮助信息;所述帮助信息包括:错误代码、错误的具体行号和错误的详细说明;所述错误代码和错误的详细说明均用于查找问题的解决方案,指导学生调试程序;所述错误的具体行号用于定位错误程序的位置;
S3,运行学生程序,当运行通过时,给出评价合格的信息;当运行不通过时,比较学生程序的运行结果和预设测试用例输出,通过计算两者编辑距离,给出运行不通过的原因,具体的,第一步,获取题目预设测试用例的输出;第二步,确定测试用例的考察类型,所述测试用例的考察类型包括:单一字符串型、多个字符串型和单一纯数值型;第三步,根据测试用例的考察类型,给出运行不通过的具体原因;所述第三步的具体方法为:步骤1,先检查学生程序中的错误是否属于常见简单错误,当属于常见简单错误时,给出反馈信息,指导学生修改程序;当不属于常见简单错误时,转入步骤2;步骤2,计算学生程序输出结果和预设测试用例输出的编辑距离,其中,当测试用例类型为单一字符串型时,比较编辑距离和在计算编辑距离过程中记录的添加字符或删除字符个数,确定是否是因为多输出了或少输出了某些字符导致运行不通过;并计算编辑距离占预设测试用例输出字符串长度的比例,确定学生程序输出结果正确的比例,给出用于指导学生修改程序的反馈信息;当测试用例类型为多个字符串型时,删除学生程序输出结果和预设测试用例输出字符串间的所有空格;计算删除空格后两者间的编辑距离;比较计算出的编辑距离和在计算编辑距离过程中记录的添加字符或删除字符个数,确定是否是因为多输出了或少输出了某些字符串导致的运行不通过;并计算编辑距离占预设测试用例输出字符串长度的比例,确定学生程序输出结果正确的比例,给出用于指导学生修改程序的反馈信息;当测试用例类型为单一纯数值型时,将学生程序输出结果和预设测试用例输出转换为字符串;计算两者编辑距离,通过编辑距离、学生程序输出结果和预设测试用例输出的长度,判断是否是由于有效位保留问题导致运行不通过,给出用于指导学生修改程序的反馈信息;所述编辑距离的计算方法如下:
d[0][0]=0
d[i][0]=0,1≤i≤m
d[0][j]=0,1≤j≤n
其中,d表示一个[m+1][n+1]大小的二维数组,所述d的数组比字符串长度长1个,是因为需要一个[1][1]大小的数组记录其编辑距离为0,d[i][j]表示完成从A(0,i)到B(0,j)的编辑次数,wdel(ai)表示把A[i]删除的一次操作,wins(bj)表示把B[j]插到A[i]的一次操作,wsub(ai,bj)表示把A[i]用B[j]替换的一次操作,m表示字符串A的长度,n表示字符串B的长度;
其中,所述第二步中,测试用例的考察类型确定方法如下:
当预设测试用例输出文本内容有字符或符号时,且字符串间没有空格隔开,则测试用例类型为单一字符串型;
当预设测试用例输出文本内容有字符或符号时,且字符串间以空格隔开,则测试用例类型为多个字符串型;
当预设测试用例输出文本内容只有纯数值或小数点时,则测试用例类型为单一纯数值型;
所述第二步中,测试用例的考察类型还包括多个纯数值型,所述多个纯数值型的确定方法为:当预设测试用例输出文本内容只有纯数值或小数点或空格,且数值间以空格隔开时,则测试用例类型为多个纯数值型;
当测试用例的考察类型为多个纯数值型时的评测方法为:
判断学生程序输出结果的数值型个数和预设测试用例输出的数值型个数是否相等;
当相等时,检查学生程序中的错误是否属于常见简单错误,给出用于指导学生修改程序的反馈信息;
当不相等时,判断前min{学生代码输出结果数值型个数,预设测试用例输出数值型个数}个学生代码输出结果和预设测试用例输出是否匹配,确定是否是由于少输出或多输出了数值导致运行不通过,给出用于指导学生修改程序的反馈信息。
2.如权利要求1所述的一种基于编辑距离的自适应反馈程序评测方法,其特征在于,所述步骤S1还包括:在编译学生程序前,检测学生程序,对学生程序中出现的不安全代码进行过滤。
3.如权利要求1所述的一种基于编辑距离的自适应反馈程序评测方法,其特征在于,所述步骤S3中,通过将学生程序的运行结果与预设测试用例输出进行比对来确定运行是否通过,当学生程序的运行结果与预设测试用例输出相同时,则运行通过;否则为运行不通过;
当学生程序的运行结果与预设测试用例输出不同时,给出运行不通过的结果。
4.一种基于编辑距离的自适应反馈程序的评测装置,用于实现权利要求1-3任一项所述的评测方法,其特征在于,包括:
运行教师题目的单元,用于按照设定要求执行教师输入的测试题目;
运行学生程序的单元,用于执行所接收到的学生程序,并生成用于编译的执行文件;
学生程序编译单元,用于对学生程序进行编译,并输出相应的编译结果;
学生程序运行单元,用于运行通过编译的学生程序,并输出运行结果;
预设测试用例输出单元,用于与学生程序的运行结果比对以及判断测试用例的考察类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811629908.3A CN109783106B (zh) | 2018-12-28 | 2018-12-28 | 一种基于编辑距离的自适应反馈程序评测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811629908.3A CN109783106B (zh) | 2018-12-28 | 2018-12-28 | 一种基于编辑距离的自适应反馈程序评测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109783106A CN109783106A (zh) | 2019-05-21 |
CN109783106B true CN109783106B (zh) | 2021-05-28 |
Family
ID=66498826
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811629908.3A Active CN109783106B (zh) | 2018-12-28 | 2018-12-28 | 一种基于编辑距离的自适应反馈程序评测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109783106B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112764760B (zh) * | 2021-01-25 | 2023-12-26 | 中国科学院自动化研究所 | 基于程序评测的辅助答题系统 |
CN115145633A (zh) * | 2022-07-25 | 2022-10-04 | 杭州师范大学 | 一种基于控制流图的代码错误自动检出方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101425008A (zh) * | 2007-11-01 | 2009-05-06 | 北京航空航天大学 | 基于编辑距离的源代码相似度度量方法 |
CN102023921A (zh) * | 2010-12-17 | 2011-04-20 | 江苏大学 | Sql程序自动评分方法及装置 |
JP2011175446A (ja) * | 2010-02-24 | 2011-09-08 | Hitachi Ltd | 要件・バグレポート処理システム及びその方法 |
CN104111888A (zh) * | 2014-07-03 | 2014-10-22 | 曹建楠 | 一种面向教学的代码评测方法、装置和系统 |
CN105761563A (zh) * | 2014-12-18 | 2016-07-13 | 中国农业大学 | 编程题评测系统的学生客户端、教师客户端及服务器端 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9396100B2 (en) * | 2014-12-05 | 2016-07-19 | International Business Machines Corporation | Software testing optimizer |
CN105224455B (zh) * | 2015-09-28 | 2018-01-09 | 北京邮电大学 | 一种自动生成字符串类型测试用例的方法 |
CN107678954A (zh) * | 2017-09-22 | 2018-02-09 | 江苏海事职业技术学院 | 一种程序作业评测方法和装置 |
-
2018
- 2018-12-28 CN CN201811629908.3A patent/CN109783106B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101425008A (zh) * | 2007-11-01 | 2009-05-06 | 北京航空航天大学 | 基于编辑距离的源代码相似度度量方法 |
JP2011175446A (ja) * | 2010-02-24 | 2011-09-08 | Hitachi Ltd | 要件・バグレポート処理システム及びその方法 |
CN102023921A (zh) * | 2010-12-17 | 2011-04-20 | 江苏大学 | Sql程序自动评分方法及装置 |
CN104111888A (zh) * | 2014-07-03 | 2014-10-22 | 曹建楠 | 一种面向教学的代码评测方法、装置和系统 |
CN105761563A (zh) * | 2014-12-18 | 2016-07-13 | 中国农业大学 | 编程题评测系统的学生客户端、教师客户端及服务器端 |
Non-Patent Citations (1)
Title |
---|
编程语言作业云平台自动评分技术与实现;寿周翔;《中国信息技术教育》;20170522(第8期);第54-56页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109783106A (zh) | 2019-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Marceau et al. | Mind your language: on novices' interactions with error messages | |
Haldeman et al. | Providing meaningful feedback for autograding of programming assignments | |
US10262547B2 (en) | Generating scores and feedback for writing assessment and instruction using electronic process logs | |
CN109871322B (zh) | 一种基于机器学习的程序题自动评分方法 | |
CN109783106B (zh) | 一种基于编辑距离的自适应反馈程序评测方法及装置 | |
Karnalim | Promoting code quality via automated feedback on student submissions | |
Nabil et al. | Evalseer: an intelligent gamified system for programming assignments assessment | |
Popovici | ChatGPT in the classroom. Exploring its potential and limitations in a functional programming course | |
Truong et al. | Automated Feedback for'Fill in the Gap'Programming Exercises | |
CN113408253A (zh) | 一种作业评阅系统及方法 | |
Coenen et al. | Comparison of feedback strategies for supporting programming learning in integrated development environments (IDEs) | |
Naur | Automatic grading of students' ALGOL programming | |
Wu | The impact of technology on language learning | |
CN115454841A (zh) | 基于程序测试和分析的多维度代码质量综合评价方法及系统 | |
Terman | GroverCode: code canonicalization and clustering applied to grading | |
Chou et al. | An educational tool for visualizing students' program tracing processes | |
CN113642318B (zh) | 英语文章的纠错方法、系统、存储介质及设备 | |
Fujisaka et al. | Easy-to-Grasp Compiler Messages: Beginner-Friendly Web System Proposal | |
Walther | Matlabta: A style critiquer for novice engineering students | |
CN116910646B (zh) | So网站中知识单元的内部链接目的分类方法 | |
Umezawa et al. | Analysis of logic errors utilizing a large amount of file history during programming learning | |
Sychev et al. | Methods of Determining Errors in Open-Ended Text Questions | |
Taniguchi et al. | Visualizing Source-Code Evolution for Understanding Class-Wide Programming Processes. Sustainability 2022, 14, 8084 | |
Lyu et al. | Adapting Jupyter for C++ Programming Education: An Empirical Study on Lab Instruction Strategies and Student Perspectives | |
Kawasaki et al. | Analysis of Exploratory Traces in Programming for Identifying Students Struggling in Construction of Program Logic |
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 |