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

    語(yǔ)句包裹模式的識(shí)別和分類(lèi)

    2020-07-04 02:27:37于永勝楊春花

    于永勝 楊春花

    摘要:軟件演化過(guò)程中會(huì)產(chǎn)生大量變更代碼,對(duì)變更代碼的識(shí)別有利于變更理解。其中普遍存在的把一個(gè)語(yǔ)句或語(yǔ)句序列移動(dòng)到一個(gè)或多個(gè)不同的語(yǔ)法實(shí)體中的變更行為,對(duì)于這種語(yǔ)句包裹模式的識(shí)別和分類(lèi),提出了基于代碼變更塊和抽象語(yǔ)法樹(shù)的語(yǔ)句包裹模式識(shí)別分類(lèi)算法。首先從變更前后版本2個(gè)文件中篩選出代碼變更塊,根據(jù)語(yǔ)句包裹模式的特征找到候選代碼變更塊,再建立抽象語(yǔ)法樹(shù),通過(guò)語(yǔ)法分析找到代碼變更塊中存在的語(yǔ)句包裹模式并對(duì)其進(jìn)行分類(lèi)。該算法在4個(gè)開(kāi)源項(xiàng)目中進(jìn)行了實(shí)驗(yàn)驗(yàn)證,實(shí)驗(yàn)結(jié)果表明該算法對(duì)語(yǔ)句包裹模式的識(shí)別具有較高的準(zhǔn)確率。

    關(guān)鍵詞: 語(yǔ)句包裹模式; 軟件演化; 抽象語(yǔ)法樹(shù); 代碼變更塊

    【Abstract】 During the software evolution process, a large number of change codes will be generated, and the identification of the change code is conducive to change understanding. Among them is the universal behavior of changing a statement or a sequence of statement into one or more different grammatical entities. For the recognition and classification of such statement encapsulation patterns, the paper proposes a statement encapsulation pattern recognition classification algorithm based on code change blocks and abstract syntax trees. First, the code change block is filtered from the two files before and after the change, and the candidate code change block is found according to the characteristics of the statement encapsulation pattern, then an abstract syntax tree is established. Finally,syntactic analysis is used to find and classify the statement encapsulation patterns existing in the code change block. The algorithm has been experimentally verified in four open source projects, and the experimental results show that the algorithm has a high accuracy rate for statement encapsulation pattern recognition.

    【Key words】 ?statement encapsulation pattern; software evolution; abstract syntax tree; code change block

    0 引 言

    軟件版本控制系統(tǒng)記錄著軟件開(kāi)發(fā)過(guò)程中的每個(gè)細(xì)節(jié)以及不同時(shí)期的不同版本,軟件版本控制系統(tǒng)每天都會(huì)產(chǎn)生大量的變更代碼,理解變更代碼可以使軟件日常維護(hù)和功能添加變得更加容易。理解軟件變更已經(jīng)成為軟件開(kāi)發(fā)人員日常開(kāi)發(fā)和維護(hù)的基本要求。

    在大量軟件變更代碼中存在對(duì)軟件的重構(gòu)、錯(cuò)誤修復(fù)以及功能添加。重構(gòu)是在不改變軟件外在行為的前提下,改進(jìn)軟件的內(nèi)部結(jié)構(gòu),使軟件更易于維護(hù)和功能的添加。Fowler[1]在其著作中詳細(xì)介紹了重構(gòu)模型,其核心是一個(gè)全面的重構(gòu)目錄。變更代碼中也存在對(duì)代碼的錯(cuò)誤修復(fù)。關(guān)于錯(cuò)誤報(bào)告方面的研究有:Zhang等人[2]對(duì)Bugzilla上的錯(cuò)誤報(bào)告進(jìn)行了實(shí)證研究,并指出了進(jìn)行錯(cuò)誤報(bào)告分析時(shí)可能存在的問(wèn)題;童燕翔[3]去除了bug report中的非修正性報(bào)告并提出了自動(dòng)化缺陷定位方法;關(guān)于錯(cuò)誤修復(fù)的識(shí)別方面的研究有:Eshkevari等人[4]提出了沿4個(gè)正交維度的標(biāo)識(shí)符重命名分類(lèi)方法,并實(shí)現(xiàn)了標(biāo)識(shí)符重命名的識(shí)別和分類(lèi);Kawrykow等人[5]開(kāi)發(fā)了一種工具支持的技術(shù),用于檢測(cè)軟件系統(tǒng)的修訂歷史記錄中不必要的代碼修改;Kim等人[6]通過(guò)分析錯(cuò)誤修復(fù)的歷史記錄開(kāi)發(fā)了錯(cuò)誤修復(fù)存儲(chǔ)器,并提出了一種使用錯(cuò)誤修復(fù)存儲(chǔ)器的錯(cuò)誤發(fā)現(xiàn)算法;關(guān)于錯(cuò)誤預(yù)測(cè)方面的研究有: 原子等人[7]提出了語(yǔ)句級(jí)的缺陷預(yù)測(cè)方法,揭示了變更易于引入缺陷的因素;劉望舒等人[8]針對(duì)挖掘軟件歷史倉(cāng)庫(kù)過(guò)程中程序模塊類(lèi)型標(biāo)記和軟件度量時(shí)產(chǎn)生的噪聲,提出一種可容忍噪聲的特征選擇框架FECS。

    軟件變更代碼中摻雜著大量的對(duì)軟件的重構(gòu)、錯(cuò)誤修復(fù)和功能添加的代碼,對(duì)軟件變更代碼中變更模式的提取有利于對(duì)軟件變更的理解。在對(duì)軟件變更進(jìn)行研究后,接著又研究了把一個(gè)語(yǔ)句或語(yǔ)句序列移動(dòng)到一個(gè)或多個(gè)不同的語(yǔ)法實(shí)體中的語(yǔ)句包裹模式。Pan等人[9]在其著作中從7個(gè)開(kāi)源項(xiàng)目的配置管理存儲(chǔ)庫(kù)中,使用錯(cuò)誤修復(fù)程序更改所涉及的語(yǔ)法組件和源代碼上下文定義了27個(gè)可自動(dòng)提取的錯(cuò)誤修復(fù)模式。但是其著作對(duì)錯(cuò)誤修復(fù)模式的研究并沒(méi)有完全涵蓋語(yǔ)句包裹模式所包含的變更類(lèi)型,因此還需要對(duì)語(yǔ)句包裹模式做進(jìn)一步的研究。

    1 語(yǔ)句包裹模式的識(shí)別和分類(lèi)

    1.1 代碼變更塊

    代碼變更塊(hunk)是由代碼變更前后版本之間的變更代碼構(gòu)成的,本文通過(guò)基于文本的方法獲取代碼變更塊,圖1中的代碼變更塊取自數(shù)據(jù)倉(cāng)庫(kù)jEdit中KeymapImpl.java文件的一次提交。在圖1所示的代碼變更塊中,左邊頁(yè)碼從第106~107行前面帶減號(hào)的代碼是代碼變更過(guò)程中從原文件中刪除的代碼,右邊頁(yè)碼從第106~111行前面帶加號(hào)的代碼是代碼變更后新版本文件中增加的代碼。

    1.2 抽象語(yǔ)法樹(shù)

    抽象語(yǔ)法樹(shù)抽象地表示了源代碼的語(yǔ)法結(jié)構(gòu),抽象語(yǔ)法樹(shù)通過(guò)將源代碼中的每一種結(jié)構(gòu)用節(jié)點(diǎn)表示來(lái)表現(xiàn)編程語(yǔ)言的語(yǔ)法結(jié)構(gòu),而真實(shí)語(yǔ)法中的每一個(gè)細(xì)節(jié)并沒(méi)有包含在抽象語(yǔ)法樹(shù)中,比如嵌套的括號(hào)在抽象語(yǔ)法樹(shù)中就沒(méi)有以節(jié)點(diǎn)的形式表現(xiàn)出來(lái),對(duì)于語(yǔ)句包裹模式的研究需要對(duì)代碼變更文件的抽象語(yǔ)法樹(shù)進(jìn)行分析。

    1.3 語(yǔ)句包裹模式的識(shí)別和分類(lèi)

    1.3.1 語(yǔ)句包裹模式

    語(yǔ)句包裹模式所表示的代碼變更行為是把一個(gè)語(yǔ)句或語(yǔ)句序列移動(dòng)到一個(gè)或多個(gè)不同的語(yǔ)法實(shí)體中,這個(gè)語(yǔ)法實(shí)體是一個(gè)結(jié)構(gòu)化的語(yǔ)句,語(yǔ)法實(shí)體包括If、Try、For、Switch、Synchronized、While、Labeled和Do。語(yǔ)句包裹模式所表示的代碼變更行為是將一個(gè)語(yǔ)句或語(yǔ)句序列移動(dòng)到一個(gè)或多個(gè)結(jié)構(gòu)化語(yǔ)句中,這種結(jié)構(gòu)化語(yǔ)句是這個(gè)語(yǔ)句或語(yǔ)句序列在被執(zhí)行時(shí)需要滿(mǎn)足的條件,是對(duì)代碼原文件的錯(cuò)誤修復(fù)。

    在圖2所示的語(yǔ)句包裹模式hunk實(shí)例取自數(shù)據(jù)倉(cāng)庫(kù)jEdit中文件Gutter.java的一次提交中,圖2中左邊頁(yè)碼第128行是從原文件中刪除的代碼,右側(cè)頁(yè)碼從128~129行是代碼變更過(guò)程中增加的代碼,第128行刪除的代碼和第129行增加的代碼是非常相似的,圖2中將一行代碼移動(dòng)到了一個(gè)If語(yǔ)法實(shí)體中,發(fā)生了語(yǔ)句包裹。對(duì)于一個(gè)語(yǔ)句或語(yǔ)句序列移動(dòng)到Try、For、Switch、Synchronized、While、Labeled和Do這七種語(yǔ)法實(shí)體中的變更行為也都屬于語(yǔ)句包裹模式。

    在圖3所示的語(yǔ)句包裹模式的hunk實(shí)例取自數(shù)據(jù)倉(cāng)庫(kù)jEdit中文件EditPane.java的一次提交,第1236行刪除的代碼和第1214行增加的代碼是非常相似的,就是將第1236行代碼從一個(gè)If語(yǔ)法實(shí)體中移動(dòng)了出來(lái),發(fā)生了逆向的語(yǔ)句包裹,屬于語(yǔ)句包裹模式。

    1.3.2 語(yǔ)句包裹模式的識(shí)別和分類(lèi)

    假設(shè)存在ha和hd分別為hunk中增加的代碼和刪除的代碼,la和ld分別為hunk中增加代碼和刪除代碼的相似部分,則pr和pl分別為la和ld的所有父節(jié)點(diǎn),cr和cl分別為la和ld在hunk內(nèi)的所有父節(jié)點(diǎn),mr和ml分別是la和ld父節(jié)點(diǎn)中的第一個(gè)方法節(jié)點(diǎn),當(dāng)這次變更屬于語(yǔ)句包裹模式時(shí),則需要滿(mǎn)足以下條件:

    (1)語(yǔ)句包裹模式的候選hunk中需要存在語(yǔ)句或語(yǔ)句序列移動(dòng)到一個(gè)或多個(gè)語(yǔ)法實(shí)體中,這些移動(dòng)的語(yǔ)句或語(yǔ)句序列是相似的,所以hunk中需要存在相似部分。

    (2)hunk中相似部分的父節(jié)點(diǎn)中第一個(gè)方法節(jié)點(diǎn)mr和ml的方法名是相同的。對(duì)于la和ld在hunk內(nèi)的父節(jié)點(diǎn)cr和cl,需要滿(mǎn)足一個(gè)為空集且另一個(gè)不為空集的條件,且la和ld的所有父節(jié)點(diǎn)pr和pl不能完全相同。

    判斷此次變更屬于語(yǔ)句包裹模式后,當(dāng)cr不為空且cl為空時(shí),可以判斷變更屬于正向的語(yǔ)句包裹模式,并根據(jù)語(yǔ)法實(shí)體的種類(lèi)對(duì)語(yǔ)句包裹模式進(jìn)行分類(lèi),這里的語(yǔ)法實(shí)體就是cr的第一個(gè)節(jié)點(diǎn)。當(dāng)cl不為空且cr為空時(shí),可以判斷為逆向的語(yǔ)句包裹模式,將cl的第一個(gè)節(jié)點(diǎn)作為語(yǔ)法實(shí)體,并根據(jù)這里的語(yǔ)法實(shí)體對(duì)語(yǔ)句包裹模式進(jìn)行分類(lèi)。

    1.3.3 根據(jù)代碼相似度識(shí)別hunk中的代碼移動(dòng)

    在圖2語(yǔ)句包裹模式的候選hunk中,從原版本文件中刪除的代碼是左側(cè)頁(yè)碼的第128行,代碼變更后增加的代碼是右側(cè)頁(yè)碼的第128~129行,原版本文件中第128行代碼在代碼變更后移動(dòng)到了新版本文件的第129行,這些移動(dòng)的語(yǔ)句或語(yǔ)句序列具有很高的相似度,因此要識(shí)別這樣的代碼移動(dòng)需要對(duì)變更代碼進(jìn)行相似度識(shí)別。

    1.3.4 通過(guò)抽象語(yǔ)法樹(shù)識(shí)別語(yǔ)句包裹模式

    從語(yǔ)句包裹模式候選hunk中找到移動(dòng)的語(yǔ)句或語(yǔ)句序列后,需要確定hunk相似部分la和ld的父節(jié)點(diǎn)pr和pl中的第一個(gè)方法節(jié)點(diǎn)mr和ml的方法名需要相同,還需要確定hunk和相似部分之間存在一個(gè)或多個(gè)語(yǔ)法實(shí)體,也就是la和ld在hunk內(nèi)的父節(jié)點(diǎn)cr和cl需要一個(gè)為空集一個(gè)不為空集,la和ld的所有父節(jié)點(diǎn)pr和pl不能完全相同。

    首先獲取la和ld的行范圍ra和rd,獲取hunk增加代碼和刪除代碼ha和hd的行范圍ka和kd,遍歷代碼變更前后版本的兩個(gè)文件的語(yǔ)法樹(shù),找到行范圍分別包含ra和rd的父節(jié)點(diǎn)pr和pl,找到行范圍位于ra和ka之間的父節(jié)點(diǎn)cr,找到行范圍位于rd和kd之間的父節(jié)點(diǎn)cl,分別從pr和pl中找到la和ld的第一個(gè)方法節(jié)點(diǎn)mr和ml,判斷mr和ml是否是同名函數(shù)節(jié)點(diǎn),判斷cr和cl是否一個(gè)為空集、另一個(gè)不為空集,判斷pr和pl是否不完全相同,如果都滿(mǎn)足,則該代碼變更是語(yǔ)句包裹模式。

    1.3.5 語(yǔ)句包裹模式識(shí)別和分類(lèi)算法

    本算法輸入的是變更前后2個(gè)版本的文件filel和filer,輸出是語(yǔ)句序列移動(dòng)到的語(yǔ)法實(shí)體En和該語(yǔ)法實(shí)體的分支Eb,En=,en是filel和filer文件中的一個(gè)語(yǔ)句包裹模式變更中的語(yǔ)句或語(yǔ)句序列移動(dòng)到的語(yǔ)法實(shí)體,Eb=,eb是語(yǔ)句或語(yǔ)句序列移動(dòng)到語(yǔ)法實(shí)體en中后所位于的en的分支。

    算法1 語(yǔ)句包裹模式識(shí)別算法

    輸入:代碼變更前后版本兩個(gè)文件filel和filer

    輸出:filel和filer文件中每一個(gè)語(yǔ)句包裹模式變更中語(yǔ)法實(shí)體en的集合En和語(yǔ)句移動(dòng)到語(yǔ)法實(shí)體后所在的分支eb的集合Eb

    1(Ha,Hd)←getHunk(filel, filer)

    2 (La,Ld)←getSimilarPart(Ha,Hd)

    3 Ka←getHunkRange(Ha)

    4 Kd←getHunkRange(Hd)

    5 tl←generateAST(filel)

    6 tr←generateAST(filer)

    7 Ra←getSimilarPartRange(La)

    8 Rd←getSimilarPartRange(Ld)

    9 (Pr,Cr,Br)←ergodicAST(Ka,Ra,tr)

    10 (Pl,Cl,Bl)←ergodicAST(Kd,Rd,tl)

    11 for each cl∈Cl, cr∈Cr, pl∈Pl, pr∈Pr, bl∈Bl, br∈Br

    12 ml←getMethodNode(pl)

    13 mr←getMethodNode(pr)

    14 if(isSimilarMethod(ml,mr))

    15 ?if ((cl=)&&(cr≠)‖((cl≠)&&(cr=)

    16 ? if(pl≠pr)

    17 [WB]if((cl≠)&&(cr=))

    18en←identifyEncapsulateNode(cl)

    19eb←identifyBranch(bl)

    20En←en

    21Eb←eb

    22 [DW]else if ((cl=)&&(cr≠))

    23en←identifyEncapsulateNode(cr)

    24eb←identifyBranch(br)

    25En←en

    26Eb←eb

    27end if

    28 ? end if

    29 ?end if

    30 ?end if

    31 end for

    算法第1行生成代碼變更前后版本文件的hunk集Ha和Hd,從hunk集中識(shí)別出相似部分的集合La和Ld,第3~4行得到hunk集Ha和Hd的行范圍集合Ka和Kd,第5~6行得到filel和filer的抽象語(yǔ)法樹(shù)的根節(jié)點(diǎn)tl和tr,第7~8行得到hunk的相似部分的集合La和Ld的行范圍集合Ra和Rd,第9~10行通過(guò)遍歷filer和filel的語(yǔ)法樹(shù)得到相似部分的所有父節(jié)點(diǎn)集合Pr和Pl、在hunk內(nèi)的父節(jié)點(diǎn)的集合Cr和Cl以及相似部分在父節(jié)點(diǎn)Pr和Pl中每一個(gè)節(jié)點(diǎn)的分支的集合Br和Bl,第11~13行分別找到pr和pl中相似部分的第一個(gè)滿(mǎn)足是方法節(jié)點(diǎn)的父節(jié)點(diǎn),第14行判斷2個(gè)方法父節(jié)點(diǎn)是否滿(mǎn)足方法名不相同的條件,第15行判斷相似部分在hunk內(nèi)的父節(jié)點(diǎn)cl和cr是否滿(mǎn)足一個(gè)為空集、另一個(gè)不為空集的條件,第16~27行判斷相似部分在文件中的所有父節(jié)點(diǎn)pl和pr是否滿(mǎn)足不完全相同的條件。算法的第17~21行中,當(dāng)cl和cr滿(mǎn)足cl不為空集而cr為空集時(shí),將cl中第一個(gè)節(jié)點(diǎn)作為語(yǔ)句包裹模式的語(yǔ)法實(shí)體存入en中,en存入En,并將該語(yǔ)法實(shí)體的相應(yīng)分支bl存入eb中,eb存入Eb。第22~31行中,當(dāng)cl為空集而cr不為空集時(shí),將cr的第一個(gè)父節(jié)點(diǎn)作為語(yǔ)句包裹模式的語(yǔ)法實(shí)體存入en,en存入En,并將該語(yǔ)法實(shí)體的相應(yīng)分支br存入eb中,eb存入Eb。

    上述算法中第9~10行使用了函數(shù)ergodicAST,下面是對(duì)函數(shù)ergodicAST的描述:函數(shù)ergodicAST的輸入為文件hunk集H的行范圍的集合K,hunk集中相似部分L的行范圍的集合R,以及文件的語(yǔ)法樹(shù)的根節(jié)點(diǎn)t。輸出為文件中相似部分集合的所有父節(jié)點(diǎn)的集合P,相似部分在hunk集內(nèi)的父節(jié)點(diǎn)的集合C,以及相似部分在父節(jié)點(diǎn)集合P中每一個(gè)節(jié)點(diǎn)的分支的集合B。

    算法2 ergodicAST算法

    輸入:文件hunk集H的行范圍K,相似部分集L的行范圍R以及文件的語(yǔ)法樹(shù)的根節(jié)點(diǎn)t

    輸出:文件hunk集相似部分的父節(jié)點(diǎn)集合P,相似部分在hunk集內(nèi)的父節(jié)點(diǎn)集合C,相似部分在父節(jié)點(diǎn)集合P中每個(gè)節(jié)點(diǎn)的分支的集合B

    1 for each k∈K,r∈R

    2 N←t

    3 while(N≠)

    4 ?n←takeOutFirstNode(N)

    5 ?p←n

    6 ?rz←getNodeRange(n)

    7 ?if(rrz)&&(rzk)

    8 ? [WB]c←n

    9 ?end if

    10 Bz←getAllBranch(n)

    11 ?for each bz∈Bz

    12 ?[DW]Nt←getAllNode(bz)

    13 ?rb←getRange(Nt)

    14 ? if(rrb)

    15 ? b←bz

    16 ? end if

    17 ? for each nc∈Nt

    18rc←getNodeRange(nc)

    19if(rrc)

    20N←nc

    21end if

    22 ? end for

    23 ?end for

    24 end while

    25 P←p

    26 C←c

    27 B←b

    28 end for

    算法第1~5行將文件語(yǔ)法樹(shù)中相似部分的第一個(gè)父節(jié)點(diǎn)存入p中,第6~9行判斷該節(jié)點(diǎn)是否也在hunk內(nèi),如果在hunk內(nèi)就將其存入c中,第10~16行獲取n節(jié)點(diǎn)的分支集合Bz,并將包含相似部分的分支存入b中,第17~24行遍歷分支內(nèi)的節(jié)點(diǎn),將包含相似部分的節(jié)點(diǎn)存入N,若N不為空集,則繼續(xù)遍歷文件的語(yǔ)法樹(shù)。第25~28行將p、c和b分別存入P、C和B中。

    2 算法的實(shí)現(xiàn)和驗(yàn)證

    本文實(shí)驗(yàn)使用了Java編程語(yǔ)言、基于文本的差異化分析工具Gnu Diff[10]以及eclipse jdt parser工具。首先使用了基于文本的差異化分析工具Gnu Differ(http://www.gnu.org/software/diffutils)獲取代碼變更前后版本文件的代碼變更塊hunk,再使用eclipse jdt parser工具分析代碼變更前后版本文件的抽象語(yǔ)法樹(shù)。并從4個(gè)開(kāi)源項(xiàng)目中獲取了數(shù)據(jù)集用于實(shí)驗(yàn)研究。

    2.1 數(shù)據(jù)獲取

    本實(shí)驗(yàn)使用了從4個(gè)開(kāi)源項(xiàng)目中獲取的數(shù)據(jù)集,下面是對(duì)本實(shí)驗(yàn)使用的數(shù)據(jù)集的介紹。

    (1)[JP4]開(kāi)源項(xiàng)目jEdit(http://sourceforge.net/project/jedit),該開(kāi)源項(xiàng)目是一個(gè)跨平臺(tái)的文本編輯器。

    (2)開(kāi)源項(xiàng)目eclipseJDTCore(http://www.eclipse.org/downloads/eclipse-packages/),該開(kāi)源項(xiàng)目是一個(gè)面向Java的集成開(kāi)發(fā)環(huán)境。

    (3)開(kāi)源項(xiàng)目maven(http://maven.apache.org/),該開(kāi)源項(xiàng)目是通過(guò)信息描述來(lái)管理項(xiàng)目構(gòu)建、報(bào)告和文檔的管理工具。

    (4)開(kāi)源項(xiàng)目google-guice(https://github.com/apress/google-guice),該開(kāi)源項(xiàng)目是一個(gè)輕量級(jí)的依賴(lài)注入容器。

    表1是描述了從4個(gè)開(kāi)源項(xiàng)目中獲取的數(shù)據(jù)集的項(xiàng)目名稱(chēng)、獲取時(shí)間段、提交總數(shù)、文件總數(shù)以及提交和文件的匹配數(shù)commit_file的信息。

    2.2 實(shí)驗(yàn)結(jié)果及分析

    本文中分別從4個(gè)開(kāi)源項(xiàng)目的數(shù)據(jù)集中人工抽取了語(yǔ)句包裹模式變更集,并使用本文算法在人工抽取的變更集上進(jìn)行了實(shí)驗(yàn)驗(yàn)證,實(shí)驗(yàn)結(jié)果見(jiàn)表2。

    從實(shí)驗(yàn)結(jié)果可以看出,本文算法在人工抽取的語(yǔ)句包裹模式的變更集中的識(shí)別率在86%~90%之間波動(dòng)。

    將本文算法在4個(gè)開(kāi)源項(xiàng)目的數(shù)據(jù)倉(cāng)庫(kù)中進(jìn)行實(shí)驗(yàn)驗(yàn)證后,從實(shí)驗(yàn)結(jié)果所有版本中抽取了10%進(jìn)行人工檢測(cè),對(duì)從實(shí)驗(yàn)結(jié)果中抽取的10%進(jìn)行人工檢測(cè)后的驗(yàn)證結(jié)果見(jiàn)表3。

    本文算法對(duì)4個(gè)開(kāi)源項(xiàng)目數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行了語(yǔ)句包裹模式識(shí)別,對(duì)從識(shí)別結(jié)果所有版本中抽取的10%進(jìn)行人工檢測(cè)后,檢測(cè)結(jié)果的準(zhǔn)確率在95%~98%之間波動(dòng)。

    本文算法在4個(gè)開(kāi)源項(xiàng)目數(shù)據(jù)倉(cāng)庫(kù)上進(jìn)行實(shí)驗(yàn)得到實(shí)驗(yàn)結(jié)果集后,從結(jié)果集中抽取每一種語(yǔ)句包裹模式的變更版本集的10%進(jìn)行人工檢測(cè),實(shí)驗(yàn)結(jié)果見(jiàn)表4。

    對(duì)從實(shí)驗(yàn)結(jié)果集中每種語(yǔ)句包裹模式變更版本集中抽取10%并進(jìn)行人工檢測(cè)后,實(shí)驗(yàn)結(jié)果顯示準(zhǔn)確率在95%~97%之間波動(dòng)。

    對(duì)人工抽取的變更集的識(shí)別率以及對(duì)從結(jié)果集中抽取實(shí)例進(jìn)行人工驗(yàn)證的準(zhǔn)確率未能達(dá)到100%的原因,在于語(yǔ)句包裹粒度較大的語(yǔ)句包裹模式變更被Gnu Diff劃分到了多個(gè)hunk中,這種情況降低了本文算法識(shí)別結(jié)果的準(zhǔn)確度,將來(lái)可以為大粒度語(yǔ)句包裹模式變更提供hunk合并功能,以提高對(duì)于這種情況的識(shí)別準(zhǔn)確率。

    3 結(jié)束語(yǔ)

    本文通過(guò)對(duì)代碼變更的研究,介紹了代碼變更中普遍存在的語(yǔ)句包裹模式,提出了基于代碼變更塊和抽象語(yǔ)法樹(shù)的語(yǔ)句包裹模式識(shí)別分類(lèi)算法,在4個(gè)開(kāi)源項(xiàng)目數(shù)據(jù)倉(cāng)庫(kù)上進(jìn)行實(shí)驗(yàn)驗(yàn)證后,實(shí)驗(yàn)結(jié)果證明本文算法對(duì)于語(yǔ)句包裹模式的識(shí)別具有較高的準(zhǔn)確率。對(duì)于存在代碼移動(dòng)的提煉函數(shù)(Extract Method)和提煉類(lèi)(Extract Class)等重構(gòu)模式,本文提出的基于代碼變更塊和抽象語(yǔ)法樹(shù)的算法也能對(duì)其進(jìn)行識(shí)別。在將來(lái)的研究中,需要為大粒度語(yǔ)句包裹模式變更提供hunk合并功能。并將該算法在更多數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)驗(yàn)證的基礎(chǔ)上將其用于其他重構(gòu)模式的識(shí)別。

    參考文獻(xiàn)

    [1] FOWLER M.Refactoring: Improving the design of existing code[M]. USA:Addison-Wesley, 1999.

    [2]ZHANG Jie,WANG Xiaoyin,HAO Dan,et al. A survey on bug-report analysis[J]. Science China(Information Sciences),2015,58(2):92.

    [3]童燕翔. 基于Bug Report的降噪和缺陷定位研究[D]. 南京:南京航空航天大學(xué),2016.

    [4]ESHKEVARI L M, ARNAOUDOVA V, PENTA M D, et al. An exploratory study of identifier renamings[C]// International Working Conference on Mining Software Repositories, (MSR). Honolulu,HI, USA:Dblp, 2011:33.

    [5]KAWRYKOW D, ROBILLARD M P. Non-essential changes in version histories[C]// 2011 33rd International Conference on Software Engineering. Honolulu,HI, USA:IEEE, 2011:351.

    [6]KIM S , PAN K , WHITEHEAD E J . Memories of bug fixes[C]// Proceedings of the 14th ACM SIGSOFT International Symposium on Foundations of Software Engineering, FSE 2006. Portland, Oregon, USA:ACM, 2006:35.

    [7]原子,于莉莉,劉超. 面向細(xì)粒度源代碼變更的缺陷預(yù)測(cè)方法[J]. 軟件學(xué)報(bào),2014,25(11):2499.

    [8]劉望舒,陳翔,顧慶,等. 一種面向軟件缺陷預(yù)測(cè)的可容忍噪聲的特征選擇框架[J]. 計(jì)算機(jī)學(xué)報(bào),2018,41(3):506.

    [9]PAN Kai, KIM S H, WHITEHEAD E J.Toward an understanding of bug fix patterns[J].Empirical Software Engineering,2009,14(3):286.

    [10]HUNT J W, SZYMANSKI T G. A fast algorithm for computing longest common subsequences[J].Communications of the Association for Computing Machinery,1977,20(5):350.

    精品福利观看| 国产探花在线观看一区二区| a级毛片a级免费在线| 国产高清激情床上av| 久久久久久九九精品二区国产 | 国产精品电影一区二区三区| 操出白浆在线播放| 午夜福利在线观看吧| 最近视频中文字幕2019在线8| 99久久久亚洲精品蜜臀av| 超碰成人久久| 国产成人精品久久二区二区免费| 法律面前人人平等表现在哪些方面| 国产v大片淫在线免费观看| 很黄的视频免费| 一本久久中文字幕| 嫩草影院精品99| 99精品欧美一区二区三区四区| 色在线成人网| 亚洲精品在线美女| 国产精品一区二区三区四区免费观看 | 黄色成人免费大全| 日本 欧美在线| 三级国产精品欧美在线观看 | 操出白浆在线播放| 国产精品日韩av在线免费观看| 在线永久观看黄色视频| 精品福利观看| 看黄色毛片网站| 后天国语完整版免费观看| 国产高清视频在线观看网站| 久久国产乱子伦精品免费另类| 亚洲国产精品合色在线| 欧美黄色淫秽网站| 国产av不卡久久| 12—13女人毛片做爰片一| 波多野结衣巨乳人妻| 日韩有码中文字幕| 黄色视频不卡| 久久香蕉精品热| 国产精品野战在线观看| 欧美一级毛片孕妇| 国产精品日韩av在线免费观看| 亚洲美女黄片视频| 免费在线观看影片大全网站| 中文字幕久久专区| 国产日本99.免费观看| 舔av片在线| 国产私拍福利视频在线观看| 午夜福利高清视频| 成人永久免费在线观看视频| 正在播放国产对白刺激| aaaaa片日本免费| 一个人观看的视频www高清免费观看 | 久热爱精品视频在线9| 校园春色视频在线观看| 美女 人体艺术 gogo| av视频在线观看入口| avwww免费| 黑人巨大精品欧美一区二区mp4| 精品第一国产精品| 欧美黄色淫秽网站| 麻豆av在线久日| 亚洲av成人av| 亚洲最大成人中文| 啦啦啦韩国在线观看视频| 后天国语完整版免费观看| 国产精品久久久久久人妻精品电影| 国产一区二区三区视频了| 国产伦一二天堂av在线观看| 精品久久久久久久久久久久久| 三级毛片av免费| 18美女黄网站色大片免费观看| 九色成人免费人妻av| 97碰自拍视频| 精品不卡国产一区二区三区| 亚洲av中文字字幕乱码综合| 国产又黄又爽又无遮挡在线| 首页视频小说图片口味搜索| 禁无遮挡网站| 欧美在线一区亚洲| 国产精品av久久久久免费| 亚洲精品粉嫩美女一区| 岛国视频午夜一区免费看| 他把我摸到了高潮在线观看| 美女高潮喷水抽搐中文字幕| 九色成人免费人妻av| 国产精品九九99| 老汉色av国产亚洲站长工具| 国产精品久久久av美女十八| 搡老岳熟女国产| 日韩成人在线观看一区二区三区| 国产三级中文精品| 亚洲一区中文字幕在线| 少妇熟女aⅴ在线视频| 欧美精品啪啪一区二区三区| 怎么达到女性高潮| 看片在线看免费视频| 窝窝影院91人妻| 成人18禁在线播放| 成人18禁高潮啪啪吃奶动态图| xxx96com| 丁香六月欧美| 久久伊人香网站| 亚洲国产精品久久男人天堂| 中文字幕最新亚洲高清| 制服人妻中文乱码| 人人妻,人人澡人人爽秒播| 在线观看免费视频日本深夜| 在线观看www视频免费| 大型黄色视频在线免费观看| 美女大奶头视频| 97人妻精品一区二区三区麻豆| 亚洲激情在线av| 19禁男女啪啪无遮挡网站| 哪里可以看免费的av片| 琪琪午夜伦伦电影理论片6080| 香蕉丝袜av| 国模一区二区三区四区视频 | 亚洲av美国av| 少妇被粗大的猛进出69影院| 日韩欧美一区二区三区在线观看| 久久亚洲精品不卡| av欧美777| 亚洲熟女毛片儿| 精品少妇一区二区三区视频日本电影| 亚洲色图av天堂| 全区人妻精品视频| 国产精品久久久久久久电影 | 欧美在线一区亚洲| 日本 欧美在线| 又大又爽又粗| 毛片女人毛片| 国产97色在线日韩免费| 欧洲精品卡2卡3卡4卡5卡区| 校园春色视频在线观看| 欧美国产日韩亚洲一区| 最新美女视频免费是黄的| 亚洲精品av麻豆狂野| 国产亚洲精品av在线| 一本大道久久a久久精品| 日韩国内少妇激情av| 国产乱人伦免费视频| 搡老熟女国产l中国老女人| 超碰成人久久| 精品少妇一区二区三区视频日本电影| 午夜视频精品福利| 村上凉子中文字幕在线| 色噜噜av男人的天堂激情| 色综合亚洲欧美另类图片| 变态另类丝袜制服| 亚洲黑人精品在线| 日本 欧美在线| 午夜老司机福利片| 色尼玛亚洲综合影院| 国产在线精品亚洲第一网站| 高潮久久久久久久久久久不卡| 国产午夜精品论理片| 麻豆成人av在线观看| 亚洲av成人不卡在线观看播放网| 男女做爰动态图高潮gif福利片| 一二三四社区在线视频社区8| 久久久国产精品麻豆| 一级片免费观看大全| 日本一二三区视频观看| 麻豆成人午夜福利视频| 欧美色视频一区免费| 在线观看免费午夜福利视频| 欧美3d第一页| 国产精品一区二区三区四区久久| 午夜a级毛片| 一级a爱片免费观看的视频| 亚洲中文字幕一区二区三区有码在线看 | 国产在线观看jvid| 草草在线视频免费看| 午夜福利欧美成人| 国产精品,欧美在线| 国产成年人精品一区二区| 国产精品,欧美在线| 亚洲熟妇中文字幕五十中出| 又黄又粗又硬又大视频| 黄色丝袜av网址大全| 国产成人啪精品午夜网站| 国产精品 欧美亚洲| 三级毛片av免费| 一本一本综合久久| 亚洲五月天丁香| 一级作爱视频免费观看| 日韩有码中文字幕| 成年免费大片在线观看| 蜜桃久久精品国产亚洲av| 久久伊人香网站| 淫妇啪啪啪对白视频| 91老司机精品| 亚洲国产中文字幕在线视频| 法律面前人人平等表现在哪些方面| 成人18禁在线播放| 中文在线观看免费www的网站 | 国产成+人综合+亚洲专区| 久久 成人 亚洲| 免费在线观看日本一区| 国产伦一二天堂av在线观看| 精品一区二区三区av网在线观看| 日本精品一区二区三区蜜桃| 久久中文看片网| 嫩草影院精品99| 99精品久久久久人妻精品| 亚洲国产中文字幕在线视频| 午夜激情福利司机影院| 丰满人妻熟妇乱又伦精品不卡| 一进一出抽搐动态| 成人三级做爰电影| 久久国产精品人妻蜜桃| 成熟少妇高潮喷水视频| 一本精品99久久精品77| 国产成人av激情在线播放| 怎么达到女性高潮| 精品国内亚洲2022精品成人| 91老司机精品| 国产激情欧美一区二区| 国产伦在线观看视频一区| 777久久人妻少妇嫩草av网站| 国产精品乱码一区二三区的特点| 精品福利观看| 女同久久另类99精品国产91| 久久精品人妻少妇| 99国产极品粉嫩在线观看| 黄色毛片三级朝国网站| 成年版毛片免费区| 国产精品免费视频内射| 亚洲色图av天堂| 亚洲欧美精品综合一区二区三区| 亚洲精品一卡2卡三卡4卡5卡| 国产乱人伦免费视频| 一二三四在线观看免费中文在| 国产精品久久久久久久电影 | 亚洲中文字幕一区二区三区有码在线看 | 一级a爱片免费观看的视频| 亚洲男人天堂网一区| 性色av乱码一区二区三区2| 人成视频在线观看免费观看| av有码第一页| 我要搜黄色片| 一边摸一边抽搐一进一小说| 成人手机av| 国产成人av教育| 国产成人欧美在线观看| av片东京热男人的天堂| xxx96com| 看黄色毛片网站| 国产精品一区二区精品视频观看| 亚洲人成网站在线播放欧美日韩| 我的老师免费观看完整版| 999久久久国产精品视频| 免费电影在线观看免费观看| 亚洲国产欧美人成| 国产成人精品无人区| 在线观看午夜福利视频| 亚洲aⅴ乱码一区二区在线播放 | 人妻丰满熟妇av一区二区三区| 欧美高清成人免费视频www| 91大片在线观看| 国产又黄又爽又无遮挡在线| 人妻丰满熟妇av一区二区三区| 午夜成年电影在线免费观看| 性欧美人与动物交配| 1024视频免费在线观看| 国产成人精品久久二区二区91| 后天国语完整版免费观看| 伦理电影免费视频| 精品不卡国产一区二区三区| 日本 av在线| 亚洲狠狠婷婷综合久久图片| 欧美成狂野欧美在线观看| e午夜精品久久久久久久| 久久久久久亚洲精品国产蜜桃av| 国产成人av激情在线播放| 黑人欧美特级aaaaaa片| 久久精品亚洲精品国产色婷小说| 两性午夜刺激爽爽歪歪视频在线观看 | 欧美日韩亚洲国产一区二区在线观看| 美女 人体艺术 gogo| 亚洲成a人片在线一区二区| 男女那种视频在线观看| 欧美日本视频| 在线观看www视频免费| 国产精品久久久av美女十八| 欧美一区二区国产精品久久精品 | 黄色视频不卡| 少妇裸体淫交视频免费看高清 | 欧美黄色淫秽网站| 淫妇啪啪啪对白视频| 国产aⅴ精品一区二区三区波| 亚洲国产欧美网| 妹子高潮喷水视频| 亚洲国产精品sss在线观看| 亚洲精品美女久久久久99蜜臀| 制服丝袜大香蕉在线| 禁无遮挡网站| 精品久久蜜臀av无| 日韩欧美一区二区三区在线观看| 亚洲精品久久成人aⅴ小说| 久久久国产精品麻豆| 久久香蕉国产精品| 国模一区二区三区四区视频 | 欧美一区二区国产精品久久精品 | 99在线人妻在线中文字幕| 免费看美女性在线毛片视频| 人成视频在线观看免费观看| 午夜精品久久久久久毛片777| 欧美色欧美亚洲另类二区| 最近最新中文字幕大全电影3| 最新美女视频免费是黄的| 日日夜夜操网爽| 老熟妇乱子伦视频在线观看| 一区二区三区高清视频在线| 一a级毛片在线观看| 久久精品夜夜夜夜夜久久蜜豆 | 九色成人免费人妻av| 亚洲aⅴ乱码一区二区在线播放 | www国产在线视频色| www.熟女人妻精品国产| 黑人欧美特级aaaaaa片| 欧美日韩瑟瑟在线播放| www.熟女人妻精品国产| 欧美大码av| 中文字幕高清在线视频| 精品少妇一区二区三区视频日本电影| 亚洲自拍偷在线| 国产精品一区二区三区四区久久| 麻豆av在线久日| 国产v大片淫在线免费观看| 亚洲中文日韩欧美视频| 小说图片视频综合网站| 五月伊人婷婷丁香| 免费看美女性在线毛片视频| 18禁黄网站禁片午夜丰满| 欧美色欧美亚洲另类二区| 国产探花在线观看一区二区| 变态另类成人亚洲欧美熟女| 亚洲精品一区av在线观看| 五月玫瑰六月丁香| 色精品久久人妻99蜜桃| 91麻豆av在线| 成人一区二区视频在线观看| 精品不卡国产一区二区三区| 美女午夜性视频免费| 国产三级黄色录像| 1024手机看黄色片| 久久精品国产99精品国产亚洲性色| 黄色丝袜av网址大全| 亚洲国产日韩欧美精品在线观看 | 欧美国产日韩亚洲一区| 黑人操中国人逼视频| 精品电影一区二区在线| 女人高潮潮喷娇喘18禁视频| 他把我摸到了高潮在线观看| av超薄肉色丝袜交足视频| 精品久久蜜臀av无| 国产探花在线观看一区二区| 一区二区三区高清视频在线| 91麻豆精品激情在线观看国产| 岛国在线免费视频观看| 可以免费在线观看a视频的电影网站| 成人一区二区视频在线观看| 亚洲国产高清在线一区二区三| 精华霜和精华液先用哪个| 免费人成视频x8x8入口观看| 性欧美人与动物交配| 一级毛片精品| 妹子高潮喷水视频| 国产精品久久久久久精品电影| 欧美zozozo另类| 久久久久国产一级毛片高清牌| 人人妻人人看人人澡| 国产高清视频在线播放一区| avwww免费| 久久人妻福利社区极品人妻图片| 亚洲人成电影免费在线| 黄色丝袜av网址大全| 午夜激情av网站| 最好的美女福利视频网| 一个人免费在线观看的高清视频| 中国美女看黄片| 精品午夜福利视频在线观看一区| 看片在线看免费视频| 日韩欧美 国产精品| 亚洲精品美女久久av网站| 好男人在线观看高清免费视频| 最近最新中文字幕大全电影3| 国产精品1区2区在线观看.| 在线视频色国产色| 天天添夜夜摸| 国产成人一区二区三区免费视频网站| 国产探花在线观看一区二区| 黄色成人免费大全| 午夜福利18| 一二三四社区在线视频社区8| 后天国语完整版免费观看| 久久久久国产一级毛片高清牌| 50天的宝宝边吃奶边哭怎么回事| 国产视频一区二区在线看| 一a级毛片在线观看| 国产亚洲精品久久久久5区| 狂野欧美激情性xxxx| 无限看片的www在线观看| 少妇人妻一区二区三区视频| 免费观看人在逋| 成人亚洲精品av一区二区| 久久精品国产综合久久久| 午夜免费观看网址| 在线看三级毛片| 国产精品免费视频内射| 国产三级中文精品| 色综合站精品国产| 麻豆国产av国片精品| 夜夜躁狠狠躁天天躁| 国产精品98久久久久久宅男小说| 国产精品一区二区三区四区免费观看 | 中文字幕av在线有码专区| 日韩精品中文字幕看吧| 亚洲真实伦在线观看| 久久久久久久午夜电影| 别揉我奶头~嗯~啊~动态视频| 麻豆一二三区av精品| 99国产极品粉嫩在线观看| 国产一区二区三区在线臀色熟女| 一本一本综合久久| 成人一区二区视频在线观看| 少妇粗大呻吟视频| 淫秽高清视频在线观看| 欧美色欧美亚洲另类二区| 亚洲av成人一区二区三| 18禁黄网站禁片免费观看直播| 神马国产精品三级电影在线观看 | 老鸭窝网址在线观看| 男女那种视频在线观看| 国产亚洲av高清不卡| 日韩欧美三级三区| 久久久久九九精品影院| 制服人妻中文乱码| 成人av一区二区三区在线看| 90打野战视频偷拍视频| 香蕉国产在线看| 欧洲精品卡2卡3卡4卡5卡区| 亚洲va日本ⅴa欧美va伊人久久| av欧美777| 精品国产乱码久久久久久男人| 国产亚洲欧美98| 亚洲欧美日韩东京热| 亚洲国产看品久久| 日韩高清综合在线| 国产精品野战在线观看| 波多野结衣高清无吗| 免费高清视频大片| 18禁黄网站禁片午夜丰满| 在线观看舔阴道视频| 婷婷精品国产亚洲av在线| 久久久国产精品麻豆| 校园春色视频在线观看| 日本黄大片高清| 美女大奶头视频| 一个人观看的视频www高清免费观看 | 级片在线观看| 国产精品国产高清国产av| 亚洲精品在线观看二区| 男女视频在线观看网站免费 | 国产av麻豆久久久久久久| 老熟妇仑乱视频hdxx| 亚洲狠狠婷婷综合久久图片| 久久草成人影院| 国产乱人伦免费视频| 岛国视频午夜一区免费看| 日本一区二区免费在线视频| 国产伦在线观看视频一区| 精品久久久久久,| 国产成人精品久久二区二区91| 制服人妻中文乱码| 日韩欧美 国产精品| 欧美日韩乱码在线| 成人三级做爰电影| 亚洲欧美日韩东京热| 丰满人妻一区二区三区视频av | 亚洲成av人片免费观看| 99热这里只有是精品50| 999久久久国产精品视频| 搡老妇女老女人老熟妇| 国产激情久久老熟女| 亚洲专区国产一区二区| 日韩欧美三级三区| 久久久国产成人免费| 久久久久国产精品人妻aⅴ院| 国产成人系列免费观看| 一个人免费在线观看电影 | 波多野结衣高清作品| 在线观看免费日韩欧美大片| 国产麻豆成人av免费视频| 特级一级黄色大片| 国产av一区二区精品久久| 日韩大码丰满熟妇| 天堂av国产一区二区熟女人妻 | 午夜视频精品福利| 亚洲自偷自拍图片 自拍| 国内精品久久久久精免费| 精品国产亚洲在线| videosex国产| 18禁裸乳无遮挡免费网站照片| 国产激情欧美一区二区| 精品人妻1区二区| 亚洲aⅴ乱码一区二区在线播放 | 久久久精品大字幕| 久久久久亚洲av毛片大全| 一本久久中文字幕| 国产午夜精品论理片| a级毛片a级免费在线| 午夜精品一区二区三区免费看| 欧美在线黄色| 日本一二三区视频观看| 午夜日韩欧美国产| 中文字幕人成人乱码亚洲影| 国产av又大| 无限看片的www在线观看| 丰满的人妻完整版| 桃色一区二区三区在线观看| 亚洲专区国产一区二区| 99国产综合亚洲精品| 免费在线观看日本一区| 精华霜和精华液先用哪个| 又大又爽又粗| 成人欧美大片| 日本 av在线| 99热6这里只有精品| 午夜日韩欧美国产| 88av欧美| 可以免费在线观看a视频的电影网站| 精品国产亚洲在线| 视频区欧美日本亚洲| 成人三级做爰电影| 我的老师免费观看完整版| 中文字幕熟女人妻在线| 亚洲国产精品久久男人天堂| 国产三级中文精品| 1024视频免费在线观看| 免费在线观看日本一区| 午夜福利欧美成人| 麻豆国产av国片精品| 日韩精品中文字幕看吧| 亚洲中文av在线| 亚洲欧洲精品一区二区精品久久久| 日韩精品青青久久久久久| 亚洲国产欧美一区二区综合| 国产1区2区3区精品| 欧美在线黄色| 国产欧美日韩一区二区精品| 国产激情欧美一区二区| 亚洲片人在线观看| 亚洲欧美激情综合另类| 亚洲国产高清在线一区二区三| 欧美成人性av电影在线观看| 午夜精品一区二区三区免费看| 国产精品久久久av美女十八| 后天国语完整版免费观看| 成人高潮视频无遮挡免费网站| 亚洲精品美女久久av网站| 可以在线观看的亚洲视频| 91九色精品人成在线观看| 国产成年人精品一区二区| 欧美另类亚洲清纯唯美| 人妻夜夜爽99麻豆av| 性色av乱码一区二区三区2| 欧美最黄视频在线播放免费| 99re在线观看精品视频| 欧美丝袜亚洲另类 | 在线观看免费视频日本深夜| 99国产精品一区二区蜜桃av| 777久久人妻少妇嫩草av网站| 老鸭窝网址在线观看| 免费无遮挡裸体视频| 日韩av在线大香蕉| 国产精品一区二区三区四区免费观看 | 精品第一国产精品| 欧美在线黄色| 日本一区二区免费在线视频| 亚洲色图av天堂| 亚洲av美国av| 欧美一级毛片孕妇| 一区二区三区高清视频在线| 亚洲国产精品成人综合色| 亚洲国产欧美网| 在线永久观看黄色视频| 成人国语在线视频| 国产一级毛片七仙女欲春2| 午夜福利免费观看在线| 午夜久久久久精精品| 亚洲自拍偷在线| 午夜免费激情av| 亚洲自偷自拍图片 自拍| 亚洲精品美女久久av网站| 日本三级黄在线观看| 久久人人精品亚洲av| 一级作爱视频免费观看| 日本熟妇午夜| 1024香蕉在线观看| 午夜成年电影在线免费观看| 午夜两性在线视频| 国产精品av久久久久免费| 很黄的视频免费| 国产精品乱码一区二三区的特点| 亚洲精品美女久久久久99蜜臀| 可以在线观看的亚洲视频| 熟妇人妻久久中文字幕3abv| 99热只有精品国产| 精品国产超薄肉色丝袜足j| 九九热线精品视视频播放| 男女那种视频在线观看|