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