摘 要:在C程序設(shè)計(jì)語言考試中為了解決定位難、一題多解和對于主觀題沒有統(tǒng)一的評(píng)價(jià)標(biāo)準(zhǔn)的情況,對考試系統(tǒng)中客觀題和程序題的評(píng)分方法進(jìn)行了研究。在比較結(jié)果的評(píng)分基礎(chǔ)上,引入了XML結(jié)構(gòu)的答案庫,以及使用了黑盒測試方法與抽取骨架的方法,成功地解決了上述問題。在設(shè)計(jì)系統(tǒng)的過程中,十分注重軟件的實(shí)用性。該系統(tǒng)設(shè)計(jì)成功后,通過在小范圍內(nèi)使用,初步實(shí)驗(yàn)結(jié)果證明自動(dòng)評(píng)分模塊運(yùn)行穩(wěn)定,評(píng)分標(biāo)準(zhǔn)能夠統(tǒng)一。關(guān)鍵詞:定位;黑盒測試; 骨架法; 日志
中圖分類號(hào):TN911-33;G420 文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2010)16-0130-03
Auto-scoring System of C Language Exam Based on XML Structure
LI Fu-xing,NIU Yong-jie
(Computing Center, Yan’an University, Yan’an 716000,China)
Abstract: Along with the improvement of social information degree, computer training is developed rapidly, traditional hand-scoring in examination uses computer auto-scoring. In the C programming language examination, the objective questions are difficult to position and one problem with many solutions, the subjective questions have non-uniform evaluation standard. The scoring method of objective questions and program problems in test system is studied. The answer database of XML structure, the use of black-box test method and the skeleton extraction method are used on the basis of scoring of results comparison to solve the problems. The test results prove that the auto-scoring module runs stable, thescoring criteria can be unified.
Keywords: position; black box testing; skeleton method; log
0 引 言
目前,很多高校都開設(shè)了計(jì)算機(jī)語言程序設(shè)計(jì)課程,在考試中,使用人工進(jìn)行閱卷既費(fèi)時(shí)、費(fèi)力且容易出錯(cuò)。于是,針對計(jì)算機(jī)語言程序設(shè)計(jì)的自動(dòng)評(píng)分系統(tǒng)就被應(yīng)運(yùn)而生。濟(jì)南大學(xué)計(jì)算機(jī)工程學(xué)院的喬善平等人在《基于智能移動(dòng)Agent的C語言考試系統(tǒng)》中提出了從人工智能中可信度的角度引入執(zhí)行可信度、程序最大相似性、代碼可信度、指數(shù)曲線衡量標(biāo)準(zhǔn)和輸出可信度等幾個(gè)新的概念,然后分析了實(shí)現(xiàn)的過程。并且將整個(gè)程序的設(shè)計(jì)分為幾個(gè)部分執(zhí)行、代碼、輸出和其他因素。使之存在偏序和制約關(guān)系,以實(shí)現(xiàn)自動(dòng)評(píng)分[1]。但是在實(shí)際的使用過程中,自動(dòng)評(píng)分系統(tǒng)[2]也存在很多問題,不能客觀、真實(shí)地評(píng)價(jià)一個(gè)考生的真實(shí)答題情況。主要存在的問題主要如下:
C語言程序設(shè)計(jì)考試的題型主要分為改錯(cuò)題、填空題、編程題等類型,在C語言的程序設(shè)計(jì)考試中,改錯(cuò)題與填空題可以歸為客觀試題的范疇,而編程題可以歸為主觀題的范疇。
在C語言程序設(shè)計(jì)中,改錯(cuò)題與填空題主要是在程序的某個(gè)位置出錯(cuò)或者留出空白,讓考生在該位置做出解答,為了將對試題與答案進(jìn)行比較,往往在該位置處進(jìn)行標(biāo)注,以往的自動(dòng)評(píng)分系統(tǒng)中,為了對該位置進(jìn)行定位,往往提示考生不能隨意改動(dòng)試題,特別是不能添加空行等,這樣就嚴(yán)格的限制了考生,如果某個(gè)考生不小心在里面添加了一個(gè)回車換行,即使答案正確,也會(huì)得不到成績,主要原因是自動(dòng)評(píng)分系統(tǒng)將不能找到該位置。而且,在填空題中一個(gè)空往往有很多不同類型的答案,如果考生寫出的答案與標(biāo)準(zhǔn)答案不相符,但是也能實(shí)現(xiàn)相同的功能,這樣,考生也不能得到相應(yīng)的成績。比如,一個(gè)填空題應(yīng)該填i++,其實(shí),考生填寫i=i+1,++i。都應(yīng)該是正確的,但是以往的評(píng)分系統(tǒng)往往不給分,這種一題多解的問題也不能客觀、真實(shí)地評(píng)價(jià)一個(gè)考生的成績。
程序編程題的評(píng)價(jià)更加困難,以往的評(píng)分系統(tǒng)往往強(qiáng)制考生使用某種算法去解答,這既違反了程序編程的初衷,也限制了考生的想象與發(fā)揮。即使考生采用了某種算法,也可能在算法的細(xì)節(jié)方面或可能與標(biāo)準(zhǔn)的答案不同,所以程序編程題不能采用簡單的比對的方法,文獻(xiàn)[3]采用了模糊的評(píng)價(jià)方法,但是這種方法會(huì)使一些抄襲的考生也能過關(guān)。
針對以上問題,本文采用了正則表達(dá)式[4]進(jìn)行定位,使用XML結(jié)構(gòu)的答案庫,并且使用黑盒測試方法[5]和抽取程序設(shè)計(jì)的骨架[6]等方法,成功的解決了上述問題。
1 系統(tǒng)設(shè)計(jì)思想
1.1 試題問題的定位
在C程序設(shè)計(jì)中,程序設(shè)計(jì)需要的源文件往往不止一個(gè),所以首先是尋找問題所在的程序文件,這個(gè)程序文件的名稱被記錄在XML格式的答案庫中。如前所述,在C程序設(shè)計(jì)的改錯(cuò)題與填空題中,往往在問題出現(xiàn)的地方添加標(biāo)注,讓考生在添加標(biāo)注的地方進(jìn)行作答,為了有效的對問題所在位置進(jìn)行定位,該系統(tǒng)利用了這些標(biāo)注,采用正則表達(dá)式的匹配準(zhǔn)確的定位到問題的所在位置,找到位置后,為了避免考生在問題位置添加空行等問題,接著在該位置的后面過濾掉空行,然后使用字符串前綴的方法準(zhǔn)確的定位到問題所在的行,然后取出考生的答案與答案庫進(jìn)行比對。
1.2 一題多解問題的解決
C程序設(shè)計(jì)的填空題中,一個(gè)問題的解答往往有很多種解答的方法,針對問題考慮所有可能出現(xiàn)的解答方法,將這些答案存放在答案庫中,根據(jù)答案庫中答案出現(xiàn)的次數(shù)采用循環(huán)與考生答案做比對,只要考生的答案符合其中之一的任何一個(gè)答案,終止循環(huán),同時(shí)給學(xué)生成績。
1.3 程序編程題的評(píng)分
程序設(shè)計(jì)題的評(píng)分應(yīng)該分為兩種情況:
(1) 考生編寫的程序通過的編譯、連接階段并且有結(jié)果輸出;
(2) 考生編寫的程序沒有通過編譯。
在第1種情況下,該系統(tǒng)借鑒了軟件工程中程序測試的方法,使用了黑盒測試法來評(píng)價(jià)考生的程序。在XML格式的答案庫中,針對該題給出一些測試數(shù)據(jù),然后根據(jù)測試數(shù)據(jù)對比應(yīng)該輸出的結(jié)果,根據(jù)考生輸出結(jié)果與標(biāo)準(zhǔn)的答案的異同給不同的分值。
第2種情況下,因?yàn)榭忌某绦驔]有通過編譯,因此沒有輸出結(jié)果,但是可能考生已經(jīng)寫了一部分程序,如果僅僅根據(jù)沒有輸出結(jié)果,直接給考生零分,顯然很不公平。于是,該系統(tǒng)采用抽取考生程序中骨架的方法來進(jìn)行。比如一個(gè)排序程序應(yīng)該有這樣的程序設(shè)計(jì)結(jié)構(gòu):
for(i=0;i for(j=i+1;j if(a>b) { … } 根據(jù)C語言的關(guān)鍵字[7],可以抽取骨架為for()for()if(){}或者for(){for()if(){}}等,從考生文件抽取的骨架與標(biāo)準(zhǔn)的骨架[6]相對比,根據(jù)異同給予一定的分?jǐn)?shù)。 為了避免考生互相抄襲,該系統(tǒng)采用了兩種預(yù)防措施。第一種措施,不同考生在考試期間隨機(jī)抽取試題庫中不同的試題,但是還可能出現(xiàn)相近考生試題相同的情況,該系統(tǒng)從實(shí)際出發(fā),采用“記錄解答過程”的方法,利用Windows內(nèi)部功能[8],或考核軟件(VC++)提供的“宏”功能[9],跟蹤記錄考生操作的每一步驟,形成獨(dú)立日志文件,通過特殊方法“固化”在當(dāng)前位置,或者直接傳送到服務(wù)器上,作為評(píng)分的必需內(nèi)容。評(píng)分時(shí),如搜索不到指定日志文件,就可認(rèn)定為“抄襲”[10]。 2 系統(tǒng)設(shè)計(jì) 該系統(tǒng)中,XML格式的答案文件是整個(gè)系統(tǒng)的核心,在其中幾乎記錄了所有的跟自動(dòng)評(píng)分有關(guān)的信息,下面是該系統(tǒng)使用的答案文件的一部分。 … … 第一種骨架 … 第n種骨架 … … 其中:QSet表示試題的套數(shù);First表示第一道題試題考察點(diǎn)在name屬性所指的文件名中,本題的分值在score中記錄,試題的類型由type來指明。 圖1 系統(tǒng)設(shè)計(jì)的總體思路 3 結(jié) 語 該系統(tǒng)經(jīng)過多次實(shí)際的使用,有效地避免了上述出現(xiàn)的問題,能夠準(zhǔn)確定位問題的位置,并且對于一題多解的問題也運(yùn)行良好。在程序編程問題中,能夠基本體現(xiàn)公平、客觀的評(píng)價(jià)一個(gè)學(xué)生的編程思想,特別是操作日志的使用有效的監(jiān)督了學(xué)生的“抄襲”現(xiàn)象。對程序編程時(shí),不能通過編譯但已經(jīng)編寫了一部分程序的考生,可使用提取骨架的方法,基本能夠給考生一個(gè)公平的評(píng)價(jià),改善了過去很多系統(tǒng)給學(xué)生打零分的情況。 參考文獻(xiàn) [1]喬善平.基于智能移動(dòng)Agent的C語言考試系統(tǒng)[J].計(jì)算機(jī)工程與科學(xué),2004(4):29-31. [2]梁振球.填空題自動(dòng)評(píng)分系統(tǒng)的研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用,2007(2):109-111. [3]嵇敏.自動(dòng)評(píng)分系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].遼寧師范大學(xué)學(xué)報(bào),2006(2):193-194. [4]趙興濤,王斌君,劉舒.正則表達(dá)式在文檔自動(dòng)識(shí)別中的應(yīng)用[J].中國人民公安大學(xué)學(xué)報(bào),2005(4):33-35. [5]陳浩,劉海濤.遺傳算法在黑盒測試中的應(yīng)用[J].電子技術(shù)應(yīng)用,2000(9):4-6. [6]鐘旭,萬劍怡,萬紅艷.基于骨架的結(jié)構(gòu)化網(wǎng)格編程模型[J].計(jì)算機(jī)工程,2010,36(2):266-268. [7]閡光太.C語言程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)實(shí)踐[M].北京:高等教育出版社,2005. [8]朱友芹.WindowsAPI 參考大全[M].北京:電子工業(yè)出版社,2000. [9]劉曉華.基于語義的主觀題自動(dòng)批改算法的設(shè)計(jì)[J].軟件導(dǎo)刊,2006(13):27-31. [10]程華.計(jì)算機(jī)語言類課程主觀試題的自動(dòng)評(píng)分方案設(shè)計(jì) [J].電腦學(xué)習(xí),2006(1):16-17.