張曉瑩, 盧 衛, 程一艦, 趙展浩, 杜小勇,3
(1. 中國人民大學 信息學院, 北京 100872; 2. 中國人民大學 信息技術與信息管理國家級實驗教學示范中心, 北京 100872;3. 中國人民大學 數據工程與知識工程教育部重點實驗室, 北京 100872)
慕課(massive open online course,MOOC)的興起與迅速發展[1],在國內外高校掀起一股教育改革浪潮。中國人民大學的數據庫系統概論課程曾榮獲國家級精品課程、國家級精品資源共享課。數據庫系統概論課程團隊正積極投入到慕課課程的建設潮流中,致力于將數據庫系統概論建設成精品慕課課程,推動數據庫慕課資源在高校的共建共享。課程團隊自2015年起通過“請進來、走出去、干起來”三步走策略完成慕課課程的籌備工作,2016年4月至今,在中國大學MOOC平臺先后開設了數據庫系統概論基礎篇(3期)[2]、高級篇(3期)[3]和新技術篇(2期)[4]系列課程,面向國內高校開設SPOC(small private online course)課程20余門,選課人數累計超過10萬人,受到教師和學生的熱烈歡迎。
慕課課程要求授課教師既要提供教學相關的視頻和課件,又要提供配套的測驗、考試等評測方式考核學生對知識的掌握情況,同時還需實現對教師教學方法的反饋。目前,慕課課程的測驗、考試形式多以選擇、判斷、填空等客觀題為主,可以快速自動評判。顯然,上述評測方式僅適用于理論知識的考核,而對于實踐性強的計算機類課程,例如數據庫系統概論、程序設計等,還需要考核學生的實際動手能力。
我校數據庫系統概論課程團隊根據課程實際需要,自主研發了面向慕課的在線SQL自動評測系統[5]。本評測系統不僅支持學生在線完成實驗,還支持自動、實時、準確判分,同時,為教師提供針對學生實驗成績和實驗過程等數據的統計分析功能。
“數據庫系統概論”是一門理論與實踐緊密結合的計算機類專業課程,旨在培養學生靈活運用數據庫理論、方法和技術分析和解決復雜工程問題的能力[6-7]。學生通過實驗能夠加深對理論知識的理解,達到掌握實踐技能、形成工程素養、實踐科學思維、培養創新能力的目的。不論是傳統課堂還是慕課,實驗教學都是數據庫課程教學中不可或缺的重要環節,實驗能力的考核也是重要的教學內容之一。顯然,慕課中常用的客觀題考核方式無法滿足這方面的需求,因此,設計開發支持慕課課程的評測系統對推動數據庫慕課資源的共建共享具有非常重要的意義。
在傳統課堂中,教師通常事先規劃好每節實驗課的實驗任務,要求學生到機房上機實驗并完成實驗報告的撰寫和提交。教師根據實驗結果截圖對學生的實驗質量做出評判。如果在慕課中沿用這種純人工、粗粒度的批改方式,本質上只是簡單地將實驗評測從線下轉移到線上,并沒有減輕教師的負擔??紤]到數據庫系統概論慕課課程的學習人數通常成千上萬、學習規模較大,這種傳統評測方式大大加重了教師的工作負擔。因此,如何像客觀題一樣對實驗進行自動、實時地評判成為評測系統的重要研究內容。
慕課給傳統教育帶來挑戰的同時,也帶來了機遇[8-9]。慕課平臺積累了大量寶貴的用戶學習數據。借助大數據分析技術,對實驗過程和實驗成績進行全面地分析,及時將學習中存在的問題反饋給學生和教師,既能提高學生的實踐能力,又能改進教師的教學方法。因此,如何對實驗過程和實驗成績統計分析是評測系統的另一重要研究內容。
SQL(structured query language)是重要的關系數據庫操作語言,也是數據庫系統概論課程中重要的內容之一,它既包含復雜的理論知識,又涉及大量的實驗。針對慕課環境下的數據庫實驗測試平臺中存在的問題,自主研發了在線SQL自動評測系統,通過自動、實時、準確地量化學生的實驗成績,幫助授課教師及時有效地獲取學生的學習情況,使其適應MOOC教學、MOOC+SPOC混合式教學等新型教學模式的需求。
本文將從基本架構、系統功能、關鍵技術實現、實驗設計、系統評價等方面詳細介紹面向慕課的在線SQL自動評測系統。
本系統的基本架構如圖1所示,自底向上依次為數據源層、數據訪問層、業務邏輯層、控制層、可視化層。

