胡霖 李溍溍 王慶 韓曉君 馬遠 郭曉龍
【摘要】本系統(tǒng)主要研究C語言編程題目中“編譯運行結(jié)果對比”、“編譯錯誤原因恢復(fù)與評閱”、“得分點分割正則動態(tài)測試”三種手段,將研究內(nèi)容運用到自動閱卷系統(tǒng)中,實現(xiàn)對編程題目的自動評分,并實現(xiàn)基于J2EE技術(shù)的具有在線考試、自動評分等功能的C語言編程題目自動閱卷考試系統(tǒng),提高閱卷的準(zhǔn)確度的同時能夠節(jié)省大量的人力物力財力。
【關(guān)鍵詞】C語言;編程題;自動評分
隨著計算機技術(shù)的發(fā)展以及互聯(lián)網(wǎng)的普及,辦公自動化已無處不在。作為一門基礎(chǔ)課程,C語言考試應(yīng)用系統(tǒng)也給批閱試卷的工作人員帶來了很大的工作量,自上世紀(jì)六十年代起,國內(nèi)外就陸續(xù)出現(xiàn)了許多關(guān)于語言類課程考試的軟件系統(tǒng),雖然很多已具有基本的隨機答卷、上機考試及自動評閱等功能,但只針對客觀題,因自然語言的刻畫、人工智能、模式識別等核心技術(shù)發(fā)展緩慢,制約了編程題目閱卷系統(tǒng)研究發(fā)展。所以,本系統(tǒng)針對C語言編程題目進行整體規(guī)劃,致力于做出更精確的C語言編程題自動閱卷的方法,填補自動閱卷軟件開發(fā)空白,減少人工操作的資源浪費。
1.系統(tǒng)運行環(huán)境
智能C語言考試系統(tǒng)、自動評分系統(tǒng)的運行環(huán)境是根據(jù)我校現(xiàn)有的教學(xué)機房的硬件環(huán)境(每個機房有70臺學(xué)生機和一臺教師機)規(guī)劃的,教師端和學(xué)生端都采用window 7操作系統(tǒng),每個機房都采用校園公共網(wǎng)絡(luò)提供的局域網(wǎng),運用Myeclipse開發(fā)環(huán)境、MySQL數(shù)據(jù)庫建立一套具有在線考試、自動評分等功能的C語言編程題目自動閱卷系統(tǒng),并輔以AJAX技術(shù),確定了用FreeMarker表現(xiàn)層技術(shù)增強用戶與系統(tǒng)間的交互,加快系統(tǒng)運行效率,同時,盡可能細化評分點,增加準(zhǔn)確性。
2.系統(tǒng)運行模式的選擇
系統(tǒng)采用B/S三層架構(gòu)模式,系統(tǒng)的用戶可通過Internet網(wǎng)絡(luò),客戶端不需要手動安裝軟件,只要有瀏覽器就可以對系統(tǒng)進行訪問和一般操作,本次對閱卷系統(tǒng)主要分析了的C語言編程題目評分功能,充分考慮到系統(tǒng)對靈活性和準(zhǔn)確性的要求,并保證安全性的前提下,本系統(tǒng)采用B/S結(jié)構(gòu)以達到輕客戶端需求。
3.系統(tǒng)研究內(nèi)容
通過研究C語言程序結(jié)構(gòu),從編譯原理角度設(shè)計評價模型,通過內(nèi)部運行編譯器對比動態(tài)運行結(jié)果,并且本課題創(chuàng)造性提出利用關(guān)鍵字對比、控制結(jié)構(gòu)判斷和正則表達式匹配三種靜態(tài)測試技術(shù)作為結(jié)果比對方案的補充,既保證了程序判斷的正確性,又確保了相對公正性。
編譯結(jié)果對比要實現(xiàn)程序內(nèi)部對C語言編譯器的動態(tài)調(diào)用技術(shù),通過比對測試結(jié)果和標(biāo)準(zhǔn)答案進行評分,對于不能編譯部分,研究關(guān)鍵字庫建立、控制結(jié)構(gòu)規(guī)范化和正則表達式建立的具體方案。
其中重點研究C語言編程題目評分標(biāo)準(zhǔn)的兩個方面:一是如何檢驗運行結(jié)果的正確性,二是如何評價程序代碼包含的分點。
為突出本系統(tǒng)對主觀題的評分機制,在試題主觀題程序可運行以及不可運行的情況下分別給出了相應(yīng)的評分策略,以此來一步步細化評分機制。
4.評分核心模塊設(shè)計
詳細設(shè)計自動閱卷系統(tǒng)中的關(guān)鍵技術(shù)——程序題評分。系統(tǒng)首先采用動態(tài)測試技術(shù),編譯運行待評價程序,和標(biāo)準(zhǔn)答案進行對比給出分?jǐn)?shù);需要數(shù)值型輸入?yún)?shù)的程序,通過均勻分布隨機數(shù)給出隨機輸入;需要字符型輸入?yún)?shù)的程序,首先在數(shù)據(jù)庫中保存預(yù)選文字段,然后隨機選取其中的一部分給出隨機輸入。對于編譯運行報錯的程序代碼,課題會采取錯誤恢復(fù)技術(shù),通過編譯信息給出的錯誤位置嘗試以標(biāo)準(zhǔn)答案修復(fù)代碼,從而給出扣分點。最后對于不能編譯運行的代碼片段,系統(tǒng)提出關(guān)鍵字對比、控制結(jié)構(gòu)標(biāo)準(zhǔn)化和提取、正則表達式規(guī)則匹配相結(jié)合的靜態(tài)測試方法,加入權(quán)重處理,分析得分點給出更全面客觀的評分結(jié)果。
通過對軟件模式的對比和分層架構(gòu)模型的研究,系統(tǒng)擬采用B/S結(jié)構(gòu),方便用戶在線答題和管理操作;在具體實現(xiàn)技術(shù)方面,擬采用J2EE技術(shù)和SSH開源框架——利用Java語言提供的公開接口開發(fā)調(diào)用C語言編譯器模塊和正則表達式匹配模塊,利用MySQL數(shù)據(jù)庫完成題庫和答案庫的建立和開發(fā)工作,利用Ajax技術(shù)提高系統(tǒng)的整體響應(yīng)速率,利用FreeMarker表現(xiàn)層技術(shù)增強用戶與系統(tǒng)之間的交互。
建立計算機矯正機制和完善的評價方案,并對試題多次進行人工閱卷與機器閱卷的對比測試。
5.數(shù)據(jù)庫設(shè)計
因需要評測本系統(tǒng)自動閱卷功能和人工閱卷的準(zhǔn)確度,給出測評結(jié)果,并對仍存在的問題和不足提出進一步改進方案;特別是對系統(tǒng)不能正常評分的特殊題目,建立特例題庫,以便在今后的工作進行研究并從中提出新的解決方案。
考生提交試卷首先由c語言編譯器自動編譯后生成可執(zhí)行文件并運行輸出結(jié)果,進行評閱步驟校驗結(jié)果時,通過試題編號(id)調(diào)用試題表數(shù)據(jù),對比答案進行準(zhǔn)確性校對,調(diào)用糾錯參考庫數(shù)據(jù),比對出錯原因并根據(jù)錯因扣除相應(yīng)分?jǐn)?shù),通過模糊匹配替代出錯關(guān)鍵字,迭代匹配錯因至無錯,若迭代五次還未改正視為崩潰性錯誤,不可彌補,判定本段分?jǐn)?shù)為零崩潰性錯誤,不可彌補,判定本段分?jǐn)?shù)為零,通過題目編號獲取相應(yīng)評分關(guān)鍵點庫,通過正則表達式匹配得分點,通過得分點數(shù)量給出相應(yīng)分?jǐn)?shù),完成試卷評閱。
當(dāng)程序不能正常編譯運行時,系統(tǒng)判定進入系統(tǒng)糾錯,系統(tǒng)自動運行修復(fù)性算法,代碼中個別關(guān)鍵字錯誤,為此我們把c語言中所有的關(guān)鍵字整理出來,建立關(guān)鍵字庫,對錯誤的關(guān)鍵字進行模糊匹配,通過字符的順序、相同字符的數(shù)量、鍵盤鍵位的keycode盡可能的匹配出相似度最高的的關(guān)鍵字替換錯誤的關(guān)鍵字。
糾錯主要是語句拼寫錯誤,我們分了下面三種情況:
1)測試用例由測試輸入數(shù)據(jù)和與之對應(yīng)的預(yù)期輸出結(jié)果組成,人們常用白盒法和黑盒法設(shè)計測試用例,其中白盒法主要是為了檢查是否有數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)庫訪問錯誤等,對比通過單元測試的模塊或組件、編程規(guī)范、集成測試來檢查測試的準(zhǔn)確性。
通過正誤判斷匹配正誤判斷表進行結(jié)果判定,判定結(jié)果是否符合題目,若是則給分,否則進行結(jié)果范圍判斷及結(jié)果屬性判斷,比對結(jié)果是否適用本題范圍,并進行分?jǐn)?shù)評估。
2)本表主要有三個主要信息id、name、keyword。分別用來存儲錯誤的id、錯誤的名稱、題目中的關(guān)鍵字。Id的數(shù)據(jù)類型為int(整型),name的數(shù)據(jù)類型為varchar(字符型),keyword的數(shù)據(jù)類型為varchar(字符型),id需要主鍵非空自增,name與keyword非空。通過建立本數(shù)據(jù)庫表可以實現(xiàn)對錯誤信息的收集歸類,同時可以實現(xiàn)判斷系統(tǒng)中出現(xiàn)的錯誤的功能。
定位捕捉錯誤點,拋出錯誤原因并與數(shù)據(jù)庫進行比對,并根據(jù)錯因給予相應(yīng)分?jǐn)?shù),運用模糊匹配尋找替代關(guān)鍵詞,進行替代繼續(xù)檢查錯誤,若連續(xù)替代五次后仍然不能進行下一步驟視為程序崩潰行錯誤,不可彌補,判定本段分?jǐn)?shù)為零。
3)正則表達式,又稱正規(guī)表示法、常規(guī)表示法(英語:RegularExpression,在代碼中常簡寫為regex、regexp或RE),正則表達式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串,在本字段里,正則表達式通常被用來檢索、替換那些符合模式的程序段,進行分步得分。
本數(shù)據(jù)庫包含關(guān)鍵字類庫,通過正則表達式匹配關(guān)鍵詞多寡,大概率的確定了答題者的思路范圍及答題思路的正確與否,給以步驟分,極大的提高了批卷的人性化,拉近了機器閱卷與人工閱卷的閱卷水平,更有說明行的體現(xiàn)了機器閱卷更好的使用性。
C語言考試系統(tǒng)已普遍在各高校使用,對于客觀題方面,有了相對完善公平的系統(tǒng),但是在自動評分方面,還有很多不足之處,有待改善,本系統(tǒng)就是針對這一空白區(qū)域,設(shè)計公平而相對更準(zhǔn)確的算法,主要對C語言考試系統(tǒng)中的編程題部分進行得分點分割,對考生的程序一步步細致分析,做到該得分的地方給考生相應(yīng)的分?jǐn)?shù),這樣避免了某一點小錯誤導(dǎo)致的大幅度扣分的不公平性,同時,將系統(tǒng)應(yīng)用到學(xué)生的日常學(xué)習(xí)中后,能夠更好地檢驗教師的教學(xué)成果,查找教學(xué)過程中需要注意的地方,對于學(xué)生,也能夠更好地發(fā)現(xiàn)自己的錯誤,及時改正,這樣,在學(xué)習(xí)的過程中,在保證公平的前提下,培養(yǎng)學(xué)生注意細節(jié)的習(xí)慣,最重要的是,應(yīng)用到高校的二級C語言考試后,能夠更好的給考生更公平更合理的考試成績,同時也使得閱卷更加節(jié)約、方便、快捷,這也順應(yīng)了如今社會計算機行業(yè)的飛速發(fā)展,提高辦公自動化的程度及效率。
參考文獻
[1]K.A.Redish,W.F.Smyth.Pragram style analysis:a natural by-product of prograrn compilation[J].Cornnnunications of the ACM,1986.(3):126-133.
[2]Yasuhiro Ajiro,KazunoriUeda.Kima:An Automated Error Correction System for Concurrent Logic Progrrams.Automated Software Engineering 2002.9(2):67-94.
[3]王甜甜,基于語義相似度的編程題自動評分方法的研究,哈爾濱工業(yè)大學(xué)碩士論文,2001;1-52.
[4]李永浩,居于程序理解的編程題自動評分系統(tǒng)憤憤研究與應(yīng)用,哈爾濱工業(yè)大學(xué)碩士論文,2001:1-60
[5]王華東.劉國柱.基于局域網(wǎng)下C語言考試系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機與信息技術(shù),2006.
[6]吳艷玲.基于WEB的C語言編程題自動閱卷系統(tǒng)的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2011.