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