標(biāo)準(zhǔn)化機(jī)試系統(tǒng)的開發(fā)與拓展 標(biāo)準(zhǔn)化考試的弊大于利
發(fā)布時(shí)間:2020-02-16 來源: 幽默笑話 點(diǎn)擊:
摘要:本文結(jié)合自己多年開發(fā)標(biāo)準(zhǔn)化機(jī)試系統(tǒng)的經(jīng)驗(yàn),詳細(xì)闡述常用機(jī)試系統(tǒng)的原理、缺陷,提出改進(jìn)方法及新的解決方案,并在已有基礎(chǔ)上,設(shè)計(jì)出更加科學(xué)實(shí)用的系統(tǒng),發(fā)展并拓寬現(xiàn)有考試系統(tǒng)的應(yīng)用范圍。最后給出無相鄰重復(fù)的隨機(jī)抽題算法,以確保隨機(jī)抽題的公正性。
關(guān)鍵詞:機(jī)試系統(tǒng);連通圖著色;隨機(jī)抽題
中圖分類號:TP27 文獻(xiàn)標(biāo)識碼:A
在我國高等教育體制中,計(jì)算機(jī)教育一直被擺在重點(diǎn)位置。幾乎所有高等院校的所有專業(yè)都至少開設(shè)有一門計(jì)算機(jī)課程!坝(jì)算機(jī)文化基礎(chǔ)”(以下簡稱“計(jì)文”)或相關(guān)課程是必不可少的。工科專業(yè)一般開設(shè)有C/C++、Java程序設(shè)計(jì),文科會(huì)學(xué)習(xí)VB、VFP等。
有教學(xué)過程就必然要有科學(xué)規(guī)范的評價(jià)機(jī)制。計(jì)算機(jī)課程的教學(xué)評價(jià)一般通過筆試和機(jī)試兩種方式進(jìn)行。作為非常注重培養(yǎng)實(shí)踐能力的學(xué)科,機(jī)試加筆試顯然比單純筆試更加適合計(jì)算機(jī)課程教學(xué)。筆試可以勝任像C/C++、Java代碼編程和計(jì)算機(jī)原理概念的考查。但像計(jì)算機(jī)操作水平或VC、VB可視化編程等,就只能通過機(jī)試才可得到真正科學(xué)的評判。
本文所探討的機(jī)試,專指編程或計(jì)算機(jī)操作類機(jī)考,不涉及用機(jī)考代替筆試的無紙化考試。以下將針對機(jī)試系統(tǒng)開發(fā)與技術(shù)創(chuàng)新等問題進(jìn)行討論。
1 常用標(biāo)準(zhǔn)化機(jī)試系統(tǒng)的原理、缺陷及改進(jìn)
標(biāo)準(zhǔn)化機(jī)試系統(tǒng)常采用以下兩種原理實(shí)現(xiàn):
1.1 截屏法
截屏法的原理較為簡單?忌鎸Φ牟皇钦嬲能浖缑妫庆o態(tài)的截圖界面。在每個(gè)靜態(tài)截圖的相應(yīng)位置設(shè)置熱點(diǎn)區(qū),比如活動(dòng)的菜單、按鈕、工具欄等。每一屏的輸出結(jié)果是唯一的。如果考生根據(jù)考題要求,點(diǎn)擊了當(dāng)前正確的熱點(diǎn)區(qū),則認(rèn)為操作正確,屏幕將立刻顯示下一截屏。否則,系統(tǒng)停在此屏,等待考生正確點(diǎn)擊。如果考生放棄此題或中途交卷,系統(tǒng)會(huì)根據(jù)考生最終到達(dá)了該題的哪一步來給出相應(yīng)得分。
例如,在Visual Basic窗體中設(shè)計(jì)一個(gè)“退出”按鈕,功能是點(diǎn)擊按鈕后窗體退出:
上圖中每一個(gè)方塊代表一個(gè)屏。截屏法用屏幕的變化來模擬真實(shí)的軟件環(huán)境,但同時(shí)產(chǎn)生了路徑唯一性問題?忌挥悬c(diǎn)擊了正確的區(qū)域,或者輸入正確的命令后才可進(jìn)入下一屏。這與真實(shí)的軟件環(huán)境差距甚遠(yuǎn)?忌诓涣私饪碱}意圖的情況下,會(huì)感覺無所適從。加上軟件中能夠?qū)崿F(xiàn)同一功能的操作有多種,而每個(gè)人的操作習(xí)慣又不可能完全一樣,這都影響了截屏式系統(tǒng)的通用性。比如上述圖例中第三步“查看代碼”,還可用菜單操作和右鍵操作實(shí)現(xiàn),但考生只有點(diǎn)擊了“查看代碼”按鈕后才能進(jìn)行下一步。
要想提高題目的通用性,必須通過在實(shí)現(xiàn)同一功能的所有區(qū)域設(shè)置熱點(diǎn)來改進(jìn)。但考題設(shè)置的工作量也隨之加大,同時(shí)很難顧及到點(diǎn)擊或輸入錯(cuò)誤時(shí)的軟件變化。
截屏法的技術(shù)含量不高,對系統(tǒng)的要求較低,并且沒有軟件環(huán)境的限制。其最大優(yōu)勢在于能架設(shè)在B/S(瀏覽器/服務(wù)器)模式上。因?yàn)闉g覽器中很難包含真正的軟件環(huán)境,而截屏法規(guī)避了這一難點(diǎn)。
1.2 文件比較法
文件比較法以真實(shí)的軟件作考試環(huán)境,并且要事先做好標(biāo)準(zhǔn)答案文件,因而一般架構(gòu)在C/S(客戶端/服務(wù)器)模式上?忌ㄟ^操作相應(yīng)軟件生成或修改考題所要求的文件?荚囃戤吅蟆O到y(tǒng)將考生做的文件與標(biāo)答文件詳細(xì)對照。如果對照一致,則給出相應(yīng)得分。
對于C/C++、Java一類代碼編程的考試,只需要對考生源程序和標(biāo)答源程序做逐行掃描,根據(jù)對比源程序字符來判分。同一功能可能還有多種寫法,都應(yīng)設(shè)置在標(biāo)準(zhǔn)答案中。如果是純粹的函數(shù)編寫,應(yīng)設(shè)置輸出結(jié)果文件。通過比較輸出的結(jié)論評分。
這種忽略操作過程、分析結(jié)論評分的方法比截屏法更加客觀公正,能夠檢驗(yàn)考生真實(shí)的計(jì)算機(jī)操作和編程水平?荚囅到y(tǒng)完善之后,考題就十分容易設(shè)置和變化。
國內(nèi)高校中開設(shè)VFP數(shù)據(jù)庫課程的專業(yè)較多。下面以VFP機(jī)試系統(tǒng)為例,說明文件比較法機(jī)試系統(tǒng)的開發(fā)與關(guān)鍵技術(shù)的實(shí)現(xiàn):
系統(tǒng)用VFP9編寫,因?yàn)樵赩FP環(huán)境下啟動(dòng)考試環(huán)境和處理VFP體系的文件都具有一定優(yōu)勢。并且VFP9也能夠勝任C/S模式軟件的高效開發(fā)。服務(wù)器端用SQL Server數(shù)據(jù)庫儲(chǔ)存考試信息、考試時(shí)間、考題和標(biāo)準(zhǔn)答案?荚嚈C(jī)(客戶端)必須獲得了這些信息后才可參與考試。因此,服務(wù)器端能夠完全掌控考試的類型和具體要求。
1.2.1 抽題
傳統(tǒng)的機(jī)試系統(tǒng)往往簡略甚至忽略這一環(huán)節(jié),只是保證每一臺(tái)考試機(jī)上的考題是隨機(jī)抽取。但如果相鄰的考試機(jī)抽到一樣的考題,那么考試的公正性就有可能會(huì)打折扣。所以必須使任意相鄰的考試機(jī)抽到不同的考題。
可以利用同一局域網(wǎng)各聯(lián)網(wǎng)機(jī)器IP地址的不同,在每場考試之前由服務(wù)器端生成一個(gè)抽題方案表,儲(chǔ)存在數(shù)據(jù)庫中。開考時(shí),每臺(tái)考試機(jī)都訪問這個(gè)抽題表,獲得各自題號,再下載相應(yīng)數(shù)據(jù)進(jìn)行考試。
無相鄰重復(fù)的隨機(jī)抽題算法在本文的第四節(jié)給出。
1.2.2 評分
傳統(tǒng)的評分方案僅僅只是評判某些題目要求的文件是否生成,或者比較字符類文件和表文件。這對于C/C++、Java等代碼類的考試是適用的。
但如果為可視化編程,如VC、PB、VFP等,或計(jì)文中的Word、Excel辦公軟件,涉及文件繁多,有窗口、菜單、程序、文檔、數(shù)據(jù)。這些文件的類型、格式都不相同。這一類的評分只有采用掃描二進(jìn)制文件內(nèi)容的方法才可進(jìn)行。所以必須先分析出這些文件的內(nèi)部構(gòu)造,才能設(shè)置相應(yīng)的評分程序。
比如要在數(shù)據(jù)庫中兩表間建一個(gè)永久關(guān)聯(lián)。分析DBC文件后發(fā)現(xiàn),永久關(guān)聯(lián)會(huì)在DBC文件中增加256個(gè)字節(jié)的內(nèi)容,格式為:
Relation Relation 1……Field(字段名)…Field(字段名)…
對應(yīng)16進(jìn)制為:
52 65 6C 61 74 69 6F 6E 20 20 52 65 6C 61 74 69 6F 6E 20 31……46 69 65 6C 64…46 69 65 6C 64…
通過讀取DBC文件的二進(jìn)制內(nèi)容,并查找此16進(jìn)制代碼,就可以判斷考生是否回答正確。只要得到一次這樣的代碼,就能相應(yīng)作出其它類似題目的判分程序。利用這一方法,幾乎可以設(shè)置出任何一種軟件科目的判分機(jī)制。
需要注意的是,如果將評分都交給服務(wù)器端完成,會(huì)給服務(wù)器造成很大的工作量。應(yīng)該為每一套題設(shè)置對應(yīng)的評分程序,并隨考題數(shù)據(jù)一起下載到考試機(jī)上。最后由考試機(jī)完成判分,將判分結(jié)果傳回服務(wù)器。為了不讓考生修改或刪除評分程序,或者在非考試環(huán)境里答題,考試系統(tǒng)應(yīng)在運(yùn)行時(shí)屏蔽對考試系統(tǒng)以外的所有操作,以保安全。
考試的最終目的是為了指導(dǎo)和改進(jìn)教學(xué)。因此,評分程序應(yīng)當(dāng)細(xì)化到題,甚至于知識點(diǎn)。這樣做能讓服務(wù)器獲得詳細(xì)的評分結(jié)果,以便統(tǒng)計(jì)具體的教學(xué)得失。
2 一種更好的機(jī)試系統(tǒng)設(shè)計(jì)思路
文件比較法也同樣有一定的缺陷。此法只是評判結(jié)果,完全忽略了過程?忌退阏莆樟酥R點(diǎn),但在操作中有一點(diǎn)小失誤,導(dǎo)致結(jié)果未能生成或不完整,都會(huì)極大影響對該考生的公正評價(jià)。如果在對結(jié)果文件評判的同時(shí),又能判斷操作的正誤,就能彌補(bǔ)評分的缺失。
可以另外用VC++或BCB設(shè)計(jì)一個(gè)外殼程序,隨答題環(huán)境一起運(yùn)行,環(huán)境退出時(shí)關(guān)閉。外殼程序的任務(wù)是將考生的鼠標(biāo)操作記錄到一個(gè)文本文檔中。
用API函數(shù)SetWindowsHookEx建立Hook,將程序添加到Hook鏈中,目的是監(jiān)視Windows消息??[1]?:
tsHook =(HWND)SetWindowsHookEx(WH_MOUSE, MntProc, tsInstance, 0);
MntProc函數(shù)得到每一次考生點(diǎn)擊的按鈕或菜單的標(biāo)號,并依次追加到鼠標(biāo)操作記錄userdo.txt文件中:
LRESULT CALLBACK MntProc(int nCode, WPARAM wParam, LPARAM lParam)
{
WPARAM bmid;
FILE *fp;
bmid = wParam; // bmid得到按鈕或菜單的標(biāo)號
……
fp = fopen(“d:\\cpexam\\pinf\\userdo.txt”,“a”);
fprintf(fp, “%4d”, bmid);
fclose(fp);
……
return CallNextHookEx(tshook, nCode, wParam, lParam);
}
函數(shù)返回CallNextHookEx(),繼續(xù)啟動(dòng)下一個(gè)Hook傳遞消息。
當(dāng)考生點(diǎn)擊交卷或系統(tǒng)自動(dòng)交卷后,用UnhookWindowsHookEx()函數(shù)卸載Hook,并退出外殼程序。最后的userdo.txt中保存的文本為考生操作的按鈕和菜單的序列。
此類系統(tǒng)的評分標(biāo)準(zhǔn)應(yīng)包含兩方面。一方面是生成文件的得分,另一方面通過分析鼠標(biāo)操作記錄文件中按鈕和菜單標(biāo)號的前后關(guān)系給出操作得分。
3 無相鄰重復(fù)的隨機(jī)抽題算法
相鄰考試機(jī)抽到不同的考題,是保證考試公正性的重要環(huán)節(jié)。抽題前先要保證參與考試的機(jī)器IP地址或計(jì)算機(jī)名是順序的,比如計(jì)算機(jī)名為:cs1、cs2、cs3、…… cs[n],并且順序擺放成如下矩陣:
為保證每一臺(tái)機(jī)器抽到與四周8臺(tái)都不同的題,可以將此矩陣看成一個(gè)平面連通圖。故問題可歸結(jié)為連通圖的“五色”著色問題:用5種顏色可以給任一平面簡單連通圖G=<V, E>正常著色?[2]?。在實(shí)際算法中,只需考慮連通圖相鄰5個(gè)頂點(diǎn)中的某一點(diǎn)與其余各點(diǎn)均不同,并遍歷所有點(diǎn)。
具體規(guī)則如下:
(1)第一排每點(diǎn)不與左點(diǎn)相同
。2)其余各排為:
a最左點(diǎn)不與上點(diǎn)和右上點(diǎn)相同
b最右點(diǎn)不與左點(diǎn)、左上點(diǎn)和上點(diǎn)相同
c其余各點(diǎn)不與左點(diǎn)、左上點(diǎn)、上點(diǎn)和右上點(diǎn)相同
以下用VFP表述算法,其中pctt為考試機(jī)總數(shù),tmt為總題量,a為當(dāng)前考試機(jī)編號:
dimension t(pctt)
t=0 && 初始化數(shù)組t
t(1)=int(1+tmt*rand()) && 隨機(jī)初始化cs??[1]?
do case
case tmt>=5 && 考慮“五色”情況
for n=2 to a && 第一排每臺(tái)抽題與左邊不同
do while .t.
t(n)=int(1+tmt*rand())
if t(n)<>t(n-1)
exit
endif
enddo
endfor
for n=a+1 to pctt && 除第一排外
do case
case (n-1)%a=0 && 每排最左邊需與上、右上都不同
do while .t.
t(n)=int(1+tmt*rand())
if t(n)<>t(n-a) and t(n)<>t(n-a+1)
exit
endif
enddo
case (n)%a=0 && 每排最右邊需與上、左上、左都不同
do while .t.
t(n)=int(1+tmt*rand())
if t(n)<>t(n-a) and t(n)<>t(n-a-1) and t(n)<>t(n-1)
exit
endif
enddo
otherwise
do while .t.
t(n)=int(1+tmt*rand()) && 處于中間則需與上、左上、左、右上都不同
if t(n)<>t(n-a) and t(n)<>t(n-a+1) and t(n)<>t(n-a-1) and t(n)<>t(n-1)
exit
endif
enddo
endcase
endfor
endcase
考慮極端情況:題庫中只有4套題,即經(jīng)典的“地圖四色問題”,只能另設(shè)算法,讓抽題矩陣形成如下狀況:(數(shù)字代表題的編號)
1 2 1 2 1 2 1 ……
3 4 3 4 3 4 3 ……
1 2 1 2 1 2 1 ……
3 4 3 4 3 4 3 ……
……
如果題量再少,將無法使每一臺(tái)機(jī)器抽到與四周8臺(tái)都不同的題。如果題量較多,數(shù)量大于機(jī)器數(shù),可考慮直接用考題數(shù)組覆蓋機(jī)器陣列。
每場考試前運(yùn)行抽題程序,在服務(wù)器端生成抽題表。為使抽到的考題下載到考試機(jī),客戶端程序用以下語句創(chuàng)建一個(gè)Winsock接口引用testpc,以便得到客戶端的計(jì)算機(jī)名(testpc.LocalHostName):
testpc=createobject(“MSwinsock.Winsock”)
或者用testpc.LocalIP獲得客戶端IP。然后訪問服務(wù)器的抽題表,用計(jì)算機(jī)名或IP地址對應(yīng)查詢本場考試的考題編號,并下載考題到本機(jī)。
4 結(jié)語
文中涉及的原理與方法已在機(jī)試系統(tǒng)的實(shí)際開發(fā)中得以應(yīng)用,并獲得了良好收效。但不同學(xué)科有不同的教學(xué)特點(diǎn)和特定的評價(jià)機(jī)制,本文只是重點(diǎn)論述比較通行的技術(shù)和方法。此類系統(tǒng)還可進(jìn)一步優(yōu)化。最好能將軟件環(huán)境內(nèi)嵌到考試系統(tǒng)中,由系統(tǒng)直接控制軟件操作,并根據(jù)操作直接評分。當(dāng)然,這需要軟件廠商的技術(shù)支持才能實(shí)現(xiàn)。
參考文獻(xiàn)
[1]姜山. HOOK專題[DB/OL]. http://www.省略/china/community/program/originalarticles/techdoc/hook.mspx.
[2]方世昌.離散數(shù)學(xué)[M]. 陜西:西安電子科技大學(xué)出版社,1996.
相關(guān)熱詞搜索:標(biāo)準(zhǔn)化 拓展 開發(fā) 標(biāo)準(zhǔn)化機(jī)試系統(tǒng)的開發(fā)與拓展 素質(zhì)拓展系統(tǒng)定制開發(fā) 山東大學(xué)素質(zhì)拓展系統(tǒng)
熱點(diǎn)文章閱讀