唐東明
(西南民族大學 計算機科學與技術學院,四川 成都 610041)
隨著手機的普及,智能手機已經是大部分用戶首選的完成計算任務的平臺[1]。在國家提出“互聯網+”戰略后,移動應用開發的需求非常大。目前各大高校和培訓機構已經開設安卓移動應用開發相關的課程[2]。實驗教學是這類應用性強的課程的重要環節,實驗教學可以引導學生將課堂上學到的理論知識跟實際結合起來,提高學生的動手能力,增強學生的直觀感受,服務于往后的就業。筆者針對在安卓開發課程實驗教學過程中遇到的一些問題,提出采用多種技術手段來結合移動智能手機平臺,輔助完成實驗教學過程,讓老師有效的利用自己的時間覆蓋更多的學生,提高教學效率與質量。
傳統的實驗教學方式是老師先演示,學生照著老師的講解和課本進行實踐操作[3],但是這種模式在安卓的應用開發過程中遇到了一些難題。
(1)安卓開發環境采用的工具是一個綜合的、復雜的集成開發工具,這個工具界面為全英文界面,功能非常多且模塊復雜,學生熟練掌握這個工具并不容易。
(2)安卓應用開發需要先安裝集成開發環境Android Studio(簡稱AS,下同),然后配置相應的Android SDK(開發包),但由于安卓SDK的版本非常多,因此安裝的時候只能選擇性地安裝幾個相對重要版本的SDK,這就可能造成實驗室安裝的版本和學生自己電腦安裝的版本不一致的情況,經常出現學生自己來回在自己的電腦和實驗室的電腦之間復制源程序但是不能編譯的情況。
(3)一個完整的安卓應用程序開發不僅涉及Java程序的編寫,還涉及應用程序界面的組織與編寫、資源文件的準備與編寫、程序描述文件的創建與修改、編譯腳本的編寫與組織等,因此一個安卓應用程序工程結構復雜且文件多,導致拷貝一個完整的安卓APP的工程都需要同時拷貝非常多的相關文件。
(4)教師為了評判學生開發的APP,傳統的方式是學生將自己開發的完整AS工程上傳到實驗室的FTP服務器上,教師下載并在自己的電腦上導入工程,查看學生的代碼并編譯,導入到自己的手機上運行,整個過程非常耗時耗力,并且整個過程中經常遇到很多問題:學生經常漏傳文件導致編譯不能通過;學生將build目錄下編譯過程中產生的大量中間目錄和文件也上傳到服務器,造成上傳的工程非常大,教師下載需較長的時間;學生自己電腦上的SDK版本和編譯器的版本可能和教師使用的版本有差異,教師還需要人工修改工程的相關配置才能正常編譯打包運行APP。
上述問題的存在導致教師難以快速有效地驗證學生提交的實驗結果,也不能客觀甄別學生彼此之間的抄襲。如何利用移動互聯網的優勢來將學生實驗和老師更好地結合起來,讓學生在任何地方都能提交自己的實驗,讓老師直接在自己的安卓手機上直接安裝運行學生開發的APP,批閱學生提交的作業,順應移動學習的大潮,讓安卓開發實驗教學環節不受具體固定時間和地點的限制就成為了一個需要解決的問題[4-5]。
為解決上面面臨的難題,有些學校和老師開發了自己的實驗測評系統,例如針對VB編程語言實驗過程的評測系統[3];文獻[6]采用微信公眾號的方式和學生互動,實驗教師可以發布實驗內容,并針對實驗過程和學生在微信上進行良性的互動;文獻[4]結合計算機公共基礎課面臨的問題闡述了如何借助移動學習來增強學生學習的積極性;傳統的物理和化學實驗的教學也結合移動智能手機來開展教學手段的改革,利用手機錄制發布實驗過程并進行講解[7];生物分析實驗的教學過程利用移動終端讓學生在課上利用手機直觀地觀看老師的實驗演示,提高學生實驗的成功率[8-9]。
系統的運行流程總體分為以下幾個部分:①學生在AS中完成APP的開發,在這個階段,學生在集成開發環境中完成程序的設計實現、資源的組織和調試修改,最終完成開發階段的工作;②完成開發后學生調用提供的插件,輸入學生個人的一些基本信息,如學號、作業APP的名稱等信息,接下來調用我們提供的插件對整個APP工程進行編譯、簽名打包成一個發布版的APK,同時自動提交工程的核心代碼和生成的APK到云端;③云端收到學生提交的作業后自動將收到的內容進行歸類整理,并對代碼進行比對查重,生成報告,隨后云端程序發送相應作業批改請求通知到教師手機端;④教師手機端接收到通知后,教師可以利用自己的碎片時間隨時審閱學生提交的軟件和相應的代碼,批閱完成后在手機端完成作業成績評定。
AS是一個綜合的開發工具,功能強大并且工具組件非常多,對初學者來說要完成編寫、編譯、打包、發布一個APP非常不容易。在以前的教學過程中筆者發現很多同學卡在了參數配置、編譯腳本配置、工具使用上,不能在規定的時間完成并演示自己的成果。由于在實驗室進行的實驗課時并不多,當教師要檢查學生的成果時,學生出現各種配置問題,不能打包部署到手機真機上進行演示,浪費了老師和同學大量的時間。上交作業的時候很多同學不加選擇地將整個工程目錄下的所有文件都提交到實驗室的FTP上,而AS的工程目錄下包含各種編譯時產生的中間文件,教師下載要很長的時間。
研究AS的體系結構后發現AS可以采用插件式體系結構來擴展自己的功能,并且插件運行過程中可以利用AS原有的眾多功能模塊,是一種非常靈活的組件式結構。學生在AS中完成App的設計、編碼并調試運行成功后,需要提交成果物到云端。為了簡化提交過程,系統采用插件技術編寫了一個運行于AS中的插件。在AS中安裝開發的插件后,可以在AS軟件運行界面的build菜單項中找到一個名為“提交作業”的菜單項,點擊菜單項后彈出對話框,見圖1,在對話框中輸入提交作業的一些基本信息后即可正式提交作業到云端。在提交過程中插件將會自動掃描需要上傳的文件并進行上傳。

