唐宇鵬,唐亞哲,朱海萍,吳茜媛
(西安交通大學(xué) 電子與信息工程學(xué)院, 陜西 西安710049)
計(jì)算機(jī)編程目前已經(jīng)成為高校理工科專業(yè)的必修課,而許多高校編程課程的考核還停留在傳統(tǒng)的筆試方式。編程類課程的教學(xué)目的是讓學(xué)生具備程序設(shè)計(jì)、編碼和調(diào)試的全流程能力。在紙上書寫編程題不但與編程學(xué)習(xí)的初衷相悖,也給考生和閱卷教師帶來(lái)了很多不便[1]。因此,只有進(jìn)行機(jī)試,才能科學(xué)衡量一個(gè)學(xué)生的編程水平,引導(dǎo)學(xué)生提升自己的編程能力[2-3]。
目前機(jī)試在高校中并不普遍,主要原因如下。
(1)現(xiàn)有的機(jī)試系統(tǒng),要么僅采用了機(jī)試形式,學(xué)生提交源代碼,但要教師手工評(píng)測(cè);要么采用比較先進(jìn)的程序源代碼結(jié)構(gòu)分析、相似性分析等技術(shù),在源代碼層面上評(píng)估學(xué)生的編程水平。這種方式的問(wèn)題在于:技術(shù)不夠成熟,評(píng)估的客觀性和正確性存在爭(zhēng)議??傊瑳](méi)有簡(jiǎn)單好用的機(jī)試系統(tǒng)是機(jī)試沒(méi)有被普遍應(yīng)用的重要原因。
(2)雖然很多學(xué)校有針對(duì)編程競(jìng)賽的在線評(píng)測(cè)(Online Judge,OJ) 和題庫(kù),但這類OJ都是對(duì)外開(kāi)放的,其封閉性無(wú)法滿足考試要求,也無(wú)法導(dǎo)入考生信息。更重要的,OJ的評(píng)測(cè)方式是競(jìng)賽的評(píng)測(cè)機(jī)制,通過(guò)就是滿分,未通過(guò)就是0分。這樣的評(píng)測(cè)方式有些極端,不適合計(jì)算機(jī)編程課程的考核。
(3)現(xiàn)有的機(jī)試系統(tǒng)題目和順序都是固定的,沒(méi)有給予學(xué)生自主選擇題目的權(quán)限,考核方式缺乏科學(xué)性。
基于上述分析,筆者提出了機(jī)試系統(tǒng)的基本要求:機(jī)試系統(tǒng)必須能夠自動(dòng)評(píng)分、簡(jiǎn)單可靠,又能正確客觀地評(píng)估學(xué)生的水平,還能提供各種輔助功能協(xié)助教師組織和實(shí)施機(jī)試。
目前Moodle在高校計(jì)算機(jī)教學(xué)工作中得到了較好的普及[4],學(xué)生和教師已熟悉了Moodle的基本使用方法。Moodle中可以安裝OJ(Online Judge)插件[5],可以完成在線評(píng)測(cè)和自動(dòng)評(píng)分[6],為基于Moodle開(kāi)發(fā)機(jī)試系統(tǒng)提供了可行性。本文提出的基于Moodle的機(jī)試系統(tǒng)原則是盡量使用Moodle本身提供的各種功能特性,減少對(duì)Moodle系統(tǒng)源代碼的修改,使機(jī)試系統(tǒng)像Moodle一樣簡(jiǎn)單可靠[7-8]。具體來(lái)說(shuō),機(jī)試系統(tǒng)使用Moodle提供的OJ插件完成學(xué)生提交程序的自動(dòng)在線評(píng)分[9],通過(guò)建立大容量分難度的題庫(kù),給學(xué)生在同一難度上提供多個(gè)題目選擇,減少偶然性帶來(lái)的評(píng)估誤差。
Moodle(Modular Object- Oriented Dynamic Learning Environment)是一個(gè)開(kāi)源的課程管理系統(tǒng)(CMS)[7],優(yōu)點(diǎn)是開(kāi)源、免費(fèi),平臺(tái)界面簡(jiǎn)潔、美觀、實(shí)用。由于其強(qiáng)大的功能和先進(jìn)的教育理念,Moodle得到了國(guó)際廣泛認(rèn)可和使用[8]。我國(guó)各大高校也在教學(xué)工作中廣泛使用Moodle。通過(guò)引入OJ功能,Moodle系統(tǒng)為程序設(shè)計(jì)類課程提供了非常方便的作業(yè)在線評(píng)測(cè)。
本文機(jī)試系統(tǒng)的研發(fā)來(lái)自學(xué)校的教學(xué)改革項(xiàng)目,根據(jù)計(jì)算機(jī)系機(jī)試需求,機(jī)試系統(tǒng)需要支持用戶上載源程序、自動(dòng)在線評(píng)測(cè)、分?jǐn)?shù)統(tǒng)計(jì)等功能,能支持200人同時(shí)機(jī)試,機(jī)試系統(tǒng)的生成時(shí)間不大于60秒,系統(tǒng)響應(yīng)時(shí)間小于2秒?;贛oodle系統(tǒng)開(kāi)發(fā)時(shí),應(yīng)盡量減少對(duì)原Moodle系統(tǒng)的修改,以保持系統(tǒng)的可靠性和簡(jiǎn)單性。換句話說(shuō),應(yīng)盡量以增量的方式而不是以修改的方式研發(fā)機(jī)試系統(tǒng)。
分析Moodle的源代碼可以發(fā)現(xiàn),Moodle系統(tǒng)中在線評(píng)測(cè)部分的主要流程見(jiàn)圖1[9]。通過(guò)跟蹤發(fā)現(xiàn),該流程的運(yùn)行過(guò)程其實(shí)就是對(duì)課程分類(course category)、課程(course)、節(jié)(section)、模 塊(modules)、 題 目(assignment)和 用 戶(user)等多個(gè)數(shù)據(jù)庫(kù)表單進(jìn)行操作的過(guò)程[10]。具體來(lái)說(shuō),每一個(gè)課程分類中含有若干課程,每個(gè)課程的題目分為若干的節(jié),每個(gè)節(jié)中有若干模塊,而模塊和題目一一對(duì)應(yīng)。上述所有數(shù)據(jù),最終通過(guò)上下文(mdl_context)表單中的路徑聯(lián)系在一起,Moodle課程核心部分E-R圖見(jiàn)圖1。
圖1 Moodle系統(tǒng)OJ部分?jǐn)?shù)據(jù)庫(kù)E-R圖
基于Moodle開(kāi)發(fā)機(jī)試系統(tǒng)的原則,本著盡量少修改源代碼以保持可靠性的目標(biāo),本文提出了通過(guò)數(shù)據(jù)庫(kù)層面的操作來(lái)完成機(jī)試系統(tǒng)研發(fā)的思路。具體來(lái)說(shuō),就是僅僅對(duì)之前提到的課程分類(course category)、課程(course)、節(jié)(section)、模塊(modules)、題目(assignment)和用戶(user)等數(shù)據(jù)庫(kù)表單,根據(jù)機(jī)試需求進(jìn)行記錄的插入和修改,而保持Moodle的基本架構(gòu)和基本運(yùn)行流程不變,可稱之為數(shù)據(jù)驅(qū)動(dòng)的機(jī)試系統(tǒng)開(kāi)發(fā)?;谶@個(gè)機(jī)試方案,本文進(jìn)行了簡(jiǎn)單的可行性實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果驗(yàn)證了該方案的有效性。
系統(tǒng)設(shè)計(jì)的重要一環(huán)就是分析Moodle的OJ系統(tǒng)的流程以及流程中每個(gè)步驟完成的相關(guān)數(shù)據(jù)庫(kù)操作,包括其操作的數(shù)據(jù)庫(kù)名稱和操作的具體內(nèi)容,見(jiàn)表1。
機(jī)試系統(tǒng)的核心思想就是為每位參加機(jī)試的考生創(chuàng)建一門課程,課程名稱就是考生的學(xué)號(hào)。同時(shí),為每位任課教師創(chuàng)建一個(gè)課程分類,該課程分類包含所有參加此次機(jī)試的考生對(duì)應(yīng)的課程。為了更科學(xué)地評(píng)估學(xué)生的編程能力,機(jī)試系統(tǒng)從題庫(kù)選取4種難度的題目,每種難度的題目隨機(jī)選取4道,分別放在4節(jié)中,考生可根據(jù)自身情況從每個(gè)難度中選擇一道題目完成,這樣可以有效避免機(jī)試題目的偶然性。教師還可以根據(jù)實(shí)際情況劃分4道題的分?jǐn)?shù)占比?;诒?,新建構(gòu)的機(jī)試系統(tǒng)流程及每個(gè)流程所操作數(shù)據(jù)庫(kù)見(jiàn)表2。
基于上述研發(fā)思路,機(jī)試系統(tǒng)在Moodle的基礎(chǔ)上增加了考試課程生成模塊。教師上傳學(xué)生信息之后,只需點(diǎn)擊添加課程按鈕,機(jī)試系統(tǒng)便自動(dòng)從題庫(kù)中按照1—4的難度順序隨機(jī)挑選題目,并在mdl_assignment和mdl_assignment_oj_tests中添加相應(yīng)的記錄。系統(tǒng)會(huì)為代課教師在mdl_course_categories中添加課程分類,并根據(jù)上傳的學(xué)生信息在mdl_course中為每個(gè)學(xué)生在該課程分類下建立課程。之后,系統(tǒng)按照之前生成的題目在表mdl_course_modules中生成相應(yīng)的題目模塊。最終,系統(tǒng)在表單mdl_context中將生成的題目模塊與各個(gè)學(xué)生課程進(jìn)行連接,整個(gè)過(guò)程見(jiàn)圖2 。
表1 Moodle的OJ系統(tǒng)流程及其與相關(guān)數(shù)據(jù)庫(kù)的對(duì)應(yīng)關(guān)系
表2 新的機(jī)試系統(tǒng)流程及其與相關(guān)數(shù)據(jù)庫(kù)的對(duì)應(yīng)關(guān)系
圖2 考試課程生成模塊
機(jī)試系統(tǒng)研發(fā)的實(shí)現(xiàn)工作包括搭建Moodle系統(tǒng)平臺(tái)、建立數(shù)據(jù)庫(kù)、編寫操作數(shù)據(jù)庫(kù)元素的應(yīng)用程序、程序測(cè)試與系統(tǒng)調(diào)試、考試現(xiàn)場(chǎng)的環(huán)境搭建。對(duì)數(shù)據(jù)庫(kù)進(jìn)行的操作都存放在系統(tǒng)外的PHP文件中,且在Moodle教學(xué)網(wǎng)頁(yè)中可以通過(guò)自定義按鈕直接跳轉(zhuǎn)到這些PHP文件中,所有修改均沒(méi)有大范圍改變Moodle源代碼,而是將自己獨(dú)立的代碼通過(guò)這樣的“接口”和Moodle系統(tǒng)連接。對(duì)數(shù)據(jù)庫(kù)元素進(jìn)行的核心操作均直接作用在Moodle數(shù)據(jù)庫(kù)的原有表單中,這樣不但可以方便快捷地布置機(jī)試系統(tǒng),還可以最大程度地保證系統(tǒng)的可靠性和穩(wěn)定性。
系統(tǒng)以1 000人的課程為例進(jìn)行功能測(cè)試,教師首先生成機(jī)試系統(tǒng),為1 000個(gè)學(xué)生分別建立課程,也為教師創(chuàng)建了課程分類,該課程分類包含所有的1 000門課程。任意打開(kāi)一個(gè)學(xué)生的課程,系統(tǒng)會(huì)顯示該學(xué)生本次機(jī)試的題目,見(jiàn)圖3。題目難度分為4個(gè)等級(jí),且每個(gè)等級(jí)有4道題目,考生從同一難度中的4道題中選一題作答。
為檢驗(yàn)機(jī)試系統(tǒng)的性能,需要進(jìn)行兩方面的測(cè)試。首先,需要測(cè)試教師生成機(jī)試系統(tǒng)的時(shí)間,分別測(cè)試100~1 000人時(shí)機(jī)試系統(tǒng)的生成時(shí)間,以100人為間隔,測(cè)試結(jié)果見(jiàn)圖4。
圖3 學(xué)生考試題目總界面
由圖4可以看出,機(jī)試系統(tǒng)的生成時(shí)間隨著課程人數(shù)的增長(zhǎng)呈現(xiàn)線性增長(zhǎng)趨勢(shì)??紤]到機(jī)試系統(tǒng)是對(duì)Moodle平臺(tái)進(jìn)行數(shù)據(jù)層面上的修改,人數(shù)越多,需要增加的課程數(shù)量就越多,需要配置的題目數(shù)量就越多,因此,生成時(shí)間的線性增長(zhǎng)是合理的。200個(gè)學(xué)生時(shí),機(jī)試系統(tǒng)生成時(shí)間基本在10秒以下,滿足系統(tǒng)性能需求。學(xué)生人數(shù)達(dá)到1 000人時(shí),生成時(shí)間也在一分鐘以內(nèi)。
圖 4 生成課程平均用時(shí)圖
其次,為了測(cè)試機(jī)試系統(tǒng)的并發(fā)能力,本文借助Apache Bench[11-12]工具對(duì)1 000個(gè)考生同時(shí)在線進(jìn)行了模擬測(cè)試。經(jīng)過(guò)多次測(cè)試,計(jì)算出的平均響應(yīng)時(shí)間為72.816 3毫秒,完全滿足性能要求。
針對(duì)目前存在的程序設(shè)計(jì)筆試、機(jī)試考核方式的缺陷,本文基于Moodle系統(tǒng),在數(shù)據(jù)層面上對(duì)系統(tǒng)進(jìn)行改造,實(shí)現(xiàn)了機(jī)試系統(tǒng)的全部功能。系統(tǒng)易于搭建,功能齊全,運(yùn)行穩(wěn)定,相比傳統(tǒng)的筆試形式更為科學(xué)、客觀。目前,該系統(tǒng)滿足機(jī)試系統(tǒng)的功能和性能要求,并已進(jìn)行了小規(guī)模試用,效果良好,可為促進(jìn)計(jì)算機(jī)編程類課程的實(shí)驗(yàn)教學(xué)改革起到積極作用,計(jì)劃在200~300人規(guī)模下進(jìn)行更多的測(cè)試后,開(kāi)始正式部署應(yīng)用。