專利名稱:一種程序代碼編程模式著作權歸屬檢測模型及著作權歸屬檢測方法
技術領域:
本發明涉及一種編程模式及程序代碼著作權歸屬檢測方法。
背景技術:
程序代碼編程模式及著作權歸屬檢測方法在教育領域和軟件開發領域,如程序代碼抄襲檢測,軟件版權侵犯、著作權糾紛的判定,以及軟件維護,都有著重要的應用。現今在計算機教學中,尤其是在程序類課程設計中,大量存在著抄襲他人作業或者作品的行為。在完成上機編程任務或者在編程訓練考核中,被考核者抄襲他人程序代碼后,稍作修改甚至不做任何修改便拿來作為自主設計作品提交;或者在網絡上搜索他人已有的算法代碼,“復制-粘貼”到自己的程序中,這些學生程序設計中存在的抄襲現象是產生雷同代碼的一個重要原因。除了學生程序設計中存在的抄襲現象產生的雷同代碼之外,軟件企業中的未經授權的代碼重用也受到密切關注。由于一些軟件功能之間存在的共通性,使得某些軟件企業也存在程序代碼的非授權使用的現象,因此大型軟件系統中時有發生的抄襲、雷同現象,導致了軟件侵權案的不斷發生,給正當軟件公司造成了嚴重的影響和危害。無論是針對學生程序還是企業開發的軟件,采用人工的方法去查找雷同代碼,采用很費時,特別是程序非常多、或程序規模很大時,很難度量抄襲行為性質以及程度。判定程序代碼的著作權歸屬,即判定程序代碼的真正作者,就更加困難了。因此,提供自動的程序代碼代碼的雷同檢測及著作權歸屬判定具有重要的意義。同一個作者,或同一個企業的軟件開發人員,由于編程習慣或軟件開發實踐(如重用通用的框架、遵循特定的編程模式、以及拷貝-粘貼代碼),在解決同一類問題時,通常在編程過程中遵循特定的編程模式(如關鍵字、程序結構、處理思路等),因此,在同一種編程語言解決類似問題時,會產生類似的程序代碼。軟件維護中,開發人員修改了一段代碼,同樣需要對與該代碼有相同編程模式的程序代碼片段進行相似的修改,而開發人員很可能忽略了這些代碼片段。自動查找相似編程模式則可以有效緩解上述問題。雷同代碼由于存在抄襲現象,因此也具有相似的編程模式,挖掘兩個代碼集合中的相似的編程模式,則可以檢測出這兩個代碼集合中的雷同代碼。此外,如果能夠自動挖掘已知作者來源的程序代碼集合中的編程模式,則可以為著作權歸屬判定提供有效依據。如果給定代碼與某個作者的編程模式一致,則可能是該作者的代碼。綜上所述,如果能夠自動提取程序代碼中的編程模式,則可為程序代碼的雷同檢測、軟件維護、以及程序代碼的著作權歸屬判定奠定基礎。目前已有很多關于自然語言雷同文本的方法和工具,如Turnitin,但是這些方法和工具因忽視了程序代碼的編程語法,而不適合于分析程序代碼。目前也有一些檢測程序代碼中的雷同代碼的方法和工具。主要方法有屬性計數法和結構度量方法。
屬性計數法計算每一個程序的η個不同的軟件度量指標(如控制流、結構、數據依賴、嵌套深度、控制結構等),以便于將程序映射到一個η維的笛卡爾空間,然后考慮彼此鄰近的程序組可能為雷同程序。該方法存在的不足之處是拋棄了太多的程序結構信息,導致錯誤率太高,難于分析大規模程序;也無法有效檢測增加或刪除了部分語句的相似代碼。結構度量方法,如SIM,JPlag和MOSS等系統,在檢測雷同代碼時考慮了程序的結構信息。但存在以下不足之處通常檢測每一對程序的相似度來發現剽竊行為的,而不能有效定位出大規模程序集合中雷同的程序代碼片段;SIM,JPlag具有較高的計算復雜度無法分析大規模程序代碼。無論是屬性計數法還是結構度量(structure metrics)方法,均無法自動提取程序中的編程模式,均不考慮每個作者(程序開發人員或軟件公司)的歷史數據(已知作者來源的程序代碼),即使檢測出雷同代碼,也無法進一步判斷雷同代碼的著作權歸屬,即代碼 的真正作者。因此現在的程序代碼雷同檢測方法和工具存在不能有效提取大規模程序集合中的編程模式,以及不考慮每個作者的歷史數據,無法判定程序代碼的著作權歸屬的問題。
發明內容
本發明的目的是要解決現在的程序代碼雷同檢測方法和工具存在不能有效提取大規模程序集合中的編程模式,以及不考慮每個作者的歷史數據,無法判定程序代碼的著作權歸屬的問題,從而提出一種程序代碼編程模式著作權歸屬檢測模型及著作權歸屬檢測方法。一種程序代碼編程模式著作權歸屬檢測模型由已知著作權歸屬的程序代碼庫、查詢程序代碼、編程模式及其索引文件、編程模式挖掘器、著作權歸屬分析器和著作權歸屬度列表組成;所述的編程模式挖掘器對所述的已知著作權歸屬的程序代碼庫進行分析和轉換生成所述的編程模式及其索引文件,所述的著作權歸屬分析器對所述的查詢程序代碼進行分析,并在所述的編程模式及其索引文件中進行索引生成所述的著作權歸屬度列表。一種利用程序代碼編程模式著作權歸屬檢測模型的著作權歸屬檢測方法,具體是按以下步驟完成的一、首先利用編程模式挖掘器中詞法解析器對已知著作權歸屬的程序代碼庫中的程序代碼進行解析,生成標準化的token串;二、采用編程模式挖掘器中數字序列轉換器對標準化的token串執行字符串散列,計算所對應的hash值,將標準化的token串轉換為一個數字序列,然后劃分數字序列,將其轉換為序列數據庫;三、利用編程模式挖掘器中頻繁編程模式挖掘器對序列數據庫執行閉合頻繁子序列挖掘,頻繁編程模式挖掘器應用改進的BIDE數據挖掘算法,挖掘支持度大于2的頻繁子序列,所述的頻繁子序列對應于至少出現兩次的編程模式;四、利用編程模式挖掘器中編程模式索引分析器分析挖掘出的支持度大于2的頻繁編程模式,建立倒排索引文件,并將編程模式和倒排索引文件信息存入數據庫中,生成編程模式及其索引文件;五、以待確認著作權歸屬的程序代碼作為查詢程序代碼,利用查詢代碼編程模式解析器根據查詢程序代碼提供的信息進行分析和數字序列轉換,生成標準化的token串,再對標準化的token串執行字符串散列,計算所對應的hash值,將標準化的token串轉換為一個數字序列,得到的數字序列即為編程模式,劃分數字序列,將其轉換為數字序列集合,對生成的數字序列集合進一步分析,判定該數字序列集合中是否含有相同的數字序列,如果存在含有相同的數字序列,則去除重復的數字序列,進而得到無重復的編程模式集合,如果不存在含有相同的數字序列,則直接得到無重復的編程模式集合;六、利用著作權歸屬度計算器根據無重復的編程模式集合在編程模式及其索引文件進行檢索,得出無重復的編程模式集合在編程模式及其索引文件中出現的頻度,然
后按公式
權利要求
1.一種程序代碼編程模式著作權歸屬檢測模型,其特征在于程序代碼編程模式著作權歸屬檢測模型由已知著作權歸屬的程序代碼庫、查詢程序代碼、編程模式及其索引文件、編程模式挖掘器、著作權歸屬分析器和著作權歸屬度列表組成;所述的編程模式挖掘器對所述的已知著作權歸屬的程序代碼庫進行分析和轉換生成所述的編程模式及其索引文件,所述的著作權歸屬分析器對所述的查詢程序代碼進行分析,并在所述的編程模式及其索引文件中進行索引生成所述的著作權歸屬度列表。
2.根據權利要求1所述的一種程序代碼編程模式著作權歸屬檢測模型,其特征在于所述的已知著作權歸屬的程序代碼庫由程序代碼的著作權歸屬集合構成。
3.根據權利要求1所述的一種程序代碼編程模式著作權歸屬檢測模型,其特征在于所述的編程模式挖掘器由詞法解析器、數字序列轉換器、數字序列轉換器、頻繁編程模式挖掘器和編程模式索引分析器組成,利用詞法解析器對所述的已知著作權歸屬的程序代碼庫中的程序代碼進行解析,生成標準化的token串,采用數字序列轉換器對標準化的token串執行字符串散列,計算所對應的hash值,將標準化的token串轉換為一個數字序列,然后劃分數字序列,將其轉換為序列數據庫,利用頻繁編程模式挖掘器對序列數據庫執行閉合頻繁子序列挖掘,頻繁編程模式挖掘器應用改進的BIDE數據挖掘算法,挖掘支持度大于2的頻繁子序列,所述的頻繁子序列對應于至少出現兩次的編程模式,編程模式索引分析器分析挖掘出的支持度大于2的頻繁編程模式,建立倒排索引文件,并將編程模式和倒排索引文件信息存入數據庫中,生成所述的編程模式及其索引文件。
4.根據權利要求3所述的一種程序代碼編程模式著作權歸屬檢測模型,其特征在于所述的改進的BIDE數據挖掘算法是對BIDE算法進行了如下改進一、設置gap閾值和密度閾值,序列挖掘中允許序列中插入gap,使得算法可以檢測插入或刪除了部分語句的編程模式;二、研究將頻繁序列挖掘得到的數字序列結果與程序代碼相映射的方法,使得算法可以準確定位程序代碼。
5.根據權利要求1所述的一種程序代碼編程模式著作權歸屬檢測模型,其特征在于所述的著作權歸屬分析器由查詢代碼編程模式解析器和著作權歸屬度計算器組成,查詢代碼編程模式解析器根據所述的查詢程序代碼提供的信息進行分析和數字序列轉換,生成標準化的token串,再對標準化的token串執行字符串散列,計算所對應的hash值,將標準化的token串轉換為一個數字序列,然后劃分數字序列,將其轉換為數字序列集合,對生成的數字序列集合進一步分析,判定該數字序列集合中是否含有相同的數字序列,如果存在含有相同的數字序列,則去除重復的數字序列,進而得到無重復的編程模式集合,如果不存在含有相同的數字序列,則直接得到無重復的編程模式集合;利用著作權歸屬度計算器根據無重復的編程模式集合在編程模式及其索引文件進行檢索,得出無重復的編程模式集合在編 程模式及其索引文件中出現的頻度,然后按公式
6.利用權利要求1所述的一種程序代碼編程模式著作權歸屬檢測模型的著作權歸屬檢測方法,其特征在于一種利用程序代碼編程模式著作權歸屬檢測模型的著作權歸屬檢測方法是按以下步驟完成的一、首先利用編程模式挖掘器中詞法解析器對已知著作權歸屬的程序代碼庫中的程序代碼進行解析,生成標準化的token串;二、采用編程模式挖掘器中數字序列轉換器對標準化的token串執行字符串散列,計算所對應的hash值,將標準化的token串轉換為一個數字序列,然后劃分數字序列,將其轉換為序列數據庫;三、利用編程模式挖掘器中頻繁編程模式挖掘器對序列數據庫執行閉合頻繁子序列挖掘,頻繁編程模式挖掘器應用改進的BIDE數據挖掘算法,挖掘支持度大于2的頻繁子序列,所述的頻繁子序列對應于至少出現兩次的編程模式;四、利用編程模式挖掘器中編程模式索引分析器分析挖掘出的支持度大于2的頻繁編程模式,建立倒排索引文件,并將編程模式和倒排索引文件信息存入數據庫中,生成編程模式及其索引文件;五、以待確認著作權歸屬的程序代碼作為查詢程序代碼,利用查詢代碼編程模式解析器根據查詢程序代碼提供的信息進行分析和數字序列轉換,生成標準化的token串,再對標準化的token串執行字符串散列,計算所對應的hash值,將標準化的token串轉換為一個數字序列,得到的數字序列即為編程模式,劃分數字序列,將其轉換為數字序列集合,對生成的數字序列集合進一步分析,判定該數字序列集合中是否含有相同的數字序列,如果存在含有相同的數字序列,則去除重復的數字序列,進而得到無重復的編程模式集合,如果不存在含有相同的數字序列,則直接得到無重復的編程模式集合;六、利用著作權歸屬度計算器根據無重復的編程模式集合在編程模式及其索引文件進行檢索,得出無重復的編程模式集合在編程模式及其索引文件中出現的頻 度,然后按公式'
7.根據權利要求6所述的一種利用程序代碼編程模式著作權歸屬檢測模型的著作權歸屬檢測方法,其特征在于步驟一中所述的已知著作權歸屬的程序代碼庫由程序代碼的著作權歸屬集合構成。
8.根據權利要求6所述的一種利用程序代碼編程模式著作權歸屬檢測模型的著作權歸屬檢測方法,其特征在于步驟三中所述的改進的BIDE數據挖掘算法是對BIDE算法進行了如下改進一、設置gap閾值和密度閾值,序列挖掘中允許序列中插入gap,使得算法可以檢測插入或刪除了部分語句的編程模式;二、研究將頻繁序列挖掘得到的數字序列結果與 程序代碼相映射的方法,使得算法可以準確定位程序代碼。
全文摘要
一種程序代碼編程模式著作權歸屬檢測模型及著作權歸屬檢測方法,它涉及一種編程模式及程序代碼著作權歸屬檢測方法。本發明的目的是要解決現在的程序代碼雷同檢測方法和工具存在不能有效提取大規模程序集合中的編程模式,以及不考慮每個作者的歷史數據,無法判定程序代碼的著作權歸屬的問題。一種程序代碼編程模式著作權歸屬檢測模型由已知著作權歸屬的程序代碼庫、查詢程序代碼、編程模式及其索引文件、編程模式挖掘器、著作權歸屬分析器和著作權歸屬度列表組成。著作權歸屬檢測方法以待確認著作權歸屬的程序代碼作為程序代碼的編程模式的查詢程序代碼輸入,即可得到著作權歸屬度列表。本發明主要提供一種程序代碼的編程模式及著作權歸屬檢測方法。
文檔編號G06F21/12GK103020494SQ20121050866
公開日2013年4月3日 申請日期2012年12月3日 優先權日2012年12月3日
發明者王甜甜, 王克朝, 蘇小紅, 馬培軍 申請人:哈爾濱工業大學