對於一個班級,我想自動評估(部分)學生的編碼作業。我腦子裏想的設置是這樣的:Python評估和評分學生代碼
- 學生獲得一類的骨架,他們必須填寫
- 學生``上傳「」這個類定義的服務器(或通過webinterface) 。
- 服務器運行腳本對特定函數(例如class.sigmoid(x))進行測試,並檢查函數的輸出是否正確並可能提供建議。
由於您正在評估不可信的代碼,此設置會帶來很多問題。但是,對於我的許多課程來說,這將非常有用,所以我願意花一些時間思考它的低谷。我記得Coursera的matlab/octace作業有類似的東西,但我無法得到這些細節。我看了很多在線python界面(例如,codecademy.com,ideone.com,c9.io);而他們似乎是完美的學習和或共享代碼,與在線評估。我錯過了這個選項,評估腳本對學生是「隱藏的」(即評估腳本應該包含一個正確的參考實現來比較隨機生成數據的輸出)。此外,我給予的課程需要一些數據(例如圖像)和包裝(sklearn/numpy),這些並不總是可用的。
具體來說,我的問題是
- 我懷念的在線環境,實際上提供了這樣的功能。 (這將是最簡單的)
- 爲了自己設置,我正在考慮將它託管在(例如)亞馬遜雲中(因此大學的基礎架構沒有問題),但是有沒有可以推薦用於評估沙箱評估的python實踐?
在此先感謝您的任何建議!
可惜聽到這個問題不適合StackOverflow。感謝人們(部分)回答這個問題。
通過其他渠道更多一些反饋後,我覺得我的做法將成爲如下:
- 學生得到骨架和填充它
- 學生也有評價腳本。
- 在腳本中,與服務器的一些連接到
- 登錄
- 作出獲得一些隨機數據
- 檢查的學生代碼的輸出在數字上是服務器的期望。
通過這種方式,學生的代碼在本地進行評估,但只輸出發送到服務器。這限制了評估的可能性,但仍允許對代碼進行自動評估。
如果你想做你自己的實現可能相關:http://stackoverflow.com/questions/4207485/exploitable-python-functions – 2014-10-10 15:59:25
@Nsh謝謝!這是一個很好的指針。幸運的是,大多數命名模塊似乎不是學生需要的。可能是主腳本需要其中的一些才能打開文件。 – tmensink 2014-10-10 16:08:37
這實際上取決於你想要做什麼,以及你信任你的學生(多少)以及你有多少人。 Coursera還在Cuda上開設了課程,每個學生都可以在他們的機器上編譯和運行CUDA代碼 - 這通常比評估python更不安全。 如果你有20到40名學生,你知道我會說:你可以忽略沙箱或者只在有限的虛擬機上運行他們的代碼。我曾經這樣做過(使用postgresql代碼,這很難被利用,但仍然可以利用!)。隨時問學術界的問題。一般情況下沙盒是否必要。 – 2014-10-12 14:58:26