掌桥专利:专业的专利平台
掌桥专利
首页

基于程序评测的辅助答题系统

文献发布时间:2023-06-19 10:54:12


基于程序评测的辅助答题系统

技术领域

本发明属于程序设计教学领域,具体涉及一种基于程序评测的辅助答题系统。

背景技术

随着科技领域的不断发展与进步,人们对编程语言的学习日益重视和普及,编程的学习也从计算机相关专业领域衍生到各行各业,包括在中小学阶段也设定了人工智能相关课程、逐步推广编程教育。因此无论在编程教育中还是计算机专业实践中都更加注重了算法设计实现能力的培养和训练,而为了可以自动化的检验所编写的代码是否正确,各大高校推出了自己的程序在线评测系统(Online Judge),成为人们在学习编程训练算法能力方面重要的工具和常用的测试方法。现有的在线程序评测系统中,一类是只提供了自动判题功能,该系统能让学生直接得到该程序的运行结果,提高判题的效率,例如一种基于服务的可扩展程序竞赛评测系统(CN102591778A);另一类是在此基础之上增加了评分功能,让学生知道了本次答题的成绩。这两类系统存在一个很大的问题就是,它们只是将教师的判题服务自动化了,让程序去判断学生的代码是否正确,但忽略了教育的本身,如遇到了不会的程序题目该如何开展,程序未能通过或代码分数低该如何提升。学生在编程学习中很容易遇到许多问题,而与教师沟通的成本高昂,在国内环境下一个老师往往需要教导几十个学生,学生在遇到问题时难以获得教师的指导就会丧失学习的热情。基于此,本发明提出了一种基于程序评测的辅助答题系统。

发明内容

为了解决现有技术中的上述问题,即为了解决在现有的程序评测系统中,无法给出代码错误的解决意见及指导方案,造成学习效率低的问题。本发明第一方面,提出了一种基于程序评测的辅助答题系统,该辅助答题系统包括:服务器、一或多个第一客户端以及一或多个第二客户端;所述第一客户端、所述第二客户端分别与所述服务器相连,所述服务器包括数据库、辅导模块;所述第一客户端包括课程管理模块;所述第二客户端包括答题模块、打分模块:

所述课程管理模块,配置为获取编程教学资料数据,作为第一数据;将所述第一数据与预设的教学课程目录关联,关联后,将第一数据中易出现的编程错误类型与相应的解决意见数据建立索引,并发送至数据库;

所述数据库,配置为存储关联的编程教学资料数据以及建立的索引;

所述答题模块,配置为获取源代码,然后在Docker虚拟化环境中对所述源代码进行编译和调试,并将编译后的源代码发送至打分模块;

所述打分模块,配置为获取所述源代码对应的预设的测试用例的输入、输出、分值比重、平均运行时间及占用资源数;根据输入,运行源代码,得到运行结果,将该运行结果与所述输出匹配;匹配后,结合所述分值比重、平均运行时间及占用资源数,计算源代码的得分,并终止Docker虚拟化环境;

所述辅导模块,配置为当检测到第二客户端发送辅导请求指令时,获取答题模块对应的题目,并结合第二客户端用户的学习进度,将相关的文本及音视频数据发送至对应的第二客户端。

在一些优选的实施方式中,所述第二客户端还包括提交模块;

所述提交模块,配置为将当前用户的用户信息、编写的源代码以及运行结果,对应的得分、运行时间、占用资源数发送至数据库进行存储;所述运行结果包括:编译错误,时间超时,空间超限,通过测试,答案错误。

在一些优选的实施方式中,所述服务器还包括:解题思路分析模块;

所述解题思路分析模块,配置为获取数据库存储各用户的源代码及对应的得分、运行时间、占用资源数,通过预构建的代码语义分析模型获取对应的解题思路分析结果;所述代码语义分析模型基于深度神经网络DNN构建。

在一些优选的实施方式中,所述第一客户端还包括:用户管理模块;

