首页> 中国专利> 编程类考题自动测评方法和系统

编程类考题自动测评方法和系统

摘要

本发明涉及一种编程类考题自动测评方法,包括:S1:服务器端获取客户端发来的待测评代码以及预设的测试用例;S2:确定所述测试用例对应的输入、输出、权重和分数;S3:根据所述测试用例的输入,运行所述待测评代码,得到所述待测评代码的输出结果;S4:将所述待测评代码的输出结果与所述测试用例的期望的输出进行匹配,并根据所述测试用例的权重和分数,计算所述待测评代码的得分。采用本发明所提供的编程类考题自动测评方法,可以根据预设的测试用例,自动地评判程序的正确性,并返回相应的分数,能够有效解决老师对学生提交的编程题作业的繁琐验证、不能有效客观给分问题,从而更好地为编程语言类课程提供服务。

著录项

  • 公开/公告号CN105427695A

    专利类型发明专利

  • 公开/公告日2016-03-23

    原文格式PDF

  • 申请/专利权人 中国农业大学;

    申请/专利号CN201510740357.8

  • 申请日2015-11-03

  • 分类号G09B7/02(20060101);G06F11/36(20060101);

  • 代理机构11002 北京路浩知识产权代理有限公司;

  • 代理人李相雨

  • 地址 100193 北京市海淀区圆明园西路2号

  • 入库时间 2023-12-18 15:03:22

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-11-02

    授权

    授权

  • 2016-04-20

    实质审查的生效 IPC(主分类):G09B7/02 申请日:20151103

    实质审查的生效

  • 2016-03-23

    公开

    公开

说明书

技术领域

本发明涉及教育应用领域,尤其涉及一种编程类考题自动测评方 法和系统。

背景技术

近年来,一种新的网络课程教学模式MOOC(MassiveOpen OnlineCourse,大规模在线开放课程)在教育领域兴起。以edx为例, 因为免费、公开引得无数青年学子竞相追捧,用户也逐渐增加,目 前已经拥有超过90万的注册者。对于大规模在线教育,“大规模” 意味着参与者的数量不受限制;“开放”意味着任何人都可以参与学 习,而且是免费的;“在线”意味着参与者通过网络参与课程,不受 地域限制。C语言、C++语言、Java语言是目前计算机程序设计中应 用广泛的编程语言,在各类高等院校的计算机及相关专业中,C、 C++等语言是必修的基础课。

目前,学校对于编程类考题的测评都以老师人工批改为主,评 分时的人为情绪等原因造成评分的偏差,这些对于学生都是不公平 的。学生在学习编程时,需要在机房或个人电脑上安装集成开发环 境,编辑程序、编译程序、运行程序,而在碰到常见的编译、运行 等问题时,往往难以下手解决。此外,老师在评判学生的编程题作 业时,需要拷贝程序、编译程序、运行程序后才能给出分数,工作 量大,且费时耗力。

综上,设计一种编程类考题自动测评方法,来减少教师的工作 量具有十分重要的作用。

发明内容

本发明所要解决的技术问题是如何提供一种对编程类考题自动 测评的方法。

为此目的,本发明提出了一种编程类考题自动测评方法,包括以 下步骤:

S1:服务器端获取客户端发来的待测评代码以及预设的测试用 例;

S2:确定所述测试用例对应的输入、输出、权重和分数;

S3:根据所述测试用例的输入,运行所述待测评代码,得到所述 待测评代码的输出结果;

S4:将所述待测评代码的输出结果与所述测试用例期望的所述输 出进行匹配,并根据所述测试用例的权重和分数,计算所述待测评代 码的得分。

优选地,所述步骤S1还包括:判断所述待测评代码内是否包含被 禁止的系统命令,如果包含被禁止的系统命令,则停止所述待测评代 码的运行。

优选地,所述步骤S1还包括:编译所述待测评代码,并获取编译 结果,如果编译出错则返回出错信息。

优选地,在步骤S1之前还包括:

