1.1 研究背景及意义
随着电子计算机技术以及软件工程的飞速发展,计算机辅助教学(CAI)已基本得到教育界的认可。在线评测系统(Online Judge/OJ)被广泛应用于ACM/ICPC竞赛,而在经过一些必要的扩展之后,可以广泛应用于需要使用自动化黑盒测试进行评判的场合。程序设计类课程的教学与考试在OJ的支持下也可以被应用于计算机辅助教学。
1.2 在线评测系统简介
在线评测系统,即Online Judge(OJ)系统,是一个在线的测试系统。用户可以通过客户端(通常是浏览器),向服务器在线提交多种程序的源代码。系统对用户提交上来的源代码进行编译,运行;并且使程序读入预先设计的测试数据,得到相应的输出,将这些输出与预先设计的输入以及输出数据进行比较(通常是比较输出是否相同,也有其他情况,称为Special Judge),来检测程序代码的正确性。文献综述
在Online Judge系统下,用户提交的代码编译出的程序的在执行过程中会受到一定的约束,比如最大运行时间,最大使用内存,以及安全约束等。
最后,OJ系统会给用户一个评测结果,常见的评测结果有如下几种:
1、Accepted(AC),通过,代码被正确编译以及执行,并且运行结果符合预期。但这不能证明代码一定是正确的,只是系统无法证明代码是错误的。
2、Wrong Answer(WA),答案错误,代码被正确编译以及执行,但是运行得到的结果和预期不一致。
3、Time Limit Exceed(TLE),超时,代码被正确编译以及执行,但是没有在规定的时间限制内得到运行结果。
4、Memory Limit Exceed(MLE),超内存,代码被正确编译以及执行,但是运行使用的内存超出了题目所给的限制。
5、Output Limit Exceed(OLE),超过输出限制,代码被正确编译以及执行,但是产生了过多的输出。
6、Runtime Error(RE),运行时错误,代码被正确编译,但是运行时发生错误。这可能是程序本身的错误,比如下标越界、堆栈溢出、被零除或是使用了空指针;也可能是超越了系统的安全限制,比如尝试关机,创建进程或线程,非法读写文件或是访问网络。
7、Compile Error(CE),编译错误,代码无法被正确编译。
Online Judge系统最初被设计使用于ACM/ICPC国际大学生程序设计竞赛以及OI信息学奥林匹克竞赛的自动评判和排名中。现在被广泛应用于学生程序设计的训练,队员的选拔于考核,程序设计竞赛以及程序设计类计算机辅助教学。
1.3 本课题目标
NJUST OJ现在使用的判题核在判题效率和系统安全上仍然存在一些不够完善的地方,本课题在研究现有判题系统的基础上,对现有判题系统进行重构和重写,使其具有更强的高效性和安全性。
此外本课题将修改后的判题系统应用于计算机辅助教学,设计并实现一个在线考试系统,此系统作为NJUST OJ的插件,由NJUST OJ提供用户验证等接口。
2 判题节点的设计与实现
本判题节点使用Java编写。Online Judge系统向判题节点提出判题请求,并提供相应的测试数据数据以及时间空间限制;判题节点在收到判题请求之后,会对源代码进行评测,将结果返回给OJ系统。来~自^751论+文.网www.751com.cn/
通常会有多个判题节点为OJ系统提供判题服务,这些节点分布在不同的机器上(大多数情况会在同一个局域网内)。每个节点都知道OJ系统的IP,成功上线后,每隔一段时间会向OJ系统发出请求判题的消息。当OJ系统接收到这个消息,会做出相应:告知节点是否有判题需求,如果有,则向节点发出相关信息。