您好, 访客   登录/注册

基于J2EE的编程类作业在线评判系统的设计

来源:用户上传      作者: 黄儒乐

  [摘要]采用J2EE技术框架设计了编程类作业在线评判系统,实现了基于网络的程序作业自动编译和评判,减轻了教师的工作负担,提高了程序作业的评判效率和准确性。
  [关键词]作业评判;J2EE;网络教学
  [中图分类号]G40―057
  [文献标识码]A
  [论文编号]1009―8097(2009)13―0184―03
  
  引言
  
  21世纪以来,随着计算机与网络技术的迅速发展,极大的推动了教育信息化的发展,尤其是高等院校的信息化工作。近几年来,网络教学系统在各高校中得到了广泛的应用,为传统教学开辟了新的途径,提供了网络辅助教学与交互功能,其中网上作业管理功能也被引入到网络教学系统中,目前大多数网络教学系统都支持网络作业提交以及简单的评判功能,如一些选择题作业的自动判分,给大部分课程作业的管理提供了方便,但是这一功能在计算机程序设计类作业的处理上效果却不是很好,主要问题集中在程序作业的编译与评判上,由于学生提交的程序可能会存在语法等各种错误,语法正确的程序其输出结果也不一定正确,因此,教师往往不得不手工对程序作业一一批阅,甚至在计算机上亲自上机调试运行,然后根据运行后的输出结果进行评判,整个过程耗时费力,效率低下,也容易出错,而且,一些程序运行的性能指标人工很难获取,如运行时间、消耗内存大小等。因此,如何让编程类作业在线自动评判是一个网络教学过程中非常重要的问题,它的解决将大大减轻教师的工作负担,提高程序作业的评判效率和准确性。
  
  一 系统设计
  
  1 系统结构
  随着Internet技术的日益成熟,浏览器器/务器(B/S)结构以其所具有的开放性、易使用、易维护等特点广受欢迎,逐渐成为Web软件系统开发的首选结构,本系统主体结构也采用B/S结构进行设计,但在程序编译、评判等局部环节也采用客户机/服务器(C/S)结构作为补充,从而提高系统的运行效率。
  
  
  2 功能设计
  本系统的使用者涉及系统管理员、教师、学生以及教学管理者,根据不同使用角色,提供相应的业务处理和管理功能。
  
  3 模块说明
  (1)系统管理模块
  ①用户管理:主要是对参与系统使用的各类用户进行管理,包括用户的添加、修改、删除、停用。以及用户的权限设置、密码维护等。
  ②查询统计:该功能是面向教学管理者,为其提供系统的高层面、综合性查询与统计功能,为教学管理工作提供数据与决策支持。
  (2)作业管理模块
  ①作业布置:为教师提供作业的添加、修改、删除等功能。布置一个作业时,需同时设置作业的基本信息和评判参数信息,基本信息包括作业名称、作业类型、作业描述、截至时间、允许提交的最大次数等,评判参数信息用于作业自动评判时使用,主要包括文件类型、文件大小限制、编译器类型、程序最大内存限制、程序最大运行时间、测试数据与测试结果、评分标准等。
  ②作业查询:为教师和学生提供作业的查询功能,包括教师查询学生的作业提交情况,学生查询自己作业的评分结果等。
  (3)作业处理模块
  该模块是本系统的核心功能模块,完成学生所提交作业的预处理、编译和评分,这也是编程作业自动评判的三部曲,每一步都是以上一步的成功执行为前提的。
  ①作业预处理:该操作在学生提交作业后立即执行,主要是检查作业的的文件类型以及文件大小是否符合教师布置作业时所设定的参数值。
  ②作业编译:该操作在作业预处理后执行,程序编译后,编译结果会自动存储到数据库中。
  ③作业评分:该操作在作业成功编译后执行,通过系统预设的作业测试数据对程序进行测试,然后将输出结果与作业预设的测试输出结果进行比较,并以此为依据进行评分。
  
  二 开发环境与工具
  
  1 J2EE技术
  J2EE是一个基于组件的体系结构,用于构建N层的、基于Web的、以服务端计算为核心的、模块化的企业级应用。由于使用Java语言进行开发,可以很轻松的实现系统的跨平台部署,即“一次编写,处处运行”。
  
  2 Linux+MySQL
  Linux是一个基于Posix和Unix的多用户、多任务、多CPU并支持多线程的类Uinx的网络操作系统。Linux以它的开源、高效能和灵活性著称,其模块化的设计结构,使得它能运行在工作站上,也能够在普通计算机上。在网络病毒日益风行的今天,使用Linux操作系统可以提供更好的安全性与稳定性。
  MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQLAB开发、发布和支持。MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用。
  
  3 开发工具
  本系统选择Eclipse作为J2EE开发工具,数据库的设计采用了Sybase公司的PowerDesigner软件,Web开发工作均在安装WindowsXP操作系统的PC上完成,每完成一个阶段目标就将阶段性成果部署到Linux服务器上测试。
  
  三 关键问题的实现
  
  1 后台评判模块
  (1)编译器选择
  对学生上传的程序作业在服务器上进行编译是一个重要且耗时的过程,由于程序类作业可能涉及到不同的语言类型,因此,编译器必须具备广泛的兼容性和极高的编译性能,本系统我们采用了gcc编译器,Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器。gec是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%--30%,而且支持C,C++,Obiective-C,Fortran,Java,Ada等多种编程语言。
  (2)评判过程
  作业提交并通过预处理后,在服务器端对程序作业的代码进行编译、运行和测试,在此过程中,服务器要对程序作业的运行状态进行控制,主要包括如下几项:
  编译错误(Compile Error)
  运行时错误(Runtime Error)
  消耗CPU时间超出限制(Time Limit Exceeded)
  使用内存超出限制(Memory Limit Exceeded)程序输出的信息量超出限制(Output Limit Exceeded)
  出现以上任何一项问题都要立即中止评判,并反馈出错信息给学生。如果编译运行成功,则输入预设的测试数据,并对程序输出的数据进行检查,此时有以下情况:
  程序输出与期望的相同(AcceDced)
  程序输出与期望的不同(Wrong Answer)
  程序输出格式有误(Presentation Error)
  通过以上各项评判结果,系统最终根据每项的权重比率算出综合评分作为作业的最终分数。
  
  (3)技术实现
  程序的编译与评判过程均以守护进程的方式进行,程序

