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

    基于代碼上下文相似度分析的代碼問題修復(fù)推薦方法

    2022-07-12 14:03:28吳毅堅(jiān)沈立煒趙文耘
    關(guān)鍵詞:案例實(shí)驗(yàn)分析

    劉 霜 吳毅堅(jiān) 沈立煒 趙文耘

    1(復(fù)旦大學(xué)軟件學(xué)院 上海 201203) 2(復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院 上海 201203) 3(上海市數(shù)據(jù)科學(xué)重點(diǎn)實(shí)驗(yàn)室 上海 201203)

    0 引 言

    軟件系統(tǒng)的開發(fā)過程中,不可避免會(huì)出現(xiàn)代碼問題。在成千上萬甚至百萬行代碼的大型項(xiàng)目中找到問題并修復(fù)是一件困難的事情,因此,研究人員多年來致力于代碼問題自動(dòng)修復(fù)技術(shù)的研究。代碼問題自動(dòng)修復(fù)是在沒有人工干預(yù)的情況下自動(dòng)修復(fù)軟件問題。即對(duì)于不滿足正確約束的程序,生成滿足程序約束的補(bǔ)丁[1-2]。這種技術(shù)的基本目的是自動(dòng)生成正確的補(bǔ)丁,消除軟件程序中錯(cuò)誤的補(bǔ)丁程序[3-4]。工業(yè)界也很關(guān)注代碼問題自動(dòng)修復(fù)技術(shù),如Simfix、CBCD、PRECFIX[5]已步入應(yīng)用。

    本文介紹的推薦方法適用于代碼靜態(tài)分析檢測到的問題(Issue)。靜態(tài)分析檢測到的問題一般有三類,包括編程錯(cuò)誤、違反標(biāo)準(zhǔn)的編碼、安全弱點(diǎn),后面簡稱為代碼問題。代碼靜態(tài)分析是一種通過在運(yùn)行程序之前檢查源代碼進(jìn)行調(diào)試的方法,通過針對(duì)一組(或多組)編碼規(guī)則分析一組代碼來完成,相關(guān)工具包括FindBugs、SonarQube、Helix QAC、Klocwork等。

    靜態(tài)分析尤其擅長發(fā)現(xiàn)編碼問題,例如緩沖區(qū)溢出、內(nèi)存泄漏和空指針。當(dāng)程序開發(fā)人員碰到緩沖區(qū)溢出問題時(shí),由于提示信息往往僅包括問題類型和位置,可能無法馬上知道該如何修改。而同時(shí),該類問題有很多歷史修復(fù),它們對(duì)應(yīng)的問題類型、出問題的代碼及問題的代碼上下文可能是類似的,于是這些歷史修復(fù)可作為推薦方案。然而如何進(jìn)行方案推薦并不容易,首先,每種問題類型有著太多被正確修復(fù)過的源代碼文件,難以判定這些源代碼文件的歷史修復(fù)中哪個(gè)或哪些是我們需要的;再者,每種問題類型有著太多的歷史修復(fù),修復(fù)方式也是多種多樣,難以從如此多的歷史修復(fù)中有效率地推薦出一個(gè)有效的方案;最后,面對(duì)一個(gè)曾經(jīng)被正確修復(fù)過的源代碼文件,難以找到它針對(duì)該問題的修復(fù)方式。

    針對(duì)這些問題,本文提出一種基于代碼上下文相似度分析的代碼問題修復(fù)推薦方法。該方法首先收集歷史版本中代碼問題的修復(fù)案例,建立問題修復(fù)資源庫,然后根據(jù)問題類型、問題代碼及上下文、修復(fù)代碼及上下文對(duì)修復(fù)案例進(jìn)行聚類,對(duì)每種不同類型的問題建立修復(fù)模板,最后通過對(duì)有同類問題的目標(biāo)代碼及其上下文進(jìn)行相似性分析,從而推薦具體的修復(fù)方式。基于上述方法,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)基于代碼上下文相似度分析的代碼問題修復(fù)推薦工具。

    1 本文方法

    1.1 研究動(dòng)機(jī)

    眾所周知,修復(fù)軟件項(xiàng)目中的各種問題是一件非常困難且大量耗費(fèi)時(shí)間精力的事情。據(jù)統(tǒng)計(jì),修復(fù)軟件問題的時(shí)間占軟件維護(hù)時(shí)間成本的35.6%[6],軟件成本的絕大多數(shù)被認(rèn)為是軟件維護(hù)成本。開發(fā)人員花在修復(fù)問題上的時(shí)間占全部開發(fā)時(shí)間一半左右[7]。

    靜態(tài)代碼分析是在軟件開發(fā)的早期,即運(yùn)行程序之前(例如,在編碼和單元測試之間)進(jìn)行的。靜態(tài)代碼分析可以盡早發(fā)現(xiàn)問題。靜態(tài)代碼分析可以通過創(chuàng)建自動(dòng)反饋循環(huán)來支持DevOps。開發(fā)人員將及早知道他們的代碼中是否存在問題,此時(shí)解決這些問題將更加容易。靜態(tài)分析相比于動(dòng)態(tài)分析更容易發(fā)現(xiàn)編碼錯(cuò)誤,因?yàn)槟承┚幋a錯(cuò)誤可能不會(huì)在單元測試期間發(fā)生。因此,靜態(tài)代碼分析(特別是在需要遵守行業(yè)標(biāo)準(zhǔn)的情況下)有不少優(yōu)勢(shì)。

    目前學(xué)術(shù)界進(jìn)行問題修復(fù)的前提基于兩個(gè)假設(shè),測試用例的充分性假設(shè)(測試用例是否完全反映程序的正確性)和被修復(fù)代碼的高質(zhì)量假設(shè)[26],因此通過測試不總是等于完成修復(fù),存在精確性不夠高的問題。很多問題修復(fù)技術(shù)只針對(duì)某種類型的問題設(shè)計(jì)了修復(fù)算法。很多修復(fù)技術(shù)耗時(shí)長,計(jì)算資源消耗多。

    針對(duì)自動(dòng)修復(fù)技術(shù)存在的各種問題,以及需要人工確認(rèn)的局限性,在工程上,我們可以采用修復(fù)方式推薦的策略來幫助程序開發(fā)人員更快更好地理解并修復(fù)代碼問題。因此本文提出基于代碼上下文相似度分析的代碼問題修復(fù)推薦方法,這是一種問題修復(fù)的通用技術(shù),它無須基于兩個(gè)假設(shè),生成的推薦方法能夠盡量避免引入其他的問題,且通過問題類型、問題代碼及上下文和修復(fù)代碼及上下文聚類方法提高了推薦效果及問題修復(fù)效率。

    1.2 方法概述

    基于代碼上下文相似度分析的代碼問題修復(fù)推薦方法過程,主要包括以下兩個(gè)步驟。

    (1) 問題修復(fù)案例(case)的歸類和存儲(chǔ)。圖1展示了該步驟,首先通過靜態(tài)分析工具(如FindBugs)獲取問題版本的問題類型、問題代碼及上下文,通過diff分析獲取修復(fù)版本的修復(fù)代碼及上下文,這些信息作為一條修復(fù)案例。然后根據(jù)問題類型、問題代碼及上下文、修復(fù)代碼及上下文對(duì)修復(fù)案例進(jìn)行聚類。最后,將修復(fù)案例抽象化,形成修復(fù)模板。將修復(fù)案例及模板存儲(chǔ)起來,作為問題修復(fù)資源庫。

    圖1 問題修復(fù)案例的歸類和存儲(chǔ)

    (2) 代碼問題修復(fù)推薦。圖2展示了該步驟,以目標(biāo)問題類型、問題代碼及其上下文代碼為輸入,結(jié)合問題修復(fù)資源庫中相應(yīng)類型的問題代碼及其上下文的相似度匹配,進(jìn)行問題修復(fù)案例推薦。本文提出基于代碼上下文相似度分析的代碼問題修復(fù)推薦方法,對(duì)輸入問題及其上下文代碼進(jìn)行Token化后的文本相似度分析,找出相似度最高的幾種修復(fù)方式,為用戶進(jìn)行問題修復(fù)推薦。

    圖2 代碼問題修復(fù)推薦

    1.3 代碼問題修復(fù)推薦方法的設(shè)計(jì)與實(shí)現(xiàn)

    1.3.1問題修復(fù)案例的歸類和存儲(chǔ)

    通過解析靜態(tài)分析工具(如FindBugs)的結(jié)果文件,得到問題版本的問題類型、問題代碼及上下文。通過diff分析得到解決版本的修復(fù)代碼及上下文。本文將每個(gè)歷史已解決問題的類型、問題代碼及上下文、修復(fù)代碼及上下文構(gòu)造為一個(gè)修復(fù)案例,將它們保存在問題修復(fù)資源庫。

    同種問題可能有多種不同的修復(fù)方式,但修復(fù)資源庫中針對(duì)同種問題的修復(fù)案例所采用的修復(fù)方式可能會(huì)存在較多重復(fù),所以需要對(duì)同種問題類型中的修復(fù)案例根據(jù)修復(fù)方式進(jìn)行聚類。具體對(duì)于某種問題的所有修復(fù)案例,其聚類方法是:首先,對(duì)于每個(gè)修復(fù)案例,將其問題代碼及上下文、修復(fù)代碼及上下文進(jìn)行分詞,這里主要按空格和調(diào)用符進(jìn)行劃分,接著采用詞袋模型將這些分詞構(gòu)建為詞頻向量。最后對(duì)詞頻向量進(jìn)行加權(quán)處理,以提升其中關(guān)鍵字的權(quán)重。最終每個(gè)修復(fù)案例被表示為一個(gè)加權(quán)的特征向量,其形式為:D=D(T1,W1;T2,W2;…;Tn,Wn),其中:T為分詞;W為權(quán)重;n為詞匯空間的大小,其由該問題所有修復(fù)案例的分詞種類數(shù)決定。最后使用凝聚層次聚類算法對(duì)這些特征向量進(jìn)行聚類,聚為一類的案例本文認(rèn)為有著相同的修復(fù)方式。

    圖3展示了一個(gè)NP_NULL_ON_SOME_PATH問題類型的修復(fù)案例,其中:(a)展示的是問題修復(fù)前的代碼段,①②是問題代碼(FindBugs結(jié)果解析出的),其他的都是上下文代碼;(b)展示的是問題修復(fù)后的代碼段,①是修復(fù)代碼(問題代碼及上下文修復(fù)前后的diff),其他的都是上下文代碼。上下文代碼會(huì)用來計(jì)算代碼相似度,從而提高推薦效果。具有相似上下文的代碼問題會(huì)在推薦結(jié)果里排序更高。經(jīng)過分詞,統(tǒng)計(jì)出每個(gè)詞語的出現(xiàn)次數(shù),構(gòu)建其詞頻向量為:

    {if,4;_injectableValues,4;null,4;return,4;findInjectableValue,2;valueId,3;this,4;forProperty,3;beanInstance,2;throw,2;new,2;IllegalStateException,2;No,1;injectableValues,1;configured,1;can,1;not,1;inject,1;value,1;with,1;id,1;}

    圖3 NP_NULL_ON_SOME_PATH修復(fù)案例- 修復(fù)前后代碼段

    雖然詞袋模型沒有考慮詞在代碼中的順序,但其簡單高效,并且經(jīng)過加權(quán)處理,在有限的修復(fù)案例中可以達(dá)到良好的效果。

    使用上述修復(fù)案例聚類算法,發(fā)現(xiàn)每種代碼問題的修復(fù)方式一般分為一種或多種,例如NP_NULL_ON_SOME_PATH問題的修復(fù)方式一般有五種,且模式較為固定。

    1) 對(duì)可能為空的變量進(jìn)行null值判斷的操作加上else分支,可能出現(xiàn)異常的操作放在else分支中運(yùn)行。

    2) 先判斷變量是否為null值,如果為空直接拋異常。

    3) 原問題代碼中沒有if-else語句的,在修復(fù)代碼中添加if-else,在if語句中對(duì)變量進(jìn)行null值判斷,可能出現(xiàn)異常的語句在else分支中運(yùn)行。

    4) 先判斷變量是否為null值,如果為空直接進(jìn)行return操作。

    5) 在變量賦值的語句中,變賦值為null為賦值一個(gè)實(shí)例。

    圖3(b)展示了NP_NULL_ON_SOME_PATH問題修復(fù)案例的修復(fù)后代碼段,該案例使用了第二種修復(fù)方式,即先判斷變量是否為null值,如果為空直接拋異常的方式進(jìn)行修復(fù)。

    修復(fù)案例聚類完成后,對(duì)其進(jìn)行抽象化處理,形成修復(fù)模板。抽象處理過程為:將變量名按其出現(xiàn)的次序替換為MYM1、MYM2等;將基本數(shù)據(jù)類型分別初始化為其默認(rèn)值;對(duì)于自定義的函數(shù)按其出現(xiàn)順序統(tǒng)一替換為f1、f2等;所有操作符、關(guān)鍵字保持不變;去掉注釋和多余的空行,統(tǒng)一縮進(jìn)。本文認(rèn)為每個(gè)修復(fù)案例抽象化后都是一個(gè)修復(fù)模板。一個(gè)修復(fù)模板包括問題類型、問題代碼及上下文(抽象化的)、修復(fù)代碼及上下文(抽象化的)。

    1.3.2代碼問題修復(fù)推薦

    本文提出的基于代碼上下文相似度分析的代碼問題修復(fù)推薦算法基于問題類型、問題代碼及其上下文的文本相似度(基于編輯距離),能夠?yàn)橛脩敉扑]與其問題最為相似的修復(fù)方式。問題類型指根據(jù)代碼靜態(tài)分析結(jié)果得到代碼問題的類型。問題代碼指根據(jù)代碼靜態(tài)分析得到的具體問題代碼行。問題代碼上下文指根據(jù)代碼靜態(tài)分析得到的與具體問題行相關(guān)的上下文代碼,它是根據(jù)具體問題類型的具體特點(diǎn)得到的、與問題發(fā)生原因緊密聯(lián)系的代碼內(nèi)容。以上所需可以通過代碼靜態(tài)分析的結(jié)果文件得到(例如通過分析FindBugs結(jié)果文件)。該算法將目標(biāo)問題代碼及其上下文與資源庫中的相同問題類型的問題記錄的問題代碼及其上下文進(jìn)行(基于有限自動(dòng)機(jī)的Token化后的)文本相似度匹配,選擇相似度高的、歷史出現(xiàn)次數(shù)多的修復(fù)方式進(jìn)行推薦。

    2 實(shí) 驗(yàn)

    2.1 工具實(shí)現(xiàn)

    基于本文方法,研發(fā)了基于代碼上下文相似度分析的代碼問題修復(fù)推薦工具。問題推薦工具可分析目標(biāo)項(xiàng)目內(nèi)的已修復(fù)問題的修復(fù)方式并對(duì)其進(jìn)行聚類和建模,構(gòu)建問題修復(fù)資源庫,然后根據(jù)目標(biāo)問題代碼及其上下文匹配資源庫內(nèi)的問題修復(fù)記錄,選擇相似度高的進(jìn)行修復(fù)推薦。

    2.2 實(shí)驗(yàn)評(píng)價(jià)

    實(shí)驗(yàn)選取Github上的高星開源項(xiàng)目作為實(shí)驗(yàn)對(duì)象,代碼問題修復(fù)資源庫則選擇本文資源庫進(jìn)行實(shí)驗(yàn)。本文根據(jù)實(shí)驗(yàn)?zāi)康姆謩e設(shè)置不同的實(shí)驗(yàn),分析了工具的聚類效果及推薦效果的有效性,并且對(duì)本文代碼問題修復(fù)推薦方法的局限性進(jìn)行說明,最后將本文工具與“Nopol”進(jìn)行對(duì)比。

    2.2.1聚類效果的有效性評(píng)估

    在基于代碼相似度分析的問題修復(fù)推薦方法中,使用問題代碼及其上下文聚類、問題修復(fù)方式聚類方法進(jìn)行了優(yōu)化,提高了推薦的效果。本實(shí)驗(yàn)選取了Github上的高星開源項(xiàng)目的50條歷史修復(fù)案例,用聚類方法對(duì)其進(jìn)行聚類操作,對(duì)其實(shí)驗(yàn)結(jié)果進(jìn)行評(píng)估,驗(yàn)證其正確性、有效性。

    這50條歷史修復(fù)案例分為七種問題類型,其中第一、第二、第五種問題類型只有一條修復(fù)案例,無須進(jìn)行聚類,將其剔除。剩余47條歷史修復(fù)案例的聚類實(shí)驗(yàn)結(jié)果如圖4所示。

    圖4 聚類實(shí)驗(yàn)結(jié)果

    47條修復(fù)案例分為4種問題類型。圖4展示了每種問題類型的案例條數(shù)。只有同種問題類型的案例才能進(jìn)行聚類。如問題類型三的20條修復(fù)案例,通過修復(fù)案例聚類將該20條修復(fù)案例聚為了4類,即該類型的代碼問題歷史上有4種修復(fù)方式。其余問題類型的聚類以此類推。

    本文挑選了6位具有程序開發(fā)研究背景和經(jīng)驗(yàn)的碩士生,其中4位每人負(fù)責(zé)一種問題類型,對(duì)聚類結(jié)果的正確性進(jìn)行人工驗(yàn)證,其余2位對(duì)原始的47條修復(fù)案例分別進(jìn)行人工分析歸類。針對(duì)聚類效果評(píng)估實(shí)驗(yàn),參與者得到的信息包括50條修復(fù)案例的問題類型、問題代碼及上下文代碼、提交日期、修復(fù)方式代碼及上下文等。他們可以訪問修復(fù)推薦系統(tǒng),了解聚類方法的主要功能和流程,可以看到該方法的數(shù)據(jù)模型和源碼,也可以查看聚類方法的中間信息及結(jié)果信息。

    實(shí)驗(yàn)發(fā)現(xiàn),驗(yàn)證類型三、類型四、類型六的碩士生表示他們認(rèn)為系統(tǒng)的聚類結(jié)果是正確的,即聚類方法對(duì)這三種問題類型的聚類類別個(gè)數(shù)以及每一類的修復(fù)案例劃分是正確的。驗(yàn)證類型七的碩士研究生表示這7個(gè)修復(fù)案例應(yīng)聚為4類而不是聚類所得的3類。即實(shí)驗(yàn)結(jié)果中的問題類型七的三種修復(fù)方式中的第1類(圖4中標(biāo)有星號(hào)的類別)應(yīng)該聚為兩類。這兩類中的2種修復(fù)方式的代碼非常類似,但是他認(rèn)為劃分為2種修復(fù)方式更為精確,其余兩類的聚類結(jié)果正確。其余2位實(shí)驗(yàn)參與者中的第一位的人工聚類結(jié)果與工具的聚類結(jié)果是相同的,第二位參與者的人工聚類結(jié)果與工具的聚類結(jié)果稍有差異,差異也是問題類型七中的第一類(圖4中標(biāo)有星號(hào)的類別)修復(fù)方式的劃分,他認(rèn)為該類劃分為兩類更為合適,其余類別的劃分?jǐn)?shù)量及每個(gè)類別中的修復(fù)案例與工具的聚類結(jié)果一致。

    設(shè)置對(duì)比實(shí)驗(yàn)以驗(yàn)證問題聚類能有效提高對(duì)目標(biāo)問題修復(fù)推薦的效果。本實(shí)驗(yàn)挑選了2組具有程序開發(fā)經(jīng)驗(yàn)的碩士生,每組4人,2組參與者的程序開發(fā)能力相當(dāng)。從平臺(tái)上隨機(jī)選擇8個(gè)未修復(fù)且有推薦結(jié)果的問題,分配給2組的參與者,每人2個(gè)問題。第一組參與者根據(jù)聚類后的推薦修復(fù)案例結(jié)果進(jìn)行問題修復(fù),第二組參與者根據(jù)不聚類的推薦修復(fù)案例結(jié)果進(jìn)行問題修復(fù),分別記錄每位參與者對(duì)每個(gè)問題進(jìn)行出錯(cuò)原因排查、選定修復(fù)案例、問題修復(fù)所用的時(shí)間。最終每個(gè)問題都在正常時(shí)間內(nèi)被修復(fù)。實(shí)驗(yàn)發(fā)現(xiàn),第一組參與者的平均問題出錯(cuò)原因排查時(shí)間為1 min,平均選定修復(fù)案例時(shí)間為1 min,平均問題修復(fù)使用時(shí)間為3.2 min。第二組參與者的平均問題出錯(cuò)原因排查時(shí)間為2 min,平均選定修復(fù)案例時(shí)間為3.6 min,平均問題修復(fù)使用時(shí)間為7.8 min。從上述結(jié)果可知,問題聚類能有效提高對(duì)目標(biāo)問題修復(fù)推薦的效果。

    由實(shí)驗(yàn)結(jié)果可知,本文的聚類結(jié)果基本正確,聚類方法較為合理,聚類效果較為有效。

    2.2.2推薦方法的有效性評(píng)估

    本實(shí)驗(yàn)從Github上隨機(jī)選擇4個(gè)高質(zhì)量項(xiàng)目中的23個(gè)待修復(fù)問題作為目標(biāo)問題,使用自己的歷史修復(fù)記錄資源庫中的問題修復(fù)案例對(duì)工具進(jìn)行有效性評(píng)估,工具中添加了來自Github的217個(gè)Java軟件項(xiàng)目,分析了這些項(xiàng)目近一年來的57 752個(gè)問題修復(fù)案例。選中的4個(gè)項(xiàng)目中有一個(gè)項(xiàng)目是平臺(tái)中的,隨機(jī)選擇該項(xiàng)目中的4個(gè)至今沒有被修復(fù)的問題作為目標(biāo)問題。其余3個(gè)項(xiàng)目不曾添加到平臺(tái)中,從這3個(gè)項(xiàng)目中隨機(jī)選擇19個(gè)至今未修復(fù)的問題作為目標(biāo)問題。本實(shí)驗(yàn)認(rèn)為對(duì)于一個(gè)待修復(fù)問題,推薦出的能夠幫助開發(fā)人員較快地理解并修復(fù)問題的修復(fù)案例叫作有參考價(jià)值的修復(fù)案例。

    下面通過一個(gè)具體實(shí)例來說明怎樣叫做有參考價(jià)值的修復(fù)案例。

    圖5展示了一個(gè)目標(biāo)問題的代碼段,①為問題代碼行。實(shí)驗(yàn)要求在不尋求其他任何幫助的情況下,僅依靠為它推薦出的代碼問題修復(fù)結(jié)果對(duì)問題進(jìn)行修復(fù)。

    圖5 目標(biāo)問題代碼

    本文工具為該目標(biāo)問題推薦出兩條修復(fù)案例,其中第一條更為相似。圖6以及圖7展示了為該問題推薦的第一條修復(fù)案例。其中,圖6展示的是問題代碼段,①為問題代碼行,其余部分為上下文代碼行。我們把該問題代碼段與目標(biāo)問題代碼段進(jìn)行比較,可以看出,這兩段問題代碼發(fā)生錯(cuò)誤的原因一致,且代碼非常相似,僅變量名不同,Token化后相似度很高,經(jīng)過推薦算法的計(jì)算,此記錄作為目標(biāo)問題的推薦結(jié)果很合適。圖7展示了推薦報(bào)告中的修復(fù)方式代碼段,①為修復(fù)代碼行,根據(jù)該推薦結(jié)果,無須尋求其他任何幫助,很容易對(duì)目標(biāo)問題進(jìn)行修復(fù),具有很高的參考價(jià)值。

    圖6 問題修復(fù)推薦報(bào)告-問題代碼段

    圖7 問題修復(fù)推薦報(bào)告-修復(fù)方式代碼段

    本實(shí)驗(yàn)挑選了4位具有程序開發(fā)經(jīng)驗(yàn)的碩士生,讓他們分別對(duì)4個(gè)項(xiàng)目中的目標(biāo)問題的推薦結(jié)果的有效性進(jìn)行評(píng)估。實(shí)驗(yàn)認(rèn)為,如果在3小時(shí)內(nèi)修復(fù)推薦系統(tǒng)能夠推薦出修復(fù)案例、參與者完成問題修復(fù)、修復(fù)后的程序能夠通過FindBugs檢測,就認(rèn)為該目標(biāo)問題被成功修復(fù)(其中參與者進(jìn)行問題修復(fù)的過程不能超過15 min)。其中任何一項(xiàng)不能通過則認(rèn)為目標(biāo)問題沒有被成功修復(fù)。

    本文認(rèn)為精確率是所有被成功修復(fù)的目標(biāo)問題數(shù)目除以所有成功生成推薦結(jié)果的目標(biāo)問題數(shù)目。

    表1展示了23個(gè)目標(biāo)問題的推薦結(jié)果信息,參與者自己操作推薦系統(tǒng)獲取推薦結(jié)果,對(duì)于成功生成推薦結(jié)果的目標(biāo)問題,參與者從所有的推薦修復(fù)案例中選出一個(gè)最具有參考價(jià)值的修復(fù)案例,根據(jù)該修復(fù)案例對(duì)目標(biāo)問題進(jìn)行修復(fù),將修復(fù)后的程序進(jìn)行靜態(tài)分析。最終經(jīng)過實(shí)驗(yàn)驗(yàn)證,工具對(duì)23個(gè)目標(biāo)問題中的20個(gè)成功生成了推薦修復(fù)案例,這20個(gè)修復(fù)案例與目標(biāo)問題上下文匹配,是同種類型的問題。參與者對(duì)選定的最具有參考價(jià)值的20個(gè)修復(fù)案例進(jìn)行評(píng)估,認(rèn)為這20個(gè)選定的修復(fù)案例中17個(gè)是有效的、有參考價(jià)值的。即被成功修復(fù)的目標(biāo)問題數(shù)目為17,所有成功生成推薦結(jié)果的目標(biāo)問題數(shù)目為20,本文工具的精確率為85%。

    表1 目標(biāo)問題推薦結(jié)果信息

    設(shè)置對(duì)比實(shí)驗(yàn)以驗(yàn)證進(jìn)行問題修復(fù)推薦是有效的,可以提升開發(fā)效率。本實(shí)驗(yàn)挑選了2組具有程序開發(fā)經(jīng)驗(yàn)的碩士生,每組4人,2組參與者的程序開發(fā)能力相當(dāng)。從平臺(tái)上隨機(jī)選擇8個(gè)未修復(fù)問題,分配給2組的參與者,每人2個(gè)問題。第一組參與者根據(jù)問題修復(fù)推薦系統(tǒng)的推薦結(jié)果進(jìn)行問題修復(fù),第二組參與者沒有推薦結(jié)果作為參考,分別記錄每位參與者對(duì)每個(gè)問題進(jìn)行修復(fù)所用的時(shí)間。最終所有問題都被修復(fù)。實(shí)驗(yàn)發(fā)現(xiàn),第一組參與者的平均問題修復(fù)使用時(shí)間為3.7 min。第二組參與者的平均問題修復(fù)使用時(shí)間為16.2 min。從上述結(jié)果可知,問題修復(fù)推薦是有效的,可以提升開發(fā)效率。

    上述兩個(gè)實(shí)驗(yàn)說明本文問題推薦方法以及推薦工具在實(shí)際的應(yīng)用中具有有效性。

    然而,本文方法具有一定的局限性,由于本文方法是基于歷史修復(fù)的,因此修復(fù)推薦的結(jié)果的質(zhì)量依賴于修復(fù)資源庫中所收集的項(xiàng)目的質(zhì)量和數(shù)量。該方法僅針對(duì)靜態(tài)分析,只能修復(fù)代碼靜態(tài)分析檢測到的問題。由于該方法基于靜態(tài)檢測結(jié)果進(jìn)行分析,因此FindBugs的誤報(bào)漏報(bào)可能會(huì)對(duì)后續(xù)分析產(chǎn)生影響。由于目前僅使用FindBugs作為代碼靜態(tài)分析工具,只分析了Java項(xiàng)目,本文中的問題修復(fù)推薦方法目前僅適用于Java語言。

    2.2.3與Nopol的區(qū)別

    Nopol[8]是一種基于語義的問題修復(fù)工具,由于它也是代碼問題修復(fù)方面的工具,可以對(duì)Java程序中的問題進(jìn)行修復(fù),且是近年來較新的工具,因此選擇該工具進(jìn)行比較。我們從輸入輸出、問題類型、精確率、誤差幾方面將本文方法與其進(jìn)行對(duì)比。

    輸入輸出:Nopol的輸入是一個(gè)帶有問題的程序以及相應(yīng)的測試集合,輸出是其生成的帶有條件表達(dá)式的補(bǔ)丁。測試集合包含可通過的測試用例以及至少一個(gè)失敗的測試用例??赏ㄟ^的測試用例用以定義程序預(yù)期的行為;失敗的測試用例用以定義要修復(fù)的問題。而本文工具的輸入是一個(gè)有問題的程序,輸出是與該問題最為相似的幾條修復(fù)記錄,包括問題代碼及其上下文、修復(fù)方式代碼及其上下文、問題類型等。

    問題類型:Nopol可以修復(fù)的問題類型是if條件語句錯(cuò)誤及前置條件錯(cuò)誤,即針對(duì)條件語句問題進(jìn)行修復(fù)。本文工具的問題修復(fù)方法是通用的。

    精確率:根據(jù)Xuan等[8]對(duì)Nopol的實(shí)驗(yàn)可知,在得到的17個(gè)合成補(bǔ)丁中,有13個(gè)是正確的,而本文的實(shí)驗(yàn)結(jié)果表明,在得到推薦結(jié)果的20個(gè)目標(biāo)問題中,17個(gè)被正確修復(fù)。

    誤差:在實(shí)踐中,僅僅通過測試集合的補(bǔ)丁不一定是正確的,因?yàn)闇y試用例不一定能夠正確地定義程序行為。因此,當(dāng)測試集合的質(zhì)量不足時(shí),Nopol便無法保證能夠生成正確的補(bǔ)丁。而文本方法無需測試集合的支持,避免了該種情況的發(fā)生,且給出的已修復(fù)程序通過了FindBugs的靜態(tài)掃描,一定程度上避免了新問題的引入。

    3 相關(guān)工作

    代碼問題修復(fù)在產(chǎn)業(yè)界可以輔助開發(fā)人員修復(fù)代碼,提高代碼質(zhì)量,在學(xué)術(shù)界更是實(shí)現(xiàn)軟件自動(dòng)化的有效途徑。由于其極大的產(chǎn)業(yè)意義和學(xué)術(shù)意義備受關(guān)注,越來越多的研究人員致力于問題修復(fù)技術(shù)的研究。

    Genprog是早期的能夠自動(dòng)生成補(bǔ)丁的系統(tǒng),該系統(tǒng)的研究人員提出,可在應(yīng)用程序的其他位置找到補(bǔ)丁的代碼[9-10],除了發(fā)現(xiàn)可以重用的代碼存在于其他地方這一事實(shí)外,還發(fā)現(xiàn)了潛在的修復(fù)成分的上下文是有用的:通常,重用代碼部分的上下文類似于被修復(fù)的部分的代碼上下文[11-12]。生成候選補(bǔ)丁的一種方法是在原始程序上應(yīng)用變異運(yùn)算符。變異運(yùn)算符潛在地通過它的抽象語法樹表示形式或更粗粒度的表示形式(例如語句級(jí)或塊級(jí))操縱原始程序。較早的遺傳改良方法在語句級(jí)別運(yùn)行,并執(zhí)行簡單的刪除/替換操作,例如刪除現(xiàn)有語句或在同一源文件中用另一個(gè)語句替換現(xiàn)有語句[13-14]。最近的方法[15]在抽象語法樹級(jí)別使用了更細(xì)粒度的運(yùn)算符來生成更多組候選補(bǔ)丁。機(jī)器學(xué)習(xí)技術(shù)可以提高自動(dòng)問題修復(fù)系統(tǒng)的效率。SequenceR[16]對(duì)源代碼使用句到句學(xué)習(xí),以生成單行補(bǔ)丁,它定義了一種神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu),可與源代碼很好地結(jié)合,并具有復(fù)制機(jī)制,該機(jī)制允許使用未包含在學(xué)習(xí)詞匯中的token生成補(bǔ)丁,這些token來自正在修復(fù)的Java類的代碼。

    使用修復(fù)模板[17]是生成候選補(bǔ)丁的替代方法,用于修復(fù)特定類別的問題。也可以自動(dòng)挖掘修復(fù)模板[18]用于生成補(bǔ)丁并對(duì)其進(jìn)行驗(yàn)證。Osman等[19]提出的修復(fù)模式(patterns)獲取方法是先自動(dòng)地獲取修改模式,然后手動(dòng)地修改這些模式。他們的人工分析階段對(duì)深入了解問題背后的原因至關(guān)重要。他們的更改粒度在單行代碼級(jí)別,無須任何抽象就可以捕獲所有更改。該研究包含的軟件項(xiàng)目有717個(gè)。

    代碼問題修復(fù)技術(shù)有許多應(yīng)用。在開發(fā)環(huán)境中,當(dāng)開發(fā)人員遇到問題時(shí),可以通過如單擊按鈕等操作來搜索補(bǔ)丁。當(dāng)自動(dòng)化到一定程度,IDE無須等待人工指示,主動(dòng)在后臺(tái)搜索潛在問題的解決方案。在持續(xù)集成服務(wù)器中,如果在持續(xù)集成過程中構(gòu)建失敗,則構(gòu)建失敗后可以立即搜索補(bǔ)丁[20]。實(shí)驗(yàn)表明,生成的補(bǔ)丁可以被開放源代碼的開發(fā)人員接受并合并到代碼庫中[21]。系統(tǒng)運(yùn)行時(shí),當(dāng)發(fā)生運(yùn)行故障,可以搜索二進(jìn)制補(bǔ)丁并在線應(yīng)用。這種修復(fù)系統(tǒng)的一個(gè)示例是ClearView[22],它使用x86二進(jìn)制補(bǔ)丁對(duì)x86代碼進(jìn)行修復(fù)。Itzal系統(tǒng)[20]與Clearview不同:修復(fù)搜索在運(yùn)行時(shí)進(jìn)行。而在生產(chǎn)中,所生產(chǎn)的補(bǔ)丁是源代碼級(jí)別的。BikiniProxy[23]系統(tǒng)可以在線修復(fù)瀏覽器中發(fā)生的JavaScript錯(cuò)誤。阿里巴巴為了解決內(nèi)部面臨的挑戰(zhàn)和難題,提出了PRECFIX[5]方法,主要分為三步,首先從代碼提交數(shù)據(jù)中提取“缺陷修復(fù)對(duì)”,然后將相似的“缺陷修復(fù)對(duì)”聚類,最后對(duì)聚類結(jié)果進(jìn)行模板提取,這個(gè)缺陷檢測和補(bǔ)丁推薦技術(shù)可以用于代碼評(píng)審、全庫離線掃描等。

    然而,目前提出的問題修復(fù)方法還是存在很多問題,如精確率低、只能修復(fù)特定問題類型、對(duì)測試用例完備性的要求非常高、修復(fù)的耗時(shí)長、消耗的計(jì)算資源較多等。本文基于所提方法研發(fā)的基于代碼相似度分析的代碼問題修復(fù)方式推薦工具,是針對(duì)任意問題類型的,它不需要輸入測試用例,聚類效果較好,推薦結(jié)果較為具有參考價(jià)值,能夠提高程序開發(fā)人員修復(fù)問題的效率。

    4 結(jié) 語

    本文提出一種基于代碼上下文相似度分析的代碼問題修復(fù)推薦方法。該方法首先收集歷史版本中代碼問題的修復(fù)案例,建立問題修復(fù)資源庫,然后根據(jù)問題類型、問題代碼及上下文、修復(fù)代碼及上下文對(duì)修復(fù)案例進(jìn)行聚類,對(duì)每種不同類型的問題建立修復(fù)模板,最后通過對(duì)有同類問題的目標(biāo)代碼及其上下文進(jìn)行相似性分析,從而推薦具體的修復(fù)方式?;谝陨纤龇椒?,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)基于代碼上下文相似度分析的代碼問題修復(fù)推薦工具,并基于Github上的真實(shí)項(xiàng)目設(shè)置多組實(shí)驗(yàn)對(duì)聚類效果的有效性和推薦方法的有效性進(jìn)行驗(yàn)證。

    然而,本文方法的問題推薦目前是基于代碼問題修復(fù)方式資源庫的,因此資源庫中修復(fù)案例的質(zhì)量決定了修復(fù)推薦結(jié)果的質(zhì)量。另外,該方法僅針對(duì)靜態(tài)分析,因此只能修復(fù)代碼靜態(tài)分析檢測到的問題,對(duì)于靜態(tài)分析結(jié)果中可能產(chǎn)生的誤報(bào)漏報(bào)需要進(jìn)行進(jìn)一步處理,因此在實(shí)際應(yīng)用中代碼問題修復(fù)推薦的能力受此影響,對(duì)此,我們需要繼續(xù)進(jìn)行研究。

    猜你喜歡
    案例實(shí)驗(yàn)分析
    記一次有趣的實(shí)驗(yàn)
    案例4 奔跑吧,少年!
    隱蔽失效適航要求符合性驗(yàn)證分析
    做個(gè)怪怪長實(shí)驗(yàn)
    隨機(jī)變量分布及統(tǒng)計(jì)案例拔高卷
    電力系統(tǒng)不平衡分析
    電子制作(2018年18期)2018-11-14 01:48:24
    發(fā)生在你我身邊的那些治超案例
    中國公路(2017年7期)2017-07-24 13:56:38
    電力系統(tǒng)及其自動(dòng)化發(fā)展趨勢(shì)分析
    NO與NO2相互轉(zhuǎn)化實(shí)驗(yàn)的改進(jìn)
    實(shí)踐十號(hào)上的19項(xiàng)實(shí)驗(yàn)
    太空探索(2016年5期)2016-07-12 15:17:55
    精品人妻熟女毛片av久久网站| 国产日韩一区二区三区精品不卡 | 黑人猛操日本美女一级片| 久久国产亚洲av麻豆专区| 丰满饥渴人妻一区二区三| 亚洲丝袜综合中文字幕| 欧美日韩一区二区视频在线观看视频在线| 一本色道久久久久久精品综合| 国产高清有码在线观看视频| 丝袜在线中文字幕| 岛国毛片在线播放| 国产欧美日韩综合在线一区二区 | 青春草视频在线免费观看| 国产男女超爽视频在线观看| 国产熟女午夜一区二区三区 | 亚洲欧美日韩另类电影网站| 国产午夜精品一二区理论片| 亚洲精品亚洲一区二区| 亚洲精品国产色婷婷电影| 亚洲精品日本国产第一区| 熟妇人妻不卡中文字幕| av天堂中文字幕网| 成人国产av品久久久| 新久久久久国产一级毛片| 久久女婷五月综合色啪小说| 午夜日本视频在线| 国产精品三级大全| 大香蕉97超碰在线| 亚洲av成人精品一区久久| 99视频精品全部免费 在线| 久久精品久久久久久噜噜老黄| 久久午夜综合久久蜜桃| 热re99久久精品国产66热6| 另类亚洲欧美激情| 久久99蜜桃精品久久| 欧美少妇被猛烈插入视频| 在线 av 中文字幕| 国产成人午夜福利电影在线观看| 久久久午夜欧美精品| 午夜久久久在线观看| 日韩亚洲欧美综合| 国产在线男女| 最新的欧美精品一区二区| 午夜久久久在线观看| 久久久久精品性色| 亚洲精品一二三| 亚洲精品自拍成人| 午夜免费鲁丝| 亚洲不卡免费看| 国产白丝娇喘喷水9色精品| 国产熟女午夜一区二区三区 | 国产精品久久久久久久久免| 一个人看视频在线观看www免费| 免费高清在线观看视频在线观看| 黄色怎么调成土黄色| 超碰97精品在线观看| 亚洲国产精品999| 汤姆久久久久久久影院中文字幕| 日韩成人av中文字幕在线观看| 国产69精品久久久久777片| 中国美白少妇内射xxxbb| 亚洲精品视频女| 亚洲精品国产成人久久av| 国产 精品1| 久久婷婷青草| 亚洲精品,欧美精品| 国产高清国产精品国产三级| 美女视频免费永久观看网站| 波野结衣二区三区在线| 少妇人妻久久综合中文| 国产精品嫩草影院av在线观看| 99热这里只有是精品50| 午夜福利在线观看免费完整高清在| 最近最新中文字幕免费大全7| 91精品国产国语对白视频| 狠狠精品人妻久久久久久综合| 黄色配什么色好看| 成人国产av品久久久| 亚洲av综合色区一区| 亚洲精华国产精华液的使用体验| 最黄视频免费看| 色视频在线一区二区三区| 国产69精品久久久久777片| 内射极品少妇av片p| 午夜av观看不卡| 亚洲,一卡二卡三卡| 久久久久久久大尺度免费视频| 成年人免费黄色播放视频 | 国产精品一区www在线观看| 一级毛片aaaaaa免费看小| 中文天堂在线官网| 久久99热这里只频精品6学生| 黄色毛片三级朝国网站 | 18+在线观看网站| 成年av动漫网址| 国产免费视频播放在线视频| 国语对白做爰xxxⅹ性视频网站| 国产乱人偷精品视频| 久久国产精品大桥未久av | 亚洲第一av免费看| 免费人妻精品一区二区三区视频| 久久国产亚洲av麻豆专区| 韩国高清视频一区二区三区| tube8黄色片| 人妻 亚洲 视频| 国产精品99久久久久久久久| www.色视频.com| 久久国内精品自在自线图片| 亚洲精品一二三| 欧美日韩在线观看h| 视频中文字幕在线观看| 乱码一卡2卡4卡精品| 熟女电影av网| 丰满乱子伦码专区| 自线自在国产av| 国产高清不卡午夜福利| 777米奇影视久久| 春色校园在线视频观看| 国产乱来视频区| 久久久久久久久久久丰满| 99久久精品一区二区三区| 国产av码专区亚洲av| 日韩精品有码人妻一区| 精品一区在线观看国产| 最近手机中文字幕大全| 久久精品久久久久久久性| 亚洲av成人精品一区久久| 色网站视频免费| 日韩伦理黄色片| 久久久久视频综合| 国产在视频线精品| 中文在线观看免费www的网站| 欧美最新免费一区二区三区| 午夜日本视频在线| 少妇的逼好多水| 国产精品久久久久成人av| 亚洲精品成人av观看孕妇| 久久久精品免费免费高清| 国产av码专区亚洲av| 少妇人妻一区二区三区视频| 在线观看美女被高潮喷水网站| 女的被弄到高潮叫床怎么办| 亚洲精品aⅴ在线观看| 亚洲欧洲精品一区二区精品久久久 | 26uuu在线亚洲综合色| 中文字幕制服av| 99re6热这里在线精品视频| 看非洲黑人一级黄片| 成人无遮挡网站| 日韩精品免费视频一区二区三区 | 91精品一卡2卡3卡4卡| 3wmmmm亚洲av在线观看| 成年人午夜在线观看视频| 欧美老熟妇乱子伦牲交| 亚洲国产精品专区欧美| 亚洲精品成人av观看孕妇| 国产在线免费精品| 哪个播放器可以免费观看大片| 精品久久国产蜜桃| 人妻人人澡人人爽人人| 内地一区二区视频在线| 色5月婷婷丁香| 亚洲美女黄色视频免费看| 少妇人妻久久综合中文| 国产成人免费无遮挡视频| 国产 精品1| av在线老鸭窝| 国产精品.久久久| 久久99蜜桃精品久久| 日韩av免费高清视频| 最后的刺客免费高清国语| 国产欧美日韩一区二区三区在线 | 91精品一卡2卡3卡4卡| 成年美女黄网站色视频大全免费 | 国产精品国产三级国产av玫瑰| 天美传媒精品一区二区| 下体分泌物呈黄色| 久久这里有精品视频免费| 国产精品一区二区性色av| 91久久精品国产一区二区三区| 亚洲国产成人一精品久久久| 亚洲av日韩在线播放| 欧美国产精品一级二级三级 | 人人妻人人澡人人看| 国产老妇伦熟女老妇高清| 尾随美女入室| 在线观看三级黄色| 嘟嘟电影网在线观看| 亚洲成人av在线免费| 国产亚洲午夜精品一区二区久久| 国产爽快片一区二区三区| 日本免费在线观看一区| 9色porny在线观看| 国产色婷婷99| 国产欧美日韩综合在线一区二区 | 精品国产露脸久久av麻豆| 亚洲精品国产成人久久av| 亚洲精品国产av蜜桃| 午夜福利在线观看免费完整高清在| 欧美性感艳星| 免费黄频网站在线观看国产| 99热国产这里只有精品6| 国内精品宾馆在线| 国产欧美亚洲国产| 国产亚洲欧美精品永久| 欧美成人精品欧美一级黄| 制服丝袜香蕉在线| 午夜福利视频精品| 国产精品99久久久久久久久| 多毛熟女@视频| 免费黄网站久久成人精品| 国产免费福利视频在线观看| 美女内射精品一级片tv| 欧美+日韩+精品| av免费在线看不卡| 欧美成人精品欧美一级黄| 高清黄色对白视频在线免费看 | 制服丝袜香蕉在线| 国产精品久久久久久av不卡| 亚洲性久久影院| 国产一区亚洲一区在线观看| 久久精品国产a三级三级三级| 精品人妻偷拍中文字幕| 午夜福利影视在线免费观看| 欧美老熟妇乱子伦牲交| 国产国拍精品亚洲av在线观看| 亚洲国产欧美日韩在线播放 | 亚洲成人一二三区av| 免费观看av网站的网址| 美女内射精品一级片tv| 成年人免费黄色播放视频 | 国产高清三级在线| 九九久久精品国产亚洲av麻豆| 免费黄色在线免费观看| 我的老师免费观看完整版| 国产黄片视频在线免费观看| 亚洲欧美成人精品一区二区| 午夜久久久在线观看| 国产深夜福利视频在线观看| 国产 一区精品| 国产精品久久久久久精品电影小说| 免费大片黄手机在线观看| 夫妻午夜视频| 国产日韩欧美在线精品| www.色视频.com| 久久精品久久久久久久性| 国产精品一区二区性色av| 卡戴珊不雅视频在线播放| 久久久精品免费免费高清| 亚洲伊人久久精品综合| 欧美 日韩 精品 国产| 久久热精品热| 成年人午夜在线观看视频| 性高湖久久久久久久久免费观看| 天美传媒精品一区二区| 日韩一区二区视频免费看| 少妇人妻 视频| 在线免费观看不下载黄p国产| 亚洲成人av在线免费| 视频中文字幕在线观看| 日韩在线高清观看一区二区三区| 日韩av免费高清视频| 国产在线一区二区三区精| 亚洲真实伦在线观看| 中文字幕精品免费在线观看视频 | 青春草视频在线免费观看| 免费播放大片免费观看视频在线观看| 天堂俺去俺来也www色官网| 一级毛片黄色毛片免费观看视频| 嫩草影院入口| av视频免费观看在线观看| 99热网站在线观看| 蜜桃久久精品国产亚洲av| 这个男人来自地球电影免费观看 | 午夜影院在线不卡| 久久久久精品久久久久真实原创| 亚洲欧美一区二区三区国产| 久久99一区二区三区| 国产成人a∨麻豆精品| 亚洲欧美成人精品一区二区| 国产男女内射视频| 国产成人精品一,二区| 搡女人真爽免费视频火全软件| 丰满饥渴人妻一区二区三| 成人毛片a级毛片在线播放| 卡戴珊不雅视频在线播放| 亚洲国产精品999| 精品久久久久久久久av| 一个人免费看片子| 人妻少妇偷人精品九色| 免费观看av网站的网址| 天堂8中文在线网| 美女中出高潮动态图| 成人黄色视频免费在线看| 亚洲人与动物交配视频| 成人毛片a级毛片在线播放| 国产在视频线精品| 国产有黄有色有爽视频| 午夜91福利影院| www.av在线官网国产| 在线观看国产h片| 欧美97在线视频| 日日撸夜夜添| 久久精品国产亚洲av天美| 国产精品无大码| 51国产日韩欧美| 肉色欧美久久久久久久蜜桃| 婷婷色综合www| 久久女婷五月综合色啪小说| 精品少妇内射三级| 国产精品一区二区在线观看99| 久久青草综合色| 18+在线观看网站| 国产男女内射视频| 国产亚洲av片在线观看秒播厂| 五月伊人婷婷丁香| 国产精品久久久久久久久免| 少妇人妻一区二区三区视频| 亚洲综合精品二区| 日韩一区二区视频免费看| 日本午夜av视频| 女性被躁到高潮视频| 一个人看视频在线观看www免费| 如日韩欧美国产精品一区二区三区 | 国产高清不卡午夜福利| 色吧在线观看| 狂野欧美激情性bbbbbb| 男女无遮挡免费网站观看| 欧美激情极品国产一区二区三区 | 一级黄片播放器| 人人妻人人爽人人添夜夜欢视频 | 18禁在线无遮挡免费观看视频| 一级爰片在线观看| 日日啪夜夜撸| 一二三四中文在线观看免费高清| 欧美97在线视频| 亚洲欧洲国产日韩| 乱人伦中国视频| 观看av在线不卡| 亚洲精品中文字幕在线视频 | 午夜福利影视在线免费观看| 熟女电影av网| 国内精品宾馆在线| 天天操日日干夜夜撸| 五月天丁香电影| 久久人妻熟女aⅴ| 午夜福利影视在线免费观看| 日本免费在线观看一区| 老司机亚洲免费影院| 肉色欧美久久久久久久蜜桃| 一区二区三区乱码不卡18| 三级经典国产精品| 亚洲高清免费不卡视频| 色网站视频免费| 一区二区三区免费毛片| 精品国产露脸久久av麻豆| 亚洲国产最新在线播放| 亚洲第一区二区三区不卡| 美女cb高潮喷水在线观看| 最近中文字幕2019免费版| av国产久精品久网站免费入址| 色94色欧美一区二区| 美女福利国产在线| 成人亚洲欧美一区二区av| 国模一区二区三区四区视频| 中文字幕人妻丝袜制服| 国产片特级美女逼逼视频| 国产免费福利视频在线观看| 人妻少妇偷人精品九色| 男女啪啪激烈高潮av片| 国产亚洲一区二区精品| 国产 一区精品| 丝袜在线中文字幕| 日韩精品有码人妻一区| 新久久久久国产一级毛片| 亚洲av.av天堂| 国产亚洲av片在线观看秒播厂| av免费在线看不卡| 精品一区二区三卡| 免费久久久久久久精品成人欧美视频 | 久久午夜综合久久蜜桃| 国产伦理片在线播放av一区| 观看美女的网站| 国产精品99久久久久久久久| 久久精品久久精品一区二区三区| 成人亚洲精品一区在线观看| 精品国产国语对白av| 大陆偷拍与自拍| 91精品国产国语对白视频| 成人亚洲精品一区在线观看| 亚洲欧美清纯卡通| 亚洲国产精品一区二区三区在线| a 毛片基地| 边亲边吃奶的免费视频| 久久久久国产精品人妻一区二区| 亚洲精品久久久久久婷婷小说| 少妇熟女欧美另类| 国产 一区精品| 中文字幕制服av| 一区二区av电影网| 久久久久久久亚洲中文字幕| 国产精品三级大全| 国产成人一区二区在线| 最近中文字幕高清免费大全6| 日韩,欧美,国产一区二区三区| 国产成人免费无遮挡视频| 成人免费观看视频高清| 久久国产亚洲av麻豆专区| 亚洲成色77777| 18禁在线无遮挡免费观看视频| 99精国产麻豆久久婷婷| 国产片特级美女逼逼视频| 天天躁夜夜躁狠狠久久av| 少妇人妻精品综合一区二区| 国产午夜精品久久久久久一区二区三区| 韩国av在线不卡| 国产一区二区三区av在线| 91精品国产九色| 少妇被粗大猛烈的视频| 国产亚洲av片在线观看秒播厂| 在线观看三级黄色| 久久久欧美国产精品| 18禁在线播放成人免费| 看十八女毛片水多多多| av不卡在线播放| 精品人妻偷拍中文字幕| 亚洲精品中文字幕在线视频 | 韩国高清视频一区二区三区| 26uuu在线亚洲综合色| av黄色大香蕉| 啦啦啦在线观看免费高清www| 看十八女毛片水多多多| 热re99久久国产66热| 国产熟女欧美一区二区| 乱系列少妇在线播放| av在线观看视频网站免费| 亚洲av综合色区一区| 精品国产乱码久久久久久小说| 国产乱人偷精品视频| xxx大片免费视频| 在线观看免费视频网站a站| 精品一区在线观看国产| www.av在线官网国产| 欧美日韩国产mv在线观看视频| 午夜福利在线观看免费完整高清在| 精品人妻熟女av久视频| 亚洲欧美精品专区久久| 内地一区二区视频在线| 日韩中文字幕视频在线看片| 欧美高清成人免费视频www| 少妇裸体淫交视频免费看高清| 女性生殖器流出的白浆| 我要看黄色一级片免费的| 美女大奶头黄色视频| 国产69精品久久久久777片| 日韩精品有码人妻一区| 黄色欧美视频在线观看| 欧美性感艳星| av天堂中文字幕网| 国产 精品1| 少妇人妻 视频| 国产色爽女视频免费观看| 国产亚洲午夜精品一区二区久久| 亚洲在久久综合| 午夜福利视频精品| 高清黄色对白视频在线免费看 | 99久久精品热视频| 久久精品熟女亚洲av麻豆精品| av天堂久久9| 欧美激情国产日韩精品一区| 性色avwww在线观看| 国内少妇人妻偷人精品xxx网站| 国产视频内射| 国产伦精品一区二区三区视频9| 久久国产精品男人的天堂亚洲 | 2018国产大陆天天弄谢| 欧美+日韩+精品| 国产免费一区二区三区四区乱码| 欧美精品一区二区大全| 丝袜在线中文字幕| 各种免费的搞黄视频| 成人午夜精彩视频在线观看| 成人影院久久| 波野结衣二区三区在线| 精品一区二区三区视频在线| 如日韩欧美国产精品一区二区三区 | 人妻系列 视频| 国产极品粉嫩免费观看在线 | 欧美人与善性xxx| 99九九在线精品视频 | 午夜精品国产一区二区电影| 亚洲av福利一区| 亚洲欧美成人精品一区二区| 好男人视频免费观看在线| 91久久精品电影网| 女的被弄到高潮叫床怎么办| 在线观看三级黄色| 内射极品少妇av片p| 国语对白做爰xxxⅹ性视频网站| 精品人妻偷拍中文字幕| 久久久久久久国产电影| 一级片'在线观看视频| 亚洲性久久影院| 亚洲国产最新在线播放| 国产黄色免费在线视频| 成年av动漫网址| 一级片'在线观看视频| 精品少妇黑人巨大在线播放| 一本久久精品| 自拍偷自拍亚洲精品老妇| 高清毛片免费看| 日本猛色少妇xxxxx猛交久久| 国产在线视频一区二区| av不卡在线播放| 久久99蜜桃精品久久| 中文字幕人妻熟人妻熟丝袜美| 亚洲内射少妇av| 伊人久久精品亚洲午夜| 国产精品嫩草影院av在线观看| 中文欧美无线码| 观看免费一级毛片| 国产日韩一区二区三区精品不卡 | 午夜日本视频在线| 亚洲av在线观看美女高潮| 欧美少妇被猛烈插入视频| 国产白丝娇喘喷水9色精品| 国产精品久久久久久精品电影小说| 69精品国产乱码久久久| 日韩视频在线欧美| 久久久久久久精品精品| 高清黄色对白视频在线免费看 | 亚州av有码| 日韩成人伦理影院| 成人无遮挡网站| 蜜臀久久99精品久久宅男| 极品少妇高潮喷水抽搐| 国产亚洲最大av| 久久久国产精品麻豆| 久久久久精品性色| 又大又黄又爽视频免费| 80岁老熟妇乱子伦牲交| 久久午夜福利片| 亚洲精品日韩在线中文字幕| 极品少妇高潮喷水抽搐| 美女xxoo啪啪120秒动态图| 一级毛片黄色毛片免费观看视频| 久久精品久久久久久久性| 97超视频在线观看视频| 久久精品国产亚洲av涩爱| 免费观看的影片在线观看| 免费人妻精品一区二区三区视频| 丝袜喷水一区| 人人妻人人添人人爽欧美一区卜| 三级国产精品欧美在线观看| 国产精品久久久久久久久免| 亚洲内射少妇av| h日本视频在线播放| 最近2019中文字幕mv第一页| 亚洲国产精品专区欧美| 亚洲第一av免费看| 91久久精品国产一区二区三区| 国产成人午夜福利电影在线观看| 青青草视频在线视频观看| 欧美激情极品国产一区二区三区 | 免费人妻精品一区二区三区视频| 18禁动态无遮挡网站| 亚洲av.av天堂| 美女中出高潮动态图| 欧美另类一区| 久久亚洲国产成人精品v| 国产黄片视频在线免费观看| 女人久久www免费人成看片| 热re99久久国产66热| 日本免费在线观看一区| 下体分泌物呈黄色| 男女啪啪激烈高潮av片| 天堂俺去俺来也www色官网| 最新中文字幕久久久久| av在线app专区| 一边亲一边摸免费视频| 久久亚洲国产成人精品v| 久久6这里有精品| 国产男女超爽视频在线观看| 色婷婷久久久亚洲欧美| 日韩av不卡免费在线播放| 久久99热6这里只有精品| 99热国产这里只有精品6| 日本91视频免费播放| 精品久久久久久久久av| av有码第一页| 国产精品国产三级国产专区5o| 五月玫瑰六月丁香| 性高湖久久久久久久久免费观看| 99热全是精品| 日韩中文字幕视频在线看片| 五月开心婷婷网| 日韩一区二区三区影片| 777米奇影视久久| 色94色欧美一区二区| 丰满饥渴人妻一区二区三| 午夜激情久久久久久久| 波野结衣二区三区在线| 欧美3d第一页| 精品久久国产蜜桃| 国产av码专区亚洲av| 女的被弄到高潮叫床怎么办| 国产亚洲最大av| 亚洲欧美一区二区三区黑人 | 我的女老师完整版在线观看| 国产在线视频一区二区| 在线免费观看不下载黄p国产| 爱豆传媒免费全集在线观看| 伦理电影大哥的女人| 国产亚洲一区二区精品| 精品久久久久久久久av|