摘 要:在C程序設計語言考試中為了解決定位難、一題多解和對于主觀題沒有統一的評價標準的情況,對考試系統中客觀題和程序題的評分方法進行了研究。在比較結果的評分基礎上,引入了XML結構的答案庫,以及使用了黑盒測試方法與抽取骨架的方法,成功地解決了上述問題。在設計系統的過程中,十分注重軟件的實用性。該系統設計成功后,通過在小范圍內使用,初步實驗結果證明自動評分模塊運行穩定,評分標準能夠統一。關鍵詞:定位;黑盒測試; 骨架法; 日志
中圖分類號:TN911-33;G420 文獻標識碼:B
文章編號: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 引 言
目前,很多高校都開設了計算機語言程序設計課程,在考試中,使用人工進行閱卷既費時、費力且容易出錯。于是,針對計算機語言程序設計的自動評分系統就被應運而生。濟南大學計算機工程學院的喬善平等人在《基于智能移動Agent的C語言考試系統》中提出了從人工智能中可信度的角度引入執行可信度、程序最大相似性、代碼可信度、指數曲線衡量標準和輸出可信度等幾個新的概念,然后分析了實現的過程。并且將整個程序的設計分為幾個部分執行、代碼、輸出和其他因素。使之存在偏序和制約關系,以實現自動評分[1]。但是在實際的使用過程中,自動評分系統[2]也存在很多問題,不能客觀、真實地評價一個考生的真實答題情況。主要存在的問題主要如下:
C語言程序設計考試的題型主要分為改錯題、填空題、編程題等類型,在C語言的程序設計考試中,改錯題與填空題可以歸為客觀試題的范疇,而編程題可以歸為主觀題的范疇。
在C語言程序設計中,改錯題與填空題主要是在程序的某個位置出錯或者留出空白,讓考生在該位置做出解答,為了將對試題與答案進行比較,往往在該位置處進行標注,以往的自動評分系統中,為了對該位置進行定位,往往提示考生不能隨意改動試題,特別是不能添加空行等,這樣就嚴格的限制了考生,如果某個考生不小心在里面添加了一個回車換行,即使答案正確,也會得不到成績,主要原因是自動評分系統將不能找到該位置。而且,在填空題中一個空往往有很多不同類型的答案,如果考生寫出的答案與標準答案不相符,但是也能實現相同的功能,這樣,考生也不能得到相應的成績。比如,一個填空題應該填i++,其實,考生填寫i=i+1,++i。都應該是正確的,但是以往的評分系統往往不給分,這種一題多解的問題也不能客觀、真實地評價一個考生的成績。
程序編程題的評價更加困難,以往的評分系統往往強制考生使用某種算法去解答,這既違反了程序編程的初衷,也限制了考生的想象與發揮。即使考生采用了某種算法,也可能在算法的細節方面或可能與標準的答案不同,所以程序編程題不能采用簡單的比對的方法,文獻[3]采用了模糊的評價方法,但是這種方法會使一些抄襲的考生也能過關。
針對以上問題,本文采用了正則表達式[4]進行定位,使用XML結構的答案庫,并且使用黑盒測試方法[5]和抽取程序設計的骨架[6]等方法,成功的解決了上述問題。
1 系統設計思想
1.1 試題問題的定位
在C程序設計中,程序設計需要的源文件往往不止一個,所以首先是尋找問題所在的程序文件,這個程序文件的名稱被記錄在XML格式的答案庫中。如前所述,在C程序設計的改錯題與填空題中,往往在問題出現的地方添加標注,讓考生在添加標注的地方進行作答,為了有效的對問題所在位置進行定位,該系統利用了這些標注,采用正則表達式的匹配準確的定位到問題的所在位置,找到位置后,為了避免考生在問題位置添加空行等問題,接著在該位置的后面過濾掉空行,然后使用字符串前綴的方法準確的定位到問題所在的行,然后取出考生的答案與答案庫進行比對。
1.2 一題多解問題的解決
C程序設計的填空題中,一個問題的解答往往有很多種解答的方法,針對問題考慮所有可能出現的解答方法,將這些答案存放在答案庫中,根據答案庫中答案出現的次數采用循環與考生答案做比對,只要考生的答案符合其中之一的任何一個答案,終止循環,同時給學生成績。
1.3 程序編程題的評分
程序設計題的評分應該分為兩種情況:
(1) 考生編寫的程序通過的編譯、連接階段并且有結果輸出;
(2) 考生編寫的程序沒有通過編譯。
在第1種情況下,該系統借鑒了軟件工程中程序測試的方法,使用了黑盒測試法來評價考生的程序。在XML格式的答案庫中,針對該題給出一些測試數據,然后根據測試數據對比應該輸出的結果,根據考生輸出結果與標準的答案的異同給不同的分值。
第2種情況下,因為考生的程序沒有通過編譯,因此沒有輸出結果,但是可能考生已經寫了一部分程序,如果僅僅根據沒有輸出結果,直接給考生零分,顯然很不公平。于是,該系統采用抽取考生程序中骨架的方法來進行。比如一個排序程序應該有這樣的程序設計結構:
for(i=0;i for(j=i+1;j if(a>b) { … } 根據C語言的關鍵字[7],可以抽取骨架為for()for()if(){}或者for(){for()if(){}}等,從考生文件抽取的骨架與標準的骨架[6]相對比,根據異同給予一定的分數。 為了避免考生互相抄襲,該系統采用了兩種預防措施。第一種措施,不同考生在考試期間隨機抽取試題庫中不同的試題,但是還可能出現相近考生試題相同的情況,該系統從實際出發,采用“記錄解答過程”的方法,利用Windows內部功能[8],或考核軟件(VC++)提供的“宏”功能[9],跟蹤記錄考生操作的每一步驟,形成獨立日志文件,通過特殊方法“固化”在當前位置,或者直接傳送到服務器上,作為評分的必需內容。評分時,如搜索不到指定日志文件,就可認定為“抄襲”[10]。 2 系統設計 該系統中,XML格式的答案文件是整個系統的核心,在其中幾乎記錄了所有的跟自動評分有關的信息,下面是該系統使用的答案文件的一部分。 … … 第一種骨架 … 第n種骨架 … … 其中:QSet表示試題的套數;First表示第一道題試題考察點在name屬性所指的文件名中,本題的分值在score中記錄,試題的類型由type來指明。 圖1 系統設計的總體思路 3 結 語 該系統經過多次實際的使用,有效地避免了上述出現的問題,能夠準確定位問題的位置,并且對于一題多解的問題也運行良好。在程序編程問題中,能夠基本體現公平、客觀的評價一個學生的編程思想,特別是操作日志的使用有效的監督了學生的“抄襲”現象。對程序編程時,不能通過編譯但已經編寫了一部分程序的考生,可使用提取骨架的方法,基本能夠給考生一個公平的評價,改善了過去很多系統給學生打零分的情況。 參考文獻 [1]喬善平.基于智能移動Agent的C語言考試系統[J].計算機工程與科學,2004(4):29-31. [2]梁振球.填空題自動評分系統的研究與實現[J]. 計算機系統應用,2007(2):109-111. [3]嵇敏.自動評分系統的設計與實現[J].遼寧師范大學學報,2006(2):193-194. [4]趙興濤,王斌君,劉舒.正則表達式在文檔自動識別中的應用[J].中國人民公安大學學報,2005(4):33-35. [5]陳浩,劉海濤.遺傳算法在黑盒測試中的應用[J].電子技術應用,2000(9):4-6. [6]鐘旭,萬劍怡,萬紅艷.基于骨架的結構化網格編程模型[J].計算機工程,2010,36(2):266-268. [7]閡光太.C語言程序設計與數據結構實踐[M].北京:高等教育出版社,2005. [8]朱友芹.WindowsAPI 參考大全[M].北京:電子工業出版社,2000. [9]劉曉華.基于語義的主觀題自動批改算法的設計[J].軟件導刊,2006(13):27-31. [10]程華.計算機語言類課程主觀試題的自動評分方案設計 [J].電腦學習,2006(1):16-17.