圖1 系統基本架構
數據源層以人大金倉Kingbase數據庫為基礎,使用阿里巴巴的開源數據庫連接池Druid進行數據庫的連接池配置和監控等。系統的實驗數據集由我校真實的本科學生選課數據構成。
數據訪問層負責抽象出數據庫的訪問接口,實現數據庫的增、刪、改、查操作,讀取并傳遞數據。
業務邏輯層是系統的邏輯實現,例如實驗題目的解析與判斷,處理用戶答案和標準答案,按照既定的規則合理判分并返回結果分數等。
控制層主要是對外的數據輸出接口,前端通過http請求進行數據請求,相應的控制接口調用業務邏輯層的邏輯判斷返回相應的數據。主要分為3個方面的控制邏輯:與學生相關的,例如注冊登錄、獲取用戶信息等;與答題相關的,例如提交答案判分、保存答案等;與教師端可視化相關的,例如提供人數、成績等數據。
可視化層是各類數據的展現,包括學生端的題目呈現及答題、答題結果呈現以及教師端的學生申請呈現,以及學生的成績、答題等統計信息的呈現。
本系統主要包括2大功能模塊:學生端功能模塊和教師端功能模塊,具體如圖2所示。

圖2 系統功能模塊
2.2.1 學生端功能
(1) 注冊模塊。在答題前,學生要使用實名信息注冊賬號,由相關學校的授課教師審核通過后方可獲得平臺的使用權限。實名信息應該包括真實姓名、學校、專業、班級、序號等內容。本系統免費向所有高校開放使用,同一學校同一學期可能開設多個數據庫課堂,使用“序號”唯一標識每個課堂。學生在注冊時通過選擇正確的學校和序號加入對應的課堂中。
(2) 登錄模塊。學生使用賬號和密碼登錄系統。如果賬號未經授課教師審核通過,登錄后會進入到等待審核頁面。
(3) 答題模塊。學生在作答過程中可以隨時保存答案,提交后即完成作答,系統自動完成批改。
2.2.2 教師端功能
(1) 審核模塊。為使用本系統的授課教師分配教師賬號。授課教師登錄系統后根據實際情況同意或拒絕學生的申請。
(2) 成績統計模塊。當學生提交答案后,系統會自動存儲該學生每道題的分數。教師通過可視化的圖表查看所管理學生的答題情況,包括總體完成情況、總體成績統計以及個體成績詳情等。
(3) 行為統計模塊。本模塊采集學生在答題過程中的行為數據。如各個題目和各個模塊上的答題用時,從而可以間接地判斷題目的難易程度。
本系統的重要目標是能夠自動、實時、準確地評判量化學生的實驗成績。因此,答案判斷是系統的核心功能。一種實現方法是比較SQL語句,另一種是比較結果。由于SQL語句具有靈活、不唯一的特點,給定一個SQL題目,可以使用多種不同的SQL語句完成。如果采用第一種實現方法,對于復雜實驗,無法預測所有正確的SQL語句,直接對比SQL語句不具備可操作性。通過比較結果能夠很好的規避直接比較SQL語句的復雜度,且易于實現。因此,采用比較結果的方法實現答案判斷。
答案判斷的基本思想是:分別執行學生提交的SQL語句和正確的SQL語句,比較兩者得到的結果(事先保證正確的查詢結果不為空),如果兩者結果一致,則認為答案正確,否則認為答案不正確。但是,有時候學生的答案結果與正確結果相似,只是可能沒有排序或者沒有去重,這樣的疏漏其實并不屬于特別嚴重的錯誤,直接判定為全錯是不合理的。因此,在判斷時引入梯度分數,增加不完全正確的判斷結果,從而避免以偏概全。系統在具體實現時,學生提交的SQL語句作為事務的操作序列執行,該事務最后會被回滾,這樣不會改變數據狀態,因此不會影響其他學生的操作結果。下面以Java代碼為例介紹關鍵技術的實現。
2.3.1 數據操縱語言的判斷
數據操縱語言包括查詢操作和更新操作。
(1) 對于查詢操作,引入 minus 關鍵字比較兩者結果是否相同。核心代碼如下:
/*拼接兩個sql字符串*/
String spliceSql1 = ″ ( ″ + sql1 + ″ ) ″+ ″ minus all ″ + ″ ( ″ + sql2 + ″ ) ″;
recordList1 = samplesDAO.query(conn,spliceSql1);
/*判斷查詢結果是否相同*/
isEqual = (recordList1.size()==0) ? true : false;
(2) 對于更新操作,先執行提交的SQL語句,然后查詢更新后的記錄是否符合預期,如果符合則為正確,否則為不正確。核心代碼如下:
/*執行學生提交的SQL語句*/
iCode = stmt.executeUpdate(userSolution);
/*執行完畢后再次進行查詢獲取到結果集record2*/
record2 = samplesDAO.query(conn, extraSql);
/*查看record2中相應記錄的值是否被更新成指定的值*/
2.3.2 數據定義語言的判斷
數據定義語言包括表、索引、視圖的修改和刪除、完整性等操作,判斷的邏輯比較清晰。首先檢查相應的表、索引、視圖、屬性等是否存在,屬性類型和完整性約束是否正確,然后執行提交的SQL語句,最后檢查執行后的數據庫變化是否與預期相同。核心代碼如下:
/*獲取視圖或表*/
rs = dbMetaData.getTables(null, ″PUBLIC″, ″%″, types);
/*獲取索引*/
rs = dbMetaData.getIndexInfo(null, ″PUBLIC″, tableName, true, true);
/*獲取主鍵*/
rs = dbMetaData.getPrimaryKeys(null, ″PUBLIC″, tableName);
/*獲取外鍵*/
rs = dbMetaData.getImportedKeys(null, ″PUBLIC″, tableName);
2.3.3 數據控制語言的判斷
數據控制語言包括授權與回收功能。對于權限的判斷,首先通過查詢dba_sys_privs表獲得指定的用戶對指定操作對象的權限集,再檢查指定操作權限是否存在于已獲得的用戶權限集中,從判斷出用戶是否成功授權。
2.3.4 數據庫編程的判斷
數據庫編程包含觸發器的設置和存儲過程。
(1) 觸發器的設置通過執行提交的觸發器后,根據觸發條件進行相應的操作,然后檢查與預期的觸發結果是否相同,從而判斷觸發器設置是否正確。核心代碼如下:
String sql1=″create table stu (sno char(10),sname char(10),sage int)″;
stmt.executeUpdate(sql1);
String sql2=″insert into stu values(′001′,′mark′,20)″;
stmt.executeUpdate(sql2);
/*執行提交的觸發器的語句*/
iCode = stmt.executeUpdate(userSolution);
/*執行創建語句*/
/*條件出發前查詢一次*/
tvalue = samplesDAO.queryOne(conn, checkSql);
/*執行觸發條件*/
String sql3 = ″update stu set sage=19″;
stmt.executeUpdate(sql3);
/*條件出發之后在查詢一遍,看觸發器是否發揮了作用*/
tvalue = samplesDAO.queryOne(conn, checkSql);
(2) 存儲過程本質上是一個函數,給定所要創建的函數名稱和參數,當執行提交的答案之后,調用該存儲過程查看結果與預期的是否相同,判斷答案是否正確。核心代碼如下:
/*調用學生所創建的存儲過程*/
CallableStatement cs = conn.prepareCall(″{call proc_sc(?)}″);
cs.setString(1, ″2017004004″);
cs.execute();
cs.close();
我們根據數據庫系統概論課程的重要知識點,參考教材《數據庫系統概論(第5版)》[10]和《數據庫系統概論(第5版)習題解析與實驗指導》[11],結合我校在中國大學MOOC平臺的教學大綱,設計了數據操縱語言、數據定義語言、數據控制語言和數據庫編程四大實驗模塊,考察內容涵蓋了表查詢、數據更新、索引、視圖、完整性、授權、存儲過程、觸發器等。下面詳細介紹各實驗模塊的設計。數據操縱語言的實驗設計和考察點見表1。

