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