您的位置:首页 > 理论基础 > 计算机网络

一个基于网络的程序自动评测系统

2011-03-15 20:57 204 查看
  摘     要: 基于网络的分布式程序自动评测体系结构提供了一种高效、 准确、
适应性强的机制来实现一个评测系统.该体系结构通过被动激活方式利用木马技术 ,
保证了系统在通讯和评测过程中的安全性 ,并在评测中实现了评测程序对系统资源
的零占用 ,这使得样本程序在开发和评测时处于一致的运行环境中.该体系结构通过
规则库和过滤程序的使用 ,提高了其灵活性和适应性 ,使得它可以适用于更多类型的
样本程序.在此基础上 ,实现了一套完整的应用系统.经过多次实际应用 ,证明其具有
高效、 安全和配置灵活的特点.
关   键   词: 评测系统; 样本程序; 分布式模型; 木马

 近年来 ,各种计算机认证考试、 等级考试 ,以
及各种比赛越来越多的采用了上机编程解题的形
式.随着这些考试和比赛的规模和影响越来越大 ,
阅卷工作的高效性、 合理性和公正性正受到越来
越多的关注 ,建立一套准确、 高效的程序评测系统
也就成为了非常迫切的要求.
这类上机答题的考试通常在一个局域网内进
行 ,每名考生独立使用一台计算机答题;考试结束
后考生离开考场 ,而等待评测的程序就留在各人
计算机中的指定目录下.题目通常是要求程序对
一组输入数据进行处理后输出运行结果 ,所以它

只需要采用黑盒测试— — — 通过输入一系列测试数
据,根据程序的输出结果,就可判定程序的正确性.
过去的考试通常采用人工阅卷的方法.也就
是首先人工启动考生的样本程序 ,输入测试数据 ,
再手工计时 ,然后将输出结果与标准答案相比较.
这种评测方法的效率很低 ,而且容易产生错误.后
来在一些比赛中 ,使用了批处理的方法进行评测.
通过一个批处理程序启动样本程序 ,逐个将测试
数据传输给该程序 ,并采用人工计时和人工比较
的方法.但需要在所有选手的比赛机器上逐个运
行批处理程序 ,效率仍然很低.

为了提高评测效率 ,1999 年开始出现基于分
布式模型的自动竞赛评测系统[1 ,2 ]
,在评测过程中
尽可能地避免人工参与.但由于它是在 DOS平台
上开发的 ,所以存在很多不足 ,如:准确性较差的
计时机制、 测试每组数据后都要重启、 安装配置复
杂等. 为弥补这些不足 ,适应高级的操作系统平
台 ,我们在Linux 下研发了基于网络的分布式自
动评测系统.该系统实现了在局域网内对分布在
多台终端上的样本程序进行自动并行评测的功
能 ,具有准确高效、 自动化程度高、 可配置的特点.
1   自动评测系统的功能和结构
评测系统可以选用集中式结构或分布式结
构.集中式结构先把所有样本程序从客户机中收
集上来 ,再在服务器上统一逐个评测.分布式结构
则是把测试数据下传到所有客户机 ,在客户机中
进行评测 ,再把测试结果收集到服务器上.集中式
评测的优点是所有样本程序都在相同的环境中运
行 ,对所有编程者来说是公平的;缺点是串行操作
效率很低.分布式评测的效率会大幅提高 ,但是客
户机的处理器速度、 内存大小不尽相同 ,所以无法
保证评测过程的公平性.
为了在保证公平性的前提下尽量提高评测效
率 ,本系统提供了一种灵活的配置方式:如果所有
客户机的配置都一样 ,则可以使用所有客户机作
为评测用机 ,也就是完全的分布式评测;在客户机
配置不完全相同时 ,也可以通过 IP地址指定在一
台或几台电脑上进行评测 ,这样可以选定若干配
置完全相同的电脑作为评测机 ,在保证公平性的
基础上最大限度的提高了评测效率.
本系统首先通过网络自动下传测试数据和测
试流程的控制程序 ,然后远程启动控制程序 ,由控
制程序控制各 PC 机并行的进行测试. 这样整个
评测耗费的时间等于用时最多的一个样本所耗费
的时间 ,大大提高了评测的效率.测试后的结果文
件由过滤程序进行判断后 ,生成成绩单 ,并通过网
络自动上传到服务器上 ,由服务器进行打印和统
计(图1) .
分布式系统存在数据一致性、 网络安全和可
靠性等方面的问题.从本系统考虑 ,服务器和客户
机之间的共享数据量不大 ,通过一定机制可以很
好的确保数据的一致性.在网络方面 ,由于系统运
行在一个封闭的局域网内 ,所以安全性、 可靠性方
面能得到很好的保障.

