蔡向高,劉華泓
(1.中山大學資訊管理學院,廣東 廣州510006;2.中山大學信息科學與技術學院,廣東廣州510006)
基于Sakai的程序設計語言課程教學管理系統*
蔡向高1,劉華泓2
(1.中山大學資訊管理學院,廣東 廣州510006;2.中山大學信息科學與技術學院,廣東廣州510006)
針對開源系統在線學習系統Sakai應用于程序設計語言等計算機編程類課程教學時,缺乏對程序設計題目進行自動評測和優化的問題,在對Sakai架構進行深度分析的基礎上,集成了程序設計語言題目自動評測機制以及實現實驗報告在線手寫批注等功能。在實際教學中,有助于提高教師的工作效率以及給予學生更多的反饋信息。
程序設計語言;自動評測;Sakai;在線學習系統
對于“程序設計語言”課程的編程作業,由于時間、精力有限,不少教師都是直接閱讀代碼后給出相關分數,而沒實際運行學生的程序。人工閱讀代碼使得教師往往忽略了學生程序中存在的語法和編譯問題,耗費教師更多的時間和精力,也難以驗證其正確性。對編程作業進行自動化評測,不僅可以省去教師手工編譯、運行及測試的時間,大大減輕教師的工作負擔,而且通過若干從難到易的測試用例生成測試報告,也可以讓學生對自己程序中存在的問題一目了然。
關于程序設計題目自動評測的相關課題吸引了國內外的許多學者進行研究。近幾年,在國外如Aleman等人使用先靜態測試再動態測試的方法對程序設計題目進行自動評測[1]。在國內,牛永浩等人[2]對關于如何進行程序設計題目的自動評分作了詳細的分析。但是大部分的研究或系統更多只關注自動評測或代碼相似性這幾大關鍵技術,缺乏與之相配套、功能齊整的在線學習系統。
Sakai在線學習系統是由美國印地安那大學、密西根大學、斯坦福大學和麻省理工學院于2004年共同發起的一個開源項目[3],2005年發布第一個版本,目前最新版本號是10.3。Sakai平臺包含了課程大綱、課程內容、平時作業、練習測驗、成績查詢、成員名冊、日程管理、系統通知和課程信息等數十個模塊。Sakai平臺采用插件機制,開發者可以很容易在上面開發新的模塊。目前,Sakai已經在教育、培訓和科研等領域得到了廣泛的應用。
本文將在Sakai平臺之上,討論基于Sakai平臺的源代碼自動評測、源碼和報告評閱等功能的實現。
實現基于Sakai的程序設計語言課程教學管理系統,必須深入理解Sakai平臺架構進行二次開發,并掌握自動評測等關鍵技術。
1.Sakai平臺架構
Sakai采用插件式架構,每一個插件 (Sakai應用,Sakai Application)對應于一個具體的功能模塊,如作業、考試等功能模塊。每一個Sakai應用的結構如圖1所示。主要分為四個子項目:第一個子項目為共享(Shared)的接口部分,關于所有的業務邏輯接口、Getter/Setter接口以及數據存取接口都在這一項目中聲明。第二個子項目是組件(Components)定義部分,主要是Spring容器的配置文件,指明各個接口的實現類。第三個子項目為Web用戶界面,所有關于用戶輸入輸出的操作都在這一項目中實現;實際上通過Maven生成的標準Sakai應用,包含四個子項目。第四個子項目為實現部分,所有接口的實現類都在這一項目中創建。Sakai應用與Sakai框架進行通信是通過共享子項目的公共API實現,通過這些公共API,可以獲取用戶信息以及所屬課程等信息。以上劃分規劃必須嚴格遵循,不同子項目間的協作只能通過接口進行,否則由于同一個實現類被不同的子項目加載容易導致類不兼容。