运行所述服务器端的程序,将所述服务器端的程序的进程号写入 运行文件;并开启运行程序监控线程;

通过主线程创建Socket、绑定Socket、监听Socket端口,并等待 所述客户端的连接请求;其中,接收一个客户端的连接后,新建一个 线程继续处理另一个客户端的连接请求。

优选地,所述步骤S3还包括:

将所述待测评代码的名称通过消息队列发送到所述服务器端的 运行程序监控线程,通过所述运行程序监控线程监控所述待测评代码 的运行过程。

优选地,所述运行程序监控线程监控所述待测评代码的运行过程 具体包括以下步骤:

S301:打开所述消息队列;

S302:等待接收所述消息队列;

S303:休眠第一预设时间;

S304:判断所述待测评代码是否仍在运行;如果已经停止运行, 则继续进入步骤S302;如果仍在运行,则继续休眠第二预设时间;

S305:在休眠第二预设之间之后,如果所述待测评代码仍在运行, 则强制终止所述待测评代码的运行;如果已经停止运行,则继续进入 步骤S302。

再一方面,本发明还提供了一种编程类考题自动测评系统,包括 服务器端和客户端,所述服务器端包括接收单元、解析单元、运行单 元和比较单元;

所述接收单元用于获取客户端发来的待测评代码以及预设的测 试用例;

所述解析单元用于确定所述测试用例对应的输入、输出、权重和 分数;

所述运行单元用于根据所述测试用例的输入,运行所述待测评代 码,得到所述待测评代码的输出结果;

所述比较单元用于将所述待测评代码的输出结果与所述测试用 例期望的所述输出进行匹配,并根据所述测试用例的权重和分数,计 算所述待测评代码的得分。

优选地,所述客户端包括出题模块、答题模块;

所述出题模块用于向所述服务器端提交编程试题以及所述预设 的测试用例;

所述答题模块用于向所述服务器端提交所述待测评代码。

优选地,所述客户端还包括防抄袭模块,所述防抄袭模块用于计 算任意两份所述待测评代码的相似度。

优选地,所述服务器端是分布式集群系统,包括评测管理节点、 程序运行节点、作业管理节点、任务节点、数据管理节点和数据节点; 所述数据管理节点和数据节点构成分布式文件系统,为其他各个节点 处理数据提供保存程序代码以及其他数据的环境;

所述评测管理节点用于在收到客户端的连接请求后,通过数据管 理节点将待测评代码保存到所述分布式文件系统中,并根据当前的负 载情况给所述待测评代码分配所述程序运行节点;

所述程序运行节点用于编译、运行所述待测评代码,并将编译、 运行的输出结果保存在所述分布式文件系统中;

所述作业管理节点用于提交搜索查询代码作业,并分配作业到各 个所述任务节点,通过各个所述任务节点并发进行代码的大数据搜 索、匹配,并将匹配结果返回到所述作业管理节点;

所述评测管理节点还用于将所述运行输出的结果以及匹配结果 返回到所述客户端。

通过采用本发明所提供的编程类考题自动测评方法和系统,可以 为在线教育平台学习计算机程序设计课程,比如C程序设计、C++程 序设计课程提供在线编辑程序、编译程序、运行程序的分布式集群测 试环境;可以根据老师设置的程序用例,实时地、自动地评判程序的 正确性,并返回相应的分数;还可以对提交的程序代码进行大数据分 析,分析学生代码的相似率,达到防抄袭的目的,能够有效解决老师 对学生提交编程题作业的繁琐验证、不能有效客观给分、不能给出编 译运行出错的帮助信息、不能给出程序参考代码等问题,从而更好地 为编程语言类课程提供服务。

附图说明

通过参考附图会更加清楚的理解本发明的特征和优点,附图是示 意性的而不应理解为对本发明进行任何限制,在附图中:

图1示出了本发明编程类考题自动测评方法的流程示意图;

图2示出了本发明服务器端分布式集群系统的示意图;

图3示出了本发明运行程序监控线程监控待测评代码的运行过程 示意图。

具体实施方式

