劉喆
(北京語言大學(xué) 漢語水平考試中心,北京 100083)
基于Web的HSK閱卷系統(tǒng)設(shè)計與實現(xiàn)*
劉喆
(北京語言大學(xué) 漢語水平考試中心,北京 100083)
隨著參加中國漢語水平考試(HSK)的人數(shù)不斷增多,原有的閱卷流程和評分系統(tǒng)已不能適應(yīng)新的要求,為了徹底解決閱卷效率不高的問題,本文進(jìn)行了深入的討論。首先分析了現(xiàn)有流程的主要問題,之后研究設(shè)計了核心環(huán)節(jié)并行化的閱卷方法,設(shè)計并實現(xiàn)了基于Web的閱卷系統(tǒng),最后討論了面向閱卷員和科研人員不同的數(shù)據(jù)管理機制。
流程優(yōu)化;網(wǎng)絡(luò)閱卷;LINQ
中國漢語水平考試 (HSK)是為測試母語非漢語者(包括外國人、華僑和中國少數(shù)民族考生)的漢語水平而設(shè)立的國家級標(biāo)準(zhǔn)化考試,考試成績可作為達(dá)到進(jìn)入中國高等院校學(xué)習(xí)或報考研究生所要求的實際漢語水平的證明,還可作為漢語水平達(dá)到某種等級或免修相應(yīng)級別漢語課程的證明,以及作為聘用機構(gòu)錄用人員時評價其漢語水平的依據(jù)。隨著中國不斷深入地參與國際社會活動,越來越多的外國人開始重視與中國的交流,學(xué)習(xí)漢語在很多國家和地區(qū)掀起了熱潮。北京語言大學(xué)漢語水平考試中心負(fù)責(zé)國內(nèi)外各考點的HSK考試的命題、閱卷和組織考試等工作,隨著考點的不斷增加,考試人數(shù)的不斷增多,考試規(guī)模已經(jīng)和HSK初期相比發(fā)生了巨大的變化,閱卷作為考試流程中非常重要的環(huán)節(jié)也面臨著改革的機遇與挑戰(zhàn)。
1.業(yè)務(wù)背景分析
HSK閱卷作為考試必不可少的環(huán)節(jié),在初期主要參考國外著名相關(guān)考試的模式,同時結(jié)合我國的國情和當(dāng)時的技術(shù)水平設(shè)計了解決方案,這個方案完備地覆蓋了考試閱卷過程的主體環(huán)節(jié),經(jīng)過幾十年的積累,為HSK考生提供了優(yōu)質(zhì)的服務(wù)。但隨著考試規(guī)模的增加,尤其是近年來我國不斷加強對外的文化宣傳,考生數(shù)量的爆炸式增長為閱卷帶來了巨大的壓力,為了保證閱卷質(zhì)量和進(jìn)度,除了對設(shè)備進(jìn)行更新和升級以外,閱卷人員還需要付出更多的時間和精力。這不僅增加了閱卷部門的負(fù)擔(dān),還面臨如下幾個問題:
(1)原有閱卷流程雖然穩(wěn)定可靠,但是吞吐量固定,彈性較差,面對急劇增加的考生只能通過增加閱卷時間來解決,一旦延期將直接影響成績發(fā)放的時間,造成嚴(yán)重的社會影響;
(2)現(xiàn)在考生主要是通過互聯(lián)網(wǎng)進(jìn)行報名和成績查詢,原有的閱卷流程由于設(shè)計的時間較早,沒有考慮這些因素,導(dǎo)致評分?jǐn)?shù)據(jù)無法直接應(yīng)用于網(wǎng)站,要進(jìn)行多次轉(zhuǎn)換,增加了錯誤出現(xiàn)的幾率,需要額外的審查機制保證數(shù)據(jù)的準(zhǔn)確性,影響成績發(fā)放的進(jìn)度;
(3)原有流程并行程度不高,基本上只能線性執(zhí)行,很難通過增加設(shè)備和閱卷人員來有效提高閱卷速度,更多的是依賴核心評分員的工作效率。
雖然可以通過購置新型閱卷設(shè)備來緩解這些問題,但還需要重新設(shè)計閱卷流程,開發(fā)新型閱卷系統(tǒng)才能與新設(shè)備無縫銜接,這樣才能有效地解決目前面臨的這些問題。
2.技術(shù)選擇
新的閱卷流程和評分系統(tǒng)的設(shè)計開發(fā)應(yīng)遵循兩個原則:一是對歷史數(shù)據(jù)和操作流程要有兼容性,出現(xiàn)突發(fā)問題時可以切換到原有閱卷模式;二是大幅度提高閱卷流程的吞吐能力,以適應(yīng)考生的大量增長。
舊系統(tǒng)是基于Foxbase開發(fā)建設(shè)的,歷史數(shù)據(jù)是DBF格式文件,在開通網(wǎng)上報名和成績查詢業(yè)務(wù)后,網(wǎng)站使用的是SQL Server 2000,從數(shù)據(jù)兼容性和管理員使用習(xí)慣考慮要延續(xù)使用SQL Server系列數(shù)據(jù)庫來保證一致性。業(yè)務(wù)流程中主要涉及的是考生答案掃描后的文本數(shù)據(jù)的處理,結(jié)合報名數(shù)據(jù)、標(biāo)準(zhǔn)答案數(shù)據(jù)和等值數(shù)據(jù)等內(nèi)容進(jìn)行評分和評級,其中報名程序(包括現(xiàn)場報名和網(wǎng)上報名)是基于.NET平臺開發(fā),中心對該平臺的開發(fā)已有一定的積累,且日常使用的是Windows系列操作系統(tǒng),因此決定采用.NET平臺進(jìn)行開發(fā)。
HSK積累的大量歷史數(shù)據(jù)具有非常重要的科研價值,可以為研究人員提供參考,因此要提供合理的方式分享數(shù)據(jù)。在這里要考慮兩個因素,一是數(shù)據(jù)的保密性,漢語水平考試作為國家級考試對保密性的要求非常高,未授權(quán)的訪問是嚴(yán)格禁止的,數(shù)據(jù)中包含的隱私信息一旦泄露可能會產(chǎn)生嚴(yán)重的社會影響;二是數(shù)據(jù)的分享,當(dāng)次考試的數(shù)據(jù)一經(jīng)公布就變成歷史數(shù)據(jù),考生可登錄網(wǎng)站進(jìn)行查詢,同時也可供研究人員使用。基于以上兩點,統(tǒng)一的管理將有效地降低成本,同時也能夠以一致的模式進(jìn)行分享。目前考生主要使用網(wǎng)上查詢成績業(yè)務(wù),同時研究人員具有分散性和隨機性,因此決定新的流程和系統(tǒng)將基于Web進(jìn)行設(shè)計,同時考慮加入角色權(quán)限管理機制保證數(shù)據(jù)的安全使用。
3.業(yè)務(wù)流程說明
原有業(yè)務(wù)流程基本上屬于線性執(zhí)行,主要包括考試材料匯總、客觀題數(shù)據(jù)采集、主觀題評分、數(shù)據(jù)合成、數(shù)據(jù)比對糾錯、作弊分析、等值計算、評分評級和成績單證書打印、成績發(fā)放等步驟,如圖1所示;新流程在客觀題數(shù)據(jù)掃描過程中通過增加掃描設(shè)備實現(xiàn)了并行處理,在數(shù)據(jù)關(guān)聯(lián)、錯誤處理、作弊分揀、評分評級和打印核查等多個核心環(huán)節(jié)通過統(tǒng)一的數(shù)據(jù)管理和分享實現(xiàn)了并行處理,如圖2所示。
1.功能需求
閱卷平臺有以下功能要求:
(1)對用戶進(jìn)行區(qū)別管理,閱卷員和科研人員分別扮演不同角色對數(shù)據(jù)進(jìn)行訪問,其中閱卷員可以在指定授權(quán)的考試范圍內(nèi)進(jìn)行相關(guān)的各種操作,而科研人員僅具有只讀的訪問權(quán)限,此外還要對其指定數(shù)據(jù)的訪問范圍,以此保證數(shù)據(jù)的安全性。
(2)閱卷平臺要具有較強的擴展性,除了完成日常計劃中的HSK各類考試外還要適應(yīng)臨時性的考試,如HSK預(yù)測考試、留學(xué)生分班考試、入學(xué)考試以及短期班的水平測試考試等。
(3)對歷史數(shù)據(jù)要有效地進(jìn)行管理,包括歷次考試的標(biāo)準(zhǔn)答案、等值數(shù)據(jù)、考生信息、最終成績、作弊記錄等,并要保證數(shù)據(jù)安全。
(4)閱卷數(shù)據(jù)要保證能夠與最終網(wǎng)站發(fā)布成績的格式保持兼容,實現(xiàn)共享,并且提供豐富的自定義條件供科研人員提取數(shù)據(jù)進(jìn)行科學(xué)研究。
(5)對閱卷的主要環(huán)節(jié)實現(xiàn)分布式并行化處理,大幅度增加閱卷的吞吐能力,提高效率。
具體功能如圖3所示。
2.?dāng)?shù)據(jù)庫設(shè)計