通过网页提交后发送消息给守护进程,由守护进程从数据库中取出待评判的程序进行编译,编译时采用多进程方式,使用Linux下C语言函数fork()分出一个子进程,在子进程中通过fexecle()函数调用gee命令进行编译,然后判断其编译结果。
  程序成功编译后,会产生一个可执行的文件,由于要获取其运行中的一些资源消耗信息,需要对运行的进程进行监视、调试。本系统设计了一个程序运行器,用来运行编译后所产生的可执行文件,获取程序执行信息和运行状态,并对程序的运行权限、资源占用等进行限制,避免因非正常程序的执行而影响服务器的性能与安全性。
  程序运行器在一个开源项目libsandbox的基础上进行开发,libsandbox很好的应用了Linux的系统函数ptrace。ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。另外程序运行器还提供了运行测试数据与比对输出结果的功能。
  
  2 编译与评判的性能问题处理
  由于程序的编译与评判过程对服务器系统资源消耗较大,如果程序作业量较大,或者并发提交的量较大的话,服务器可能会因系统资源的过度消耗而运行缓慢甚至死机,导致学生需等待很长时间才可看到评判结果。通过前面介绍的守护进程可以在一定程度上解决网页等待的问题,在后台未完成程序评判前先快速返回一个信息提示页面,但本质上并未提高程序评判的性能,要解决这一问题,可以从两个方面考虑:其一可以通过提高评判服务器硬件性能来提高其处理能力,如采用小型机等专业服务器,另外一种推荐的方式是采用多台评判服务器协同工作,如在多台PC级服务器上安装评判程序,采用集群技术实现负载均衡,从而实现Web服务器与多台评判服务器的协同工作,本文在系统实践中采用了Linux Virtual Server(简称LVS)集群技术来构建一个高可Hj、可伸缩的集群系统。
  
  3 与网络教学系统的集成问题处理
  编程类作业在线评判系统是对网络教学系统的补充,由于多数高校已拥有网络教学系统,因此,将本系统集成到网络教学系统中是最佳选择,一些网络教学系统提供二次开发,这种情况下我们可以实现深度集成,对于不支持二次开发的网络教学系统,一般也可以从统一身份认证的角度进行集成,实现SSO(单点登录)集成。
  
  四 结论
  
  本文根据编程类作业的特点设计了自动评判系统,应用了J2EE技术,实践了Linux、Mysql、libsandbox等一系列开源项目,基于Web方式实现了编程类作业的网上自动评判,适合多种程序设计语言,有效的减轻了教师的工作量,提高了工作效率,是对目前网络教学系统的很好补充。但本文所讨论的程序类作业仅限于有标准的输入输出数据的基础程序设计题,如一些算法类程序题等,对于其它类型程序题的自动评判有待进一步的研究。
  
  参考文献
  [1]李文新,郭炜.北京大学程序在线评测系统及其应用[J].吉林大学学报(信息科学版),2005,(S2):172
  [2]叶云.PC集群技术的研究及在作业评判系统中的应用[D].浙江:浙江工业大学,2007.
  [3]李晨阳,焦海星.创建高性能的J2EE应用系统[J].计算机系统应用,2005,(2):10.
  [4]黄剑,邓秀春.智能化在线评判系统的设计与实现[J].电脑知识与技术(学术交流),2007,21:809.


转载注明来源:https://www.xzbu.com/9/view-954902.htm