• <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
    精品久久久久久久人妻蜜臀av| 成人三级黄色视频| 真人做人爱边吃奶动态| 免费在线观看成人毛片| 青草久久国产| 国产精品 国内视频| 国产黄色小视频在线观看| 啦啦啦 在线观看视频| 国产一卡二卡三卡精品| 波多野结衣高清无吗| 午夜激情av网站| 中文资源天堂在线| 波多野结衣巨乳人妻| 男男h啪啪无遮挡| 成人精品一区二区免费| 男女那种视频在线观看| 中文在线观看免费www的网站 | 欧美激情 高清一区二区三区| www.自偷自拍.com| ponron亚洲| 欧美一区二区精品小视频在线| 色哟哟哟哟哟哟| 欧美日韩精品网址| 成年版毛片免费区| 女性被躁到高潮视频| 成人永久免费在线观看视频| 一级毛片高清免费大全| 脱女人内裤的视频| 精品国内亚洲2022精品成人| 亚洲第一电影网av| www.熟女人妻精品国产| 熟女少妇亚洲综合色aaa.| 国产成人欧美在线观看| 国产成人一区二区三区免费视频网站| 制服诱惑二区| 日韩高清综合在线| 夜夜爽天天搞| 视频在线观看一区二区三区| 禁无遮挡网站| 国产亚洲av嫩草精品影院| 久久九九热精品免费| 久久性视频一级片| 国产精华一区二区三区| 久久午夜亚洲精品久久| 好男人在线观看高清免费视频 | 久热爱精品视频在线9| 成人av一区二区三区在线看| 国内少妇人妻偷人精品xxx网站 | aaaaa片日本免费| 国内精品久久久久久久电影| 国产单亲对白刺激| 成熟少妇高潮喷水视频| 日本三级黄在线观看| 国内久久婷婷六月综合欲色啪| 亚洲天堂国产精品一区在线| 国产aⅴ精品一区二区三区波| 亚洲天堂国产精品一区在线| 国产精品电影一区二区三区| 欧美一级a爱片免费观看看 | 亚洲午夜理论影院| 国产伦一二天堂av在线观看| www日本在线高清视频| 一级a爱视频在线免费观看| 欧美三级亚洲精品| 每晚都被弄得嗷嗷叫到高潮| 2021天堂中文幕一二区在线观 | 久9热在线精品视频| 午夜老司机福利片| 在线观看免费午夜福利视频| 国产麻豆成人av免费视频| 精品欧美国产一区二区三| 99久久国产精品久久久| 精品久久蜜臀av无| 美女扒开内裤让男人捅视频| 国产精品永久免费网站| 久久热在线av| 最新美女视频免费是黄的| 久久久久久久久免费视频了| 淫妇啪啪啪对白视频| 国产1区2区3区精品| 日韩精品中文字幕看吧| 变态另类成人亚洲欧美熟女| 亚洲五月色婷婷综合| 在线观看免费视频日本深夜| 一二三四在线观看免费中文在| 免费观看精品视频网站| 亚洲人成网站高清观看| 男男h啪啪无遮挡| 亚洲自偷自拍图片 自拍| 亚洲色图av天堂| 精品一区二区三区视频在线观看免费| 老汉色∧v一级毛片| 日本免费一区二区三区高清不卡| 免费看a级黄色片| 亚洲真实伦在线观看| 国产又爽黄色视频| 在线永久观看黄色视频| 一二三四社区在线视频社区8| 久久香蕉国产精品| 日本免费a在线| 一边摸一边抽搐一进一小说| 精品欧美国产一区二区三| aaaaa片日本免费| 午夜成年电影在线免费观看| 国产精品电影一区二区三区| 天天一区二区日本电影三级| 侵犯人妻中文字幕一二三四区| 亚洲成人免费电影在线观看| ponron亚洲| 在线永久观看黄色视频| 天堂动漫精品| 国产亚洲精品久久久久5区| 午夜福利视频1000在线观看| av片东京热男人的天堂| 亚洲五月天丁香| 免费看十八禁软件| 国产精品自产拍在线观看55亚洲| 嫩草影院精品99| 精品久久久久久久末码| 欧美色视频一区免费| 国产极品粉嫩免费观看在线| 国产97色在线日韩免费| 日韩欧美在线二视频| 国产激情欧美一区二区| 久久 成人 亚洲| 亚洲午夜精品一区,二区,三区| 亚洲电影在线观看av| 亚洲精品一区av在线观看| 日韩 欧美 亚洲 中文字幕| 国产欧美日韩一区二区三| 亚洲中文av在线| 性色av乱码一区二区三区2| 欧美黑人巨大hd| 一进一出抽搐动态| 久久精品国产99精品国产亚洲性色| 欧美日韩亚洲国产一区二区在线观看| 两个人看的免费小视频| 亚洲午夜理论影院| 欧美精品啪啪一区二区三区| 中文亚洲av片在线观看爽| 亚洲全国av大片| 人人妻人人澡欧美一区二区| 午夜福利一区二区在线看| 亚洲熟妇中文字幕五十中出| 精品国产乱码久久久久久男人| 十八禁人妻一区二区| 精品一区二区三区四区五区乱码| 日本三级黄在线观看| 精品高清国产在线一区| 一级a爱视频在线免费观看| 午夜福利在线在线| 日韩欧美三级三区| 免费女性裸体啪啪无遮挡网站| 高清毛片免费观看视频网站| 欧美色视频一区免费| 亚洲成国产人片在线观看| 亚洲在线自拍视频| 波多野结衣巨乳人妻| 白带黄色成豆腐渣| 国产精品综合久久久久久久免费| 国产成人系列免费观看| 日韩三级视频一区二区三区| 欧美zozozo另类| 国产熟女午夜一区二区三区| 十分钟在线观看高清视频www| 最新美女视频免费是黄的| 欧美乱色亚洲激情| 午夜福利高清视频| 国产欧美日韩一区二区三| 一个人免费在线观看的高清视频| 在线观看午夜福利视频| 性欧美人与动物交配| 久久午夜综合久久蜜桃| 两性午夜刺激爽爽歪歪视频在线观看 | 精华霜和精华液先用哪个| 88av欧美| 国产成人精品久久二区二区91| 最近在线观看免费完整版| 99久久精品国产亚洲精品| 九色国产91popny在线| 亚洲av五月六月丁香网| 日本免费一区二区三区高清不卡| 婷婷六月久久综合丁香| 91成年电影在线观看| 亚洲国产欧美一区二区综合| bbb黄色大片| 国产av一区在线观看免费| 亚洲国产日韩欧美精品在线观看 | 91字幕亚洲| 男女午夜视频在线观看| 亚洲精品色激情综合| 91av网站免费观看| 成年人黄色毛片网站| 久久中文看片网| 久久久久久国产a免费观看| 亚洲国产精品成人综合色| 非洲黑人性xxxx精品又粗又长| 久久伊人香网站| 女人爽到高潮嗷嗷叫在线视频| 亚洲国产高清在线一区二区三 | 久久精品影院6| 18禁裸乳无遮挡免费网站照片 | 久久久久久久久中文| 亚洲精品中文字幕在线视频| 久久亚洲精品不卡| 精品免费久久久久久久清纯| 久久九九热精品免费| www.熟女人妻精品国产| 国产免费男女视频| 亚洲专区中文字幕在线| 岛国视频午夜一区免费看| av视频在线观看入口| 日本撒尿小便嘘嘘汇集6| 成人欧美大片| 少妇 在线观看| 国产又色又爽无遮挡免费看| 亚洲av第一区精品v没综合| 首页视频小说图片口味搜索| 免费观看精品视频网站| 久久香蕉精品热| 久久亚洲精品不卡| 精品免费久久久久久久清纯| 性欧美人与动物交配| 亚洲专区字幕在线| 午夜福利在线在线| 99在线人妻在线中文字幕| 高清毛片免费观看视频网站| 国产成人啪精品午夜网站| 亚洲专区字幕在线| 欧美又色又爽又黄视频| 88av欧美| 这个男人来自地球电影免费观看| 色av中文字幕| 超碰成人久久| 国产亚洲精品第一综合不卡| 成人亚洲精品一区在线观看| 1024视频免费在线观看| 成年女人毛片免费观看观看9| 国产亚洲精品综合一区在线观看 | 变态另类成人亚洲欧美熟女| 精华霜和精华液先用哪个| 国内毛片毛片毛片毛片毛片| 日韩有码中文字幕| 国产成人av激情在线播放| 一级a爱视频在线免费观看| 国产不卡一卡二| 日韩欧美免费精品| 人人妻人人澡人人看| 国产精品一区二区免费欧美| 欧美不卡视频在线免费观看 | 天天躁狠狠躁夜夜躁狠狠躁| 国产黄a三级三级三级人| 久久性视频一级片| 国产片内射在线| 亚洲国产精品合色在线| 午夜福利在线在线| videosex国产| 真人一进一出gif抽搐免费| 国产久久久一区二区三区| 亚洲av五月六月丁香网| 一a级毛片在线观看| 极品教师在线免费播放| 免费在线观看黄色视频的| 日日夜夜操网爽| 欧美日韩黄片免| 国产欧美日韩一区二区三| 亚洲精华国产精华精| 午夜福利成人在线免费观看| 一本大道久久a久久精品| 人人妻人人澡欧美一区二区| 国产黄a三级三级三级人| 久9热在线精品视频| 午夜免费鲁丝| 欧美成人午夜精品| 亚洲国产看品久久| 18禁美女被吸乳视频| 在线av久久热| 无限看片的www在线观看| 日韩成人在线观看一区二区三区| 久久久精品欧美日韩精品| 久久这里只有精品19| 在线国产一区二区在线| 老熟妇仑乱视频hdxx| 99热只有精品国产| 1024视频免费在线观看| 中文在线观看免费www的网站 | 亚洲中文字幕日韩| 1024香蕉在线观看| 欧美黑人巨大hd| 国产精品永久免费网站| 黄色成人免费大全| 99re在线观看精品视频| 亚洲av熟女| 成人亚洲精品av一区二区| 精品福利观看| 国产蜜桃级精品一区二区三区| 精品久久久久久久末码| 成人18禁在线播放| 精品少妇一区二区三区视频日本电影| 免费电影在线观看免费观看| 一本久久中文字幕| 日韩大尺度精品在线看网址| 久久精品91蜜桃| 99精品欧美一区二区三区四区| 午夜福利视频1000在线观看| 最新美女视频免费是黄的| 日韩中文字幕欧美一区二区| 亚洲精品色激情综合| 三级毛片av免费| 女性被躁到高潮视频| 色在线成人网| 免费观看人在逋| 亚洲第一欧美日韩一区二区三区| 不卡av一区二区三区| 午夜福利在线在线| 精品免费久久久久久久清纯| 国产亚洲欧美98| www日本在线高清视频| 国产免费av片在线观看野外av| 黄片大片在线免费观看| 啦啦啦观看免费观看视频高清| 老熟妇仑乱视频hdxx| 日韩视频一区二区在线观看| 夜夜夜夜夜久久久久| 岛国在线观看网站| 黄片小视频在线播放| 国产麻豆成人av免费视频| 一本综合久久免费| 中文字幕人成人乱码亚洲影| 欧美黑人巨大hd| 中文在线观看免费www的网站 | 欧美性长视频在线观看| 午夜视频精品福利| 精品久久久久久久毛片微露脸| 两人在一起打扑克的视频| 国产亚洲精品综合一区在线观看 | 久久国产乱子伦精品免费另类| 欧美日韩亚洲综合一区二区三区_| 午夜福利成人在线免费观看| 女同久久另类99精品国产91| 国产精品二区激情视频| 午夜精品久久久久久毛片777| 在线国产一区二区在线| 精品久久久久久,| 亚洲七黄色美女视频| svipshipincom国产片| 精品国产超薄肉色丝袜足j| 90打野战视频偷拍视频| 久久草成人影院| 黄色成人免费大全| 哪里可以看免费的av片| 中文字幕精品亚洲无线码一区 | 亚洲国产精品sss在线观看| 免费看十八禁软件| 国产aⅴ精品一区二区三区波| 免费在线观看影片大全网站| 亚洲人成77777在线视频| 国产亚洲欧美精品永久| 一二三四在线观看免费中文在| 99精品欧美一区二区三区四区| 国内精品久久久久久久电影| 欧美不卡视频在线免费观看 | 亚洲熟妇熟女久久| 久久久精品国产亚洲av高清涩受| 久久精品亚洲精品国产色婷小说| 国产高清激情床上av| 亚洲一卡2卡3卡4卡5卡精品中文| 91在线观看av| 色在线成人网| 免费看十八禁软件| 怎么达到女性高潮| 国产亚洲精品第一综合不卡| 久久久久国内视频| 国产熟女xx| 欧美黄色片欧美黄色片| av片东京热男人的天堂| 白带黄色成豆腐渣| www.999成人在线观看| 久久久久久亚洲精品国产蜜桃av| 久久国产精品影院| 亚洲精品粉嫩美女一区| 久久久久国产一级毛片高清牌| 国产午夜福利久久久久久| 国产黄a三级三级三级人| 91麻豆av在线| 身体一侧抽搐| 中文字幕另类日韩欧美亚洲嫩草| 高清在线国产一区| 成人国产综合亚洲| 久久香蕉精品热| 99国产精品99久久久久| 三级毛片av免费| 亚洲男人天堂网一区| 欧美国产精品va在线观看不卡| 成人18禁在线播放| 久久久久久免费高清国产稀缺| 国产精品久久久人人做人人爽| 久久性视频一级片| 一本综合久久免费| 精品乱码久久久久久99久播| 黄色片一级片一级黄色片| 免费无遮挡裸体视频| 国产精品免费一区二区三区在线| 很黄的视频免费| 国产亚洲精品一区二区www| av天堂在线播放| 亚洲精品久久国产高清桃花| 9191精品国产免费久久| 午夜a级毛片| 国产麻豆成人av免费视频| 精品国产国语对白av| 久久精品国产清高在天天线| 精品熟女少妇八av免费久了| 老司机福利观看| 亚洲五月色婷婷综合| 他把我摸到了高潮在线观看| 18禁美女被吸乳视频| 制服人妻中文乱码| 亚洲国产精品sss在线观看| 十八禁人妻一区二区| 欧美乱码精品一区二区三区| 在线永久观看黄色视频| 热99re8久久精品国产| 亚洲一区中文字幕在线| 老汉色av国产亚洲站长工具| 婷婷丁香在线五月| 国产午夜福利久久久久久| 国产亚洲精品久久久久5区| 人人澡人人妻人| 男女午夜视频在线观看| 人成视频在线观看免费观看| 国内精品久久久久精免费| 久久久国产欧美日韩av| 满18在线观看网站| 亚洲在线自拍视频| 99re在线观看精品视频| 可以在线观看的亚洲视频| 一级黄色大片毛片| 国产精品av久久久久免费| 中文字幕久久专区| 日本 av在线| 国产成人一区二区三区免费视频网站| 亚洲专区国产一区二区| 欧美激情极品国产一区二区三区| 国产精品 欧美亚洲| 久久久久亚洲av毛片大全| 国产成人影院久久av| 波多野结衣高清作品| 日韩精品免费视频一区二区三区| a在线观看视频网站| 国产熟女xx| 亚洲av美国av| 色综合欧美亚洲国产小说| 午夜福利高清视频| 中亚洲国语对白在线视频| 9191精品国产免费久久| 中文字幕人妻丝袜一区二区| 日本撒尿小便嘘嘘汇集6| 亚洲精品国产区一区二| 免费人成视频x8x8入口观看| 一级毛片精品| 香蕉av资源在线| 特大巨黑吊av在线直播 | 久久精品国产亚洲av高清一级| 精品国内亚洲2022精品成人| 亚洲精品久久成人aⅴ小说| 久久这里只有精品19| 国产精品98久久久久久宅男小说| 成在线人永久免费视频| 亚洲精品av麻豆狂野| 亚洲国产欧洲综合997久久, | 男女午夜视频在线观看| 欧美人与性动交α欧美精品济南到| 国产精品1区2区在线观看.| av在线天堂中文字幕| 国产精品电影一区二区三区| 精品国产美女av久久久久小说| 精品欧美一区二区三区在线| 成人国产一区最新在线观看| 十八禁人妻一区二区| 欧美绝顶高潮抽搐喷水| 欧美性猛交黑人性爽| 国产在线精品亚洲第一网站| 少妇被粗大的猛进出69影院| 成熟少妇高潮喷水视频| 村上凉子中文字幕在线| 很黄的视频免费| 国产高清视频在线播放一区| 给我免费播放毛片高清在线观看| 在线十欧美十亚洲十日本专区| 欧美性猛交╳xxx乱大交人| 99精品在免费线老司机午夜| 1024香蕉在线观看| 美女扒开内裤让男人捅视频| 波多野结衣av一区二区av| 日本一区二区免费在线视频| 999精品在线视频| 91国产中文字幕| 一级黄色大片毛片| 国产精品久久久久久人妻精品电影| 国产亚洲精品综合一区在线观看 | 久久久久久久午夜电影| 啦啦啦韩国在线观看视频| 美女高潮喷水抽搐中文字幕| 国内久久婷婷六月综合欲色啪| 亚洲成人精品中文字幕电影| 免费在线观看黄色视频的| 国产一区二区三区视频了| 十八禁人妻一区二区| 一级黄色大片毛片| 母亲3免费完整高清在线观看| 国产精品乱码一区二三区的特点| 国产精品自产拍在线观看55亚洲| 看片在线看免费视频| 久久久水蜜桃国产精品网| 一本精品99久久精品77| 草草在线视频免费看| 国产单亲对白刺激| 男女午夜视频在线观看| 国产麻豆成人av免费视频| 亚洲中文字幕一区二区三区有码在线看 | 亚洲欧美激情综合另类| 亚洲 国产 在线| 欧美日韩福利视频一区二区| 国产高清视频在线播放一区| 久99久视频精品免费| 不卡一级毛片| 最近在线观看免费完整版| 亚洲一区二区三区色噜噜| 久久九九热精品免费| 不卡一级毛片| tocl精华| 国产一区二区三区视频了| 桃红色精品国产亚洲av| 国产亚洲av高清不卡| 久久精品成人免费网站| 精品福利观看| 男女视频在线观看网站免费 | 成人国产综合亚洲| 国产成人精品无人区| 老熟妇乱子伦视频在线观看| 99国产精品一区二区蜜桃av| 久久久久国产精品人妻aⅴ院| 免费女性裸体啪啪无遮挡网站| 一本大道久久a久久精品| 久久中文字幕人妻熟女| 黑人操中国人逼视频| 国产精品爽爽va在线观看网站 | 亚洲全国av大片| 三级毛片av免费| 神马国产精品三级电影在线观看 | 国产区一区二久久| 日韩精品青青久久久久久| 一级作爱视频免费观看| 每晚都被弄得嗷嗷叫到高潮| 亚洲色图 男人天堂 中文字幕| 亚洲精品中文字幕在线视频| 欧美乱妇无乱码| 12—13女人毛片做爰片一| 久99久视频精品免费| 大型黄色视频在线免费观看| 国内精品久久久久久久电影| 2021天堂中文幕一二区在线观 | 12—13女人毛片做爰片一| 欧美日韩一级在线毛片| 伊人久久大香线蕉亚洲五| 午夜激情福利司机影院| 大型黄色视频在线免费观看| 黄色片一级片一级黄色片| 欧美一区二区精品小视频在线| 国产国语露脸激情在线看| 欧美又色又爽又黄视频| 99热6这里只有精品| 欧美又色又爽又黄视频| 久久久久久亚洲精品国产蜜桃av| 村上凉子中文字幕在线| 精品欧美一区二区三区在线| 在线观看一区二区三区| 亚洲第一电影网av| 欧美激情 高清一区二区三区| 黑人欧美特级aaaaaa片| 免费高清视频大片| 国产1区2区3区精品| 国产亚洲欧美在线一区二区| 黄色毛片三级朝国网站| 女性生殖器流出的白浆| 在线观看舔阴道视频| 亚洲一码二码三码区别大吗| av免费在线观看网站| a在线观看视频网站| 一级黄色大片毛片| 高清毛片免费观看视频网站| 日本黄色视频三级网站网址| 精品欧美国产一区二区三| 一进一出抽搐gif免费好疼| 国产成人av教育| 午夜福利18| 亚洲avbb在线观看| 国产精品免费一区二区三区在线| 国内精品久久久久精免费| 久久中文看片网| 国产在线精品亚洲第一网站| 国产一区二区激情短视频| 中文字幕高清在线视频| 日本免费a在线| 国产精品一区二区精品视频观看| 十八禁人妻一区二区| 国产一区二区三区视频了| 人人妻人人澡人人看| 成人亚洲精品av一区二区| 国内揄拍国产精品人妻在线 | 亚洲色图av天堂| 1024视频免费在线观看| 国产成人欧美| 非洲黑人性xxxx精品又粗又长|