程序設計類課程包括理論教學和實踐教學兩個部分,實踐教學結合理論教學內容,組織學生獨立完成一定量的編程任務,以提高學生動手能力.而在教學實施過程中,發現學生實踐環節抄襲現象嚴重,有時一個教學班就兩三個版本.由于實踐教學任務重、學生人數多,僅靠教師人工比對的方法檢查抄襲,工作量太大.為減輕教師的負擔,提高學生實踐水平,本文通過對學生程序類作業的特點及學生抄襲方式的分析,總結了防止學生程序設計任務抄襲的關鍵在于最大可能地杜絕完全的拷貝和簡單的形式上的修改.設計并實現的防抄襲編輯平臺能夠有效阻止拷貝他人代碼,同時通過對提交作業的自動檢測,可以發現最常見的抄襲行為.上述工作為程序設計類課程的實踐教學提供了必要的教學輔助.
一、學生程序作業抄襲的方式及對策
大多數學生普遍認為程序設計類課程較難學習,因而他們往往通過參考使用外來的資源或者直接拷貝或修改其他同學的程序來完成任務.這是抄襲的最直接原因,而電子資源本身特點也使抄襲更容易實現.
通過對學生提交的程序作業代碼分析,發現抄襲主要有兩種途徑: 一種是電子文檔的拷貝; 一種是重新使用外來的資源,如互聯網、參考書和上屆同學的作業等.
電子文檔的拷貝就是將收集到的與問題有關的代碼信息拷貝并粘貼過來,作為自己的作業上交,包括整體拷貝、部分拷貝.在教學中發現,有些學生甚至文件名都不變,直接將他人作業上交; 有些學生還對拷貝來的代碼做一些簡單的修改\\( 如修改變量名和注釋等\\) 以逃避抄襲檢查.電子文檔的拷貝在程序設計類作業抄襲中所占比例較大,大約為 80%,因而,有效阻止電子拷貝是提高防抄襲效果的關鍵.
除了電子拷貝,有些學生利用互聯網和參考書等資源,找到與作業任務相似的\\( 而不是完全一樣\\) 解決方案,對這些資源進行"模仿"并修改以完成任務.與單純的電子拷貝相比,這種行為是一種再學習的過程,尤其對于初學者,是值得借鑒的學習方法.我們要在教學中防止學生的不勞而獲,也就是不了解問題的內在,僅僅是直接的電子拷貝或形式上的修改.
形式上的修改包括[1]: 修改文件名; 更改注釋; 增加空行或者改變書寫格式; 標識符重命名; 代碼段重新排序; 改變表達式中的操作數或者操作符的順序; 改變數據類型等.
在教學過程中教師有必要采取各種教學手段減少抄襲的發生.為了提高學生完成實驗任務的主動性和積極性,在教學過程中主要采取以下手段[2]: \\( 1\\) 美德教育: 通過成功案例引導學生誠實的態度和良好的學風; \\( 2\\) 制定必要的懲罰措施: 讓學生認識到抄襲被檢查出來后的嚴重影響; \\( 3\\) 課程任務的設計: 從實驗內容的設計入手,讓學生感興趣,同時提供必要的參考資源,讓學生知道如何去解決問題; \\( 4\\) 實現過程監督; \\( 5\\) 提交任務后必要的檢測.
減少抄襲最根本的方法是讓學生自主實踐,抄襲檢測的根本目的是找到確實存在抄襲行為的學生對象,通過對他們的懲罰以起到威懾作用,進一步督促他們獨立解決問題.
對于大多數院校來說,一個教學班至少有 40 個學生,有的教師代幾個教學班.如果這個教師要對實驗的過程監督并檢查抄襲往往力不從心,這個過程可以利用軟件手段為教師提供輔助.
二、利用技術手段防止和檢測程序代碼抄襲
為了避免學生通過郵件等方式傳來的代碼復制到作業當中,使用專用的防抄襲編程環境,該環境限制從其他編輯器復制粘貼代碼的功能.但這種方法僅對電子文檔拷貝的抄襲方式起到約束作用,如果學生是逐行輸入代碼或對輸入后的代碼做簡單形式上的修改,還要做進一步的檢測.檢測過程分兩步進行.
第一步是形式上的檢測.其目的是篩選出最常見的直接拷貝和修改文件名的電子抄襲.具體過程如下: 在學生保存作業時,系統將與學生有關的附加信息\\( 如學號、完成作業時間等\\) 與作業代碼進行加密,這樣每個學生的作業都標有本人的"印記".如果不是本用戶打開的源程序,在編輯環境中將不能正確解密,看到的代碼將是亂碼.如果提交了,系統將自動識別出這些異常作業,并自動歸類到問題文件夾中.這個過程不但能夠檢測出抄襲者,還能夠同時找到被抄襲者.
第二步是代碼級的檢測.該過程對提交的程序進行必要的詞法分析及語法分析,然后得到描述程序結構特征的標記,之后應用有效的比較算法得到相似的區域進而計算出相似程度,為教師提供參考.目前 Moss[3]和 Jplag[4]提供了程序相似性檢測的網上服務,能對學生程序作業進行相似性檢測,并快速找出存在抄襲嫌疑的作業對,為教師檢測抄襲提供依據[5].
三、防抄襲編輯平臺的應用過程
學生和教師通過防抄襲編輯平臺進行交互: 學生登錄后編輯、編譯代碼并提交作業.教師查看學生交作業情況,并通過自動抄襲檢測報告的結果查看存在"異常"的學生作業,同時教師將批改后的結果反饋給學生.本系統功能圖見圖1.
1. 學生完成并提交作業.學生以本人信息進入編輯環境,編寫代碼,整個過程不能拷貝外來的電子數據,以杜絕完全拷貝的抄襲行為.另外,在此平臺下打開他人的作業源程序將不能正常顯示,以防止直接拷貝他人作業的抄襲行為,如圖3 所示.學生完成作業后,選擇提交功能,在提交窗口時會提示學生提交作業的題號.選擇提交后會在服務器端根據學生選擇的題號,自動將學生作業歸類到相應的文件夾中,如圖2 所示.
2. 教師自動檢查作業抄襲.學生提交的作業會自動提交到指定的文件夾中,便于下一步抄襲自動檢測.以用 Java 語言編寫 GUI 應用程序實現用戶登錄驗證實驗題為例,共有 20個學生作業提交.通過運行 Moss 程序代碼抄襲檢測系統,可以得到每對作業間相似程度情況,并以百分比表示兩個代碼的相似度量化值\\( 如圖 4\\) ,這個值越大相似程度越高.如果是90%以上,可確定存在抄襲,20% 以下,可確定沒有抄襲,50% - 90% 范圍內,需要進一步查看代碼以確定抄襲與否.
每對程序都提供相關鏈接,將相似的代碼段用同種顏色加以標識,以便于教師將抄襲代碼定位,并提供有效抄襲證據.
3. 教師反饋信息.對于存在抄襲行為的學生,教師可以根據上步提供的證據,按照有關規定懲罰.同時,教師可根據學生作業完成情況進行批改,結果反饋給學生.該系統實現了作業的自動提交與自動歸類,每次作業以題目的方式提交到指定的文件夾中.并通過抄襲檢測將存在電子抄襲行為的學生作業自動歸類到"異常"文件夾中,教師可以方便的從中找出修改文件名、拷貝他人代碼的抄襲者與被抄襲者.如果教師想查看學生本次作業的情況,可以在指定文件夾中,依次查看學生此次作業的源代碼,并在上面作批示,并將結果反饋給學生.
四、應用防抄襲編輯環境前后教學效果分析
在程序設計類課程中使用防抄襲編輯環境主要從兩方面防止程序作業的抄襲行為,提高教學質量.一方面利用技術手段防止最常見的抄襲行為發生,如拷貝外來編輯環境中的代碼和修改、編輯他人源文件; 另一方面是當學生提交代碼后對提交后的代碼進行相似性比對,找到逐行錄入和部分修改的抄襲行為.下面從使用防抄襲編輯平臺前后兩方面進行教學效果分析如下:
使用防抄襲編輯環境之前,教師布置完程序任務后,在指定時間收集學生的作業代碼,然后通過比對每兩個學生作業查看其抄襲情況.當學生人數較多時,通過人工的方式非常耗時、低效且缺少說服力.
使用防抄襲編輯環境之后,學生在指定時間提交作業代碼,作業自動歸類在指定文件夾中,經過初步篩選,將直接拷貝他人文件或修改文件名的抄襲代碼自動篩選出來,并將與其相關的學生信息及代碼放在指定的文件夾中,教師只要打開文件夾即可立即找到這些抄襲者.同時,對于逐行錄入他人代碼及簡單修改他人代碼的抄襲行為,借助抄襲檢測系統,對每對程序進行相似性比較,較快的找出所有程序集合中每對程序的相似代碼段并給出相似程度的參考值.這些結果都留有存檔,為下一步確認抄襲提供"證據".
以上述20 名學生一次 Java 程序設計課程實驗為例,對兩個班級學生同一個實驗題目,分別使用和未使用防抄襲環境進行了兩組實驗,實驗結果如表1 所示:
通過對比,使用防抄襲編輯環境從技術層面杜絕了最常見的電子抄襲行為,強迫學生必須自己動手去寫代碼.然而在寫代碼的過程中,學生有可能逐字地把別人的作業代碼錄入到防抄襲編輯環境中,或者錄入后做些簡單的修改,這些抄襲情況可以通過抄襲檢測系統得到較高的相似度,經過教師進一步的核對,加以證實.
通過上述實驗可以說明,使用防抄襲編輯環境減少了抄襲的發生,特別是最常見的電子抄襲行為的發生,通過加強和監督學生實驗過程,提高了學生編程水平.同時,使用防抄襲編輯環境大大減少了教師人工檢測抄襲的工作量,進一步提高了教學效率.
五、結 語
本文設計并實現了基于 Java 語言編程環境的防代碼抄襲編輯平臺,在這個平臺下學生可以編輯代碼并編譯后提交作業,教師可以檢測學生作業的完成情況,并根據檢測結果判斷學生作業抄襲情況.經過測試,本系統完全防止了拷貝代碼及重新給源文件命名的電子抄襲,也可以發現修改源程序的抄襲行為.
在程序設計類課程教學過程中,應用本系統,可以防止最常見的電子抄襲,可以對提交后的作業進行抄襲檢測,對有抄襲動機的學生起到威懾作用.同時幫助教師檢查學生作業完成情況,方便實現教師與學生編程教學互動,是提高教學效果的有利手段.
參考文獻:
[1] Edward J L. Metrics - based Plagiarism Monitoring[J].Journal of Computing Sciences in Colleges,2001,16 \\( 4\\) :253 - 261.
[2] 王春暉,劉東升,張麗萍. 防止學生程序代碼抄襲方法研究[J]. 內蒙古大學學報: 自然科學版,2010\\( 4\\) : 100 -103.
[3] A. Aiken. Moss: A System for Detecting Software Plagia-rism [EB / OL〗. http: / / theory. stanford. edu / ~ aiken /moss / ,2014 - 3 - 20.
[4] Lutz Prechelt,Guido Malpohl,Michael Philippsen. FindingPlagiarisms among a Set of Programs with Jplag[J]. Jour-nal of Universal Computer Science,2002,8 \\( 11\\) : 1016 -1038.
[5] 王春暉,程金宏,孟繁軍,等. 程序代碼相似性檢測技術在教學中的應用[J]. 計算機教育,2007\\( 12\\) :137 -139.