所述用户管理模块,配置为对基于程序评测的辅助答题系统的用户信息、用户权限进行管理。

在一些优选的实施方式中,所述答题模块中“将编译后的源代码发送至打分模块”,其方法为:

对源代码进行编译,若所述编译时长小于设定时长阈值、占用资源数小于设定的空间阈值且编译成功,则将源代码发送至打分模块;否则,返回编译失败,并终止Docker虚拟化环境。

在一些优选的实施方式中,所述服务器还包括所述错误类型分析模块;

所述错误类型分析模块,配置为当检测到源代码编译失败或源代码子在执行测试用例时出现了执行错误/异常退出/执行超时/占用资源数过多的情况,则根据对应的编程错误类型在所述数据库中检索,若检索成功,则将编程错误类型对应的解决意见数据发送至所述答题模块,否则将所述编程错误类型发送至第一客户端。

在一些优选的实施方式中,所述代码语义分析模型,其训练方法为:

获取训练样本集;所述训练样本集中包括正面代码样本、负面代码样本以及原文代码样本;所述正面代码样本包括各题目对应的不同思路,执行结果正确的源代码;所述负面代码样本为个题目对应的编译失败的源代码;所述原文代码文本为各题目对应的标准答案源代码;

将所述训练样本集中的正面代码样本、负面代码样本以及原文代码样本输入代码语义分析模型中,经过卷积、池化处理之后,获得各代码样本对应的特征向量;

将三个代码样本对应的特征向量输入深度神经网络DNN中,得到各特征向量对应的语义向量表达;

分别计算正面代码样本、负面代码样本对应的语义向量表达与原文代码样本对应的语义向量表达的相似度,作为第一相似度、第二相似度;

计算第一相似度度与第二相似度的差值,并在梯度上升的方向上使用BP算法进行梯度回传,更新模型参数;

循环执行上述步骤,直至代码语义分析模型收敛。

在一些优选的实施方式中,“经过卷积、池化处理之后,获得各代码样本对应的特征向量”,其方法为;

基于输入的代码样本,经过第一第二层两层卷积层以及第一次max-pooling操作后,再经过第三第四层两层卷积层以及第二次的max-pooling操作后,得到各代码样本对应的特征向量。

本发明的有益效果:

本发明提升了用户的学习效率。本发明主要针对现有的在线测评系统中没有教育的环节而进行填充,该系统除了提供给学生完整的开发环境,使学生专注于编程开发学习,以及提供自动评判外;还具有题目教学和对于学生提交的编程作业给予评价外还能通过语义分析明确提示学生错误位置,错误原因以及常见错误的修复方法;针对学生的需求提供全方位的指导,并将常见的错误信息分类汇总给教师,能够节省大量的教师时间和提升学生学习效率,具有重要的实用价值和意义。

另外,本发明在Docker虚拟化环境实现源代码的编译和调试,对代码进行病毒和恶意代码扫描、文件读写和关机等情况进行全面防护,提高了用户的编程效率以及系统的安全性,可以避免服务宕机甚至物理机损毁。

附图说明

通过阅读参照以下附图所做的对非限制性实施例所做的详细描述,本申请的其他特征、目的和优点将会变得更明显。

图1是本发明一种实施例的基于程序评测的辅助答题系统的框架示意图;

图2是本发明一种实施例的课程管理的流程示意图;

图3是本发明一种实施例的在Docker虚拟化环境中对程序进行编译和调试的处理过程的流程示意图;

图4是本发明一种实施例的基于DNN的代码逻辑分析模型的框架示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

本发明的基于程序评测的辅助答题系统,如图1所示,该辅助答题系统包括:服务器、一或多个第一客户端以及一或多个第二客户端;所述第一客户端、所述第二客户端分别与所述服务器相连,所述服务器包括数据库、辅导模块;所述第一客户端包括课程管理模块;所述第二客户端包括答题模块、打分模块:

所述课程管理模块,配置为获取编程教学资料数据,作为第一数据;将所述第一数据与预设的教学课程目录关联,关联后,将第一数据中易出现的编程错误类型与相应的解决意见数据建立索引,并发送至数据库;

