2014-10-10 258 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