趙鴻昌
(無錫城市職業(yè)技術(shù)學(xué)院 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫214153)
《國家教育事業(yè)發(fā)展“十三五”規(guī)劃》指出,未來教育信息化的重點(diǎn)是信息技術(shù)與教育過程相融合的創(chuàng)新,重點(diǎn)發(fā)展教育的效率和質(zhì)量,并鼓勵社會力量為學(xué)校提供信息化課程包和試題庫及試卷庫建設(shè)。與此同時,基于移動端的“雨課堂”等軟件與基于PC端的“極域電子教室”等軟件均已實現(xiàn)了課堂習(xí)題或試卷的編制和實時發(fā)布,國外也有學(xué)者研究了試卷中的習(xí)題排列順序?qū)W(xué)生考試成績的影響[1]。但是,將課程試題庫與試卷庫作為一個整體來設(shè)計,并且從整體上提供實用的建設(shè)方法仍是國內(nèi)外研究中尚未論及的,存在諸多難點(diǎn)。
測驗與考試環(huán)節(jié)作為教學(xué)過程中檢測學(xué)生學(xué)習(xí)情況的有效方法,其設(shè)計的優(yōu)劣直接決定了教學(xué)質(zhì)量,因此高效的試題庫和試卷庫歷來是課程建設(shè)的重中之重[2]。然而,建設(shè)過程存在諸多實現(xiàn)難點(diǎn)。
衡量試題庫優(yōu)劣的標(biāo)準(zhǔn)主要包括試題能完全覆蓋教學(xué)大綱規(guī)定的知識點(diǎn),而且試題的形式和變體足夠豐富從而避免雷同,不要成為令學(xué)生厭倦的“題?!?。另外,試題庫中覆蓋同一個知識點(diǎn)的相同題型的題目必須標(biāo)識為互斥題目,以方便后續(xù)試卷庫的生成。
衡量試卷庫優(yōu)劣的標(biāo)準(zhǔn)比較多,很多與試題庫的要求截然不同。盡管各類教育教學(xué)的形式千差萬別,核心要求包括:①指定試卷總份數(shù)及每份試卷中每類試題的總數(shù);②由經(jīng)驗豐富的教師指定每份試卷對試題庫中的知識點(diǎn)產(chǎn)生有效覆蓋的要求,表現(xiàn)為必須覆蓋的知識點(diǎn)集合,從而避免必要知識點(diǎn)的遺漏;③試題抽取時要具有一定的隨機(jī)性,表現(xiàn)為多套試卷之間試題的重復(fù)率要有上限;④能夠使用試題庫中標(biāo)識的互斥題目的信息,避免相同知識點(diǎn)和類型的試題重復(fù)出現(xiàn)于一份試卷中。
衡量試題庫和試卷庫整體建設(shè)水平的另一個重要指標(biāo)就是信息化工具的應(yīng)用程度,這也是影響實際建設(shè)水平的重要指標(biāo)。一方面,理想情況是試題抽取和試卷的排版工作要盡量自動化,以實現(xiàn)試題庫改動后試卷庫的即時生成,但是當(dāng)前絕大多數(shù)情況下涉及太多的人工操作,出題人疲于應(yīng)對從而令試卷庫的整體建設(shè)常常流于形式。另一方面,試題庫和試卷庫軟件本身的研發(fā)效率也是一個重要考量,而能解決上述問題的此類軟件的研發(fā)一般是非常困難的,只能考慮借用現(xiàn)有的成熟軟件解決最核心、最難以實現(xiàn)的隨機(jī)約束生成問題。
筆者在此背景下提出一種實用的試題庫與試卷庫建設(shè)方法,通過分析芯片仿真驗證領(lǐng)域的隨機(jī)激勵生成的原理,找到激勵生成與試卷生成之間的共性,然后通過面向?qū)ο蟮姆抡骝炞C語言System Verilog予以抽象建模,將試卷生成問題轉(zhuǎn)化為基于芯片仿真驗證軟件的隨機(jī)約束生成問題。本文詳細(xì)闡述了建模機(jī)制及實現(xiàn)技巧,在信息化教育教學(xué)領(lǐng)域具有很強(qiáng)的實用性及推廣價值。此外,以成熟的芯片仿真驗證軟件為基礎(chǔ)解決試題庫與試卷庫的建設(shè)問題,對于教育信息化軟件的研發(fā)尤其是快速原型化也提供了很好的借鑒。
盡管上述對試卷生成的要求繁多復(fù)雜,但是經(jīng)過分析可見試卷生成軟件的核心難點(diǎn)在于試題的約束隨機(jī)抽取功能、試題按知識點(diǎn)的覆蓋功能以及試卷的自動排版功能。筆者結(jié)合自身在大規(guī)模集成電路仿真驗證領(lǐng)域的工作經(jīng)驗,發(fā)現(xiàn)原理上只要將每道試題是否出現(xiàn)于試卷中編碼為1位數(shù)字量,則每道試題即可與集成電路仿真驗證時的一個二進(jìn)制輸入測試激勵相對應(yīng)。因此,前兩個核心難點(diǎn)完全等同于集成電路仿真驗證時多個位寬為1的測試激勵的隨機(jī)生成,采用目前成熟的集成電路仿真驗證軟件實現(xiàn)是完全可行的。
試卷生成軟件的工作原理如圖1所示。首先準(zhǔn)備好試題庫,直接用記事本程序編輯并保存為文本文件即可,每行一道試題。然后在此基礎(chǔ)上按試卷庫的建設(shè)要求書寫System Verilog程序并仿真,最后根據(jù)仿真結(jié)果從試題庫中多次抽取試題組成試卷,并完成試卷的格式排版。需要著重指出的是試卷的自動排版使用成熟的Latex排版軟件實現(xiàn),生成的PDF文件不但比Word文件格式更穩(wěn)定從而方便閱讀和打印,而且整個排版過程完全可以一鍵自動運(yùn)行??梢灶A(yù)見,在素質(zhì)教育的大背景下,試卷生成的終極目標(biāo)是按學(xué)生定制化,即根據(jù)每個學(xué)生的知識點(diǎn)掌握情況即時生成最適合個體學(xué)習(xí)的試卷,因此Latex排版軟件亦是未來試卷庫建設(shè)必不可少的工具。
圖1 試卷生成軟件的工作原理圖
眾所周知,在描述和處理復(fù)雜問題時要用相對復(fù)雜的編程語言。System Verilog語言作為一種面向?qū)ο蟮募呻娐方Ec仿真軟件,輸入激勵的隨機(jī)約束生成是其最基本的功能,還提供了靈活的描述硬件行為的類與封裝機(jī)制,例如更規(guī)范的System Verilog類庫框架是2011年提出的通用驗證方法學(xué) (Universal Verification Methodology,UVM),其應(yīng)用了集成電路建模與仿真領(lǐng)域最新的面向?qū)ο蠹夹g(shù)[3]。System Verilog對試卷生成問題的適用性表現(xiàn)在以下幾點(diǎn):
首先,試題庫中的試題按教材的章號和題型組織,一份試卷中的試題則來自多個章節(jié)并具有不同的題型,因此自然地將每章抽象為一個chapclass類。該類的成員變量包括5個隨機(jī)數(shù)組以對應(yīng)于5個題型的題目,數(shù)組中的元素數(shù)目在構(gòu)造函數(shù)中設(shè)置,每個元素只能取值0或1,取為1表示此章中此題型的某道題是否出現(xiàn)在試卷中。由此可見,chapclass類中最重要的約束是諸如以下核心代碼中的c0二進(jìn)制約束,表示每道選擇題是否出現(xiàn)在試卷中。
因為試卷中的試題可歸于教材的相應(yīng)章節(jié),所以將試卷建模為一個名為paper的類,類中的成員變量只有16個實例化的chapclass對象,分別描述課程教材中共15章的題型及相應(yīng)的試題數(shù)量。為理解與設(shè)計方便起見,chap[0]不使用,并且每個數(shù)組中的0號元素均不使用。試卷paper類的構(gòu)造函數(shù)中設(shè)置各章的各類題型及題量,其關(guān)鍵代碼如下:
由代碼可見,第二章中的選擇題、填空題、名詞解釋、簡答題以及綜合題依次各有 10、6、3、2、1 道。
至此,試卷生成問題就等效為試卷paper類中的各個對象chapclass的按約束隨機(jī)化,每次隨機(jī)化的結(jié)果是一串取值為0、1的數(shù),1表示需要抽取出的題目。paper類的多次約束隨機(jī)化即可生成多份試卷。因為System Verilog語言最顯著的特性正是輸入激勵的約束隨機(jī)化,它完全適用于試卷生成問題,其余的建模工作即是在paper類中設(shè)定對試卷的各類約束。
生成試卷時首先需要指定各類題型的試題總量,例如,用以下System Verilog功能塊實現(xiàn)對綜合題共有兩道的約束。
以上約束C5表示第1到第5章各有1道綜合題而第9章則有2道綜合題,需要從中隨機(jī)取出共2道生成試卷。
約束1==chap[1].xuan[1]+chap[1].xuan[2]+chap[1].xuan[3]就可以限定試題庫中第一章的前三道選擇題只能取一個,從而避免相同知識點(diǎn)的相同類型題目重復(fù)出現(xiàn)在一份試卷中。而約束1==chap[1].xuan[1]+chap[1].tian[1]+chap[1].zong[1]則表示第一章中某一知識點(diǎn)對應(yīng)的不同類型的題目要出現(xiàn)一次,至于是以選擇或填空或綜合題的形式出現(xiàn)則完全由仿真軟件隨機(jī)確定。
由此可見,各種形式的試題抽取原則上均可以靈活地映射為System Verilog語言中提供的約束功能。
生成多份試卷只需要對paper類的多次隨機(jī)實例化,可以用System Verilog語言中的循環(huán)命令repeat來實現(xiàn)。例如以下代碼段中的repeat(N)表示生成N份試卷,每次生成則只需調(diào)用函數(shù)randomize()進(jìn)行一次不同的隨機(jī)化。可見,如下System Verilog程序的運(yùn)行過程包括100次隨機(jī)實例化paper對象并將隨機(jī)化的結(jié)果打印為一串0或1的數(shù)字,依次代表試題庫中的相應(yīng)題目是否要出現(xiàn)在試卷中。
不同試卷中的題目需要滿足一定的相似率要求,即限制同時出現(xiàn)在兩份試卷中的題目總數(shù)。一種實現(xiàn)方法是構(gòu)建更大的類,例如構(gòu)建試卷庫repos類并包含100個paper對象作為成員變量,然后將相似率約束寫在repos類中即可,但是仿真實踐表明相似率約束的數(shù)目出現(xiàn)了組合爆炸,如此實現(xiàn)的仿真速度大幅降低。另一種簡單的方法是基于每份試卷表現(xiàn)為一串0或1的數(shù)字這一特點(diǎn),用簡單的C語言程序?qū)崿F(xiàn)多串?dāng)?shù)字的對比和統(tǒng)計。以本文為例,只要仿真時指定的試卷份數(shù)略大于100,就可以用C語言程序快速篩選出相似率符合要求的100份試卷,實現(xiàn)過程簡單,此處不再贅述。
以本文為例,試題庫中共有177道題,因此100份試卷對應(yīng)的仿真結(jié)果文件中包括一串共17700個0或1的數(shù)字。首先用Linux中的split命令將其分成100個文件,并命名為paperxx.txt,然后按每個文件中所指定的0或1抽取試題,例如抽取選擇題的Linux腳本命令如下:
結(jié)合tiku.txt中選擇題的格式“章號 題型 題目 答案”,上述第1行命令表示將第一份試卷的0、1數(shù)字號與試題庫內(nèi)容按列拼接起來,并且按題型排序后只取出以“1”開頭的題目。隨后的 grep“zz.*zz1zz”過濾出所有題型1即選擇題。之后的腳本命令均為Latex排版軟件要求的文件輸入格式,例如使用iconv命令從GBK到UTF-8的轉(zhuǎn)碼就是因為Latex排版時的中文宏包默認(rèn)支持UTF-8編碼。
圖2是生成的試卷首頁,試卷答案和試題紙未作展示。試卷頭信息包括試卷名稱、系別專業(yè)、姓名、學(xué)號以及評分卡等事先作成一個PDF文件,然后用tikz宏包提供的pgfimage命令插入到試卷的開頭。然后將自動抽取出的題目及答案分類組織即可,所有抽取與排版工作全是Linux腳本命令一鍵完成的。
圖2 排版后的試卷樣例
信息技術(shù)的運(yùn)用是無所不在的,本文展示的是絲毫不相關(guān)的芯片仿真驗證用到的System Verilog程序解決試卷的自動生成問題。整個項目的實現(xiàn)過程巧妙,具有很強(qiáng)的參考價值。
當(dāng)前的不足主要包括:①素質(zhì)教育大背景下,試卷生成的終極目標(biāo)是學(xué)生定制化,即根據(jù)每個學(xué)生的知識點(diǎn)掌握情況即時生成最適合個體當(dāng)前發(fā)展水平的試卷,每個學(xué)生都能實現(xiàn)學(xué)習(xí)能力的最優(yōu)發(fā)展。這是試卷生成領(lǐng)域很難的研究課題,需要探索學(xué)生知識點(diǎn)掌握情況的量化指標(biāo)。②現(xiàn)有研究與實驗結(jié)果大多數(shù)都將學(xué)生的考試成績作為最終考量點(diǎn),沒有將學(xué)習(xí)理論中的知識結(jié)構(gòu)圖作為首要考量點(diǎn),深入研究知識點(diǎn)網(wǎng)絡(luò)的特性與知識點(diǎn)掌握程度之間的關(guān)系,給教育信息化帶來了前所未有的挑戰(zhàn),值得進(jìn)一步研究和實踐。③試題庫的編輯界面要改進(jìn)為更易用、更反映知識結(jié)構(gòu)的用戶界面,例如思維導(dǎo)圖界面對于出題者的知識結(jié)構(gòu)理解和調(diào)整就大有裨益。最后一點(diǎn)改進(jìn)是利用芯片時序分析軟件PrimeTime的路徑分析功能,來梳理大規(guī)模耦合知識點(diǎn)之間的邏輯關(guān)系,以期利用機(jī)器學(xué)習(xí)技術(shù)從深層次上為學(xué)生挖掘出更利于自主發(fā)現(xiàn)新知識的試題,這將加速信息時代學(xué)習(xí)、應(yīng)用與創(chuàng)造的融合,為實現(xiàn)未來高效率、高質(zhì)量的素質(zhì)教育提供前瞻性的理論研究成果。