劉喆
(北京語(yǔ)言大學(xué) 漢語(yǔ)水平考試中心,北京 100083)
基于Web的HSK閱卷系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)*
劉喆
(北京語(yǔ)言大學(xué) 漢語(yǔ)水平考試中心,北京 100083)
隨著參加中國(guó)漢語(yǔ)水平考試(HSK)的人數(shù)不斷增多,原有的閱卷流程和評(píng)分系統(tǒng)已不能適應(yīng)新的要求,為了徹底解決閱卷效率不高的問(wèn)題,本文進(jìn)行了深入的討論。首先分析了現(xiàn)有流程的主要問(wèn)題,之后研究設(shè)計(jì)了核心環(huán)節(jié)并行化的閱卷方法,設(shè)計(jì)并實(shí)現(xiàn)了基于Web的閱卷系統(tǒng),最后討論了面向閱卷員和科研人員不同的數(shù)據(jù)管理機(jī)制。
流程優(yōu)化;網(wǎng)絡(luò)閱卷;LINQ
中國(guó)漢語(yǔ)水平考試 (HSK)是為測(cè)試母語(yǔ)非漢語(yǔ)者(包括外國(guó)人、華僑和中國(guó)少數(shù)民族考生)的漢語(yǔ)水平而設(shè)立的國(guó)家級(jí)標(biāo)準(zhǔn)化考試,考試成績(jī)可作為達(dá)到進(jìn)入中國(guó)高等院校學(xué)習(xí)或報(bào)考研究生所要求的實(shí)際漢語(yǔ)水平的證明,還可作為漢語(yǔ)水平達(dá)到某種等級(jí)或免修相應(yīng)級(jí)別漢語(yǔ)課程的證明,以及作為聘用機(jī)構(gòu)錄用人員時(shí)評(píng)價(jià)其漢語(yǔ)水平的依據(jù)。隨著中國(guó)不斷深入地參與國(guó)際社會(huì)活動(dòng),越來(lái)越多的外國(guó)人開(kāi)始重視與中國(guó)的交流,學(xué)習(xí)漢語(yǔ)在很多國(guó)家和地區(qū)掀起了熱潮。北京語(yǔ)言大學(xué)漢語(yǔ)水平考試中心負(fù)責(zé)國(guó)內(nèi)外各考點(diǎn)的HSK考試的命題、閱卷和組織考試等工作,隨著考點(diǎn)的不斷增加,考試人數(shù)的不斷增多,考試規(guī)模已經(jīng)和HSK初期相比發(fā)生了巨大的變化,閱卷作為考試流程中非常重要的環(huán)節(jié)也面臨著改革的機(jī)遇與挑戰(zhàn)。
1.業(yè)務(wù)背景分析
HSK閱卷作為考試必不可少的環(huán)節(jié),在初期主要參考國(guó)外著名相關(guān)考試的模式,同時(shí)結(jié)合我國(guó)的國(guó)情和當(dāng)時(shí)的技術(shù)水平設(shè)計(jì)了解決方案,這個(gè)方案完備地覆蓋了考試閱卷過(guò)程的主體環(huán)節(jié),經(jīng)過(guò)幾十年的積累,為HSK考生提供了優(yōu)質(zhì)的服務(wù)。但隨著考試規(guī)模的增加,尤其是近年來(lái)我國(guó)不斷加強(qiáng)對(duì)外的文化宣傳,考生數(shù)量的爆炸式增長(zhǎng)為閱卷帶來(lái)了巨大的壓力,為了保證閱卷質(zhì)量和進(jìn)度,除了對(duì)設(shè)備進(jìn)行更新和升級(jí)以外,閱卷人員還需要付出更多的時(shí)間和精力。這不僅增加了閱卷部門的負(fù)擔(dān),還面臨如下幾個(gè)問(wèn)題:
(1)原有閱卷流程雖然穩(wěn)定可靠,但是吞吐量固定,彈性較差,面對(duì)急劇增加的考生只能通過(guò)增加閱卷時(shí)間來(lái)解決,一旦延期將直接影響成績(jī)發(fā)放的時(shí)間,造成嚴(yán)重的社會(huì)影響;
(2)現(xiàn)在考生主要是通過(guò)互聯(lián)網(wǎng)進(jìn)行報(bào)名和成績(jī)查詢,原有的閱卷流程由于設(shè)計(jì)的時(shí)間較早,沒(méi)有考慮這些因素,導(dǎo)致評(píng)分?jǐn)?shù)據(jù)無(wú)法直接應(yīng)用于網(wǎng)站,要進(jìn)行多次轉(zhuǎn)換,增加了錯(cuò)誤出現(xiàn)的幾率,需要額外的審查機(jī)制保證數(shù)據(jù)的準(zhǔn)確性,影響成績(jī)發(fā)放的進(jìn)度;
(3)原有流程并行程度不高,基本上只能線性執(zhí)行,很難通過(guò)增加設(shè)備和閱卷人員來(lái)有效提高閱卷速度,更多的是依賴核心評(píng)分員的工作效率。
雖然可以通過(guò)購(gòu)置新型閱卷設(shè)備來(lái)緩解這些問(wèn)題,但還需要重新設(shè)計(jì)閱卷流程,開(kāi)發(fā)新型閱卷系統(tǒng)才能與新設(shè)備無(wú)縫銜接,這樣才能有效地解決目前面臨的這些問(wèn)題。
2.技術(shù)選擇
新的閱卷流程和評(píng)分系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)應(yīng)遵循兩個(gè)原則:一是對(duì)歷史數(shù)據(jù)和操作流程要有兼容性,出現(xiàn)突發(fā)問(wèn)題時(shí)可以切換到原有閱卷模式;二是大幅度提高閱卷流程的吞吐能力,以適應(yīng)考生的大量增長(zhǎng)。
舊系統(tǒng)是基于Foxbase開(kāi)發(fā)建設(shè)的,歷史數(shù)據(jù)是DBF格式文件,在開(kāi)通網(wǎng)上報(bào)名和成績(jī)查詢業(yè)務(wù)后,網(wǎng)站使用的是SQL Server 2000,從數(shù)據(jù)兼容性和管理員使用習(xí)慣考慮要延續(xù)使用SQL Server系列數(shù)據(jù)庫(kù)來(lái)保證一致性。業(yè)務(wù)流程中主要涉及的是考生答案掃描后的文本數(shù)據(jù)的處理,結(jié)合報(bào)名數(shù)據(jù)、標(biāo)準(zhǔn)答案數(shù)據(jù)和等值數(shù)據(jù)等內(nèi)容進(jìn)行評(píng)分和評(píng)級(jí),其中報(bào)名程序(包括現(xiàn)場(chǎng)報(bào)名和網(wǎng)上報(bào)名)是基于.NET平臺(tái)開(kāi)發(fā),中心對(duì)該平臺(tái)的開(kāi)發(fā)已有一定的積累,且日常使用的是Windows系列操作系統(tǒng),因此決定采用.NET平臺(tái)進(jìn)行開(kāi)發(fā)。
HSK積累的大量歷史數(shù)據(jù)具有非常重要的科研價(jià)值,可以為研究人員提供參考,因此要提供合理的方式分享數(shù)據(jù)。在這里要考慮兩個(gè)因素,一是數(shù)據(jù)的保密性,漢語(yǔ)水平考試作為國(guó)家級(jí)考試對(duì)保密性的要求非常高,未授權(quán)的訪問(wèn)是嚴(yán)格禁止的,數(shù)據(jù)中包含的隱私信息一旦泄露可能會(huì)產(chǎn)生嚴(yán)重的社會(huì)影響;二是數(shù)據(jù)的分享,當(dāng)次考試的數(shù)據(jù)一經(jīng)公布就變成歷史數(shù)據(jù),考生可登錄網(wǎng)站進(jìn)行查詢,同時(shí)也可供研究人員使用。基于以上兩點(diǎn),統(tǒng)一的管理將有效地降低成本,同時(shí)也能夠以一致的模式進(jìn)行分享。目前考生主要使用網(wǎng)上查詢成績(jī)業(yè)務(wù),同時(shí)研究人員具有分散性和隨機(jī)性,因此決定新的流程和系統(tǒng)將基于Web進(jìn)行設(shè)計(jì),同時(shí)考慮加入角色權(quán)限管理機(jī)制保證數(shù)據(jù)的安全使用。
3.業(yè)務(wù)流程說(shuō)明
原有業(yè)務(wù)流程基本上屬于線性執(zhí)行,主要包括考試材料匯總、客觀題數(shù)據(jù)采集、主觀題評(píng)分、數(shù)據(jù)合成、數(shù)據(jù)比對(duì)糾錯(cuò)、作弊分析、等值計(jì)算、評(píng)分評(píng)級(jí)和成績(jī)單證書打印、成績(jī)發(fā)放等步驟,如圖1所示;新流程在客觀題數(shù)據(jù)掃描過(guò)程中通過(guò)增加掃描設(shè)備實(shí)現(xiàn)了并行處理,在數(shù)據(jù)關(guān)聯(lián)、錯(cuò)誤處理、作弊分揀、評(píng)分評(píng)級(jí)和打印核查等多個(gè)核心環(huán)節(jié)通過(guò)統(tǒng)一的數(shù)據(jù)管理和分享實(shí)現(xiàn)了并行處理,如圖2所示。
1.功能需求
閱卷平臺(tái)有以下功能要求:
(1)對(duì)用戶進(jìn)行區(qū)別管理,閱卷員和科研人員分別扮演不同角色對(duì)數(shù)據(jù)進(jìn)行訪問(wèn),其中閱卷員可以在指定授權(quán)的考試范圍內(nèi)進(jìn)行相關(guān)的各種操作,而科研人員僅具有只讀的訪問(wèn)權(quán)限,此外還要對(duì)其指定數(shù)據(jù)的訪問(wèn)范圍,以此保證數(shù)據(jù)的安全性。
(2)閱卷平臺(tái)要具有較強(qiáng)的擴(kuò)展性,除了完成日常計(jì)劃中的HSK各類考試外還要適應(yīng)臨時(shí)性的考試,如HSK預(yù)測(cè)考試、留學(xué)生分班考試、入學(xué)考試以及短期班的水平測(cè)試考試等。
(3)對(duì)歷史數(shù)據(jù)要有效地進(jìn)行管理,包括歷次考試的標(biāo)準(zhǔn)答案、等值數(shù)據(jù)、考生信息、最終成績(jī)、作弊記錄等,并要保證數(shù)據(jù)安全。
(4)閱卷數(shù)據(jù)要保證能夠與最終網(wǎng)站發(fā)布成績(jī)的格式保持兼容,實(shí)現(xiàn)共享,并且提供豐富的自定義條件供科研人員提取數(shù)據(jù)進(jìn)行科學(xué)研究。
(5)對(duì)閱卷的主要環(huán)節(jié)實(shí)現(xiàn)分布式并行化處理,大幅度增加閱卷的吞吐能力,提高效率。
具體功能如圖3所示。
2.?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)
閱卷平臺(tái)的數(shù)據(jù)庫(kù)設(shè)計(jì)除了要滿足評(píng)分的要求外還要滿足科研人員諸多自定義查詢的需求。傳統(tǒng)的數(shù)據(jù)訪問(wèn)方式將表現(xiàn)層與數(shù)據(jù)訪問(wèn)層隔離,好處是能夠降低耦合性,但是對(duì)于多重用途系統(tǒng)的數(shù)據(jù)呈現(xiàn)就帶來(lái)了困難。LINQ利用基于關(guān)系數(shù)據(jù)的.NET語(yǔ)言集成查詢,可以實(shí)現(xiàn)以對(duì)象形式管理關(guān)系數(shù)據(jù),并提供了豐富的查詢功能。本平臺(tái)將使用LINQ作為主要的數(shù)據(jù)訪問(wèn)方式。如圖4所示是本系統(tǒng)利用LINQ設(shè)計(jì)的數(shù)據(jù)庫(kù)結(jié)構(gòu)。
3.關(guān)鍵技術(shù)實(shí)現(xiàn)
(1)LINQ的應(yīng)用
首先利用對(duì)象關(guān)系設(shè)計(jì)器(O/R設(shè)計(jì)器)創(chuàng)建基于數(shù)據(jù)庫(kù)中對(duì)象的LINQ to SQL實(shí)體類和關(guān)聯(lián)(關(guān)系),即用O/R設(shè)計(jì)器在應(yīng)用程序中創(chuàng)建映射到數(shù)據(jù)庫(kù)中對(duì)象的對(duì)象模型。同時(shí)生成一個(gè)強(qiáng)類型DataContext,用于在實(shí)體類與數(shù)據(jù)庫(kù)之間發(fā)送和接受數(shù)據(jù)。
在建立了DataContext后,利用它將我們對(duì)數(shù)據(jù)庫(kù)對(duì)象的LINQ查詢轉(zhuǎn)換成相應(yīng)的SQL查詢,然后將查詢結(jié)果匯編成實(shí)體對(duì)象返回,供我們進(jìn)行各種操作。例如,取得初中等考試評(píng)分表中的所有已關(guān)聯(lián)記錄。
利用迭代器對(duì)逐條記錄進(jìn)行等值處理,得出報(bào)告分基數(shù),并存儲(chǔ)在相應(yīng)的列中。
在完成所有計(jì)算后將計(jì)算結(jié)果保存到數(shù)據(jù)庫(kù)中。
除了使用LINQ查詢語(yǔ)言外還可以使用標(biāo)準(zhǔn)的SQL語(yǔ)言對(duì)LINQ查詢對(duì)象執(zhí)行操作。
(2)權(quán)限管理與差異性數(shù)據(jù)展現(xiàn)
平臺(tái)的使用者分為閱卷員和科研人員,兩者對(duì)數(shù)據(jù)的關(guān)注點(diǎn)不同,閱卷員關(guān)注的是當(dāng)次考試指定類型的評(píng)分?jǐn)?shù)據(jù),而科研人員關(guān)注的是歷史數(shù)據(jù)中蘊(yùn)含的趨勢(shì)性信息,因而從訪問(wèn)權(quán)限和數(shù)據(jù)展示方面就要進(jìn)行差異化的處理。
為了提高訪問(wèn)的效率,將數(shù)據(jù)庫(kù)分成兩部分,一部分是歷史庫(kù),即已經(jīng)發(fā)布的考生成績(jī)、已使用過(guò)的試卷標(biāo)準(zhǔn)答案和等值數(shù)據(jù)、往次的考生信息數(shù)據(jù)等,另一部分是還未公布的考試數(shù)據(jù)的評(píng)分庫(kù),主要是閱卷過(guò)程中需要使用的考生信息、標(biāo)準(zhǔn)答案、等值數(shù)據(jù)、考生答卷數(shù)據(jù)和評(píng)分計(jì)算數(shù)據(jù)等,數(shù)據(jù)公布后將轉(zhuǎn)存到歷史庫(kù)中,如圖5所示。
①預(yù)編譯查詢
對(duì)閱卷員顯示的信息比較固定,按照閱卷流程顯示相應(yīng)的各種信息即可,因此可將所有要展示的數(shù)據(jù)設(shè)計(jì)成視圖,提高訪問(wèn)效率。復(fù)雜的層次結(jié)構(gòu)將會(huì)降低系統(tǒng)的性能,在進(jìn)行數(shù)據(jù)庫(kù)操作的時(shí)候存在著性能方面的開(kāi)銷,尤其是將LINQ查詢語(yǔ)句轉(zhuǎn)換為數(shù)據(jù)庫(kù)使用的SQL時(shí),轉(zhuǎn)換的過(guò)程需要通過(guò)反射得到映射的元數(shù)據(jù),再將查詢語(yǔ)句解析成表達(dá)式樹(shù),并根據(jù)表達(dá)式樹(shù)生成SQL字符串。
若某個(gè)查詢語(yǔ)句需要多次執(zhí)行,那么利用預(yù)編譯查詢技術(shù)只需要分析一次該查詢結(jié)構(gòu),隨后就可以多次使用。這里使用CompiledQuery.Compile方法定義一個(gè)將要被重復(fù)使用的查詢,并在DataContext中定義一個(gè)靜態(tài)域保存該查詢,再使用另一個(gè)非靜態(tài)的方法對(duì)其進(jìn)行封裝。CompiledQuery.Compile方法將返回一個(gè)泛型的函數(shù),而不是一般查詢所返回的值或簡(jiǎn)單類型。下例代碼給出了一個(gè)返回指定考點(diǎn)的評(píng)分信息的預(yù)編譯查詢,除了傳入名為kd的考點(diǎn)代碼外,查詢的其他部分將被預(yù)編譯。
因?yàn)镵DInfo為靜態(tài)域,所以在該應(yīng)用程序域(AppDomain)中只需要一次性地求值,隨后便可以多次使用,從而省去了每次求值所帶來(lái)的額外性能開(kāi)銷。在任何時(shí)候若需要得到指定考點(diǎn)的評(píng)分信息,我們就可以直接調(diào)用GetKDInfo方法。LINQ框架無(wú)需每次都重新映射數(shù)據(jù)庫(kù)和對(duì)象之間的關(guān)系,也無(wú)需重復(fù)地將查詢語(yǔ)句解析成表達(dá)式樹(shù)。
②條件合成和過(guò)濾
科研人員要對(duì)數(shù)據(jù)進(jìn)行分析和比較,所以會(huì)提出各種限制條件,這些條件具有很大的隨機(jī)性,無(wú)法提前預(yù)估出來(lái),因此在對(duì)科研人員的數(shù)據(jù)展示方面要結(jié)合數(shù)據(jù)訪問(wèn)限制和條件需求進(jìn)行設(shè)計(jì)。
條件合成主要是將用戶選擇的條件作為參數(shù)帶到查詢中,并且根據(jù)用戶的要求提供默認(rèn)和自定義的排序方式,利用LINQ的“延遲查詢執(zhí)行”可以將條件匯總作為一個(gè)過(guò)程,而不是對(duì)各個(gè)條件逐一進(jìn)行查詢而漸進(jìn)得出的結(jié)果。延遲查詢執(zhí)行的一個(gè)優(yōu)勢(shì)在于節(jié)省了資源,主要在于直到我們需要迭代訪問(wèn)查詢結(jié)果的時(shí)候,該查詢所要操作的數(shù)據(jù)源才會(huì)被訪問(wèn)。比如在處理第一個(gè)元素后就不訪問(wèn)其他元素時(shí),后續(xù)的元素就不會(huì)被加載到內(nèi)存中,而在傳統(tǒng)模式下,即使程序并不需要全體元素,它們也會(huì)被加載到內(nèi)存中。另一個(gè)好處是可以將查詢的定義和使用分開(kāi),這有利于我們將條件收集和數(shù)據(jù)查詢兩個(gè)過(guò)程進(jìn)行分離,并且還可以多次復(fù)用已定義好的查詢,提高了數(shù)據(jù)訪問(wèn)的效率。
條件合成通過(guò)參數(shù)化構(gòu)造為過(guò)濾功能提供了基礎(chǔ),避免了一些常見(jiàn)問(wèn)題。首先是SQL注入攻擊,即在SQL語(yǔ)句中插入一段惡意代碼,而使用參數(shù)化的條件合成即可避免這種威脅。其次是我們可以充分利用SQL Server的查詢計(jì)劃緩存。若僅修改某個(gè)查詢條件的參數(shù),SQL Server即可適當(dāng)?shù)貙?duì)該查詢作出執(zhí)行計(jì)劃并將其緩存起來(lái),以后對(duì)于同樣的查詢請(qǐng)求,數(shù)據(jù)庫(kù)即可直接使用緩存中的執(zhí)行計(jì)劃,而不需對(duì)表達(dá)式重新進(jìn)行分析求值。
由于系統(tǒng)采用了Web模式,避免了單機(jī)模式的分散式維護(hù),提高了閱卷并行化水平,極大地增加了閱卷的吞吐能力,還為科研人員提供了方便的數(shù)據(jù)檢索功能。實(shí)踐證明,本系統(tǒng)具有良好的社會(huì)效益和經(jīng)濟(jì)效益。但由于對(duì)系統(tǒng)流程修改較大,還存在如并行優(yōu)化不足、流程銜接不夠緊湊等問(wèn)題,相信隨著對(duì)業(yè)務(wù)研究的不斷深入和技術(shù)的發(fā)展,這些問(wèn)題都能得到解決。
[1](法)Fabrice Marguerie,(美)Steve Eichert,(美)Jim Wooley著,陳黎夫譯.LINQ實(shí)戰(zhàn)[M].北京:人民郵電出版社,2009.
[2](美)Andrew Troelsen著,朱曄等譯.C#與.NET 3.5高級(jí)程序設(shè)計(jì)(第4版)[M].北京:人民郵電出版社,2009.
(編輯:金冉)
TP311.52
B
1673-8454(2011)11-0031-04
*本課題為北京語(yǔ)言大學(xué)青年自主科研支持計(jì)劃資助項(xiàng)目(中央高校基本科研業(yè)務(wù)費(fèi)專項(xiàng)資金資助)(10JBG15)。