徐雅靜,劉玉濤,李 通,李智超,羅安根
(北京郵電大學 信息與通信工程學院,北京 100876)
程序設計類SPOC課程綜合教學支撐平臺的設計與實現
徐雅靜,劉玉濤,李 通,李智超,羅安根
(北京郵電大學 信息與通信工程學院,北京 100876)
程序設計類課程教學模式的改變必然要依賴強大的教學平臺的支撐,針對該類課程實踐性強的特點,分析基于SPOC的課堂教學、課后自學的教學實際以及教學反饋的需求,設計并實現一種支持SPOC全教學環節的綜合教學支撐平臺,并總結該平臺在數據結構SPOC課程中的應用效果。
SPOC;OJ平臺;App Cloud;代碼相似度
程序設計類課程的核心是培養學生的編程能力,這涉及教師的“教”與學生的“學”兩方面內容。教師面臨的問題是:針對性地設計課堂教學內容,有效提升有限課堂時間內的教學效果,及時獲取學生學習情況的反饋。學生面臨的問題是:需要更輕松更方便的學習工具或平臺,更好地安排學習時間和學習內容,加強學習效果。如何使教師的教和學生的學更有效率,是大學計算機教育改革亟待解決的問題[1]。因此,基于上述教學實際,筆者設計并實現了一種適合程序設計類SPOC課程的綜合教學支撐平臺,經過數據結構SPOC課程的實際應用和效果反饋,該平臺不僅能有效提升教與學的效率,而且能減輕教師的教學負擔,支撐教師進行更廣泛的教學模式創新。筆者提出的綜合教學支撐平臺(Integrated Teaching Platform, ITP)設計理念,綜合利用網絡、計算機、信息和通信技術,架起教與學之間的信息溝通橋梁,使學生的“學”更有效地支撐教師的“教”、教師的“教”更有針對性地指導學生的“學”。
SPOC[2]是英文small private online course的簡稱,意為“小規模限制性在線課程”,最初由加州大學伯克利分校的MOOC負責人Armando Fox提出。SPOC教學理念是學生課下通過教學視頻學習新知識、參與在線討論、完成規定的作業和考試等,教師在課堂教學中通過提問、回答和討論,了解學生的學習情況,加深其對知識的理解,這種方式也稱為“翻轉教學”。
SPOC教學的前提是學生課下必須保證足夠的學習時間和學習強度,否則直接被淘汰,但這種方式在國內高校明顯有些“水土不服”。究其原因,一是中國大學教育的淘汰機制限制,無法保證學生的課下學習強度;二是中國學生多年的被動式學習習慣,使討論式課堂教學難以調動學生的積極性,導致課堂信息量不足。針對上述問題,基于SPOC理念和程序設計類課程編程實踐強等特點,筆者設計了一套適合程序設計類SPOC課程的教學流程指導ITP平臺的設計,見圖1。該教學流程兼顧學生的課下學習(視頻、課件和課外資料學習)、課下自我評估(問題思考、在線測試和編程實踐)和教師課堂教學(基于教學反饋的課堂教學)及討論,有效地利用有限的課堂時間指導學生。

圖1 教學流程設計圖
該教學流程必須依賴ITP平臺來實施, ITP平臺的架構及功能服務模塊都圍繞該教學流程進行設計和劃分。ITP平臺必須能夠支撐所有教學環節,即支撐程序設計類SPOC課程全部教學環節的電子化、信息化、數據化和網絡化,因此ITP平臺的設計需求如下:
(1)學習環節:支撐學生分階段學習,包括視頻、課件、各種課外資料的學習。
(2)驗證環節:支撐學生獨立思考,即每一學習階段思考問題的提出、回答、共享;支撐階段學習效果測試,即在線單元測試和評分;支撐編程實踐,即分階段的編程練習、編程作業和實驗的提交及驗證。
(3)系統分析:支持自動收集、分析和統計學習過程的所有數據。
(4)教學反饋:支撐教師實時查看、瀏覽和下載學生學習的各項統計數據。
(5)教學設計:支撐教師對教學內容的遠程電子化管理,包括課件、視頻等資料的查找、上傳和更新;支撐遠程資源管理,包括評論、問題、試題、測試、作業和實驗的撰寫、刪除、更新、導人和評價。
(6)課堂指導:支撐教師實時題目推送,支撐學生答題實時統計。
基于以上需求分析,筆者提出并設計了集Web平臺、OJ(Online Judge)平臺[3]、App Cloud平臺為一體的綜合教學支撐平臺設計方案,多角度、全方位支撐以上教學環節。其中OJ平臺支持在線編程的相關服務和功能,App Cloud平臺支持移動端的相關功能,其他功能主要由Web平臺提供支持。
根據需求分析,筆者設計的ITP平臺架構如圖2所示。該平臺采用分層結構設計,自下而上分為數據層、服務層、應用層和界面層。此外,各層都設計了獨立的安全管理,保證平臺穩定運行。數據層負責所有視頻、PPT等資料文件、數據庫文件的存儲;服務層根據提供的不同功能分為OJ平臺、Web平臺和App Cloud平臺,其中OJ平臺和Web平臺為B/S系統、App Cloud平臺為C/S 系統;應用層負責具體功能模塊的實現;界面層為用戶人機接口,系統支持Web瀏覽器和手機App兩種方式訪問ITP平臺提供的功能。
2.1 Web平臺功能設計
Web平臺集成了Apache Web服務器、MySQL數據庫服務和Darwin流媒體服務,以PHP為開發語言。Web平臺的設計原則是以Web服務為基礎,提供基本的瀏覽和下載服務;以數據庫服務為核心,提供資源管理、在線試題、在線評論等功能;以流媒體服務器為基礎,提供視頻相關功能。
1) 基本功能。
a. 信息瀏覽:課程MAP瀏覽、教師信息瀏覽;

