蔡向高,劉華泓
(1.中山大學(xué)資訊管理學(xué)院,廣東 廣州510006;2.中山大學(xué)信息科學(xué)與技術(shù)學(xué)院,廣東廣州510006)
基于Sakai的程序設(shè)計(jì)語(yǔ)言課程教學(xué)管理系統(tǒng)*
蔡向高1,劉華泓2
(1.中山大學(xué)資訊管理學(xué)院,廣東 廣州510006;2.中山大學(xué)信息科學(xué)與技術(shù)學(xué)院,廣東廣州510006)
針對(duì)開源系統(tǒng)在線學(xué)習(xí)系統(tǒng)Sakai應(yīng)用于程序設(shè)計(jì)語(yǔ)言等計(jì)算機(jī)編程類課程教學(xué)時(shí),缺乏對(duì)程序設(shè)計(jì)題目進(jìn)行自動(dòng)評(píng)測(cè)和優(yōu)化的問題,在對(duì)Sakai架構(gòu)進(jìn)行深度分析的基礎(chǔ)上,集成了程序設(shè)計(jì)語(yǔ)言題目自動(dòng)評(píng)測(cè)機(jī)制以及實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告在線手寫批注等功能。在實(shí)際教學(xué)中,有助于提高教師的工作效率以及給予學(xué)生更多的反饋信息。
程序設(shè)計(jì)語(yǔ)言;自動(dòng)評(píng)測(cè);Sakai;在線學(xué)習(xí)系統(tǒng)
對(duì)于“程序設(shè)計(jì)語(yǔ)言”課程的編程作業(yè),由于時(shí)間、精力有限,不少教師都是直接閱讀代碼后給出相關(guān)分?jǐn)?shù),而沒實(shí)際運(yùn)行學(xué)生的程序。人工閱讀代碼使得教師往往忽略了學(xué)生程序中存在的語(yǔ)法和編譯問題,耗費(fèi)教師更多的時(shí)間和精力,也難以驗(yàn)證其正確性。對(duì)編程作業(yè)進(jìn)行自動(dòng)化評(píng)測(cè),不僅可以省去教師手工編譯、運(yùn)行及測(cè)試的時(shí)間,大大減輕教師的工作負(fù)擔(dān),而且通過若干從難到易的測(cè)試用例生成測(cè)試報(bào)告,也可以讓學(xué)生對(duì)自己程序中存在的問題一目了然。
關(guān)于程序設(shè)計(jì)題目自動(dòng)評(píng)測(cè)的相關(guān)課題吸引了國(guó)內(nèi)外的許多學(xué)者進(jìn)行研究。近幾年,在國(guó)外如Aleman等人使用先靜態(tài)測(cè)試再動(dòng)態(tài)測(cè)試的方法對(duì)程序設(shè)計(jì)題目進(jìn)行自動(dòng)評(píng)測(cè)[1]。在國(guó)內(nèi),牛永浩等人[2]對(duì)關(guān)于如何進(jìn)行程序設(shè)計(jì)題目的自動(dòng)評(píng)分作了詳細(xì)的分析。但是大部分的研究或系統(tǒng)更多只關(guān)注自動(dòng)評(píng)測(cè)或代碼相似性這幾大關(guān)鍵技術(shù),缺乏與之相配套、功能齊整的在線學(xué)習(xí)系統(tǒng)。
Sakai在線學(xué)習(xí)系統(tǒng)是由美國(guó)印地安那大學(xué)、密西根大學(xué)、斯坦福大學(xué)和麻省理工學(xué)院于2004年共同發(fā)起的一個(gè)開源項(xiàng)目[3],2005年發(fā)布第一個(gè)版本,目前最新版本號(hào)是10.3。Sakai平臺(tái)包含了課程大綱、課程內(nèi)容、平時(shí)作業(yè)、練習(xí)測(cè)驗(yàn)、成績(jī)查詢、成員名冊(cè)、日程管理、系統(tǒng)通知和課程信息等數(shù)十個(gè)模塊。Sakai平臺(tái)采用插件機(jī)制,開發(fā)者可以很容易在上面開發(fā)新的模塊。目前,Sakai已經(jīng)在教育、培訓(xùn)和科研等領(lǐng)域得到了廣泛的應(yīng)用。
本文將在Sakai平臺(tái)之上,討論基于Sakai平臺(tái)的源代碼自動(dòng)評(píng)測(cè)、源碼和報(bào)告評(píng)閱等功能的實(shí)現(xiàn)。
實(shí)現(xiàn)基于Sakai的程序設(shè)計(jì)語(yǔ)言課程教學(xué)管理系統(tǒng),必須深入理解Sakai平臺(tái)架構(gòu)進(jìn)行二次開發(fā),并掌握自動(dòng)評(píng)測(cè)等關(guān)鍵技術(shù)。
1.Sakai平臺(tái)架構(gòu)
Sakai采用插件式架構(gòu),每一個(gè)插件 (Sakai應(yīng)用,Sakai Application)對(duì)應(yīng)于一個(gè)具體的功能模塊,如作業(yè)、考試等功能模塊。每一個(gè)Sakai應(yīng)用的結(jié)構(gòu)如圖1所示。主要分為四個(gè)子項(xiàng)目:第一個(gè)子項(xiàng)目為共享(Shared)的接口部分,關(guān)于所有的業(yè)務(wù)邏輯接口、Getter/Setter接口以及數(shù)據(jù)存取接口都在這一項(xiàng)目中聲明。第二個(gè)子項(xiàng)目是組件(Components)定義部分,主要是Spring容器的配置文件,指明各個(gè)接口的實(shí)現(xiàn)類。第三個(gè)子項(xiàng)目為Web用戶界面,所有關(guān)于用戶輸入輸出的操作都在這一項(xiàng)目中實(shí)現(xiàn);實(shí)際上通過Maven生成的標(biāo)準(zhǔn)Sakai應(yīng)用,包含四個(gè)子項(xiàng)目。第四個(gè)子項(xiàng)目為實(shí)現(xiàn)部分,所有接口的實(shí)現(xiàn)類都在這一項(xiàng)目中創(chuàng)建。Sakai應(yīng)用與Sakai框架進(jìn)行通信是通過共享子項(xiàng)目的公共API實(shí)現(xiàn),通過這些公共API,可以獲取用戶信息以及所屬課程等信息。以上劃分規(guī)劃必須嚴(yán)格遵循,不同子項(xiàng)目間的協(xié)作只能通過接口進(jìn)行,否則由于同一個(gè)實(shí)現(xiàn)類被不同的子項(xiàng)目加載容易導(dǎo)致類不兼容。
圖1 Sakai應(yīng)用結(jié)構(gòu)
進(jìn)行Sakai應(yīng)用的開發(fā),數(shù)據(jù)庫(kù)存取的實(shí)現(xiàn)擁有多種選擇方式,包括JDBC、Spring JDBC和Hibernate。表示層的實(shí)現(xiàn)可以選擇Velocity、JSP、JSF、RSF、Wicket以及Spring MVC等方式。對(duì)于普通的開發(fā)者而言,選擇Hibernate+Spring MVC是一種比較理想的組合方式。然而對(duì)Sakai進(jìn)行二次開發(fā)時(shí),不同的Sakai應(yīng)用采用不同的數(shù)據(jù)庫(kù)存取方式以及表示形式,要求開發(fā)者掌握各種相關(guān)技術(shù)以及理解Sakai現(xiàn)有的代碼,會(huì)一定程度上增加開發(fā)者的學(xué)習(xí)成本和降低開發(fā)效率。
2.自動(dòng)評(píng)測(cè)
程序設(shè)計(jì)題的自動(dòng)評(píng)測(cè)技術(shù)主要包括靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試。靜態(tài)分析主要指針對(duì)源代碼進(jìn)行分析,不要求源代碼完整或者可編譯。動(dòng)態(tài)分析是指將源代碼編譯成程序后,采用黑盒測(cè)試的方法,使用測(cè)試用例對(duì)程序進(jìn)行測(cè)試,并比較運(yùn)行結(jié)果和期望結(jié)果來確定學(xué)生的分?jǐn)?shù)。本系統(tǒng)主要采用動(dòng)態(tài)測(cè)試,在Windows使用Visual Studio的編譯器CL.EXE對(duì)源代碼進(jìn)行編譯,在Linux中調(diào)用GNU編譯器套件GCC進(jìn)行編譯。然后運(yùn)行程序進(jìn)行測(cè)試。
為了防止程序運(yùn)行、編譯異?;蜻M(jìn)入死循環(huán),本系統(tǒng)采用JAVA線程創(chuàng)建編譯或測(cè)試進(jìn)程,并進(jìn)行監(jiān)控。如果超時(shí)仍未完成相關(guān)任務(wù),將強(qiáng)制性停止該進(jìn)程,確保服務(wù)器不會(huì)因?yàn)樽枞萑腴L(zhǎng)時(shí)間等待。進(jìn)行結(jié)果對(duì)比時(shí),系統(tǒng)將會(huì)對(duì)程序的輸出進(jìn)行處理并智能提取關(guān)鍵數(shù)據(jù)與期望結(jié)果進(jìn)行比較,防止因?yàn)檩敵龈袷交蛱崾疚谋镜脑驅(qū)е聹y(cè)試不通過。此外,系統(tǒng)可以進(jìn)行文件分割支持多源文件輸入,從而可以應(yīng)用于“數(shù)據(jù)結(jié)構(gòu)”等計(jì)算機(jī)編程課程。
3.相似度檢測(cè)
學(xué)生的誠(chéng)信問題一直是廣大教師在授課時(shí)所關(guān)注的重點(diǎn)所在。檢查學(xué)生提交的程序源代碼是否存在抄襲,在國(guó)內(nèi)外的研究都已經(jīng)比較成熟。主要包括屬性計(jì)數(shù)法、結(jié)構(gòu)度量法、最長(zhǎng)公共子序列等方法。并且在應(yīng)用檢測(cè)算法之前,還可以對(duì)程序源代碼進(jìn)行預(yù)處理或詞法、語(yǔ)法分析,以消除格式(如空格和換行)、順序或改名等操作的影響。本系統(tǒng)對(duì)源代碼進(jìn)行預(yù)處理后,采用類似Linux diff命令的算法,以行為單位使用最長(zhǎng)公共子序列進(jìn)行檢測(cè)。
4.在線手寫批注
對(duì)于程序設(shè)計(jì)作業(yè),除要求提交源代碼外,一般還要求學(xué)生提交實(shí)驗(yàn)報(bào)告,即作業(yè)內(nèi)容。各類主流的在線學(xué)習(xí)系統(tǒng),基本都提供了作業(yè)管理功能,少數(shù)平臺(tái)也提供對(duì)作業(yè)內(nèi)容進(jìn)行批注的功能,如Sakai,可以在學(xué)生提交的作業(yè)文本中插入一些特定符號(hào),使在學(xué)生界面可以實(shí)現(xiàn)批注的效果。但是效率和效果都不理想,比不上現(xiàn)實(shí)中教師使用紅筆在紙質(zhì)作業(yè)本上或?qū)嶒?yàn)報(bào)告上直接批改來得方便。
得益于下一代HTML,即HTML5技術(shù)的發(fā)展,使用HTML5中的Canvas畫布功能,可以在瀏覽器上實(shí)現(xiàn)類似畫圖軟件中的涂鴉功能和文本框功能。為了支持教師可以對(duì)實(shí)驗(yàn)報(bào)告進(jìn)行在線手寫批注,首先將學(xué)生提交的實(shí)驗(yàn)報(bào)告(PDF)轉(zhuǎn)換為圖片,然后以背景的方式裝載進(jìn)入畫布,批注保存后系統(tǒng)后臺(tái)自動(dòng)生成已批注的PDF供學(xué)生下載。如果需要對(duì)源代碼進(jìn)行評(píng)閱,可以要求學(xué)生將源代碼粘貼進(jìn)入實(shí)驗(yàn)報(bào)告。
5.其他
除開上述核心技術(shù)外,出于教學(xué)效率和學(xué)習(xí)效率、用戶體驗(yàn)等方面的考慮,本系統(tǒng)集成了語(yǔ)法高亮、源代碼在線編輯器、源代碼格式化和報(bào)表輸出等功能。
系統(tǒng)基于著名開源在線學(xué)習(xí)系統(tǒng)Sakai之上,實(shí)現(xiàn)源代碼自動(dòng)評(píng)測(cè),并對(duì)平時(shí)作業(yè)、考試測(cè)驗(yàn)和成績(jī)查詢等模塊進(jìn)行改進(jìn)。系統(tǒng)針對(duì)中山大學(xué)教學(xué)環(huán)境做了相關(guān)優(yōu)化,支持中山大學(xué)教務(wù)相關(guān)報(bào)表的輸出以及對(duì)Sakai的漢化、樣式做了改進(jìn)。以下將以基于Sakai平臺(tái)的源代碼自動(dòng)評(píng)測(cè)和實(shí)驗(yàn)報(bào)告在線評(píng)閱兩大改進(jìn)功能進(jìn)行說明。
1.源代碼自動(dòng)評(píng)測(cè)
在Sakai的基礎(chǔ)上,集成C++編程作業(yè)類型,教師需要將作業(yè)類型選擇為“C++作業(yè)”,然后輸入測(cè)試用例。學(xué)生在相應(yīng)的用戶界面可以輸入源碼等信息。系統(tǒng)集成了C++源碼在線編輯器,使用源碼在線編輯器,學(xué)生可以在瀏覽器中很方便地進(jìn)行代碼編輯。系統(tǒng)將根據(jù)事先定制好的測(cè)試用例對(duì)C++源碼進(jìn)行評(píng)測(cè),將會(huì)為每一位學(xué)生生成一份詳細(xì)的閱讀報(bào)告,如圖2所示。并且系統(tǒng)支持對(duì)所有作業(yè)進(jìn)行批量的評(píng)測(cè),進(jìn)行批量評(píng)測(cè)還將包含作業(yè)相似度的檢查。
圖2 自動(dòng)評(píng)測(cè)結(jié)果
2.實(shí)驗(yàn)報(bào)告評(píng)閱
為了幫助教師對(duì)程序作業(yè)進(jìn)行打分,系統(tǒng)集成了各種工具對(duì)源代碼進(jìn)行處理,如顯示自動(dòng)評(píng)測(cè)的結(jié)果以及源代碼高亮、格式化,如圖3所示。此外如圖4所示,系統(tǒng)實(shí)現(xiàn)了PDF報(bào)告在線手寫批注的功能。系統(tǒng)提供畫筆功能,實(shí)現(xiàn)自主批注功能。也提供了文字批注功能、橡皮擦等功能。這些功能基本滿足了教師對(duì)實(shí)驗(yàn)報(bào)告進(jìn)行批注的需求。保存后,學(xué)生就可以在自己的用戶界面中下載已批注的報(bào)告。
針對(duì)程序設(shè)計(jì)題目自動(dòng)化評(píng)測(cè)模塊在2009年、2010年已經(jīng)在中山大學(xué)信息科學(xué)與技術(shù)學(xué)院C++高級(jí)程序設(shè)計(jì)語(yǔ)言課程中試用。每周布置兩道的編程題目,學(xué)生提交源代碼和實(shí)驗(yàn)報(bào)告。預(yù)先定義從易到難的測(cè)試用例,較難的測(cè)試用例主要針對(duì)邊界測(cè)試或?qū)W生容易疏忽的地方進(jìn)行設(shè)計(jì)。使用自動(dòng)化評(píng)測(cè)模塊,可以快速生成成績(jī)報(bào)告,減少作業(yè)評(píng)改的時(shí)間和提高評(píng)改的準(zhǔn)確性。學(xué)生根據(jù)反饋的測(cè)試報(bào)告,可以快速定位程序存在的問題,一定程度上提高學(xué)生的學(xué)習(xí)效率。
圖3 源代碼評(píng)閱界面
圖4 實(shí)驗(yàn)報(bào)告在線手寫批注
Sakai平臺(tái)已經(jīng)在中山大學(xué)資訊管理學(xué)院的兩門課程進(jìn)行試用,大大提高了教師與學(xué)生之間的協(xié)作效率,為作業(yè)、考試提供了一個(gè)優(yōu)秀的管理平臺(tái)?;赟akai平臺(tái)的自動(dòng)化評(píng)測(cè)系統(tǒng)在開發(fā)完畢后,使用2009年、2010年的數(shù)據(jù)針對(duì)C++程序設(shè)計(jì)語(yǔ)言課程的作業(yè)自動(dòng)化測(cè)評(píng)進(jìn)行評(píng)估,初步驗(yàn)證其可行性,并將在2015年春季學(xué)期于中山大學(xué)資訊管理學(xué)院數(shù)據(jù)結(jié)構(gòu)等課程中試用。
本文探討了基于Sakai程序設(shè)計(jì)語(yǔ)言課程教學(xué)管理系統(tǒng)的設(shè)計(jì)開發(fā),利用當(dāng)前開源平臺(tái)以及程序自動(dòng)化評(píng)測(cè)技術(shù),在Sakai的基礎(chǔ)上,進(jìn)行了深度的二次開發(fā),實(shí)現(xiàn)了“程序設(shè)計(jì)語(yǔ)言”實(shí)驗(yàn)自動(dòng)評(píng)測(cè)及課程管理系統(tǒng),實(shí)現(xiàn)對(duì)C++作業(yè)進(jìn)行自動(dòng)評(píng)測(cè)和管理的功能,提高教師在程序設(shè)計(jì)語(yǔ)言課程的教學(xué)效率。
[1]Aleman JLF.Automated assessmentin aprogramm ing tools course[J].IEEE Transactionson Education,2011,54(4): 576-581.
[2]牛永浩,張曉光.關(guān)于程序設(shè)計(jì)題自動(dòng)評(píng)分方法的研究[J].信息技術(shù),2010(11):155-159.
[3]Apereo Foundation.Sakai Project[EB/OL].https:// www.sakaiproject.org/,2015-02-15.
(編輯:楊馥紅)
TP311.52
A
1673-8454(2015)15-0057-03
國(guó)家自然科學(xué)基金(項(xiàng)目編號(hào):61309028);廣東省教育廳高校學(xué)科與專業(yè)建設(shè)專項(xiàng)基金科技創(chuàng)新項(xiàng)目(項(xiàng)目編號(hào):2013KJCX 0128);中山大學(xué)實(shí)驗(yàn)教改項(xiàng)目(項(xiàng)目編號(hào):20000-18008010)。