黃儒樂
[摘要]采用J2EE技術框架設計了編程類作業在線評判系統,實現了基于網絡的程序作業自動編譯和評判,減輕了教師的工作負擔,提高了程序作業的評判效率和準確性。
[關鍵詞]作業評判;J2EE;網絡教學
[中圖分類號]G40—057
[文獻標識碼]A
[論文編號]1009—8097(2009)13—0184—03
引言
21世紀以來,隨著計算機與網絡技術的迅速發展,極大的推動了教育信息化的發展,尤其是高等院校的信息化工作。近幾年來,網絡教學系統在各高校中得到了廣泛的應用,為傳統教學開辟了新的途徑,提供了網絡輔助教學與交互功能,其中網上作業管理功能也被引入到網絡教學系統中,目前大多數網絡教學系統都支持網絡作業提交以及簡單的評判功能,如一些選擇題作業的自動判分,給大部分課程作業的管理提供了方便,但是這一功能在計算機程序設計類作業的處理上效果卻不是很好,主要問題集中在程序作業的編譯與評判上,由于學生提交的程序可能會存在語法等各種錯誤,語法正確的程序其輸出結果也不一定正確,因此,教師往往不得不手工對程序作業一一批閱,甚至在計算機上親自上機調試運行,然后根據運行后的輸出結果進行評判,整個過程耗時費力,效率低下,也容易出錯,而且,一些程序運行的性能指標人工很難獲取,如運行時間、消耗內存大小等。因此,如何讓編程類作業在線自動評判是一個網絡教學過程中非常重要的問題,它的解決將大大減輕教師的工作負擔,提高程序作業的評判效率和準確性。
一系統設計
1系統結構
隨著Internet技術的日益成熟,瀏覽器器/務器(B/S)結構以其所具有的開放性、易使用、易維護等特點廣受歡迎,逐漸成為Web軟件系統開發的首選結構,本系統主體結構也采用B/S結構進行設計,但在程序編譯、評判等局部環節也采用客戶機/服務器(C/S)結構作為補充,從而提高系統的運行效率。

2功能設計
本系統的使用者涉及系統管理員、教師、學生以及教學管理者,根據不同使用角色,提供相應的業務處理和管理功能。
3模塊說明
(1)系統管理模塊
①用戶管理:主要是對參與系統使用的各類用戶進行管理,包括用戶的添加、修改、刪除、停用。以及用戶的權限設置、密碼維護等。
②查詢統計:該功能是面向教學管理者,為其提供系統的高層面、綜合性查詢與統計功能,為教學管理工作提供數據與決策支持。
(2)作業管理模塊
①作業布置:為教師提供作業的添加、修改、刪除等功能。布置一個作業時,需同時設置作業的基本信息和評判參數信息,基本信息包括作業名稱、作業類型、作業描述、截至時間、允許提交的最大次數等,評判參數信息用于作業自動評判時使用,主要包括文件類型、文件大小限制、編譯器類型、程序最大內存限制、程序最大運行時間、測試數據與測試結果、評分標準等。
②作業查詢:為教師和學生提供作業的查詢功能,包括教師查詢學生的作業提交情況,學生查詢自己作業的評分結果等。
(3)作業處理模塊
該模塊是本系統的核心功能模塊,完成學生所提交作業的預處理、編譯和評分,這也是編程作業自動評判的三部曲,每一步都是以上一步的成功執行為前提的。
①作業預處理:該操作在學生提交作業后立即執行,主要是檢查作業的的文件類型以及文件大小是否符合教師布置作業時所設定的參數值。
②作業編譯:該操作在作業預處理后執行,程序編譯后,編譯結果會自動存儲到數據庫中。
③作業評分:該操作在作業成功編譯后執行,通過系統預設的作業測試數據對程序進行測試,然后將輸出結果與作業預設的測試輸出結果進行比較,并以此為依據進行評分。
二開發環境與工具
1J2EE技術
J2EE是一個基于組件的體系結構,用于構建N層的、基于Web的、以服務端計算為核心的、模塊化的企業級應用。由于使用Java語言進行開發,可以很輕松的實現系統的跨平臺部署,即“一次編寫,處處運行”。
2Linux+MySQL
Linux是一個基于Posix和Unix的多用戶、多任務、多CPU并支持多線程的類Uinx的網絡操作系統。Linux以它的開源、高效能和靈活性著稱,其模塊化的設計結構,使得它能運行在工作站上,也能夠在普通計算機上。在網絡病毒日益風行的今天,使用Linux操作系統可以提供更好的安全性與穩定性。
MySQL是最受歡迎的開源SQL數據庫管理系統,它由MySQLAB開發、發布和支持。MySQL是一個快速的、多線程、多用戶和健壯的SQL數據庫服務器。MySQL服務器支持關鍵任務、重負載生產系統的使用。
3開發工具
本系統選擇Eclipse作為J2EE開發工具,數據庫的設計采用了Sybase公司的PowerDesigner軟件,Web開發工作均在安裝WindowsXP操作系統的PC上完成,每完成一個階段目標就將階段性成果部署到Linux服務器上測試。
三關鍵問題的實現
1后臺評判模塊
(1)編譯器選擇
對學生上傳的程序作業在服務器上進行編譯是一個重要且耗時的過程,由于程序類作業可能涉及到不同的語言類型,因此,編譯器必須具備廣泛的兼容性和極高的編譯性能,本系統我們采用了gcc編譯器,Linux系統下的gcc(GNU C Compiler)是GNU推出的功能強大、性能優越的多平臺編譯器。gec是可以在多種硬體平臺上編譯出可執行程序的超級編譯器,其執行效率與一般的編譯器相比平均效率要高20%--30%,而且支持C,C++,Obiective-C,Fortran,Java,Ada等多種編程語言。
(2)評判過程
作業提交并通過預處理后,在服務器端對程序作業的代碼進行編譯、運行和測試,在此過程中,服務器要對程序作業的運行狀態進行控制,主要包括如下幾項:
編譯錯誤(Compile Error)
運行時錯誤(Runtime Error)
消耗CPU時間超出限制(Time Limit Exceeded)
使用內存超出限制(Memory Limit Exceeded)程序輸出的信息量超出限制(Output Limit Exceeded)
出現以上任何一項問題都要立即中止評判,并反饋出錯信息給學生。如果編譯運行成功,則輸入預設的測試數據,并對程序輸出的數據進行檢查,此時有以下情況:
程序輸出與期望的相同(AcceDced)
程序輸出與期望的不同(Wrong Answer)
程序輸出格式有誤(Presentation Error)
通過以上各項評判結果,系統最終根據每項的權重比率算出綜合評分作為作業的最終分數。