表1 數據操縱語言的實驗設計和考查點

表1(續)
學生實驗使用的課程數據庫,數據來源于中國人民大學教務處系統。數據庫包括以下3個表,具體如下:
(1) 學生表:Student (Sno, Sname, Ssex, Sage, Sdept)
(2) 課程表:Course (Cno, Cname, Cpno, Ccredit)
(3) 學生選課表:SC (Sno, Cno, Grade)
2.4.1 數據操縱語言
本模塊實驗內容包括單表查詢、多表查詢和數據更新。單表查詢實驗考察表的基本查詢語句、去重、確定范圍、排序、字符匹配、確定集合、分組統計的應用。多表查詢實驗考察各類連接、嵌套查詢、集合查詢的應用。數據更新實驗考查基本表數據的插入、更新、刪除及與查詢結合的應用。本模塊實驗內容和考查點詳見表1。
2.4.2 數據定義語言
本實驗模塊實驗內容包括表的管理、索引的管理、視圖的管理、實體完整性、參照完整性。表的管理實驗考查基本表的定義、修改、刪除。索引是加快查詢速度的有效手段,索引的管理實驗考查有效索引的建立、刪除。視圖是一個虛表,數據庫中只存放視圖的定義。視圖的使用帶來很多好處。視圖的管理實驗考查視圖的建立、刪除。數據庫的完整性保證數據庫存儲的數據是符合現實世界語義的。完整性實驗主要考查表級和列級完整性約束的建立。本模塊實驗內容和考查點詳見表2。

