曾臺(tái)盛 (泉州師范學(xué)院數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院;福建省大數(shù)據(jù)管理新技術(shù)與知識(shí)工程重點(diǎn)實(shí)驗(yàn)室 智能計(jì)算與信息處理福建省高等學(xué)校重點(diǎn)實(shí)驗(yàn)室,福建泉州 362000)
基于B/S模式的程序設(shè)計(jì)在線評(píng)測(cè)系統(tǒng)設(shè)計(jì)
曾臺(tái)盛 (泉州師范學(xué)院數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院;福建省大數(shù)據(jù)管理新技術(shù)與知識(shí)工程重點(diǎn)實(shí)驗(yàn)室 智能計(jì)算與信息處理福建省高等學(xué)校重點(diǎn)實(shí)驗(yàn)室,福建泉州 362000)
針對(duì)人工評(píng)測(cè)程序設(shè)計(jì)類課程作業(yè)效率低下的問題,設(shè)計(jì)了一種基于B/S模式的程序設(shè)計(jì)在線評(píng)測(cè)系統(tǒng)。在具體分析系統(tǒng)功能需求的基礎(chǔ)上,介紹了系統(tǒng)的總體架構(gòu)及功能模塊的作用,對(duì)數(shù)據(jù)庫及主要關(guān)鍵技術(shù)(包括后臺(tái)評(píng)測(cè)、相似代碼檢測(cè)和成績(jī)生成)進(jìn)行了設(shè)計(jì)。實(shí)際應(yīng)用表明,該系統(tǒng)響應(yīng)速度快,判定結(jié)果準(zhǔn)確無誤,既減輕了教師的工作負(fù)擔(dān),又為學(xué)生進(jìn)行程序設(shè)計(jì)提供了良好平臺(tái),得到了師生的一致好評(píng)。
程序設(shè)計(jì);在線評(píng)測(cè)系統(tǒng);B/S模式
隨著計(jì)算機(jī)網(wǎng)絡(luò)的快速發(fā)展,傳統(tǒng)的程序設(shè)計(jì)類課程教學(xué)方式已經(jīng)無法滿足學(xué)生的學(xué)習(xí)需要,網(wǎng)絡(luò)教學(xué)輔助系統(tǒng)在各高校程序設(shè)計(jì)類課程教學(xué)中得到了廣泛應(yīng)用。現(xiàn)有的網(wǎng)絡(luò)輔助教學(xué)系統(tǒng)對(duì)于程序設(shè)計(jì)類作業(yè)沒有能力進(jìn)行處理,需要教師對(duì)程序設(shè)計(jì)類作業(yè)逐一批閱、評(píng)判,工作量大且效率低下。為此,筆者設(shè)計(jì)了基于B/S結(jié)構(gòu)的程序設(shè)計(jì)在線評(píng)測(cè)系統(tǒng)??泉州師范學(xué)院校自選科研項(xiàng)目(2011KJ07)。。用戶可以在線提交自己的程序代碼,系統(tǒng)自動(dòng)編譯運(yùn)行并給出判定結(jié)果,這對(duì)減輕教師的工作負(fù)擔(dān),幫助學(xué)生通過網(wǎng)絡(luò)實(shí)現(xiàn)個(gè)性化學(xué)習(xí),在線自動(dòng)測(cè)試,提高了學(xué)生運(yùn)用計(jì)算機(jī)分析、解決實(shí)際問題的能力。
設(shè)計(jì)該系統(tǒng)主要目的是為了實(shí)現(xiàn)代碼自動(dòng)在線評(píng)測(cè),由具備權(quán)限的教師事先設(shè)計(jì)并通過網(wǎng)站錄入題目,在題目中詳細(xì)描述了具有一定背景內(nèi)容的問題,同時(shí)給出題目運(yùn)行的時(shí)間、內(nèi)存限制以及輸入、輸出格式、輸入輸出測(cè)試數(shù)據(jù)。學(xué)生通過瀏覽器訪問網(wǎng)站閱讀題目,學(xué)生在客戶端先調(diào)試自己的解題程序,然后提交代碼,由系統(tǒng)自動(dòng)評(píng)判學(xué)生提交的代碼。具體評(píng)判過程如下[1-3]:①系統(tǒng)自動(dòng)編譯學(xué)生提交的代碼,如果程序有語法錯(cuò)誤,編譯無法通過則報(bào)錯(cuò)并退出。②系統(tǒng)執(zhí)行生成的可執(zhí)行文件,如果運(yùn)行時(shí)錯(cuò)誤,則報(bào)錯(cuò)并退出。③將測(cè)試輸入文件數(shù)據(jù)作為可執(zhí)行文件的輸入,得到輸出文件。處理過程中如果出現(xiàn)時(shí)間超限或內(nèi)存超限,則報(bào)錯(cuò)并退出。④將輸出文件與對(duì)應(yīng)的答案文件進(jìn)行比對(duì),完全一致則輸出“接受”,有多余或者缺少空格或換行則輸出格式“錯(cuò)”,否則輸出答案“錯(cuò)”。學(xué)生提交代碼后看到評(píng)判結(jié)果,在程序代碼沒有被系統(tǒng)接受前,學(xué)生可以根據(jù)系統(tǒng)給出的各類錯(cuò)誤提示,修改代碼并重新提交,直到被判定為接受為止。
為了能夠進(jìn)行上機(jī)測(cè)試和比賽并自動(dòng)獲得測(cè)試成績(jī),系統(tǒng)應(yīng)具備競(jìng)賽功能和成績(jī)生成功能。此外,為了提高學(xué)生的學(xué)習(xí)積極性,系統(tǒng)還應(yīng)具有排行榜、討論區(qū)、用戶成績(jī)對(duì)比、競(jìng)賽圖片瀏覽、比賽新聞公告等功能。
該系統(tǒng)總體架構(gòu)采用Browser/Server(B/S)模式實(shí)現(xiàn),其中Browser端提供用戶注冊(cè)、瀏覽題目、提交代碼、參與競(jìng)賽、狀態(tài)查詢、競(jìng)賽排名查詢、排行榜、用戶對(duì)比、討論版、相片瀏覽等基本功能。系統(tǒng)總體架構(gòu)圖如圖1所示,其中服務(wù)器由判題服務(wù)器Judged、Web服務(wù)器和MySQL服務(wù)器3部分組成[4]。
3.1 題目管理模塊
該模塊主要完成教師對(duì)題目進(jìn)行添加、修改、刪除等功能。添加一個(gè)題目時(shí),需同時(shí)設(shè)置題目的基本信息和評(píng)判參數(shù),基本信息包括題目名稱、題目類型(程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)、算法)、題目描述、輸入輸出說明,評(píng)判參數(shù)主要用于系統(tǒng)自動(dòng)評(píng)判時(shí)使用,包括最大內(nèi)存限制、最長(zhǎng)運(yùn)行時(shí)間限制、測(cè)試數(shù)據(jù)與測(cè)試結(jié)果示例。
3.2 評(píng)判模塊
該模塊具有如下功能:編譯用戶程序;重定向輸入輸出流;用測(cè)試數(shù)據(jù)作為輸入運(yùn)行用戶程序;獲取輸出結(jié)果、對(duì)比答案并返回判定結(jié)果。
圖1 系統(tǒng)總體架構(gòu)圖
3.3 競(jìng)賽管理模塊
該模塊具有如下功能:競(jìng)賽題目組織;考試起始時(shí)間設(shè)置;考試參與人員設(shè)置;成績(jī)?cè)u(píng)判方式制定;每道題目分值、權(quán)重確定以及最低通過標(biāo)準(zhǔn)制定。
3.4 成績(jī)生成模塊
該模塊具有如下功能:根據(jù)競(jìng)賽管理模塊制定成績(jī)?cè)u(píng)判方式;根據(jù)學(xué)生解題情況自動(dòng)生成成績(jī)報(bào)表并支持導(dǎo)出Excel表。
3.5 用戶管理模塊
該模塊具有如下功能:用戶注冊(cè);用戶權(quán)限設(shè)置;用戶密碼維護(hù);批量生成考試、競(jìng)賽用戶等。
3.6 新聞公告模塊
該模塊主要負(fù)責(zé)考試信息通知、過往比賽成績(jī)報(bào)道等內(nèi)容。
3.7 圖片瀏覽模塊
該模塊的功能是動(dòng)態(tài)顯示程序設(shè)計(jì)集訓(xùn)隊(duì)員參加各類競(jìng)賽的比賽及獲獎(jiǎng)?wù)掌?以激勵(lì)學(xué)生加強(qiáng)程序設(shè)計(jì)訓(xùn)練。
表1 用戶信息表
系統(tǒng)使用的數(shù)據(jù)庫是MySQL數(shù)據(jù)庫,其提供眾多的PHP和C/C++的程序接口,不論是Web端PHP頁面還是判題內(nèi)核Judged的各個(gè)進(jìn)程都可以實(shí)現(xiàn)輕松高效地對(duì)數(shù)據(jù)庫的訪問。系統(tǒng)主要數(shù)據(jù)庫表主要包括用戶信息表(見表1)、權(quán)限表、在線狀態(tài)表、競(jìng)賽題目表(見表2)、競(jìng)賽提交信息表(見表3)等。
5.1 后臺(tái)評(píng)測(cè)
在評(píng)測(cè)過程中使用的C/C++語言編譯器為GCC/G++,當(dāng)用戶提交代碼后,系統(tǒng)調(diào)用GCC編譯器進(jìn)行自動(dòng)編譯,使用的編譯選項(xiàng)為:g++testprog.cpp-o testprog-ansi-fno-asm-Wall-l——static Judged 2>error.txt。其中,testprog.cpp為用戶提交上來的程序,testprog為編譯生成的可執(zhí)行程序,采用錯(cuò)誤重定向“2>error.txt”,當(dāng)編譯失敗時(shí),用戶可以通過Web瀏覽器看到錯(cuò)誤信息。
表2 競(jìng)賽題目表
表3 競(jìng)賽提交信息表
Judged為系統(tǒng)服務(wù)進(jìn)程,主要功能為輪詢Web端或者數(shù)據(jù)庫中的任務(wù)隊(duì)列,隨時(shí)提取判題隊(duì)列,Judged的工作流程圖如圖2所示。評(píng)判算法由以下進(jìn)程組成[5]:進(jìn)程1運(yùn)行編譯好的程序,輸入流指向測(cè)試用例;進(jìn)程2通過管道接收進(jìn)程1輸出,對(duì)每個(gè)接收字符和答案文件相應(yīng)字符進(jìn)行比較,如發(fā)現(xiàn)不一樣則終止2個(gè)進(jìn)程,如果接收到的所有字符和答案文件均一致,則給出Accepted結(jié)論。在評(píng)判過程中如果用戶程序發(fā)生運(yùn)行錯(cuò)、答案錯(cuò)、時(shí)間超限、內(nèi)存超限等情況,通過發(fā)送sigkill信號(hào)強(qiáng)行終止該進(jìn)程。
5.2 相似代碼檢測(cè)
在程序設(shè)計(jì)類課程的在線作業(yè)或考試過程中,個(gè)別學(xué)生可能通過各種途徑和手段提交相似代碼以欺騙系統(tǒng)進(jìn)行判斷。為解決上述問題,采用如下方法:比較代碼運(yùn)行的時(shí)間(Ti)和占用的內(nèi)存空間(Mi),超過預(yù)定閾值后對(duì)疑似的2段代碼進(jìn)行基于最長(zhǎng)公共子序列方法的檢測(cè);將2段代碼中的所有回車、空白字符刪除,得到2個(gè)長(zhǎng)字符串然后每次找出2個(gè)串的最長(zhǎng)公共子序列并將其刪除,直到找到的最長(zhǎng)公共子序列小于某個(gè)閾值[3],計(jì)算被刪除的字符數(shù)目占原始數(shù)目的比例(Li),根據(jù)Ti、Mi、Li的值及對(duì)應(yīng)的權(quán)重計(jì)算出2段代碼的相似度。
圖2 Judged進(jìn)程工作流程圖
5.3 成績(jī)生成
成績(jī)生成主要是根據(jù)競(jìng)賽管理制定的成績(jī)給定方式來進(jìn)行計(jì)算,有以下方法可供選擇。第1種是傳統(tǒng)計(jì)算方法,即每道題目給定分值,按照學(xué)生答題情況,對(duì)每道題目給予分?jǐn)?shù),最后總計(jì)所有題目的得分情況作為學(xué)生的最終成績(jī)。第2種方法是參照ACM/ICPC程序設(shè)計(jì)競(jìng)賽排名的做法,先指定考試合格的最低答題數(shù)目,以此數(shù)目作為合格的分?jǐn)?shù)線,剩余每道題目用總分扣除合格分求平均值。此外,還應(yīng)根據(jù)提交成功前失敗次數(shù)進(jìn)行相應(yīng)罰分,對(duì)于格式錯(cuò)誤的代碼給予相應(yīng)分值,但應(yīng)確保排行榜考前的學(xué)生成績(jī)不低于排在其之后的學(xué)生成績(jī),使得最終成績(jī)跟比賽實(shí)時(shí)排行榜名次一致。
目前,該系統(tǒng)承擔(dān)了泉州師范學(xué)院4個(gè)年度的程序設(shè)計(jì)競(jìng)賽及多門課程的期中、期末考試測(cè)評(píng)工作,已經(jīng)順利完成了50余萬次的提交任務(wù)處理,系統(tǒng)響應(yīng)速度快,判定結(jié)果準(zhǔn)確無誤。在200多人同時(shí)在線提交時(shí),服務(wù)器吞吐量正常,未見任何異常。由于使用該系統(tǒng)可以減輕教師的工作負(fù)擔(dān),又為學(xué)生進(jìn)行程序設(shè)計(jì)提供了良好平臺(tái),因而具有很好的應(yīng)用前景。
[1]陳湘驥,徐東風(fēng),楊秋妹.在線評(píng)判在C語言課程設(shè)計(jì)教學(xué)中的應(yīng)用[J].計(jì)算機(jī)教育,2010,7(3):97-100.
[2]李文新,郭煒.北京大學(xué)程序在線評(píng)測(cè)系統(tǒng)及其應(yīng)用[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2005,22(S2):170-177.
[3]張浩斌.基于開放式云平臺(tái)的開源在線評(píng)測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2012,39(S3):339-343,348.
[4]蔣社想,戴書文.基于J2EE的ACM競(jìng)賽在線評(píng)判系統(tǒng)的設(shè)計(jì)[J].安徽理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,28(4):59-63.
[5]喬少杰,楊燕,葛永明,等.基于B/S架構(gòu)的多用戶在線程序評(píng)判系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2011,20(S1):58-61.
[編輯] 李啟棟
TP311.52
A
1673-1409(2014)34-0040-04
2014-08-15
曾臺(tái)盛(1975-),男,碩士,講師,現(xiàn)主要從事算法設(shè)計(jì)、無線傳感器網(wǎng)絡(luò)及圖像檢索方面的教學(xué)與研究工作。