2   Linux 环境下的分布式评测模型
在评测工作中 ,整个客户端的评测从始至终
都需要在服务器的控制下进行.因为其中涉及到
一些需要高权限的操作 ,所以需要服务器端能以
root 权限远程控制客户端. 达到此目的可以有多
种方法.如以 root 身份远程登录到客户端 ,再在其
上运行各种命令;或者用 rsh 等远程 Shell 直接向
客户端发布命令;也可以在客户端运行一个具有
root SetUID的守护进程 ,服务器通过网络通信向
该进程发送指令 ,并由它执行.
由于本系统需要在被控制端一次性执行批量
的命令脚本 ,所以前两种方案并不适用.而第三种
方案由于使用了守护进程 ,所以会耗费一定的内
存 ,在比赛或考试过程中对样本程序产生影响;而
且守护进程会显示在进程列表中 ,容易被编程者
发现和破坏.因此 ,本系统在方案三的基础上进行
改进 ,选用了被动式的木马技术来实现.
2. 1   木马技术
木马程序是一种基于网络运行的远程控制软
件[3 ]
.早期的远程控制软件是为了方便管理员对
远端电脑进行管理而设计的 ,如 PC Anywhere
[4 ]
.
远程控制软件实际是运行在被控制端和控制端之
间的一个 ClientP Server结构的软件 ,控制端通过控
制接口向被控制端发送指令 ,被控制端解释执行
并送回反馈信息.这样 ,系统管理员只要拨号到公
共网络上 ,就可通过远程控制软件直接控制主机.
远程控制技术被黑客利用就产生了木马技
术.木马必须能够隐藏自己.一般软件运行都会在
进程表上显示一个记录 ,但木马会删除该记录 ,并
把自己藏身在系统目录的某个隐蔽的角落 ,使被
控制端用户不易发现.木马程序在某台电脑上的
第一次运行通常是通过欺骗手段实现的.而当它

第一次运行后 ,就会把自身复制到一个隐蔽的目
录里 ,并使系统每次启动时自动运行它们.木马启
动后 ,黑客可以在没有得到用户授权的情况下 ,任
意访问被控制端的资源 ,并在被控制端执行任意
代码 ,甚至包括格式化硬盘等危险操作.在本系统
中 ,考虑到编程者有可能欺骗或破坏守护进程 ,因
此隐藏该进程就变得很有必要.所以本系统没有
采用一般的远程控制技术 ,而是采用了木马技术.
常见的木马程序需要在被控制端隐蔽地运行
一个守护进程.这个进程虽然在进程表上是不可
见的 ,但是它仍然要占用一定的内存和 CPU 时
间 ,这会在比赛或考试过程中和开发环境、 样本程
序争夺资源 ,对程序运行效率产生一定影响.所以
客户端的评测程序应该尽量少的占用内存和 CPU
时间 ,特别是在考试过程中 ,最好能不被载入内

存.因此 ,木马程序应该不被预先执行 ,只是在需
要的时候才被控制端远程激活.这种木马称为被
动式木马 ,它通常是隐藏在被控制端上的一个可
执行程序 ,控制端通过被控制端系统上的后门远
程激活木马 ,再向其发送指令.
使用被动式木马除了安全、 系统负载低外 ,还
有操作灵活容易控制的优点.这为实现系统功能、
处理紧急情况提供了很大的方便.
2. 2   系统安全性
要想远程激活一个被动式的木马 ,首先需要
在被控制端上预留一个通讯接口.由于评测系统
运行在一个可控制的局域网内 ,客户端的用户密
码是已知的 ,所以只要使用远程 Shell 工具 ,即可
实现远程控制的目的.现在最常用的远程 Shell 有
rsh和 SSH ,而 SSH由于使用了密文传送 ,安全性
相对更高. 为了保证系统的安全性 ,本系统选用
SSH来实现. 同时 ,为了避免被他人利用的可能
性 ,本系统在远程激活木马时进行了身份认证.控
制端必须先把一个密钥文件发送给客户端 ,然后
再发送激活命令 ,木马才会对控制信息做出响应.
系统的体系结构如图2所示.
2. 3   题目类型与编译方式
比赛中 ,编程者可能选用 Pascal、 C、 C ++ 、 Ba2
sic、 Java 等各种语言 ,甚至有可能一名编程者在一
场比赛中对不同题目选用不同的语言 ,所以系统
必须支持多种语言的编译.而且根据不同题目的
要求 ,各题的编译选项也可能不同.另外 ,题目从
提交方式上分 ,也可以分为四类:只提交源程序、
提交源程序和编译后的可执行程序、 交互式题目 ,
以及只提交答案的题目.
图2  评测系统体系结构图
针对编译方式和提交方式的多样性 ,本系统
提供了一套题目属性的描述方法.用户在图形界
面上可以为每道题目设置提交方式和允许使用的
语言 ,并为每种语言指定编译器和编译命令.评测
开始后 ,系统会把这些信息传送到客户端 ,由客户
端的控制程序依照执行.客户端的控制程序根据
样本程序的源文件名后缀分辨该程序所使用的语
言 ,选择编译方式 ,再根据提交方式和设置好的编
译命令进行编译 ,生成可执行程序.系统选定编译
方式、 生成可执行程序的过程如图3所示.
图3  可执行程序生成过程图
2. 4   过滤程序
比赛和考试中的题目多种多样 ,评分方式千
差万别 ,所以判定样本程序在一个测试点上的正
确性和计算得分的算法 ,也就和具体题目密切相
关.因此 ,必须对每个题目开发专用的过滤程序.
由于题目的类型不同 ,判断样本程序对一组
测试用例的输出是否正确有多种不同的方式.对
于结果数据固定的题目 ,可以直接把标准答案写
成文件 ,然后进行字符串匹配即可.但因为两组字
符串中可能存在不影响程序正确性的细微的格式
差别 ,所以在比较前要先进行格式过滤.有的题目
的答案是不唯一的 ,必须根据输出结果对测试数
据进行推导 ,才能判断其正确与否.此外 ,还有交 

