孫丹鵬
(曲靖師范學(xué)院信息與教育技術(shù)中心 云南 曲靖 655011)
本文提出基于Moodle環(huán)境搭建在線編程評(píng)測(cè)系統(tǒng),學(xué)習(xí)者可以在有網(wǎng)絡(luò)的地方就可以在線編程,且系統(tǒng)能夠及時(shí)評(píng)測(cè)反饋給學(xué)習(xí)者,減輕教師工作,也方便學(xué)習(xí)者更有效的習(xí)得編程技能?;谶@種在線編程與測(cè)評(píng)系統(tǒng)學(xué)習(xí)環(huán)境,更有助于學(xué)習(xí)者的編程技能的培養(yǎng)與學(xué)習(xí)。
Moodle是一個(gè)用于建設(shè)網(wǎng)絡(luò)課程和站點(diǎn)的課程管理系統(tǒng),是為支持社會(huì)建構(gòu)主義教育框架而設(shè)計(jì)的全球性開發(fā)項(xiàng)目。Moodle作為開源軟件免費(fèi)提供,遵循GNU通用公共許可協(xié)議[1]。它集IT、教學(xué)、管理、社會(huì)性交互等多重維度為一體,協(xié)助學(xué)習(xí)者共同完成知識(shí)建構(gòu)的開放網(wǎng)絡(luò)平臺(tái),具有門檻低、便于操作、功能強(qiáng)大、開放兼容等優(yōu)勢(shì)[2]。Moodle系統(tǒng)在學(xué)生參與、課程傳遞、內(nèi)容制作、用戶操作、內(nèi)容組織及適應(yīng)多種學(xué)習(xí)活動(dòng)等方面表現(xiàn)優(yōu)秀。
Virtual programming lab(VPL)[3],虛擬編程實(shí)驗(yàn)室,是一個(gè)免費(fèi)的Moodle活動(dòng)模塊插件,提供了一個(gè)集成環(huán)境可開展在線計(jì)算機(jī)編程的教學(xué)與管理。其程序代碼編輯、運(yùn)行編譯和自動(dòng)評(píng)價(jià)的特點(diǎn)使得學(xué)生的學(xué)習(xí)過程和教師的評(píng)價(jià)任務(wù)比更簡(jiǎn)單容易。其顯著特征是:基于瀏覽器編輯程序源代碼;學(xué)習(xí)者可以直接在瀏覽器中運(yùn)行交互式程序;可以運(yùn)行測(cè)試來檢測(cè)程序代碼是否正確。允許搜索文件之間的相似性以審查抄襲;允許設(shè)置編輯限制和避免直接外部文本粘貼等。
VPL主要有三個(gè)組成部分:Moodle模塊、基于瀏覽器的代碼編輯器和Jail組件(圖1)。
圖1 VPL體系架構(gòu)
VPL作為一個(gè)管理程序分配的活動(dòng)模塊安裝到Moodle插件模塊中,其使用簡(jiǎn)單容易,Moodle模塊化組件方式提供了這種組件的典型特征(備份和恢復(fù)、與分級(jí)圖書的集成、課程重置、事件控制、基于角色的訪問等)。代碼編輯器為程序編輯、運(yùn)行提供基本的功能,用于調(diào)試和評(píng)估程序代碼,還包括諸如提交管理、評(píng)估支持和反抄襲特征等特定功能。Jail組件是負(fù)責(zé)在安全環(huán)境中編譯和執(zhí)行由學(xué)生提交的代碼的服務(wù)器。它基于Linux命令來提供主機(jī)文件系統(tǒng)的讀寫權(quán)限,具有很高的安全性。運(yùn)行或評(píng)測(cè)程序文件提交至少需要一個(gè)Jail服務(wù)器。Jail服務(wù)需要Ubuntu或RedHat兼容的Linux發(fā)行版。Jail服務(wù)器支持交互和非交互執(zhí)行的請(qǐng)求[4]。
為了在控制臺(tái)中能順利提供執(zhí)行功能,Moodle服務(wù)器需要至少打開兩個(gè)端口,建議使用更大的端口。且執(zhí)行提交的PHP腳本需要比一般應(yīng)用更多的時(shí)間,因此在PHP配置中需要配置增加時(shí)限的設(shè)定。
VPL模塊使用雙代理與瀏覽器客戶端進(jìn)行通信,以發(fā)送客戶端的請(qǐng)求,并同時(shí)與Jail服務(wù)器的另一側(cè)通信,以執(zhí)行與這些請(qǐng)求相關(guān)聯(lián)的運(yùn)行任務(wù)。這允許多種網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。最簡(jiǎn)單的部署是在同一臺(tái)計(jì)算機(jī)上配置并運(yùn)行Jail服務(wù)器和Moodle服務(wù)器,其缺點(diǎn)是失去了隔離服務(wù)器的安全保障。另一種部署方式是將Moodle服務(wù)器與一個(gè)或多個(gè)單獨(dú)的Jail服務(wù)器連接,這些Jail服務(wù)器可以在配置在專用網(wǎng)絡(luò)中。在一個(gè)或多個(gè)Moodle服務(wù)器之間共享多個(gè)Jail服務(wù)器,這是一種比較可行的組織架構(gòu),改進(jìn)了資源消耗。這種配置可以通過改變Moodle服務(wù)器使用的Jail服務(wù)器的數(shù)量來適應(yīng)工作量峰值,可以更靈活的方式參與執(zhí)行任務(wù)的需求變化。其缺點(diǎn)是Jail服務(wù)器必須在公共域中,以便在不增加網(wǎng)絡(luò)復(fù)雜度的情況下使它們能夠適用于所有Moodle的服務(wù)器。
使用多個(gè)Jail服務(wù)器不僅支持可伸縮性和提高性能,而且還提供容錯(cuò)性。當(dāng)VPL模塊接收?qǐng)?zhí)行請(qǐng)求時(shí),它接收可用Jail服務(wù)器的列表,并隨機(jī)選擇未標(biāo)記為具有先前故障的一個(gè)進(jìn)入特定的時(shí)間范圍。然后VPL向服務(wù)器發(fā)送可用性請(qǐng)求;如果對(duì)該請(qǐng)求的響應(yīng)是執(zhí)行的,則將執(zhí)行請(qǐng)求分配給服務(wù)器,否則選擇新的服務(wù)器。如果沒有找到服務(wù)器,則重復(fù)考慮先前失敗的服務(wù)器的過程。(圖2)
圖2 VPL體系架構(gòu)
在線編程與測(cè)評(píng)系統(tǒng)的功能在于學(xué)習(xí)者提交用程序設(shè)計(jì)語言來在線編寫的代碼后,系統(tǒng)對(duì)代碼進(jìn)行編譯和運(yùn)行,看其是否符合時(shí)間和空間的要求,然后與標(biāo)準(zhǔn)的設(shè)計(jì)好的測(cè)試數(shù)據(jù)進(jìn)行對(duì)比來判斷程序的正確性[5]。在Moodle平臺(tái)系統(tǒng)中采取建立課程活動(dòng)模塊的方式來搭建課程學(xué)習(xí)活動(dòng)。VPL環(huán)境集成在Moodle平臺(tái)環(huán)境中,能為學(xué)生提供多種編程任務(wù)活動(dòng),支持多中語言的學(xué)習(xí),如 C,C++,C#,Haskell,F(xiàn)ORTRAN,Java,Octave,Pascal,PHP, Prolog,SQL,Ruby,Python,Scheme,Vhdl等。
采用VPL可以用來配置、管理和評(píng)估一系列在線編程學(xué)習(xí)活動(dòng),這些活動(dòng)可以按類型或范圍進(jìn)行分類。根據(jù)類型,學(xué)習(xí)活動(dòng)可以是:范例、完形填空或拼圖練習(xí)和代碼開發(fā)練習(xí)。范例方式取決于學(xué)生是否可以修改代碼,可修改示例代碼可隨時(shí)讓學(xué)習(xí)者將其重置為原始狀態(tài)。完形填空和拼圖練習(xí)尤其適合初學(xué)者,其為學(xué)生提供問題描述和解決問題的程序代碼,只是學(xué)生必須修改代碼以完成任務(wù)。如部分代碼已刪除,學(xué)生必須填空,拼圖練習(xí)中代碼已全部打亂,學(xué)生必須對(duì)其進(jìn)行排序,以便以適當(dāng)?shù)姆绞酵瓿纱a工作。
本文闡述了基于Moodle環(huán)境的在線編程與測(cè)評(píng)系統(tǒng),它是管理、構(gòu)建和測(cè)評(píng)計(jì)算機(jī)程序練習(xí)的有力工具。這個(gè)工具的主要優(yōu)點(diǎn)是它集成在一個(gè)開源的學(xué)習(xí)管理系統(tǒng)中,其特點(diǎn)是它能夠根據(jù)程序測(cè)試產(chǎn)生完整的測(cè)評(píng)報(bào)告,并及時(shí)給學(xué)習(xí)者提供反饋信息。此外,所需的程序測(cè)試可以以非常靈活的方式進(jìn)行配置,從簡(jiǎn)單的輸入輸出測(cè)試到單元測(cè)試全都可以覆蓋,完全能滿足日常編程教學(xué)需求,為學(xué)習(xí)者提供了一個(gè)更加便捷、有效的編程學(xué)習(xí)環(huán)境。