陳 敏,湯慧儀
(1.湖南信息學院電子信息學院,湖南 長沙 410151;2.廈門大學馬來西亞分校計算機系,馬來西亞 雪蘭莪 43900)
對教師而言,傳統(tǒng)考試通常包括人工出卷、組織學生現(xiàn)場考試、人工閱卷、手動統(tǒng)計成績和試卷分析等步驟,工作任務(wù)繁重、效率低下,且容易出現(xiàn)誤批[1];對學生而言,傳統(tǒng)考試只注重某次考試成績,無法完全反映學生平時的真實學習情況[2].因此,借助互聯(lián)網(wǎng)改革傳統(tǒng)考試的形式,構(gòu)建功能實用的在線考試系統(tǒng),從而減輕教師負擔、提高考試效率和激發(fā)學生學習興趣,成為當務(wù)之急[3].
Java是近年來較為普及的計算機語言之一,Java程序設(shè)計是大學計算機軟件工程專業(yè)的重點專業(yè)基礎(chǔ)課.開發(fā)該課程的在線考試系統(tǒng),對于配合教師教學、引導學生自主練習,以及學生參加Java課程考試、計算機考級、競賽訓練等都有重要的意義.目前,專門針對Java程序設(shè)計的考試系統(tǒng)不多,且存在無法滿足在線編程、題型較單一且難度無梯度、缺乏數(shù)據(jù)分析功能和用戶之間難以實現(xiàn)交互等不足.因此,筆者擬設(shè)計一個面向Java程序設(shè)計課程的在線考試與練習系統(tǒng),以期減少教師的工作量、提高學生的學習積極性,并為高校在線輔助教學平臺的開發(fā)提供一定的借鑒.
在線考試與練習系統(tǒng)包括學生端、教師端和管理端.學生端主要負責各種考試與練習,教師端主要負責試題管理和試后分析,管理端主要負責上傳試題和發(fā)布考試.系統(tǒng)設(shè)計特點如下:(1)題目按難度分級、逐級沖關(guān)設(shè)計,包含專題練習與各類考試(階段測試、期中期末測試、Java國家水平考試、計算機軟考和程序設(shè)計競賽等)試題;(2)可實現(xiàn)在線編譯Java程序,即在沒有安裝Java的環(huán)境下依然能調(diào)試運行Java代碼;(3)學生端可以回顧錯題,查看答案與解析;(4)學生端可在論壇中進行經(jīng)驗交流;(5)具備考試防作弊功能;(6)教師端可以管理試題、查閱學生分數(shù)與答題情況、自動生成可交互的動態(tài)圖表和分析相應(yīng)數(shù)據(jù)等;(7)試卷批閱分為系統(tǒng)自動批閱和人工輔助批閱.
在線考試與練習系統(tǒng)的功能結(jié)構(gòu)如圖1所示.
圖1 在線考試與練習系統(tǒng)的功能結(jié)構(gòu)
系統(tǒng)的數(shù)據(jù)庫設(shè)計比較復雜,篇幅所限,圖2僅示出部分數(shù)據(jù)庫ER模型,其中的“學生-試題-記錄”“學生-評論-點贊記錄”“學生-試卷-成績”均為多實體聯(lián)系.
圖2 系統(tǒng)部分數(shù)據(jù)庫ER模型
教師將題目加入題庫以供學生在任意時間練習,練習分為3種,即分級練習、專題練習和題型練習.分級練習是教師將難度相似的試題組成一套試卷導入題庫,難度分為4個等級,在練習成績達到一定要求后可以解鎖更高等級的試卷;專題練習是學生輸入一個關(guān)鍵詞,系統(tǒng)在題庫中模糊匹配相符的題目組成一套試卷;題型練習是學生選擇一個題目類型,系統(tǒng)在題庫中隨機抽取符合題型的題目組成一套試卷.3種練習的處理流程分別如圖3~5所示.
圖3 分級練習流程 圖4 專題練習流程 圖5 題型練習流程
對于學習Java編程的學生來說,編程實踐能力很重要.系統(tǒng)加入在線編譯引擎,學生可以直接在系統(tǒng)中編譯代碼,然后提交系統(tǒng)由教師在線評分.在線編譯關(guān)鍵代碼如下:
File sourceFile = new File(className+".java"); //保存源代碼
FileWriterfr = new FileWriter(sourceFile);
bw = new BufferedWriter(fr);
bw.write(code);
bw.close();
fr.close();
Runtime = Runtime.getRuntime();
process = runtime.exec("cmd");
bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write("javac "+className+".java n"); //往控制臺注入命令
bw.flush();
bw.write("java "+className+" n");
bw.close();
BufferedReaderbr = new BufferedReader(new InputStreamReader(process.getInputStream()));
String content = null;
while((content = br.readLine()) != null){
list.add(content);}
實現(xiàn)思路為:系統(tǒng)獲取定義類的代碼行,運行Windows系統(tǒng)的cmd命令;在控制臺上寫入命令編譯.java文件,系統(tǒng)在程序運行時產(chǎn)生Java類,并編譯成.class文件;系統(tǒng)運行.class文件就能獲取控制臺輸出的內(nèi)容并展示給用戶.
本系統(tǒng)已成功應(yīng)用于湖南信息學院軟件工程專業(yè)Java程序設(shè)計課程的線上教學,較好地解決了直接利用現(xiàn)有通用型在線教學平臺(如超星、MOOC等)進行Java考試所存在的考試功能不夠、考試形式較單一和不能在線編譯等問題.系統(tǒng)實現(xiàn)采用當前主流技術(shù),軟件框架為Struts2+Spirng+Hibernate[4],前端使用Bootstrap和Ajax[5],數(shù)據(jù)庫使用SQL Server.以下是系統(tǒng)實現(xiàn)的部分展示.
(1)學生端.學生端主要供學生參加各種考試與練習,針對Java程序設(shè)計的特點,加入了在線編譯功能,用戶即使脫離Java語言環(huán)境也能夠在線編程(圖6).為了防止學生通過其他網(wǎng)頁搜索答案或信息,系統(tǒng)加入了防作弊功能,第1次進入考試頁面就自動全屏,當系統(tǒng)檢測到用戶在考試中退出全屏3次以上時,將自動為其提交試卷并標記作弊.防作弊功能效果如圖7所示.
圖6 在線編譯運行截圖
圖7 防作弊效果截圖
(2)教師端.系統(tǒng)會自動批閱學生完成的試卷,教師負責管理試題并統(tǒng)計分析相關(guān)考試數(shù)據(jù)(圖8和圖9).
圖8 數(shù)據(jù)統(tǒng)計柱形圖截圖
圖9 數(shù)據(jù)統(tǒng)計折線圖截圖
(3)管理端.管理員使用上傳試題引擎上傳試題,并發(fā)布分級練習和安排統(tǒng)一考試.圖10示出了發(fā)布分級練習界面.
圖10 發(fā)布分級練習界面截圖
設(shè)計并實現(xiàn)了一個面向Java程序設(shè)計課程的在線考試與練習系統(tǒng),該系統(tǒng)根據(jù)Java程序設(shè)計考試的特定應(yīng)用需求加入了各種實用的特色功能,以適應(yīng)多樣的考試場景及靈活的考試形式.應(yīng)用結(jié)果表明,系統(tǒng)功能豐富,能在幫助學生積累實踐經(jīng)驗的同時提高其學習積極性.由于系統(tǒng)的開發(fā)具有通用性,因此易于擴展到其他程序設(shè)計語言的在線考試平臺.接下來,筆者將著力于加強系統(tǒng)穩(wěn)定性及提高并發(fā)量,以滿足特定時間段(如考試時并發(fā)訪問量瞬間達到峰值)的需求.