互式题目 ,需要过滤程序对输入数据和输出数据
进行综合推导才能判定正误.还有博弈类题目 ,需
要同时调用测试程序和样本程序.另外 ,各个题目
的给分方式也不一样.有些题目给分要么满分要
么零分 ,有些题目则根据结果与标准答案的接近
程度给分 ,有些题目的结果是几个数据 ,对了一个
数据就给一定比例的分数.
为了满足题目多样性的需求 ,本系统中完成
评分工作的过滤程序被设计成插件的形式嵌入到
系统中.用户需要根据不同的题目要求 ,按照系统
提供的接口 ,自行设计不同的过滤插件.对于仅进
行字符串比较的判定方式 ,系统提供了一个通用
的过滤程序.由于过滤程序可以自由替换 ,所以本
系统可以支持各种各样类型的比赛题目 ,如选择
题、 问答题等.
3   系统测试
文中的评测系统已在NOI’ 2001、 NOI’ 2001 冬
令营和中国国家队选拔赛中使用 ,取得了良好效
果 ,也借此对它的性能做了一定规模的测试.具体
情况如表1所示.
表1  评测系统性能测试表
评测项目 集中式评测 基于木马的
评测系统
每服务器支持客户端 108 108
最大并行评测台数 1 36
题目数 3 3
每题测试用例数 10 10
编程者程序备份到服务器用时P min 6 6
测试数据下传用时P min 0 5
评测用时P min ≈480 25
评分和打印用时P min 15 15
总耗时P min ≈510 51
   通过对比可以看出 ,本系统在效率上比传统
的集中式评测有了大幅提高.由于打印时间是一
个比较固定的数值 ,没有缩短的余地 ,所以今后系
统要想进一步提高效率 ,只能在并行度上加以改
进.
4   结 束 语
本文提出了一套基于网络的分布式程序评测
系统框架 ,其具有准确高效、 自动化程度高、 安全、
可配置的特点.同时 ,在此框架的基础上实现了一
个应用系统 ,并在实际使用中取得了良好的效果.
本系统除了可以应用在竞赛中 ,同样适用于
高校教师批改编程语言、 数据结构等课程的作业 ,
以及各级计算机水平等级考试.由于过滤程序是
作为一个活动插件插入到系统中的 ,所以只要稍
做修改就能适用于选择题、 问答题等多种题型 ,该
系统也就成为了一个更通用的考试系统.另外 ,如
果在本系统前台加上一个 Web 界面 ,就可以很方
便的改造成一个基于因特网的评测系统 ,也就能
适用于各种网上竞赛 ,有更加广阔的应用空间.

参考文献 (References)
[1 ] Onur T Sehitoglu. IOI’ 99 evaluation process description[ EBP DK] .
1999
[2 ] Onur T Sehitoglu. Checklist for execution and evaluation[ EBP DK] .
1999
[3 ] 傅斌 贝歆. 剖析特洛伊木马[ EBP OL ] . http :P P it . rising. com. cnP
antivirusP virusloreP virustroj2117. htm
Fu Yunbin. Analysis of trojan[ EBP OL ] . http :P P it . rising. com. cnP
antivirusP virusloreP virustroj2117. htm(in Chinese)
[4 ] Symantec. PC Anywhere 10. 5[ EBP OL ] . http :P P enterprisesecurity.
symantec. comP productsP products. cfm          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