下面将结合附图对本发明的实施例进行详细描述。

实施例1

如图1所示,本发明提供了一种编程类考题自动测评方法,包括 以下步骤:

运行服务器端的程序,将服务器端的程序的进程号写入运行文 件;并开启运行程序监控线程;

通过主线程创建Socket、绑定Socket、监听Socket端口,并等待 客户端的连接请求;其中,接收一个客户端的连接后,新建一个线程 继续处理另一个客户端的连接请求。

S1:服务器端获取客户端发来的待测评代码以及预设的测试用 例;判断所述待测评代码内是否包含被禁止的系统命令。例如,通过 解析json字符串,识别是否包含fdisk(硬盘分区)、shutdown(关机) 等被禁止的系统命令,如果包含被禁止的系统命令,则停止所述待测 评代码的运行。根据method方法,选择编译器、编译选项,编译所 述待测评代码,并获取编译结果,如果编译出错则返回出错信息。

S2:确定所述测试用例对应的输入、输出、权重和分数;其中, 测试用例可以设置多组,每组测试用例有不同的输入,期望的输出; 每组测试用例,可以设置不同的权重,从而得到不同的分值。也就说, 即使代码程序通过投机取巧的方式,也只能通过一组测试用例,不可 能通过所有或部分测试用例。

S3:根据所述测试用例的输入,运行所述待测评代码,得到所述 待测评代码的输出结果;为了加强系统程序的健壮性、稳定性、安全 性,需要监控评测服务的运行,一旦评测服务程序由于某种原因宕掉 或被恶意搞破坏,系统能够自动恢复启动。所以在运行测评代码程序 之前,将所述待测评代码的名称通过IPC消息队列发送到所述服务器 端的运行程序监控线程,通过所述运行程序监控线程监控所述待测评 代码的运行过程。对客户端提交的代码需要有一个运行程序监控线程 监控这些代码的运行,包括:对程序代码进行病毒、恶意代码扫描检 查;对程序代码执行的系统命令或调用特殊的系统API(应用程序编 程接口)进行扫描检查;对程序代码内存分配、释放、检查,程序运 行结束系统应自动释放回收用户程序未显示释放的内存;对程序代码 中有问题或有设计缺陷,比如程序死循环,运行程序一直阻塞、空耗 CPU资源等进行检查,一旦检测到某个运行程序异常,则立刻终止该 程序的运行。此外,不允许程序使用sleep休眠函数,如果某个程序运 行时间超过1000毫秒,我们则认为该程序进入死循环,系统后台将强 制终止该程序的运行,从而保障评测系统的安全性。

如图3所示,所述运行程序监控线程监控所述待测评代码的运行 过程具体包括以下步骤:

S301:打开所述消息队列;

S302:等待接收所述消息队列;

S303:休眠第一预设时间;

S304:判断所述待测评代码是否仍在运行;如果已经停止运行, 则继续进入步骤S302;如果仍在运行,则继续休眠第二预设时间;

S305:在休眠第二预设之间之后,如果所述待测评代码仍在运行, 则强制终止所述待测评代码的运行;如果已经停止运行,则继续进入 步骤S302。其中,第一预设时间可以为300ms(毫秒),第二预设时 间可以为1s(秒)。

S4:将所述待测评代码的输出结果与所述测试用例期望的输出进 行匹配,并根据所述测试用例的权重和分数,计算所述待测评代码的 得分。

实施例2

采用实施例1所述的编程类考题自动测评方法,本发明还提供了 一种编程类考题自动测评系统,包括服务器端和客户端,所述服务器 端包括接收单元、解析单元、运行单元和比较单元;

所述接收单元用于获取客户端发来的待测评代码以及预设的测 试用例;

所述解析单元用于确定所述测试用例对应的输入、输出、权重和 分数;

所述运行单元用于根据所述测试用例的输入,运行所述待测评代 码,并得到所述待测评代码的输出结果;

所述比较单元用于将所述待测评代码的输出结果与所述测试用 例期望的输出进行匹配,并根据所述测试用例的权重和分数,计算所 述待测评代码的得分。