(3)技術實現
程序的編譯與評判過程均以守護進程的方式進行,程序
通過網頁提交后發送消息給守護進程,由守護進程從數據庫中取出待評判的程序進行編譯,編譯時采用多進程方式,使用Linux下C語言函數fork()分出一個子進程,在子進程中通過fexecle()函數調用gee命令進行編譯,然后判斷其編譯結果。
程序成功編譯后,會產生一個可執行的文件,由于要獲取其運行中的一些資源消耗信息,需要對運行的進程進行監視、調試。本系統設計了一個程序運行器,用來運行編譯后所產生的可執行文件,獲取程序執行信息和運行狀態,并對程序的運行權限、資源占用等進行限制,避免因非正常程序的執行而影響服務器的性能與安全性。
程序運行器在一個開源項目libsandbox的基礎上進行開發,libsandbox很好的應用了Linux的系統函數ptrace。ptrace提供了一種使父進程得以監視和控制其它進程的方式,它還能夠改變子進程中的寄存器和內核映像,因而可以實現斷點調試和系統調用的跟蹤。另外程序運行器還提供了運行測試數據與比對輸出結果的功能。
2編譯與評判的性能問題處理
由于程序的編譯與評判過程對服務器系統資源消耗較大,如果程序作業量較大,或者并發提交的量較大的話,服務器可能會因系統資源的過度消耗而運行緩慢甚至死機,導致學生需等待很長時間才可看到評判結果。通過前面介紹的守護進程可以在一定程度上解決網頁等待的問題,在后臺未完成程序評判前先快速返回一個信息提示頁面,但本質上并未提高程序評判的性能,要解決這一問題,可以從兩個方面考慮:其一可以通過提高評判服務器硬件性能來提高其處理能力,如采用小型機等專業服務器,另外一種推薦的方式是采用多臺評判服務器協同工作,如在多臺PC級服務器上安裝評判程序,采用集群技術實現負載均衡,從而實現Web服務器與多臺評判服務器的協同工作,本文在系統實踐中采用了Linux Virtual Server(簡稱LVS)集群技術來構建一個高可Hj、可伸縮的集群系統。
3與網絡教學系統的集成問題處理
編程類作業在線評判系統是對網絡教學系統的補充,由于多數高校已擁有網絡教學系統,因此,將本系統集成到網絡教學系統中是最佳選擇,一些網絡教學系統提供二次開發,這種情況下我們可以實現深度集成,對于不支持二次開發的網絡教學系統,一般也可以從統一身份認證的角度進行集成,實現SSO(單點登錄)集成。
四結論
本文根據編程類作業的特點設計了自動評判系統,應用了J2EE技術,實踐了Linux、Mysql、libsandbox等一系列開源項目,基于Web方式實現了編程類作業的網上自動評判,適合多種程序設計語言,有效的減輕了教師的工作量,提高了工作效率,是對目前網絡教學系統的很好補充。但本文所討論的程序類作業僅限于有標準的輸入輸出數據的基礎程序設計題,如一些算法類程序題等,對于其它類型程序題的自動評判有待進一步的研究。
參考文獻
[1]李文新,郭煒.北京大學程序在線評測系統及其應用[J].吉林大學學報(信息科學版),2005,(S2):172
[2]葉云.PC集群技術的研究及在作業評判系統中的應用[D].浙江:浙江工業大學,2007.
[3]李晨陽,焦海星.創建高性能的J2EE應用系統[J].計算機系統應用,2005,(2):10.
[4]黃劍,鄧秀春.智能化在線評判系統的設計與實現[J].電腦知識與技術(學術交流),2007,21:809.