所述数据库,配置为存储关联的编程教学资料数据以及建立的索引;

所述答题模块,配置为获取源代码;然后在Docker虚拟化环境中对所述源代码进行编译和调试,并将编译后的源代码发送至打分模块;

所述打分模块,配置为获取所述源代码对应的预设的测试用例的输入、输出、分值比重、平均运行时间及占用资源数;根据输入,运行源代码,得到运行结果,将该运行结果与所述输出匹配;匹配后,结合所述分值比重、平均运行时间及占用资源数,计算源代码的得分,并终止Docker虚拟化环境;

所述辅导模块,配置为当检测到第二客户端发送辅导请求指令时,获取答题模块对应的题目,并结合第二客户端用户的学习进度,将相关的文本及音视频数据发送至对应的第二客户端。

为了更清晰地对本发明基于程序评测的辅助答题系统进行说明,下面结合附图对本发明方法一种实施例中各模块进行展开详述。

本发明基于程序评测的辅助答题系统包括:服务器、一或多个第一客户端以及一或多个第二客户端;所述第一客户端、所述第二客户端分别与所述服务器相连。在本发明中,第一客户端优选设置管理端,即教师,第二客户端优选设置为用户端,即学生。所述服务器包括数据库、辅导模块、错误类型分析模块、解题思路分析模块;所述第一客户端包括课程管理模块、用户管理模块;所述第二客户端包括答题模块、打分模块。

课程管理模块,配置为获取编程教学资料数据,作为第一数据;将所述第一数据与预设的教学课程目录关联,关联后,将第一数据中易出现的编程错误类型与相应的解决意见数据建立索引,并发送至数据库。

在本实施例中,教师首先通过扫描仪等方式将本课程的教材等书本资料转换成文字输入到数据库中,还可以提供相关编程语言的官方文档的网址,由爬取文档中的文字和图片后存储至数据库。然后将对文档按照书本或网页中的目录分块存储,并与教学课程目录建立关联。教师也可以针对某一次联系单独添加更有针对性的资料。

关联后,通过统计编程语言中常见的语法错误以及空指针等常见的编程错误类型建立错误索引库,对每种错误由经验丰富的开发人员录入解决意见。如图2所示。

答题模块,配置为获取源代码;然后在Docker虚拟化环境中对所述源代码进行编译和调试,并将编译后的源代码发送至打分模块;

在本实施例中,服务器接收第一客户端上传的题目,发送至第二客户端的目标运用程序。本发明为保证系统运行的安全性和稳定性,通过Docker虚拟化技术运行源代码,即第二客户端获取待学生用户输入的源代码时,启动对应的编程语言环境的容器,即Docker虚拟环境,将容器的标准输入输出流绑定到文件,并对学生用户输入的源代码进行编译和调试,对编译时长小于设定时长阈值、占用资源数小于设定的空间阈值且编译成功,则将源代码发送至打分模块;否则,返回编译失败,并终止Docker虚拟化环境。如图3所示。

打分模块,配置为获取所述源代码对应的预设的测试用例的输入、输出、分值比重、平均运行时间及占用资源数;根据输入,运行源代码,得到运行结果,将该运行结果与所述输出匹配;匹配后,结合所述分值比重、平均运行时间及占用资源数,计算源代码的得分,并终止Docker虚拟化环境。

在本实施例中,获取当前题目对应的测试用例(第一客户端提前输入),测试用例其参数包括输入、输出、分值比重、平均运行时间及占用资源数,例如,输入为2,输出为21,分值比重为0.5,平均运行时间为0.2S,占用资源数200KB。根据输入,运行学生用户编译的源代码,若程序异常则返回编程错误类型并终止Docker虚拟化环境,否则获取运行结果,并与该运行结果与测试用例的输出匹配;若匹配成功(即相同)则继续运行下一测试用例,否则返回编程错误类型、输入输出,并终止Docker虚拟化环境。