閱卷平臺的數(shù)據(jù)庫設(shè)計除了要滿足評分的要求外還要滿足科研人員諸多自定義查詢的需求。傳統(tǒng)的數(shù)據(jù)訪問方式將表現(xiàn)層與數(shù)據(jù)訪問層隔離,好處是能夠降低耦合性,但是對于多重用途系統(tǒng)的數(shù)據(jù)呈現(xiàn)就帶來了困難。LINQ利用基于關(guān)系數(shù)據(jù)的.NET語言集成查詢,可以實現(xiàn)以對象形式管理關(guān)系數(shù)據(jù),并提供了豐富的查詢功能。本平臺將使用LINQ作為主要的數(shù)據(jù)訪問方式。如圖4所示是本系統(tǒng)利用LINQ設(shè)計的數(shù)據(jù)庫結(jié)構(gòu)。

3.關(guān)鍵技術(shù)實現(xiàn)
(1)LINQ的應(yīng)用
首先利用對象關(guān)系設(shè)計器(O/R設(shè)計器)創(chuàng)建基于數(shù)據(jù)庫中對象的LINQ to SQL實體類和關(guān)聯(lián)(關(guān)系),即用O/R設(shè)計器在應(yīng)用程序中創(chuàng)建映射到數(shù)據(jù)庫中對象的對象模型。同時生成一個強類型DataContext,用于在實體類與數(shù)據(jù)庫之間發(fā)送和接受數(shù)據(jù)。

