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

    挖掘軟件源代碼的代碼注釋自動(dòng)生成方法

    2020-05-20 01:19:36張麗萍
    關(guān)鍵詞:代碼克隆自動(dòng)

    白 楊,張麗萍

    內(nèi)蒙古師范大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,呼和浩特 010022

    1 引言

    代碼注釋是軟件開發(fā)的一個(gè)重要組成部分,能夠輔助編程人員有效地理解源代碼。代碼注釋一般用自然語言的形式闡述代碼背后實(shí)現(xiàn)的邏輯或功能[1],開發(fā)人員依賴代碼注釋了解源代碼描述的功能。在規(guī)范的軟件開發(fā)過程中,編程人員會(huì)被要求在源代碼的適當(dāng)位置添加適量的代碼注釋[2]。

    在實(shí)際中,缺乏代碼注釋是軟件工程領(lǐng)域中的常見問題,大多數(shù)軟件代碼注釋較少,大部分程序員只注重所編寫的代碼,而忽略與代碼相對(duì)應(yīng)的注釋或者文檔,這就導(dǎo)致程序的可讀性和可維護(hù)性大大降低,同時(shí)降低開發(fā)效率。再者,如果程序員在編寫代碼的同時(shí)手動(dòng)書寫代碼注釋或者文檔,既浪費(fèi)程序員的時(shí)間,又使得工作效率降低。因此,自動(dòng)生成代碼注釋是必要的,它不僅可以節(jié)省開發(fā)人員編寫注釋的時(shí)間,提高工作效率,而且程序可讀性和可維護(hù)性也會(huì)大大提升。

    本文通過檢測(cè)原項(xiàng)目軟件和目標(biāo)軟件的相似性代碼,對(duì)提取的代碼和注釋進(jìn)行精簡優(yōu)化處理,最終為目標(biāo)軟件自動(dòng)生成代碼注釋。

    2 相關(guān)工作及概念

    2.1 代碼注釋的概念及類型

    代碼注釋即對(duì)代碼的解釋和說明,主要是為了讓開發(fā)者迅速理解代碼,是程序員為語句、程序段、函數(shù)等給出的解釋或提示,能提高程序代碼的可讀性。換句話說,代碼注釋就是用自然語言的形式闡述代碼背后實(shí)現(xiàn)的邏輯或功能,是描述軟件功能的可讀性自然語言,是架起程序設(shè)計(jì)者與開發(fā)者之間的通信橋梁,與此同時(shí)能夠提高團(tuán)隊(duì)開發(fā)合作效率,因此,自動(dòng)生成代碼注釋在整個(gè)注釋的研究中是至關(guān)重要的。

    代碼注釋按照注釋對(duì)象可以分成三種類型[3],即文檔注釋(Javadoc/Document Comment)、塊注釋(Block Comment)和行注釋(Line Comment)。為了直觀說明,圖1給出了三種代碼注釋類型的例子。其中,文檔注釋包括類注釋、方法注釋、屬性注釋、包注釋和概要注釋,一般以/**...注釋內(nèi)容...*/或者@...的形式表示;塊注釋分隔源代碼區(qū)域,該區(qū)域可以跨越多行或單行的一部分,使用起始分隔符和結(jié)束分隔符指定此區(qū)域,通常以/*...注釋內(nèi)容...*/的形式表示;行注釋是指以注釋分隔符開始并一直持續(xù)到行的結(jié)尾,或者在某些情況下,從源代碼中特定列(字符行偏移)開始,并繼續(xù)直到行的結(jié)尾,簡單地說,行注釋是指跟在代碼行后面,描述當(dāng)前代碼所表達(dá)的功能,例如Java 語言中,單行注釋以“//”開頭,跟在“//”后面的文本就是注釋內(nèi)容。其中文檔注釋可以由工具自動(dòng)生成[4-5],而塊注釋和行注釋則需要由編程人員手動(dòng)添加。

    2.2 國內(nèi)外研究現(xiàn)狀

    對(duì)于代碼注釋自動(dòng)生成國內(nèi)外均有一定的研究基礎(chǔ),Wong等人提出了一種從StackOverflow上挖掘大規(guī)模問答數(shù)據(jù)來自動(dòng)生成代碼注釋的方法[6]。該方法計(jì)算目標(biāo)軟件代碼和StackOverflow上的代碼片段之間的相似性,并將StackOverflow 上的代碼片段的描述用于生成目標(biāo)軟件代碼段的注釋。該方法雖然生成相應(yīng)的代碼注釋,但只能自動(dòng)生成有限數(shù)量的注釋。

    在此方法的基礎(chǔ)上,Wong 等人又提出了另一種通過挖掘現(xiàn)有軟件代碼庫來自動(dòng)生成代碼注釋的方法[7]。該方法使用代碼克隆檢測(cè)技術(shù)從軟件代碼庫中發(fā)現(xiàn)語法相似的代碼片段,并將代碼注釋應(yīng)用于其他語法類似的代碼片段上。該方法雖然可以產(chǎn)生良好且可提交的注釋,但自動(dòng)生成注釋的產(chǎn)量和精度相對(duì)較低。

    Sridhara等人提出了一種對(duì)Java方法生成注釋的方法[4]。該方法給定一個(gè)方法名和方法體,在自動(dòng)生成注釋的同時(shí)描述該方法的功能。Sridhara等人還使用啟發(fā)式算法對(duì)Java方法的參數(shù)自動(dòng)生成注釋[5]。這些方法雖然可以直接從代碼元素中合成自然語言的句子,但過度依賴于程序中的標(biāo)識(shí)符名稱和方法名。

    Moreno 等人對(duì)Java 類生成注釋[8]。該方法根據(jù)一組啟發(fā)式方法,并使用現(xiàn)有的文本生成工具編寫注釋。生成的注釋主要描述了類本身涵蓋的內(nèi)容以及該類的功能。雖然該方法是第一種自動(dòng)生成類的自然語言摘要的技術(shù),但其質(zhì)量還需提高。

    McBurney 和 McMillan 也提出了一種對(duì) Java 方法生成注釋的辦法[9]。該方法總結(jié)了上下文,而不是方法內(nèi)部的細(xì)節(jié)。該方法使用PageRank在該上下文中找到最重要的方法,并使用SWUM(Software Word Usage Model)來收集描述這些方法行為的關(guān)鍵字。同時(shí)設(shè)計(jì)了一個(gè)自定義NLG(Natural Language Generation)系統(tǒng)來創(chuàng)建關(guān)于此上下文的自然語言文本。該方法雖然生成注釋的質(zhì)量優(yōu)越,但評(píng)估方法單一,影響結(jié)果。

    綜上所述,在代碼注釋自動(dòng)生成方面,大多數(shù)對(duì)代碼注釋的研究都存在注釋稀少、準(zhǔn)確度不高的問題,而且程序理解本身就存在一定的難度,因此本文針對(duì)這一問題,使用注釋復(fù)用的方法來提高代碼注釋的產(chǎn)量和質(zhì)量。

    2.3 注釋復(fù)用及克隆檢測(cè)

    研究者試圖利用人工及自動(dòng)化的方法為代碼添加注釋,其中自動(dòng)化方法主要包括注釋復(fù)用及注釋抽取[4-5,8]。本文使用了注釋復(fù)用的方法,從已有軟件項(xiàng)目和目標(biāo)軟件項(xiàng)目中找出相似代碼,將已有項(xiàng)目中的注釋信息處理后映射到目標(biāo)項(xiàng)目中的相似代碼段上。因此,找出相似代碼是其中的關(guān)鍵步驟,本文使用克隆檢測(cè)加以解決。在克隆研究領(lǐng)域,人們普遍將相同或相似的代碼段叫作克隆代碼,簡稱克隆[10]?,F(xiàn)在比較權(quán)威的說法,克隆代碼可以被分為Type-1、Type-2、Type-3和Type-4四類[11]??寺z測(cè)指的是查找并反饋軟件系統(tǒng)中的克隆代碼,為軟件開發(fā)、維護(hù)、軟件重構(gòu)和演化等活動(dòng)提供最基本的參考信息。

    圖1 代碼注釋類型示例

    國內(nèi)外關(guān)于克隆檢測(cè)方法和技術(shù)的研究已經(jīng)相對(duì)成熟。很多研究者對(duì)克隆檢測(cè)進(jìn)行了實(shí)驗(yàn),Roy等人開發(fā)的Nicad應(yīng)用靈活的過濾和規(guī)范化機(jī)制對(duì)文本檢測(cè)進(jìn)行改進(jìn)[12],可有效檢測(cè)Type-1、Type-2以及Type-3克隆。

    Kamiya等人開發(fā)了一款名為CCFinder的克隆檢測(cè)工具[13]。此工具將每一行代碼單獨(dú)轉(zhuǎn)化為Token 序列,然后合并所有的Token序列,這樣做是因?yàn)榧词棺兞棵痛a結(jié)構(gòu)發(fā)生變化,也不會(huì)影響檢測(cè)結(jié)果。

    Gabel等人將PDG(Program Dependence Graph)中的子圖同構(gòu)問題規(guī)約為子樹同構(gòu)問題[14],再利用Deckard進(jìn)行檢測(cè),來提高檢測(cè)的速度和可擴(kuò)展性。

    本團(tuán)隊(duì)在克隆檢測(cè)方面也進(jìn)行了大量研究。史慶慶等人使用優(yōu)化后綴數(shù)組的方法進(jìn)行克隆代碼檢測(cè)[15],并實(shí)現(xiàn)了一款檢測(cè)軟件源代碼中克隆群的工具FCD(Function Clone Detector);張久杰等人實(shí)現(xiàn)了基于Token編輯距離的檢測(cè)方法[16],能有效檢測(cè)Type-3 克隆代碼。這些為本文的后續(xù)研究奠定了基礎(chǔ)。

    3 代碼注釋自動(dòng)生成

    3.1 研究框架

    本文自動(dòng)生成代碼注釋分為四個(gè)階段:(1)克隆檢測(cè)階段;(2)代碼和注釋提取階段;(3)克隆代碼和注釋優(yōu)化精簡階段;(4)代碼與注釋映射階段。圖2 顯示了自動(dòng)生成代碼注釋的步驟。

    圖2 總體研究路線

    本文提出的代碼注釋自動(dòng)生成的方法,需要提供兩個(gè)輸入:(1)原項(xiàng)目軟件,擁有數(shù)量豐富、質(zhì)量較高的代碼注釋,可以從中提取規(guī)范的代碼注釋信息,本文從Github下載開源項(xiàng)目。(2)目標(biāo)項(xiàng)目軟件,通過該方法為其添加代碼注釋的項(xiàng)目軟件,即從原項(xiàng)目軟件中提取注釋信息,經(jīng)過精簡優(yōu)化映射到目標(biāo)項(xiàng)目軟件中相應(yīng)的代碼段上,本方法的輸出則是為目標(biāo)項(xiàng)目自動(dòng)生成的代碼注釋文檔。

    3.2 克隆代碼檢測(cè)

    自動(dòng)生成代碼注釋之前需要檢測(cè)克隆代碼,即原項(xiàng)目軟件與目標(biāo)軟件的相似代碼片段。檢測(cè)軟件中的克隆代碼是提取代碼和注釋的基礎(chǔ),因此精準(zhǔn)的克隆檢測(cè)是自動(dòng)生成代碼注釋的關(guān)鍵步驟。本文使用當(dāng)前領(lǐng)域較成熟的克隆檢測(cè)工具Nicad 進(jìn)行克隆檢測(cè)。Nicad 是基于文本的克隆檢測(cè)工具,可以較準(zhǔn)確地檢測(cè)出Type-1、Type-2、Type-3的克隆代碼。此工具可以檢測(cè)軟件內(nèi)部的克隆代碼,也可以檢測(cè)跨版本軟件的克隆代碼,為本文后續(xù)代碼注釋的研究提供更加準(zhǔn)確的數(shù)據(jù)來源。

    本文在原項(xiàng)目軟件和目標(biāo)軟件之間找到相似的代碼段。從GitHub上下載了100個(gè)開源項(xiàng)目軟件,這些開源項(xiàng)目軟件的代碼注釋是由開發(fā)人員編寫。原項(xiàng)目的代碼注釋是經(jīng)過軟件演化過程最終沉淀形成的,相對(duì)完善成熟,質(zhì)量高并且規(guī)范化,極具參考價(jià)值,因此可以選取其作為標(biāo)準(zhǔn)集。本文將100款原項(xiàng)目軟件和5款目標(biāo)軟件作為輸入,利用Nicad 檢測(cè)這些原項(xiàng)目軟件和5 款目標(biāo)軟件,檢測(cè)結(jié)果以克隆對(duì)和克隆群的形式反饋。本文只采用克隆群形式的檢測(cè)結(jié)果,檢測(cè)結(jié)果存儲(chǔ)到XML(Extensible Markup Language)文件中。下面以FreeMind為例,介紹克隆檢測(cè)結(jié)果。圖3呈現(xiàn)了以克隆群形式反饋的部分內(nèi)容檢測(cè)結(jié)果。該XML顯示了檢測(cè)到的克隆代碼的相似度、文件路徑和文件名等詳細(xì)信息。

    圖3 克隆檢測(cè)結(jié)果存儲(chǔ)方式

    3.3 克隆代碼及其注釋的提取

    通過克隆檢測(cè)結(jié)果只得到了這些克隆代碼的存儲(chǔ)路徑,在獲取克隆檢測(cè)結(jié)果之后,需要對(duì)克隆代碼和注釋進(jìn)行提取。自動(dòng)生成代碼注釋是以提取的克隆代碼和注釋為線索映射成的集合,因此這一步驟是后續(xù)研究的基礎(chǔ)。

    3.3.1 克隆代碼的提取

    在克隆代碼提取階段,從克隆檢測(cè)階段獲取的XML 文件中,得知有文件名、文件路徑等信息,本文使用字符流讀取XML 文件,通過文件路徑和行號(hào)讀取文件,然后創(chuàng)建一個(gè)可以往文件中寫入字符數(shù)據(jù)的字符輸出流對(duì)象以便存儲(chǔ)數(shù)據(jù)。寫入數(shù)據(jù)時(shí),首先判斷文件是否存在,如果文件不存在,則自動(dòng)創(chuàng)建,如果文件存在,則會(huì)被覆蓋。然后將在指定行內(nèi)文件與不在指定行內(nèi)文件區(qū)分,存儲(chǔ)在兩個(gè)緩沖區(qū)中。最后獲取指定行內(nèi)文件的內(nèi)容寫入文件中,完成克隆代碼的提取。具體實(shí)現(xiàn)方法如下。

    算法1 克隆代碼提取算法

    輸入:克隆檢測(cè)XML文件。

    輸出:克隆代碼提取文件。

    1. def getdata(path,filename)

    2. file1,buffer #定義生成的文件

    3. For length in data do

    4. buffer=read data

    5. End For

    6. If file1 no exist then

    7. create file1

    8. Else cover file1

    9. write content

    10. End If

    3.3.2 代碼注釋的提取

    在代碼注釋提取階段,需要提取出克隆代碼相對(duì)應(yīng)的注釋,通過XML文件提供的信息,獲取文件ID號(hào)、文件名、文件路徑、源文件起始行和結(jié)束行等信息。首先獲取克隆代碼,在得到克隆代碼文件以后,將克隆代碼文件解析成AST(Abstract Syntax Tree),然后從數(shù)據(jù)庫克隆代碼段的AST中檢索代碼注釋,最后將提取的代碼注釋存儲(chǔ)到文本文檔中。具體的代碼注釋提取算法如下。

    算法2 代碼注釋提取算法

    輸入:XMLpath。

    輸出:克隆代碼、注釋內(nèi)容文檔。

    1. def getXMLdata(xmlpath)

    2. ElementTree 將XML文件解析為元素樹

    3. List 獲取ElementTree根節(jié)點(diǎn)

    4. content 注釋內(nèi)容

    5. tar_file 獲取注釋行

    6. For Clone Group in List do

    7. If element.getName equals“clones”then

    8. Return id,clones,sourcecode,startline,endline

    9. End If

    10. End For

    11. While content

    12. If linenumber in tar_file then

    13. Return content

    14. End If

    提取的克隆代碼和注釋如圖4所示,圖中提取出的fireTreeNodesChanged()表示提取的以方法為粒度的克隆代碼,/**…*/和//后面表示此克隆代碼相應(yīng)的注釋。

    圖4 提取文檔部分示例

    3.4 代碼及注釋精簡優(yōu)化

    提取出所要的克隆代碼和代碼注釋后,不能直接將這些注釋映射到目標(biāo)文件的代碼,需要對(duì)提取的克隆代碼和注釋進(jìn)行精簡優(yōu)化,提高實(shí)驗(yàn)結(jié)果的質(zhì)量和準(zhǔn)確度。因此對(duì)代碼和注釋的優(yōu)化是自動(dòng)生成代碼注釋的關(guān)鍵步驟之一,此步驟直接影響最后的注釋質(zhì)量。這一階段分為兩個(gè)步驟:(1)克隆代碼精簡;(2)代碼注釋優(yōu)化。

    3.4.1 克隆代碼精簡

    代碼中包含許多的無用詞,這些詞對(duì)后續(xù)代碼與注釋映射的研究作用較小,而且無用詞的出現(xiàn)會(huì)對(duì)實(shí)驗(yàn)結(jié)果的準(zhǔn)確度產(chǎn)生噪音,因此需對(duì)這些詞進(jìn)行處理。提取出克隆代碼以后,并不是每一段代碼都適合為其添加注釋,有的克隆代碼對(duì)于研究沒有很重要或者是必然的意義,克隆代碼檢測(cè)工具有時(shí)無法區(qū)分有意義匹配和無意義匹配,因此需要根據(jù)研究的實(shí)際情況來篩選出有意義的克隆代碼。本文采用兩條啟發(fā)式規(guī)則過濾各類型的停用詞,具體內(nèi)容如表1所示。

    表1 停用詞規(guī)則表

    3.4.2 代碼注釋優(yōu)化

    原項(xiàng)目軟件中提取的代碼注釋與目標(biāo)軟件中代碼所描述或者表達(dá)的意思或功能不一定一致,亦或者表達(dá)太過冗余,這樣就會(huì)大大降低軟件代碼的可讀性和可維護(hù)性,同時(shí)浪費(fèi)讀者的時(shí)間。在進(jìn)行代碼與注釋匹配之前,首先預(yù)處理所有提取的代碼注釋,去除無關(guān)項(xiàng)以及與代碼所表達(dá)的功能或含義不太相符的字符,然后對(duì)這些注釋進(jìn)行優(yōu)化,這樣可以使注釋變得更加淺顯易懂,開發(fā)者可以快速地理解此部分代碼所要表達(dá)的含義,提高其效率。因此,對(duì)于提取出的代碼注釋,本文通過三條啟發(fā)式規(guī)則對(duì)提取出的注釋進(jìn)行了精簡優(yōu)化,如表2所示。

    表2 優(yōu)化注釋規(guī)則

    3.5 代碼與注釋映射

    提取的克隆代碼和代碼注釋經(jīng)過精簡優(yōu)化處理后,得到了相對(duì)較高的用于實(shí)驗(yàn)研究的結(jié)果,此時(shí),本文將優(yōu)化的代碼注釋映射到目標(biāo)軟件的代碼,即將目標(biāo)代碼提取出來,和原項(xiàng)目軟件提取優(yōu)化的注釋進(jìn)行匹配,將注釋映射到目標(biāo)軟件的代碼段上。通過Nicad配置文件的行號(hào)過濾,如果是這些行號(hào)內(nèi)的代碼,加上源文件提取出的對(duì)應(yīng)的注釋,為每一個(gè)方法和語句添加對(duì)應(yīng)的注釋,重新生成目標(biāo)軟件;如果不是這些行號(hào)內(nèi)的代碼,則直接寫入文件。其對(duì)應(yīng)的代碼注釋映射算法如下。

    算法3 代碼與注釋映射算法

    輸入:優(yōu)化后的XML文件和生成的注釋文件。

    輸出:新的帶有注釋的代碼目標(biāo)文件。

    1. def writeFileContent(filepath,newstr)

    2. Temp

    3. If file exists then

    4. filein=newstr+" ";#新寫入的行,換行

    5. End If

    6. For temp=br.readline()!=null do

    7. Buffer.append(temp)

    8. End For

    3.6 生成代碼注釋

    目標(biāo)軟件的代碼與原項(xiàng)目軟件的代碼進(jìn)行克隆檢測(cè),找到二者相似的代碼,本文將克隆檢測(cè)出的代碼進(jìn)行精簡處理,然后從原項(xiàng)目軟件中提取代碼注釋,利用4個(gè)啟發(fā)式算法對(duì)提取的代碼注釋進(jìn)行優(yōu)化處理,最后將優(yōu)化后的注釋映射到目標(biāo)軟件的代碼上,此時(shí)代碼注釋自動(dòng)生成已經(jīng)基本完成。本文最后自動(dòng)生成的注釋和代碼的映射生成一個(gè)Java文件,其詳細(xì)內(nèi)容如圖5所示。

    圖5 代碼注釋生成結(jié)果圖

    4 實(shí)驗(yàn)結(jié)果與分析

    目標(biāo)軟件的注釋比較稀少且質(zhì)量不高,因此本文通過克隆檢測(cè)找出原項(xiàng)目軟件和目標(biāo)軟件的克隆代碼,對(duì)提取的代碼和注釋精簡優(yōu)化,得到質(zhì)量較高、數(shù)量適合的代碼注釋。本文為5 款目標(biāo)軟件經(jīng)過克隆檢測(cè)得到的55個(gè)代碼段生成了總共75條注釋。顯示了每個(gè)項(xiàng)目生成的代碼注釋(NC)的數(shù)量。平均為每個(gè)項(xiàng)目產(chǎn)生15條注釋,但是5 款軟件有超過105 萬行代碼,產(chǎn)量仍然很低。

    4.1 數(shù)據(jù)來源

    本文從Github上下載了100款軟件項(xiàng)目,然后在評(píng)估中為5個(gè)Java目標(biāo)軟件生成注釋,分別為Jabref、Jbidwatcher、Vuze、MegaMek、FreeMind,基本信息如表 3 所示。其中包括評(píng)估時(shí)使用的軟件,也包括通常評(píng)估的代碼克隆檢測(cè)項(xiàng)目。這5款軟件在該領(lǐng)域被經(jīng)常使用,具有代表性,且都有很長的歷史時(shí)間,比較成熟,也有其他團(tuán)隊(duì)在自動(dòng)生成代碼注釋時(shí)選用了這些軟件,因此適合用于實(shí)驗(yàn)。使用CLOC計(jì)算每個(gè)項(xiàng)目的代碼總數(shù)如表3所示。CLOC是一款在許多編程語言中計(jì)算空白行、注釋行和源代碼的物理行的軟件。

    表3 軟件基本信息

    本文在檢測(cè)原項(xiàng)目軟件與目標(biāo)軟件的克隆代碼時(shí),使用Roy 團(tuán)隊(duì)開發(fā)的檢測(cè)工具Nicad,此工具檢測(cè)方法基于文本檢測(cè),能夠高效檢測(cè)出原項(xiàng)目軟件和目標(biāo)軟件的 Type-1、Type-2 以及 Type-3 克隆代碼,并將檢測(cè)結(jié)果存儲(chǔ)在XML文件中,便于后期數(shù)據(jù)的提取和使用。

    4.2 評(píng)估標(biāo)準(zhǔn)

    本文對(duì)所得實(shí)驗(yàn)結(jié)果進(jìn)行了手動(dòng)驗(yàn)證,為了獲得更加準(zhǔn)確的代碼注釋,考慮到自動(dòng)生成注釋的準(zhǔn)確性、充分性、簡潔性等性能,運(yùn)用了以下的排名標(biāo)準(zhǔn):

    良好:自動(dòng)生成的代碼注釋在描述目標(biāo)軟件代碼時(shí)是準(zhǔn)確、充分、簡潔、符合邏輯的,則被視為是好的注釋,保留此注釋。

    中等:自動(dòng)生成的代碼注釋在描述目標(biāo)軟件代碼時(shí)不夠準(zhǔn)確、充分、簡潔,但經(jīng)過小小的修改或改變可以正確描述,則被視為是中等注釋。

    不好:自動(dòng)生成的代碼注釋在描述目標(biāo)軟件代碼時(shí)不準(zhǔn)確、不簡潔或者不充分,經(jīng)過修改或改變以后還是無法被修正,則被視為是不好的注釋,不予以推薦。

    以上標(biāo)準(zhǔn)對(duì)自動(dòng)生成的代碼注釋的質(zhì)量進(jìn)行評(píng)估,如果評(píng)估結(jié)果是良好或者中等的,那么在以后的應(yīng)用研究中就適當(dāng)?shù)赝扑]給程序開發(fā)人員。好的代碼注釋可以幫助程序開發(fā)人員節(jié)省閱讀代碼的時(shí)間和精力,提高效率。

    本文主要對(duì)5款軟件進(jìn)行了自動(dòng)生成注釋的應(yīng)用,以評(píng)估生成的代碼注釋的產(chǎn)量和質(zhì)量,采用Wong 等人的標(biāo)準(zhǔn)進(jìn)行評(píng)估,為了在以后的研究中可以進(jìn)行對(duì)比。

    4.3 實(shí)驗(yàn)結(jié)果

    (1)生成的代碼注釋的產(chǎn)量

    從NC、CG、LC、DC 這四方面對(duì)生成的代碼注釋的產(chǎn)量進(jìn)行了評(píng)估,實(shí)驗(yàn)結(jié)果的詳細(xì)信息如表4所示。其中NC表示每個(gè)項(xiàng)目生成的代碼注釋的數(shù)量;CG表示克隆組;LC 代表目標(biāo)軟件的每個(gè)克隆組中的平均代碼克隆數(shù);DC 描述了軟件存儲(chǔ)庫的每個(gè)克隆組中的平均代碼克隆數(shù);CM表示目標(biāo)項(xiàng)目軟件已經(jīng)存在的代碼注釋。

    表4 生成注釋結(jié)果的產(chǎn)量

    根據(jù)表4 可以看出,每個(gè)克隆組包含平均2.4 個(gè)本地克隆和3.4 個(gè)數(shù)據(jù)庫克隆,5 款軟件總共生成75 條代碼注釋,平均每款軟件生成15 條代碼注釋。產(chǎn)量相對(duì)較低,后續(xù)研究將進(jìn)一步對(duì)產(chǎn)量進(jìn)行提高,目前本實(shí)驗(yàn)使用的是Nicad克隆檢測(cè),檢測(cè)的克隆代碼數(shù)量還是很低。在以后的研究工作中,可以通過改進(jìn)克隆檢測(cè)技術(shù)或利用更高級(jí)的代碼克隆檢測(cè)工具來提高生成的克隆代碼的數(shù)量,還可以通過使用更多項(xiàng)目擴(kuò)展數(shù)據(jù)庫來增加克隆組的大小。

    表5顯示了克隆組大小的分布。根據(jù)所得數(shù)據(jù),知道有76.8%的克隆組包含2 個(gè)size。在以后的研究中可以通過使用更多項(xiàng)目擴(kuò)展數(shù)據(jù)庫來增加克隆組的大小,或者利用更高級(jí)的代碼克隆檢測(cè)技術(shù)。

    表5 克隆群代碼克隆的頻率分布

    (2)生成的代碼注釋的質(zhì)量

    根據(jù)上一節(jié)中提到的評(píng)估標(biāo)準(zhǔn),本文將自動(dòng)生成的代碼注釋進(jìn)行手動(dòng)驗(yàn)證,分為良好、中等和差三個(gè)等級(jí),具體信息如表6所示。其中GD表示好的代碼注釋,F(xiàn)X代表可以修復(fù)的注釋,BD 表示壞的代碼注釋。從表中可以看出,得到的好的代碼注釋的數(shù)量不是平均分布的,每一款軟件得到的結(jié)果不同,本文分別計(jì)算了自動(dòng)生成良好代碼注釋、中等注釋以及差的注釋的總和來表現(xiàn)生成代碼注釋的質(zhì)量。本實(shí)驗(yàn)總共生成75條代碼注釋,其中有21(28%)條代碼注釋是良好的,3(4%)條代碼注釋需要被修改,有51(68%)條代碼注釋是壞的。根據(jù)這些數(shù)據(jù)可以發(fā)現(xiàn),需要被修改的代碼注釋很少。對(duì)于中等和差的代碼注釋,將在后續(xù)研究中進(jìn)行總結(jié),分析問題的來源,通過改進(jìn)實(shí)驗(yàn)進(jìn)一步提高生成代碼注釋的質(zhì)量。

    表6 生成注釋結(jié)果的質(zhì)量

    自動(dòng)生成的代碼注釋中,部分注釋在目標(biāo)軟件中是已經(jīng)存在的,本實(shí)驗(yàn)比較了已經(jīng)存在的和自動(dòng)生成的代碼注釋,人工評(píng)估這部分自動(dòng)生成的代碼注釋與原有注釋比較,是否有改進(jìn),以便在后續(xù)實(shí)驗(yàn)中進(jìn)行改進(jìn)。根據(jù)表2可知,5款目標(biāo)軟件已有的注釋總數(shù)為26條,占自動(dòng)生成代碼注釋總數(shù)(76)的34.7%。具體的比較信息如表7所示。其中Better表示生成的代碼注釋比現(xiàn)有的代碼注釋好,Similar表示生成的代碼注釋和現(xiàn)有的代碼注釋相似,Worse表示生成的代碼注釋比現(xiàn)有的代碼注釋差。

    表7 自動(dòng)生成代碼注釋VS現(xiàn)有的代碼注釋 %

    由表可以看出,自動(dòng)生成的代碼注釋相比原有的代碼注釋,在良好的代碼注釋中,3.5%的代碼注釋比原有的更好,25.4%的代碼注釋與原有的代碼注釋相似;在中等的代碼注釋中9.2%的注釋更差??梢钥闯?,目標(biāo)軟件已有的代碼注釋優(yōu)于自動(dòng)生成的代碼注釋,但有25.4%自動(dòng)生成的代碼注釋與現(xiàn)有代碼相似,由來自表4的結(jié)果知,目標(biāo)軟件中有65.3%(100%-34.7%)的注釋以前沒有,是新生成的。這意味著雖然自動(dòng)生成的代碼注釋通常不如已有代碼注釋更貼近主題,由于生成注釋的工作還沒有很成熟,得到比原有更優(yōu)的3.5%已經(jīng)很不容易,在后續(xù)的實(shí)驗(yàn)中會(huì)逐步提高,但為沒有代碼注釋的代碼段生成代碼注釋仍然是有益的。因此,本實(shí)驗(yàn)對(duì)于自動(dòng)生成代碼注釋是有價(jià)值的,為以后的工作奠定了一定的基礎(chǔ)。

    對(duì)于自動(dòng)生成的代碼注釋,在代碼注釋的相應(yīng)代碼段沒有現(xiàn)有注釋的前提下,本文將評(píng)估出的良好的自動(dòng)生成的代碼注釋報(bào)告給5位專家,讓他們也根據(jù)本文的評(píng)估標(biāo)準(zhǔn)對(duì)這些良好的代碼注釋再次進(jìn)行評(píng)估。目前專家對(duì)兩款軟件的注釋給予了好評(píng),即也將其視為是良好的代碼注釋,開發(fā)人員認(rèn)為可以將其作為代碼最后的注釋。

    4.4 對(duì)比實(shí)驗(yàn)及分析

    國內(nèi)外通過使用注釋復(fù)用自動(dòng)生成代碼注釋的方法較少,其中具有代表性的方法是文獻(xiàn)[6]。文獻(xiàn)[6]中Wong 等人通過基于Token 的方法進(jìn)行克隆檢測(cè),而本文使用Nicad基于文本的方法進(jìn)行克隆檢測(cè),中間對(duì)于代碼和注釋的處理方法也不同,因此僅對(duì)生成的代碼注釋的產(chǎn)量和質(zhì)量進(jìn)行對(duì)比。Wong等人實(shí)現(xiàn)了一個(gè)代碼注釋自動(dòng)生成工具Clocom。本文研究與文獻(xiàn)[6]都使用從Github上下載的Java開源軟件,實(shí)驗(yàn)的平臺(tái)均為操作系統(tǒng)Ubuntu 16.04 64位、8 GB內(nèi)存。產(chǎn)量對(duì)比結(jié)果如表8所示。

    表8 代碼注釋產(chǎn)量對(duì)比結(jié)果

    本實(shí)驗(yàn)在克隆檢測(cè)階段檢測(cè)出的克隆代碼類型比Clocom檢測(cè)出的類型多。實(shí)驗(yàn)結(jié)果顯示,在這5款軟件中,本實(shí)驗(yàn)總共生成75 條代碼注釋,Clocom 生成67 條代碼注釋,本實(shí)驗(yàn)比Clocom多生成8條代碼注釋,在代碼注釋產(chǎn)量上高于Clocom。因此在這4個(gè)參數(shù)中,本實(shí)驗(yàn)生成代碼注釋的產(chǎn)量相對(duì)Clocom較多。

    然后對(duì)生成代碼注釋的質(zhì)量進(jìn)行了對(duì)比,如表9所示。通過表9 可以看出,在生成的代碼注釋中,對(duì)于每一款軟件,本實(shí)驗(yàn)生成的代碼注釋的質(zhì)量都比Clocom大約提高5個(gè)百分點(diǎn),5款軟件中有4款在生成的注釋中良好的代碼注釋所占的比例比Clocom大,質(zhì)量較高,有一款軟件良好的代碼注釋所占的比例略微低于Clocom。

    表9 生成代碼注釋質(zhì)量對(duì)比結(jié)果 %

    綜上,本實(shí)驗(yàn)自動(dòng)生成代碼注釋的產(chǎn)量比Clocom提高了約12%,質(zhì)量也相比于Clocom提高了約5個(gè)百分點(diǎn),均高于Clocom。

    5 結(jié)束語

    對(duì)于現(xiàn)在行業(yè)中代碼注釋數(shù)量稀少、質(zhì)量不高等,導(dǎo)致軟件的可讀性和可維護(hù)性下降的問題,本文提出了一種自動(dòng)生成代碼注釋的方法來提高注釋的數(shù)量和質(zhì)量,幫助程序員提高代碼的可讀性和可理解性。本文首先通過克隆檢測(cè)工具Nicad檢測(cè)出開源項(xiàng)目軟件庫和目標(biāo)代碼軟件庫之間的相似代碼即克隆代碼,根據(jù)代碼注釋提取算法通過Nicad 生成的XML 文件提取出克隆代碼;其次根據(jù)行號(hào)等提取出相對(duì)應(yīng)的代碼注釋;然后對(duì)提取出的代碼和注釋經(jīng)過一系列的啟發(fā)式規(guī)則,將克隆代碼和注釋精簡優(yōu)化成所需要的代碼和注釋;最后將注釋與代碼匹配映射,自動(dòng)為目標(biāo)代碼生成注釋。

    本文的研究工作還存在一些不足之處,例如檢測(cè)相似克隆代碼時(shí)用到的工具,雖然檢測(cè)的克隆代碼數(shù)很多,包含Type-1、Type-2和Type-3三種類型,但是時(shí)間復(fù)雜度會(huì)很高,這會(huì)影響到最終實(shí)驗(yàn)結(jié)果的時(shí)間效率。在最后的評(píng)估中生成代碼注釋的質(zhì)量也很低。本文將在后續(xù)的研究中考慮這些問題,為人們?cè)谠擃I(lǐng)域的研究提供更有力的數(shù)據(jù),并奠定堅(jiān)實(shí)的基礎(chǔ)。

    猜你喜歡
    代碼克隆自動(dòng)
    克隆狼
    浙江:誕生首批體細(xì)胞克隆豬
    自動(dòng)捕盜機(jī)
    創(chuàng)世代碼
    創(chuàng)世代碼
    創(chuàng)世代碼
    創(chuàng)世代碼
    基于STM32的自動(dòng)喂養(yǎng)機(jī)控制系統(tǒng)
    關(guān)于自動(dòng)駕駛
    汽車博覽(2016年9期)2016-10-18 13:05:41
    抗BP5-KLH多克隆抗體的制備及鑒定
    一级,二级,三级黄色视频| 成人国语在线视频| 男男h啪啪无遮挡| 国产精品99久久99久久久不卡 | 亚洲欧美激情在线| 午夜免费观看性视频| 亚洲人成77777在线视频| 亚洲美女黄色视频免费看| 一级片'在线观看视频| 精品久久久精品久久久| 久久人人97超碰香蕉20202| 午夜福利,免费看| 亚洲av欧美aⅴ国产| 女人精品久久久久毛片| 啦啦啦在线免费观看视频4| 一区二区三区激情视频| 午夜福利乱码中文字幕| 精品国产露脸久久av麻豆| 99精品久久久久人妻精品| www.熟女人妻精品国产| 老司机深夜福利视频在线观看 | 一本大道久久a久久精品| 在线亚洲精品国产二区图片欧美| 日韩熟女老妇一区二区性免费视频| 免费高清在线观看视频在线观看| 成人漫画全彩无遮挡| 97人妻天天添夜夜摸| 免费少妇av软件| 黑丝袜美女国产一区| 成人国产麻豆网| 久久青草综合色| 久久精品久久久久久久性| 秋霞伦理黄片| 久久免费观看电影| 多毛熟女@视频| 老司机影院成人| av在线app专区| 色94色欧美一区二区| 欧美人与性动交α欧美精品济南到| 在线观看国产h片| 最近的中文字幕免费完整| 成年动漫av网址| 免费观看av网站的网址| 大码成人一级视频| 免费黄色在线免费观看| 国产伦理片在线播放av一区| 国产 一区精品| 欧美久久黑人一区二区| 啦啦啦啦在线视频资源| 一级爰片在线观看| 性高湖久久久久久久久免费观看| 麻豆av在线久日| 哪个播放器可以免费观看大片| 亚洲国产精品一区三区| 亚洲欧美激情在线| 免费在线观看完整版高清| 国产精品国产三级专区第一集| 国产成人啪精品午夜网站| 亚洲自偷自拍图片 自拍| 午夜福利视频在线观看免费| 欧美在线一区亚洲| 久久影院123| 秋霞在线观看毛片| 国产毛片在线视频| 99热国产这里只有精品6| 久久青草综合色| 老司机靠b影院| 十八禁网站网址无遮挡| 视频区图区小说| 中文字幕高清在线视频| 亚洲欧美色中文字幕在线| 香蕉丝袜av| e午夜精品久久久久久久| netflix在线观看网站| 日韩制服丝袜自拍偷拍| 黄频高清免费视频| 日韩av免费高清视频| 亚洲国产精品成人久久小说| 亚洲欧美成人精品一区二区| 一区二区三区精品91| 欧美久久黑人一区二区| 老熟女久久久| 免费观看人在逋| 最新在线观看一区二区三区 | 2021少妇久久久久久久久久久| 亚洲国产毛片av蜜桃av| 天天躁夜夜躁狠狠久久av| 国产精品三级大全| 在线观看www视频免费| 国产又色又爽无遮挡免| 99精品久久久久人妻精品| 91精品伊人久久大香线蕉| 18禁观看日本| 你懂的网址亚洲精品在线观看| 最新在线观看一区二区三区 | 美国免费a级毛片| av在线老鸭窝| 国产成人精品福利久久| 七月丁香在线播放| 老司机在亚洲福利影院| 亚洲精华国产精华液的使用体验| 午夜av观看不卡| 制服人妻中文乱码| 国产深夜福利视频在线观看| 国产成人精品久久久久久| 一级片'在线观看视频| 狂野欧美激情性bbbbbb| 九草在线视频观看| 日韩制服骚丝袜av| a 毛片基地| 赤兔流量卡办理| av在线观看视频网站免费| 亚洲情色 制服丝袜| 国产一级毛片在线| 色网站视频免费| 久久久久视频综合| 国产精品免费视频内射| 国产一区二区激情短视频 | 久久免费观看电影| 午夜福利视频精品| 久久精品熟女亚洲av麻豆精品| 母亲3免费完整高清在线观看| 国产精品 欧美亚洲| 最近的中文字幕免费完整| 一本一本久久a久久精品综合妖精| 亚洲色图 男人天堂 中文字幕| 一二三四中文在线观看免费高清| 一级爰片在线观看| 欧美日韩视频精品一区| 久久韩国三级中文字幕| 秋霞伦理黄片| 看非洲黑人一级黄片| 成年av动漫网址| 日韩熟女老妇一区二区性免费视频| 99热网站在线观看| 九色亚洲精品在线播放| 国产精品二区激情视频| 久久精品久久久久久噜噜老黄| 丰满少妇做爰视频| 精品人妻在线不人妻| 亚洲精品,欧美精品| 亚洲,一卡二卡三卡| 国产深夜福利视频在线观看| 欧美xxⅹ黑人| 国产亚洲最大av| 麻豆乱淫一区二区| 亚洲久久久国产精品| 午夜av观看不卡| 精品国产国语对白av| 在线观看一区二区三区激情| 91aial.com中文字幕在线观看| 久久韩国三级中文字幕| 成年动漫av网址| 国产黄频视频在线观看| 毛片一级片免费看久久久久| 国产精品久久久人人做人人爽| 午夜av观看不卡| 色播在线永久视频| 亚洲人成网站在线观看播放| 日韩制服骚丝袜av| 麻豆精品久久久久久蜜桃| 国产一区二区三区综合在线观看| 成年女人毛片免费观看观看9 | av国产精品久久久久影院| 熟妇人妻不卡中文字幕| 亚洲欧美一区二区三区黑人| 搡老乐熟女国产| 久久久久久久大尺度免费视频| 精品国产露脸久久av麻豆| 国产精品欧美亚洲77777| 久久久久久免费高清国产稀缺| 美女高潮到喷水免费观看| 日本vs欧美在线观看视频| 五月天丁香电影| av视频免费观看在线观看| 黄片无遮挡物在线观看| 9191精品国产免费久久| 蜜桃在线观看..| 国产熟女午夜一区二区三区| 无限看片的www在线观看| 日韩一区二区视频免费看| 久久99精品国语久久久| 亚洲自偷自拍图片 自拍| 欧美老熟妇乱子伦牲交| 色吧在线观看| 激情视频va一区二区三区| 色94色欧美一区二区| 亚洲精品国产一区二区精华液| 天堂俺去俺来也www色官网| 人人妻人人澡人人爽人人夜夜| 精品久久蜜臀av无| 婷婷色av中文字幕| 欧美激情高清一区二区三区 | 久久久久精品人妻al黑| 免费久久久久久久精品成人欧美视频| 99久久人妻综合| 亚洲精品aⅴ在线观看| 午夜免费鲁丝| 日韩 欧美 亚洲 中文字幕| 在线观看免费日韩欧美大片| 女人爽到高潮嗷嗷叫在线视频| 国产精品久久久人人做人人爽| 日韩精品有码人妻一区| 日韩一区二区三区影片| 亚洲欧美精品自产自拍| 少妇猛男粗大的猛烈进出视频| 日韩视频在线欧美| 久久精品久久久久久噜噜老黄| a级毛片黄视频| 日本黄色日本黄色录像| 久久久精品94久久精品| 免费黄网站久久成人精品| 在线看a的网站| 我的亚洲天堂| 国产色婷婷99| 亚洲美女视频黄频| 天堂俺去俺来也www色官网| 美女脱内裤让男人舔精品视频| 国产片内射在线| 欧美日韩亚洲高清精品| 日韩av在线免费看完整版不卡| 一二三四中文在线观看免费高清| 欧美老熟妇乱子伦牲交| 日韩中文字幕视频在线看片| 欧美亚洲日本最大视频资源| 免费观看av网站的网址| 国产1区2区3区精品| 精品一品国产午夜福利视频| 少妇人妻久久综合中文| 韩国高清视频一区二区三区| 永久免费av网站大全| 中文字幕av电影在线播放| 美女中出高潮动态图| 欧美日韩一级在线毛片| 少妇 在线观看| 天天添夜夜摸| 亚洲精品av麻豆狂野| 久久久精品免费免费高清| 成人国产麻豆网| 最近2019中文字幕mv第一页| 免费女性裸体啪啪无遮挡网站| 黄色怎么调成土黄色| 国产色婷婷99| 日本一区二区免费在线视频| 老司机在亚洲福利影院| 男女之事视频高清在线观看 | 99久久综合免费| 久久久精品免费免费高清| 日韩一卡2卡3卡4卡2021年| 麻豆乱淫一区二区| 日韩人妻精品一区2区三区| 91精品伊人久久大香线蕉| 1024香蕉在线观看| 国产亚洲欧美精品永久| 丁香六月天网| 亚洲av成人精品一二三区| 国产黄色视频一区二区在线观看| 黄频高清免费视频| 天天躁日日躁夜夜躁夜夜| 一本一本久久a久久精品综合妖精| 成年女人毛片免费观看观看9 | 久久人人97超碰香蕉20202| 视频在线观看一区二区三区| 人妻人人澡人人爽人人| 看十八女毛片水多多多| 看免费av毛片| 国产毛片在线视频| 成人影院久久| 精品人妻在线不人妻| 一级毛片 在线播放| 免费看av在线观看网站| 亚洲av欧美aⅴ国产| 精品国产国语对白av| 精品少妇黑人巨大在线播放| 午夜久久久在线观看| 嫩草影视91久久| 街头女战士在线观看网站| 男人爽女人下面视频在线观看| 五月开心婷婷网| 国产视频首页在线观看| 秋霞伦理黄片| 美女扒开内裤让男人捅视频| av在线老鸭窝| 七月丁香在线播放| 高清在线视频一区二区三区| av福利片在线| 飞空精品影院首页| 97人妻天天添夜夜摸| 国产精品一区二区在线观看99| 国产一区二区 视频在线| 国产淫语在线视频| 女人精品久久久久毛片| 日韩制服丝袜自拍偷拍| bbb黄色大片| 亚洲精品在线美女| 亚洲精品,欧美精品| 久久久久精品性色| 亚洲欧美精品自产自拍| 免费在线观看视频国产中文字幕亚洲 | 精品久久久精品久久久| 女性生殖器流出的白浆| 免费观看性生交大片5| 久久久欧美国产精品| 狂野欧美激情性xxxx| 久久久久久人人人人人| 街头女战士在线观看网站| 九色亚洲精品在线播放| 亚洲欧美精品自产自拍| av电影中文网址| 久久精品国产亚洲av涩爱| 欧美精品av麻豆av| 国产精品久久久人人做人人爽| 一本—道久久a久久精品蜜桃钙片| 日韩一区二区三区影片| 色精品久久人妻99蜜桃| 咕卡用的链子| 午夜福利免费观看在线| 99久久综合免费| 不卡视频在线观看欧美| 黑人欧美特级aaaaaa片| 尾随美女入室| 伦理电影免费视频| 美女中出高潮动态图| 成人国语在线视频| 欧美av亚洲av综合av国产av | 青春草视频在线免费观看| 桃花免费在线播放| 亚洲国产精品国产精品| 视频区图区小说| 丝袜在线中文字幕| 免费人妻精品一区二区三区视频| 一边摸一边做爽爽视频免费| 色精品久久人妻99蜜桃| 9热在线视频观看99| 中文字幕人妻丝袜制服| 超碰成人久久| 亚洲欧美精品自产自拍| www日本在线高清视频| 香蕉丝袜av| av国产久精品久网站免费入址| 啦啦啦 在线观看视频| 两个人看的免费小视频| 少妇被粗大的猛进出69影院| 国产人伦9x9x在线观看| 国产伦理片在线播放av一区| 天堂8中文在线网| 黄片小视频在线播放| √禁漫天堂资源中文www| 丝袜喷水一区| 国产精品亚洲av一区麻豆 | 国产成人免费观看mmmm| 一个人免费看片子| 中国三级夫妇交换| 男女午夜视频在线观看| 爱豆传媒免费全集在线观看| 久久国产精品男人的天堂亚洲| 各种免费的搞黄视频| 91成人精品电影| 99热网站在线观看| tube8黄色片| 十分钟在线观看高清视频www| 亚洲av在线观看美女高潮| 午夜老司机福利片| 97在线人人人人妻| 国产一区亚洲一区在线观看| 精品国产一区二区三区四区第35| 久久久国产一区二区| 日韩 欧美 亚洲 中文字幕| 777米奇影视久久| 少妇精品久久久久久久| 中文精品一卡2卡3卡4更新| 日本欧美视频一区| 大片电影免费在线观看免费| 国产日韩欧美亚洲二区| 一区在线观看完整版| 精品少妇一区二区三区视频日本电影 | 亚洲国产精品一区二区三区在线| 中文字幕精品免费在线观看视频| 国产成人精品久久久久久| 免费日韩欧美在线观看| 国产精品久久久久久人妻精品电影 | 纯流量卡能插随身wifi吗| 成人手机av| 精品国产超薄肉色丝袜足j| 欧美日韩成人在线一区二区| 国产一级毛片在线| 亚洲av成人精品一二三区| 亚洲美女搞黄在线观看| 成人国产av品久久久| 亚洲av国产av综合av卡| 国产乱来视频区| 最新的欧美精品一区二区| 侵犯人妻中文字幕一二三四区| 1024视频免费在线观看| 另类精品久久| 欧美日韩视频精品一区| 纯流量卡能插随身wifi吗| 又大又黄又爽视频免费| 中文字幕亚洲精品专区| 日本vs欧美在线观看视频| 人人妻,人人澡人人爽秒播 | 美女扒开内裤让男人捅视频| 午夜免费男女啪啪视频观看| 成人漫画全彩无遮挡| 男女床上黄色一级片免费看| 高清不卡的av网站| 成人亚洲欧美一区二区av| 精品久久久精品久久久| 国产成人精品无人区| 国产精品久久久久久精品电影小说| 亚洲国产欧美一区二区综合| 亚洲三区欧美一区| 免费观看a级毛片全部| 国产精品蜜桃在线观看| 极品人妻少妇av视频| 91成人精品电影| av又黄又爽大尺度在线免费看| 美女午夜性视频免费| 2018国产大陆天天弄谢| 蜜桃在线观看..| 精品一区二区三区av网在线观看 | 18禁裸乳无遮挡动漫免费视频| 国产日韩欧美在线精品| 激情五月婷婷亚洲| 十八禁网站网址无遮挡| 99九九在线精品视频| 美女脱内裤让男人舔精品视频| 久久精品亚洲熟妇少妇任你| 国产精品 国内视频| 国产乱来视频区| 成人黄色视频免费在线看| 久久久久久人人人人人| 色吧在线观看| 久久精品aⅴ一区二区三区四区| 国产视频首页在线观看| 国产欧美亚洲国产| 好男人视频免费观看在线| 久久人妻熟女aⅴ| 国产 精品1| 又大又爽又粗| 美女视频免费永久观看网站| 少妇人妻久久综合中文| 成年动漫av网址| 国产精品一区二区在线不卡| 看免费成人av毛片| 又黄又粗又硬又大视频| 色精品久久人妻99蜜桃| 如何舔出高潮| 日日撸夜夜添| 日韩精品免费视频一区二区三区| 久久人人爽av亚洲精品天堂| 女人久久www免费人成看片| av国产久精品久网站免费入址| 男女之事视频高清在线观看 | 婷婷色av中文字幕| 性少妇av在线| 一区福利在线观看| 黄色怎么调成土黄色| 波野结衣二区三区在线| av女优亚洲男人天堂| 亚洲精品,欧美精品| 18禁观看日本| 18禁裸乳无遮挡动漫免费视频| 午夜免费观看性视频| 国产成人av激情在线播放| 伦理电影免费视频| 国产成人系列免费观看| 久久久精品94久久精品| 精品少妇黑人巨大在线播放| 精品久久久精品久久久| 色精品久久人妻99蜜桃| 国产欧美日韩一区二区三区在线| 亚洲av男天堂| 久久狼人影院| 精品一区二区三区av网在线观看 | 久久久久国产一级毛片高清牌| 日韩电影二区| 天堂8中文在线网| 日韩熟女老妇一区二区性免费视频| 高清欧美精品videossex| av网站免费在线观看视频| 热re99久久精品国产66热6| 观看av在线不卡| 午夜福利视频在线观看免费| 欧美国产精品一级二级三级| 黄色视频不卡| 一本久久精品| 男女边摸边吃奶| 老汉色∧v一级毛片| 久久久精品国产亚洲av高清涩受| 久久精品熟女亚洲av麻豆精品| 制服人妻中文乱码| 午夜福利在线免费观看网站| 曰老女人黄片| 亚洲一卡2卡3卡4卡5卡精品中文| 在线观看人妻少妇| 中国国产av一级| 日韩,欧美,国产一区二区三区| 一区二区三区乱码不卡18| 国产免费福利视频在线观看| 国产亚洲一区二区精品| 99香蕉大伊视频| 欧美精品高潮呻吟av久久| 国产亚洲午夜精品一区二区久久| 国产探花极品一区二区| 人妻人人澡人人爽人人| 汤姆久久久久久久影院中文字幕| 久久久久久久国产电影| 又粗又硬又长又爽又黄的视频| 亚洲欧美成人精品一区二区| 好男人视频免费观看在线| 母亲3免费完整高清在线观看| 亚洲av综合色区一区| 国产成人免费观看mmmm| 少妇被粗大的猛进出69影院| 91精品伊人久久大香线蕉| 欧美精品一区二区大全| 国产精品久久久久久精品古装| 最新在线观看一区二区三区 | 亚洲在久久综合| 亚洲欧美一区二区三区久久| 亚洲精品aⅴ在线观看| 黄色 视频免费看| 最新在线观看一区二区三区 | 黄色视频不卡| 热99国产精品久久久久久7| 国产精品国产三级专区第一集| 国产在线一区二区三区精| 高清av免费在线| 捣出白浆h1v1| 日本欧美国产在线视频| 成人黄色视频免费在线看| 日本91视频免费播放| 成人18禁高潮啪啪吃奶动态图| 大香蕉久久网| 国产老妇伦熟女老妇高清| 国产黄色免费在线视频| 黑人巨大精品欧美一区二区蜜桃| 中文精品一卡2卡3卡4更新| 亚洲精品美女久久久久99蜜臀 | 自线自在国产av| 亚洲精品国产一区二区精华液| 午夜福利,免费看| 国产在视频线精品| 这个男人来自地球电影免费观看 | 大片电影免费在线观看免费| 久久久久精品人妻al黑| 一边摸一边抽搐一进一出视频| 最黄视频免费看| 国产成人系列免费观看| 日本爱情动作片www.在线观看| 国产精品av久久久久免费| 在线免费观看不下载黄p国产| 日韩制服骚丝袜av| 18禁国产床啪视频网站| 欧美日韩国产mv在线观看视频| 美女大奶头黄色视频| 国产爽快片一区二区三区| 一本—道久久a久久精品蜜桃钙片| 久久av网站| 最近手机中文字幕大全| 亚洲熟女精品中文字幕| 国产精品久久久av美女十八| 国产成人av激情在线播放| 亚洲欧美精品自产自拍| 欧美亚洲日本最大视频资源| 国产亚洲欧美精品永久| 啦啦啦 在线观看视频| 97人妻天天添夜夜摸| 精品一区二区三区四区五区乱码 | 久久av网站| 日韩免费高清中文字幕av| 久久精品亚洲av国产电影网| 欧美精品高潮呻吟av久久| 综合色丁香网| 国产女主播在线喷水免费视频网站| 18禁观看日本| 欧美另类一区| 天天添夜夜摸| 亚洲三区欧美一区| 大码成人一级视频| 亚洲中文av在线| 九色亚洲精品在线播放| av片东京热男人的天堂| 亚洲成人国产一区在线观看 | 亚洲国产毛片av蜜桃av| 日韩成人av中文字幕在线观看| 国产成人精品久久久久久| 悠悠久久av| 国产成人啪精品午夜网站| videosex国产| 麻豆乱淫一区二区| 成人国语在线视频| 在线天堂中文资源库| 国产 精品1| 国产成人91sexporn| 黄片小视频在线播放| 欧美人与性动交α欧美软件| 日本午夜av视频| 在线观看免费视频网站a站| 9191精品国产免费久久| 免费人妻精品一区二区三区视频| 国产又爽黄色视频| 看免费av毛片| 亚洲激情五月婷婷啪啪| 涩涩av久久男人的天堂| 免费观看性生交大片5| 美女大奶头黄色视频| 丁香六月天网| 亚洲,一卡二卡三卡| 日韩人妻精品一区2区三区| 精品亚洲成国产av| 观看美女的网站| 一级片免费观看大全| av线在线观看网站|