關(guān)鍵詞:控制流圖;孿生網(wǎng)絡(luò)架構(gòu);代碼表征;語義相似性;克隆檢測中圖分類號:TP311 文獻標志碼:A 文章編號:1001-3695(2025)07-028-2132-09doi:10.19734/j. issn.1001-3695.2024.11.0441
Abstract:Toaddresstheissues of mising contextual information and weak semantic learning capabilities inexisting code clone detection methods,this paper proposedamethod basedonanenhancedcontrolflowgraph(ECFG)and twin network architecture.Firstly,itdesignedECFG,whichembeddedcross-nodecorelationedges tostrenghencontextualawareness. Then,itintroducedCGSMN,asemanticmatching modelbasedontwinnetworks.Thismodelintegratedamulti-headatntion mechanism to extractkeyinformationfromthenodes,thenimprovedtherelational graphatentionnetwork tocapture nternode associationsand generate graph feature vectors.Finall,it explored thesemanticrelationships between thesefeature vectorsandcomputedthesemanticsimilarity.Empirical evaluationwasconductedon tworepresentative datasets.Theresults show that,compared to methods such as ASTNN,F(xiàn)A-AST,and DHAST,the F1 -score on the BigCloneBench dataset improves by0.5 to15.5percentage points,andby1.5to16.5percentage pointsonthe GogleCode Jamdataset,demonstrating the effectiveness of the proposed method for semantic clone detection.
Key words:controlflow graph;siamese neural network;coderepresentation;codesemantic similarity;codeclonedetection
0 引言
近年來,開源文化的蓬勃發(fā)展催生了一系列以協(xié)作共享為理念的開發(fā)者社群,對軟件開發(fā)模式產(chǎn)生顛覆性改變[1],軟件代碼的復(fù)制、粘貼和修改等克隆模式成為一種普遍且高效的實踐。然而,這種便捷性背后隱藏著不容忽視的軟件安全危機。據(jù)《2024年開源安全和風險(OSSRA)報告)》2表明,部分軟件項目中,克隆代碼比例高達 50% ,且其中 84% 的代碼庫存在漏洞風險??寺〈a的普遍存在不僅放大了軟件開發(fā)中的冗余問題,甚至將缺陷代碼擴散至整個系統(tǒng),風險如滾雪球般的累積,嚴重威脅軟件的安全性和穩(wěn)定性。因此,克隆代碼的精準判別尤為重要。
Bellon等人[3]依據(jù)代碼克隆的相似度大小,將其劃分為四種類型:直接復(fù)制(類型一)、變量重命名(類型二)修改增刪語句(類型三)和語義相似但結(jié)構(gòu)迥異的變體(類型四)。從類型一到類型四,相似度逐漸降低,檢測復(fù)雜度由簡單的直觀匹配邁向更深層次的語義理解,精準檢測的難度逐步增加。近年來,針對前三類代碼克隆的研究已取得較為豐碩的成果[4\~7]。然而,隨著軟件工程任務(wù)日益復(fù)雜,語義相似但結(jié)構(gòu)迥異的克隆代碼(類型四)呈現(xiàn)出多樣性、復(fù)雜性,給克隆檢測帶來了新的挑戰(zhàn)。傳統(tǒng)檢測方法在處理語義等價而結(jié)構(gòu)形式多樣的情況時力有未逮,其檢測的準確性、有效性亟待深入研究[8]。鑒于此,探究代碼結(jié)構(gòu)與語義表達的關(guān)聯(lián)機理,捕捉代碼的深層信息,構(gòu)建具備語義學習力及辨析力的克隆檢測模型,對于實現(xiàn)復(fù)雜語義克隆的精準檢測具有極其重要的意義。
目前,代碼克隆檢測多以代碼表征與語義學習結(jié)合為研究視角[9,10]。在代碼表示方面:邏輯語義信息強調(diào)代碼執(zhí)行流程,是理解代碼功能語義的基礎(chǔ);數(shù)據(jù)依賴信息突出變量傳遞及跨語句關(guān)聯(lián),是理解代碼上下文語義的重點。綜合考量這兩方面的信息,是準確、全面表達代碼復(fù)雜語義的關(guān)鍵。研究[1]表明,控制流圖(controlflowgraph,CFG)作為一種用于描述語句執(zhí)行邏輯的代碼表示形式,能夠提供完整的代碼順序、分支和循環(huán)等邏輯語義信息,具有獨特的邏輯語義表達優(yōu)勢。然而,CFG本身僅關(guān)注語句間的直接控制關(guān)系,忽略了數(shù)據(jù)和變量依賴等跨語句的上下文關(guān)聯(lián)。例如,2.1.1節(jié)中的代碼語句,F(xiàn)ileifp σ=σ newFile(src)和fis.close分別表示文件流的創(chuàng)建和關(guān)閉,若不結(jié)合前者語句,后者的語義難以準確判定。這種上下文信息的缺失,限制了CFG在代碼語義表示上的表達能力。
此外,現(xiàn)有的代碼語義學習方法大多基于圖神經(jīng)網(wǎng)絡(luò)技術(shù),通過圖結(jié)構(gòu)的局部信息傳遞,學習節(jié)點和子圖特征,在簡單圖的表示上較為有效。然而,在處理語義相似但結(jié)構(gòu)迥異的代碼克隆時,單一的圖神經(jīng)網(wǎng)絡(luò)方法難以充分捕捉和學習深層語義特征,導(dǎo)致語義學習能力弱,且在判斷圖與圖間的相似性時,往往依賴于額外的度量方法,表現(xiàn)出語義相似度辨析能力不足的問題。而孿生網(wǎng)絡(luò)作為一種深度學習架構(gòu),融入了對比學習的思想,能夠優(yōu)化特征構(gòu)造,被廣泛應(yīng)用于機器視覺領(lǐng)域[12]。但代碼的語義與圖像“直來直往”的表達相比,更為隱晦且復(fù)雜多變。因此,基于淺層特征的孿生網(wǎng)絡(luò)模型,無法適用于代碼克隆檢測任務(wù)的深層語義學習及辨析。
為了解決上述問題,本文從表征優(yōu)化和語義學習視角出發(fā),提出了一種基于增強控制流圖與孿生網(wǎng)絡(luò)架構(gòu)的代碼克隆檢測方法ECFG-CGSMN。其主要貢獻為:
a)在代碼表示方面,提出一種增強控制流圖(enhancedcontrolflowgraph,ECFG)的代碼表示方法。該方法通過在控制流圖中嵌入節(jié)點間的跨節(jié)點關(guān)聯(lián)信息,強化控制流圖對上下文信息的感知,增強語義表示能力,并生成隱含代碼語法和語義信息的向量。
b)在語義學習方面,提出一種基于孿生網(wǎng)絡(luò)架構(gòu)的代碼語義匹配模型CGSMN(code graph semantic matchingnetwork)。模型設(shè)計基于孿生網(wǎng)絡(luò)的語義匹配架構(gòu),引人注意力機制獲取局部和全局語義特征,提升對復(fù)雜語義的捕獲能力;通過共享參數(shù)的訓(xùn)練策略,優(yōu)化語義特征空間分布,并聯(lián)合雙向長短期記憶網(wǎng)絡(luò)與多層感知機,進行語義匹配并計算語義相似度,增強語義辨析能力。
c)在BigCloneBench和GoogleCodeJam兩個開源數(shù)據(jù)集上進行實驗,并結(jié)合當前主要克隆檢測方法進行對比分析,驗證ECFG-CGSMN方法的有效性。
1相關(guān)工作
1.1 代碼結(jié)構(gòu)表征
代碼結(jié)構(gòu)表征旨在將源代碼的結(jié)構(gòu)及語義信息以抽象的形式呈現(xiàn),從結(jié)構(gòu)化的視角深入理解代碼的內(nèi)在邏輯和特性。當前,代碼結(jié)構(gòu)表征主要分為基于樹的結(jié)構(gòu)和基于圖的結(jié)構(gòu)兩類。
抽象語法樹(abstractsyntaxtree,AST)是一種較早用于描述代碼句法結(jié)構(gòu)的抽象表征結(jié)構(gòu),通過分層的樹狀結(jié)構(gòu)表達源代碼的語法信息。 CDLH[9] 是較早使用AST結(jié)構(gòu)的方法,它將程序的AST轉(zhuǎn)換為二叉樹后使用LSTM提取二叉樹中的代碼特征。ASTNN[13]方法將源代碼分解成tokens,并根據(jù)編程語言的語法規(guī)則將tokens組織成AST。雖然基于AST的表征方法描述了代碼的語法特征,但AST缺乏重要的語義特征,限制了此類方法的表現(xiàn)力和應(yīng)用范圍。
近年來,隨著圖結(jié)構(gòu)數(shù)據(jù)在自然語言處理領(lǐng)域中的廣泛應(yīng)用及優(yōu)異表現(xiàn),許多研究者開始關(guān)注基于圖的結(jié)構(gòu)表征方法。FA-AST[14]、DHEAST[15]、TreeCen[16]等方法通過為樹結(jié)構(gòu)添加依賴信息生成圖結(jié)構(gòu)。此類方法雖在一定程度上捕捉到語義關(guān)系,但通常依賴于特定規(guī)則將AST生成異構(gòu)圖,過程較為復(fù)雜,限制了其靈活性。EA-HOLMES[17]和CCGraph[18]等方法將代碼轉(zhuǎn)換為程序依賴圖(programdependence graph,PDG)。盡管PDG能夠直接通過代碼解析工具獲得,但它僅描述了語句間的依賴關(guān)系,沒有完整地呈現(xiàn)代碼塊內(nèi)語句的順序、分支和循環(huán)的結(jié)構(gòu)關(guān)系,而此類結(jié)構(gòu)關(guān)系是理解語句功能表達的重要上下文信息。 DeepSim[19] 和 SCDetector[20]等方法探索了基于CFG的代碼表征形式,并將部分CFG特征與其他形式的特征結(jié)合,實現(xiàn)代碼的語義表達。
綜上所述,CFG是一種豐富表達代碼邏輯語義信息的表征形式。然而,現(xiàn)有基于CFG的方法僅聚焦于其在邏輯結(jié)構(gòu)上的優(yōu)勢,忽視了它存在上下文信息缺失的問題。因此,優(yōu)化CFG,進一步探究其在代碼表征上的有效性,具有較強的學術(shù)價值。
1.2 代碼克隆檢測
代碼克隆檢測作為軟件工程領(lǐng)域中重要的研究任務(wù),在軟件開發(fā)、維護以及優(yōu)化等多方面扮演著關(guān)鍵角色。當前,代碼克隆檢測研究主要分為傳統(tǒng)算法的方法和深度學習的方法兩類。
傳統(tǒng)算法的方法先將源代碼轉(zhuǎn)換為一種便于分析的形式(字符、解析樹、程序依賴圖等),后計算不同代碼片段之間的相似度。Roy等人[4提出Nicad方法,將代碼看作文本并使用LCS(longestcommonsubsequence)算法逐行比對代碼。Kamiya等人[5]提出CCFinder方法,使用后綴樹匹配算法判斷克隆關(guān)系。DECKARD方法[21]使用局部敏感哈希算法匹配子樹進行克隆檢測。
深度學習的方法將源代碼轉(zhuǎn)換為中間表示,再利用神經(jīng)網(wǎng)絡(luò)模型提取特征,并計算特征向量間的相似度。Li等人[22]提出CCLearner方法,首次利用神經(jīng)網(wǎng)絡(luò)訓(xùn)練tokens并對其進行相似性分析。Zhang等人[13]提出ASTNN,使用雙向RNN提取分割后的AST特征,進行克隆檢測。此類方法雖實現(xiàn)代碼的批處理,但仍難以檢測類型四語義克隆。Wei等人[9]提出了CDLH方法,采用長短期記憶網(wǎng)絡(luò)(long short-termmemory,LSTM)挖掘詞法和句法信息。Zhao等人[19]提出DeepSim方法,基于CFG來構(gòu)建語義特征矩陣,并利用前饋神經(jīng)網(wǎng)絡(luò)構(gòu)造空間向量。Fang等人[23]融合AST中句法特征和CFG中語義特征,并運用深度神經(jīng)網(wǎng)絡(luò)進行克隆檢測。此類方法通過融合CFG語義和其他特征,雖能夠檢測簡單的語義克隆,但由于捕獲語義信息不全,其檢測精確度有較大的提升空間。Wu等人[20]提出 SCDetector方法,融合 tokens 和CFG 特征,構(gòu)建基于門控循環(huán)單元(gatedrecurrentunit,GRU)的孿生網(wǎng)絡(luò)架構(gòu)模型,進行語義克隆檢測。Mehrotra等人[17]提出EA-HOLMES方法,簡化PDG的節(jié)點和邊信息,并結(jié)合注意力與孿生網(wǎng)絡(luò)架構(gòu)設(shè)計克隆檢測模型,對代碼的相似性進行度量等。
綜上所述,傳統(tǒng)算法的方法高度依賴精確的模式定義,泛化性不佳且語義學習和辨析效果有限,逐漸被基于深度學習的方法替代。深度學習的方法試圖通過神經(jīng)網(wǎng)絡(luò)挖掘代碼的語義特征,但其基礎(chǔ)模型架構(gòu)往往難以表征代碼中的交互信息,復(fù)雜語義學習能力較弱[24]。因此,探究基于深度學習的模型優(yōu)化方法,強化代碼語義學習及辨析,具有較強的理論意義及實際價值。
2 方法設(shè)計
有效表征代碼結(jié)構(gòu)、準確辨析語義是代碼檢測任務(wù)中的兩個關(guān)鍵挑戰(zhàn)[25]。控制流圖雖可表達代碼的邏輯語義,但忽視了語句間的跨節(jié)點依賴關(guān)系,而此類跨依賴關(guān)聯(lián)是理解代碼語義,有效表征代碼結(jié)構(gòu)不可或缺的要素。同時,現(xiàn)有語義學習方法仍需進一步強化語義學習及辨析能力,以應(yīng)對復(fù)雜語義克隆挑戰(zhàn)。針對以上問題,本文從表征優(yōu)化和語義學習優(yōu)化的視角出發(fā),提出一種基于增強控制流圖與孿生網(wǎng)絡(luò)架構(gòu)的代碼克隆檢測方法,其整體框架如圖1所示。
該方法主要由兩個部分組成:a)增強控制流圖(ECFG)的圖結(jié)構(gòu)表示。首先對克隆代碼片段進行預(yù)處理,分析代碼語義與結(jié)構(gòu)關(guān)聯(lián)的機理,在控制流圖中嵌人數(shù)據(jù)依賴關(guān)系,生成ECFG,以增強跨語句關(guān)聯(lián)信息。其次對ECFG進行規(guī)范化處理,生成圖數(shù)據(jù)。b)基于孿生網(wǎng)絡(luò)架構(gòu)的CSGMN模型。模型由節(jié)點特征表征層、圖嵌入表征層、語義匹配層、計算相似度四個模塊構(gòu)成。節(jié)點特征表征層引人多頭注意力機制,捕捉節(jié)點中的關(guān)鍵tokens,生成與節(jié)點相對應(yīng)的局部語義表征。圖嵌人表征層結(jié)合節(jié)點之間的關(guān)聯(lián)信息,構(gòu)建關(guān)系圖注意力網(wǎng)絡(luò),生成融合局部與全局結(jié)構(gòu)信息的圖語義向量。圖語義匹配層由雙向長短期記憶網(wǎng)絡(luò)和多層感知機組成。雙向長短期記憶網(wǎng)絡(luò)并行處理兩個圖語義向量,以捕捉更豐富的圖語義信息,生成一個聯(lián)合向量;多層感知機主要計算聯(lián)合向量之間的相似度,以此檢測是否屬于克隆。
2.1增強控制流圖的圖結(jié)構(gòu)表示
CFG雖能完整表達代碼的邏輯語義信息,但跨語句依賴關(guān)聯(lián)隱性表達或不表達,導(dǎo)致可能忽視關(guān)鍵的上下文語義信息,限制了代碼語義的理解[26],而數(shù)據(jù)依賴關(guān)系能夠突出表達跨語句關(guān)聯(lián)信息。因此,本文從優(yōu)化代碼結(jié)構(gòu)表示的視角出發(fā),針對控制流圖存在上下文信息缺失的問題,提出一種增強控制流圖的結(jié)構(gòu)表示方法。
2.1.1構(gòu)建ECFG
本文研究發(fā)現(xiàn),DDG(datadependencegraph)結(jié)構(gòu)通過描繪變量之間的依賴鏈,涵蓋了數(shù)據(jù)流動過程中的關(guān)鍵上下文信息,能有效呈現(xiàn)跨越多個節(jié)點的數(shù)據(jù)依賴關(guān)系。為此,本文以CFG為基礎(chǔ)圖結(jié)構(gòu),嘗試在保證其邏輯語義完整性的同時,抽取DDG中的數(shù)據(jù)依賴關(guān)系,從而彌補其在跨節(jié)點依賴關(guān)系表達上的缺陷。當前,用于構(gòu)建代碼圖結(jié)構(gòu)的開源工具主要有Javalang、Joern、Angr以及Progex等。Progex在構(gòu)建圖結(jié)構(gòu)時,所構(gòu)建CFG與DDG中節(jié)點所承載的代碼語句高度一致,可為依賴關(guān)系的挖掘和增強提供堅實基礎(chǔ)。
鑒于此,本研究以Progex為基礎(chǔ),構(gòu)建增強控制流圖(en-hancedcontrol flowgraph,ECFG),其方法如下:
首先,使用Progex對源代碼進行解析,分別生成源代碼的CFG和DDG,以CFG作為基本的圖結(jié)構(gòu)。其次,提取DDG中的數(shù)據(jù)依賴關(guān)系邊,將其嵌入基礎(chǔ)圖結(jié)構(gòu)中,生成ECFG。這既充分發(fā)揮了CFG能夠完整描述代碼塊內(nèi)語句順序、分支和循環(huán)結(jié)構(gòu)關(guān)系的優(yōu)勢,又解決了基于CFG的代碼結(jié)構(gòu)表示缺失跨節(jié)點關(guān)聯(lián),導(dǎo)致上下文信息不全的問題。以圖2所示克隆代碼塊為例,本文構(gòu)建的ECFG結(jié)構(gòu)如圖3所示。
圖2是表示復(fù)制功能的克隆代碼塊,圖3為該克隆代碼塊對應(yīng)的增強控制流圖結(jié)構(gòu)。在圖3中,每個節(jié)點代表一個語句,節(jié)點間通過兩種類型邊相連,實線為控制流邊,虛線為數(shù)據(jù)依賴邊。詳細的增強控制流圖構(gòu)建過程如算法1所示。
算法1構(gòu)造增強控制流圖算法
輸入:控制流圖 GC=(Vc,Rc) ;數(shù)據(jù)依賴圖 。
輸出:增強控制流圖 。
def function_MultiDiGraph( {GC,GD) :GH=nx MultiDiGraphfor vi , vj in GC . edges:GH .add_node (vi) (204號TH.addd-node(vj) (204 for vi , vj m GD . edges:if not GH
return GH
構(gòu)造增強控制流圖算法的說明如下:
a)算法輸入為控制流圖 Gc 的節(jié)點集合 Vc 、邊集合 Rc 和數(shù)據(jù)依賴圖 Gp 的節(jié)點集合 VD 、邊集合 RD ;輸出為增強CFG GH 。
b)定義一個函數(shù)MultiDiGraph( Gc , Gp )用于構(gòu)造增強控制流圖,該函數(shù)包含兩個輸入?yún)?shù):控制流圖 GC 和數(shù)據(jù)依賴圖 GD 。
c)首先,通過NetworkX庫創(chuàng)建一個空的多重有向圖 GH 以存儲增強控制流圖。其次,遍歷控制流圖 GC 中所有的邊(vi,vj) ,獲取起始節(jié)點 vi 和終止節(jié)點 vj ,作為 GH 的節(jié)點,并獲取節(jié)點間的邊,將邊的屬性 r 設(shè)置為0,以標記控制流邊。最后,遍歷數(shù)據(jù)依賴圖 Gp 的所有邊 (vi,vj) ,檢查 G?H 中是否已存在從 vi 到 vj 的邊,如不存在,添加節(jié)點間的邊,將邊的屬性設(shè)置為1,以標記數(shù)據(jù)依賴邊,反之,則不添加。
在獲取數(shù)據(jù)依賴邊的過程中,本文發(fā)現(xiàn)在DDG結(jié)構(gòu)中,兩個語句間可能存在多個變量的數(shù)據(jù)依賴關(guān)系,而本文增強控制流圖,旨在發(fā)揮控制流圖中邏輯語義信息優(yōu)勢的基礎(chǔ)上,彌補其跨節(jié)點關(guān)聯(lián)信息缺失的問題,且本文認為過于詳細的數(shù)據(jù)流關(guān)系反而會增強圖數(shù)據(jù)處理的難度,影響克隆檢測效果。因此,在構(gòu)建ECFG時,僅采用單條數(shù)據(jù)依賴關(guān)系邊,以表達原CFG結(jié)構(gòu)中缺失的跨節(jié)點關(guān)聯(lián)。
2.1.2圖結(jié)構(gòu)表示規(guī)范化
ECFG的圖結(jié)構(gòu)表示需將其規(guī)范化處理為標準的圖數(shù)據(jù),才可作為深度學習模型的輸入數(shù)據(jù)。圖結(jié)構(gòu)表示規(guī)范化包括圖節(jié)點特征向量化和圖特征提取兩個方面。
針對圖節(jié)點特征,本文采用 InferCode[27] 生成 ECFG的節(jié)點代碼行的初始特征向量。相較于傳統(tǒng)的嵌入方法而言,InferCode是一種利用深度學習技術(shù)表示代碼的結(jié)構(gòu)和語義的方法[28]。InferCode借鑒 Doc2Vec 的思想,將代碼塊轉(zhuǎn)換為對應(yīng)的AST文檔,將AST子樹視為文檔中的詞匯單元,通過對子樹預(yù)測,構(gòu)建針對代碼片段的編碼模型。對于給定代碼塊集合,InferCode生成AST集合 {T1,T2,…,Tn},Ti 為代碼生成的樹集, Tij 為樹 Ti 的子樹。InferCode訓(xùn)練目標為計算最大化子樹在上下文中出現(xiàn)的概率 P 。 Pi 為最大化子樹 Tij 在 Ti 上下文中出現(xiàn)的概率和,其計算方法如式(1)所示。
針對圖結(jié)構(gòu)特征,本文構(gòu)建鄰接矩陣 ADG 表示ECFG的圖結(jié)構(gòu)特征。將每條邊視為一個包含起始節(jié)點、鄰接節(jié)點以及邊類型的三元組。其中,起始節(jié)點和鄰接節(jié)點從ECFG中提取,邊類型分為控制依賴邊和數(shù)據(jù)依賴邊兩類。
經(jīng)過上述處理后得到節(jié)點特征與圖特征,構(gòu)成標準的圖結(jié)構(gòu)數(shù)據(jù)。
2.2基于孿生網(wǎng)絡(luò)架構(gòu)的CGSMN模型
當前的克隆檢測模型大多基于圖神經(jīng)網(wǎng)絡(luò)技術(shù)對代碼進行語義學習及辨析[29],然而,此類方法仍面臨挑戰(zhàn)。一方面語義捕獲能力不足。單一的圖神經(jīng)網(wǎng)絡(luò)方法對復(fù)雜語義特征的學習有限,生成的圖語義向量與真實語義存在偏差,難以準確表征代碼的語義。另一方面語義相似度辨析困難。在處理圖與圖之間的語義相似度時,依賴于額外的度量方法,空間向量分布的優(yōu)化能力不足,難以準確辨析細微的語義相似性。而孿生網(wǎng)絡(luò)架構(gòu)核心在于細粒度的捕捉和跨結(jié)構(gòu)關(guān)聯(lián)的建模,這一特點為克隆檢測模型提供了進一步強化語義特征表達和相似性辨析的新思路。為此,本文從優(yōu)化語義學習及相似性辨析視角出發(fā),提出一種基于孿生網(wǎng)絡(luò)架構(gòu)CGSMN模型,與優(yōu)化代碼表示視角進行有效互補。
2.2.1節(jié)點特征表征層
節(jié)點特征表征層聚焦節(jié)點內(nèi)部關(guān)鍵語義特征,優(yōu)化局部語義信息。首先,對每個節(jié)點內(nèi)部的token應(yīng)用共享的注意力機制,計算每個token的注意力系數(shù)。其次,根據(jù)注意力系數(shù)進行節(jié)點嵌入。具體地,節(jié)點由多個token組成,每個token的特征表示為 νi ,其中 i 是token的索引。節(jié)點的特征矩陣 Vn∈ R,其中Ta是節(jié)點中token的數(shù)量,F(xiàn)為每個token的特征維度。首先,對每個token應(yīng)用共享的注意力機制,計算注意力系數(shù) attt :
attt=f(?Wνt)=aT(?Wνt)
其中:函數(shù) f(?) 是一個共享注意力函數(shù),以token的特征向量νt 作為輸入,并通過權(quán)重矩陣 W∈RF×F′ ,將輸人特征 νt 映射到向量空間。其中 F 表示輸入特征向量維度, F′ 表示映射后的特征向量維度。輸出注意力權(quán)重 attt ,經(jīng)過softmax函數(shù)進行歸一化處理,以衡量每個token的相對重要性:
其中:歸一化的注意力系數(shù) at 用于計算每個token的相對重要性。在節(jié)點嵌人過程中,本文采用多頭注意力機制,以捕獲代碼結(jié)構(gòu)的多層次語義特征。具體而言,將節(jié)點的token轉(zhuǎn)換為節(jié)點的嵌入向量 Hi ·
Hi=concat(h1,h2,…,hk)W0
其中: W0∈RF×K′ 用于將多頭注意力機制的輸出,映射到所需嵌入維度的權(quán)重矩陣; k 表示注意力的數(shù)量。每個注意力頭 hi 學習不同的注意力權(quán)重:
其中: Wi 是每個注意力頭的權(quán)重矩陣; ati 是第 χi 個注意力頭對token χt 計算得到的注意力系數(shù): σ?σt 是節(jié)點中的 token 特征向量。
2.2.2圖嵌入表征層
經(jīng)過節(jié)點注意力層得到節(jié)點特征集合 H 本文基于改進的關(guān)系圖注意力網(wǎng)絡(luò),捕捉節(jié)點間的上下文信息,優(yōu)化全局語義信息。
首先,本文對節(jié)點向量和邊向量采用共享注意力機制,得到注意力系數(shù) attuiv
attuiv=f(Whu,Wri,Whv)
其中: W∈RF×F′ 為特征轉(zhuǎn)換權(quán)重矩陣 ?;f(???) 為共享注意力函數(shù),以節(jié)點向量 huAv 和邊向量 ri 作為輸人,計算注意力系數(shù)attuiv 。然后,對轉(zhuǎn)換后的節(jié)點特征和邊特征進行拼接,并通過softmax函數(shù)進行歸一化,得到歸一化的值 auiv
其中: Nu 表示節(jié)點 u 的鄰接節(jié)點集合; Ruz 是節(jié)點與其相連節(jié)點z 之間的特定依賴關(guān)系類型。不同的依賴關(guān)系類型,表達了節(jié)點間不同的結(jié)構(gòu)關(guān)系。根據(jù)依賴關(guān)系類型的不同,計算節(jié)點 u 對其鄰接節(jié)點 v 的注意力權(quán)重。在計算完注意力權(quán)重后,本文結(jié)合多頭注意力機制,將鄰接節(jié)點的特征與對應(yīng)的依賴關(guān)系特征相融合,并與注意力權(quán)重相乘,從而更新節(jié)點特征向量 hu′ ·
其中: σ1 為非線性激活函數(shù)ELU(exponentiallinearunit),以提高模型表達能力; 表示對 K 個注意力頭的輸出進行拼接操作。
為進一步提升模型的語義表征能力,以及訓(xùn)練和推理過程中的效率。本文構(gòu)建在圖嵌入表征層引入邊池化層。邊池化層通過節(jié)點與邊特征的結(jié)合來計算每條邊的重要性得分 suv :
其中 σ:hu 和 hv 分別為節(jié)點 u 和 v 特征向量; rw 是邊 (u,v) 的特征向量; 表示特征拼接。根據(jù)計算出的邊的重要性得分,從而得到新的節(jié)點向量 huv
huv=suv(hu+hv)
最后,采用全局注意力機制,整合多層節(jié)點特征,生成全局圖嵌入 Ci :
其中: hi 是節(jié)點 χi 的特征向量; aiglobal 是通過全局注意力機制得到的加權(quán)系數(shù),反映了每個節(jié)點在全局圖嵌人中的重要性。將ai 和 hi 進行加權(quán)組合,最終生成代碼圖的全局語義嵌人表示。
2.2.3 語義匹配層
經(jīng)過圖嵌入表征后的代碼語義信息,表現(xiàn)出節(jié)點間強依賴性和上下文關(guān)聯(lián)。盡管Transformer等模型在捕捉全局依賴關(guān)系上表現(xiàn)優(yōu)異,但其位置編碼機制僅提供位置信息,缺乏BiLSTM所具備的雙向上下文捕捉能力[30]。而代碼獨特的語義結(jié)構(gòu),往往依賴于前后文的緊密關(guān)聯(lián),準確表達語義。為此,本文構(gòu)建一對雙向長短期記憶神經(jīng)網(wǎng)絡(luò)單元,提取嵌入向量中的雙向語特征。如圖2所示,BiLSTM接收全局圖嵌入向量對 Ci 和 Cj
分別從前向和后向兩個方向?qū)D嵌入向量對進行處理,獲取雙向上下文信息后,將前向和后向的隱藏狀態(tài)拼接:
其中: hBiLSTM 是最終表示代碼片段之間的雙向語義關(guān)系的隱藏向量。
2.2.4計算相似度
獲得雙向語義關(guān)系的隱藏向量 hBiLSTM 后,將其傳遞至多層感知機(MLP)進行線性變換。將高維語義表示映射到二分類的結(jié)果空間,輸出克隆代碼的預(yù)測結(jié)果
最后,由于克隆檢測任務(wù)中,正負樣本之間存在顯著不平衡,本文改進焦點損失,設(shè)計損失函數(shù) Lc ,使得模型更加關(guān)注到難以分類的復(fù)雜語義克隆代碼,其定義為
其中: N 表示訓(xùn)練批次大??; BCE- loss表示二元交叉熵損失函數(shù); yi 和 分別代表第 χi 個樣本的真實標簽和預(yù)測值; γ 為調(diào)節(jié)因子,用于減少易分類樣本對總損失的貢獻; α 為平衡因子,用于權(quán)重調(diào)整。此外,引入指數(shù)項,引導(dǎo)模型有針對性地學習難以檢測的克隆代碼的深層語義。進一步,通過比較預(yù)測概率和真實標簽之間的差異,不斷優(yōu)化語義空間中的位置,提升模型的分類性能。
3 實驗研究
3.1 實驗數(shù)據(jù)集
本文數(shù)據(jù)集采用在真實代碼創(chuàng)作環(huán)境中收集的兩個數(shù)據(jù)集Google Code Jam(GCJ)[31]和 BigCloneBench(BCB)[32]
GCJ是Google每年舉辦的國際編程大賽所收集的數(shù)據(jù)集,包含了1669個針對12個不同競賽題目提交的Java文件。在實際競賽中,解決同一競賽題目的多個項目通常具有相似的功能,而解決不同競賽題目的項目則具有不同的功能。因此,本文認為GCJ數(shù)據(jù)集屬于Type-4類語義克隆數(shù)據(jù)集,并假設(shè)同一競賽問題下的代碼片段對被視為語義克隆對,而不同競賽問題下的代碼片段對則被視為虛假克隆對。
BCB是一個廣泛使用的大型克隆測試集,包含了從25000個系統(tǒng)中收集到的超過600000個真實克隆對和26000個虛假克隆對。與GCJ相比,BCB根據(jù)語句級別的相似度分數(shù)將克隆劃分為四種類型。為了更清晰地界定Type-3和Type-4類型,BCB進一步將Type-3類型細分為強、中等、弱這三種具體類型。表1匯總了BCB數(shù)據(jù)集中不同克隆類型的分布情況。根據(jù)表中數(shù)據(jù),在BCB數(shù)據(jù)集中,弱類型三和類型四代碼克隆的比例高達 98.23% ,這意味著BCB數(shù)據(jù)集主要包含語義代碼克隆,因此非常適合用于評估語義代碼克隆檢測方法。
通過對這兩個數(shù)據(jù)集的分析,GCJ數(shù)據(jù)集提供了一個基于實際競賽問題的代碼片段對比,而BCB數(shù)據(jù)集則通過詳細分類提供了一個更細粒度的克隆檢測評估環(huán)境。兩者結(jié)合可為語義代碼克隆檢測提供全面的實驗和評價基礎(chǔ)。
3.2 評價指標
本文采用三個關(guān)鍵性能指標來評估模型在實驗中的表現(xiàn),分別是精準率(precision)、召回率(recall)以及 F1 指數(shù)( F1 score),表達式如下所示。
其中:precision用于衡量模型正確識別正例的能力,而recall則側(cè)重于評估模型能夠涵蓋多少實際正例的能力。由于單獨使用精確率或召回率難以全面反映模型的實際性能,所以引入了F1 值,能夠更全面地評估模型在代碼克隆檢測任務(wù)中的表現(xiàn)。
3.3 實驗設(shè)置
本文實驗配置為Ubunru20.04系統(tǒng)、 $\mathrm { X e o n } ^ { \textcircled { \otimes } } ~ 8 2 5 5 \mathrm { C } ~ @$ 2.50GHz 處理器、RTX3080、10GB顯卡,使用PyTorch(版本1.12.0)框架,通過 Lc 損失函數(shù)和Adam自適應(yīng)梯度方法對模型參數(shù)進行優(yōu)化,以 8:1:1 的比例劃分訓(xùn)練集、驗證集以及測試集。實驗具體參數(shù)設(shè)置如表2所示。
為保證每個節(jié)點嵌入都能捕獲足夠的上下文關(guān)聯(lián)依賴關(guān)系,節(jié)點表征層注意力頭數(shù)設(shè)置為4。圖嵌入特征層的注意力頭數(shù)設(shè)置為16,以盡量符合實際圖結(jié)構(gòu)中的節(jié)點數(shù)量。γ設(shè)置為2,以增強模型對難分類樣本的學習能力。
3.4對比模型
本文使用以下廣泛應(yīng)用的基準模型作為對比來評估所提出方法的效果。
DECKARD[20]是早期克隆檢測工具的經(jīng)典代表,通過歐氏距離對AST的子樹進行聚類來檢測代碼克隆。
CDLH[8]通過LSTM(long short-term memory)來表征代碼片段,將代碼片段映射到高維向量空間,通過哈希技術(shù)實現(xiàn)代碼的匹配。
DeepSim[18]從CFG中手動提取具有語義特征的語義矩陣,進而利用前饋神經(jīng)網(wǎng)絡(luò)模型學習矩陣的向量表示,強調(diào)了代碼的功能相似性。
SCDetector[19]融合token和CFG信息,并通過孿生GRU 網(wǎng)絡(luò)模型進行語義克隆檢測。
ASTNN[13]對語句的AST子樹進行編碼,隨后將所有編碼過的語句樹輸入RNN中,獲得克隆代碼的向量表示。
FA-AST[14]通過添加控制流邊構(gòu)造流增強型AST,并使用圖神經(jīng)網(wǎng)絡(luò)進行代碼克隆檢測。
DEHAST[15]通過在不同層次添加相應(yīng)的依賴增強邊,構(gòu)建含有語義信息的異構(gòu)圖后,使用圖匹配網(wǎng)絡(luò)進行克隆檢測。
TBCCD[33]融合結(jié)構(gòu)信息和詞法信息,利用樹的卷積網(wǎng)絡(luò)來檢測語義克隆。
EA-HOLMES[17]聯(lián)合學習圖表示和圖匹配函數(shù)來計算圖相似性以實現(xiàn)語義克隆檢測。
3.5 對比實驗
各基準模型的實驗結(jié)果均來自對應(yīng)論文給出的最優(yōu)實驗結(jié)果,最佳結(jié)果加粗顯示。
1)GCJ數(shù)據(jù)集上的結(jié)果
表3顯示了ECFG-CGSMN方法與多種基準方法在preci-sion、recall和 F1 值方面的對比結(jié)果。
表3數(shù)據(jù)集GCJ上的表現(xiàn)
DECKARD和RtvNN表現(xiàn)較為普通,原因在于這兩種方法未充分利用代碼的語義信息,而GCJ數(shù)據(jù)集主要包含語義克隆,因此,此類方法在該數(shù)據(jù)集上難以取得優(yōu)秀的檢測效果。
DeepSim和SCDetector相較于前述方法有所進步,但其綜合性能與先進方法相比仍有差距。DeepSim通過提取CFG的語義信息形成語義矩陣,但使用人工定義的語義矩陣,其語義表達仍顯不足。SCDetector雖利用了CFG結(jié)構(gòu)信息,但僅對頻繁出現(xiàn)的tokens賦予較高權(quán)重,忽略了出現(xiàn)頻次統(tǒng)計不能決定其在語義表達中的重要程度,導(dǎo)致語義學習不足。
ASTNN、FA-AST和DEHAST表現(xiàn)較好。這三種方法都在原始樹結(jié)構(gòu)的基礎(chǔ)上添加了額外信息,其中DEHAST在不同層次添加依賴增強邊,本質(zhì)仍是構(gòu)建圖結(jié)構(gòu)。因此,節(jié)點的粗糙處理和缺乏邏輯邊導(dǎo)致其上下文信息表達缺失等,都不利于獲取代碼隱含的語義信息。
相比之下,ECFG-CGSMN在precision和 F1 值上優(yōu)于所有基準方法,分別達到了 99.0% 和 98.5% 。ECFG-CGSMN通過設(shè)計數(shù)據(jù)流邊增強CFG,彌補了圖結(jié)構(gòu)代碼表示上的不足,同時構(gòu)建了孿生架構(gòu)網(wǎng)絡(luò)模型,分層學習節(jié)點特征和圖特征,提高了代碼的復(fù)雜語義學習能力,不僅在precision指標上取得了較好效果, F1 值相較于FA-AST提高了1.5百分點,相較于ASTNN和DEHAST提高了3.5百分點,證明了其在代碼語義挖掘和學習能力方面的優(yōu)勢。
2)BCB數(shù)據(jù)集上的結(jié)果
表4展示了ECFG-CGSMN方法與多種基準方法在BCB數(shù)據(jù)集上的對比結(jié)果。從實驗結(jié)果可以看出,ECFG-CGSMN在BCB數(shù)據(jù)集上的precision為 98.0% ,達到了與當前此數(shù)據(jù)集上最好表現(xiàn)的DHAST同等的表現(xiàn),而ECFG-CGSMN的 F1 值得分達到 97.5% ,取得了最好的 F1 得分,比當前表現(xiàn)較好的DEHAST和FA-AST分別提高了0.5和2.5百分點。
3)模型參數(shù)量及性能對比
為進一步驗證ECFG-CGSMN的性能,本文還與ASTNN、TBCCD、EA-HOLMS三個基線模型和ECFG-CGSMN的變體模型CFG-GGSMN進行了性能比較。
表5和圖4展示了ECFG-CGSMN方法與上述四種方法的參數(shù)量及評估指標對比結(jié)果。為確保實驗結(jié)果的可比性,本文保持與文獻[17]相似的硬件配置和對GCJ數(shù)據(jù)集的處理方式。
結(jié)果表明,ASTNN作為一種輕量級模型,模型參數(shù)量僅為0.42M,但由于模型容量過小,難以捕捉代碼中的復(fù)雜特征,導(dǎo)致性能表現(xiàn)有限,尤其是在召回率和 F1 值上均相對較低。而ECFG-CGSMN通過適當增加模型參數(shù)量,有效提升了性能。對于TBCCD,其基于抽象語法樹(AST)的結(jié)構(gòu)分析方法雖然能夠捕捉代碼的結(jié)構(gòu)信息,但缺乏對代碼語義的深人理解,限制了其檢測能力。從EA-HOLMES與本文方法的對比中可以看出,盡管兩者的參數(shù)量相近,但本文方法在準確率、召回率和F1 值上均領(lǐng)先6百分點以上。這表明,在相似的參數(shù)量下,本文方法能夠更充分地挖掘代碼中的語法與語義特征,展現(xiàn)出更優(yōu)的性能表現(xiàn)。此外,CFG-CGSMN作為一種僅利用控制流圖表征代碼的變體模型,忽略了跨語句的依賴關(guān)系,使得其對代碼邏輯和語義的理解較為片面,整體性能相較于完整模型明顯下降。因此,ECFG-CGSMN方法通過優(yōu)化代碼表征方式和模型結(jié)構(gòu)設(shè)計,在適度的參數(shù)量基礎(chǔ)上實現(xiàn)了較好的性能提升。
3.6 消融實驗
為研究ECFG-CGSMN方法各模塊的影響,本文進行了消融實驗。此部分包含ECFG-CGSMN方法的一些變體,fullmodel是完整模型,表6、7和圖5、6分別展示了在BCB數(shù)據(jù)集和GCJ數(shù)據(jù)集上的消融實驗結(jié)果。
PDG-CGSMN與CFG-CGSMN均采用CGSMN模型進行圖語義學習和克隆檢測,區(qū)別在于代碼表示階段使用的圖結(jié)構(gòu)不同,分別采用了PDG和CFG替代了ECFG,以此對比體現(xiàn)ECFG在結(jié)構(gòu)上的優(yōu)越性。如圖5和6所示,PDG比CFG的表示結(jié)構(gòu)性能稍好,但差異不大。本文分析可能存在兩個原因:一是就其結(jié)構(gòu)而言,相較于CFG,PDG含有了更多的變量名和大量的數(shù)據(jù)流信息,增加了模型處理的復(fù)雜性,導(dǎo)致其性能增幅不大;二是就CGSMN模型而言,模型在圖特征表征層中,更關(guān)注于節(jié)點與其關(guān)聯(lián)信息的語義學習,而PDG中有大量的數(shù)據(jù)依賴關(guān)系,因此,具有略優(yōu)于CFG的表現(xiàn)。但這兩種結(jié)構(gòu)與ECFG-CSGMN仍存在差距。本文認為這得益于ECFG圖結(jié)構(gòu)注重表達上下文信息交互,具有豐富的邏輯關(guān)系等,且CGSMN模型對圖數(shù)據(jù)進行節(jié)點語句的關(guān)鍵信息抓取,從而能夠捕獲復(fù)雜語義特征,獲得更優(yōu)的向量空間表示。
ECFG-GMN直接將ECFG結(jié)構(gòu)輸入到圖匹配網(wǎng)絡(luò)(GMN)中進行語義向量的學習,再進行相似度檢測。相較于本文提出的方法,在BCB和GCJ數(shù)據(jù)集上各項指標均低于ECFG-CGSMN。因此,GMN在處理復(fù)雜的圖數(shù)據(jù)時存在復(fù)雜度較高、長期依賴捕捉困難的問題,不適用于針對單個代碼語義向量的生成工作。同時表明CGSMN模型引人孿生網(wǎng)絡(luò)架構(gòu)和注意力機制等,具有一定的圖數(shù)據(jù)處理并捕捉和學習圖中長程依賴關(guān)系的能力,能夠較好地應(yīng)對代碼克隆檢測任務(wù)。
R-GAT(GCN)模型用圖卷積網(wǎng)絡(luò)(GCN)替換了完整模型中的圖嵌入表征層。與完整模型相比,其在precision和 F1 分數(shù)上有顯著下降,這充分表明模型中的圖特征表征層結(jié)合節(jié)點與其鄰居的語義關(guān)聯(lián),從局部和整體兩個層面生成圖特征向量,能夠有效捕獲代碼深層語義,也充分體現(xiàn)了表達結(jié)構(gòu)與語義的關(guān)聯(lián)是充分理解代碼語義內(nèi)涵的關(guān)鍵。
BiLSTM(LSTM)則是將CGSMN模型中語義匹配層的BiLSTM替換為LSTM。在兩個數(shù)據(jù)集中,結(jié)果都顯示克隆檢測性能大幅下降,如圖5和6所示。相比之下,LSTM與BiLSTM的關(guān)鍵區(qū)別在于,LSTM僅從單一方向處理信息,在捕捉代碼語義信息時,存在對上下圖結(jié)構(gòu)中上下文關(guān)聯(lián)信息的損失,導(dǎo)致模型對于語義的理解能力不足。因此,ECFG-CGSMN強化圖結(jié)構(gòu)對于上下文關(guān)聯(lián)的表達,以及優(yōu)化模型對語義學習的能力,以提升更細粒度的語義感知能力,在捕捉代碼信息和比較語義相似度上具有重要作用。
3.7 實例實驗
為進一步驗證ECFG-CGSMN方法的有效性及其針對復(fù)雜語義克隆相似性評估的優(yōu)越性,本文從BCB和GCJ數(shù)據(jù)集中分別選擇一對真實克隆代碼對,比較不同方法下的語義相似度預(yù)測得分。圖7和8展示了本文分別從BCB和GCJ數(shù)據(jù)集選取的真實克隆代碼對。示例1和2來自BCB數(shù)據(jù)集,均實現(xiàn)文件復(fù)制功能。
示例1使用帶參數(shù)的寫入流并通過try-catch處理異常,示例2則直接從指定的URL讀取并寫入文件,異常通過向上拋出處理。盡管它們功能相同,但實現(xiàn)方式和代碼結(jié)構(gòu)差異顯著。示例3和4來自GCJ數(shù)據(jù)集中的競賽題目蘑菇問題,兩段代碼功能相同,均計算蘑菇數(shù)量的動態(tài)和固定速率減少總量,然而在實現(xiàn)細節(jié)和結(jié)構(gòu)上明顯不同。因此,示例的兩對真實克隆代碼,均屬于語義相似但結(jié)構(gòu)迥異的克隆代碼。本文采用不同方法對示例兩對克隆代碼語義相似進行評估。在BCB中對真實克隆對的語義相似性進行評估,DECKARD方法對示例1和2的語義相似度得分為 3.0×10-8 ,CDLH方法的得分為 6.0× 10-6 ,EA-HOLMS方法的得分為0.60,而本文方法ECFG-CGSMN的語義相似度預(yù)測得分為 0.90 。在GCJ中對真實克隆對的語義相似性進行評估,DECKARD方法對示例3和4的語義相似度得分為 5.0×10-8 ,EA-HOLMS方法的得分為0.55,而ECFG-CGSMN方法的語義相似度預(yù)測得分為0.92。評估結(jié)果對比如圖9所示。
語義相似度得分為0\~1,數(shù)值越大,則表示兩個代碼語義越相似,如圖9所示,數(shù)值越靠近圓心,語義相似度得分越接近1。為更直觀觀察本文方法的優(yōu)越性,將0.6\~1.0設(shè)置為有效預(yù)測區(qū),而ECFG-CGSMN方法取得了比對比方法更高的語義相似性預(yù)測得分。以上案例表明,本文從優(yōu)化表征和語義學習及辨析兩個視角,提出的基于增強控制流圖和孿生網(wǎng)絡(luò)架構(gòu)的代碼克隆檢測方法,能夠有效捕獲深層語義信息,且在語義相似度辨析上具有一定優(yōu)勢。
4結(jié)束語
本文提出一種基于增強CFG與孿生網(wǎng)絡(luò)架構(gòu)的代碼克隆檢測方法。首先,為強化上下文信息,在控制流圖中嵌人跨依賴關(guān)聯(lián)信息,構(gòu)造增強結(jié)構(gòu)表征的ECFG結(jié)構(gòu);其次,為增強模型對代碼語義學習及辨析能力,設(shè)計局部-全局-語義優(yōu)化的語義學習思路,構(gòu)建基于孿生網(wǎng)絡(luò)架構(gòu)的CSGMN模型;分別構(gòu)建節(jié)點特征表征層、圖特征表征層和語義匹配層,使模型更為準確地捕捉圖數(shù)據(jù)中的語義信息,生成融合局部與全局結(jié)構(gòu)信息的圖語義向量,并行計算特征向量間的空間相似度,進行代碼克隆檢測;最后,在GCJ與BCB兩個數(shù)據(jù)集上進行驗證。結(jié)果表明,本文方法與ASTNN、FA-AST和DHAST等方法相比,在precision和 F1 值上均有提升,且通過模型參數(shù)對比實驗及實例實驗,多角度證明了ECFG-CGSMN方法的有效性及優(yōu)越性。
由于ECFG-CGSMN是基于圖表征學習的代碼克隆檢測方法,生成的ECFG雖含有豐富語義,但結(jié)構(gòu)較為復(fù)雜,在處理大規(guī)??寺z測任務(wù)時可能會導(dǎo)致更高的計算成本,所以,如何在保證高準確度的同時降低檢測成本,并將本文方法應(yīng)用于實際開發(fā)過程中,是未來進一步研究的方向。
參考文獻:
[1]中國信息通信研究院.開源生態(tài)白皮書(2020年)[EB/OL]. (2020-1o-16).http://www.caict.ac.cn/english/research/whitepapers/202112/P020211224526805503114.pdf.(China Academy of Information and Communications Technology.Open source ecosystem whitepaper(2020)[EB/OL].(2020-10-16).http://www.caict. ac.cn/english/research/whitepapers/202112/P02021122452680550 3114.pdf.)
[2]SYNOPSYS.2024年開源安全和風險分析報告[EB/OL].(2024- 03-11). https://www. synopsys. com/content/dam/synopsys/china/software-integrity/reports/rep-ossra-2024-ch. pdf.(SYNOPSYS. 2024 open source security and risk analysis report[EB/OL].(2024- 03-11).https://www. synopsys.com/content/dam/synopsys/china/ software-integrity/reports/rep-ossra-2O24-ch.pdf.)
[3]Bellon S,KoschkeR,Antoniol G,et al.Comparison and evaluation ofclone detection tools[J].IEEE Trans on Software Enginee ring,2007,33(9):577-591.
[4]Roy C K,Cordy JR. NICAD:accurate detection of near-miss intentionalclonesusing flexible prety-printing and code normalization [C]//Proc ofthe 16th IEEE International Conference on Program Comprehension.Piscataway,NJ:IEEEPress,2008:172-181.
[5]Kamiya T,Kusumoto S, Inoue K.CCFinder:a multilinguistic tokenbased code clone detection system for large scale source code[J]. IEEETranson Software Engineering,2002,28(7):654-670.
[6]Wang Pengcheng, Svajlenko J, Wu Yanzhao,et al. CCAligner: a token based large-gap clone detector[C]//Proc of the 40th IEEE/ ACM International Conference on Software Engineering.Piscataway, NJ: IEEE Press,2018:1066-1077.
[7]Gabel M, Jiang Lingxiao,Su Zhendong. Scalable detection of semantic clones [C]//Proc of the 30th ACM/IEEEInternational Conference on Software Engineering.Piscataway,NJ: IEEE Press,2008: 321-330.
[8]Yang Yanming,Hu Xing,Gao Zhipeng,et al.Federated learning for software engineering:a case study of code clone detection and defect prediction[J]. IEEE Trans on Software Engineering,2024,50 (2):296-321.
[9]Wei Huihui,Li Ming,Wei Huihui,et al.Supervised deep features forsoftware functional clone detection by exploiting lexical and syntactical information in source code[C]//Proc of the 26th International Joint Conference on Artificial Intelligence.New York:ACM Press, 2017:3034-3040.
[10]Tai Kaisheng,Socher R,Manning C D. Improved semantic representations from tre-structured long short-term memory networks[C]// Proc of the 53rd Annual Meeting of the Assciation for Computational Linguisticsand the 7th International Joint Conference on Natural Language Processing. 2015: 1556-1566.
[11] Zhao Zhehao,Yang Bo,Li Ge,et al.Precise learning of source code contextual semantics via hierarchical dependence structure and graph attention networks[J]. Journal of Systems and Software,2022, 184: 111108.
[12]熊曙初,李軒,吳佳妮,等.基于有監(jiān)督對比學習的文本情感語 義優(yōu)化方法研究[J].數(shù)據(jù)分析與知識發(fā)現(xiàn),2024,8(6):69- 81.(Xiong Shuchu,Li Xuan,Wu Jiani,et al. Research on text sentiment semantic optimization method based on supervised contrastive learning [J]. Data Analysis and Knowledge Discovery, 2024,8(6): 69-81.)
[13] Zhang Jian,Wang Xu,Zhang Hongyu,et al.A novel neural source code representation based on abstract syntax tree [C]//Proc of the 41st IEEE/ACM International Conference on Software Engineering. Piscataway,NJ: IEEE Press,2019: 783-794.
[14]WangWenhan,LiGe,Ma Bo,etal.Detectingcodeclones with graph neural network and flow-augmented abstract syntax tree [C]// Proc of the27th IEEE International Conference on Software Analysis,EvolutionandRenginering.Piscataway,NJ:IEEEPress, 2020:261-271.
[15]萬澤軒,謝春麗,呂泉潤,等,基于依賴增強的分層抽象語法樹 的代碼克隆檢測[J].計算機應(yīng)用,2024,44(4):1259-1268. (Wan Zexuan,Xie Chunli,Lyu Quanrun,et al. Code clone detection based on dependency enhanced hierarchical abstract syntax tre [J].Journal of Computer Applications,2024,44(4):1259- 1268.)
[16]Hu Yutao,Zou Deqing,Peng Junru,et al.TreeCen:building tree graph for scalable semantic code clone detection[C]//Proc of the 37th IEEE/ACM International Conference on Automated Software Engineering.New York:ACM Press,2023:1-12.
[17]MehrotraN,Agarwal N,GuptaP,et al.Modeling functional similarity in source code with graph-based Siamese networks[J]. IEEE Trans on Software Engineering,2022,48(10):3771-3789.
[18] Zou Yue,Ban Bihuan, Xue Yinxing,et al. CCGraph: a PDG-based code clone detector with approximate graph matching[C]//Proc of the 35th IEEE/ACM Intermational Conference on Automated Software Engineering.New York:ACM Press,2020:931-942.
[19] Zhao Gang,Huang J, Zhao Gang,et al. DeepSim: deep learning code functional similarity[C]//Proc of the 26th ACM Joint Meeting on European Software Enginering Conference and Symposium on the Foundations of Software Engineering.New York: ACM Press,2O18:141-151.
[20]Wu Yueming,Zou Deqing,Dou Shihan,et al. SCDetector: software functional clone detection based on semantic tokens analysis [C]// Proc of the 35th IEEE/ACM Intermational Conference on Automated Software Engineering.New York:ACM Press,202O:821-833.
[21] Jiang Lingxiao,Misherghi G,Su Zhendong,et al.DECKARD:scalable and accurate tree-based detection of code clones[C]//Proc of the 29th International Conference on Software Enginering.Piscataway,NJ:IEEE Press,2007:96-105.
[22]Li Liuqing,F(xiàn)eng He, Zhuang Wenjie,et al. CCLearner: a deep learning-based clone detection approach[C]//Proc of IEEE International Conference on Software Maintenance and Evolution.Piscataway,NJ:IEEE Press,2017:249-260.
[23]Fang Chunrong,Liu Zixi,Shi Yangyang,et al.Functional code clone detection with syntax and semantics fusion learning[C]//Proc of the 29th ACM SIGSOFT International Symposium on Software Testing and Analysis. New York:ACM Press,202O: 516-527.
[24]Zhang Xiangping,Liu Jianxun,Shi Min.A paralel deeplearningbased code clone detection model[J]. Journal of Parallel and Distributed Computing,2023,181:104747.
[25]呂泉潤,謝春麗,萬澤軒,等.基于對比學習的跨語言代碼克隆 檢測方法[J].計算機應(yīng)用研究,2024,41(7):2147-2152. (Lyu Quanrun, Xie Chunli,Wan Zexuan,et al. Contrastive learning based cross-language code clone detection [J]. Application Research of Computers,2024,41(7):2147-2152.)
[26]張祥平,劉建勛.基于深度學習的代碼表征及其應(yīng)用綜述[J]. 計算機科學與探索,2022,16(9):2011-2029.(Zhang Xiangping,Liu Jianxun. Overview of deep learning-based code representation and its applications[J].Journal of Frontiers of Computer Science and Technology,2022,16(9):2011-2029.)
[27]Bui N D Q,Yu Yijun,Jiang Lingxiao. InferCode:self-supervised learning of code representationsby predicting subtrees[C]//Proc of the 43rd IEEE/ACM International Conference on Software Engineering.Piscataway,NJ: IEEE Press,2021:1186-1197.
[28]肖鵬,張旭升,楊豐玉,等.基于深層圖卷積網(wǎng)絡(luò)與注意力的漏 洞檢測方法[J].計算機工程與應(yīng)用,2024,60(3):292-298. (Xiao Peng, Zhang Xusheng,Yang Fengyu,et al. Vulnerability detection based on deep graph convolutional network and attntion mechanism[J].Computer Engineering and Applications,2024,60 (3): 292-298.)
[29]陳龍,張振宇,李曉明,等.AGCFN:基于圖神經(jīng)網(wǎng)絡(luò)多層網(wǎng)絡(luò) 社團檢測模型[J].計算機應(yīng)用研究,2024,41(10):2926- 2931.(Chen Long, Zhang Zhenyu,Li Xiaoming,et al.AGCFN: multiplex network community detection model based on graph neural network [J].Application Research of Computers,2024,41 (10):2926-2931.)
[30]Quradaa FH,Shahzad S,Almoqbily RS.A systematic literature review on the applications of recurrent neural networks in code clone research[J].PLoS One,2024,19(2):e0296858.
[31] Google code jam [EB/OL].[2022-05-26]. https://code.google. com/codejam/past-contests.
[32]SvajlenkoJ,IslamJF,KeivanlooI,et al.Towardsabig data curated benchmark of inter-project code clones [C]//Proc of IEEE International Conference on Software Maintenance and Evolution. Piscataway,NJ:IEEE Press,2014:476-480.
[33]Yu Hao,Lam W,Chen Long,et al.Neural detection of semantic code clones via tre-based convolution[C]//Proc of the 27th IEEE/ ACM International Conference on Program Comprehension.Piscataway,NJ: IEEE Press,2019:70-80.