匹配成功后,结合所述分值比重、平均运行时间及占用资源数,计算源代码的得分。即根据分值比重,源代码运行时间与平均运行时间的比值、源代码运行占用的资源数与测试用例占用的资源数的比值,计算源代码的得分,或者也可以将分支比重和平均运行时间及占用资源数对应的比重进行分开统计,最后进行加权获取源代码的得分。其中,本发明父进程通过Linux系统调用函数(如wait4)获取源程序的运行时间及占用资源数。

错误类型分析模块,配置为当检测到源代码编译失败或源代码子在执行测试用例时出现了执行错误/异常退出/执行超时/占用资源数过多的情况,则根据对应的编程错误类型在所述数据库中检索,若检索成功,则将编程错误类型对应的解决意见数据发送至所述答题模块,否则将所述编程错误类型发送至第一客户端。

在本实施例中,当在编译或测试的过程中出现了错误,则获取对应的编程错误类型,在数据库编中按编程错误类型与相应的解决意见数据建立的索引进行检索,若检索成功,则将解决意见数据发送至第二客户端,若当前编程错误类型对应的解决意见未录入到数据库,则将该编程错误类型发送至第一客户端,即通知教师,学生在编程学习中产生了一个未知错误,教师根据该编程错误类型向系统中录入判断输入该类错误的条、对应的解决意见以及如何指导学生避免该类错误的文档。

辅导模块,配置为当检测到第二客户端发送辅导请求指令时,获取答题模块对应的题目,并结合第二客户端用户的学习进度,将相关的文本及音视频数据发送至对应的第二客户端。

在本实施例中,当学生用户看到编程题目没思路时,可通过呼唤“小杜老师”(本系统中设置的拟人的虚拟角色)来讲解该题的解题思路。“小杜老师”会根据当前课程学习的进度以及学生当前提交代码的内容来展示给学生需要学习的基础知识以及如何进行下一步的提示。例如当题目为归并排序,若学生做该题时并没有思路,那么就可以呼叫“小杜老师”进行提示。“小杜老师”将通过动画的形式讲解归并排序的思路和执行过程,待学生掌握后提示学生继续完成题目,然后根据学生代码的完成度,循序渐进的向学生展示归并排序的大致框架,逐过程的引导学生完成题目。

另外,本发明为了能更好了解学生的进度,会将学生每次编程学习进行记录、统计、分析。

本发明会记录学生每次的提交记录,包括学生提交的代码以及每道题的运行情况。统计学生对某道题的提交次数,通过次数等。以及对全局所有题目的提交情况,通过情况等,方便学生分析自己的问题。

提交模块,配置为将当前用户的用户信息、编写的源代码及运行结果,对应的得分、运行时间、占用资源数发送至数据库进行存储;所述运行结果包括:编译错误,时间超时,空间超限,通过测试,答案错误。

解题思路分析模块,解题思路分析模块,配置为获取数据库存储各用户的源代码及对应的得分、运行时间、占用资源数,通过预构建的代码语义分析模型获取对应的解题思路分析结果;所述代码语义分析模型基于深度神经网络DNN构建。

在本实施例中,通过语义分析了解用户真正的问题出现在了哪里,然后指引用户改进,并通过收集学生提交记录进行分析,可以提供给教师以下数据:学生主要有哪几种解题思路,学生主要有那些错误类型,其中资源消耗最少的几种解题思路,运行时间最短的几种解题思路等还会通知教师该题目中有哪些错误类型系统并未记载指导方案,请求老师添加指导方案。具体如下:

将提交模块提交的内容,按照特定编程语言的格式将导入和方法引用等转化为代码块。通过自研的代码语义分析模型进行解题思路分析,如图4所示。

代码语义分析模型,其训练方法为:

获取训练样本集;所述训练样本集中包括正面代码样本、负面代码样本以及原文代码样本;所述正面代码样本包括各题目对应的不同思路,执行结果正确的源代码;所述负面代码样本为个题目对应的编译失败的源代码,例如各种答案错误的代码,执行超时的代码,占用资源过多的代码等;所述原文代码文本为各题目对应的标准答案源代码;

