本發(fā)明涉及代碼克隆檢測,具體涉及一種融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法。
背景技術(shù):
1、在智能合約開發(fā)中,開發(fā)者往往頻繁地重用代碼,以避免重復(fù)發(fā)明輪子并減少開發(fā)工作量。代碼復(fù)用可以幫助開發(fā)者加速api的學(xué)習(xí)曲線并提供快速的漏洞修復(fù),但同時(shí)可能會(huì)導(dǎo)致漏洞和缺陷的傳播,從而影響代碼庫的可靠性和可維護(hù)性。
2、為了減少代碼復(fù)用帶來的風(fēng)險(xiǎn),研究人員致力于檢測代碼克隆檢測。代碼克隆檢測,是指判斷兩個(gè)及以上程序中是否存在相同或相似的源代碼片段。根據(jù)代碼相似度不同,代碼克隆通常分為四類:1)完全一致的程序代碼;2)完全復(fù)用除空格、注釋、變量或函數(shù)重命名等之外的代碼;3)類型二的基礎(chǔ)上有少量代碼添加、修改、刪除操作的代碼;4)類型3基礎(chǔ)上發(fā)生大量代碼修改,保持語義相同的代碼。
3、近年來,研究者們已經(jīng)開發(fā)出眾多代碼克隆檢測技術(shù)與工具。為了支持用于開發(fā)智能合約的編程語言solidity,近期研究或?qū)σ延泄ぞ哌M(jìn)行擴(kuò)展,或根據(jù)智能合約特點(diǎn)提出新的檢測技術(shù)?,F(xiàn)有的智能合約代碼克隆檢測技術(shù)主要基于文本(text-based)、符號(hào)(token-based)、樹(tree-based)、圖(graph-based)等代碼表示方式進(jìn)行相似度比對。圖1為一種目前基于符號(hào)和基于圖的代碼克隆檢測的流程示意圖,包括:首先,對待檢測代碼進(jìn)行預(yù)處理,根據(jù)需要去除不感興趣的信息。進(jìn)一步,將代碼分別提取為符號(hào)序列和控制流圖表示。進(jìn)一步,通過相似度計(jì)算手段比較符號(hào)序列或控制流圖的相似性。進(jìn)一步,定義檢測閾值,將相似度超過閾值的文件對標(biāo)記為克隆。
4、其中基于符號(hào)表示的方法在發(fā)現(xiàn)類型1、類型2和類型3的克隆上效果很好,但難以發(fā)現(xiàn)類型4的克?。换趫D表示的方法可以有效發(fā)現(xiàn)類型4的克隆,但會(huì)產(chǎn)生大量誤報(bào),識(shí)別準(zhǔn)確率不高。
5、因此,本領(lǐng)域的技術(shù)人員致力于開發(fā)一種融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法,解決現(xiàn)有方法中存在的上述問題。
技術(shù)實(shí)現(xiàn)思路
1、鑒于現(xiàn)有技術(shù)的上述缺陷,本發(fā)明要解決的技術(shù)問題是如何通過融合符號(hào)表示和圖表示來發(fā)現(xiàn)代碼克隆,從而解決現(xiàn)有技術(shù)在識(shí)別智能合約代碼中語義克隆準(zhǔn)確性差的不足。
2、為實(shí)現(xiàn)上述目的,一種融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法,其特征在于,包括以下步驟:
3、將智能合約代碼數(shù)據(jù)集劃分為訓(xùn)練數(shù)據(jù)集和待檢測數(shù)據(jù)集,對訓(xùn)練數(shù)據(jù)集進(jìn)行人工標(biāo)注,得到人工標(biāo)注的代碼克隆結(jié)果;
4、將訓(xùn)練數(shù)據(jù)集中的代碼文件進(jìn)行兩兩配對,得到訓(xùn)練數(shù)據(jù)集的代碼文件對;
5、使用基于符號(hào)表示的代碼克隆檢測工具對訓(xùn)練數(shù)據(jù)集的代碼文件對進(jìn)行相似度計(jì)算,得到每一對代碼文件的基于符號(hào)表示的相似度;
6、使用每一對代碼文件的基于符號(hào)表示的相似度對訓(xùn)練數(shù)據(jù)集的代碼文件對進(jìn)行分組;
7、使用基于圖表示的代碼克隆檢測工具對分組后的每一組內(nèi)的代碼文件對進(jìn)行相似度計(jì)算,得到每一組中的各個(gè)代碼文件對的基于圖表示的相似度;
8、使用每一組中的各個(gè)代碼文件對的基于圖表示的相似度,結(jié)合人工標(biāo)注的代碼克隆結(jié)果,計(jì)算得到每一組后續(xù)用于基于圖表示的代碼克隆檢測工具的檢測閾值;
9、將待檢測數(shù)據(jù)集的代碼文件對預(yù)處理后得到第一克隆檢測結(jié)果,之后進(jìn)行分組和相似度計(jì)算,得到基于圖表示的相似度,結(jié)合每一組基于圖表示的代碼克隆檢測工具的檢測閾值,得到每一組內(nèi)的代碼文件對的第二克隆檢測結(jié)果;
10、匯總第一克隆檢測結(jié)果和每一組內(nèi)的代碼文件對的第二克隆檢測結(jié)果每一組內(nèi)的代碼文件對的克隆檢測結(jié)果,得到克隆報(bào)告;
11、根據(jù)克隆報(bào)告,當(dāng)有新的智能合約代碼缺陷被公布時(shí),發(fā)現(xiàn)在不同智能合約中復(fù)用的有缺陷代碼。
12、進(jìn)一步地,所述人工標(biāo)注的代碼克隆結(jié)果表示為訓(xùn)練數(shù)據(jù)集中的代碼文件兩兩是否互為克隆。
13、進(jìn)一步地,使用每一組中的各個(gè)代碼文件對的相似度,結(jié)合人工標(biāo)注的代碼克隆結(jié)果,計(jì)算得到每一組基于圖表示的代碼克隆檢測工具的檢測閾值,包括:
14、使用每一組中的各個(gè)代碼文件對的相似度,結(jié)合人工標(biāo)注的代碼克隆結(jié)果,計(jì)算每一組在以0.01為步長遍歷[0,1]區(qū)間中的每個(gè)值下的f1分?jǐn)?shù),選取每一組內(nèi)的最大f1分?jǐn)?shù)對應(yīng)的[0,1]區(qū)間中的值,作為每一組基于圖表示的代碼克隆檢測工具的檢測閾值。
15、進(jìn)一步地,將待檢測數(shù)據(jù)集的代碼文件對預(yù)處理后得到第一克隆檢測結(jié)果,包括:
16、將待檢測數(shù)據(jù)集的代碼文件進(jìn)行兩兩配對,得到待檢測數(shù)據(jù)集的代碼文件對;
17、使用基于符號(hào)表示的代碼克隆檢測工具對待檢測數(shù)據(jù)集的代碼文件對進(jìn)行相似度計(jì)算,得到每一對代碼文件的基于符號(hào)表示的相似度s1;
18、使用基于符號(hào)表示的代碼克隆檢測工具規(guī)定的閾值s_token與每一對代碼文件的相似度s1比較,如果s1大于s_token,判定這一對代碼文件為克隆,否則判定為非克隆,得到第一克隆檢測結(jié)果。
19、進(jìn)一步地,之后進(jìn)行分組和相似度計(jì)算,得到基于圖表示的相似度,包括:
20、根據(jù)得到的每一對代碼文件的基于符號(hào)表示的相似度s1對第一克隆檢測結(jié)果中非克隆對應(yīng)的代碼文件對進(jìn)行分組;
21、使用基于圖表示的代碼克隆檢測工具對分組后中的每一組內(nèi)的代碼文件對進(jìn)行相似度計(jì)算,得到基于圖表示的相似度s2。
22、進(jìn)一步地,每一組內(nèi)的代碼文件對的第二克隆檢測結(jié)果包括:
23、基于圖表示的相似度s2大于得到的每一組基于圖表示的代碼克隆檢測工具的檢測閾值,判定為克隆,否則判定為非克隆。
24、一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上存儲(chǔ)有計(jì)算機(jī)程序指令,所述計(jì)算機(jī)程序指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述任一項(xiàng)所述的融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法。
25、本發(fā)明采用基于符號(hào)表示的相似度對待檢測數(shù)據(jù)集的代碼文件對進(jìn)行分組,對分組后的每組代碼文件對選擇最適合的基于圖表示的智能合約代碼克隆檢測工具的閾值;與現(xiàn)有技術(shù)相比,本發(fā)明能夠?qū)χ悄芎霞s的語義克隆實(shí)現(xiàn)更準(zhǔn)確的檢測效果,同時(shí)減少不必要的基于圖表示的運(yùn)算,提高整體檢測效率,同時(shí)根據(jù)數(shù)據(jù)特性自適應(yīng)調(diào)整檢測閾值,提高檢測適應(yīng)性,具有良好的前瞻性和參考性。
26、與現(xiàn)有技術(shù)相比,本發(fā)明具有如下優(yōu)點(diǎn):
27、1.通過融合符號(hào)表示和圖表示的方式,本發(fā)明能夠更精準(zhǔn)地檢測出智能合約代碼中的語義克隆問題,彌補(bǔ)了現(xiàn)有技術(shù)在識(shí)別智能合約代碼中的語義克隆準(zhǔn)確性不足的缺陷。
28、2.通過對訓(xùn)練數(shù)據(jù)集的參數(shù)優(yōu)化過程,利用符號(hào)相似度指導(dǎo)圖檢測閾值的選擇,能夠根據(jù)具體的數(shù)據(jù)特性自適應(yīng)地調(diào)整閾值,提升了檢測的適應(yīng)性。
29、3.在符號(hào)相似度篩選的基礎(chǔ)上進(jìn)一步使用圖檢測方法,可以減少不必要的圖檢測運(yùn)算,提高整體檢測效率。
1.一種融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法,其特征在于,包括以下步驟:
2.根據(jù)權(quán)利要求1所述的融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法,其特征在于,步驟s1中,代碼克隆結(jié)果表示為訓(xùn)練數(shù)據(jù)集中的代碼文件兩兩是否互為克隆。
3.根據(jù)權(quán)利要求1所述的融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法,其特征在于,步驟s2中,使用每一組中的各個(gè)代碼文件對的相似度,結(jié)合步驟s1得到的代碼克隆結(jié)果,計(jì)算得到每一組基于圖表示的代碼克隆檢測工具的檢測閾值,具體包括:
4.根據(jù)權(quán)利要求1所述的融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法,其特征在于,步驟s3中,將待檢測數(shù)據(jù)集的代碼文件對預(yù)處理后得到第一克隆檢測結(jié)果,具體包括:
5.根據(jù)權(quán)利要求4所述的融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法,其特征在于,步驟s3中,之后進(jìn)行分組和相似度計(jì)算,得到相似度,具體包括:
6.根據(jù)權(quán)利要求1所述的融合符號(hào)表示和圖表示的智能合約代碼克隆檢測方法,其特征在于,步驟s3中,每一組內(nèi)的代碼文件對的第二克隆檢測結(jié)果包括: