黃儒樂
[摘要]采用J2EE技術(shù)框架設(shè)計(jì)了編程類作業(yè)在線評(píng)判系統(tǒng),實(shí)現(xiàn)了基于網(wǎng)絡(luò)的程序作業(yè)自動(dòng)編譯和評(píng)判,減輕了教師的工作負(fù)擔(dān),提高了程序作業(yè)的評(píng)判效率和準(zhǔn)確性。
[關(guān)鍵詞]作業(yè)評(píng)判;J2EE;網(wǎng)絡(luò)教學(xué)
[中圖分類號(hào)]G40—057
[文獻(xiàn)標(biāo)識(shí)碼]A
[論文編號(hào)]1009—8097(2009)13—0184—03
引言
21世紀(jì)以來,隨著計(jì)算機(jī)與網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,極大的推動(dòng)了教育信息化的發(fā)展,尤其是高等院校的信息化工作。近幾年來,網(wǎng)絡(luò)教學(xué)系統(tǒng)在各高校中得到了廣泛的應(yīng)用,為傳統(tǒng)教學(xué)開辟了新的途徑,提供了網(wǎng)絡(luò)輔助教學(xué)與交互功能,其中網(wǎng)上作業(yè)管理功能也被引入到網(wǎng)絡(luò)教學(xué)系統(tǒng)中,目前大多數(shù)網(wǎng)絡(luò)教學(xué)系統(tǒng)都支持網(wǎng)絡(luò)作業(yè)提交以及簡(jiǎn)單的評(píng)判功能,如一些選擇題作業(yè)的自動(dòng)判分,給大部分課程作業(yè)的管理提供了方便,但是這一功能在計(jì)算機(jī)程序設(shè)計(jì)類作業(yè)的處理上效果卻不是很好,主要問題集中在程序作業(yè)的編譯與評(píng)判上,由于學(xué)生提交的程序可能會(huì)存在語法等各種錯(cuò)誤,語法正確的程序其輸出結(jié)果也不一定正確,因此,教師往往不得不手工對(duì)程序作業(yè)一一批閱,甚至在計(jì)算機(jī)上親自上機(jī)調(diào)試運(yùn)行,然后根據(jù)運(yùn)行后的輸出結(jié)果進(jìn)行評(píng)判,整個(gè)過程耗時(shí)費(fèi)力,效率低下,也容易出錯(cuò),而且,一些程序運(yùn)行的性能指標(biāo)人工很難獲取,如運(yùn)行時(shí)間、消耗內(nèi)存大小等。因此,如何讓編程類作業(yè)在線自動(dòng)評(píng)判是一個(gè)網(wǎng)絡(luò)教學(xué)過程中非常重要的問題,它的解決將大大減輕教師的工作負(fù)擔(dān),提高程序作業(yè)的評(píng)判效率和準(zhǔn)確性。
一系統(tǒng)設(shè)計(jì)
1系統(tǒng)結(jié)構(gòu)
隨著Internet技術(shù)的日益成熟,瀏覽器器/務(wù)器(B/S)結(jié)構(gòu)以其所具有的開放性、易使用、易維護(hù)等特點(diǎn)廣受歡迎,逐漸成為Web軟件系統(tǒng)開發(fā)的首選結(jié)構(gòu),本系統(tǒng)主體結(jié)構(gòu)也采用B/S結(jié)構(gòu)進(jìn)行設(shè)計(jì),但在程序編譯、評(píng)判等局部環(huán)節(jié)也采用客戶機(jī)/服務(wù)器(C/S)結(jié)構(gòu)作為補(bǔ)充,從而提高系統(tǒng)的運(yùn)行效率。
2功能設(shè)計(jì)
本系統(tǒng)的使用者涉及系統(tǒng)管理員、教師、學(xué)生以及教學(xué)管理者,根據(jù)不同使用角色,提供相應(yīng)的業(yè)務(wù)處理和管理功能。
3模塊說明
(1)系統(tǒng)管理模塊
①用戶管理:主要是對(duì)參與系統(tǒng)使用的各類用戶進(jìn)行管理,包括用戶的添加、修改、刪除、停用。以及用戶的權(quán)限設(shè)置、密碼維護(hù)等。
②查詢統(tǒng)計(jì):該功能是面向教學(xué)管理者,為其提供系統(tǒng)的高層面、綜合性查詢與統(tǒng)計(jì)功能,為教學(xué)管理工作提供數(shù)據(jù)與決策支持。
(2)作業(yè)管理模塊
①作業(yè)布置:為教師提供作業(yè)的添加、修改、刪除等功能。布置一個(gè)作業(yè)時(shí),需同時(shí)設(shè)置作業(yè)的基本信息和評(píng)判參數(shù)信息,基本信息包括作業(yè)名稱、作業(yè)類型、作業(yè)描述、截至?xí)r間、允許提交的最大次數(shù)等,評(píng)判參數(shù)信息用于作業(yè)自動(dòng)評(píng)判時(shí)使用,主要包括文件類型、文件大小限制、編譯器類型、程序最大內(nèi)存限制、程序最大運(yùn)行時(shí)間、測(cè)試數(shù)據(jù)與測(cè)試結(jié)果、評(píng)分標(biāo)準(zhǔn)等。
②作業(yè)查詢:為教師和學(xué)生提供作業(yè)的查詢功能,包括教師查詢學(xué)生的作業(yè)提交情況,學(xué)生查詢自己作業(yè)的評(píng)分結(jié)果等。
(3)作業(yè)處理模塊
該模塊是本系統(tǒng)的核心功能模塊,完成學(xué)生所提交作業(yè)的預(yù)處理、編譯和評(píng)分,這也是編程作業(yè)自動(dòng)評(píng)判的三部曲,每一步都是以上一步的成功執(zhí)行為前提的。
①作業(yè)預(yù)處理:該操作在學(xué)生提交作業(yè)后立即執(zhí)行,主要是檢查作業(yè)的的文件類型以及文件大小是否符合教師布置作業(yè)時(shí)所設(shè)定的參數(shù)值。
②作業(yè)編譯:該操作在作業(yè)預(yù)處理后執(zhí)行,程序編譯后,編譯結(jié)果會(huì)自動(dòng)存儲(chǔ)到數(shù)據(jù)庫中。
③作業(yè)評(píng)分:該操作在作業(yè)成功編譯后執(zhí)行,通過系統(tǒng)預(yù)設(shè)的作業(yè)測(cè)試數(shù)據(jù)對(duì)程序進(jìn)行測(cè)試,然后將輸出結(jié)果與作業(yè)預(yù)設(shè)的測(cè)試輸出結(jié)果進(jìn)行比較,并以此為依據(jù)進(jìn)行評(píng)分。
二開發(fā)環(huán)境與工具
1J2EE技術(shù)
J2EE是一個(gè)基于組件的體系結(jié)構(gòu),用于構(gòu)建N層的、基于Web的、以服務(wù)端計(jì)算為核心的、模塊化的企業(yè)級(jí)應(yīng)用。由于使用Java語言進(jìn)行開發(fā),可以很輕松的實(shí)現(xiàn)系統(tǒng)的跨平臺(tái)部署,即“一次編寫,處處運(yùn)行”。
2Linux+MySQL
Linux是一個(gè)基于Posix和Unix的多用戶、多任務(wù)、多CPU并支持多線程的類Uinx的網(wǎng)絡(luò)操作系統(tǒng)。Linux以它的開源、高效能和靈活性著稱,其模塊化的設(shè)計(jì)結(jié)構(gòu),使得它能運(yùn)行在工作站上,也能夠在普通計(jì)算機(jī)上。在網(wǎng)絡(luò)病毒日益風(fēng)行的今天,使用Linux操作系統(tǒng)可以提供更好的安全性與穩(wěn)定性。
MySQL是最受歡迎的開源SQL數(shù)據(jù)庫管理系統(tǒng),它由MySQLAB開發(fā)、發(fā)布和支持。MySQL是一個(gè)快速的、多線程、多用戶和健壯的SQL數(shù)據(jù)庫服務(wù)器。MySQL服務(wù)器支持關(guān)鍵任務(wù)、重負(fù)載生產(chǎn)系統(tǒng)的使用。
3開發(fā)工具
本系統(tǒng)選擇Eclipse作為J2EE開發(fā)工具,數(shù)據(jù)庫的設(shè)計(jì)采用了Sybase公司的PowerDesigner軟件,Web開發(fā)工作均在安裝WindowsXP操作系統(tǒng)的PC上完成,每完成一個(gè)階段目標(biāo)就將階段性成果部署到Linux服務(wù)器上測(cè)試。
三關(guān)鍵問題的實(shí)現(xiàn)
1后臺(tái)評(píng)判模塊
(1)編譯器選擇
對(duì)學(xué)生上傳的程序作業(yè)在服務(wù)器上進(jìn)行編譯是一個(gè)重要且耗時(shí)的過程,由于程序類作業(yè)可能涉及到不同的語言類型,因此,編譯器必須具備廣泛的兼容性和極高的編譯性能,本系統(tǒng)我們采用了gcc編譯器,Linux系統(tǒng)下的gcc(GNU C Compiler)是GNU推出的功能強(qiáng)大、性能優(yōu)越的多平臺(tái)編譯器。gec是可以在多種硬體平臺(tái)上編譯出可執(zhí)行程序的超級(jí)編譯器,其執(zhí)行效率與一般的編譯器相比平均效率要高20%--30%,而且支持C,C++,Obiective-C,F(xiàn)ortran,Java,Ada等多種編程語言。
(2)評(píng)判過程
作業(yè)提交并通過預(yù)處理后,在服務(wù)器端對(duì)程序作業(yè)的代碼進(jìn)行編譯、運(yùn)行和測(cè)試,在此過程中,服務(wù)器要對(duì)程序作業(yè)的運(yùn)行狀態(tài)進(jìn)行控制,主要包括如下幾項(xiàng):
編譯錯(cuò)誤(Compile Error)
運(yùn)行時(shí)錯(cuò)誤(Runtime Error)
消耗CPU時(shí)間超出限制(Time Limit Exceeded)
使用內(nèi)存超出限制(Memory Limit Exceeded)程序輸出的信息量超出限制(Output Limit Exceeded)
出現(xiàn)以上任何一項(xiàng)問題都要立即中止評(píng)判,并反饋出錯(cuò)信息給學(xué)生。如果編譯運(yùn)行成功,則輸入預(yù)設(shè)的測(cè)試數(shù)據(jù),并對(duì)程序輸出的數(shù)據(jù)進(jìn)行檢查,此時(shí)有以下情況:
程序輸出與期望的相同(AcceDced)
程序輸出與期望的不同(Wrong Answer)
程序輸出格式有誤(Presentation Error)
通過以上各項(xiàng)評(píng)判結(jié)果,系統(tǒng)最終根據(jù)每項(xiàng)的權(quán)重比率算出綜合評(píng)分作為作業(yè)的最終分?jǐn)?shù)。
(3)技術(shù)實(shí)現(xiàn)
程序的編譯與評(píng)判過程均以守護(hù)進(jìn)程的方式進(jìn)行,程序
通過網(wǎng)頁提交后發(fā)送消息給守護(hù)進(jìn)程,由守護(hù)進(jìn)程從數(shù)據(jù)庫中取出待評(píng)判的程序進(jìn)行編譯,編譯時(shí)采用多進(jìn)程方式,使用Linux下C語言函數(shù)fork()分出一個(gè)子進(jìn)程,在子進(jìn)程中通過fexecle()函數(shù)調(diào)用gee命令進(jìn)行編譯,然后判斷其編譯結(jié)果。
程序成功編譯后,會(huì)產(chǎn)生一個(gè)可執(zhí)行的文件,由于要獲取其運(yùn)行中的一些資源消耗信息,需要對(duì)運(yùn)行的進(jìn)程進(jìn)行監(jiān)視、調(diào)試。本系統(tǒng)設(shè)計(jì)了一個(gè)程序運(yùn)行器,用來運(yùn)行編譯后所產(chǎn)生的可執(zhí)行文件,獲取程序執(zhí)行信息和運(yùn)行狀態(tài),并對(duì)程序的運(yùn)行權(quán)限、資源占用等進(jìn)行限制,避免因非正常程序的執(zhí)行而影響服務(wù)器的性能與安全性。
程序運(yùn)行器在一個(gè)開源項(xiàng)目libsandbox的基礎(chǔ)上進(jìn)行開發(fā),libsandbox很好的應(yīng)用了Linux的系統(tǒng)函數(shù)ptrace。ptrace提供了一種使父進(jìn)程得以監(jiān)視和控制其它進(jìn)程的方式,它還能夠改變子進(jìn)程中的寄存器和內(nèi)核映像,因而可以實(shí)現(xiàn)斷點(diǎn)調(diào)試和系統(tǒng)調(diào)用的跟蹤。另外程序運(yùn)行器還提供了運(yùn)行測(cè)試數(shù)據(jù)與比對(duì)輸出結(jié)果的功能。
2編譯與評(píng)判的性能問題處理
由于程序的編譯與評(píng)判過程對(duì)服務(wù)器系統(tǒng)資源消耗較大,如果程序作業(yè)量較大,或者并發(fā)提交的量較大的話,服務(wù)器可能會(huì)因系統(tǒng)資源的過度消耗而運(yùn)行緩慢甚至死機(jī),導(dǎo)致學(xué)生需等待很長時(shí)間才可看到評(píng)判結(jié)果。通過前面介紹的守護(hù)進(jìn)程可以在一定程度上解決網(wǎng)頁等待的問題,在后臺(tái)未完成程序評(píng)判前先快速返回一個(gè)信息提示頁面,但本質(zhì)上并未提高程序評(píng)判的性能,要解決這一問題,可以從兩個(gè)方面考慮:其一可以通過提高評(píng)判服務(wù)器硬件性能來提高其處理能力,如采用小型機(jī)等專業(yè)服務(wù)器,另外一種推薦的方式是采用多臺(tái)評(píng)判服務(wù)器協(xié)同工作,如在多臺(tái)PC級(jí)服務(wù)器上安裝評(píng)判程序,采用集群技術(shù)實(shí)現(xiàn)負(fù)載均衡,從而實(shí)現(xiàn)Web服務(wù)器與多臺(tái)評(píng)判服務(wù)器的協(xié)同工作,本文在系統(tǒng)實(shí)踐中采用了Linux Virtual Server(簡(jiǎn)稱LVS)集群技術(shù)來構(gòu)建一個(gè)高可Hj、可伸縮的集群系統(tǒng)。
3與網(wǎng)絡(luò)教學(xué)系統(tǒng)的集成問題處理
編程類作業(yè)在線評(píng)判系統(tǒng)是對(duì)網(wǎng)絡(luò)教學(xué)系統(tǒng)的補(bǔ)充,由于多數(shù)高校已擁有網(wǎng)絡(luò)教學(xué)系統(tǒng),因此,將本系統(tǒng)集成到網(wǎng)絡(luò)教學(xué)系統(tǒng)中是最佳選擇,一些網(wǎng)絡(luò)教學(xué)系統(tǒng)提供二次開發(fā),這種情況下我們可以實(shí)現(xiàn)深度集成,對(duì)于不支持二次開發(fā)的網(wǎng)絡(luò)教學(xué)系統(tǒng),一般也可以從統(tǒng)一身份認(rèn)證的角度進(jìn)行集成,實(shí)現(xiàn)SSO(單點(diǎn)登錄)集成。
四結(jié)論
本文根據(jù)編程類作業(yè)的特點(diǎn)設(shè)計(jì)了自動(dòng)評(píng)判系統(tǒng),應(yīng)用了J2EE技術(shù),實(shí)踐了Linux、Mysql、libsandbox等一系列開源項(xiàng)目,基于Web方式實(shí)現(xiàn)了編程類作業(yè)的網(wǎng)上自動(dòng)評(píng)判,適合多種程序設(shè)計(jì)語言,有效的減輕了教師的工作量,提高了工作效率,是對(duì)目前網(wǎng)絡(luò)教學(xué)系統(tǒng)的很好補(bǔ)充。但本文所討論的程序類作業(yè)僅限于有標(biāo)準(zhǔn)的輸入輸出數(shù)據(jù)的基礎(chǔ)程序設(shè)計(jì)題,如一些算法類程序題等,對(duì)于其它類型程序題的自動(dòng)評(píng)判有待進(jìn)一步的研究。
參考文獻(xiàn)
[1]李文新,郭煒.北京大學(xué)程序在線評(píng)測(cè)系統(tǒng)及其應(yīng)用[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2005,(S2):172
[2]葉云.PC集群技術(shù)的研究及在作業(yè)評(píng)判系統(tǒng)中的應(yīng)用[D].浙江:浙江工業(yè)大學(xué),2007.
[3]李晨陽,焦海星.創(chuàng)建高性能的J2EE應(yīng)用系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2005,(2):10.
[4]黃劍,鄧秀春.智能化在線評(píng)判系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù)(學(xué)術(shù)交流),2007,21:809.