表2 數據定義語言的實驗設計和考查點
2.4.3 數據控制語言
授權作為數據庫安全控制的一種措施。數據控制語言實驗模塊考察對基本表的各類權限(查詢、插入、更新、刪除)的分配、回收、級聯操作。本模塊實驗內容和考查點詳見表3。

表3 數據控制語言的實驗設計和考查點
2.4.4 數據庫編程
本實驗模塊實驗內容包括觸發器和存儲過程。觸發器是用戶定義的事件驅動的特殊過程,可以進行復雜的檢查和操作。觸發器實驗考查Before和After觸發器的定義。存儲過程實驗考查其定義。本模塊實驗內容和考查點詳見表4。

表4 數據庫編程的實驗設計和考查點
2.5.1 功能
本評測系統實驗內容涵蓋了數據操作語言、數據定義語言、數據控制語言、數據庫編程,能夠使學生得到完整的SQL實驗訓練。學生在答題時,每題均單獨呈現,題目難度層層遞進,能有效地檢驗學生對知識點的掌握程度。系統較好地支持SPOC課堂教學,運行穩定。系統功能目前還在不斷完善,例如,實驗案例庫、隨機動態組題、統計分析數據多樣化等高級功能已在開發中。
2.5.2 效果
為了支持數據庫課程的共建共享,本系統免費開放給所有高校數據庫教師使用。石家莊鐵道大學是首批使用本評測系統的學校之一。圖3顯示了該校某班的單表查詢實驗的總體情況。其中,顯示出實驗的總體完成情況,17人已作答。點擊餅圖中各部分,會顯示出該部分對應的學生姓名,授課教師可以及時提醒這些學生完成實驗。柱狀圖顯示出每道實驗題的學生成績分布情況,可以看到,對于前3題,大部分學生都能正確作答,而對于第8題,只有5人正確作答,3人部分正確作答,反映出學生對前3題掌握較好,對第8題掌握不好,從而幫助授課教師確定教學中的重難點。