圖2 ITP平臺架構圖
b. 資料下載:PPT下載、電子書下載、代碼下載等;
c. 數據統計:試題錯誤率統計、單元測試成績統計、在線考試統計、視頻調看統計、OJ平臺編程錯誤率統計、優秀學生統計等;
d. 系統管理:權限管理、人員信息管理、密碼修改、系統配置等。
2)在線測試系統。
a. 單元測試:自動出題、自動打分、自動統計錯誤率、自動計人學生平時成績;
b. 在線考試:根據題目難度、所屬章節、類型、分數自動出題,自動計時、打分、提醒;
c. 題庫管理:支持單選題、填空題、綜合題和編程題4種題型的添加、編輯、刪除和導人。
3)在線視頻。
視頻在線瀏覽、視頻簡介、視頻查找、進度控制、音量調節、每周視頻推薦等。
4)在線評論。
教師預留問題、評論撰寫、刪除、提交和置頂。
2.2 OJ平臺功能設計
OJ平臺專門為程序設計類課程提供在線編譯、鏈接、運行和判別服務,支持多種編程語言的在線編譯和信息反饋,其依賴的編譯服務原理如圖3所示。OJ平臺的核心功能由編譯服務提供,主要負責代碼的編譯運行和判別;輔助功能均圍繞核心功能展開,由Web服務提供,使用與Web平臺相同的開發運行環境。
1)核心功能。
支持CC++、Python、Java、PHP等多種編程語言的即時編譯、鏈接、運行、正誤判別和判別信息反饋。
2)輔助功能。
a. 人員管理:學生、助教、教師、班級信息的增、刪、改、查和導人,權限管理;
b. 題庫管理:編程題目的增、刪、改、查和驗證,題目分類;
c. 作業管理:代碼撰寫和提交、運行結果的人庫和瀏覽,教師布置/刪除作業,代碼批改和評分,相似度計算和聚類,查看作業提交進度、查看相似度、查看正確率和分數統計等。

圖3 編譯服務原理圖
2.3 App Cloud平臺功能設計
雖然智能手機屏幕小、計算功能有限,但豐富的應用使智能手機逐漸成為人類不可或缺的伙伴。利用智能手機作為學習工具不僅便捷而且更容易利用碎片時間提升學習效率?;诖耍P者設計了App Cloud平臺模塊,利用Socket通信技術實現推送服務支撐翻轉課堂的移動學習環節和課堂討論環節。
App Cloud平臺目前支持Android 4.0及以上版本的手機,該平臺根據不同角色,分別提供相應的功能,圖4展示了基于App Cloud平臺的課堂討論功能的實施流程,教師在課堂有限的時間內即能掌握學生對知識的理解程度,并進行有針對性的引導和二次討論。

圖4 課堂討論流程
App Cloud平臺支持手機前端的主要功能如下:
(1)移動學習:支持手機視頻調看、進度控制、音量調節、視頻簡介。
(2)學習反饋:支持手機端評論撰寫、刪除、提交和共享。
(3)課堂討論:支持教師思考問題的實時推送和實時統計,支持學生實時獲取問題、答題和提交。
(4)系統功能:權限控制、視頻播放進度保存、密碼修改等。
程序設計類課程對學生學習效果的評估主要從學生代碼中體現。為了防止學生之間抄襲,ITP平臺的OJ子平臺專門設計了代碼相似度檢測模塊,調用算法自動檢測代碼的抄襲程度、抄襲來源和范圍,該模塊減輕了教師對學生代碼評估的負擔。
3.1 代碼相似度檢測
代碼相似度檢測是抄襲檢測(Plagiarism detection)的重要組成部分,其任務是盡可能識別常規的復制、粘貼、替換、變形等編輯手段,正確獲取代碼源文件之間的相似度值,相似度值越大表示兩份代碼越相似,抄襲的可能性越大。
指紋技術(Finger print)是一種較實用的代碼相似度檢測方法,它能夠簡單有效地獲得文檔間的相似度。由Google在2007年提出用來處理海量文本去重的算法——simhash[4]是一種適合快速檢測海量代碼的方法,該算法是局部敏感哈希(locality sensitive hash)的一種,其主要思想是將高維的特征向量映射成低維的特征向量,通過兩個向量的漢明距離確定文檔是否近似。OJ平臺采用該方法進行代碼相似度檢測。代碼相似度檢測的算法流程見圖5。
1)預處理。
用于去除代碼中的注釋、預編譯和常見的main()、using namespace std等標識符。
2)分詞。
一般通過識別代碼中的空格、Tab鍵、大小括號、運算符、標點符號來實現分詞,即區分出獨立的標識符;計算標識符的權重,標識符可以是變量、常量或關鍵字;分詞后,每種相同標識符出現的次數即為權重,比如for出現4次則weight(for)=4,if出現3次則weight(if) = 3。一般來說,權重越大代表越重要。
3)計算simhash。
通過hash、加權、合并、降維4步為每份代碼生成一個64bit的simhash值。

