葛文馨 魏永山



摘? 要: 為了檢測出數據庫實驗課程中結構化查詢語言(Structured Query Language, SQL)語句代碼的抄襲行為,發現因SQL語句篇幅較短,使用現有的技術進行代碼檢測卻沒有得到預期的結果,于是提出了一種基于編碼習慣的SQL語句抄襲檢測算法。獲取學生歷史的編碼數據并分類,判定待檢測代碼的類別并將其與之類別相同的代碼依照學生的編碼習慣進行特征提取,進而得到特征矩陣并對比代碼之間的相似程度,對涉嫌抄襲的代碼進行過濾,判斷該代碼是否為該學生編寫。實驗結果表明,該算法能夠有效地判斷出學生的抄襲行為,同時也解決因編碼篇幅較短而帶來的難以檢測是否為抄襲代碼這一問題。
關鍵詞: 編碼習慣;代碼抄襲檢測;樸素貝葉斯;SQL
【Abstract】: In order to detect the plagiarism of the SQL statement code in the database experiment course, it is found that the SQL statement is short, and the existing technology is used to detect the code but the expected result is not obtained. Therefore, a SQL statement plagiarism detection based on coding habit is proposed. Obtaining the classification data of the student history and classifying it, determining the category of the code to be detected and extracting the code with the same category according to the coding behavior of the student, thereby obtaining the feature matrix and comparing the degree of similarity between the codes, for the suspected plagiarism. The code is filtered to determine if the code was written for the student. The experimental results show that the algorithm can effectively judge the plagiarism of students, and also solve the problem that it is difficult to detect whether it is plagiarism code due to the short length of coding.
【Key words】: Coding behavior; Code plagiarism detection; Naive bayesian; SQL
0? 引言
隨著計算機技術的蓬勃發展,當今的教育模式也繼而發生著巨大的改變。現如今的教育模式已經不僅僅是過去那種傳統又單一的書本教育,而是逐漸發展成書本、互聯網等多元化的形式,在線教育也應運而生。學生可以在課程輔助網站上進行相應課程的練習,以鞏固提高在課堂上學習到的知識點。學生在網站上進行練習時會遇到需要編寫代碼才能完成的題目,該類題目設計的初衷是為了幫助學生掌握相關知識點,提高學生的編碼技能以及熟練程度。然而,隨著代碼共享以及復制粘貼的方法越來越容易,初衷卻越來越難以實現,反而抄襲的現象日益劇增,尤其是在學生和老師缺乏直接聯系的在線教育網站中,畢竟在網絡教育中難以對學生的做題過程進行監督,于是很難確定學生是否掌握此類知識,能否熟練準確地編寫出相應的代碼。為了能夠檢查出學生在做題的過程中是否存在抄襲行為,研究代碼抄襲檢測算法的學者與日俱增。他們提出多種不同的方法來對代碼進行分析,并開發出一些有效的代碼剽竊監測系統,而被廣為使用的系統如JPlag[1]、Moss[2]、YAP3[3]等均采用串對比算法,將源碼和執行流程進行處理轉換成字符,使用串對比的算法對這些轉換后的字符串進行相似度對比。國內外眾多學者對這些檢測系統中的算法進行改進,如Pawelczak等人[4]提出了一種基于源代碼標記的思想,使用貪婪字符串平鋪的方法對學生提交的代碼進行抄襲檢查;衛軍超[5]使用Jplag中的GST(Greedy String Tilling)算法,提出了一種基于屬性計數法和結構度量技術相結合的程序相似度計算方法;Wang等人[6]則是將Moss系統和抽象語法樹模型進行融合,對Verilog代碼進行剽竊檢測;文獻[7-9]都對Winnowing算法進行改進,使其能夠判定文本或程序是否存在抄襲現象;文獻[10]-[12]提出了不同的基于源碼結構的抄襲檢測系統,將程序源代碼轉換成帶有結構特征的特征串并進行匹配計算代碼之間的相似程度;文獻[13]則是基于文本的重復代碼的基礎上通過詞法分析并使用語法樹對代碼進行對比,篩選出重復的代碼。
由于現有的方法在對用戶編寫的代碼進行抄襲檢測時是將用戶所編寫的代碼與其他用戶編寫的代碼以及存在于網絡或書籍中的代碼進行相似度匹配,觀察該用戶是否存在抄襲行為。但是這些檢測方法都是僅僅考慮到代碼的語法特征,從而計算出的代碼之間的相似程度,并沒有將其與代碼的編碼規范進行結合,同時對于篇幅簡短的代碼檢測效果往往不太理想。于是本文是在現有的代碼抄襲檢測技術的基礎上,提出了一種基于編碼習慣的抄襲檢測的方法,使得抄襲檢測不再局限于檢測不同用戶在同一題目中所提交的代碼是否一致,提取該用戶的編碼習慣特征并進行分析,判斷該用戶所作答的代碼是否存在抄襲行為。實驗表明,本文提出的基于編碼習慣的抄襲檢測方法能夠對學生提交的代碼進行抄襲檢測,判斷出該代碼是否為該學生所編寫,進而提高抄襲檢測的準確率。
1? 基于編碼習慣的抄襲檢測算法
1.1? 編碼習慣
每個學生在編寫計算機程序源代碼時都會有一種獨有的編碼習慣。編碼習慣,又稱編碼風格,是指學生在編寫代碼的過程中習慣使用某種特有的書寫格式或內容。編碼習慣通常因編程語言的不同而不同,例如在編寫JAVA語言的源代碼所使用的編碼習慣和編寫SQL語言的源代碼所使用的編碼習慣會有很大的不同。
3? 結論
本文在現有的代碼抄襲檢測系統的基礎上,為了檢測出不同學生在編碼過程中是否存在抄襲行為而提出了一種基于編碼習慣的抄襲檢測算法,通過對學生歷史編碼的數據進行分類,并對學生提交的待檢測代碼進行類別判定,將同類代碼進行特征提取,進一步處理得到特征矩陣,并比較矩陣之間的相似程度。實驗結果表明,使用該方法能夠有效地檢測出抄襲代碼,有助于指導教師對學生的學習情況進行評估。
參考文獻
[1]Prechelt L, Malpohl G, Philippsen M. Finding Plagiarisms among a Set of Programs with JPlag[J]. J Universal Computer Science, 2000, 8(11): 1016-1038.
[2]Schleimer S, Wilkerson D S, Ailen A. Winnowing: local algorithms for document fingerprinting[C]//Proceedings of the 2003 ACM SIGMOD International Conference on Management of Data, San Diego, California, June 09-12, 2003. ACM Press, 2003: 76.
[3]Wise M J. YAP3: Improved Detection of Similarities In Computer Program And Other Texts[J]. ACM SIGCSE Bulletin, 1996: 28(1).
[4]Pawelczak D. Benefits and drawbacks of source code plagiarism detection in engineering education[C]//2018 IEEE Global Engi neering Education Conference (EDUCON), Tenerife, Islas Canarias, Spain, Apr. 17-20, 2018, IEEE, 2018: 1048-1056.
[5]衛軍超. 在線評測系統中代碼剽竊檢測技術的研究與實現[D]. 陜西: 西北農林科技大學, 2017.
[6]Lisheng Wang, Lingchao Jiang, Guofeng Qin. A Search of Verilog Code Plagiarism Detection Method[C]//2018 13th Inter national Conference on Computer Science & Education (ICCSE). Sri Lanka, Colombo, Aug. 8-11, 2018 IEEE, 2018: 1-5.
[7]趙萌萌. 基于數字指紋的文本抄襲檢測算法研究[D]. 浙江: 杭州電子科技大學, 2017.
[8]殷丹平. 基于CNN的代碼相似度檢測研究與代碼查重系統[D]. 北京: 北京郵電大學, 2018.
[9]段旭良, 楊洋, 王曼韜等. 一種擴展Winnowing剽竊檢測算法[J]. 計算機工程與科學, 2017, 39(12): 2245-2251.
[10]楊超. 基于多種技術的混合式程序代碼抄襲檢測方法[J]. 計算機工程與應用, 2016, 52(18): 222-227.
[11]Arabyarmohamady S, Moradi H, Asadpour M. A coding style-based plagiarism detection[C]//Proceedings of 2012 Inter national Conference on Interactive Mobile and Computer Aided Learning (IMCL). Amman, Jordan, Nov. 6-8, 2012, IEEE, 2012: 180-186.
[12]孫芬芬. 基于源碼結構相似度檢測系統的設計與實現[D]. 內蒙古: 內蒙古大學, 2017.
[13]劉偉,賓航飛,胡志剛. 一種改進的基于文本的重復代碼自動識別方法[J]. 軟件, 2018, 39(10): 68-73.
[14]李航. 統計學習方法[M]. 北京: 清華大學出版社, 2012.
[15]周志華. 機器學習[M]. 北京: 清華大學出版社, 2016.
[16]胡燕祝, 權桁, 艾新波. 復雜網絡全局拓撲相似度計算方法實證研究[J]. 軟件, 2015, 36(9): 16-20.
[17]劉宇帥, 高廣宇. 基于相似性判斷的廣告片段檢索[J]. 軟件, 2012, 33(10): 25-27.
[18]韓如冰, 葉得學. 基于VSM的權重改進文檔相似度算法研究[J]. 軟件, 2012, 33(10): 103-105.