王 成,龐希愚
(山東交通學院 信息科學與電氣工程學院,山東 濟南 250357)
計算機專業(yè)程序設計類課程是指C語言程序設計、Java語言程序設計、C#程序設計等培養(yǎng)學生編程能力的課程,這些課程有其獨有的特點,既需要考查學生的基礎知識、算法設計,又需要更多地考查學生利用語言解決實際問題的能力,為了更好的考查學生設計算法和編寫程序的能力,國內外各大高校正在逐步使用在線考試系統代替?zhèn)鹘y的筆試方式。
計算機專業(yè)程序設計類課程的考試題目一般分為選擇題、填空題和程序設計題。對于選擇題、填空題,現有的在線考試系統已經實現了準確率很高的自動評閱;對于程序設計題,現有的在線考試系統還無法實現準確率較高的評閱,因為考生的邏輯思路不同,編寫出來的程序也各不相同,從而導致了程序設計題目的自動評閱難度很大?,F有的在線考試系統一般采用結果評分方法,也就是依據運行出的結果來給出相應的分數,在這種評分機制下,一個小小的錯誤就會導致一個基本上正確的題目一分未得,也可能出現解題思路錯誤而結果恰好正確卻得滿分的情況,考生成績呈現兩極化,考試得分不能真正體現考生的能力;也有一些在線考試系統對程序設計類題目實現過程評分,但是這類考試系統對于題目的設計、標準答案的輸入有著嚴格的要求,使得老師花費大量的時間精力去設計滿足這類考試系統的題目[1]。
目前,國內外對于主觀題目的自動評閱展開了深入的研究,但是關于計算機專業(yè)課程程序設計類題目自動評閱方面的專項研究不多,相關文獻較少,雖然程序設計類題目屬于主觀題的范疇,但是程序設計類題目與作文、簡答題等主觀題目是有區(qū)別的,適用于作文、簡答題的語義分析等有關方法并不適合程序設計類題目,程序設計類題目有其自身的特征屬性[2-3]。
程序設計類題目可以分為以下幾類。
第一類:題目有一個或多個確定的運行結果。例如C語言程序設計課程考試題目:請編寫程序實現1~100的和。
第二類:由輸入數據導致的題目運行結果不確定。例如Java程序設計題目:請定義一個圓類,類中包含圓心x坐標、y坐標和半徑等屬性,有計算圓面積和周長的方法;或請從鍵盤上讀入2個數,求2個數的和。
第三類:題目運行結果的順序不確定。例如線程類程序設計題目,由于線程運行順序的不確定性,每次程序的運行結果都有變化。例如Java程序設計課程考試題目:請創(chuàng)建并啟動兩個線程,一個線程輸出1~100的所有偶數,一個線程輸出1~100的所有奇數。
對于上述3類題目,可以在題目特征和模擬人工閱卷的基礎上,采用一套程序設計類題目的在線評閱方案,在該方案中將基于多級關鍵詞組合的過程評分引入到評分機制中。在過程評分中,將關鍵詞進行分級,一級關鍵詞組合是指本題目考查的知識點,將知識點轉化為關鍵詞,將關鍵詞按照程序代碼中的正確順序列出,對于同一順序可能出現的多個關鍵詞都將其列在同一序列,一級關鍵詞組合是程序代碼中最重要的關鍵詞;二級關鍵詞組合的重要性僅次于一級關鍵詞組合,把這種關鍵詞按照程序代碼中出現的正確順序列出,對于同一順序可能出現的多個關鍵詞都將其列在同一序列;三級關鍵組合的重要性次于一二級關鍵詞組合,以此類推,N級關鍵詞組合是指將程序代碼中重要性次于前N-1級、大于N+1級的關鍵詞按照程序代碼中出現的正確順序列出,對于同一順序可能出現的多個關鍵詞都將其列同一序列。關鍵詞劃分成多少級別,由教師可根據題目的性質、考查的知識點等因素靈活進行制定。
第一類題目,由于其運行結果確定,運行結果對于評閱是很重要的依據。對于這種程序設計題目,首先根據結果對其進行評閱,這一步稱為結果評分;然后進行基于多級關鍵詞組合的過程評分,這一步稱為過程評分,在過程評分中將考生答案根據情況按照順序逐級與關鍵詞組合進行匹配,每級關鍵詞組合匹配結束時,將已成功匹配的關鍵詞從考生答案中刪除,為進行下一級的關鍵詞組合匹配做準備。
在結果評分時,首先判斷考生的程序是否能正常運行,如果不能運行,則進入基于多級關鍵詞組合的過程評分;如果考生的程序能正常運行,結果評分有正確或者錯誤兩種情況,如果結果正確,則在基于多級關鍵詞組合的過程評分中,只進行基于一級關鍵詞組合的過程評閱。
如果考生的運行結果不正確,在第二步的過程評分中,則采用基于多級關鍵詞組合的過程評閱,首先將考生的程序代碼與一級關鍵詞組合進行匹配,如果成功匹配的關鍵詞數目大于臨界值則繼續(xù)與二級關鍵詞組合進行匹配,如果與二級關鍵詞組合成功匹配的數目大于臨界值則繼續(xù)與下一級關鍵詞組合進行匹配,直至與N級關鍵詞組合匹配完畢。一旦出現與某一級關鍵詞組合成功匹配的數目小于臨界值則終止基于關鍵詞組合的過程評分,進行最終評分。具體的流程如圖1所示。
例如C語言程序設計課程考試題目:請編寫程序實現1~100的和。由于題目比較簡單,這道題目只設2級關鍵詞組合,一級關鍵詞組合為{for}或{do,while}或{while,do},二級關鍵詞組合為{main,int,(+ =),printf}。如果結果正確,在第二步過程評分中,只進行基于一級關鍵詞組合的過程評閱,如果學生的程序不能正常運行或者結果不正確,則在第二步的過程評分中,采用基于多級關鍵詞組合的過程評閱。
最后進行最終評分,考生最終分數的計算公式為
在公式(1)中,Fscore表示這道程序設計題目的最終分數;Ascore表示結果評分的分數;Pscore表示過程評分的分數;β表示結果分數在最終分數中的比重,0≤β≤1,教師可根據題目的性質、考查的知識點等因素設置β的值;Sanswers表示本題正確結果所包含的答案數目;Ranswers表示本題考生成功匹配的答案數;Skeywords表示過程評分中所依據的關鍵詞的總數目,Rkeywords表示過程評分中考生成功匹配的關鍵詞數目。
這類題目的運行結果是由輸入數據來決定的,對于這類題目,可以首先采用基于輸入輸出組合的評分,根據題目特征列出多組輸入輸出組合,輸入輸出組合的數量是由教師根據題目的性質、以往學生的答題情況以及教師的經驗確定的。
圖1 第一類題目的評分流程圖
在基于輸入輸出組合的評分過程中,運行學生程序,將輸入數據輸入到程序中, 得到輸出數據,再與該題目的輸入輸出組合進行匹配,如果全部成功匹配,則在下一步基于多級關鍵詞組合的過程評分中,僅進行基于一級關鍵詞組合評分,否則進行基于多級關鍵詞組合評分。
在基于多級關鍵詞組合的過程評分中,將考生的程序代碼首先與一級關鍵詞組合進行匹配,如果成功匹配的關鍵詞數目大于臨界值則繼續(xù)與二級關鍵詞組合進行匹配,如果與二級關鍵詞組合成功匹配的數目大于臨界值則繼續(xù)與下一級關鍵詞組合進行匹配,直至與N級關鍵詞組合匹配完畢。
在過程評分中,一旦出現與某一級關鍵詞組合成功匹配的數目小于臨界值,則終止基于關鍵詞組合的過程評分,進行最終評分。具體的流程如圖2所示。
最終評分時,考生最終分數的計算公式為
圖2 第二類題目的評分流程圖
在公式(2)中,Fscore表示最終分數;IOscore表示基于輸入輸出組合評分的分數;Pscore表示基于多級關鍵詞組合的過程評分的分數;β表示基于輸入輸出組合評分的分數在最終分數中的比重,0≤β≤1,教師可根據題目的性質、考查的知識點等因素設置β的值;IOanswers表示本題輸入輸出組合的數目;Rioanswers表示本題考生成功匹配的輸入輸出組合數目;Skeywords表示基于多級關鍵詞組合的過程評分中所依據的關鍵詞的總數目,Rkeywords表示本題考生成功匹配的關鍵詞數目。
這類題目運行結果順序是不確定的,但是經研究發(fā)現,其題目運行結果的范圍往往是確定的。例如題目:請創(chuàng)建并啟動兩個線程,一個線程輸出1~100的所有偶數,一個線程輸出1~100的所有奇數。由于兩個線程執(zhí)行的順序是隨機的,導致這道題目的答案不確定,但是1~100之間的范圍是確定的。
對于這類題目,可以首先采用基于多級關鍵詞組合的過程評分方法,在過程評分中,將考生的程序代碼首先與一級關鍵詞組合進行匹配,如果成功匹配的關鍵詞數目大于臨界值則繼續(xù)與二級關鍵詞組合進行匹配,如果與二級關鍵詞組合成功匹配的關鍵詞數目大于臨界值則繼續(xù)與下一級關鍵詞組合進行匹配,直至與N級關鍵詞組合匹配完畢。
在過程評分中一旦出現與某一級關鍵詞組合成功匹配的關鍵詞數目小于臨界值,則終止基于關鍵詞組合的過程評分,跳過基于結果范圍的評分,直接進行最終評分;如果在整個過程評分中,沒有出現考生成功匹配的關鍵詞數目小于臨界值的情況,也就說與題目的N級關鍵詞組合全部進行了匹配,則下一步進行基于結果范圍的評分,再進行最終評分。具體的流程如圖3所示。
最終評分時,考生最終分數的計算公式為
在公式(3)中,Fscore表示題目的最終分數;Rscore表示基于結果范圍的評分;Kanswers表示考生程序運行結果的集合;Ranswers表示本題正確結果范圍的集合,如果考生所有的運行結果都能在正確結果范圍中找到,則基于結果范圍的評分為100,如果考生的程序不能正常運行或者有1個或多個運行結果在正確結果范圍中找不到,則基于結果范圍的評分為0;Pscore表示過程評分的分數;Skeywords表示過程評分中所依據的關鍵詞的總數目;Rkeywords表示本題考生成功匹配的關鍵詞數目;β表示基于結果范圍的評分在最終分數中的比重,0≤β≤1,教師可根據題目的性質、考查的知識點等因素設置β的值。
圖3 第三類題目的評分流程圖
例如題目:請創(chuàng)建并啟動兩個線程,一個線程輸出1~100的所有偶數,一個線程輸出1~100的所有奇數。首先進行基于多級關鍵詞組合的過程評分,找出這道題目的多級關鍵詞組合,一級關鍵詞組合如下:
二級關鍵詞組合如下:
在過程評分中,將考生程序代碼逐級與本題目的二級關鍵詞組合進行匹配,一旦出現與某一級關鍵詞組合成功匹配的數目小于臨界值,則直接終止過程評分,跳過基于結果范圍的評分方法,直接進行最終評分;如果在評分過程中,沒有出現成功匹配的數目小于臨界值的情況,則進行基于結果范圍的評分,再計算最終分數。這道題目的結果范圍是1~100的整數,最終分數依據公式(3)計算。
計算機專業(yè)程序設計類課程的教學目的是培養(yǎng)學生的動手能力,讓學生學會通過編寫程序解決實際問題,對于這類課程,如何更加準確的考核學生的實際編程能力是十分重要的。
在在線評閱方法中,多級關鍵詞組合是需要教師根據自己的經驗進行制定的,這就需要花費教師一定的時間,但是隨著機器學習的快速發(fā)展,一些專家學者針對主觀題自動閱卷的難點,將機器學習中深度學習(Deep Learning)的理念應用到主觀題自動閱卷系統設計中,所以未來,隨著大數據庫的不斷完善以及深度學習的不斷發(fā)展,本文中的多級關鍵詞組合可以借助深度學習的方法自動生成[4-5]。