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

    面向開(kāi)源軟件的自承認(rèn)代碼重構(gòu)現(xiàn)象研究

    2018-11-15 01:54:22李增揚(yáng)
    關(guān)鍵詞:異味開(kāi)發(fā)者代碼

    張 迪,李增揚(yáng),李 兵,梁 鵬

    (武漢大學(xué) 計(jì)算機(jī)學(xué)院,武漢 430072)

    1 引 言

    軟件系統(tǒng)從誕生開(kāi)始會(huì)發(fā)生逐漸演進(jìn).軟件演進(jìn)通常占據(jù)軟件開(kāi)發(fā)生命周期的75%[1].然而,質(zhì)量的降低和復(fù)雜性增加促使了開(kāi)發(fā)人員提出靈活的、可維護(hù)的、可擴(kuò)展的技術(shù)用以提高軟件的可靠性且減少修改的代價(jià).重構(gòu)就是其中之一.根據(jù)定義,重構(gòu)是“改變軟件系統(tǒng)的過(guò)程,它不會(huì)改變代碼的外部行為,而是改進(jìn)其內(nèi)部結(jié)構(gòu)[2]”.重構(gòu)的目標(biāo)是使源代碼更簡(jiǎn)單、更易于維護(hù)[2].軟件的可維護(hù)性可以通過(guò)代碼異味[3](code smell)來(lái)度量,而重構(gòu)是解決代碼異味的一種有效方法[1].

    我們知道,開(kāi)發(fā)人員經(jīng)常在版本控制系統(tǒng)的提交消息中明確聲稱(chēng)他們對(duì)軟件系統(tǒng)的修改為重構(gòu)(Refactoring).所以,根據(jù)定義,重構(gòu)之后的軟件系統(tǒng)的可維護(hù)性將會(huì)得到改善.我們稱(chēng)這類(lèi)代碼修改為開(kāi)發(fā)人員的自承認(rèn)重構(gòu)(Self-admitted refactoring,簡(jiǎn)稱(chēng)SAR).因此,一個(gè)項(xiàng)目的提交可以分為兩類(lèi):自承認(rèn)重構(gòu)(簡(jiǎn)稱(chēng):SAR)和非自承認(rèn)重構(gòu)(簡(jiǎn)稱(chēng):非SAR).一個(gè)SAR對(duì)應(yīng)的軟件代碼庫(kù)版本稱(chēng)為SAR版本.目前,SAR是否改善了源代碼的結(jié)構(gòu)質(zhì)量尚未得到研究和證實(shí).

    本文為了深入了解自承認(rèn)重構(gòu)現(xiàn)象,對(duì)一個(gè)大型開(kāi)源軟件項(xiàng)目(即Fastjson)進(jìn)行了探索性案例研究.我們使用代碼異味(Code smell)來(lái)評(píng)估SAR對(duì)軟件質(zhì)量的影響.本文得到的主要結(jié)果有:1)在選定的項(xiàng)目中,SAR往往不增加代碼異味的數(shù)量;2)在SAR版本中,被修改的源文件數(shù)量與新引入的代碼異味之間存在顯著相關(guān)關(guān)系;3)進(jìn)行過(guò)SAR的開(kāi)發(fā)者占總開(kāi)發(fā)者的比例相對(duì)較小;4)SAR在軟件生命周期中分布不均衡.

    本文的組織如下:第2節(jié)介紹代碼異味及其檢測(cè)工具,并介紹SAR的研究背景和相關(guān)工作;第3節(jié)描述了案例研究設(shè)計(jì),包括研究問(wèn)題、案例選取、所需收集的數(shù)據(jù)、數(shù)據(jù)收集方法、數(shù)據(jù)分析方法等;第4節(jié)給出了研究結(jié)果;第5節(jié)針對(duì)結(jié)果進(jìn)行了討論;最后,第6節(jié)給出了本文結(jié)論.

    2 相關(guān)研究

    在這一節(jié)中,我們將從三個(gè)方面討論與自承認(rèn)重構(gòu)領(lǐng)域相關(guān)的研究工作.

    2.1 代碼異味與重構(gòu)

    Fowler等人提出使用代碼異味(code smell)來(lái)表示代碼的結(jié)構(gòu)質(zhì)量問(wèn)題[2].他們定義了22種常見(jiàn)的代碼異味,包括重復(fù)代碼(duplicated code)、狎昵關(guān)系(inappropriate intimacy)等[2].后來(lái)一些新的代碼異味被提出,例如:Kerievsky提出了5種新的代碼異味,包括條件復(fù)雜度(conditional complexity)、方案擴(kuò)展(solution sprawl)等[4].Zhang等人針對(duì)目前代碼異味的研究情況做了文獻(xiàn)綜述,他們發(fā)現(xiàn)Duplicated Code被過(guò)度研究,且很多的研究重點(diǎn)都放在了檢測(cè)代碼異味上,而非代碼異味對(duì)軟件的影響[5].

    重構(gòu)可以幫助改進(jìn)軟件設(shè)計(jì),使軟件更容易理解,幫助開(kāi)發(fā)人員發(fā)現(xiàn)bug并提高開(kāi)發(fā)效率[2].針對(duì)手工重構(gòu)存在容易引入錯(cuò)誤的問(wèn)題,劉偉等人提出了一種以單例模式為導(dǎo)向的源代碼自動(dòng)重構(gòu)方法,通過(guò)將源代碼轉(zhuǎn)換成抽象語(yǔ)法樹(shù)并進(jìn)行操作的方式,成功實(shí)現(xiàn)了單例化重構(gòu)[6].Monteiro和Fernandes提供了一組面向切面編程(AOP)風(fēng)格代碼的重構(gòu)和代碼異味特征,并且還提供了一組特定的AOP的重構(gòu)[7].Hamaz提出了一種基于對(duì)代碼異味之間依賴(lài)關(guān)系的定量分析的方法,指出有些代碼異味需要更多的補(bǔ)救修復(fù)工作,并且在重構(gòu)過(guò)程中開(kāi)發(fā)人員應(yīng)給予必要的關(guān)注[8].另外,他們的文章中還介紹了Kerievsky和Fowler提出的代碼異味之間的區(qū)別.但在項(xiàng)目的提交中,一些開(kāi)發(fā)人員明確承認(rèn)的重構(gòu)卻很少被研究.

    2.2 代碼異味檢測(cè)方法與工具

    在代碼異味數(shù)量龐大的情況下,手動(dòng)檢測(cè)代碼異味是低效的.此外,它嚴(yán)重依賴(lài)于開(kāi)發(fā)人員的經(jīng)驗(yàn),缺乏相關(guān)的經(jīng)驗(yàn)可能導(dǎo)致檢測(cè)的混亂[9].而各種檢測(cè)代碼異味的方法和工具可以進(jìn)行良好的檢測(cè)工作.一些工具已經(jīng)被應(yīng)用到軟件開(kāi)發(fā)的實(shí)踐中.其中,Klockwork、PMD和FindBugs是典型的用來(lái)檢測(cè)潛在代碼缺陷(檢測(cè)包括:命名缺陷和未使用的代碼)和代碼異味(例如:長(zhǎng)方法和上帝類(lèi)等)的工具.

    需要指出的是,代碼異味一般產(chǎn)生在代碼的升級(jí)過(guò)程中產(chǎn)生.林濤等人總結(jié)了代碼異味面臨的兩個(gè)問(wèn)題:1)類(lèi)型難以劃分;2)難以量化.他們對(duì)4種代碼異味進(jìn)行了量化研究,并提出了面向代碼異味的“容器-破壞者-發(fā)現(xiàn)者”檢測(cè)策略.將人工免疫基本概念和信號(hào)遷移至軟件工程,檢測(cè)結(jié)果優(yōu)良[10].

    2.3 自承認(rèn)現(xiàn)象的研究

    自承認(rèn)現(xiàn)象的研究,在技術(shù)債務(wù)研究領(lǐng)域比較流行.Potdar和Shihab對(duì)自承認(rèn)技術(shù)債務(wù)(Self-admitted technical debt)進(jìn)行了探索性研究,發(fā)現(xiàn)在2.4%的文件中存在自承認(rèn)技術(shù)債務(wù),而26.3%~63.5%的自承認(rèn)技術(shù)債務(wù)在引入后會(huì)被清除[11].

    Gabriele Bavota 等人,針對(duì)Potdar的論文進(jìn)行了深入的分析,通過(guò)對(duì)159個(gè)軟件的自承認(rèn)技術(shù)債務(wù)的演變與擴(kuò)散的檢驗(yàn)中得出以下幾點(diǎn)結(jié)論:1)自承認(rèn)技術(shù)債務(wù)普遍存在的;2)技術(shù)債務(wù)主要表現(xiàn)為代碼,缺陷以及需求債務(wù);3)在開(kāi)發(fā)者沒(méi)有修復(fù)的情況下會(huì)隨時(shí)間增加;4)即使修復(fù),也會(huì)在系統(tǒng)存活很長(zhǎng)時(shí)間[12].Maldonado等人利用自然語(yǔ)言處理的方法,通過(guò)對(duì)源注釋的自動(dòng)識(shí)別來(lái)挖掘自承認(rèn)技術(shù)債務(wù),研究表明即使在一個(gè)相對(duì)較小的訓(xùn)練數(shù)據(jù)集下也具有良好的準(zhǔn)確率[13].Sultan Wehaibi等人就自承認(rèn)技術(shù)債務(wù)對(duì)軟件質(zhì)量的影響方面進(jìn)行了進(jìn)一步探索,通過(guò)對(duì)開(kāi)源項(xiàng)目進(jìn)行了案例研究后發(fā)現(xiàn),自承認(rèn)技術(shù)債務(wù)比非自承認(rèn)技術(shù)債務(wù)要引入更少的代碼缺陷,技術(shù)債務(wù)不僅可能產(chǎn)生代碼缺陷的影響,而且會(huì)令系統(tǒng)難以適應(yīng)未來(lái)的變化[14].

    在軟件重構(gòu)與自承認(rèn)技術(shù)債務(wù)相關(guān)研究的啟發(fā)下,我們將類(lèi)似的概念遷移到探索自承認(rèn)重構(gòu)(SAR)的方向上,使用代碼異味作為代碼質(zhì)量的度量指標(biāo),來(lái)驗(yàn)證在SAR版本中代碼質(zhì)量是否得到了改善.關(guān)于SAR的研究結(jié)果將有助于開(kāi)發(fā)者了解代碼的狀況以及軟件的質(zhì)量,并提示開(kāi)發(fā)人員改善項(xiàng)目.

    3 研究設(shè)計(jì)

    我們對(duì)一個(gè)托管在GitHub上的大型Java開(kāi)源軟件項(xiàng)目(Open source software,簡(jiǎn)稱(chēng)OSS)進(jìn)行案例研究.在本節(jié)中,我們將根據(jù)Runeson和H?st提出的指導(dǎo)原則[15]來(lái)設(shè)計(jì)和描述本文的案例研究.

    3.1 目標(biāo)與研究問(wèn)題

    本案例研究的目標(biāo)是:利用“目標(biāo)-問(wèn)題-度量”方法[16],在開(kāi)源項(xiàng)目環(huán)境中,分析SAR對(duì)源代碼的影響,并驗(yàn)證其提高代碼可維護(hù)性的有效性.基于上述目標(biāo),我們提出四個(gè)主要研究問(wèn)題(RQs):

    RQ1:SAR改善了源代碼的結(jié)構(gòu)質(zhì)量嗎?

    重構(gòu)的目的在于提高軟件的內(nèi)部質(zhì)量[2],因此,我們想探究在SAR版本中源代碼的質(zhì)量是否有所提高.這個(gè)RQ可以分解為以下三個(gè)子問(wèn)題進(jìn)行細(xì)化研究:

    RQ1.1:SAR減少了代碼異味嗎?如果是,哪些代碼異味最容易減少?

    代碼異味是被廣泛接受的衡量源代碼質(zhì)量的指標(biāo)[2].因此,研究SAR是否減少了代碼異味將是評(píng)估代碼質(zhì)量的關(guān)鍵.如果答案是肯定的,那么接下來(lái)我們想知道哪些代碼異味會(huì)在SAR版本中減少.

    RQ1.2:與非SAR版本相比,SAR版本是否具有更少的代碼異味?

    代碼異味的數(shù)量可以在一定程度上反映軟件系統(tǒng)的結(jié)構(gòu)質(zhì)量.所以,SAR中的代碼異味是否少于非SAR是一個(gè)值得研究的問(wèn)題.

    RQ1.3:在SAR中,代碼異味的嚴(yán)重級(jí)別的分布情況是怎樣的?

    代碼異味檢測(cè)工具提供了代碼異味的嚴(yán)重級(jí)別,其代表著代碼異味的嚴(yán)重程度和修復(fù)的優(yōu)先等級(jí).在SAR中,代碼異味嚴(yán)重程度的分布可以用來(lái)評(píng)估代碼的總體質(zhì)量狀態(tài).

    RQ2:SAR和非SAR版本之中修改文件的數(shù)量有明顯區(qū)別嗎? 被修改文件的數(shù)量與SAR中新引入的代碼異味的數(shù)量具有相關(guān)性嗎?

    在軟件開(kāi)發(fā)過(guò)程中,每一次提交都涉及到不同數(shù)量的源文件的修改,因此被修改的文件數(shù)量和SAR中引入的代碼異味數(shù)量之間的關(guān)系是一個(gè)值得探索的問(wèn)題.

    RQ3:是否有開(kāi)發(fā)者傾向于自承認(rèn)重構(gòu)?

    不同的開(kāi)發(fā)者有不同的代碼風(fēng)格和代碼理解能力.自承認(rèn)重構(gòu)信息是基于自然語(yǔ)言基礎(chǔ)上的,因此SAR是否與開(kāi)發(fā)者的經(jīng)驗(yàn)、寫(xiě)作風(fēng)格或者提交次數(shù)有關(guān)系,是研究SAR現(xiàn)象的關(guān)鍵.

    RQ4:在項(xiàng)目開(kāi)發(fā)的生命周期中,SAR是如何分布的?

    SAR分布是否平衡反映著軟件項(xiàng)目開(kāi)發(fā)周期中的自承認(rèn)重構(gòu)狀態(tài),了解SAR分布對(duì)我們了解整體軟件生命周期狀態(tài)將有所幫助和啟發(fā).

    3.2 案例選取

    本研究主要探索SAR現(xiàn)象,因此以SAR作為分析單元.我們將采用以下標(biāo)準(zhǔn)對(duì)案例進(jìn)行選取:

    ·所選項(xiàng)目應(yīng)具有兩年以上的歷史.

    ·所選項(xiàng)目主要開(kāi)發(fā)語(yǔ)言為Java.PMD是被廣泛用于檢測(cè)代碼異味的工具,本案例分析中,我們將使用PMD來(lái)檢測(cè)代碼異味.我們希望利用PMD的eclipse插件,從而所選項(xiàng)目應(yīng)為Java編寫(xiě).

    ·所選項(xiàng)目擁有至少20個(gè)SAR.SAR越多意味著擁有越多可以用于案例分析研究的數(shù)據(jù),而相對(duì)較少的SAR可能會(huì)導(dǎo)致結(jié)論的局限.

    ·所選項(xiàng)目的開(kāi)發(fā)開(kāi)發(fā)者數(shù)目需超過(guò)10個(gè).

    ·項(xiàng)目的源代碼應(yīng)該有良好的注釋(高可讀性和可分析性),以便于數(shù)據(jù)分析.

    ·項(xiàng)目完整的提交數(shù)據(jù)列表可以由TortoiseGit客戶(hù)端導(dǎo)出.

    3.3 數(shù)據(jù)收集過(guò)程

    3.3.1 需收集的數(shù)據(jù)

    為了回答第3.1節(jié)中定義的RQs,表1中列出了我們需要收集的數(shù)據(jù)項(xiàng),也列出了每個(gè)數(shù)據(jù)項(xiàng)對(duì)應(yīng)的目標(biāo)RQ(s).

    3.3.2 數(shù)據(jù)收集方法

    圖1顯示了SAR的收集過(guò)程.對(duì)于選定的項(xiàng)目我們執(zhí)行以下步驟:

    1)下載代碼存儲(chǔ)庫(kù)——從GitHub下載項(xiàng)目代碼庫(kù).

    2)導(dǎo)出提交記錄——使用TortoiseGit客戶(hù)端導(dǎo)出項(xiàng)目的提交記錄.

    3)識(shí)別候選SAR——根據(jù)SAR的定義,識(shí)別SAR的一種方法是在選定的項(xiàng)目提交信息中搜索“refactor ”的關(guān)鍵字.輸出則是一組候選SAR版本信息.

    4)手動(dòng)檢查候選SAR——檢查每個(gè)候選SAR提交信息,以排除錯(cuò)誤情況.例如:開(kāi)發(fā)人員可能會(huì)寫(xiě)“going to refactor”、“not refactor”等,在這種情況下,是沒(méi)有重構(gòu)發(fā)生的.因此,我們需要手動(dòng)檢查每個(gè)候選SAR版本,排除錯(cuò)誤識(shí)別.

    5)記錄SAR的提交——記錄SAR相關(guān)的提交信息,包含修訂號(hào)和開(kāi)發(fā)者等.

    表1 需收集的數(shù)據(jù)項(xiàng)

    3.3.3 非SAR版本收集

    為了回答RQ1.2,對(duì)于所選定的項(xiàng)目,我們還需要收集不包含SAR的普通提交版本用來(lái)做對(duì)比實(shí)驗(yàn).我們稱(chēng)之為非SAR.在選取的過(guò)程中,我們采用了隨機(jī)選擇的方式,并要求保證非SAR集合的版本數(shù)量與SAR集合的版本數(shù)量保持一致,以排除數(shù)量因素的干擾.

    圖1 SAR收集過(guò)程

    3.3.4 代碼異味收集

    我們使用靜態(tài)檢測(cè)的方法來(lái)識(shí)別代碼異味.作為廣為使用的檢測(cè)方法,靜態(tài)代碼嗅探方法通過(guò)多種方式測(cè)量并分析代碼是否違反了特定的質(zhì)量規(guī)則(例如:coupling metrics).許多工具都采用了靜態(tài)嗅探的檢測(cè)方法,例如廣泛使用的代碼異味檢測(cè)工具PMD.

    在PMD檢測(cè)工具中有33個(gè)規(guī)則集和237條檢測(cè)規(guī)則(如:圈復(fù)雜度和松耦合).在本文案例研究中,在下載了所選項(xiàng)目的代碼存儲(chǔ)庫(kù)后,將會(huì)對(duì)每個(gè)SAR對(duì)應(yīng)的代碼庫(kù)版本導(dǎo)出.隨后,我們將分析每個(gè)SAR對(duì)應(yīng)版本的源文件,以及它上一個(gè)版本的源文件,以獲得兩個(gè)代碼庫(kù)版本的源文件之間代碼異味分析報(bào)告的差異.圖2顯示了代碼異味收集的過(guò)程.對(duì)于每一個(gè)SAR版本與非SAR版本,我們都執(zhí)行以下步驟:

    圖2 Code smell的收集過(guò)程

    1)導(dǎo)出源代碼所需版本——導(dǎo)出目標(biāo)版本(V1),以及它的前一次提交版本(V2).

    2)檢測(cè)代碼異味——使用PMD插件來(lái)檢測(cè)V1和V2中的代碼異味.PMD插件生成代碼異味檢測(cè)報(bào)告.

    3)導(dǎo)出代碼異味報(bào)告——導(dǎo)出上一步生成的代碼異味檢測(cè)報(bào)告.

    4)識(shí)別代碼異味報(bào)告中的差異——比較V1和V2的代碼異味報(bào)告,確定報(bào)告之間代碼異味的差異.

    3.3.5 數(shù)據(jù)分析方法

    為了回答第3.1節(jié)提出的研究問(wèn)題,我們需要收集SAR代碼異味數(shù)據(jù).根據(jù)表1規(guī)定的收集的數(shù)據(jù)項(xiàng).我們將針對(duì)不同的RQ,采取不同的數(shù)據(jù)分析方法.本文中所有的數(shù)據(jù)搜集過(guò)程,我們都編寫(xiě)了實(shí)驗(yàn)程序*https://github.com/vicotorz/PMDlet.

    對(duì)于RQ1.1、RQ1.2和RQ3,只需使用描述性統(tǒng)計(jì).具體地,針對(duì)RQ1.1,我們將收集SAR項(xiàng)目中的代碼異味數(shù)量(NCS)和代碼異味變化量(DNCS),重點(diǎn)對(duì)代碼異味的增減情況進(jìn)行統(tǒng)計(jì),并計(jì)算代碼異味增加、不增加、減少代碼的項(xiàng)目版本比例,結(jié)合代碼異味數(shù)量,來(lái)確定SAR項(xiàng)目中代碼異味的具體情況.RQ1.2中我們將引入同等數(shù)量的非SAR版本與SAR版本進(jìn)行參照對(duì)比實(shí)驗(yàn),利用代碼異味變化量(DNCS)驗(yàn)證代碼異味在自承認(rèn)與非自承認(rèn)重構(gòu)版本中的差別.RQ1.3中,我們將對(duì)SAR版本中檢測(cè)到的代碼異味級(jí)別進(jìn)行數(shù)據(jù)統(tǒng)計(jì),并分析各種代碼異味級(jí)別的占比,用以評(píng)估SAR版本中的代碼異味級(jí)別分布,以及代碼質(zhì)量情況.

    對(duì)于RQ2,我們將對(duì)代碼異味變化量(DNCS)和修改的源代碼數(shù)量(NMF)的相關(guān)系數(shù).即利用Pearson計(jì)算了兩個(gè)變量之間的相關(guān)系數(shù)[17],用以確定兩者的關(guān)聯(lián)關(guān)系.

    為了回答RQ3,將會(huì)統(tǒng)計(jì)所有參與開(kāi)發(fā)項(xiàng)目的開(kāi)發(fā)者作者信息,以及有關(guān)SAR作者信息(包括用戶(hù)名,郵件,提交次數(shù),SAR提交次數(shù)).計(jì)算SAR開(kāi)發(fā)者所占的數(shù)量SAR作者在軟件開(kāi)發(fā)過(guò)程中自承認(rèn)重構(gòu)對(duì)應(yīng)的比例.

    對(duì)于RQ4,利用已收集的SAR信息,進(jìn)行位置標(biāo)注,用Matlab程序?qū)AR分布進(jìn)了圖形描述.以確認(rèn)和總觀SAR在項(xiàng)目周期中的分布特點(diǎn).表2概括總結(jié)了分析的方法.

    需要指出的是,在實(shí)驗(yàn)過(guò)程中,PMD默認(rèn)規(guī)則集中有許多并不適合我們案例分析的代碼異味.例如,“LocalVariableCouldBeFinal”表示將局部變量轉(zhuǎn)換為final的代碼異味的建議,這種代碼異味經(jīng)常發(fā)生且粒度太小.因此我們從PMD所能檢測(cè)的代碼異味集合中選擇一些關(guān)鍵代碼異味.在選取過(guò)程中,我們由兩組人員分析了PMD提供的代碼異味規(guī)則描述,綜合選擇了規(guī)則語(yǔ)句中包含單詞“maintainability”、“readability”和與可維護(hù)性相關(guān)的代碼異味.如表3中展示了一些被PMD檢測(cè)到的代碼異味.

    表2 數(shù)據(jù)分析方法

    為了測(cè)試SAR對(duì)代碼質(zhì)量的影響,需要與非SAR版本進(jìn)行比較.但非SAR的數(shù)量遠(yuǎn)遠(yuǎn)超過(guò)SAR的版本數(shù)量,由于數(shù)目龐大,測(cè)試所有非SAR不僅會(huì)很耗時(shí),同時(shí)也引入了數(shù)量不確定性因素,因此我們隨機(jī)選擇了與SAR版本數(shù)量相等的非SAR版本.

    表3 PMD規(guī)則

    4 研究結(jié)果

    4.1 所選項(xiàng)目

    本文中,我們選擇了一個(gè)大型的開(kāi)源軟件項(xiàng)目用作為案例分析,即Fastjson*https://github.com/alibaba/fastjson.Fastjson是一個(gè)java庫(kù),用來(lái)將java對(duì)象轉(zhuǎn)換成json格式,也可以將json字符串轉(zhuǎn)換為等效的java對(duì)象.Fastjson作為一種流行的開(kāi)源項(xiàng)目,廣泛應(yīng)用于許多軟件項(xiàng)目中.表4列出了Fastjson項(xiàng)目信息.

    表4 項(xiàng)目統(tǒng)計(jì)信息

    4.2 結(jié)果

    4.2.1 代碼質(zhì)量的影響(RQ1)

    RQ1.1:表5列出了在SAR版本中不同的代碼異味狀況.如表5所示,70.25%(85/121)的SAR版本沒(méi)有增加代碼異味.

    表5 DNCS信息

    我們?cè)诒?中列出了最容易減少的前5類(lèi)代碼異味.在所有類(lèi)型的代碼異味中,DataflowAnomalyAnalysis是最常被減少的.并且這種類(lèi)型的代碼異味,在SAR版本中出現(xiàn)最多.接下來(lái),我們對(duì)表6中所列出的5種代碼異味進(jìn)行簡(jiǎn)要介紹:

    表6 變化最大的前5名代碼異味

    ·數(shù)據(jù)流異常分析(Dataflow Anomaly Analysis):1)已定義的變量為初始化;2)變量定義后僅在某個(gè)分支中使用;3)已賦值的變量在未使用的情況下重新賦值.

    ·松耦合(Loose Coupling):使用實(shí)現(xiàn)類(lèi)型作為對(duì)象引用,限制了適用范圍以及靈活性.

    ·未使用的引入(Unused Imports):未使用的imports包.

    ·秩復(fù)雜性(Cyclomatic Complexity):圈復(fù)雜度,表現(xiàn)在獨(dú)立可行的路勁條數(shù),數(shù)值越大表示判斷邏輯復(fù)雜.

    ·具體聲明異常(Signature Declare Throws Exception):不確定方法中拋出的具體異常.

    RQ1.2:在本文的案例研究中,有121個(gè)SAR版本與121個(gè)隨機(jī)的非SAR版本.如表7所示,在非SAR版本中,代碼異味增加(DNCS>0),保持不變(DNCS=0),減少(DNCS<0)的情況分別為76、29和16.而在SAR版本中,代碼異味的數(shù)量增加(DNCS>0),保持不變(DNCS=0),減少(DNCS<0),分別為36、39和46.37.19%(45/121)的非SAR版本中沒(méi)有增加代碼的異味,而70.25%(85/121)的SAR版本中代碼異味沒(méi)有增加.這意味著,與非SAR版本相比,SAR更傾向于不增加Fastjson中的代碼異味.

    RQ1.3:PMD可以檢測(cè)237種代碼異味.其中定義了每個(gè)代碼異味的嚴(yán)重級(jí)別(使用1-5來(lái)表示),分別為:Error High、Error、Warning High、Warning和Information.表7展示了PMD標(biāo)識(shí)的代碼異味的默認(rèn)的嚴(yán)重級(jí)別的分布.#(PMD code smell type)表示PMD中定義的相應(yīng)嚴(yán)重級(jí)別的代碼異味數(shù)量.DNCS定義為SAR中代碼異味數(shù)量的增量.#(PMD code smell)表示PMD在項(xiàng)目中實(shí)際檢測(cè)到的代碼異味嚴(yán)重級(jí)別的數(shù)量.#(Detected code smell type)是實(shí)際檢測(cè)到的代碼異味類(lèi)型的數(shù)量.類(lèi)型比例表示PMD可以檢測(cè)到的代碼異味類(lèi)型占所有代碼異味類(lèi)型的比例.

    表7 代碼異味的變化量

    如表8所示,在Fastjson的所有SAR版本中,存在著131個(gè)嚴(yán)重級(jí)別為“Information”的代碼異味,引入了8個(gè)嚴(yán)重級(jí)別為“Error”的代碼異味;減少了20個(gè)嚴(yán)重級(jí)別為 “Warning”、327 個(gè)嚴(yán)重級(jí)別為“Warning High”及17個(gè)嚴(yán)重級(jí)別為“Error High”的代碼異味.

    表8 代碼異味嚴(yán)重級(jí)別分布

    4.2.2 被修改的源文件數(shù)量與引進(jìn)代碼異味數(shù)量的關(guān)系(RQ2)

    表9顯示了SAR和非SAR中被修改的源文件數(shù)量(NMF)的平均值.總體來(lái)講,平均每個(gè)SAR中被修改的源文件數(shù)量(41)比非SAR(66)要少.

    表9 NMF 分布

    我們利用Pearson相關(guān)性研究了NMF與新引入的代碼異味(DNCS>0)之間的關(guān)系.如表10所示,被修改的源文件的數(shù)量與新引入代碼異味數(shù)量的顯著性水平為α= 0.01,呈顯著相關(guān)關(guān)系.

    表10 相關(guān)性結(jié)果

    4.2.3 有關(guān)SAR開(kāi)發(fā)者(RQ3)

    并不是所有開(kāi)發(fā)者在軟件開(kāi)發(fā)過(guò)程中都具有自承認(rèn)重構(gòu)行為.在分析了Fastjson的提交信息之后,我們發(fā)現(xiàn)特定的開(kāi)發(fā)者具有SAR行為傾向.表11顯示了在項(xiàng)目中執(zhí)行SAR的開(kāi)發(fā)者信息.FSC指參與項(xiàng)目的總開(kāi)發(fā)人員數(shù)量、SAR開(kāi)發(fā)者代表自承認(rèn)重構(gòu)的提交總?cè)藬?shù).

    表11 開(kāi)發(fā)者信息

    圖3展示了每個(gè)SAR開(kāi)發(fā)者所產(chǎn)生的SAR的數(shù)量.其中有大量使用了不同網(wǎng)絡(luò)身份的開(kāi)發(fā)者.我們通過(guò)身份語(yǔ)義、郵箱等關(guān)鍵信息分析并合并了不同的網(wǎng)絡(luò)身份,最后產(chǎn)生了3個(gè)SAR開(kāi)發(fā)者的合并集合.結(jié)果顯示,提交人3在Fastjson項(xiàng)目中執(zhí)行了大部分(108/121)的自承認(rèn)重構(gòu).

    圖3 開(kāi)發(fā)者SAR數(shù)量

    此外,我們計(jì)算了SAR開(kāi)發(fā)者自承認(rèn)件重構(gòu)次數(shù)占其自身提交總次數(shù)的比例,結(jié)果如表12所示,每個(gè)SAR開(kāi)發(fā)者的僅有不超過(guò)20%的SAR行為.

    表12 SAR開(kāi)發(fā)者的SAR比例

    4.2.4 自承認(rèn)重構(gòu)分布(RQ4)

    圖4展示了SAR對(duì)應(yīng)的代碼庫(kù)版本(RSAR)的分布情況.每條線(xiàn)代表一次SAR的出現(xiàn).如圖4所示,深色粗線(xiàn)條的部分具有較高的SAR密度.

    圖4 Fastjson的SAR分布

    5 討 論

    5.1 研究結(jié)果分析

    RQ1:如表5和表7所示,并非所有的SAR都能提高代碼的質(zhì)量.在SAR版本中,傾向于不增加項(xiàng)目的代碼異味,也就意味著總體上SAR中的代碼異味會(huì)減少,代碼質(zhì)量會(huì)得到改善.這與開(kāi)發(fā)者提高代碼的可維護(hù)性的重構(gòu)意圖相吻合.事實(shí)上,29.75%的SAR(總共121個(gè)SAR中的36個(gè))引入了新的代碼異味.從SAR和非SAR兩個(gè)數(shù)據(jù)集的比較結(jié)果可以看出,有37.19%的非SAR版本和70.25%的SAR版本沒(méi)有增加代碼異味,這意味著SAR引入的代碼異味比非SAR引入的要少.DataflowAnomalyAnalysis是發(fā)生和變化最頻繁的代碼異味.在使用PMD進(jìn)行案例分析的過(guò)程中,前兩類(lèi)代碼異味數(shù)量偏大可能是由于它們對(duì)應(yīng)的PMD代碼異味檢測(cè)規(guī)則粒度太小導(dǎo)致的.

    如表8所示,實(shí)際檢測(cè)的代碼異味嚴(yán)重級(jí)別包括了PMD中定義的所有嚴(yán)重級(jí)別類(lèi)型.42.86%的代碼有“Error High”嚴(yán)重級(jí)別.在所有檢測(cè)到的代碼異味中,嚴(yán)重級(jí)別為“Error High”的代碼異味數(shù)量最大,這意味著被研究項(xiàng)目的代碼質(zhì)量一般.導(dǎo)致這種結(jié)果的原因可能是由于預(yù)定義代碼異味類(lèi)型的數(shù)量不平衡,規(guī)定的大部分代碼異味類(lèi)型嚴(yán)重級(jí)別為“Warning High”(見(jiàn)表7)所致.另外,出現(xiàn)的“Error”高嚴(yán)重級(jí)別的代碼異味是一種代碼質(zhì)量下滑的信號(hào),應(yīng)該特別注意.

    RQ2:在SAR中,被修改的源文件數(shù)量與新引入的代碼異味數(shù)量之間存在顯著正相關(guān).我們通讀了所有的SAR版本提交信息,發(fā)現(xiàn)Git的重命名、添加和刪除操作將導(dǎo)致了代碼異味的增多.因此,Git中的特定操作與代碼異味之間的關(guān)系可以進(jìn)行更深入的研究.

    RQ3:如表12所示,我們可以看到只有6.25%的開(kāi)發(fā)者在提交記錄中自承認(rèn)軟件重構(gòu).在SAR開(kāi)發(fā)者的提交記錄中,SAR的提交次數(shù)所占的比例也是較小的.

    RQ4:自承認(rèn)重構(gòu)行為大部分發(fā)生在了Fastjson的開(kāi)發(fā)初期與中期,這表示在項(xiàng)目開(kāi)發(fā)生命周期中的不成熟階段,即頻繁進(jìn)行質(zhì)量改進(jìn)活動(dòng).

    5.2 啟發(fā)性信息

    代碼異味的增多意味著項(xiàng)目質(zhì)量的下降,在對(duì)Fastjson的研究過(guò)程中,SAR通常是代碼質(zhì)量改進(jìn)的積極信號(hào).然而一些SAR版本中會(huì)存在代碼質(zhì)量下降的情況,原因可能是SAR版本中沒(méi)有發(fā)生真正的重構(gòu).

    在本文的案例研究中,被修改的源文件數(shù)量與新引入的代碼異味數(shù)量存在顯著的正相關(guān)關(guān)系,這意味著開(kāi)發(fā)人員對(duì)源文件增加,刪除,重命名,修改等操作對(duì)代碼異味的變化有著直接的影響.另外,值得指出的是,開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中需要注意代碼規(guī)范.

    SAR表明了開(kāi)發(fā)人員對(duì)代碼質(zhì)量改進(jìn)的認(rèn)識(shí),因?yàn)殚_(kāi)發(fā)人員明確地宣稱(chēng)了重構(gòu),在某種程度上表明了他們進(jìn)行代碼結(jié)構(gòu)質(zhì)量改進(jìn)的意愿.SAR的作用除了標(biāo)記重構(gòu)信息,記錄版本更新以外,在多人協(xié)同開(kāi)發(fā)過(guò)程中,也為接下來(lái)他人接替代碼項(xiàng)目起到了提示作用.

    值得一提的是,在本文的研究過(guò)程中,發(fā)現(xiàn)了很多一些殘缺,意義模糊的提交信息,因此,在協(xié)同開(kāi)發(fā)過(guò)程中,規(guī)范格式的提交信息(包括修改說(shuō)明)是有必要值得實(shí)踐的.

    5.3 有效性威脅

    本案例分析的結(jié)果有效性存在著以下兩點(diǎn)潛在威脅:首先,PMD工具中可能潛在著代碼異味檢測(cè)的不準(zhǔn)確.考慮到PMD被廣泛應(yīng)用于工業(yè),我們認(rèn)為PMD是可靠的,因此這種威脅是有限的.其次,本案例研究中只選擇了一個(gè)大型的Java開(kāi)源項(xiàng)目,因此我們不能斷言,本案例研究中關(guān)于SAR的結(jié)論適用于閉源軟件系統(tǒng)和用其它編程語(yǔ)言編寫(xiě)的軟件項(xiàng)目.

    6 總 結(jié)

    以往研究中很少有針對(duì)SAR現(xiàn)象的研究.本文中我們從多個(gè)角度探討了自承認(rèn)重構(gòu)(SAR)現(xiàn)象,經(jīng)過(guò)對(duì)Fastjson項(xiàng)目進(jìn)行案例分析,得到如下結(jié)果:1)雖然小部分的SAR引入了新的代碼異味,但總體上SAR往往是代碼質(zhì)量提高的信號(hào);2)DataflowAnomalyAnalysis是Fastjson項(xiàng)目中SAR中最常發(fā)生和減少的代碼異味類(lèi)型;3)平均來(lái)講,SAR引入的代碼異味數(shù)量比非SAR引入的代碼異味數(shù)量少;4)SAR版本中,大多數(shù)代碼異味的嚴(yán)重級(jí)別為 “Warning High”,而嚴(yán)重級(jí)別為“Error”的代碼異味只占小部分;5)在SAR中,被修改的源文件數(shù)量與新引入的代碼異味數(shù)量呈正相關(guān)關(guān)系;6)進(jìn)行過(guò)SAR的開(kāi)發(fā)者占所有開(kāi)發(fā)者的比例較??;7)在Fastjson項(xiàng)目開(kāi)發(fā)生命周期的初期和中期,SAR的發(fā)生頻率較高.

    正如我們看到的,自承認(rèn)重構(gòu)總體上提高了代碼質(zhì)量.在本文有關(guān)SAR的案例研究中,有很多可以切入并深入研究細(xì)節(jié),未來(lái)我們對(duì)SAR的研究將側(cè)重于以下幾個(gè)方面:

    ·SAR與自承認(rèn)技術(shù)債務(wù)的關(guān)系.自承認(rèn)技術(shù)債務(wù)往往是開(kāi)發(fā)者特意為之,需要有計(jì)劃地通過(guò)重構(gòu)來(lái)進(jìn)行償還.自承認(rèn)技術(shù)債務(wù)與SAR的關(guān)系,自承認(rèn)技術(shù)債務(wù)和SAR是如何來(lái)共同影響軟件代碼質(zhì)量和軟件的可維護(hù)性的,都值得下一步深入研究.

    ·更多案例的SAR分析.SAR在不同的項(xiàng)目上,表現(xiàn)可能會(huì)有所不同.我們將對(duì)不同應(yīng)用領(lǐng)域中的更多的軟件項(xiàng)目上進(jìn)行本文案例分析的重復(fù)性研究,探索是否得到關(guān)于SAR的共性結(jié)論.

    ·SAR密度.SAR的分布提供了有價(jià)值的重構(gòu)提交信息,同時(shí),SAR密度可以更好地了解代碼歷史和演化,評(píng)估代碼狀態(tài).

    ·SAR動(dòng)機(jī).不同的SAR具有不同的動(dòng)機(jī),研究背后的深層原因會(huì)讓我們對(duì)SAR有更深的認(rèn)識(shí)與理解.

    ·細(xì)化SAR的劃分.在本文中,我們利用關(guān)鍵字搜索的方式簡(jiǎn)單地對(duì)SAR進(jìn)行了挑選,然而事實(shí)上,自承認(rèn)重構(gòu)的表現(xiàn)復(fù)雜,比如關(guān)鍵字Move Method等,原則上也應(yīng)該劃分為SAR.我們可以利用數(shù)據(jù)挖掘的方式深入進(jìn)行SAR的識(shí)別工作.

    猜你喜歡
    異味開(kāi)發(fā)者代碼
    基于4G技術(shù)的VOCs及異味檢測(cè)系統(tǒng)
    創(chuàng)世代碼
    創(chuàng)世代碼
    創(chuàng)世代碼
    創(chuàng)世代碼
    用這些告別異味吧!夏天就要清清爽爽過(guò)!
    PIC-408系列采用育種技術(shù)控制公豬異味
    16%游戲開(kāi)發(fā)者看好VR
    CHIP新電腦(2016年3期)2016-03-10 13:06:42
    iOS開(kāi)發(fā)者調(diào)查
    電腦迷(2015年8期)2015-05-30 12:27:10
    iOS開(kāi)發(fā)者調(diào)查
    電腦迷(2015年4期)2015-05-30 05:24:09
    国产97色在线日韩免费| 久久99一区二区三区| 午夜激情av网站| 在线播放国产精品三级| 后天国语完整版免费观看| 国产免费现黄频在线看| 巨乳人妻的诱惑在线观看| 老司机在亚洲福利影院| 亚洲情色 制服丝袜| 69av精品久久久久久| 日韩欧美三级三区| 午夜精品国产一区二区电影| 欧美最黄视频在线播放免费 | xxxhd国产人妻xxx| 日韩有码中文字幕| 精品久久久久久久毛片微露脸| 日韩欧美国产一区二区入口| 好看av亚洲va欧美ⅴa在| 性少妇av在线| 1024视频免费在线观看| 久久精品国产亚洲av香蕉五月 | 精品一品国产午夜福利视频| 757午夜福利合集在线观看| 老司机福利观看| 久9热在线精品视频| 免费高清在线观看日韩| 亚洲片人在线观看| 中文字幕制服av| 一边摸一边做爽爽视频免费| 久久精品亚洲精品国产色婷小说| 中国美女看黄片| 亚洲久久久国产精品| a级毛片黄视频| 精品少妇久久久久久888优播| 午夜精品在线福利| 久久人妻熟女aⅴ| 涩涩av久久男人的天堂| 在线观看舔阴道视频| 午夜久久久在线观看| 一级片免费观看大全| 日韩三级视频一区二区三区| 在线永久观看黄色视频| 美女午夜性视频免费| 久久亚洲精品不卡| 日韩欧美一区视频在线观看| 99re6热这里在线精品视频| 黄色女人牲交| 日本欧美视频一区| xxx96com| 亚洲五月天丁香| 亚洲精品美女久久久久99蜜臀| 妹子高潮喷水视频| 窝窝影院91人妻| 国产精品欧美亚洲77777| 99国产精品一区二区蜜桃av | 久久这里只有精品19| 中国美女看黄片| 一个人免费在线观看的高清视频| 成年版毛片免费区| 一区二区三区国产精品乱码| √禁漫天堂资源中文www| 欧美日韩成人在线一区二区| 日韩欧美三级三区| 亚洲美女黄片视频| 少妇粗大呻吟视频| 两性午夜刺激爽爽歪歪视频在线观看 | 久久影院123| 嫁个100分男人电影在线观看| 亚洲男人天堂网一区| 91成人精品电影| 曰老女人黄片| 欧美另类亚洲清纯唯美| 99香蕉大伊视频| 精品福利永久在线观看| 国产精品九九99| 久久狼人影院| 成年版毛片免费区| 亚洲精品av麻豆狂野| 国产精品免费大片| 国产精品久久久久久人妻精品电影| 亚洲第一av免费看| 中文亚洲av片在线观看爽 | 纯流量卡能插随身wifi吗| 韩国av一区二区三区四区| 最近最新中文字幕大全电影3 | 欧美日韩黄片免| 国产精品1区2区在线观看. | 色婷婷久久久亚洲欧美| 一级毛片女人18水好多| 国产精品一区二区免费欧美| 国产精品永久免费网站| 亚洲免费av在线视频| 99热网站在线观看| 在线观看日韩欧美| 桃红色精品国产亚洲av| 免费人成视频x8x8入口观看| 免费观看人在逋| 日韩视频一区二区在线观看| 天堂√8在线中文| 亚洲成人国产一区在线观看| 成年动漫av网址| 久久中文字幕一级| 成年人黄色毛片网站| 满18在线观看网站| 久久精品人人爽人人爽视色| 嫁个100分男人电影在线观看| 亚洲,欧美精品.| 国产成人精品在线电影| 高清视频免费观看一区二区| 亚洲精品中文字幕在线视频| 亚洲五月色婷婷综合| 美女国产高潮福利片在线看| 亚洲午夜理论影院| 国产1区2区3区精品| 黄色a级毛片大全视频| 丰满人妻熟妇乱又伦精品不卡| 69av精品久久久久久| 精品福利永久在线观看| 99精国产麻豆久久婷婷| 亚洲精品久久成人aⅴ小说| 国产男靠女视频免费网站| 婷婷精品国产亚洲av在线 | 久久天堂一区二区三区四区| 国产主播在线观看一区二区| 精品一区二区三卡| 国产精品亚洲一级av第二区| 黄色成人免费大全| 色婷婷久久久亚洲欧美| 高清在线国产一区| 欧美久久黑人一区二区| 国产精品 欧美亚洲| 亚洲第一欧美日韩一区二区三区| 丝袜人妻中文字幕| 后天国语完整版免费观看| 黄色片一级片一级黄色片| 国产欧美日韩综合在线一区二区| 母亲3免费完整高清在线观看| 欧美老熟妇乱子伦牲交| 在线免费观看的www视频| 亚洲精品粉嫩美女一区| 精品福利永久在线观看| 成人手机av| 亚洲人成电影免费在线| 操出白浆在线播放| 国产极品粉嫩免费观看在线| 国产熟女午夜一区二区三区| 在线观看日韩欧美| 免费在线观看亚洲国产| 国产单亲对白刺激| 多毛熟女@视频| www.熟女人妻精品国产| 久久青草综合色| 久久国产亚洲av麻豆专区| 国产精品欧美亚洲77777| 色尼玛亚洲综合影院| 亚洲欧洲精品一区二区精品久久久| 欧美日韩一级在线毛片| tocl精华| 69精品国产乱码久久久| 久久99一区二区三区| 国产午夜精品久久久久久| 亚洲精品粉嫩美女一区| 黑丝袜美女国产一区| 捣出白浆h1v1| 五月开心婷婷网| 国产成人系列免费观看| 国产免费av片在线观看野外av| 日韩欧美一区视频在线观看| 啦啦啦免费观看视频1| 精品国产一区二区三区四区第35| 成人国产一区最新在线观看| 午夜影院日韩av| 亚洲国产精品sss在线观看 | 久久久久久久久久久久大奶| 午夜免费观看网址| 国产不卡av网站在线观看| 亚洲av美国av| 捣出白浆h1v1| videosex国产| 免费高清在线观看日韩| 免费高清在线观看日韩| 国产一区二区三区在线臀色熟女 | 日韩成人在线观看一区二区三区| 天堂俺去俺来也www色官网| 亚洲精品一卡2卡三卡4卡5卡| 香蕉久久夜色| 最近最新中文字幕大全电影3 | 12—13女人毛片做爰片一| 欧美 日韩 精品 国产| 精品久久久精品久久久| 欧美久久黑人一区二区| 精品高清国产在线一区| 一本综合久久免费| 一本综合久久免费| 一边摸一边抽搐一进一出视频| 成人18禁高潮啪啪吃奶动态图| 久久久久久亚洲精品国产蜜桃av| 国产成人一区二区三区免费视频网站| 色婷婷av一区二区三区视频| 男人操女人黄网站| 亚洲一卡2卡3卡4卡5卡精品中文| 啪啪无遮挡十八禁网站| 欧美色视频一区免费| 亚洲精品国产一区二区精华液| 国产精品电影一区二区三区 | 成年版毛片免费区| 丝袜在线中文字幕| av国产精品久久久久影院| 一边摸一边抽搐一进一小说 | 高潮久久久久久久久久久不卡| 亚洲综合色网址| av一本久久久久| 热99re8久久精品国产| 欧美日韩中文字幕国产精品一区二区三区 | 欧美激情久久久久久爽电影 | 男女午夜视频在线观看| 亚洲国产毛片av蜜桃av| 婷婷精品国产亚洲av在线 | av视频免费观看在线观看| 午夜福利一区二区在线看| 99re6热这里在线精品视频| 高清视频免费观看一区二区| 99久久人妻综合| 他把我摸到了高潮在线观看| 久久国产精品男人的天堂亚洲| 精品电影一区二区在线| 国产成人系列免费观看| 亚洲一码二码三码区别大吗| 国产男女内射视频| 一级毛片女人18水好多| 国产免费男女视频| 一二三四在线观看免费中文在| 欧美精品亚洲一区二区| 欧美人与性动交α欧美软件| 九色亚洲精品在线播放| 国产无遮挡羞羞视频在线观看| 99精品欧美一区二区三区四区| 一本一本久久a久久精品综合妖精| 捣出白浆h1v1| 久久中文字幕一级| 久久精品91无色码中文字幕| 99香蕉大伊视频| 国产亚洲欧美98| 国产精品 欧美亚洲| 国产精品电影一区二区三区 | 亚洲 国产 在线| 久久国产乱子伦精品免费另类| 12—13女人毛片做爰片一| 国产又爽黄色视频| 国产精品免费一区二区三区在线 | 十八禁网站免费在线| 日韩欧美免费精品| 久久久久久久久久久久大奶| 露出奶头的视频| 一级,二级,三级黄色视频| 欧美日韩成人在线一区二区| 99久久精品国产亚洲精品| 首页视频小说图片口味搜索| 伦理电影免费视频| 亚洲精品av麻豆狂野| 久久精品亚洲熟妇少妇任你| 国产亚洲av高清不卡| 十八禁高潮呻吟视频| 国产蜜桃级精品一区二区三区 | 日韩有码中文字幕| 欧美另类亚洲清纯唯美| 50天的宝宝边吃奶边哭怎么回事| 制服人妻中文乱码| 精品国产国语对白av| 窝窝影院91人妻| 手机成人av网站| 亚洲 国产 在线| av欧美777| 美女高潮到喷水免费观看| 亚洲黑人精品在线| 夜夜夜夜夜久久久久| 伦理电影免费视频| 高清在线国产一区| 咕卡用的链子| 精品国产亚洲在线| 男女午夜视频在线观看| 免费在线观看完整版高清| 狠狠狠狠99中文字幕| 成年人黄色毛片网站| 色综合欧美亚洲国产小说| 国产成人av激情在线播放| 99国产精品一区二区三区| 久久久精品区二区三区| 国产xxxxx性猛交| 啦啦啦 在线观看视频| 老鸭窝网址在线观看| av片东京热男人的天堂| 免费一级毛片在线播放高清视频 | 亚洲全国av大片| 国产不卡一卡二| 国产午夜精品久久久久久| 欧美精品人与动牲交sv欧美| 欧美亚洲 丝袜 人妻 在线| 这个男人来自地球电影免费观看| 男人操女人黄网站| 国产激情久久老熟女| 精品高清国产在线一区| 久久香蕉精品热| 天天躁狠狠躁夜夜躁狠狠躁| 啦啦啦 在线观看视频| 国产成人影院久久av| 国产成人免费观看mmmm| 91老司机精品| 亚洲精品一卡2卡三卡4卡5卡| 精品少妇一区二区三区视频日本电影| 亚洲专区字幕在线| 不卡av一区二区三区| 亚洲一区二区三区欧美精品| 满18在线观看网站| 中文字幕另类日韩欧美亚洲嫩草| 电影成人av| 亚洲熟女精品中文字幕| 久久久国产成人精品二区 | 国产一区在线观看成人免费| 午夜福利一区二区在线看| 日韩欧美免费精品| 麻豆av在线久日| 麻豆国产av国片精品| 最近最新中文字幕大全电影3 | 精品熟女少妇八av免费久了| aaaaa片日本免费| 欧美久久黑人一区二区| 午夜免费鲁丝| 9色porny在线观看| 国产精品亚洲av一区麻豆| 精品午夜福利视频在线观看一区| 午夜久久久在线观看| 亚洲avbb在线观看| 欧美日韩精品网址| 国产欧美日韩精品亚洲av| 免费高清在线观看日韩| 亚洲av欧美aⅴ国产| 亚洲七黄色美女视频| 久久天躁狠狠躁夜夜2o2o| 在线av久久热| 久久久久国产一级毛片高清牌| 一夜夜www| 亚洲av熟女| 动漫黄色视频在线观看| 国产精品久久久久久精品古装| 下体分泌物呈黄色| 淫妇啪啪啪对白视频| 国产精品亚洲一级av第二区| av中文乱码字幕在线| 国产精品免费一区二区三区在线 | 黄色女人牲交| 久久香蕉国产精品| 男人的好看免费观看在线视频 | 午夜福利一区二区在线看| 欧美午夜高清在线| 亚洲av欧美aⅴ国产| 天天添夜夜摸| 国产精品美女特级片免费视频播放器 | 男男h啪啪无遮挡| 高潮久久久久久久久久久不卡| 亚洲一区中文字幕在线| 精品亚洲成国产av| 国产xxxxx性猛交| 欧美av亚洲av综合av国产av| 99国产综合亚洲精品| 久久精品91无色码中文字幕| 人人妻人人澡人人看| 亚洲人成电影免费在线| 9色porny在线观看| 女人爽到高潮嗷嗷叫在线视频| 91在线观看av| 丝袜在线中文字幕| 伊人久久大香线蕉亚洲五| 国产一区二区激情短视频| 18禁美女被吸乳视频| 欧美成狂野欧美在线观看| 国产精品一区二区免费欧美| 午夜福利影视在线免费观看| 免费看a级黄色片| 欧美黄色片欧美黄色片| 亚洲色图 男人天堂 中文字幕| 69av精品久久久久久| 亚洲国产中文字幕在线视频| 12—13女人毛片做爰片一| 国产淫语在线视频| 桃红色精品国产亚洲av| 欧美大码av| 午夜影院日韩av| 99在线人妻在线中文字幕 | 女性被躁到高潮视频| 99热网站在线观看| 国产日韩一区二区三区精品不卡| 成人精品一区二区免费| 久久久精品区二区三区| 十八禁网站免费在线| 视频在线观看一区二区三区| √禁漫天堂资源中文www| 国产人伦9x9x在线观看| 国产亚洲av高清不卡| 美女午夜性视频免费| 丰满的人妻完整版| 亚洲人成电影观看| 精品欧美一区二区三区在线| xxx96com| 操美女的视频在线观看| 成人国语在线视频| av国产精品久久久久影院| av不卡在线播放| 国产精品久久久久久精品古装| 午夜影院日韩av| 69av精品久久久久久| 国产成人欧美在线观看 | 久久 成人 亚洲| 91在线观看av| 日本黄色视频三级网站网址 | 新久久久久国产一级毛片| 少妇 在线观看| 水蜜桃什么品种好| 国产免费av片在线观看野外av| 他把我摸到了高潮在线观看| 精品人妻熟女毛片av久久网站| 满18在线观看网站| 亚洲熟女精品中文字幕| 大片电影免费在线观看免费| 日日摸夜夜添夜夜添小说| 岛国在线观看网站| 91字幕亚洲| 久久香蕉国产精品| x7x7x7水蜜桃| 王馨瑶露胸无遮挡在线观看| 亚洲午夜理论影院| 美女国产高潮福利片在线看| 人妻一区二区av| 啦啦啦 在线观看视频| 精品国产超薄肉色丝袜足j| 欧美日韩中文字幕国产精品一区二区三区 | 最近最新中文字幕大全电影3 | 超碰97精品在线观看| 丁香欧美五月| 精品福利永久在线观看| 亚洲精品乱久久久久久| 成年版毛片免费区| 日本五十路高清| a级毛片在线看网站| 欧美日韩视频精品一区| 国产单亲对白刺激| 国产精品国产高清国产av | 一级a爱片免费观看的视频| 国产欧美日韩精品亚洲av| 亚洲精品自拍成人| 国产成人免费无遮挡视频| 国产高清videossex| 黑人巨大精品欧美一区二区mp4| 丁香欧美五月| 久久天堂一区二区三区四区| 可以免费在线观看a视频的电影网站| 精品久久久久久电影网| 亚洲av成人一区二区三| 超碰97精品在线观看| 人成视频在线观看免费观看| 夜夜夜夜夜久久久久| 精品国产超薄肉色丝袜足j| 精品国产一区二区三区四区第35| 国产免费现黄频在线看| 大码成人一级视频| 九色亚洲精品在线播放| 亚洲精品一二三| 男女免费视频国产| 可以免费在线观看a视频的电影网站| 一本大道久久a久久精品| www.自偷自拍.com| а√天堂www在线а√下载 | 亚洲国产看品久久| 亚洲人成电影观看| 正在播放国产对白刺激| 成人特级黄色片久久久久久久| 一进一出好大好爽视频| 久久性视频一级片| 亚洲精品一卡2卡三卡4卡5卡| 国产在线一区二区三区精| 欧美老熟妇乱子伦牲交| 91成年电影在线观看| 欧美另类亚洲清纯唯美| 国产野战对白在线观看| 又大又爽又粗| 国产精品久久久久成人av| 色老头精品视频在线观看| 国产在线观看jvid| 操出白浆在线播放| 色尼玛亚洲综合影院| 欧美+亚洲+日韩+国产| 国产精品久久久久久人妻精品电影| 熟女少妇亚洲综合色aaa.| 亚洲国产欧美日韩在线播放| 最近最新免费中文字幕在线| 久久久国产一区二区| 色老头精品视频在线观看| 两个人免费观看高清视频| 大码成人一级视频| 国产99久久九九免费精品| 日韩欧美一区二区三区在线观看 | 女性被躁到高潮视频| 巨乳人妻的诱惑在线观看| 热99re8久久精品国产| 婷婷成人精品国产| 久久香蕉国产精品| 50天的宝宝边吃奶边哭怎么回事| 黄色 视频免费看| 久久久久国内视频| 中文字幕精品免费在线观看视频| www.自偷自拍.com| 日韩大码丰满熟妇| 看片在线看免费视频| 人人妻,人人澡人人爽秒播| 久久性视频一级片| 国产区一区二久久| 悠悠久久av| 国产主播在线观看一区二区| 狠狠婷婷综合久久久久久88av| 国产97色在线日韩免费| 亚洲av成人一区二区三| 国产一卡二卡三卡精品| 18禁裸乳无遮挡动漫免费视频| 久久影院123| 国产精品免费视频内射| 国产主播在线观看一区二区| 日韩一卡2卡3卡4卡2021年| 精品福利观看| 91成人精品电影| 91成年电影在线观看| www.熟女人妻精品国产| 天堂俺去俺来也www色官网| 国产精品二区激情视频| 制服诱惑二区| 一级黄色大片毛片| 亚洲av成人av| 黄片播放在线免费| 精品一区二区三卡| 国产一区二区激情短视频| 欧美日韩亚洲国产一区二区在线观看 | 久久亚洲精品不卡| 热99re8久久精品国产| 妹子高潮喷水视频| 精品国产一区二区三区四区第35| 日本a在线网址| 正在播放国产对白刺激| 国产在视频线精品| 亚洲中文av在线| 男人操女人黄网站| 搡老熟女国产l中国老女人| 亚洲精品美女久久av网站| 国产精品秋霞免费鲁丝片| 国产激情欧美一区二区| 亚洲成人免费av在线播放| 亚洲色图 男人天堂 中文字幕| 久久精品亚洲av国产电影网| 亚洲 欧美一区二区三区| 人人妻人人爽人人添夜夜欢视频| 欧美人与性动交α欧美精品济南到| 美国免费a级毛片| 久久精品国产亚洲av香蕉五月 | 日韩欧美在线二视频 | 身体一侧抽搐| 日韩人妻精品一区2区三区| 亚洲情色 制服丝袜| 久久久国产欧美日韩av| 亚洲aⅴ乱码一区二区在线播放 | 国产精品久久久久久人妻精品电影| av国产精品久久久久影院| 午夜视频精品福利| 视频区欧美日本亚洲| av天堂久久9| 国产野战对白在线观看| 日韩大码丰满熟妇| 亚洲专区国产一区二区| av有码第一页| 国产日韩一区二区三区精品不卡| 日本欧美视频一区| 色精品久久人妻99蜜桃| 国产精品1区2区在线观看. | av有码第一页| 亚洲一区高清亚洲精品| 成人18禁高潮啪啪吃奶动态图| 亚洲三区欧美一区| 国产黄色免费在线视频| 水蜜桃什么品种好| 日韩欧美一区视频在线观看| 视频区图区小说| 两性午夜刺激爽爽歪歪视频在线观看 | 亚洲欧美日韩高清在线视频| 高清视频免费观看一区二区| 日本一区二区免费在线视频| 黑人巨大精品欧美一区二区蜜桃| 亚洲人成电影观看| 超碰成人久久| 男女免费视频国产| 精品一区二区三区av网在线观看| 新久久久久国产一级毛片| 精品福利永久在线观看| 免费日韩欧美在线观看| 丝袜美腿诱惑在线| 老司机深夜福利视频在线观看| 欧美激情极品国产一区二区三区| 国精品久久久久久国模美| 国产欧美亚洲国产| 成年女人毛片免费观看观看9 | 中文字幕av电影在线播放| 99国产精品免费福利视频| 国产高清国产精品国产三级| 国产亚洲精品第一综合不卡| 又大又爽又粗| a级毛片黄视频| 成年人免费黄色播放视频| 丰满迷人的少妇在线观看| 一边摸一边抽搐一进一出视频|