2014-10-10 157 views
1

对于一个班级,我想自动评估(部分)学生的编码作业。我脑子里想的设置是这样的:Python评估和评分学生代码

  1. 学生获得一类的骨架,他们必须填写
  2. 学生``上传“”这个类定义的服务器(或通过webinterface)
  3. 服务器运行脚本对特定函数(例如class.sigmoid(x))进行测试,并检查函数的输出是否正确并可能提供建议。

由于您正在评估不可信的代码,此设置会带来很多问题。但是,对于我的许多课程来说,这将非常有用,所以我愿意花一些时间思考它的低谷。我记得Coursera的matlab/octace作业有类似的东西,但我无法得到这些细节。我看了很多在线python界面(例如,codecademy.com,ideone.com,c9.io);而他们似乎是完美的学习和或共享代码,与在线评估。我错过了这个选项,评估脚本对学生是“隐藏的”(即评估脚本应该包含一个正确的参考实现来比较随机生成数据的输出)。此外,我给予的课程需要一些数据(例如图像)和包装(sklearn/numpy),这些并不总是可用的。

具体来说,我的问题是

  1. 我怀念的在线环境,实际上提供了这样的功能。 (这将是最简单的)
  2. 为了自己设置,我正在考虑将它托管在(例如)亚马逊云中(因此大学的基础架构没有问题),但是有没有可以推荐用于评估沙箱评估的python实践?

在此先感谢您的任何建议!


可惜听到这个问题不适合StackOverflow。感谢人们(部分)回答这个问题。

通过其他渠道更多一些反馈后,我觉得我的做法将成为如下:

  1. 学生得到骨架和填充它
  2. 学生也有评价脚本。
  3. 在脚本中,与服务器的一些连接到
    • 登录
    • 作出获得一些随机数据
    • 检查的学生代码的输出在数字上是服务器的期望。

通过这种方式,学生的代码在本地进行评估,但只输出发送到服务器。这限制了评估的可能性,但仍允许对代码进行自动评估。

+0

如果你想做你自己的实现可能相关:http://stackoverflow.com/questions/4207485/exploitable-python-functions – 2014-10-10 15:59:25

+0

@Nsh谢谢!这是一个很好的指针。幸运的是,大多数命名模块似乎不是学生需要的。可能是主脚本需要其中的一些才能打开文件。 – tmensink 2014-10-10 16:08:37

+0

这实际上取决于你想要做什么,以及你信任你的学生(多少)以及你有多少人。 Coursera还在Cuda上开设了课程,每个学生都可以在他们的机器上编译和运行CUDA代码 - 这通常比评估python更不安全。 如果你有20到40名学生,你知道我会说:你可以忽略沙箱或者只在有限的虚拟机上运行他们的代码。我曾经这样做过(使用postgresql代码,这很难被利用,但仍然可以利用!)。随时问学术界的问题。一般情况下沙盒是否必要。 – 2014-10-12 14:58:26

回答

0

这是目前编程语言研究领域非常活跃的一个领域。

我知道的是看问题的这两种不同的方法: - http://arxiv.org/pdf/1409.0166.pdf - http://research.microsoft.com/en-us/um/people/sumitg/pubs/cacm14.pdf(这实际上是只由萨米特和他的团队非常多篇论文之一)

你可能想看看这些找到可以帮助解决问题的东西(并编辑该答案以使其更有用)。

+0

感谢您的评论! – tmensink 2014-10-11 15:48:30

1

沙箱一般来说,Python是不可能的。您可以尝试防止危险操作,这将意味着严重限制学生代码的功能。但是,无论如何,这可能会导致公开的攻击媒介。更好的选择是使用操作系统级沙箱来隔离Python进程。例如,CodeJail库使用AppArmor来提供安全的Python评估。

作为沙箱python难度的一个例子,请参阅Eval really is dangerous,或者考虑将此输入视为沙箱:9**9**99,它将尝试计算googolplex的整数,并在很长一段时间后耗尽所有RAM 。

+0

有效点!我想知道这些在线评估人员如何做到这一点。但我为我的问题添加了一个可能的解决方案,克服了这个问题。学生代码只能在学生的计算机上运行。 – tmensink 2014-10-11 15:48:06