圖1 學生實驗綜合開發環境插件之作業提交界面
考慮到本系統的應用場景我們將服務端部署在阿里云上,學生上傳作業時系統會同時上傳本次作業相關的源代碼。一個完整的安卓工程包含很多的文件,因此在上傳的時候系統只上傳工程中的主要文件:Java源代碼目錄下的所有文件、Layout目錄下的文件。工程文件上傳后,服務端后臺即開始進行查重檢測,查重過程按照以下原則進行:①同類型文件比對,即Java文件和Java文件進行比較;②被比對的文件范圍限定為同實驗號的其他同學上傳的同類型的文件,這樣可以減少比對工作量。代碼查重的目的就是檢測是否抄襲,實質上是對代碼文件的相似度進行度量,給出一個相似度的數值表示[10]。查重比對的結果記錄在數據庫表中,假設學生A已經上傳了實驗2的工程代碼文件ex2_A1.java文件,現在學生B上傳了文件ex2_B1.java,那么比對系統將把ex2_B1.java和ex2_A1.java文件進行比較,如計算結果顯示這兩個文件相似度高于某個設定的閾值δ,那么將會在數據庫表中增加一條記錄。
常見的文本比對算法主要采用分詞技術并結合詞頻統計來計算文本之間的相似度,例如經典的TF-IDF算法,TF(Term Frequency)指一篇文檔中單詞出現的頻率,IDF(Inverse Document Frequency)表示語料庫中出現某個詞的文檔數,TF=詞在文檔中出現的次數/文檔中所有詞的個數,IDF=log(語料庫的文檔總數/語料庫中出現某單詞的不同文檔個數),最終計算每個文本tfidf 向量,文件之間的相似度通過計算兩個向量的歐式距離、Jaccard系數等來度量。但是,程序代碼文件較為特殊,首先代碼文件有一定的結構性,其次代碼沒有普通文本文件那樣規范[11]。目前主流的代碼剽竊檢測算法主要基于字符串比對的方式,如Plague、JPlag、SIM、MOSS等[10]。目前也有學者研究基于指紋技術檢測代碼相似度[12]。本系統采用文獻[13]提出的檢測獨立于語言的相似代碼塊的方式來評價兩份文件的相似度,相似代碼塊越多說明代碼的相似度越高。找出可能有抄襲嫌疑的代碼文件后需要評閱老師最終審閱才能確定,為了審閱兩份文件的異同點,本系統結合開源的CodeMergely(http://www.mergely.com/)系統利用APP中嵌入網頁的方式提供直觀的源代碼比較工具,圖2的界面中對比了兩個相似的代碼文件,從圖中可以看出兩份文件的差異點用不同的標記標示,教師可以清晰地閱讀。
以前實驗教學時教師通?,F場檢查核對學生實驗結果,如果只是簡單地編寫幾個函數,教師可以很容易就評判出實驗完成的好壞,評判完后直接將成績記錄在紙上。安卓實驗課上老師檢查很難一目即知結果,因為安卓工程組織復雜、代碼文件多、資源文件多、配置多。在有限的實驗教學學時里老師很難完整地檢查這么多的學生成果物。由于本身這門課程就是教授安卓手機應用開發,并且實驗的成果必須在真實的安卓手機上運行通過,基于此筆者設計了一個供教師使用的安卓手機APP軟件。

圖2 代碼比對
教師用手機APP最主要的功能就是提供一個教師可以移動批改作業的辦公平臺,教師可以方便地下載安裝運行學生完成的實驗,查看學生實驗編寫的代碼和相應的資源文件等,還可以輔助判斷學生相互抄襲的問題。本系統采用混合模式來開發,主要功能模塊包括:登錄模塊、用戶基本信息模塊、作業批改模塊、代碼查重結果展示模塊。登錄模塊主要實現教師用戶的認證;用戶基本信息模塊用于教師設定一些自己的基本信息;作業批改模塊是教師主要工作的界面,在此模塊中教師可以預覽哪些同學已經提交了作業并選擇運行同學提交的APP,最后給出相應的評價;代碼查重結果展示模塊負責展示某個學生提交的代碼查重結果,教師可以有針對性地選擇查看。
安卓課程的實驗課具有時間長、完整性強、工程代碼資源文件多而復雜等特性,這樣就造成教師在實驗課上很難有充足的時間去檢查學生實驗成果物APP的正確性、完整性、非抄襲性等。通過改造安卓綜合開發平臺并開發教師移動使用的APP,讓學生能方便地提交實驗成果,讓教師能夠在真機上方便地運行評閱學生實驗成果,并能夠查看學生程序的源代碼,發現程序代碼雷同之處。系統有效解決了安卓實驗教學中的一些問題,從而讓教師可以在有限的時間內覆蓋更多的學生。未來將持續改進、增加更多的教師和學生互動模塊,方便師生,提高教學質量。
[1]劉歡, 盧蓓蓉, 馬晨輝.淺析高校校園移動應用開發[J]. 武漢大學學報(理學版), 2012(增刊1): 171-174.
[2]廖龍龍, 路紅.《移動應用開發》課程建設研究[J]. 現代教育技術, 2011(12): 58-61.
[3]劉必雄. 基于“Visual Basic程序設計實驗測評系統”的教學改革與實踐[J]. 河北農業大學學報(農林教育版), 2015(5): 68-71.
[4]紀良浩, 李琳皓, 段小林. 移動學習與開放自主相結合的個性化實驗教學模式的改革與實踐[J]. 教育教學論壇, 2016(31): 79-80.
[5]張楠. 移動學習環境下高校實驗教學模式的創新和實踐[J]. 實驗室研究與探索, 2014(10): 225-228.
[6]沈瑤, 應柏青, 賀富堂. 微信公眾平臺在電路實驗教學改革中的應用[J]. 實驗科學與技術, 2015(4): 1-5.
[7]張玲. 智能手機輔助物理化學實驗教學改革的研究與實踐[J]. 高教學刊, 2015(18): 234-235.
[8]王欣之, 文紅梅. 智能移動終端在儀器分析實驗教學中的應用[J]. 藥學教育, 2017(1): 54-56.
[9]胡慧, 鄭立華, 高萬林.基于 MOOC 的編程語言自動評測[J]. 現代教育技術, 2016, 26(9): 80-85.
[10]鄧愛萍. 程序代碼相似度度量算法研究[J]. 計算機工程與設計, 2008(17): 4636-4639.
[11]全上克, 楊新鋒. 程序代碼相似度檢測方法的設計與實現[J]. 微型電腦應用, 2013(10): 38-41.
[12]黃柳柳, 黃河燕, 史樹敏.面向代碼相似度檢測的指紋選取方法[J]. 計算機工程與應用, 2010(27): 169-171.
[13]Ducasse S, Rieger M,Demeyer S.A language independent approach for detecting duplicated code[EB/OL]. [2017-08-01]. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=792593.