研究现状 在线评测系统对于支撑 ACM/ICPC 竞赛以及支持一些依赖于计算机自动化评测的应用来说,有着重要的意义。这一系统最初用于支撑 ACM/ICPC 竞赛,并保证竞赛的公平公正[1],而在经过一些必要的扩展之后,可以应用于所有需要使用自动化黑盒测试进行评判的场合,例如程序设计类课程的教学与考试[2],亦可用于计算机辅助
教学[3-4]。5852
目前,大部分在线评测系统都着眼于如何准确、高效地评判代码是否正确运行,
在系统中判题子系统成为了整个系统的核心[1]。对判题子系统的研究主要集中在确
保判题过程的公正可靠[5],确保危险代码不破坏系统[6-7],通过引入分布式评测或
借助云计算环境来提高可靠性和容错能力[8-9],以及如何进行快速高效的结果比对
[10]。一些更深入的研究着力探讨如何更精确地计时,并完成更公平公正的判题流程
[11],以及如何利用多核多线程的优势提升单台服务器的负载能力[12]。同样也有一
些尝试从其他方向实现并优化在线评测系统的案例,例如使用 XML 代替数据库实现持
久化,并使用 XSLT 来控制表示层的呈现以减轻服务器端处理负载等[13]。而这些在
线评测系统几乎都采用了经典的三层架构,加上评判内核(即判题子系统),构成“表
现层——业务层——评判内核——持久层(数据层)”的体系结构[14],同时由于在
线评测系统固有的瘦客户端的设计,B/S 结构成为大多数平台的首选[15-19],一些评
测平台会提供自己的客户端以支持更多服务[10]。
在判题子系统之外,一些评测系统虽然有所扩展,但也只是集中在添加竞赛模块
用以支持具有一定伸缩性的比赛,或是添加诸如文件提交或胖客户端提交等更多的提
交方式[10],又或是进行一系列改动使之更适应于程序设计类课程的在线评判[20],
并研究组卷过程中难度系数的衡量以及组卷算法的设计[21]。但有必要指出的是,这
些扩展点的加入在一定程度上提升了系统的整体功能,但却并没有从根本上改变以判
题子系统为中心的体系结构,这也直接限制了系统的可扩展性。
同时,现有的在线评测系统大多采用传统的“数据层——业务层——表现层”的
三层架构搭建,而对于一些在线评测系统而言,由于基于 LAMP (Linux、 Apache、 MySQL、
PHP)构建,间接导致本身的外围业务和表现层的界限也不再清晰,可以见到的只是
判题子系统被作为独立业务模块分离并与其他的模块之间有清晰的界限,但诸如用户
管理、代码管理之类与领域关系稍远的功能模块的划分就相对模糊,一些专注于业务
的功能被放到了表现层实现,并依据用户需求改变表示层,而另一些则依附于判题子
系统而存在,并不具有非常显著的模块特征。可以说,笼统的三层架构在应对一般的
信息系统时也许能得心应手,但在处理诸如在线评测系统之类具有突出业务特征的系
统时,很难用相对粗略的层次使所有模块保持和谐。
在另一方面,现有在线评测平台大多着力于解决评测子系统上的问题,而忽略了
软件整体的扩展性和后续用户需求变更的可能。诚然,完美地实现核心业务是一个软
件的灵魂所在,但由相对僵化的体系结构所决定的在线评测系统也促成了目前这一类
系统的一般格局:用户提交代码,由系统编译执行,应用自动化黑盒测试并给出结果,
除此之外的其他用户需求相对很少顾及到,例如对于所提交代码的管理,对于解题过 在线评测系统国内外研究现状:http://www.youerw.com/yanjiu/lunwen_3092.html