OpenJudge
OpenJudge是由北京大学POJ团队开发的开放式在线程序评测平台,属于在线评测系统(Online Judge)的一种。它允许学校、机构或教师以「小组」为单位自行建立题集与比赛,并支持ACM、NOI等多种竞赛规则。平台由北京大学人工智能实验室维护,为NOI、ACM等程序设计竞赛提供技术支持,同时承载《计算概论》《数据结构》等课程的教学练习与作业评测。
定义
OpenJudge是一个开放式的在线程序评测平台,用户可以在平台上建立自己的在线评测系统,自行出题、组织比赛并管理参赛者[1]。它属于在线评测系统(Online Judge,OJ)这一大类工具,即通过浏览器提交源代码、由服务器端编译运行并与标准结果比对来判定程序对错的在线系统[2]。平台以「小组」为基本单元,北京大学校内的「百练」小组即为其中的教学与考试用例[1]。
平台并非单一题库,而是向多所学校提供可分租使用的评测服务。有资料称,已有五百余所大学和中学在其上建立了教学与竞赛小组[3]。
原理
评测采用黑盒测试的思路:出题人预先准备输入数据与标准输出,系统在收到用户源码后先进行编译,再在受控环境中运行生成的可执行文件或解释执行脚本,把程序输出与标准答案逐项比较,据此给出判定结果[2]。为保证安全,服务器通常需要对提交代码做过滤、把进程放进沙盒隔离,并对代码做哈希以抑制抄袭和重复提交[2]。
OpenJudge题面会分别给出总时间限制与单个测试点的时间、内存限制,评测机按限制检查运行表现[4]。其评测状态沿用OJ通行命名,例如Accepted表示通过,Wrong Answer表示答案错误,Compile Error表示编译失败,Runtime Error表示运行时错误,Time Limit Exceeded与Memory Limit Exceeded分别表示超时与超内存[4]。平台支持G++、GCC、Java、Pascal等多种语言提交[4]。
用一段伪代码概括单次判题流程:
读入源码 -> 编译(失败则返回 CE)
对每个测试点:
在沙盒中运行,限制 CPU 时间 T 与内存 M
若超时 -> TLE;若超内存 -> MLE;若异常退出 -> RE
比较输出与标准输出
全部一致 -> AC,否则 -> WA
发展历程
OpenJudge的建设依托于更早的北京大学程序在线评测系统(POJ)。POJ自2003年上线,为训练ACM/ICPC队伍而开发,支持C/C++、Java、Pascal等语言,并在2007年前后收录了近2300道题目[5]。POJ团队曾发布过一份可自由下载的旧版源码,被下载逾20000人次,但使用者普遍在搭建评测系统时遇到技术门槛,也缺少可用服务器[1]。
作为对上述问题的回应,团队从2009年起开发全新平台,并于2010年11月对外公布OpenJudge[1][6]。公告列出其主要特性:小组可自行建题、办赛且免费,兼容ACM与NOI等多种赛制,采用评测服务器集群应对大规模比赛,提供多语言支持与中文界面[1]。平台上线初期处于测试状态,小组人数上限设为200人[1]。
此后OpenJudge由北京大学人工智能实验室持续维护,并为NOI、ACM等程序设计竞赛提供技术支持[7]。OI Wiki将其记为始于2005年、由POJ团队开发的小组评测平台,与平台公告的时间口径并不一致[8]。
应用
平台最常见的用途是课程教学。北京大学校内的「百练」小组承担编程教学与考试职能,讲义与习题多为《计算概论》等课程设计[1]。中国科学技术大学等院校也在OpenJudge上开设课程小组,学生以学号注册、按班级归组,从小组题库中取题练习并提交[4]。
在竞赛与训练方面,OpenJudge设有面向信息学奥赛的NOI小组,提供与NOI大纲章节对应的题集[3]。平台对ACM、NOI等多种比赛规则的支持,使其也能用于校内选拔赛和阶段性测验[1]。
对教师而言,小组机制把出题、发布作业、查看完成情况和统计成绩集中在一处,可减少人工批改代码的工作量[4]。
局限
评测只能检验程序在给定测试数据上的表现,无法证明算法在所有输入下正确。测试点覆盖不足时,存在逻辑缺陷的程序也可能通过,因此通过样例或通过全部测试点并不等同于程序普适正确[9]。
逐字节比对的做法对输出格式要求很严,多余的空格、空行或调试信息都会被判错,学习者的注意力容易从算法本身转移到输出细节上[10]。平台对代码可访问的资源也有限制,程序一般只能使用标准输入输出与内存,读写文件等操作会被判为运行时错误[11]。
评测结果依赖后端集群的稳定性。POJ一方曾出现网页无法打开或评测机异常的情况[12];OpenJudge测试期内亦以200人的小组上限限制规模[1]。此外,平台本身不提供对代码风格、可读性或复杂度的自动评价,仅凭判题结果难以反映程序设计质量。
参见
-
在线评测系统 —— OpenJudge所属的系统类别,说明判题的基本机制。
-
北京大学 —— POJ与OpenJudge的开发者所在机构。
-
ACM国际大学生程序设计竞赛 —— 平台主要服务的竞赛之一。
-
全国青少年信息学奥林匹克竞赛 —— 平台设有对应小组并提供技术支持。
-
沙盒 —— 判题时隔离用户程序的安全机制。
参考资料
- POJ团队发布OpenJudge平台,快来搭建属于你自己的OnlineJudge系统 [引用日期2026-10-29]
- 在线评测系统 [引用日期2026-10-29]
- 盘一盘oier常用网络资源,快来看看你用过几个? [引用日期2026-10-29]
- IDE和POJ简介 [引用日期2026-10-29]
- POJ [引用日期2026-10-29]
- Re:POJ团队发布OpenJudge平台,快来搭建属于你自己的OnlineJudge系统 [引用日期2026-10-29]
- 人工智能实验室 [引用日期2026-10-29]
- 学习资源 [引用日期2026-10-29]
- 【算法学习】关于在线评测系统(OJ) [引用日期2026-10-29]
- 清华大学出版社--图书详情 - 作者:李文新、郭炜、余华山 [引用日期2026-10-29]
- 关于此在线评测系统 [引用日期2026-10-29]
- 北京大学程序在线评测系统 [引用日期2026-10-29]