在建立了DataContext后,利用它將我們對數(shù)據(jù)庫對象的LINQ查詢轉(zhuǎn)換成相應(yīng)的SQL查詢,然后將查詢結(jié)果匯編成實體對象返回,供我們進(jìn)行各種操作。例如,取得初中等考試評分表中的所有已關(guān)聯(lián)記錄。

利用迭代器對逐條記錄進(jìn)行等值處理,得出報告分基數(shù),并存儲在相應(yīng)的列中。



在完成所有計算后將計算結(jié)果保存到數(shù)據(jù)庫中。

除了使用LINQ查詢語言外還可以使用標(biāo)準(zhǔn)的SQL語言對LINQ查詢對象執(zhí)行操作。

(2)權(quán)限管理與差異性數(shù)據(jù)展現(xiàn)
平臺的使用者分為閱卷員和科研人員,兩者對數(shù)據(jù)的關(guān)注點不同,閱卷員關(guān)注的是當(dāng)次考試指定類型的評分?jǐn)?shù)據(jù),而科研人員關(guān)注的是歷史數(shù)據(jù)中蘊含的趨勢性信息,因而從訪問權(quán)限和數(shù)據(jù)展示方面就要進(jìn)行差異化的處理。
為了提高訪問的效率,將數(shù)據(jù)庫分成兩部分,一部分是歷史庫,即已經(jīng)發(fā)布的考生成績、已使用過的試卷標(biāo)準(zhǔn)答案和等值數(shù)據(jù)、往次的考生信息數(shù)據(jù)等,另一部分是還未公布的考試數(shù)據(jù)的評分庫,主要是閱卷過程中需要使用的考生信息、標(biāo)準(zhǔn)答案、等值數(shù)據(jù)、考生答卷數(shù)據(jù)和評分計算數(shù)據(jù)等,數(shù)據(jù)公布后將轉(zhuǎn)存到歷史庫中,如圖5所示。
①預(yù)編譯查詢

對閱卷員顯示的信息比較固定,按照閱卷流程顯示相應(yīng)的各種信息即可,因此可將所有要展示的數(shù)據(jù)設(shè)計成視圖,提高訪問效率。復(fù)雜的層次結(jié)構(gòu)將會降低系統(tǒng)的性能,在進(jìn)行數(shù)據(jù)庫操作的時候存在著性能方面的開銷,尤其是將LINQ查詢語句轉(zhuǎn)換為數(shù)據(jù)庫使用的SQL時,轉(zhuǎn)換的過程需要通過反射得到映射的元數(shù)據(jù),再將查詢語句解析成表達(dá)式樹,并根據(jù)表達(dá)式樹生成SQL字符串。
若某個查詢語句需要多次執(zhí)行,那么利用預(yù)編譯查詢技術(shù)只需要分析一次該查詢結(jié)構(gòu),隨后就可以多次使用。這里使用CompiledQuery.Compile方法定義一個將要被重復(fù)使用的查詢,并在DataContext中定義一個靜態(tài)域保存該查詢,再使用另一個非靜態(tài)的方法對其進(jìn)行封裝。CompiledQuery.Compile方法將返回一個泛型的函數(shù),而不是一般查詢所返回的值或簡單類型。下例代碼給出了一個返回指定考點的評分信息的預(yù)編譯查詢,除了傳入名為kd的考點代碼外,查詢的其他部分將被預(yù)編譯。