将所述训练样本集中的正面代码样本、负面代码样本以及原文代码样本输入代码语义分析模型中,经过第一第二层两层卷积层以及第一次max-pooling操作后,再经过第三第四层两层卷积层以及第二次的max-pooling操作后,会将其得到的结果,取每个滤波器的最大值,从而得到滤波器个数的特征向量,即得到各代码样本对应的特征向量;

将三个代码样本对应的特征向量输入两层的深度神经网络DNN中,得到各特征向量对应的语义向量表达;

分别计算正面代码样本、负面代码样本对应的语义向量表达与原文代码样本对应的语义向量表达的相似度,作为第一相似度、第二相似度;

计算第一相似度度与第二相似度的差值△a,并在梯度上升的方向上使用BP算法进行梯度回传,更新模型参数;

循环执行上述步骤,直至代码语义分析模型收敛。

该模型基于代码的特殊结构综合考虑逻辑运算符和流程控制符,采用数十万相同思路反面代码样本与不同思路的正面代码样本训练模型,经过卷积层和池化层对流程,运算等特征抽取,根据这两个特征向量通过最大化正面与反面样本的差值进行梯度回转,更新权值,即模型参数。具体如式(1)(2)(3)所示:

Δa=vector(正面)-vector(反面) (2)

target=max(0,Δa+1)=max(0,vector(正面)-vector(反面)+1) (3)

其中,D1为逻辑运算符特征向量,D2为流程控制符特征向量,vector表示相似度,△a表示正面代码样本、负面代码样本对应的语义向量表达与原文代码样本对应的语义向量表达的相似度的差值,使目标函数值target最大化,利用BP算法进行梯度回转,不断更新权值直到模型收敛。

通过该模型解析学生代码思路,通过聚类分析获取当前题目主要的几种解题思路。通过对学生错误类型的归类整理获得学生的主要错误类型。对于提交成功的记录的运行时间和资源占用数的分析获取班级优秀代码,教师可以根据这些数据在课堂上重点讲解常见错误类型,展示优秀代码,分析主要解题思路各自的优缺点。通过统计学生每次提交的记录绘制学生测试用例通过数量曲线图,教师可以根据学生的进步速度选择对该学生补充基础训练或提升训练难度,形成差异化教学。

本系统还包括用户管理模块,配置为对基于程序评测的辅助答题系统的用户信息、用户权限进行管理。

所述用户信息包含但不限于每个人的学号工号,账号密码,真实姓名,所属学校,系别,班级等信息。

所述用户权限则代表用户是否允许做某些操作,假定用户角色权限只有老师,学生。那么角色权限是学生的则不允许配置编程教学资料数据所代表的第一数据,以及不允许将第一数据与预设的教学课程目录关联,而角色权限是教师的则可以。

数据库,配置为存储关联的编程教学资料数据、建立的索引以及用户的用户信息、编写的源代码以及对应的得分、运行时间、占用资源数等。

除此之前,本系统还包括公告、邮件服务;邮件服务用于发送或接收邮件;公告服务用于发布或推送相应的公告内容。

需要说明的是,上述实施例提供的基于程序评测的辅助答题系统,仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块来完成,即将本发明实施例中的模块或者步骤再分解或者组合,例如,上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块,以完成以上描述的全部或者部分功能。对于本发明实施例中涉及的模块、步骤的名称,仅仅是为了区分各个模块或者步骤,不视为对本发明的不当限定。

术语“第一”、“第二”等是用于区别类似的对象,而不是用于描述或表示特定的顺序或先后次序。

术语“包括”或者任何其它类似用语旨在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备/装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者还包括这些过程、方法、物品或者设备/装置所固有的要素。

至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征作出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。

相关技术
  • 基于程序评测的辅助答题系统
  • 一种基于服务的可扩展程序竞赛评测系统
技术分类

06120112723151