本科毕设课题之OJ开发(1)--评测机

评测机

1.目标

对用户代码进行编译运行,限制程序的时间和空间,与设计好的结果进行对比,返回结果,类似黑盒测试。

2.支持题目类型及评测原理

  • 经典 ACM/ICPC 题型:基于结果匹配。

    通常的ACM题目包括以下几项内容:题目描述(Description)、输入描述(Input)、输出描述(Output)、样例输入(Sample Input)、样例输出(Sample Out),在后台则包括测试输入(Input Data)和测试输出(Output Data)两项。在评测用户提交的程序正确与否时,系统会将样例输入和测试输入重定向作为程序的标准输入,通过判断程序对应的输出是否与期待的输出完全相同,来判断解答是否正确。

  • 特判题型(SPJ, Special Judge):比如某些题目一个输入有多种输出,这是就不能用简单的结果比较(判题数据不可能穷举所有的结果)。针对该题需要一个特判/定制程序,特判程序接收用户程序输出,并判断对错。

    题目:
    - 答案不唯一
    - 控制精度

  • 函数式题型:类似填空题,用户只需要实现一个函数,将其提交给评测机进行预处理(代码替换,裁判代码中使用占位符),编译、运行,并获得结果 。(可参考开源的代码模板及生成器。)

  • 交互式题型:将用户提交的程序与事先设计好的裁判程序进行对战,由裁判程序返回结果。(BOTZONE,参考毕设课题之AI游戏框架)

  • 多得分点题型:题目设置多组测试样例,对每一组进行结果匹配评测或特判评测,按通过案例数打分。

    题目:
    猜数字游戏。A 有一个数字 m,B 来猜。B 每猜一次,A 就告诉 B"太大",“太小"或"对了” 。B 怕自己不在的时候 A 玩不了这个游戏,所以就想请你帮忙写一个程序来代替 B 陪 A 玩猜数字游戏。
    评测步骤:
    (1)评测机生成一个随机数 m 作为答案,并传给用户程序 m 的可能范围(min, max)。
    (2)用户程序得到这个范围并计算出一个结果 result,并将该结果传给评测机。
    (3)评测机将 result 与 m 作比较,输出‘太大’,‘太小’或‘对了’的结果,并将该结果传给用户程序。
    (4)用户程序根据(3)的输出计算出新的结果result,并将该结果传给测评机。
    (5)重复(2)(3)(4),直到用户程序收到‘对了’的信号后停止游戏。

本地评测 V.S 第三方评测

第三方评测:通过HTTP代理,模拟登录第三方OJ网站,提交代码并交由第三方网站黑盒评测,然后把评测结果取回来。涉及网页分析与HTTP工具的应用。

3.工具
  • Ptrace:用于监控用户程序是否存在非法的系统调用行为。给出系统调用白名单,白名单之外的系统调用皆视为危险调用

    ptrace系统调从名字上看是用于进程跟踪的,它提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。其基本原理是: 当使用了ptrace跟踪后,所有发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就会被系统标注为TASK_TRACED。而父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。

  • Sandbox: 用于限制程序使用的时间与内存。
  • Docker容器
4.进阶:测评Web应用实验代码
5.进阶:测评SQL实验代码
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值