其中较优的,所述客户端可以包括出题模块、答题模块;所述出 题模块用于向所述服务器端提交编程试题以及所述预设的测试用例; 所述答题模块用于向所述服务器端提交所述待测评代码。所述客户端 还包括防抄袭模块,所述防抄袭模块用于计算任意两份所述待测评代 码的相似度。

如图2所示,该服务器端是分布式集群系统,包括评测管理节点、 程序运行节点、作业管理节点、任务节点、数据管理节点和数据节点; 所述数据管理节点和数据节点构成分布式文件系统,为其他各个节点 处理数据提供保存程序代码以及其他数据的环境;

所述评测管理节点用于在收到客户端的连接请求后,通过数据管 理节点将待测评代码保存到所述分布式文件系统中,并根据当前的负 载情况给所述待测评代码分配所述程序运行节点;

所述程序运行节点用于编译、运行所述待测评代码,并将编译、 运行的输出结果保存在所述分布式文件系统中;

所述作业管理节点用于提交搜索查询代码作业,并分配作业到各 个所述任务节点,通过各个所述任务节点并发进行代码的大数据搜 索、匹配,并将匹配结果返回到所述作业管理节点;

所述评测管理节点还用于将所述运行输出的结果以及匹配结果 返回到所述客户端。

具体的,在出题模块,教师可以添加编程题,设置编程题类型、 分数,起止时间等,填写编程题目,问题描述,测试用例,点击提 交,即可生成一道编程题。其中,测试用例可以设置多组,每组测 试用例有不同的输入,期望的输出;每组测试用例,可以设置不同 的权重,从而得到不同的分值。而在答题模块,学生可以在“编辑 代码”区域内进行待测评代码的编辑,如果代码有需要输入值,还 可以填写相应的输入值,可以点击“运行”按钮对代码进行编译, 如果代码有问题,则会显示编译报错;如果编译未通过,“编译结果” 输出框会给出相应的编译出错信息提示。如果代码运行正常,只显 示运行结果,并不显示编译结果。当学生点击“提交”按钮,即将 代码上传到服务器端,然后交给服务器端进行自动评测,根据教师 预先设置的测试用例的输入和输出,与学生提交的待测评代码进行 模糊匹配,如果源代码经过了之前设置的多组测试用例,即可获得 满分,如果有一组测试用例没通过,即会根据相应的比重计算分数。

防抄袭模块,主要是便于教师查看学生之间编程题作业的雷同 情况。对任意两学生A和B同一道编程题的作业进行相似度计算, 将A同学待检测作业的每一行代码与B同学作业的每一行代码计算 相似度(字数少于15字的代码行不进行计算),最高值作为两人作 业该行代码的相似度,计算所有行代码相似度的平均值作为两同学 该道编程题作业的相似度。

通过采用本发明所提供的编程类考题自动测评方法和系统,可以 为在线教育平台学习计算机程序设计课程,比如C程序设计、C++程 序设计课程提供在线编辑程序、编译程序、运行程序的分布式集群测 试环境;可以根据老师设置的程序用例,实时地、自动地评判程序的 正确性,并返回相应的分数;还可以对提交的程序代码进行大数据分 析,分析学生代码的相似率,达到防抄袭的目的,能够有效解决老师 对学生提交编程题作业的繁琐验证、不能有效客观给分、不能给出编 译运行出错的帮助信息、不能给出程序参考代码等问题,从而更好地 为编程语言类课程提供服务。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了 解到本发明可以通过硬件实现,也可以借助软件和必要的通用硬件 平台的方式来实现。基于这样的理解,本发明的技术方案可以以软 件产品的形式体现出来,该软件产品可以存储在一个非易失性存储 介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用 以使得一台计算机设备(可以是个人计算机,服务器,或者网络设 备等)执行本发明各个实施例所述的方法。

虽然结合附图描述了本发明的实施方式,但是本领域技术人员可 以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样 的修改和变型均落入由所附权利要求所限定的范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号