唐東明
(西南民族大學 計算機科學與技術(shù)學院,四川 成都 610041)
隨著手機的普及,智能手機已經(jīng)是大部分用戶首選的完成計算任務(wù)的平臺[1]。在國家提出“互聯(lián)網(wǎng)+”戰(zhàn)略后,移動應(yīng)用開發(fā)的需求非常大。目前各大高校和培訓機構(gòu)已經(jīng)開設(shè)安卓移動應(yīng)用開發(fā)相關(guān)的課程[2]。實驗教學是這類應(yīng)用性強的課程的重要環(huán)節(jié),實驗教學可以引導學生將課堂上學到的理論知識跟實際結(jié)合起來,提高學生的動手能力,增強學生的直觀感受,服務(wù)于往后的就業(yè)。筆者針對在安卓開發(fā)課程實驗教學過程中遇到的一些問題,提出采用多種技術(shù)手段來結(jié)合移動智能手機平臺,輔助完成實驗教學過程,讓老師有效的利用自己的時間覆蓋更多的學生,提高教學效率與質(zhì)量。
傳統(tǒng)的實驗教學方式是老師先演示,學生照著老師的講解和課本進行實踐操作[3],但是這種模式在安卓的應(yīng)用開發(fā)過程中遇到了一些難題。
(1)安卓開發(fā)環(huán)境采用的工具是一個綜合的、復雜的集成開發(fā)工具,這個工具界面為全英文界面,功能非常多且模塊復雜,學生熟練掌握這個工具并不容易。
(2)安卓應(yīng)用開發(fā)需要先安裝集成開發(fā)環(huán)境Android Studio(簡稱AS,下同),然后配置相應(yīng)的Android SDK(開發(fā)包),但由于安卓SDK的版本非常多,因此安裝的時候只能選擇性地安裝幾個相對重要版本的SDK,這就可能造成實驗室安裝的版本和學生自己電腦安裝的版本不一致的情況,經(jīng)常出現(xiàn)學生自己來回在自己的電腦和實驗室的電腦之間復制源程序但是不能編譯的情況。
(3)一個完整的安卓應(yīng)用程序開發(fā)不僅涉及Java程序的編寫,還涉及應(yīng)用程序界面的組織與編寫、資源文件的準備與編寫、程序描述文件的創(chuàng)建與修改、編譯腳本的編寫與組織等,因此一個安卓應(yīng)用程序工程結(jié)構(gòu)復雜且文件多,導致拷貝一個完整的安卓APP的工程都需要同時拷貝非常多的相關(guān)文件。
(4)教師為了評判學生開發(fā)的APP,傳統(tǒng)的方式是學生將自己開發(fā)的完整AS工程上傳到實驗室的FTP服務(wù)器上,教師下載并在自己的電腦上導入工程,查看學生的代碼并編譯,導入到自己的手機上運行,整個過程非常耗時耗力,并且整個過程中經(jīng)常遇到很多問題:學生經(jīng)常漏傳文件導致編譯不能通過;學生將build目錄下編譯過程中產(chǎn)生的大量中間目錄和文件也上傳到服務(wù)器,造成上傳的工程非常大,教師下載需較長的時間;學生自己電腦上的SDK版本和編譯器的版本可能和教師使用的版本有差異,教師還需要人工修改工程的相關(guān)配置才能正常編譯打包運行APP。
上述問題的存在導致教師難以快速有效地驗證學生提交的實驗結(jié)果,也不能客觀甄別學生彼此之間的抄襲。如何利用移動互聯(lián)網(wǎng)的優(yōu)勢來將學生實驗和老師更好地結(jié)合起來,讓學生在任何地方都能提交自己的實驗,讓老師直接在自己的安卓手機上直接安裝運行學生開發(fā)的APP,批閱學生提交的作業(yè),順應(yīng)移動學習的大潮,讓安卓開發(fā)實驗教學環(huán)節(jié)不受具體固定時間和地點的限制就成為了一個需要解決的問題[4-5]。
為解決上面面臨的難題,有些學校和老師開發(fā)了自己的實驗測評系統(tǒng),例如針對VB編程語言實驗過程的評測系統(tǒng)[3];文獻[6]采用微信公眾號的方式和學生互動,實驗教師可以發(fā)布實驗內(nèi)容,并針對實驗過程和學生在微信上進行良性的互動;文獻[4]結(jié)合計算機公共基礎(chǔ)課面臨的問題闡述了如何借助移動學習來增強學生學習的積極性;傳統(tǒng)的物理和化學實驗的教學也結(jié)合移動智能手機來開展教學手段的改革,利用手機錄制發(fā)布實驗過程并進行講解[7];生物分析實驗的教學過程利用移動終端讓學生在課上利用手機直觀地觀看老師的實驗演示,提高學生實驗的成功率[8-9]。
系統(tǒng)的運行流程總體分為以下幾個部分:①學生在AS中完成APP的開發(fā),在這個階段,學生在集成開發(fā)環(huán)境中完成程序的設(shè)計實現(xiàn)、資源的組織和調(diào)試修改,最終完成開發(fā)階段的工作;②完成開發(fā)后學生調(diào)用提供的插件,輸入學生個人的一些基本信息,如學號、作業(yè)APP的名稱等信息,接下來調(diào)用我們提供的插件對整個APP工程進行編譯、簽名打包成一個發(fā)布版的APK,同時自動提交工程的核心代碼和生成的APK到云端;③云端收到學生提交的作業(yè)后自動將收到的內(nèi)容進行歸類整理,并對代碼進行比對查重,生成報告,隨后云端程序發(fā)送相應(yīng)作業(yè)批改請求通知到教師手機端;④教師手機端接收到通知后,教師可以利用自己的碎片時間隨時審閱學生提交的軟件和相應(yīng)的代碼,批閱完成后在手機端完成作業(yè)成績評定。
AS是一個綜合的開發(fā)工具,功能強大并且工具組件非常多,對初學者來說要完成編寫、編譯、打包、發(fā)布一個APP非常不容易。在以前的教學過程中筆者發(fā)現(xiàn)很多同學卡在了參數(shù)配置、編譯腳本配置、工具使用上,不能在規(guī)定的時間完成并演示自己的成果。由于在實驗室進行的實驗課時并不多,當教師要檢查學生的成果時,學生出現(xiàn)各種配置問題,不能打包部署到手機真機上進行演示,浪費了老師和同學大量的時間。上交作業(yè)的時候很多同學不加選擇地將整個工程目錄下的所有文件都提交到實驗室的FTP上,而AS的工程目錄下包含各種編譯時產(chǎn)生的中間文件,教師下載要很長的時間。
研究AS的體系結(jié)構(gòu)后發(fā)現(xiàn)AS可以采用插件式體系結(jié)構(gòu)來擴展自己的功能,并且插件運行過程中可以利用AS原有的眾多功能模塊,是一種非常靈活的組件式結(jié)構(gòu)。學生在AS中完成App的設(shè)計、編碼并調(diào)試運行成功后,需要提交成果物到云端。為了簡化提交過程,系統(tǒng)采用插件技術(shù)編寫了一個運行于AS中的插件。在AS中安裝開發(fā)的插件后,可以在AS軟件運行界面的build菜單項中找到一個名為“提交作業(yè)”的菜單項,點擊菜單項后彈出對話框,見圖1,在對話框中輸入提交作業(yè)的一些基本信息后即可正式提交作業(yè)到云端。在提交過程中插件將會自動掃描需要上傳的文件并進行上傳。
圖1 學生實驗綜合開發(fā)環(huán)境插件之作業(yè)提交界面
考慮到本系統(tǒng)的應(yīng)用場景我們將服務(wù)端部署在阿里云上,學生上傳作業(yè)時系統(tǒng)會同時上傳本次作業(yè)相關(guān)的源代碼。一個完整的安卓工程包含很多的文件,因此在上傳的時候系統(tǒng)只上傳工程中的主要文件:Java源代碼目錄下的所有文件、Layout目錄下的文件。工程文件上傳后,服務(wù)端后臺即開始進行查重檢測,查重過程按照以下原則進行:①同類型文件比對,即Java文件和Java文件進行比較;②被比對的文件范圍限定為同實驗號的其他同學上傳的同類型的文件,這樣可以減少比對工作量。代碼查重的目的就是檢測是否抄襲,實質(zhì)上是對代碼文件的相似度進行度量,給出一個相似度的數(shù)值表示[10]。查重比對的結(jié)果記錄在數(shù)據(jù)庫表中,假設(shè)學生A已經(jīng)上傳了實驗2的工程代碼文件ex2_A1.java文件,現(xiàn)在學生B上傳了文件ex2_B1.java,那么比對系統(tǒng)將把ex2_B1.java和ex2_A1.java文件進行比較,如計算結(jié)果顯示這兩個文件相似度高于某個設(shè)定的閾值δ,那么將會在數(shù)據(jù)庫表中增加一條記錄。
常見的文本比對算法主要采用分詞技術(shù)并結(jié)合詞頻統(tǒng)計來計算文本之間的相似度,例如經(jīng)典的TF-IDF算法,TF(Term Frequency)指一篇文檔中單詞出現(xiàn)的頻率,IDF(Inverse Document Frequency)表示語料庫中出現(xiàn)某個詞的文檔數(shù),TF=詞在文檔中出現(xiàn)的次數(shù)/文檔中所有詞的個數(shù),IDF=log(語料庫的文檔總數(shù)/語料庫中出現(xiàn)某單詞的不同文檔個數(shù)),最終計算每個文本tfidf 向量,文件之間的相似度通過計算兩個向量的歐式距離、Jaccard系數(shù)等來度量。但是,程序代碼文件較為特殊,首先代碼文件有一定的結(jié)構(gòu)性,其次代碼沒有普通文本文件那樣規(guī)范[11]。目前主流的代碼剽竊檢測算法主要基于字符串比對的方式,如Plague、JPlag、SIM、MOSS等[10]。目前也有學者研究基于指紋技術(shù)檢測代碼相似度[12]。本系統(tǒng)采用文獻[13]提出的檢測獨立于語言的相似代碼塊的方式來評價兩份文件的相似度,相似代碼塊越多說明代碼的相似度越高。找出可能有抄襲嫌疑的代碼文件后需要評閱老師最終審閱才能確定,為了審閱兩份文件的異同點,本系統(tǒng)結(jié)合開源的CodeMergely(http://www.mergely.com/)系統(tǒng)利用APP中嵌入網(wǎng)頁的方式提供直觀的源代碼比較工具,圖2的界面中對比了兩個相似的代碼文件,從圖中可以看出兩份文件的差異點用不同的標記標示,教師可以清晰地閱讀。
以前實驗教學時教師通?,F(xiàn)場檢查核對學生實驗結(jié)果,如果只是簡單地編寫幾個函數(shù),教師可以很容易就評判出實驗完成的好壞,評判完后直接將成績記錄在紙上。安卓實驗課上老師檢查很難一目即知結(jié)果,因為安卓工程組織復雜、代碼文件多、資源文件多、配置多。在有限的實驗教學學時里老師很難完整地檢查這么多的學生成果物。由于本身這門課程就是教授安卓手機應(yīng)用開發(fā),并且實驗的成果必須在真實的安卓手機上運行通過,基于此筆者設(shè)計了一個供教師使用的安卓手機APP軟件。
圖2 代碼比對
教師用手機APP最主要的功能就是提供一個教師可以移動批改作業(yè)的辦公平臺,教師可以方便地下載安裝運行學生完成的實驗,查看學生實驗編寫的代碼和相應(yīng)的資源文件等,還可以輔助判斷學生相互抄襲的問題。本系統(tǒng)采用混合模式來開發(fā),主要功能模塊包括:登錄模塊、用戶基本信息模塊、作業(yè)批改模塊、代碼查重結(jié)果展示模塊。登錄模塊主要實現(xiàn)教師用戶的認證;用戶基本信息模塊用于教師設(shè)定一些自己的基本信息;作業(yè)批改模塊是教師主要工作的界面,在此模塊中教師可以預(yù)覽哪些同學已經(jīng)提交了作業(yè)并選擇運行同學提交的APP,最后給出相應(yīng)的評價;代碼查重結(jié)果展示模塊負責展示某個學生提交的代碼查重結(jié)果,教師可以有針對性地選擇查看。
安卓課程的實驗課具有時間長、完整性強、工程代碼資源文件多而復雜等特性,這樣就造成教師在實驗課上很難有充足的時間去檢查學生實驗成果物APP的正確性、完整性、非抄襲性等。通過改造安卓綜合開發(fā)平臺并開發(fā)教師移動使用的APP,讓學生能方便地提交實驗成果,讓教師能夠在真機上方便地運行評閱學生實驗成果,并能夠查看學生程序的源代碼,發(fā)現(xiàn)程序代碼雷同之處。系統(tǒng)有效解決了安卓實驗教學中的一些問題,從而讓教師可以在有限的時間內(nèi)覆蓋更多的學生。未來將持續(xù)改進、增加更多的教師和學生互動模塊,方便師生,提高教學質(zhì)量。
[1]劉歡, 盧蓓蓉, 馬晨輝.淺析高校校園移動應(yīng)用開發(fā)[J]. 武漢大學學報(理學版), 2012(增刊1): 171-174.
[2]廖龍龍, 路紅.《移動應(yīng)用開發(fā)》課程建設(shè)研究[J]. 現(xiàn)代教育技術(shù), 2011(12): 58-61.
[3]劉必雄. 基于“Visual Basic程序設(shè)計實驗測評系統(tǒng)”的教學改革與實踐[J]. 河北農(nóng)業(yè)大學學報(農(nóng)林教育版), 2015(5): 68-71.
[4]紀良浩, 李琳皓, 段小林. 移動學習與開放自主相結(jié)合的個性化實驗教學模式的改革與實踐[J]. 教育教學論壇, 2016(31): 79-80.
[5]張楠. 移動學習環(huán)境下高校實驗教學模式的創(chuàng)新和實踐[J]. 實驗室研究與探索, 2014(10): 225-228.
[6]沈瑤, 應(yīng)柏青, 賀富堂. 微信公眾平臺在電路實驗教學改革中的應(yīng)用[J]. 實驗科學與技術(shù), 2015(4): 1-5.
[7]張玲. 智能手機輔助物理化學實驗教學改革的研究與實踐[J]. 高教學刊, 2015(18): 234-235.
[8]王欣之, 文紅梅. 智能移動終端在儀器分析實驗教學中的應(yīng)用[J]. 藥學教育, 2017(1): 54-56.
[9]胡慧, 鄭立華, 高萬林.基于 MOOC 的編程語言自動評測[J]. 現(xiàn)代教育技術(shù), 2016, 26(9): 80-85.
[10]鄧愛萍. 程序代碼相似度度量算法研究[J]. 計算機工程與設(shè)計, 2008(17): 4636-4639.
[11]全上克, 楊新鋒. 程序代碼相似度檢測方法的設(shè)計與實現(xiàn)[J]. 微型電腦應(yīng)用, 2013(10): 38-41.
[12]黃柳柳, 黃河燕, 史樹敏.面向代碼相似度檢測的指紋選取方法[J]. 計算機工程與應(yīng)用, 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.