对于课程,我想自动评估(部分)学生的编码作业。我想到的设置是这样的:
由于您正在评估不受信任的代码,因此此设置会带来很多问题。但是,对于我的许多课程来说,这将非常有用,所以我愿意花一些时间来思考它。我记得Coursera有类似的matlab / octace作业,但我无法得到详细信息。
我查看了许多在线python接口(例如,codecademy.com,ideone.com,c9.io);虽然他们看起来很完美,可以通过在线评估来学习和分享代码。我确实错过了选项,即评估脚本是“隐藏”给学生的(即评估脚本应包含正确的参考实现,以比较随机生成数据的输出)。此外,我提供的课程需要一些数据(例如图像)和包(sklearn / numpy),这并不总是可用。
具体来说,我的问题是
提前感谢任何建议!
很遗憾听到这个问题不适合StackOverflow。感谢人们(部分)回答了这个问题。
通过其他渠道获得更多反馈后,我认为我的方法将如下:
通过这种方式,学生代码在本地进行评估,但只将输出发送到服务器。这限制了可能的评估类型,但仍允许对代码进行自动评估。
答案 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和他的团队的很多论文中的一篇)
您可能希望查看这些内容以找到可以帮助您解决问题的内容(并编辑此答案以使其更有用)。