申桂可
摘要 本篇論文針對c++代碼,研究抄襲檢測方法。通過觀察與統(tǒng)計分析,歸納出幾類常見的抄襲攻擊,并提出相對應的防范措施。我們運用文字分析、結構分析、變量分析等方法彌補單一方法的不足。最后,我們實現(xiàn)出檢測系統(tǒng)并且和現(xiàn)有的抄襲檢測系統(tǒng)比較,實驗結果顯示我們的系統(tǒng)明顯的比現(xiàn)有系統(tǒng)更能檢測各種抄襲的攻擊。
【關鍵詞】抄襲 檢測 c++
1 前言
現(xiàn)正處于信息電子化的時代,許多信息都可通過互聯(lián)網(wǎng)來取得,在互聯(lián)網(wǎng)上也常會出現(xiàn)許多相似的文件。因此,當學生為了繳交的作業(yè)或報告,可能通過互聯(lián)網(wǎng)去收集數(shù)據(jù),如此一來學生的作業(yè)或報告就可能有許多相似的地方,為了防止學生抄襲,我們必須要一一比對所有學生的作業(yè),找出這些相似的部分,將會是一個浩大的工程。如果有大量的程序需要做比對,以人工的方式來檢測將會是一個很龐大的工程,因此我們嘗試開發(fā)出一個不需以人工檢測的方式去比對,但卻具有以人工方式檢測的精準度的工具,來幫助我們解決這些問題。
2 C++抄襲檢測方法
本系統(tǒng)分析的方法分為三種,文字分析、結構分析、變量分析。文字分析的部分我們采用了winnowing algorithm來判斷文字相似度,結構分析部部分我們引用DCS Tree的方法,并且加入了function compare和classcompare,再來是變量部分我們采用了統(tǒng)計分析的方法來做變量相似度的計算。通過代碼正規(guī)化和roken屬性設置能將不同代碼的格式統(tǒng)一化,以利于文字分析。token屬性的設置有利于結構、變量、函數(shù)、類別的分析。函數(shù)、類別分析有助于文字分析的缺失的改善。
2.1 token定義和token屬性設置
一開始我們將讀進來的檔案先轉成一字串,在將字串的每一個token取出,取出之后我們將會設置token的屬性。
token的name代表token的名稱。type代表roken是屬于文字、數(shù)字、變量、參數(shù)、函數(shù)、類別。dataType代表token的數(shù)據(jù)型態(tài)是int、 long、double. short, floatbyte. char.String、bool、void。level代表token是在第幾階層。line代表token是在整個程序的第幾 行。range、statistical Simiarity、formatlonSimiarity主要用于變量、或參數(shù)。range代表此變量、或參數(shù)適用的范圍。StatisticalSimiarity用來記錄此變量、或參數(shù)的統(tǒng)計相似度。formationSimiarity用來記錄此變量、或參數(shù)的結構相似度。
function的name用來記錄funciton的名稱,dataType用來記錄function的數(shù)據(jù)型態(tài),level記錄此function在程序中的第幾層,line記錄此funciton開頭在第幾行,functionRange代表function的范圍。parameterList代表這個function所有參數(shù)的index。variableList代表這個function所有變量的index。
如果token是一個class時,我們將會以classtoken的方式來記錄所需要的信息。class的name用來記錄class的名稱,line記錄此class開頭在第幾行,classRange記錄class所包含的范圍,parameterList記錄class所有參數(shù)的index,variableList代表這個function所有變量的index,inheritancelndex表示class所繼承的class的index。childlndex記錄class被哪些class所繼承。funcitonList則記錄class里面的function。
2.2 文字分析
本論文研究的文字分析方法,采用的是Winnowing算法,而我們必須先定義幾個變量。
2.2.1 變量定義
Winnowing算法一開始會定義四個重要的變量:
(1)t:一個字串的長度。
(2)k:一個gram的長度。
(3) w: window的大小。
(4)g:gram與gram之間的間距。
2.2.2 算法流程
(1)設置變量:①k:k值必須滿足f1≤k≤t),k若超過字串的范圍則無法使用此算法,相對的,k值越小則計算出來的相似度則會明顯偏高,失去其代表的意義。因此k值的定義非常重要。②w:使用者可以依照文件大自行定義值。③g:g值必須滿足(1≤g≤k),若g值大于k則會造成某些數(shù)據(jù)會被遺漏掉。
(2)字串處理:將字串中空白的字元刪除,并將文字的中有大寫的部分全部轉成小寫。
(3)字串分割:將字串依照使用者定義的k作分割,分成一個一個gram。
(4) hash運算:將分好的gram使用hash函數(shù)產(chǎn)生一連串hash值。
(5)產(chǎn)生wmdow:將一連串計算好的hash值分別加進Wmdow里,產(chǎn)生一連串windOW。
(6)產(chǎn)生fingerprint:取出window中最小的值并記錄下其所在的位置,以方便之后辨別是否有重復取到同樣的值。
(7) fingerprint比對:比較兩個文件的fingerprint的相似度。
2.3 變量分析
此變量分析針對Kuo統(tǒng)計分析方法做改良,我們將不記錄變量名稱和數(shù)據(jù)型態(tài),原因是因為最基礎的抄襲攻擊就是變量名稱的更改,所以變量名稱就沒那么的重要。統(tǒng)計性記錄和結構性記錄仍然會保留下來,在此我們加入了變量所在代碼的比對,以確保統(tǒng)計性記錄和結構性記錄的誤判。
3 總結
系統(tǒng)具有多方面檢查方式,包括文字、結構及統(tǒng)計方法,讓檢測上更具客觀性,且能夠補足單一分析方法的不足。實驗結果也顯示,我們的系統(tǒng)較其他更能找出抄襲的部分,也減少許多誤判的概率。
參考文獻
[1]王育花.利用遠程稿件處理系統(tǒng)和AMLC鑒別可疑學術不端的方法[J].編輯學報,2017(01).
[2]王文福,網(wǎng)絡時代期刊論文隱形學術不端挖掘策略[J].中國科技期刊研究,2016 (07).
[3]陳志賢,學術不端防范中科技期刊編輯的主體意識[J].編輯學報,2015 (02).