圖1 Sakai應用結構
進行Sakai應用的開發,數據庫存取的實現擁有多種選擇方式,包括JDBC、Spring JDBC和Hibernate。表示層的實現可以選擇Velocity、JSP、JSF、RSF、Wicket以及Spring MVC等方式。對于普通的開發者而言,選擇Hibernate+Spring MVC是一種比較理想的組合方式。然而對Sakai進行二次開發時,不同的Sakai應用采用不同的數據庫存取方式以及表示形式,要求開發者掌握各種相關技術以及理解Sakai現有的代碼,會一定程度上增加開發者的學習成本和降低開發效率。
2.自動評測
程序設計題的自動評測技術主要包括靜態測試和動態測試。靜態分析主要指針對源代碼進行分析,不要求源代碼完整或者可編譯。動態分析是指將源代碼編譯成程序后,采用黑盒測試的方法,使用測試用例對程序進行測試,并比較運行結果和期望結果來確定學生的分數。本系統主要采用動態測試,在Windows使用Visual Studio的編譯器CL.EXE對源代碼進行編譯,在Linux中調用GNU編譯器套件GCC進行編譯。然后運行程序進行測試。
為了防止程序運行、編譯異常或進入死循環,本系統采用JAVA線程創建編譯或測試進程,并進行監控。如果超時仍未完成相關任務,將強制性停止該進程,確保服務器不會因為阻塞而陷入長時間等待。進行結果對比時,系統將會對程序的輸出進行處理并智能提取關鍵數據與期望結果進行比較,防止因為輸出格式或提示文本的原因導致測試不通過。此外,系統可以進行文件分割支持多源文件輸入,從而可以應用于“數據結構”等計算機編程課程。
3.相似度檢測
學生的誠信問題一直是廣大教師在授課時所關注的重點所在。檢查學生提交的程序源代碼是否存在抄襲,在國內外的研究都已經比較成熟。主要包括屬性計數法、結構度量法、最長公共子序列等方法。并且在應用檢測算法之前,還可以對程序源代碼進行預處理或詞法、語法分析,以消除格式(如空格和換行)、順序或改名等操作的影響。本系統對源代碼進行預處理后,采用類似Linux diff命令的算法,以行為單位使用最長公共子序列進行檢測。
4.在線手寫批注
對于程序設計作業,除要求提交源代碼外,一般還要求學生提交實驗報告,即作業內容。各類主流的在線學習系統,基本都提供了作業管理功能,少數平臺也提供對作業內容進行批注的功能,如Sakai,可以在學生提交的作業文本中插入一些特定符號,使在學生界面可以實現批注的效果。但是效率和效果都不理想,比不上現實中教師使用紅筆在紙質作業本上或實驗報告上直接批改來得方便。
得益于下一代HTML,即HTML5技術的發展,使用HTML5中的Canvas畫布功能,可以在瀏覽器上實現類似畫圖軟件中的涂鴉功能和文本框功能。為了支持教師可以對實驗報告進行在線手寫批注,首先將學生提交的實驗報告(PDF)轉換為圖片,然后以背景的方式裝載進入畫布,批注保存后系統后臺自動生成已批注的PDF供學生下載。如果需要對源代碼進行評閱,可以要求學生將源代碼粘貼進入實驗報告。
5.其他
除開上述核心技術外,出于教學效率和學習效率、用戶體驗等方面的考慮,本系統集成了語法高亮、源代碼在線編輯器、源代碼格式化和報表輸出等功能。
系統基于著名開源在線學習系統Sakai之上,實現源代碼自動評測,并對平時作業、考試測驗和成績查詢等模塊進行改進。系統針對中山大學教學環境做了相關優化,支持中山大學教務相關報表的輸出以及對Sakai的漢化、樣式做了改進。以下將以基于Sakai平臺的源代碼自動評測和實驗報告在線評閱兩大改進功能進行說明。
1.源代碼自動評測
在Sakai的基礎上,集成C++編程作業類型,教師需要將作業類型選擇為“C++作業”,然后輸入測試用例。學生在相應的用戶界面可以輸入源碼等信息。系統集成了C++源碼在線編輯器,使用源碼在線編輯器,學生可以在瀏覽器中很方便地進行代碼編輯。系統將根據事先定制好的測試用例對C++源碼進行評測,將會為每一位學生生成一份詳細的閱讀報告,如圖2所示。并且系統支持對所有作業進行批量的評測,進行批量評測還將包含作業相似度的檢查。

圖2 自動評測結果
2.實驗報告評閱
為了幫助教師對程序作業進行打分,系統集成了各種工具對源代碼進行處理,如顯示自動評測的結果以及源代碼高亮、格式化,如圖3所示。此外如圖4所示,系統實現了PDF報告在線手寫批注的功能。系統提供畫筆功能,實現自主批注功能。也提供了文字批注功能、橡皮擦等功能。這些功能基本滿足了教師對實驗報告進行批注的需求。保存后,學生就可以在自己的用戶界面中下載已批注的報告。
針對程序設計題目自動化評測模塊在2009年、2010年已經在中山大學信息科學與技術學院C++高級程序設計語言課程中試用。每周布置兩道的編程題目,學生提交源代碼和實驗報告。預先定義從易到難的測試用例,較難的測試用例主要針對邊界測試或學生容易疏忽的地方進行設計。使用自動化評測模塊,可以快速生成成績報告,減少作業評改的時間和提高評改的準確性。學生根據反饋的測試報告,可以快速定位程序存在的問題,一定程度上提高學生的學習效率。

圖3 源代碼評閱界面

圖4 實驗報告在線手寫批注
Sakai平臺已經在中山大學資訊管理學院的兩門課程進行試用,大大提高了教師與學生之間的協作效率,為作業、考試提供了一個優秀的管理平臺。基于Sakai平臺的自動化評測系統在開發完畢后,使用2009年、2010年的數據針對C++程序設計語言課程的作業自動化測評進行評估,初步驗證其可行性,并將在2015年春季學期于中山大學資訊管理學院數據結構等課程中試用。
本文探討了基于Sakai程序設計語言課程教學管理系統的設計開發,利用當前開源平臺以及程序自動化評測技術,在Sakai的基礎上,進行了深度的二次開發,實現了“程序設計語言”實驗自動評測及課程管理系統,實現對C++作業進行自動評測和管理的功能,提高教師在程序設計語言課程的教學效率。
[1]Aleman JLF.Automated assessmentin aprogramm ing tools course[J].IEEE Transactionson Education,2011,54(4): 576-581.
[2]牛永浩,張曉光.關于程序設計題自動評分方法的研究[J].信息技術,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
國家自然科學基金(項目編號:61309028);廣東省教育廳高校學科與專業建設專項基金科技創新項目(項目編號:2013KJCX 0128);中山大學實驗教改項目(項目編號:20000-18008010)。