因為KDInfo為靜態(tài)域,所以在該應(yīng)用程序域(AppDomain)中只需要一次性地求值,隨后便可以多次使用,從而省去了每次求值所帶來的額外性能開銷。在任何時候若需要得到指定考點的評分信息,我們就可以直接調(diào)用GetKDInfo方法。LINQ框架無需每次都重新映射數(shù)據(jù)庫和對象之間的關(guān)系,也無需重復(fù)地將查詢語句解析成表達(dá)式樹。
②條件合成和過濾
科研人員要對數(shù)據(jù)進(jìn)行分析和比較,所以會提出各種限制條件,這些條件具有很大的隨機性,無法提前預(yù)估出來,因此在對科研人員的數(shù)據(jù)展示方面要結(jié)合數(shù)據(jù)訪問限制和條件需求進(jìn)行設(shè)計。
條件合成主要是將用戶選擇的條件作為參數(shù)帶到查詢中,并且根據(jù)用戶的要求提供默認(rèn)和自定義的排序方式,利用LINQ的“延遲查詢執(zhí)行”可以將條件匯總作為一個過程,而不是對各個條件逐一進(jìn)行查詢而漸進(jìn)得出的結(jié)果。延遲查詢執(zhí)行的一個優(yōu)勢在于節(jié)省了資源,主要在于直到我們需要迭代訪問查詢結(jié)果的時候,該查詢所要操作的數(shù)據(jù)源才會被訪問。比如在處理第一個元素后就不訪問其他元素時,后續(xù)的元素就不會被加載到內(nèi)存中,而在傳統(tǒng)模式下,即使程序并不需要全體元素,它們也會被加載到內(nèi)存中。另一個好處是可以將查詢的定義和使用分開,這有利于我們將條件收集和數(shù)據(jù)查詢兩個過程進(jìn)行分離,并且還可以多次復(fù)用已定義好的查詢,提高了數(shù)據(jù)訪問的效率。
條件合成通過參數(shù)化構(gòu)造為過濾功能提供了基礎(chǔ),避免了一些常見問題。首先是SQL注入攻擊,即在SQL語句中插入一段惡意代碼,而使用參數(shù)化的條件合成即可避免這種威脅。其次是我們可以充分利用SQL Server的查詢計劃緩存。若僅修改某個查詢條件的參數(shù),SQL Server即可適當(dāng)?shù)貙υ摬樵冏鞒鰣?zhí)行計劃并將其緩存起來,以后對于同樣的查詢請求,數(shù)據(jù)庫即可直接使用緩存中的執(zhí)行計劃,而不需對表達(dá)式重新進(jìn)行分析求值。
由于系統(tǒng)采用了Web模式,避免了單機模式的分散式維護(hù),提高了閱卷并行化水平,極大地增加了閱卷的吞吐能力,還為科研人員提供了方便的數(shù)據(jù)檢索功能。實踐證明,本系統(tǒng)具有良好的社會效益和經(jīng)濟效益。但由于對系統(tǒng)流程修改較大,還存在如并行優(yōu)化不足、流程銜接不夠緊湊等問題,相信隨著對業(yè)務(wù)研究的不斷深入和技術(shù)的發(fā)展,這些問題都能得到解決。
[1](法)Fabrice Marguerie,(美)Steve Eichert,(美)Jim Wooley著,陳黎夫譯.LINQ實戰(zhàn)[M].北京:人民郵電出版社,2009.
[2](美)Andrew Troelsen著,朱曄等譯.C#與.NET 3.5高級程序設(shè)計(第4版)[M].北京:人民郵電出版社,2009.
(編輯:金冉)
TP311.52
B
1673-8454(2011)11-0031-04
*本課題為北京語言大學(xué)青年自主科研支持計劃資助項目(中央高?;究蒲袠I(yè)務(wù)費專項資金資助)(10JBG15)。