文/黎青霞 楊乘
對于當前紙質(zhì)化的C語言試卷或是無紙化的C語言試卷,其包含的題型可以分為以下幾個大類:單選題、判斷題、填空題、程序改錯題和便編程題。選擇題、判斷題、填空題、程序改錯題這幾類題型客觀性較強,無論是人工閱卷還是機器閱卷都幾乎不存在爭議。編程題主觀性較強,在人工閱卷的過程中難免會存在爭議,對于機器閱卷而言,這更是一個難題。編程題具有很強的靈活性,有的評分系統(tǒng)為降低系統(tǒng)實現(xiàn)的難度,構建系統(tǒng)時幾乎沒有考慮人工閱卷的思維方式,在評判編程題時只考慮結(jié)果分值而忽略過程分值。學生編寫的代碼運行結(jié)果與標準答案一致,則獲得滿分,運行結(jié)果與標準答案不同,則判為零分;有的評分系統(tǒng)雖然考慮了人工閱卷的思維方式,但并沒有很好地與之相契合,過程分值的判斷依據(jù)不是很合理。針對當前編程題評分系統(tǒng)的現(xiàn)狀,希望能研究出一個比較合理的C語言編程題智能評分系統(tǒng),一方面減輕教師的工作量,將以往用于批改試卷的大量時間節(jié)約下來;另一方面,對于C語言這種實踐操作性高的學科,在線考試系統(tǒng)更能貼合其對操作性的要求。許多學校因評分系統(tǒng)的問題還是會選擇紙質(zhì)化的考試形式,一個合理的評分系統(tǒng)可以提升在線考試系統(tǒng)的價值,以更好的達到計算機評判系統(tǒng)的公平性、情理性,會促進學校對其的使用。
當前比較普遍的編程題智能評分系統(tǒng)采用的評分方法主要分為三類:
(1)軟件質(zhì)量度量方法;
(2)動態(tài)測試方法;
(3)靜態(tài)分析方法。
“軟件質(zhì)量度量方法是立足于軟件復雜性的程度和程序的特征來評價學生程序的質(zhì)量,從而給學生編寫的程序評分。它的劣勢在于分析源代碼結(jié)構時理解性較差,不能理解程序的意思,單靠該技術給學生編寫的程序評分很難得到合乎情理的結(jié)果?!?/p>
動態(tài)測試方法指通過運行需要測試的程序,檢查運行的結(jié)果與預期結(jié)果的差異,并分析運行效率等性能。這種方法由三部分組成:構造測試實例、執(zhí)行程序、分析程序的輸出結(jié)果。但學生編寫的程序有時要么會出現(xiàn)語法錯誤,導致程序無法通過編譯;要么會出現(xiàn)語義錯誤而導致死循環(huán),得不到程序執(zhí)行的結(jié)果,最后的評分為零,這樣的評分標準不符合教師人工閱卷的標準。該評分方法還很有可能忽略學生設計程序題的思路,無法還原學生掌握知識的真實程度,不利于教師對學生的學習做客觀、合理的評價。
靜態(tài)分析方法是指不運行需要測試的程序本身,即無需編譯學生編寫的代碼,僅通過分析或檢查學生編寫的程序的語法、結(jié)構、過程、接口等以及與標準答案進行對比給出學生成績。該方法會運用軟件進行代碼的質(zhì)量度量,其原理是根據(jù)標準代碼中指定的一些特征,如:關鍵字、骨架代碼、標識符長度等,來與學生編寫的代碼進行比對,給與分值。但由于學生編寫的代碼可能會存在結(jié)構的問題或是不規(guī)范現(xiàn)象,采用這種方法搭建的評分系統(tǒng)在應用時會帶來實用性的問題。同時,如果學生編寫的代碼有語法錯誤靜態(tài)評分方法也無法進行評判。
國外對編程題評分系統(tǒng)的研究起步較早,“Douce 等人將其發(fā)展過程分為三個階段:早期的自動評分系統(tǒng)、基于工具的評分系統(tǒng)和面向 Web 的評分系統(tǒng)?!眹庠诘谝浑A段中具有代表性的評分系統(tǒng)評判Algol語言的程序自動評分系統(tǒng)。該系統(tǒng)通過對程序題進行動態(tài)測試和數(shù)值分析等方法,實現(xiàn)了如下的功能:提供測試數(shù)據(jù)、記錄運行時間和維護一個“成績冊”。第二代評分系統(tǒng)結(jié)合了已經(jīng)存在的工具箱和由操作系統(tǒng)和編程環(huán)境提供的工具,更重要的是以命令行或圖形用戶界面的形式展現(xiàn)出來,操作者應用起來比較方便。第三代評分系統(tǒng)最大的特點是面向 Web,同時結(jié)合了富有經(jīng)驗的測試技術和模塊。
國內(nèi)對編程題評分系統(tǒng)的研究起步較晚,2000年后一些權威的高校陸續(xù)自行開發(fā)建立編程語言的在線測評平臺。蘇小紅教授利用靜態(tài)分析的方法進行代碼測試,在考慮到代碼風格與軟件質(zhì)量度量的基礎上,通過提取抽象語法樹的方式進行程序的形式轉(zhuǎn)換?!袄钣篮蒲芯砍隽嘶诔绦蚶斫獾淖詣釉u分策略,該策略利用程序理解的常規(guī)過程以及基本策略作為依據(jù)制定編程題機器評分的方案?!盵4]馬培軍等人對于程序理解的評分模型做了進一步的研究,采用系統(tǒng)依賴圖作為程序之間的中間表示形式。在進一步優(yōu)化后將學生編寫的代碼與標準代碼的依賴圖進行匹配,以此為依據(jù)進行編程題的評分。
現(xiàn)存的國內(nèi)外編程題的評分系統(tǒng)在一定程度上實現(xiàn)了機器評閱編程題的目標,但大多數(shù)評分系統(tǒng)的評分思維向人工閱卷的思維靠攏的情況并不樂觀。如果能結(jié)合動態(tài)測試與靜態(tài)分析的方法研究出針對中職學校C語言課程的編程題智能評分系統(tǒng),并使其評分思維向人工閱卷的思維靠攏,這樣的系統(tǒng)在中職學校的利用價值是可觀的。
B/S結(jié)構即瀏覽器和服務器結(jié)構??蛻魴C上只要安裝一個瀏覽器,服務器安裝上數(shù)據(jù)庫,瀏覽器就可以通過Web Server同數(shù)據(jù)庫進行數(shù)據(jù)交互。
JSP(Java Server Pages)服務器端頁面技術。JSP通常返回給客戶端的是HTML文本,客戶端只要有瀏覽器就能進行瀏覽。
Java是一門面向?qū)ο缶幊陶Z言,其程序員以優(yōu)雅的思維方式進行復雜的編程。
Eclipse是一種可擴展的開放源代碼IDE。Eclipse允許在同一IDE中集成來自不同供應商的工具,并實現(xiàn)了工具之間的互操作性。
MySQL是一個可用于各種流行操作系統(tǒng)平臺的關系數(shù)據(jù)庫系統(tǒng),它具有客戶機/服務器體系結(jié)構的分布式數(shù)據(jù)庫管理系統(tǒng)。
隨著C語言在線考試系統(tǒng)的不斷優(yōu)化,對于編程題評分的合理性與準確性,機器評閱思維的人性化已成為人們追求的目標。本研究針對的群體主要是中職學生,與大學生相比他們學習的C語言知識相對簡單些。他們更多的是希望通過C語言的學習提升自我的邏輯思維、對程序的理解能力以及一定程度上的編碼能力。在這樣的情況下實現(xiàn)一個根據(jù)算法過程評分的系統(tǒng),給與學生合理的分數(shù)就顯得極為有必要。本文的主要研究內(nèi)容如下:
(1)C語言編程題智能評分系統(tǒng)的評分原理。該系統(tǒng)的評分原理包括對學生編寫的程序運行結(jié)果的分析、代碼中關鍵字的分析、骨架代碼的分析以及將學生編寫的代碼與標準代碼進行相似度的匹配。
(2)C語言編程題智能評分系統(tǒng)使用的技術。該系統(tǒng)使用的技術包括B/S架構、JSP技術、Java編程語言、Eclipse開發(fā)平臺、MySQL數(shù)據(jù)庫。
(3)C語言編程題智能評分系統(tǒng)的組成部分。該系統(tǒng)組成部分包括數(shù)據(jù)庫關系模式,該模式包括學生登陸信息表、教師登陸信息表、管理員登陸信息表、試題庫信息表、學生成績信息表、學生考試分析信息表等;登錄功能模塊,該模塊劃分為管理員端、教師端、學生端;主界面、在線考試管理模塊、編程題評分管理模塊、修改用戶信息模塊等。
圖1:C語言編程題智能評分系統(tǒng)
本文立足于當下C語言在線考試系統(tǒng)的現(xiàn)狀,找出了一些使編程題在線評閱更合理應考慮的問題。結(jié)合現(xiàn)狀要考慮的問題有:編程題靈活性很強,編寫的代碼形式并不唯一,如何解決代碼的多樣性問題;編寫的程序運行結(jié)果不正確怎么評分;編寫的程序不能通過編譯怎么評分。在這些問題的基礎上結(jié)合了C語言代碼骨架與編譯報錯的情況設計了一套編程題評分算法流程:
①先編譯學生編寫的代碼,判斷是否編譯成功;②編譯成功則將學生程序運行的結(jié)果與標準答案進行對比;③判斷對比結(jié)果是否一致;④結(jié)果一致,進行⑥;⑤結(jié)果不一致,先扣除一定分數(shù)再進行⑥;⑥將學生編寫的代碼與標準代碼模板進行匹配,如果匹配程度達到最低下限,則給與匹配滿分,否則扣除一定分數(shù),再進行第⑦步;⑧編譯不成功,根據(jù)報錯的個數(shù)扣除一定分數(shù),再進行⑥;⑦統(tǒng)計編程題的最終分值。流程圖如圖1所示。
本文研究的C語言編程題智能評分系統(tǒng)立足于中職學校的C語言課程特點,與其他評分系統(tǒng)相比針對性較強。開發(fā)過程中所要考慮的問題基本來源于中職學校的C語言課程,在實際使用的過程中也無需將課程與系統(tǒng)生硬的結(jié)合,而是根據(jù)課程需要利用系統(tǒng),減輕教師批改試卷的工作量,系統(tǒng)的分析學生知識的掌握情況,以更好的促進學科的教學效率。該系統(tǒng)面向的是中職學校的C語言課程,所以實現(xiàn)該系統(tǒng)需耗費的人力、物力相對較少,開發(fā)周期占用的時間也相對較少而且還方便進行測試。當前雖已有多種多樣的在線考試系統(tǒng),但并沒有一種專門適用于中職學校的C語言考試系統(tǒng)。某些中職學校即使購買了在線考試系統(tǒng),在使用的過程中可能會出現(xiàn)課程與考試系統(tǒng)的生硬結(jié)合,在后期的使用當中維護系統(tǒng)將會耗費大量時間,也會花費大量的資金和人力。如果一開始的開發(fā)就立足于中職學校的C語言課程,所消耗的時間、資金以及后期的使用和維護都相對較少。
本文研究的系統(tǒng)旨在結(jié)合動態(tài)測試與靜態(tài)分析的方法,使系統(tǒng)能借助相應的編譯工具完成對程序的編譯與運行。以及對程序進行分析,分析其中的詞法、語法并與標準程序模板進行相似度的匹配。這種動靜結(jié)合的方法有助于改善以往只考慮結(jié)果的編程題評分系統(tǒng),使C語言編程題智能評分系統(tǒng)評判編程題的“思維”更接近于人工評判編程題的思維。在閱卷的過程中實現(xiàn)評分的多步走、合理走,讓該系統(tǒng)在執(zhí)行過程中像人腦一樣工作。該編程題評分系統(tǒng)雖然在一定的程度上降低了計算機自動評閱編程題的不合理性,減輕了教師的部分工作量,但與人腦相比還存在較大的機械性。如果能在教師模塊中添加一個計算每道題正確率的試題反饋結(jié)果模塊,教師就可以借助每道題的正確率來獲知班上學生對某知識的掌握程度并對后續(xù)的教學做相應的改進,再提升該學科的教學效率。