圖5 代碼相似度檢測流程
hash:通過hash函數[5]計算各個標識符的hash值,稱為特征值,比如for的hash值為110101,if的hash值為101001。
加權:在hash值的基礎上,根據W = hash * weight公式為每一個特征值加權,且遇到1則hash值和權值正相乘,遇到0則hash值和權值負相乘。例如for的hash值110101加權得到W(for) = 110101*4 = 4 4-4 4-4 4,if的hash值101001加權得到W(if)=101001*3 = 3-3 3-3-3 3。
合并:將每一個特征值按位加權結果累加,生成一個序列串,比如W(for) + W(if) =“4 4-4 4-4 4”+“3-3 3-3-3 3”=“7 1-1 1-7 7”。
降維:對于64-bit特征值的每一位累加結果,如果大于0則置1,否則置0,從而得到整個代碼的simhash值。例如,上面計算的“7 1-1 1-7 7”降維得到“1 1 0 1 0 1”,稱為simhash簽名。
4)計算相似度。
計算每份代碼的simhash簽名之間的漢明距離。在信息論中,兩個等長字符串之間的漢明距離是兩個字符串對應位置的不同字符的個數。例如1011101 與 1001001 之間的漢明距離是 2。
5)聚類。經過上述步驟,可以得到任意兩份代碼之間的相似度。一般來說,若代碼之間simhash簽名的漢明距離小于等于n(n一般取值為3[4]),就可以判斷兩份代碼相似。因此,將所有代碼進行編號,若任意兩個編號相似則賦值為1,否則為0,進而可以生成圖的鄰接矩陣A,該矩陣表示無向圖的拓撲結構,結點表示代碼,若結點相連則表示代碼之間相似。利用該圖,筆者采用圖聚類算法中的快速NEWMAN[6]算法對矩陣A進行聚類,通過極大化網絡模塊度(modularity)評價函數,實現聚類。若多份代碼屬于同一聚類,則認為該聚類的所有代碼均涉嫌抄襲,同時根據代碼提交的時間順序,確認最先提交的代碼為抄襲源。
以上算法步驟采用C++語言實現,OJ平臺通過Web服務的進程調用方式啟動該算法,算法運行結束后,將聚類結果返回給Web服務進行輸出。
ITP平臺自2015年9月開始應用于數據結構SPOC課程,在數據結構課堂中先后經過18個教學班共約540名學生和6位教師使用,絕大多數學生較為推崇這種全信息化的教學模式,可自由支配學習時間;教師則能全程監督學生的學習活動,自動獲取各種統計成績,極大地減輕了平時的工作量。因此,ITP平臺不僅構筑了學生和教師溝通的橋梁,還積累了大量的教學數據,為今后的教育大數據挖掘研究提供原始的數據積累。
[1] 屈微, 姚琳, 汪紅兵. 程序設計課程中的翻轉教學模式[J]. 計算機教育, 2016(1): 142-145.
[2] 康葉欽. 在線教育的“后MOOC時代”——SPOC解析[J]. 清華大學教育研究, 2014(1): 1-9.
[3] 范立新, 黃龍軍. 利用OJ平臺進行探究式教學模式的探索[J]. 教育教學論壇, 2014(1): 216-217.
[4] Manku G S, Jain A, Das Sarma A. Detecting near-duplicates for web crawling[C]//Proceedings of the 16th international conference on World Wide Web. ACM, 2007: 141-150.
[5] Arash P. General purpose hash function algorithms [EB/OL].[2016-09-05]. http://www.partow.net/programming/hashfunctions/.
[6] Newman M. Fast algorithm for detecting community structure in networks[J]. Physical Review E, 2004, 69(6): 66-133.
(編輯:孫怡銘)
1672-5913(2017)01-0147-05
G642
徐雅靜,女,副教授,研究方向為機器學習和模式識別,xyj@bupt.edu.cn。