Python评估和评估学生的代码

时间:2014-10-10 15:55:09

标签: python matlab

对于课程,我想自动评估(部分)学生的编码作业。我想到的设置是这样的:

  1. 学生会得到一个他们必须填写的课程骨架。
  2. 学生将此课程定义“上传”到服务器(或通过网络接口)
  3. 服务器运行脚本对特定函数进行测试,例如class.sigmoid(x),并检查函数的输出是否正确并可能给出建议。
  4. 由于您正在评估不受信任的代码,因此此设置会带来很多问题。但是,对于我的许多课程来说,这将非常有用,所以我愿意花一些时间来思考它。我记得Coursera有类似的matlab / octace作业,但我无法得到详细信息。

    我查看了许多在线python接口(例如,codecademy.com,ideone.com,c9.io);虽然他们看起来很完美,可以通过在线评估来学习和分享代码。我确实错过了选项,即评估脚本是“隐藏”给学生的(即评估脚本应包含正确的参考实现,以比较随机生成数据的输出)。此外,我提供的课程需要一些数据(例如图像)和包(sklearn / numpy),这并不总是可用。

    具体来说,我的问题是

    1. 我是否错过了实际提供此类功能的在线环境。 (这将是最简单的)
    2. 为了自己设置,我想把它托管在(例如)亚马逊云上(所以大学的基础设施没问题),但是你有什么蟒蛇练习可以推荐沙盒评估吗?
    3. 提前感谢任何建议!


      很遗憾听到这个问题不适合StackOverflow。感谢人们(部分)回答了这个问题。

      通过其他渠道获得更多反馈后,我认为我的方法将如下:

      1. 学生获得骨架并填写
      2. 学生也有评估脚本。
      3. 在脚本中,与服务器建立了一些连接
        • 登录
        • 获取一些随机数据
        • 检查学生代码的输出是否在数字上与服务器期望的相同。
      4. 通过这种方式,学生代码在本地进行评估,但只将输出发送到服务器。这限制了可能的评估类型,但仍允许对代码进行自动评估。

2 个答案:

答案 0 :(得分:1)

沙盒Python一般是不可能的。您可以尝试防止危险操作,这将意味着严重限制学生代码可以执行的操作。但无论如何,这可能会留下开放的攻击向量。更好的选择是使用操作系统级别的沙盒来隔离Python进程。例如,CodeJail库使用AppArmor提供安全的Python eval。

作为沙盒Python难度的一个示例,请参阅Eval really is dangerous,或者将此输入视为您的沙箱:9**9**99,它将尝试按googolplex的顺序计算整数,消耗所有很长一段时间后你的RAM。

答案 1 :(得分:0)

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

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

您可能希望查看这些内容以找到可以帮助您解决问题的内容(并编辑此答案以使其更有用)。