• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于對比學(xué)習(xí)的跨語言代碼克隆檢測方法

    2024-08-17 00:00:00呂泉潤謝春麗萬澤軒魏家勁
    計算機應(yīng)用研究 2024年7期

    摘 要:代碼克隆檢測是提高軟件開發(fā)效率、軟件質(zhì)量和可靠性的重要手段?;诔橄笳Z法樹(abstract syntax tree,AST)的單語言克隆檢測已經(jīng)取得了較為顯著的效果,但跨語言代碼的AST節(jié)點存在同義詞、近義詞且手工標注數(shù)據(jù)集成本高等問題,限制了現(xiàn)有克隆檢測方法的有效性和實用性。針對上述問題,提出一種基于對比學(xué)習(xí)的樹卷積神經(jīng)網(wǎng)絡(luò)(contrastive tree convolutional neural network,CTCNN)的跨語言代碼克隆檢測方法。該方法首先將不同編程語言的代碼解析為AST,并對AST的節(jié)點類型和節(jié)點值作同義詞轉(zhuǎn)換處理,以降低不同編程語言AST之間的差異;同時,采用對比學(xué)習(xí)擴充負樣本并對模型進行訓(xùn)練,使得在小樣本數(shù)據(jù)集下能夠最小化克隆對之間的距離,最大化非克隆對之間的距離。最后在公開數(shù)據(jù)集上進行了評測,精確度達到95.26%、召回率為99.98%、F1為97.56%。結(jié)果表明,相較于現(xiàn)有的最好的CLCDSA和C4方法,該模型的檢測精度分別提高了43.92%和3.73%,其F1值分別提升了29.84%和6.29%,證明了所提模型是一種有效的跨語言代碼克隆檢測方法。

    關(guān)鍵詞:跨語言;代碼克??;對比學(xué)習(xí);抽象語法樹

    中圖分類號:TP311 文獻標志碼:A 文章編號:1001-3695(2024)07-031-2147-06

    doi: 10.19734/j.issn.1001-3695.2023.11.0534

    Contrastive learning based cross-language code clone detection

    Abstract: Code clone detection is an important technology to improve software development efficiency, quality, and reliability. Single-language clone detection based on AST has achieved significant performance. However, the existence of synonyms and near-synonyms in AST nodes of cross-language codes and the high cost of manual labeling limit the effectiveness and usefulness of existing clone detection methods. To address these issues, this paper proposed a cross-language code clone detection method based on contrastive tree convolutional neural network(CTCNN). Firstly, it parsed the codes of different programming languages into ASTs, and processed the node types and values of ASTs by synonym conversion to reduce the differences between ASTs in different programming languages. At the same time, it employed contrastive learning to augment negative samples and train the model, so that this approach ensured the minimization of distances between clone pairs and the maximization of distances between non-clone pairs in small sample datasets. Finally, it evaluated the proposed method on a public dataset with precision, recall, and F1-scores of 95.6%, 99.98%, and 97.56%. The results show that compared to the best existing methods CLCDSA and C4, the proposed model improves the detection accuracy by 43.92% and 3.73%, and increases the F1-score by 29.84% and 6.29%, which confirms that the proposed model is an effective cross-language code clone detection method.

    Key words:cross-language; code clone; contrastive learning; abstract syntax tree

    0 引言

    在軟件開發(fā)過程中,開發(fā)人員在開發(fā)功能類似的應(yīng)用程序時,往往會復(fù)用已經(jīng)成功上線的其他語言版本的軟件代碼或發(fā)布在開源社區(qū)平臺上面的代碼,因此,不同語言之間的代碼克隆是一個普遍存在的問題。研究表明,在軟件系統(tǒng)中,存在7%~23%的克隆代碼[1]。代碼克隆雖然可以提高編程效率,但對軟件維護、軟件質(zhì)量也存在一定的負面影響[2]。例如,源代碼中的重復(fù)代碼塊增加了程序的復(fù)雜性,從而導(dǎo)致軟件維護更加困難[3]。對代碼片段的更改也需要在其他所有克隆塊上同步修改,如果更改不一致,則將導(dǎo)致錯誤傳播,給軟件的可維護性和可靠性帶來了新的挑戰(zhàn)。因此,跨語言代碼克隆是軟件開發(fā)和維護中亟待解決的問題。

    不同于單語言克隆檢測,各編程語言的詞法、語法的差異增加了跨語言代碼克隆檢測的難度。目前已有的跨語言代碼克隆檢測方法主要包括C4(contrastive cross-language code clone detection) [4]、LICCA[5]、CLCDSA[6]、樹自動編碼器(tree autoencoder,TAE)[7]等。C4模型將源代碼的token轉(zhuǎn)換為向量,通過比較向量相似度進行克隆代碼檢測,該方法可以有效地檢測出跨語言的克隆代碼,但這些token僅包含代碼的詞法信息,缺乏代碼的語法和語義信息。LICCA利用SSQSA[8]平臺將不同的編程語言轉(zhuǎn)換為通用的中間表示,它雖然可以在一定程度上實現(xiàn)編程語言的統(tǒng)一,但該模型要求源代碼長度相等并且兩個代碼塊的代碼步驟和功能流程需要相同,這些限制使得該模型不適用于現(xiàn)實世界中的場景。TAE使用無監(jiān)督學(xué)習(xí)的方式對大規(guī)模數(shù)據(jù)集的AST進行預(yù)訓(xùn)練以解決數(shù)據(jù)集瓶頸問題,并取得了較好的結(jié)果,但該方法未考慮到不同編程語言詞法的影響。

    現(xiàn)有基于AST的方法雖然在單語言代碼克隆檢測有較好的表現(xiàn),但在處理跨語言的代碼克隆時性能有限,主要原因在于不同編程語言的AST表示存在差異,基于AST的方法通常依賴于特定語言的AST結(jié)構(gòu)進行代碼克隆檢測,每種編程語言都有其獨特的語法規(guī)則和結(jié)構(gòu),因此對應(yīng)的AST表示也會有所不同。

    為解決上述問題,本文提出了一種基于對比學(xué)習(xí)[9]的樹卷積神經(jīng)網(wǎng)絡(luò)[10]方法進行跨語言代碼克隆檢測,該方法通過構(gòu)建同義詞轉(zhuǎn)換表的方法對不同編程語言的AST進行同義詞轉(zhuǎn)換處理,并采用對比學(xué)習(xí)的方法進行跨語言代碼克隆檢測。該方法可以減輕人工標注的工作,提高模型的抗干擾能力,為提高軟件開發(fā)效率、降低軟件維護成本提供技術(shù)支撐。

    本文的主要貢獻有:

    a)提出一種新的跨語言代碼克隆檢測方法CTCNN,該方法通過樹型卷積提取AST中的語法和節(jié)點屬性信息,并利用字典方法解決不同語言之間的同義詞轉(zhuǎn)換問題,提高模型的語義表征能力。

    b)提出對比學(xué)習(xí)方法來學(xué)習(xí)跨語言的相似性樣本和不相似性樣本,利用自監(jiān)督學(xué)習(xí)方法解決跨語言數(shù)據(jù)集標注缺失問題。

    1 相關(guān)工作

    1.1 跨語言代碼克隆檢測

    深度學(xué)習(xí)模型能夠挖掘出大量數(shù)據(jù)中的隱藏模式,獲得有效的特征表示。基于深度學(xué)習(xí)的跨語言代碼克隆檢測被分為基于詞法(token)、基于語法樹(AST)和基于圖(graph)的代碼克隆檢測。

    a)基于token的方法。該方法利用詞法分析器把不同語言的代碼轉(zhuǎn)換為token序列,通過比較代碼序列來檢測克隆代碼[11]。 Tao等人[4]提出的C4是一種跨語言克隆檢測模型,該模型采用了對比學(xué)習(xí)的思想,使用token作為輸入,采用CodeBERT[12]來提取代碼中的特征,并將其轉(zhuǎn)換為向量表示,通過比較向量之間的相似度來檢測克隆代碼,如果兩個向量之間的相似度超過了一定的閾值,就認為它們是克隆代碼。

    b)基于AST的方法。該方法將不同語言的代碼轉(zhuǎn)換為語法樹,通過比較語法樹來檢測克隆代碼。Vislavski等人[5]提出的LICCA是一種開源的跨語言代碼克隆檢測工具,LICCA依賴于軟件質(zhì)量靜態(tài)分析器(SSQSA)平臺[8]的高級代碼表示,提取AST的語法和語義特征,LICCA使用了一個中間程序表示法,它可以實現(xiàn)語義上等價的語言結(jié)構(gòu)的統(tǒng)一,并通過跨語言使用不同的語法來實現(xiàn)。Ling等人[7]提出了一種基于樹自動編碼器(TAE)預(yù)訓(xùn)練的跨語言代碼克隆檢測模型,其思想是利用TAE預(yù)訓(xùn)練來提高表示學(xué)習(xí)的質(zhì)量,通過在預(yù)訓(xùn)練模型的基礎(chǔ)上進行微調(diào)來實現(xiàn)跨語言代碼克隆檢測。Perez等人[13]提出了一種基于AST的跨語言代碼克隆檢測模型,該模型使用graph2vec[14]方法對AST進行嵌入學(xué)習(xí),將AST映射到統(tǒng)一的低維向量空間中,通過計算不同代碼段之間的相似度來判斷是否為克隆代碼。Yang等人[15]提出的ASTERIA是一種基于AST的深度學(xué)習(xí)方法,該方法利用Tree-LSTM[16]網(wǎng)絡(luò)從其AST中學(xué)習(xí)函數(shù)的語義表示,通過測量兩個表示向量之間的相似度進行相似度檢測。

    c)基于圖的方法。Zhang等人[17]提出了一種基于代碼流程圖的跨語言代碼相似度檢測(CLCSD)方法,該方法將特定編程語言編寫的源代碼轉(zhuǎn)換為標準化代碼流程圖(standardized code flow chart,SCFC),將不同編程語言編寫的兩個源代碼片段轉(zhuǎn)換為SCFC,并利用所提出的SCFC-SPGK算法測量其對應(yīng)的SCFC來獲得它們的相似性。

    除了以上的跨語言代碼克隆檢測方法,還有一些別的方法技術(shù),如Cheng等人[18]提出的CLCMiner通過計算不同編程語言中不同片段之間的相似性,并選擇每個差異中最相似的片段作為一對匹配的差異,根據(jù)不同的相似性對匹配的差異對進行排序和克隆檢測,但CLCMiner從修訂歷史中挖掘克隆,從而限制了其應(yīng)用。Nafi等人[19]提出了一種基于深度學(xué)習(xí)的向量學(xué)習(xí)方法來識別語義關(guān)系,使用應(yīng)用程序編程接口(API)文檔來查找不同語言使用的API調(diào)用之間的關(guān)系,但這種方法的克隆檢測效果取決于API文檔的質(zhì)量。為了支持大規(guī)模的克隆檢測,Nafi等人[6]提出一種用于跨語言代碼克隆檢測的模型CLCDSA,該模型使用了一個基于跨語言API的過濾器來丟棄非潛在的克隆,使用語義分析實現(xiàn)跨語言代碼檢測。Bui等人[20]提出一種基于暹羅神經(jīng)網(wǎng)絡(luò)[21]的神經(jīng)網(wǎng)絡(luò)框架(Bi-NN),通過長短期記憶(LSTM)[22]和門控圖神經(jīng)網(wǎng)絡(luò)(GGNN)[23]等模型來實例化雙邊代碼表示框架,以表示語法、語義和算法分類。

    1.2 對比學(xué)習(xí)

    對比學(xué)習(xí)是一種自監(jiān)督學(xué)習(xí)方法,通過最小化相似數(shù)據(jù)表示之間的距離,并最大限度地提高不同數(shù)據(jù)之間的距離,以提高模型的泛化能力。與樣本總和的損失函數(shù)不同,對比學(xué)習(xí)的損失函數(shù)通過成對的例子運行。在實際應(yīng)用中,對比損失函數(shù)通常需要結(jié)合具體的模型和任務(wù)來進行設(shè)計和優(yōu)化。Yahya等人[24]提出使用InferCode的暹羅架構(gòu)從AST獲得的源代碼嵌入中學(xué)習(xí)更抽象的嵌入,將AST循環(huán)到將整個子樹嵌入到一個描述整個代碼片段的向量中,這樣就可以更容易地將給定的代碼與不同語言中的其他源代碼片段進行比較。

    2 方法設(shè)計

    2.1 方法整體結(jié)構(gòu)

    本文提出的基于CTCNN的跨語言代碼克隆檢測方法,如圖1所示。該方法主要包括三個部分:

    a)數(shù)據(jù)預(yù)處理:去除與源碼無關(guān)的信息,利用語法解析工具將代碼解析為AST,并對AST的節(jié)點進行上下文信息擴展。

    b)同義詞轉(zhuǎn)換處理:對不同編程語言的AST進行同義詞轉(zhuǎn)換處理,以實現(xiàn)跨語言AST的統(tǒng)一表示。

    c)代碼克隆檢測模型:以 AST作為輸入,送入基于對比學(xué)習(xí)的TBCNN模型中得到代碼的向量表示,使用對比學(xué)習(xí)提高模型的泛化能力。通過比較代碼表征的余弦相似度,判斷是否為跨語言代碼克隆對。

    2.2 數(shù)據(jù)預(yù)處理

    數(shù)據(jù)預(yù)處理是對源代碼進行解析和增強處理,以獲取源碼的語義信息,主要包括以下三個步驟:a)去除源碼中多余的換行符、注釋等無關(guān)信息;b)將源碼解析為AST;c)擴展AST節(jié)點信息,通過對AST自頂向下的遍歷,將子節(jié)點信息添加到父節(jié)點中,以獲取AST的上下文信息。算法1描述了將源碼解析為帶有上下文信息的AST的過程,該算法將AST的節(jié)點n由n=〈Nt,Nv〉擴充為ne=〈Nt,Nv,Nct,Ncv〉的形式,其中Nt、Nv、Nct、Ncv分別表示AST節(jié)點的節(jié)點類型、節(jié)點值、子節(jié)點類型列表和子節(jié)點值列表。算法1中:步驟a)b)加載指定語言的解析器,將源代碼解析為 AST;步驟c)~g)定義一個遞歸函數(shù),采用自頂向下的遍歷方式對 AST 中每個節(jié)點進行訪問,獲取其節(jié)點類型、節(jié)點值和子節(jié)點列表,并構(gòu)造一個節(jié)點信息元組;最終,步驟h)i)從根節(jié)點開始將整個 AST 表示為一棵樹型結(jié)構(gòu)并返回AST。

    算法1 將源碼解析為帶有上下文信息的AST

    2.3 基于字典的同義詞轉(zhuǎn)換

    如圖2所示,各編程語言的AST節(jié)點存在一定差異,例如Java語言中的根節(jié)點稱為“program”,而C語言中的節(jié)點則稱為“translation_unit”。雖然這兩種術(shù)語在詞匯上有所不同,但實際上它們代表的是相同的語義,即編碼單元。

    采用基于字典的同義詞轉(zhuǎn)換可用于解決不同編程語言AST之間節(jié)點值和節(jié)點類型同義詞的問題。具體過程如下:首先,對生成的AST進行遍歷,得到所有節(jié)點類型和節(jié)點值;然后,將語義相同但詞匯不同的節(jié)點類型或節(jié)點值采用統(tǒng)一的詞匯表示;最終,以字典的形式生成同義詞轉(zhuǎn)換表。通過同義詞轉(zhuǎn)換表,將具有編程語言特性的關(guān)鍵詞、特殊符號的節(jié)點值或節(jié)點類型替換成統(tǒng)一的詞匯,可以進一步降低不同編程語言AST的差異性,以統(tǒng)一不同編程語言AST的語義。

    例如,使用“unit”統(tǒng)一替換不同編程語言中的“program”“translation_unit”等詞匯,從而減少不同編程語言AST之間的差異。這樣做可以讓不同編程語言的AST在語義上更加一致,進而提高程序分析的精度和效率。

    2.4 代碼克隆檢測模型

    跨語言的代碼克隆檢測主要分為四層,分別為嵌入層、卷積層、池化層和對比層。

    2.4.1 嵌入層

    首先,對數(shù)據(jù)集中的所有AST進行遍歷,得到AST節(jié)點類型和節(jié)點值的詞匯表,在生成AST的過程中,抽象化了函數(shù)命名、用戶自定義標識符等,提高了模型的泛化能力;此外,添加‘unk’標識符來表示數(shù)據(jù)集中未出現(xiàn)的詞匯。算法2描述了生成AST節(jié)點類型和節(jié)點值詞匯表的過程,其中vocab_node_type為AST節(jié)點類型的詞匯表,vocab_node_token為AST節(jié)點值的詞匯表。步驟a)b)初始化兩個帶有‘unk’字符的列表,表示如果AST中存在未知的token,則將其標記為‘unk’。步驟c)~g)對AST進行遍歷,依次執(zhí)行以下操作:如果該節(jié)點的token不在vocab_node_token中,則將其添加到vocab_node_token列表中;如果該節(jié)點的type不在vocab_node_type中,則將其添加到vocab_node_type列表中。步驟h)輸出所生成的詞匯表。得到詞匯表后,將帶有子節(jié)點信息的AST送到單層全連接網(wǎng)絡(luò)中得到AST的向量表示,并將其作為卷積層的輸入。

    算法2 詞匯表的生成

    2.4.2 卷積層

    得到AST的嵌入后,使用一組固定深度的樹卷積核Wk∈Euclid ExtraaBpd×h在整個樹上滑動,對樹進行卷積操作,其中h為特征檢測器的數(shù)量,d為向量的維度,將相鄰節(jié)點的信息通過一組卷積核匯聚到了當前節(jié)點上,并得到了當前節(jié)點的特征向量y。

    為了增加模型的泛化能力和防止過擬合,在卷積層后添加一個dropout層,這樣訓(xùn)練時會隨機關(guān)閉一定比例的神經(jīng)元,從而使得模型更具泛化能力。

    2.4.3 池化層

    對AST卷積后,對向量的每個維度應(yīng)用最大池化,得到整個AST的匯總向量u后,將其送到全連接層中以得到向量表示。最終向量可以表示為

    S=σ(Wu+b)(2)

    其中:σ(·)為激活函數(shù);Wu為權(quán)重矩陣;b為偏置矩陣。同樣采用LeakyReLU作為激活函數(shù)。

    2.4.4 對比層

    對比學(xué)習(xí)著重于學(xué)習(xí)同類實例之間的共同特征,以區(qū)分非同類實例之間的不同之處。通過縮小與正樣本間的距離,擴大與負樣本間的距離,使正樣本與錨點的距離遠遠小于負樣本與錨點的距離,如式(3)所示。

    s(f(x),f(x+))>>s(f(x),f(x-))(3)

    其中:s(·)為計算樣本間距離的函數(shù); f(·)為編碼器; x為錨定樣本,x+為正樣本,x-為負樣本。

    CTCNN模型使用N元組損失(N-pair loss)作為損失函數(shù),并設(shè)置一個超參數(shù)τ來調(diào)整對負樣本的懲罰。如圖1右上角所示,綠色的代表錨定樣本,藍色的代表正樣本,黃色的代表負樣本(參見電子版)。計算得出該批次向量表示后,利用對比學(xué)習(xí)的N-pair損失函數(shù)最小化正樣本之間的距離,并將負樣本之間的距離最大化,最后進行模型訓(xùn)練和優(yōu)化,對不同的代碼通過計算向量之間的相似值作為是否克隆對的標準。損失函數(shù)如式(4)所示。

    其中:N代表的是一個batch的樣本數(shù);sim(·)為相似度計算函數(shù);τ為溫度系數(shù)。在構(gòu)建數(shù)據(jù)集的時候已經(jīng)生成了正樣本,因此需要設(shè)計負樣本來對模型進行訓(xùn)練。對于每個批次,都有n對克隆對(正樣本)。以第一個正樣本為例,其余該批次中與正樣本任務(wù)不一致的克隆對都是第一個樣本的負樣本,依此類推,構(gòu)建出所有樣本的負樣本。在構(gòu)造正例和負例后,通過上述損失函數(shù)得到這一批次的損失值并通過RAdam[25](rectified Adam)進行優(yōu)化。RAdam是一種基于梯度的優(yōu)化算法,通過采用預(yù)熱啟發(fā)式算法,提高了自適應(yīng)學(xué)習(xí)率算法訓(xùn)練的穩(wěn)定性、收斂速度和泛化能力。它是Adam[26](adaptive moment estimation)優(yōu)化算法的改進版本。

    3 實驗分析

    本章介紹了實驗數(shù)據(jù)集、實驗設(shè)置與基準模型,為探究CTCNN模型的有效性,提出以下7個問題進行探究:

    a)RQ1: CTCNN在跨語言代碼克隆檢測中表現(xiàn)如何?

    b)RQ2:CTCNN在不同類型的跨語言代碼克隆檢測效果如何?

    c)RQ3:同義詞轉(zhuǎn)換后CTCNN的跨語言克隆檢測效果如何?

    d)RQ4:對比學(xué)習(xí)對CTCNN的影響如何?

    e)RQ5:小樣本下CTCNN性能如何?

    f)RQ6: CTCNN在卷積層數(shù)不同的情況下表現(xiàn)如何?

    g)RQ7: CTCNN的時間性能如何?

    3.1 數(shù)據(jù)集介紹

    在評估方法的有效性時,使用C4[5]的數(shù)據(jù)集作為實驗的數(shù)據(jù)集,按照8∶1∶1的比例劃分為訓(xùn)練集、測試集和驗證集進行交叉驗證,該數(shù)據(jù)集從谷歌的CodeJam(https://www.go-hero.net/jam/10/languages/0)和AtCoder(https://atcoder.jp/)編程競賽網(wǎng)站中獲取源碼,將同一問題的不同源碼解決方案作為克隆對構(gòu)成正樣本,Java、Python、C、C++作為跨語言克隆對,得到45 535個樣本對。

    3.2 評價指標

    本文采用精確率P(precision)、召回率R(recall)和F1(F1 score)三個指標來評估跨語言克隆檢測模型的性能。精確率P是指預(yù)測為正例的樣本中,真正為正例的比例;召回率R是指實際為正例的樣本中,被正確預(yù)測為正例的比例;F1值綜合考慮了精確率和召回率,因此F1值通常被用來綜合評估模型的性能, F1值越高,說明模型的性能越好。

    其中:TP指實際為正例的樣本中被正確預(yù)測為正例的數(shù)量;FP指實際為負例的樣本中被錯誤預(yù)測為正例的數(shù)量;FN是指實際為正例的樣本中被錯誤預(yù)測為負例的數(shù)量。

    3.3 實驗設(shè)置與基準模型

    實驗采用Tree-sitter(http://tree-sitter.github.io/tree-sitter/)工具對源碼進行解析并生成AST。Tree-sitter是一種語法解析工具,它使用先進的解析算法和生成的語法樹分析各種編程語言,并為它們提供語法結(jié)構(gòu)。為了驗證本文CTCNN方法的有效性,與CLCDSA和C4跨語言代碼克隆檢測方法進行了比較。CLCDSA通過度量兩個矩陣之間的余弦相似性來檢測跨語言的克隆代碼,該矩陣是從源碼中提取9個特征的值而產(chǎn)生的。C4利用CodeBERT模型將不同語言中的程序轉(zhuǎn)換為高維向量表示,CodeBERT作為一種預(yù)訓(xùn)練模型,可以獲取代碼的上下文信息;此外,C4還通過一個能夠有效識別克隆對和非克隆對的約束性學(xué)習(xí)目標來進行微調(diào)。

    對于CTCNN,設(shè)置在NVIDIA A5000設(shè)備上進行訓(xùn)練,epoch設(shè)置為3,batch size設(shè)置為8,學(xué)習(xí)率為0.001。對于C4模型,采用相同的數(shù)據(jù)集進行訓(xùn)練,并遵照原文獻實驗設(shè)置進行實驗。由于CLCDSA針對的是Java、Python和C#進行的跨語言代碼克隆檢測,所以從數(shù)據(jù)集中抽取包含Java和Python的克隆對,共有12 846對樣本,按照8∶1∶1的比例劃分訓(xùn)練集、測試集和驗證集進行交叉驗證,正樣本和負樣本的比例約為50%,同樣遵照原文獻實驗設(shè)置進行實驗。

    3.4 實驗結(jié)果與分析

    3.4.1 RQ1: CTCNN模型的性能

    為了測試CTCNN模型在跨語言代碼克隆檢測任務(wù)的效果,本文通過與目前表現(xiàn)最好的模型進行比較,表1和2顯示了本文模型與CLCDSA、C4模型的精確度、召回率和F1值。C4模型對每個代碼片段使用CodeBERT來提取代碼中的特征,CodeBERT作為一種預(yù)訓(xùn)練模型,可以獲取代碼的上下文信息,因此可以獲得較好的表現(xiàn)。與C4相比,CTCNN具有更高的F1、召回率和精確率, CTCNN的F1值提高了6.29%,召回率提高了8.97%,精準率提高了3.73%;與CLCDSA相比,CTCNN同樣具有較好的表現(xiàn), CTCNN的F1值提高了29.84%,召回率提高了3.84%, 精準率提高了43.92%。這表明CTCNN可以更好地學(xué)習(xí)代碼的語義信息。CTCNN還可以通過改進不同編程語言AST的差異性和損失函數(shù)等來訓(xùn)練跨語言代碼克隆檢測,將在未來探索這項工作。

    3.4.2 RQ2: CTCNN在不同跨語言類型的克隆檢測效果

    為了測試本文方法在不同類型的跨語言代碼克隆的檢測效果,分別對不同跨語言代碼類型進行實驗,實驗結(jié)果如表3所示。從表中可以看出,Python和Java這兩種語言的跨語言代碼克隆檢測得到了最高的 F1 值,為 98.25%,這意味著相對于其他組合,該模型在識別Python和Java代碼時更加準確且具有更好的綜合效果。而當檢測C和Python語言時,該模型的精準率稍低,F(xiàn)1值為94.40%。

    進一步分析可發(fā)現(xiàn),C和Java的組合雖然召回率很高,但精確度較低。Python和C的組合精確度比較高,但是召回率較低,這可能是因為 Python和C在語法上有很大的差異,所以將它們結(jié)合起來進行檢測會導(dǎo)致一些漏檢情況的發(fā)生。而Python和Java的組合具有最高的精確度,達到了97.23%,這說明兩種語言之間的區(qū)別更加明顯,因此檢測效果更好。

    3.4.3 RQ3:同義詞轉(zhuǎn)換的消融實驗

    為了驗證AST同義詞轉(zhuǎn)換后的效果,進行了一個消融實驗來探討同義詞轉(zhuǎn)換后的AST對模型性能的影響。本實驗數(shù)據(jù)集共有91 070個AST,其中包含294 233 588個token,通過對AST進行同義詞轉(zhuǎn)換,共修改了1 043 725個token,占總數(shù)的0.35%。

    由表4可以看出,在同義詞轉(zhuǎn)換后,CTCNN的精準率提升了0.33%,召回率提升了14.8%,F(xiàn)1值提升了7.77%。這主要是因為不同編程語言的AST雖然在語法的差異性較低,但是在AST節(jié)點值上仍具有一定的差異性。所以,通過統(tǒng)一不同編程語言AST的節(jié)點值,降低了代碼解析的差異性,使得模型在語義表征方面有更好的表現(xiàn)。

    3.4.4 RQ4: 對比學(xué)習(xí)的消融實驗

    為了驗證對比學(xué)習(xí)對CTCNN的影響,通過調(diào)整CTCNN模型,去除CTCNN中對比學(xué)習(xí)的設(shè)置,具體步驟如下:首先,將CTCNN中的損失函數(shù)替換為交叉熵損失函數(shù);然后,對數(shù)據(jù)集作調(diào)整,將訓(xùn)練集中克隆對和非克隆對的比例設(shè)置為1∶1,驗證集和測試集中克隆對和非克隆對的比例設(shè)置為4∶1。將CTCNN與TCNN設(shè)置在A5000上訓(xùn)練1個epoch,得到的結(jié)果如表5所示??梢钥吹紺TCNN的性能指標比TCNN更好,CTCNN 的召回率提升了0.69%,精準率提升了14.01%,F(xiàn)1值提升了8.22%。這表明對比學(xué)習(xí)有助于CTCNN更好地分類正負樣本,從而提高模型的性能。因此,對比學(xué)習(xí)在CTCNN中起到了積極的作用。

    3.4.5 RQ5: CTCNN在小樣本數(shù)據(jù)的性能

    為了測試本文方法在小樣本情況下的優(yōu)勢,實驗按照隨機抽取樣本的原則,分別取訓(xùn)練集中10%、20%、30%、40%數(shù)據(jù)訓(xùn)練3個epoch,實驗結(jié)果如表6所示。當訓(xùn)練樣本為全部的訓(xùn)練集時,F(xiàn)1值最高,為97.56%。從表6可以看到,當訓(xùn)練集使用的數(shù)據(jù)比較少的時候,模型的表現(xiàn)不如使用更多的數(shù)據(jù)進行訓(xùn)練,但與使用全部訓(xùn)練數(shù)據(jù)集進行訓(xùn)練得到的結(jié)果相比,沒有較大的差距。最后值得注意的是,隨著訓(xùn)練樣本的增多,模型在R、P、F1這三個指標上的表現(xiàn)也并沒有穩(wěn)定增長。

    總之,基于對比學(xué)習(xí)的跨語言代碼克隆檢測在小樣本情況下也可以獲得較好的結(jié)果,但是為了更好地提升模型的性能,本文還需要進一步研究如何在有限的數(shù)據(jù)情況下有效地提取和利用關(guān)鍵信息。

    3.4.6 RQ6: 卷積層數(shù)對CTCNN的影響

    當使用樹的卷積神經(jīng)網(wǎng)絡(luò)進行代碼的表示學(xué)習(xí)時,卷積層數(shù)的選擇可以影響模型的性能。在AST上執(zhí)行卷積操作是一種有限制的方式,因為AST的結(jié)構(gòu)是有限的,不能像圖像一樣采用更深的網(wǎng)絡(luò)來提取更高層次的特征。 所以,在卷積神經(jīng)網(wǎng)絡(luò)中增加卷積層數(shù)的主要目的是為了通過在多個層級中對語法樹進行卷積操作來獲取更豐富的特征。

    通常,增加模型的復(fù)雜度可以提高模型在訓(xùn)練集上的性能,但可能會降低在測試集上的性能。因此,需要權(quán)衡模型的復(fù)雜度和性能來確定最佳的卷積層數(shù)。表7顯示了CTCNN分別在卷積層數(shù)為1、2、4層的表現(xiàn)??梢钥吹骄矸e層數(shù)對于跨語言代碼克隆檢測效果有著明顯的影響。增加卷積層數(shù)會提高模型的性能。這是因為在深層網(wǎng)絡(luò)中,模型可以學(xué)習(xí)更復(fù)雜的特征表示,從而更好地區(qū)分不同的克隆實例。

    3.4.7 RQ7: CTCNN的時間效率

    為了測試CTCNN的訓(xùn)練時間性能,將本文方法與其他方法在訓(xùn)練1個epoch的時間開銷進行對比。表8展示了本文方法與CLCDSA和C4模型的訓(xùn)練時長,其中:CLCDSA模型的訓(xùn)練時間最短,為8 s,這是由于CLCDSA模型根據(jù)特征工程提取了9個特征,需花費大量的時間對數(shù)據(jù)進行預(yù)處理;C4的訓(xùn)練時間約為57 min,這是由于C4使用了大型的預(yù)訓(xùn)練模型CodeBERT; CTCNN的訓(xùn)練時間平均為7 min 35 s,這表明CTCNN在訓(xùn)練時間上仍有一定的優(yōu)勢。

    3.5 實例分析

    CTCNN模型主要被設(shè)計用于跨語言的代碼克隆檢測中不同編程語言AST差異性較大的問題,通過對AST進行同義詞轉(zhuǎn)換,能夠提高不同編程語言AST的統(tǒng)一表示能力,使用對比學(xué)習(xí)可以更好地區(qū)分克隆對與非克隆對,例如,圖2是一對由Java和C語言組成的跨語言克隆代碼,這兩個代碼的AST存在較大的差距,通過同義詞轉(zhuǎn)換后,差異性得到了顯著降低,通過本文模型進行檢測,結(jié)果顯示這兩段代碼存在代碼克隆關(guān)系。這進一步證明了本文模型的有效性。

    3.6 有效性威脅

    實驗的訓(xùn)練集在不同類型的跨語言克隆對的數(shù)量不一致,可能會對樣本量較少的跨語言代碼克隆檢測效果不是很友好,如3.3節(jié)RQ2中的C語言和Python語言的跨語言代碼克隆檢測,除了這兩種語言本身差異性較大的原因,還有可能是由于訓(xùn)練樣本量較小或樣本質(zhì)量不好所導(dǎo)致的。為了降低該部分的影響,通過仔細地對樣本進行了分析,盡可能地保證不同編程語言在訓(xùn)練集、測試集和驗證集上的比例保持一致,減少這部分的差距。

    4 結(jié)束語

    本文提出的CTCNN模型是一種用于檢測跨語言克隆代碼的模型。它通過對抽象語法樹(AST)作出語義統(tǒng)一的處理來降低不同編程語言AST之間的差異性。同時,該模型使用了基于樹的卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)代碼表示,以獲取更加豐富的語義信息。相比傳統(tǒng)的方法,CTCNN模型利用對比學(xué)習(xí)可以訓(xùn)練更準確的模型,并能夠提高模型的魯棒性。然而,目前的CTCNN模型僅適用于樹結(jié)構(gòu)的代碼表示,并僅對AST的節(jié)點類型和節(jié)點值進行了語義統(tǒng)一的處理。在未來的工作中,主要目標是如何基于對比學(xué)習(xí),使用圖結(jié)構(gòu)的網(wǎng)絡(luò)模型對源碼進行表征。這將使得模型具有更好的可擴展性和泛化能力,同時也能更好地應(yīng)對不同編程語言的差異性。此外,還需要對不同編程語言的關(guān)鍵詞、標識符、操作符等進行語義統(tǒng)一的處理。這可以通過引入預(yù)處理步驟來實現(xiàn),例如使用自然語言處理技術(shù)來提取關(guān)鍵詞的語義信息,并將不同語言的關(guān)鍵詞映射到一個通用的向量空間中,從而降低不同語言之間的差異性。綜上所述,CTCNN模型是一種有前途的方法,可用于跨語言克隆代碼的檢測。未來的工作可以將其擴展到圖結(jié)構(gòu)的代碼表示,并對不同編程語言的關(guān)鍵詞、標識符、操作符等進行語義統(tǒng)一的處理。這將使得該模型更具適應(yīng)性和泛化能力,從而實現(xiàn)更準確的檢測效果。

    參考文獻:

    [1]Roy C K,Cordy J R,Koschke R. Comparison and evaluation of code clone detection techniques and tools: a qualitative approach[J]. Science of Computer Programming,2009,74(7): 470-495.

    [2]Cheng Xiao,Peng Zhiming,Jiang Lingxiao,et al. Mining revision histories to detect cross-language clones without intermediates[C]// Proc of the 31st IEEE/ACM International Conference on Automated Software Engineering. Piscataway,NJ: IEEE Press,2016: 696-701.

    [3]Fanta R,Rajlich V.Removing clones from the code[J].Journal of Software Maintenance: Research and Practice,1999,11(4):223-243.

    [4]Tao Chenning,Zhan Qi,Hu Xing,et al. C4: contrastive cross-language code clone detection[C]//Proc of the 30th IEEE/ACM International Conference on Program Comprehension. 2022: 413-424.

    [5]Vislavski T,Rakic' G,Cardozo N,et al. LICCA: a tool for cross-language clone detection[C]//Proc of the 25th IEEE International Conference on Software Analysis,Evolution and Reengineering.Pisca-taway,NJ:IEEE Press,2018: 512-516.

    [6]Nafi K W,Kar T S,Roy B,et al. CLCDSA: cross language code clone detection using syntactical features and API documentation[C]// Proc of the 34th IEEE/ACM International Conference on Automated Software Engineering. Piscataway,NJ:IEEE Press,2019:1026-1037.

    [7]Ling Huading,Zhang Aiping,Yin Changchun,et al. Improve representation for cross-language clone detection by pretrain using tree autoencoder[J]. Intelligent Automation & Soft Computing,2022,33(3): 1561-1577.

    [8]Rakic' G. Extendable and adaptable framework for input language independent static analysis[D]. Novi Sad: University of Novi Sad,2015.

    [9]Bui N D Q,Yu Yijun,Jiang Lingxiao. InferCode: self-supervised learning of code representations by predicting subtrees[C]//Proc of the 43rd IEEE/ACM International Conference on Software Enginee-ring. 2021: 1186-1197.

    [10]Mou Lili,Li Ge,Zhang Lu,et al. Convolutional neural networks over tree structures for programming language processing[C]// Proc of the 30th AAAI conference on artificial intelligence. Palo Alto,CA: AAAI Press,2016: 1287-1293.

    [11]Kamiya T,Kusumoto S,Inoue K. CCFinder: a multilinguistic token-based code clone detection system for large scale source code[J]. IEEE Trans on Software Engineering,2002,28(7): 654-670.

    [12]Feng Zhangyin,Guo Daya,Tang Duyu,et al. CodeBERT: a pre-trained model for programming and natural languages[C]// Proc of Conference on Empirical Methods in Natural Language Processing. Stroudsburg,PA: Association for Computational Linguistics,2020: 1536-1547.

    [13]Perez D,Chiba S. Cross-language clone detection by learning over abstract syntax trees[C]//Proc of the 16th IEEE/ACM International Conference on Mining Software Repositories. 2019: 518-528.

    [14]Narayanan A,Chandramohan M,Chen Lihui,et al. subgraph2vec: learning distributed representations of rooted sub-graphs from large graphs[EB/OL].(2016). https://arxiv.org/abs/1606.08928.

    [15]Yang Shouguo,Cheng Long,Zeng Yicheng,et al. Asteria: deep lear-ning-based AST-encoding for cross-platform binary code similarity detection[C]//Proc of the 51st Annual IEEE/IFIP International Conference on Dependable Systems and Networks. 2021: 224-236.

    [16]Shido Y,Kobayashi Y,Yamamoto A,et al. Automatic source code summarization with extended Tree-LSTM[C]//Proc of International Joint Conference on Neural Networks. 2019: 1-8.

    [17]Zhang Feng,Li Guofan,Liu Cong,et al. Flowchart-based cross-language source code similarity detection[J]. Scientific Programming,2020,2020: 1-15.

    [18]Cheng Xiao,Peng Zhiming,Jiang Lingxiao,et al. CLCMiner: detecting cross-language clones without intermediates[J]. IEICE Trans on Information and Systems,2017,100(2): 273-284.

    [19]Nafi K W,Roy B,Roy C K,et al. CroLSim: cross language software similarity detector using API documentation[C]//Proc of the 18th International Working Conference on Source Code Analysis and Manipulation. 2018: 139-148.

    [20]Bui N D Q,Yu Yijun,Jiang Lingxiao. Bilateral dependency neural networks for cross-language algorithm classification[C]//Proc of the 26th IEEE International Conference on Software Analysis,Evolution and Reengineering. 2019: 422-433.

    [21]Bromley J,Guyon I,LeCun Y,et al. Signature verification using a “siamese” time delay neural network[C]// Advances in Neural Information Processing Systems. 1993: 737-744.

    [22]Yu Yong,Si Xiaosheng,Hu Changhua,et al. A review of recurrent neural networks: LSTM cells and network architectures[J]. Neural Computation,2019,31(7): 1235-1270.

    [23]Groh F,Ruppert L,Wieschollek P,et al. GGNN: graph-based GPU nearest neighbor search[J]. IEEE Trans on Big Data,2022,9(1): 267-279.

    [24]Yahya M A,Kim D K. CLCD-I: cross-language clone detection by using deep learning with InferCode[J]. Computers,2023,12(1):12.

    [25]Liu Liyuan,Jiang Haoming,He Pengcheng,et al. On the variance of the adaptive learning rate and beyond[C]//Proc of International Conference on Learning Representations.2020.

    [26]Kingma D,Ba J. Adam: a method for stochastic optimization[EB/OL].(2014). https://arxiv.org/abs/1412.6980.

    欧美日韩亚洲高清精品| 久久久久久久久免费视频了| 中文字幕高清在线视频| 国产精品久久久久久精品古装| 精品人妻1区二区| 日本精品一区二区三区蜜桃| 在线看a的网站| 操美女的视频在线观看| 日韩免费高清中文字幕av| 大型黄色视频在线免费观看| 亚洲av日韩精品久久久久久密| 欧美日韩成人在线一区二区| 免费观看精品视频网站| 女人被躁到高潮嗷嗷叫费观| 国产亚洲欧美在线一区二区| 欧美日韩一级在线毛片| 伦理电影免费视频| 中文亚洲av片在线观看爽 | 91国产中文字幕| 在线av久久热| 欧美日韩瑟瑟在线播放| 国产高清激情床上av| 男女免费视频国产| 老司机午夜福利在线观看视频| 99久久99久久久精品蜜桃| 精品国产亚洲在线| 国产一区二区三区综合在线观看| 中文欧美无线码| 欧美精品av麻豆av| 久久久精品区二区三区| www.999成人在线观看| 18在线观看网站| √禁漫天堂资源中文www| 国产精品乱码一区二三区的特点 | 12—13女人毛片做爰片一| 国产精品免费一区二区三区在线 | 一本大道久久a久久精品| 黑人巨大精品欧美一区二区蜜桃| 国产男女超爽视频在线观看| 女人精品久久久久毛片| 两性午夜刺激爽爽歪歪视频在线观看 | 嫩草影视91久久| 女性生殖器流出的白浆| 交换朋友夫妻互换小说| 日韩欧美在线二视频 | 欧美精品一区二区免费开放| 精品第一国产精品| 久久香蕉精品热| 在线永久观看黄色视频| 黄片大片在线免费观看| 亚洲欧洲精品一区二区精品久久久| 激情在线观看视频在线高清 | 人人澡人人妻人| 亚洲中文字幕日韩| 中文字幕人妻丝袜一区二区| 桃红色精品国产亚洲av| 亚洲色图综合在线观看| 人人妻,人人澡人人爽秒播| videosex国产| 首页视频小说图片口味搜索| a级毛片黄视频| 99re在线观看精品视频| 免费人成视频x8x8入口观看| 欧美国产精品一级二级三级| 丰满饥渴人妻一区二区三| 欧美激情 高清一区二区三区| 丝袜人妻中文字幕| 精品国产乱子伦一区二区三区| 精品国产亚洲在线| 美女高潮到喷水免费观看| 欧美日韩福利视频一区二区| 一本综合久久免费| 一区福利在线观看| 中文欧美无线码| 精品少妇久久久久久888优播| 天堂俺去俺来也www色官网| 亚洲国产毛片av蜜桃av| a级毛片在线看网站| 欧美另类亚洲清纯唯美| 亚洲色图av天堂| 国产一区有黄有色的免费视频| 丝袜美腿诱惑在线| 午夜成年电影在线免费观看| 建设人人有责人人尽责人人享有的| 亚洲成人国产一区在线观看| 两性夫妻黄色片| 午夜免费鲁丝| 国产亚洲精品第一综合不卡| 亚洲av欧美aⅴ国产| www.精华液| 黄色成人免费大全| 亚洲av成人av| 18禁裸乳无遮挡动漫免费视频| 老司机深夜福利视频在线观看| 欧美精品高潮呻吟av久久| 午夜亚洲福利在线播放| 多毛熟女@视频| 久热爱精品视频在线9| 另类亚洲欧美激情| 99香蕉大伊视频| 99国产精品99久久久久| 亚洲少妇的诱惑av| 18在线观看网站| 怎么达到女性高潮| 乱人伦中国视频| 精品国产乱码久久久久久男人| 亚洲综合色网址| 97人妻天天添夜夜摸| 精品人妻在线不人妻| 最近最新免费中文字幕在线| 脱女人内裤的视频| 涩涩av久久男人的天堂| 99国产精品一区二区蜜桃av | 成人免费观看视频高清| 自拍欧美九色日韩亚洲蝌蚪91| 欧美不卡视频在线免费观看 | 久久久久国内视频| 国产激情欧美一区二区| 亚洲欧美色中文字幕在线| 满18在线观看网站| av天堂久久9| 国产精品久久久久久精品古装| 女性生殖器流出的白浆| 国产激情久久老熟女| 亚洲三区欧美一区| 国产男女超爽视频在线观看| av网站在线播放免费| 国产精品1区2区在线观看. | 久久午夜综合久久蜜桃| 乱人伦中国视频| 久久99一区二区三区| 法律面前人人平等表现在哪些方面| 女同久久另类99精品国产91| 久久香蕉国产精品| 777米奇影视久久| 777久久人妻少妇嫩草av网站| 18禁国产床啪视频网站| aaaaa片日本免费| 亚洲va日本ⅴa欧美va伊人久久| av欧美777| 欧美精品一区二区免费开放| 两性午夜刺激爽爽歪歪视频在线观看 | 黄色视频不卡| 99久久精品国产亚洲精品| 老司机亚洲免费影院| 国产免费av片在线观看野外av| 国产av又大| 在线国产一区二区在线| 午夜福利一区二区在线看| 国产精品成人在线| 一本大道久久a久久精品| 80岁老熟妇乱子伦牲交| 制服诱惑二区| 岛国在线观看网站| 在线天堂中文资源库| 99久久精品国产亚洲精品| 精品福利观看| 久久久国产精品麻豆| 国产成人欧美在线观看 | 日韩有码中文字幕| 国产乱人伦免费视频| 国产欧美日韩精品亚洲av| 精品一区二区三区四区五区乱码| 亚洲精品一卡2卡三卡4卡5卡| 欧美日本中文国产一区发布| 欧美日韩亚洲国产一区二区在线观看 | 国产精品久久久人人做人人爽| 欧美精品一区二区免费开放| 久久久久国产精品人妻aⅴ院 | 精品卡一卡二卡四卡免费| 国产xxxxx性猛交| 国产黄色免费在线视频| 亚洲专区字幕在线| a级片在线免费高清观看视频| 日韩有码中文字幕| 女同久久另类99精品国产91| 国产亚洲精品久久久久5区| 动漫黄色视频在线观看| 男女之事视频高清在线观看| 免费观看精品视频网站| 久久精品aⅴ一区二区三区四区| 中文欧美无线码| av电影中文网址| 在线永久观看黄色视频| 国产精品美女特级片免费视频播放器 | av片东京热男人的天堂| 黄网站色视频无遮挡免费观看| 国产精品一区二区在线观看99| 欧洲精品卡2卡3卡4卡5卡区| 国产亚洲精品第一综合不卡| 99香蕉大伊视频| 超碰成人久久| 午夜福利免费观看在线| 最近最新中文字幕大全电影3 | 18禁裸乳无遮挡免费网站照片 | 精品国产一区二区三区四区第35| 在线观看免费日韩欧美大片| 亚洲午夜精品一区,二区,三区| 日本黄色日本黄色录像| 欧美丝袜亚洲另类 | 亚洲午夜精品一区,二区,三区| 捣出白浆h1v1| 免费av中文字幕在线| 国产精品综合久久久久久久免费 | 亚洲第一av免费看| 91国产中文字幕| 搡老熟女国产l中国老女人| 日韩欧美一区二区三区在线观看 | 亚洲精品在线美女| 国产有黄有色有爽视频| 啦啦啦视频在线资源免费观看| 成年动漫av网址| 亚洲一卡2卡3卡4卡5卡精品中文| 国产精品99久久99久久久不卡| 亚洲中文av在线| 亚洲人成伊人成综合网2020| 动漫黄色视频在线观看| 精品乱码久久久久久99久播| av片东京热男人的天堂| 激情视频va一区二区三区| 久久中文字幕人妻熟女| 免费一级毛片在线播放高清视频 | 亚洲美女黄片视频| 黄片大片在线免费观看| 欧美日韩精品网址| 日本a在线网址| 一级毛片女人18水好多| 国产精品国产av在线观看| 国产精品秋霞免费鲁丝片| 精品福利观看| 久久精品国产亚洲av高清一级| 黄色a级毛片大全视频| 老熟女久久久| videosex国产| 欧美日韩一级在线毛片| 亚洲av片天天在线观看| 亚洲一区二区三区不卡视频| av网站在线播放免费| 亚洲精品一卡2卡三卡4卡5卡| 99re6热这里在线精品视频| 十分钟在线观看高清视频www| 老司机亚洲免费影院| 亚洲男人天堂网一区| av片东京热男人的天堂| 一二三四在线观看免费中文在| 国产免费av片在线观看野外av| 91国产中文字幕| 中文字幕高清在线视频| 午夜福利乱码中文字幕| 大陆偷拍与自拍| 男女高潮啪啪啪动态图| 丰满饥渴人妻一区二区三| 五月开心婷婷网| 精品无人区乱码1区二区| 成年版毛片免费区| 日本精品一区二区三区蜜桃| 日本一区二区免费在线视频| 成人永久免费在线观看视频| 精品一区二区三卡| 亚洲av日韩在线播放| 久久久久精品国产欧美久久久| av天堂在线播放| 91国产中文字幕| 激情在线观看视频在线高清 | 国精品久久久久久国模美| 欧美黑人精品巨大| 首页视频小说图片口味搜索| 十八禁高潮呻吟视频| 在线观看免费日韩欧美大片| 一边摸一边抽搐一进一出视频| videosex国产| 久久国产亚洲av麻豆专区| 18禁国产床啪视频网站| 亚洲精品国产色婷婷电影| 精品久久久久久,| 一进一出抽搐动态| 久久香蕉精品热| 大型av网站在线播放| 亚洲成人手机| 国产欧美亚洲国产| 精品第一国产精品| 18禁国产床啪视频网站| 国产精品 欧美亚洲| 欧美av亚洲av综合av国产av| 欧美丝袜亚洲另类 | 国产精品久久久久久精品古装| 老鸭窝网址在线观看| 天天躁日日躁夜夜躁夜夜| 19禁男女啪啪无遮挡网站| 久久影院123| 巨乳人妻的诱惑在线观看| 国产成人av教育| 丰满饥渴人妻一区二区三| 久久久久久久久久久久大奶| 欧美日韩瑟瑟在线播放| 亚洲欧美一区二区三区黑人| 日韩免费高清中文字幕av| 国产精品.久久久| 两个人看的免费小视频| 日韩欧美三级三区| xxx96com| 丰满的人妻完整版| 黑人猛操日本美女一级片| 久久国产乱子伦精品免费另类| 视频区图区小说| 亚洲国产欧美日韩在线播放| 91国产中文字幕| 久久国产精品影院| 丝袜人妻中文字幕| 亚洲中文字幕日韩| 青草久久国产| 国产精品久久久久久精品古装| 99riav亚洲国产免费| 国产乱人伦免费视频| 天堂中文最新版在线下载| 一区二区三区国产精品乱码| 色94色欧美一区二区| 91字幕亚洲| 91国产中文字幕| 精品少妇一区二区三区视频日本电影| 最近最新免费中文字幕在线| 在线观看66精品国产| av网站免费在线观看视频| 欧美人与性动交α欧美软件| 亚洲七黄色美女视频| 亚洲午夜理论影院| 国产一区二区三区在线臀色熟女 | 日韩免费av在线播放| 后天国语完整版免费观看| 国产精品亚洲一级av第二区| 亚洲精华国产精华精| 欧美精品啪啪一区二区三区| 久久人妻福利社区极品人妻图片| 香蕉久久夜色| 一夜夜www| 欧美日韩国产mv在线观看视频| 久久久水蜜桃国产精品网| 国产日韩一区二区三区精品不卡| 欧美黄色片欧美黄色片| 国产片内射在线| 日韩 欧美 亚洲 中文字幕| 国产成人欧美在线观看 | 欧美大码av| 丰满的人妻完整版| 久久热在线av| 欧美黑人欧美精品刺激| 夜夜躁狠狠躁天天躁| 国产91精品成人一区二区三区| 成年女人毛片免费观看观看9 | 久久国产乱子伦精品免费另类| 国产野战对白在线观看| 99精国产麻豆久久婷婷| 老司机福利观看| 男人舔女人的私密视频| 在线观看午夜福利视频| netflix在线观看网站| 久久久精品免费免费高清| 别揉我奶头~嗯~啊~动态视频| 亚洲一区中文字幕在线| 国产午夜精品久久久久久| 国产单亲对白刺激| 亚洲三区欧美一区| 国产亚洲精品久久久久5区| 搡老乐熟女国产| 成人国产一区最新在线观看| 久久99一区二区三区| 国产精品电影一区二区三区 | 青草久久国产| 99国产精品一区二区三区| 精品人妻熟女毛片av久久网站| 成人国语在线视频| 在线观看www视频免费| 日韩欧美免费精品| 国产日韩一区二区三区精品不卡| 免费黄频网站在线观看国产| 欧美亚洲 丝袜 人妻 在线| 精品久久久精品久久久| 日本精品一区二区三区蜜桃| 老司机福利观看| 天天躁夜夜躁狠狠躁躁| 亚洲人成电影观看| 欧美乱色亚洲激情| 久久国产精品大桥未久av| 亚洲欧美一区二区三区久久| а√天堂www在线а√下载 | 亚洲一卡2卡3卡4卡5卡精品中文| 嫩草影视91久久| 日本vs欧美在线观看视频| 亚洲伊人色综图| 两人在一起打扑克的视频| 国产男靠女视频免费网站| 国产精品亚洲av一区麻豆| 久久国产精品男人的天堂亚洲| 国产亚洲欧美精品永久| 久久精品国产亚洲av香蕉五月 | 亚洲av电影在线进入| 午夜日韩欧美国产| 欧美激情高清一区二区三区| 亚洲国产精品合色在线| 日韩大码丰满熟妇| 999精品在线视频| av福利片在线| 国产亚洲精品第一综合不卡| 欧美另类亚洲清纯唯美| 国产精品免费一区二区三区在线 | 国产精品久久久人人做人人爽| 成人影院久久| 天堂动漫精品| 少妇猛男粗大的猛烈进出视频| 久久国产精品大桥未久av| 无限看片的www在线观看| 成人亚洲精品一区在线观看| 91老司机精品| 天天躁夜夜躁狠狠躁躁| av电影中文网址| 日韩欧美一区二区三区在线观看 | 搡老乐熟女国产| 99re在线观看精品视频| 日本vs欧美在线观看视频| 女人被躁到高潮嗷嗷叫费观| 亚洲av第一区精品v没综合| 最新美女视频免费是黄的| 亚洲伊人色综图| 两性夫妻黄色片| 亚洲一区中文字幕在线| 亚洲性夜色夜夜综合| xxxhd国产人妻xxx| 国产精品久久久人人做人人爽| 久久精品国产99精品国产亚洲性色 | 精品一区二区三卡| aaaaa片日本免费| 丝袜在线中文字幕| 国产精品久久视频播放| 无限看片的www在线观看| 日韩熟女老妇一区二区性免费视频| 中文字幕最新亚洲高清| 一级a爱片免费观看的视频| 视频区图区小说| 欧美亚洲日本最大视频资源| 三级毛片av免费| 久久久国产欧美日韩av| 免费av中文字幕在线| 久久精品国产清高在天天线| 美女高潮喷水抽搐中文字幕| 国产激情久久老熟女| 亚洲少妇的诱惑av| 国产精品美女特级片免费视频播放器 | ponron亚洲| 超色免费av| 亚洲午夜精品一区,二区,三区| 久久中文字幕一级| 99国产精品99久久久久| 国产欧美日韩精品亚洲av| 两个人看的免费小视频| 日韩欧美一区二区三区在线观看 | 一区福利在线观看| 国产成人av激情在线播放| 露出奶头的视频| 亚洲自偷自拍图片 自拍| 纯流量卡能插随身wifi吗| 久9热在线精品视频| 新久久久久国产一级毛片| 欧美成人免费av一区二区三区 | 老司机午夜福利在线观看视频| 两个人免费观看高清视频| 两个人看的免费小视频| 日韩视频一区二区在线观看| 欧美激情久久久久久爽电影 | 久久中文字幕一级| 777久久人妻少妇嫩草av网站| 两性夫妻黄色片| 99国产极品粉嫩在线观看| 国产男女内射视频| 久久久水蜜桃国产精品网| 日韩免费高清中文字幕av| 亚洲五月天丁香| 12—13女人毛片做爰片一| 首页视频小说图片口味搜索| 日韩精品免费视频一区二区三区| 久久人妻av系列| 91精品三级在线观看| 99久久99久久久精品蜜桃| 国产精品久久久久久人妻精品电影| 超碰97精品在线观看| 99久久精品国产亚洲精品| 人妻 亚洲 视频| 精品国产乱子伦一区二区三区| 亚洲成av片中文字幕在线观看| 丝袜美足系列| 国产精品久久久久久人妻精品电影| 999久久久精品免费观看国产| 三级毛片av免费| 一区福利在线观看| 一级毛片精品| 免费人成视频x8x8入口观看| 999久久久精品免费观看国产| 亚洲成a人片在线一区二区| 久久久精品免费免费高清| 黄色怎么调成土黄色| 成在线人永久免费视频| 国产精品亚洲一级av第二区| 亚洲人成伊人成综合网2020| 少妇被粗大的猛进出69影院| 一区二区三区国产精品乱码| 一级片免费观看大全| 美女视频免费永久观看网站| 亚洲欧美激情综合另类| 国产欧美日韩一区二区三| 热re99久久国产66热| 久久久久久久久久久久大奶| 999久久久国产精品视频| 亚洲第一欧美日韩一区二区三区| 亚洲第一青青草原| 久久精品亚洲精品国产色婷小说| 大香蕉久久成人网| 女人高潮潮喷娇喘18禁视频| av天堂久久9| 大陆偷拍与自拍| 一边摸一边做爽爽视频免费| 两人在一起打扑克的视频| 91麻豆精品激情在线观看国产 | 国产亚洲一区二区精品| tocl精华| 别揉我奶头~嗯~啊~动态视频| 亚洲五月色婷婷综合| 欧美在线一区亚洲| 中文字幕精品免费在线观看视频| 丝袜美腿诱惑在线| 无限看片的www在线观看| 大陆偷拍与自拍| 久久精品国产综合久久久| 国产免费现黄频在线看| 看黄色毛片网站| videosex国产| 91九色精品人成在线观看| 99国产综合亚洲精品| 日韩免费高清中文字幕av| 亚洲av熟女| 午夜激情av网站| 视频在线观看一区二区三区| 黑人巨大精品欧美一区二区mp4| 欧美亚洲 丝袜 人妻 在线| 国产亚洲一区二区精品| 国产熟女午夜一区二区三区| 国产欧美日韩一区二区三区在线| 免费在线观看亚洲国产| 久久久国产欧美日韩av| 色综合欧美亚洲国产小说| 国产又色又爽无遮挡免费看| 欧美另类亚洲清纯唯美| 国产精品国产av在线观看| 91老司机精品| av有码第一页| 亚洲av片天天在线观看| 18禁美女被吸乳视频| 午夜激情av网站| tocl精华| 日本五十路高清| 色综合欧美亚洲国产小说| 在线观看免费视频网站a站| 欧美精品av麻豆av| 丰满的人妻完整版| 看免费av毛片| 精品免费久久久久久久清纯 | 中国美女看黄片| videos熟女内射| 淫妇啪啪啪对白视频| 精品免费久久久久久久清纯 | 人妻久久中文字幕网| 美女高潮到喷水免费观看| 少妇 在线观看| 成人国语在线视频| 中文字幕人妻丝袜一区二区| 老熟妇乱子伦视频在线观看| 亚洲人成伊人成综合网2020| 人妻一区二区av| a级毛片黄视频| 亚洲人成伊人成综合网2020| 啦啦啦免费观看视频1| 国精品久久久久久国模美| 国产精品久久视频播放| 久久国产乱子伦精品免费另类| 欧美最黄视频在线播放免费 | 日韩有码中文字幕| 欧美午夜高清在线| 久久精品亚洲熟妇少妇任你| 久久香蕉激情| 丰满的人妻完整版| av不卡在线播放| 欧美日韩视频精品一区| 欧美黑人精品巨大| av电影中文网址| 中文字幕人妻熟女乱码| 久久久精品免费免费高清| 国产亚洲精品一区二区www | 男女午夜视频在线观看| 高潮久久久久久久久久久不卡| 国产成人精品无人区| 久久人人97超碰香蕉20202| 欧美精品av麻豆av| 亚洲av日韩在线播放| 老熟女久久久| 精品国产乱子伦一区二区三区| 日韩人妻精品一区2区三区| 免费黄频网站在线观看国产| 亚洲精品av麻豆狂野| 久久久久久久久久久久大奶| 村上凉子中文字幕在线| 精品国产乱子伦一区二区三区| 狠狠狠狠99中文字幕| 女人被躁到高潮嗷嗷叫费观| 成人影院久久| 男女下面插进去视频免费观看| www.自偷自拍.com| 色尼玛亚洲综合影院|