圖3 單表查詢實驗的總體情況
圖4顯示了某個學生單表查詢實驗的完成情況,為了保護學生的隱私,用張小明代替該學生真實姓名。其中,左圖是該學生每道題的成績,右圖是該學生完成每道題的用時。授課教師通過查看學生的個人完成情況,可以了解該學生的薄弱環節,從而因材施教。
我校數據庫課程團隊自2016年4月開始設計開發在線SQL自動評測系統。最初作為中國大學MOOC平臺數據庫系統概論基礎篇和高級篇的實驗平臺,供慕課學生完成實驗題。2017年春季學期,杜小勇教授和盧衛副教授在我校率先開設數據庫系統概論SPOC課堂,使用評測系統考查學生對知識的掌握情況,減輕教師的批改負擔。此外,另有10余所高校已經申請使用本測驗系統。根據使用人員的反饋,本系統仍然在不斷完善。
在線SQL自動評測系統,不是取代傳統的實驗教學,而是對傳統實驗教學的重要補充。本評測系統在實際教學中可以有多種的應用。

圖4 單表查詢實驗的個體情況
如圖5所示,在傳統教學中,可以將本評測系統作為實驗教學的輔助工具,將實驗作業的發布與完成從線下轉移到線上。學生在任何時間任何地點都可以在線提交實驗,系統會自動生成實驗報告并進行自動批改,節省了學生撰寫實驗報告和教師批改實驗的時間和精力。系統的統計數據反饋給教師,掌握學生對知識的掌握情況,從而發現實際教學中存在的問題。

圖5 應用場景1:傳統實驗教學
如圖6所示,學生課前通過MOOC平臺的視頻等資源學習課程并完成相應的實驗練習。一方面,學生可以了解自己的學習效果,針對自己的薄弱點在MOOC平臺或SPOC課堂再學習。另一方面,學生的答題情況可以及時反饋給授課教師,例如,每個實驗題的正確與錯誤統計信息、學生出錯行為等一些細粒度的信息,通過對這些重要信息的分析,幫助教師準確把握教學的重點和難點。
中國人民大學數據庫系統概論課程團隊自主研發的在線SQL自動評測系統,在實驗教學測評中發揮了很好的作用,在未來的工作中,將繼續完善系統的功能,還將與其他高校合作創建實驗題庫,增設查詢優化等更高階的實驗內容等,使其發揮更大的作用。
致謝:感謝中國人民大學數據庫系統概論課程團隊的教師、學生和金倉信息技術股份有限公司的技術人員支持和幫助!
參考文獻(References)
[1] 范逸洲,王宇,馮菲,等.MOOCs 課程學習與評價調查[J].開放教育研究,2014,20(3):27-35.
[2] 中國人民大學.數據庫系統概論MOOC課程基礎篇[EB/OL].(2017-07-10). http://www.icourse163.org/course/RUC-488001.
[3] 中國人民大學.數據庫系統概論MOOC課程高級篇[EB/OL].(2017-07-10).http://www.icourse163.org/course/RUC-1001655006.
[4] 中國人民大學.數據庫系統概論MOOC課程新技術篇[EB/OL].(2017-07-10).http://www.icourse163.org/course/RUC-1001965017.
[5] 中國人民大學.SQL自動測詳系統[EB/OL].(2017-08-09).http://dbm.ruc.edu.cn/rucdbcourse/.
[6] 王寧,王珊.數據管理課程群的構建和實施方案研究[J].中國大學教學,2010(6):62-65.
[7] 王珊.數據庫課程教學改革:面向21世紀課程教材與國家精品課程[J].中國大學教學,2006(4):14-18.
[8] 李曉明.將要發生變化的課堂[J].中國大學教學,2017(6):15-17.
[9] 李曉明,張絨. 慕課:理想性、現實性及其對高等教育的潛在影響[J].電化教育研究,2017(2):62-65.
[10] 王珊,薩師煊. 數據庫系統概論[M].5版.北京:高等教育出版社,2014.
[11] 王珊.張俊. 數據庫系統概論習題解析與實驗指導[M]. 5版.北京:高等教育出版社,2015.