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

    面向C程序的環(huán)形復(fù)雜度自動(dòng)化計(jì)算方法

    2019-01-02 03:44:52秦振華牟永敏
    計(jì)算機(jī)工程 2018年12期
    關(guān)鍵詞:運(yùn)算符控制流度量

    秦振華,牟永敏

    (北京信息科技大學(xué) 計(jì)算機(jī)學(xué)院,北京 100101)

    0 概述

    軟件復(fù)雜性主要表現(xiàn)在程序的復(fù)雜性,即模塊內(nèi)程序的復(fù)雜性[1]。常見的定量度量軟件復(fù)雜性的方法有代碼行度量法、McCabe度量法和Halstead度量法。

    McCabe度量法根據(jù)程序控制流的復(fù)雜程度定量度量程序復(fù)雜程度,這樣度量出的結(jié)果稱為程序的環(huán)形復(fù)雜度。在軟件測(cè)試中,環(huán)形復(fù)雜度用于衡量一個(gè)模塊判定結(jié)構(gòu)的復(fù)雜程度,數(shù)量上表現(xiàn)為獨(dú)立路徑條數(shù),即合理的預(yù)防錯(cuò)誤所需測(cè)試的最少路徑條數(shù),這是為確保所有語句至少執(zhí)行一次而必須進(jìn)行測(cè)試的數(shù)量的上界,也可以理解為覆蓋所有的可能情況最少使用的測(cè)試用例數(shù)[2-4]。在通常情況下,程序環(huán)形復(fù)雜度值越大,說明程序判斷邏輯越復(fù)雜,越容易出錯(cuò),且軟件難以測(cè)試與維護(hù)。大量研究和經(jīng)驗(yàn)表明,環(huán)形復(fù)雜度與軟件模塊中的錯(cuò)誤緊密相關(guān),假如一個(gè)模塊比較復(fù)雜,那么它就容易出錯(cuò),當(dāng)超過了度量的閾值(通常是10),模塊中的錯(cuò)誤數(shù)量也會(huì)隨之急劇增長[5-8]。

    目前,計(jì)算程序環(huán)形復(fù)雜度的方法有2種:一種是根據(jù)控制流圖人工計(jì)算出環(huán)形復(fù)雜度,當(dāng)程序比較復(fù)雜時(shí)容易產(chǎn)生錯(cuò)誤;另一種是采用工具自動(dòng)計(jì)算,如SourceMonitor,計(jì)算速度快,但在某些復(fù)雜條件下得出的環(huán)形復(fù)雜度不夠準(zhǔn)確。

    針對(duì)上述問題,本文通過對(duì)源程序進(jìn)行預(yù)處理,提取程序中含有控制流信息的關(guān)鍵語句,實(shí)現(xiàn)程序環(huán)形復(fù)雜度的自動(dòng)化計(jì)算。

    1 相關(guān)技術(shù)

    1.1 控制流圖

    控制流圖(Control Flow Graph,CFG)是一個(gè)有向圖G=(V,E),其中,V是控制流節(jié)點(diǎn)的集合,E是有向邊的集合。一個(gè)控制流圖有一個(gè)唯一的入口節(jié)點(diǎn)(其入度為0)和一個(gè)唯一的出口節(jié)點(diǎn)(其出度為0)??刂屏鲌D中的節(jié)點(diǎn)V代表程序的語句或表達(dá)式,有向邊E表示語句間的執(zhí)行關(guān)系。令(x,y)∈E,表示控制流圖中的邊x→y,稱x是y的前驅(qū),y是x的后繼。

    控制流圖中的節(jié)點(diǎn)可分為2種類型:一種是塊結(jié)構(gòu),即把程序劃分為塊,塊中的語句是連續(xù)的,且只包含簡單語句,不包含分支和循環(huán)等引起程序執(zhí)行順序改變的語句;另一種是程序的每一條語句都單獨(dú)地看成一個(gè)控制流節(jié)點(diǎn)[9-13]。本文繪制的控制流圖節(jié)點(diǎn)采用第一種類型,并且以程序的行號(hào)來表示程序的控制流節(jié)點(diǎn)。

    1.2 McCabe度量法

    計(jì)算程序的環(huán)形復(fù)雜度有3種方法,以圖1所示控制流圖為例。

    圖1 控制流圖

    3種方法的具體描述如下:

    1)給定控制流圖G的環(huán)形復(fù)雜度CC(G),控制流圖中區(qū)域的數(shù)量F(僅考慮區(qū)域個(gè)數(shù),不考慮邊的方向)。圖中區(qū)域數(shù)量為4(R1、R2、R3、R4),則CC(G)=F=4。

    2)給定控制流圖G的環(huán)形復(fù)雜度CC(G),定義為CC(G)=E-N+2,E是控制流圖中邊的數(shù)量,N是控制流圖中節(jié)點(diǎn)的數(shù)量。圖中邊的數(shù)量為E=10,節(jié)點(diǎn)的數(shù)量為N=8,則CC(G)=10-8+2=4。

    3)給定控制流圖G的環(huán)形復(fù)雜度CC(G),定義為CC(G)=P+1,P是控制流圖中判定節(jié)點(diǎn)的數(shù)量,判定節(jié)點(diǎn)是只包含一個(gè)條件的節(jié)點(diǎn),從每一個(gè)判定節(jié)點(diǎn)發(fā)出2條或多條邊。圖中判定節(jié)點(diǎn)的數(shù)量為P=3,3個(gè)判定節(jié)點(diǎn)為4、6、8,則CC(G)=3+1=4。

    1.3 問題分解

    本文針對(duì)C語言程序研究環(huán)形復(fù)雜度的自動(dòng)化計(jì)算,首先分析其結(jié)構(gòu)特點(diǎn)。C語言程序中的語句分為控制語句、函數(shù)調(diào)用語句、表達(dá)式語句、空語句和復(fù)合語句共5種,其中,控制語句分為9種,分別是if-else條件語句、for循環(huán)語句、while循環(huán)語句、do-while循環(huán)語句、continue語句、break語句、switch多分支選擇語句、return語句和goto語句[14-15]。在這里,將if-else語句、if-else if語句、switch-case語句和包含三目運(yùn)算符的語句稱為分支語句,for語句、while語句和do-while語句稱為循環(huán)語句,分支語句和循環(huán)語句將對(duì)應(yīng)于控制流圖中的判定節(jié)點(diǎn)。因此,可以借助程序中的分支和循環(huán)語句來實(shí)現(xiàn)環(huán)形復(fù)雜度的計(jì)算。當(dāng)程序中分支語句或者循環(huán)語句的判別條件為復(fù)合條件時(shí),將復(fù)合條件分解成單個(gè)條件后,再進(jìn)行環(huán)形復(fù)雜度的計(jì)算。下面將分情況討論C語言程序中分支語句和循環(huán)語句對(duì)程序環(huán)形復(fù)雜度的影響。

    1)if-else語句

    當(dāng)if語句中只有1個(gè)判別條件時(shí),當(dāng)前語句對(duì)應(yīng)的判定節(jié)點(diǎn)的數(shù)量等于1;當(dāng)if語句中有多個(gè)判別條件時(shí),當(dāng)前語句對(duì)應(yīng)的判定節(jié)點(diǎn)的數(shù)量等于if語句中判別條件的個(gè)數(shù)。

    2)if-else if語句

    對(duì)于if-else if語句,除了考慮if語句的情況外,還需要考慮else if語句的情況,處理方法和if-else語句的處理方法相同,當(dāng)前語句對(duì)應(yīng)的判定節(jié)點(diǎn)的數(shù)量等于判別條件的個(gè)數(shù)。

    3)包含三目運(yùn)算符的語句

    由于包含三目運(yùn)算符的語句,也是一種特殊的條件語句,因此其處理方法和if-else語句的處理方法一樣,其對(duì)應(yīng)的判定節(jié)點(diǎn)的數(shù)量等于語句中判別條件的個(gè)數(shù)。

    4)switch-case語句

    對(duì)于switch-case而言,有沒有default語句對(duì)于程序環(huán)形復(fù)雜度的計(jì)算沒有影響,在一般情況下,判定節(jié)點(diǎn)的數(shù)量等于case的個(gè)數(shù)。由于switch-case不用像if-else if那樣遍歷條件分支直到命中條件,而只需訪問對(duì)應(yīng)索引號(hào)的表項(xiàng)從而達(dá)到定位分支的目的。具體地說,switch-case會(huì)生成一份大小(表項(xiàng)數(shù))為最大case常量+1的跳表,程序首先判斷switch變量是否大于最大case常量,若大于,則跳到default分支處理;否則,取得索引號(hào)為switch變量大小的跳表項(xiàng)的地址(即跳表的起始地址+表項(xiàng)大小×索引號(hào)),程序接著跳到此地址執(zhí)行,到此完成了分支的跳轉(zhuǎn)。所以,即使case中沒有break語句,也不會(huì)影響產(chǎn)生的分支數(shù),對(duì)程序環(huán)形復(fù)雜度的計(jì)算也不會(huì)產(chǎn)生影響。但是存在一種特殊情況,即多個(gè)case相連,此時(shí)需要把多個(gè)相連的case當(dāng)成一個(gè)判定節(jié)點(diǎn)進(jìn)行計(jì)算,以文獻(xiàn)[2]中的例子加以說明,如圖2所示。

    圖2 多個(gè)case相連的情況

    5)while語句

    在一個(gè)循環(huán)結(jié)構(gòu)中,循環(huán)條件表達(dá)式和循環(huán)結(jié)束條件共同決定程序的最終走向,結(jié)合這一特點(diǎn),對(duì)于while循環(huán)語句,可以分5種情況進(jìn)行討論:

    (1)條件表達(dá)式永真,這里只考慮while(1)這種形式的永真,但是有循環(huán)結(jié)束條件,此時(shí)while語句不是判定節(jié)點(diǎn),如圖3所示。

    圖3 while語句的特殊形式

    在圖3中,第4行和第6行語句合并為一個(gè)節(jié)點(diǎn),此時(shí)控制流圖中只有一個(gè)判定節(jié)點(diǎn),這與平時(shí)遇見的情況有所不同,需要特殊處理。

    (2)條件表達(dá)式永真,但是無循環(huán)結(jié)束條件,即所謂的死循環(huán),此時(shí)while語句是判定節(jié)點(diǎn)。

    (3)條件表達(dá)式永假,這里只考慮while(0)這種形式的永假,此時(shí)循環(huán)體內(nèi)的所有判定節(jié)點(diǎn)都不需要計(jì)算,包括while自己。

    (4)條件表達(dá)式非永真永假,并且是單個(gè)條件,此時(shí)while語句相當(dāng)于一個(gè)判定節(jié)點(diǎn)。

    (5)條件表達(dá)式非永真永假,并且是復(fù)合條件,此時(shí)while語句對(duì)應(yīng)判定節(jié)點(diǎn)的數(shù)量等于while語句中判別條件的個(gè)數(shù)。

    6)for語句

    for語句的處理方法和while語句的處理方法一樣。

    7)do-while語句

    do-while語句的處理方法和while語句的處理方法基本一致,唯一的區(qū)別是當(dāng)條件表達(dá)式永假時(shí),while語句的循環(huán)體內(nèi)的所有判定節(jié)點(diǎn)都不需要計(jì)算,而do-while語句的循環(huán)體內(nèi)的判定節(jié)點(diǎn)需要計(jì)算。

    1.4 代碼度量工具

    環(huán)形復(fù)雜度是代碼復(fù)雜度的一個(gè)指示器,可以利用一些著名的開放源碼工具計(jì)算環(huán)形復(fù)雜度,比如PMD、CheckStyle和JavaNCSS,但是這些工具只是針對(duì)Java程序的,OCLint、Testwell CMT++、Understand、SourceMonitor等工具可以度量C程序的環(huán)形復(fù)雜度。在實(shí)驗(yàn)部分,借助于后2種工具和本文提出的方法進(jìn)行比較。

    Understand是一個(gè)SciTools發(fā)行的、商用的靜態(tài)分析工具,可以維護(hù)、測(cè)量和分析源代碼。該工具能夠分析14種語言,包括C/C++、Java、FORTRAN和一些Web編程語言,例如PHP,并且適用于大部分操作系統(tǒng),包括Solaris。該工具可以對(duì)整個(gè)項(xiàng)目的結(jié)構(gòu)、度量值進(jìn)行分析并輸出報(bào)表,能夠?qū)Υa生成多種圖,包括控制流圖、依賴關(guān)系圖、UML類圖等。

    SourceMonitor是一款免費(fèi)的軟件,運(yùn)行在Windows平臺(tái)下。它可對(duì)多種語言寫的代碼進(jìn)行度量,包括C、C++、C#、Java、VB、Delphi和HTML,并且針對(duì)不同的語言,輸出不同的代碼度量值。對(duì)于C程序,提供了總行數(shù)、語句數(shù)目、分支語句比例、注釋比例、函數(shù)數(shù)目、平均每個(gè)函數(shù)包含的語句數(shù)目、函數(shù)環(huán)形復(fù)雜度和函數(shù)深度等度量值。

    2 系統(tǒng)分析與設(shè)計(jì)

    本文提出的研究方法可分為3個(gè)階段:源代碼的預(yù)處理,控制流信息的提取,環(huán)形復(fù)雜度的自動(dòng)化計(jì)算。其中,采用了狀態(tài)機(jī)編程思想刪掉源程序中的注釋來實(shí)現(xiàn)源代碼的預(yù)處理,利用模式匹配的規(guī)則來提取含控制流信息的關(guān)鍵語句,通過分情況處理關(guān)鍵語句來實(shí)現(xiàn)程序環(huán)形復(fù)雜度的自動(dòng)化計(jì)算。

    2.1 源代碼預(yù)處理技術(shù)

    源代碼的預(yù)處理主要是掃描程序中出現(xiàn)的注釋,并將其刪掉。由于注釋信息對(duì)最后環(huán)形復(fù)雜度的計(jì)算沒有影響,并且注釋中的某些信息會(huì)干擾接下來關(guān)鍵語句的提取,因此找出源代碼中的注釋信息,將其從源代碼中刪掉。這里只考慮單行注釋、多行注釋和折行注釋這3種情況,其中,折行注釋是以雙斜杠開頭、反斜杠結(jié)尾,很多編輯器高亮都沒有考慮到這種情況。此處采用了狀態(tài)機(jī)編程思想將源代碼中的注釋刪掉。

    2.2 控制流信息的提取

    在程序中,分支語句和循環(huán)語句最終對(duì)應(yīng)于控制流圖中的判定節(jié)點(diǎn),因此,如何提取程序中的分支和循環(huán)語句顯得尤為重要。此處通過模式匹配的方式提取程序中的關(guān)鍵語句,其中模式匹配規(guī)則如表1所示。

    表1 模式匹配規(guī)則

    表1中的模式匹配規(guī)則共有6種模式,左側(cè)為模式序號(hào),右側(cè)為模式匹配的規(guī)則。由于計(jì)算的是單個(gè)函數(shù)的環(huán)形復(fù)雜度,因此用模式P1匹配程序中的函數(shù)定義,從而開啟一個(gè)處理單元。分支語句和循環(huán)語句用模式P2、P3、P4和P5進(jìn)行匹配。其中,模式P2匹配if、for和while語句,模式P3匹配switch-case語句,模式P4匹配包含三目運(yùn)算符的語句,模式P5匹配do-while語句和break語句,匹配break語句是為了后續(xù)判斷當(dāng)循環(huán)結(jié)構(gòu)中無循環(huán)條件表達(dá)式時(shí),有無循環(huán)結(jié)束條件。如果循環(huán)體中有循環(huán)結(jié)束條件break語句,那么循環(huán)可以正常結(jié)束,此時(shí)的循環(huán)語句不是判定節(jié)點(diǎn),否則是死循環(huán)結(jié)構(gòu),此時(shí)的循環(huán)語句是判定節(jié)點(diǎn)。模式P6用來進(jìn)行花括號(hào)匹配,左花括號(hào)對(duì)應(yīng)語句塊的開始,右花括號(hào)對(duì)應(yīng)語句塊的結(jié)束,根據(jù)花括號(hào),可以對(duì)源程序進(jìn)行分塊處理。在表1規(guī)則的基礎(chǔ)上,再結(jié)合正則表達(dá)式中的search()方法,就可以將程序中的關(guān)鍵語句信息都提取出來。

    2.3 環(huán)形復(fù)雜度的自動(dòng)化計(jì)算

    經(jīng)過源程序的預(yù)處理和提取關(guān)鍵語句這2步,此時(shí)程序中只剩下分支語句、循環(huán)語句等關(guān)鍵信息,接下來需要根據(jù)這些關(guān)鍵信息,進(jìn)行程序環(huán)形復(fù)雜度的計(jì)算。在當(dāng)前步的處理中需要注意的是:當(dāng)語句中判別條件是復(fù)合條件時(shí),需要把復(fù)合條件分解成單個(gè)條件進(jìn)行計(jì)算。對(duì)于循環(huán)語句中條件表達(dá)式永真、永假的情況,尤其是當(dāng)條件表達(dá)式永真,但是有break語句可以跳出循環(huán),此時(shí)當(dāng)前循環(huán)語句并不能當(dāng)成判定節(jié)點(diǎn)這種情況,都需要進(jìn)行特殊處理。

    鑒于此,在當(dāng)前步驟的算法設(shè)計(jì)中采用自頂向下的分析策略,對(duì)各種情況分別編寫相應(yīng)的處理函數(shù),定義一個(gè)棧stack用來進(jìn)行花括號(hào)匹配,定義一個(gè)變量num用來記錄最終環(huán)形復(fù)雜度的值,初始值為0,并用flag標(biāo)志來標(biāo)記循環(huán)語句塊中是否有break語句,flag=0表示沒有,flag=1表示有,用ok標(biāo)志標(biāo)記if語句塊中是否包含break語句,當(dāng)循環(huán)語句塊中嵌套if語句塊,if語句塊中包含break語句,此時(shí)break語句也可以跳出循環(huán),flag=1。然后,從上往下掃描源程序,如果當(dāng)前語句中包含“{”,則進(jìn)行入棧操作,stack.push(“{”);若包含“}”,則進(jìn)行出棧操作,stack.pop();若包含“if”關(guān)鍵字、“switch”關(guān)鍵字、“do”關(guān)鍵字、“for”關(guān)鍵字、“while”關(guān)鍵字、三目運(yùn)算符,則相應(yīng)地調(diào)用count_if()、count_case()、count_do()、count_for()、count_while()、count_three()方法,通過對(duì)應(yīng)的方法計(jì)算代碼塊中相應(yīng)代碼的環(huán)形復(fù)雜度,并把計(jì)算得到的結(jié)果加到變量num中去,接著進(jìn)行下面語句的處理,直到程序結(jié)束。這樣,最終程序環(huán)形復(fù)雜度的值便等于變量num的值。其中,計(jì)算while語句塊中相應(yīng)代碼的環(huán)形復(fù)雜度的算法如下。

    算法1cout_while

    輸入程序的行號(hào)值

    輸出環(huán)形復(fù)雜度值

    1.str=the current statement,sum=0,flag=0

    2.index=the current statement’s line number value

    3.ok=whether the if statement block contains break

    4.if conditional expression is equal to 0 then

    5. while stack count is not equal to 0 do

    6. read the next statement

    7. end while

    8.else

    9. while stack count is not equal to 0 do

    10. str=the next statement

    11. if str contains if then

    12. sum+=count_if(index)

    13. if ok is true then

    14. ok=false,flag=1

    15. end if

    16. else if str contains switch then

    17. sum+=count_case(index)

    18. else if str contains do then

    19. sum+=count_do(index)

    20. else if str contains while then

    21. sum+=count_while(index)

    22. else if str contains for then

    23. sum+=count_for(index)

    24. else if str contains ternary operator then

    25. sum+=count_three(index)

    26. else if str contains break then

    27. flag=1

    28. end if

    29. end while

    30. if conditional expression is equal to 1 then

    31. if flag is equal to 0 then

    32. sum++

    33. end if

    34. else

    35. sum+=the number of conditions

    36. end if

    37. end if

    38. return sum

    在算法1中,對(duì)于while語句塊的處理,需要考慮條件表達(dá)式永真、永假和非永真永假這3種情況,語句塊的開始和結(jié)束對(duì)應(yīng)棧的入棧和出棧操作,當(dāng)棧中元素個(gè)數(shù)為0時(shí),標(biāo)志著當(dāng)前語句塊中內(nèi)容處理完畢。對(duì)于條件表達(dá)式永假的情況,直接順序讀取語句塊中的內(nèi)容即可;對(duì)于永真的情況,需要根據(jù)flag的值來判斷sum的值需不需要加1;對(duì)于非永真永假的情況,sum需要加的值等于while語句中條件的個(gè)數(shù)。

    3 實(shí)驗(yàn)評(píng)測(cè)

    3.1 實(shí)驗(yàn)環(huán)境

    實(shí)驗(yàn)所用操作系統(tǒng)為64位Windows 7旗艦版Service Pack 1,內(nèi)存為4 GB,處理器為Intel(R) CoreTMi7-2820QM CPU @ 2.30 GHz。

    3.2 測(cè)試用例

    實(shí)驗(yàn)中用的測(cè)試用例采用了文獻(xiàn)[15]中的程序,該程序涉及到了注釋、if-else語句、switch-case語句、while語句、三目運(yùn)算符、單個(gè)判別條件和復(fù)合條件,具有一定的代表性。具體測(cè)試用例如下所示。

    int main()

    {

    1. int a,b,max,c,count=0;

    2. char operate,flag;

    3. while(1)

    {

    4. flag=getch();

    5. printf("第%d次運(yùn)算 ",++count);

    //輸入的字符不是小寫字母,退出程序

    6. if(flag>='a' && flag<='z')

    {

    //輸入運(yùn)算數(shù)和運(yùn)算符

    7. scanf("%d%c%d",&a,&operate,&b);

    8. max=a>b ? a:b;//max記錄最大值

    9. switch(operate)

    {

    10. case'*':

    11. c=a*b;

    12. break;

    13. case'/':

    14. if(b==0)

    15. c=-1;

    else

    16. c=a/b;

    17. break;

    18. default:

    19. c=-1;

    }

    20. printf("結(jié)果為:%d,%d ",max,c);

    }

    else

    {

    21. break;

    }

    }

    22. return 0;

    }

    為了能更好地驗(yàn)證本文提出的環(huán)形復(fù)雜度自動(dòng)化計(jì)算方法,同時(shí)實(shí)現(xiàn)控制流圖的自動(dòng)生成,采用如下方法:利用GCC編譯源代碼生成中間文件,提取并分析中間文件的語句塊信息,找出語句塊之間的關(guān)系,用替換的方法把語句塊之間的關(guān)系轉(zhuǎn)換成行號(hào)之間的關(guān)系,并把結(jié)果輸出到一個(gè).dot文件中去,最后使用WinGraphviz這個(gè)COM組件把最終結(jié)果以控制流圖的形式展示出來[16-18]。

    本文系統(tǒng)在自動(dòng)生成控制流圖時(shí),對(duì)于程序中判別條件是復(fù)合條件的情況,將復(fù)合條件拆成單個(gè)條件,并用“行號(hào)_條件標(biāo)號(hào)”這種形式進(jìn)行表示,例如“6_1”,表示第6行第1個(gè)判別條件。對(duì)于三目運(yùn)算符來說,執(zhí)行的語句用“行號(hào)_語句塊標(biāo)號(hào)”這種形式來表示,例如“8_01”,表示執(zhí)行第8行第1個(gè)語句塊中的語句。上述測(cè)試用例所對(duì)應(yīng)的控制流圖如圖4所示。

    圖4 測(cè)試用例對(duì)應(yīng)的控制流圖

    測(cè)試用例中if(flag>=‘a(chǎn)’&& flag<=‘z’)語句的判別條件是復(fù)合條件,拆成2個(gè)判定節(jié)點(diǎn),max=a>b ? a:b;語句包含三目運(yùn)算符,判別條件是單個(gè)條件,相當(dāng)于一個(gè)判定節(jié)點(diǎn),switch-case中有2個(gè)case,產(chǎn)生2個(gè)判定節(jié)點(diǎn),再加上嵌套的if(b==0)語句,共產(chǎn)生3個(gè)判定節(jié)點(diǎn),而對(duì)于while(1)這種條件表達(dá)式永真的循環(huán)語句,由于循環(huán)體中存在循環(huán)結(jié)束條件,因此while(1)語句不是判定節(jié)點(diǎn)。綜上所述,測(cè)試用例中共有6個(gè)判定節(jié)點(diǎn),程序的環(huán)形復(fù)雜度為7。

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

    根據(jù)圖4可知測(cè)試用例的環(huán)形復(fù)雜度為7,這與圖5得出的實(shí)驗(yàn)結(jié)果一致。所以,本文提出的方法可以準(zhǔn)確地計(jì)算出程序的環(huán)形復(fù)雜度。將系統(tǒng)命名為RcTest工具,與Understand和SourceMonitor工具針對(duì)上述測(cè)試用例計(jì)算得到的結(jié)果進(jìn)行比較,最終結(jié)果如表2所示。

    圖5 程序運(yùn)行結(jié)果

    工具環(huán)形復(fù)雜度分析RcTest7while(1)語句不是判定節(jié)點(diǎn)Understand7把復(fù)合條件、while(1)語句都當(dāng)成一個(gè)判定節(jié)點(diǎn)SourceMonitor11while(1)、else、default語句都當(dāng)成一個(gè)判定節(jié)點(diǎn)

    經(jīng)過大量實(shí)驗(yàn)得出,Understand和SourceMonitor工具在計(jì)算環(huán)形復(fù)雜度時(shí)與RcTest有如下不同:

    1)Understand工具

    (1)在生成控制流圖和計(jì)算時(shí),把復(fù)合條件當(dāng)成一個(gè)條件進(jìn)行分析;

    (2)像循環(huán)語句中while(1)和while(0)這2種特殊的永真和永假形式,并沒有被考慮,在控制流圖中會(huì)畫出while節(jié)點(diǎn),并把while節(jié)點(diǎn)當(dāng)成判定節(jié)點(diǎn)加入到環(huán)形復(fù)雜度中去;

    (3)對(duì)于包含三目運(yùn)算符的語句,在控制流圖中當(dāng)成順序語句節(jié)點(diǎn)來處理,在計(jì)算時(shí),會(huì)當(dāng)成一個(gè)判定節(jié)點(diǎn)進(jìn)行計(jì)算,但是沒有考慮復(fù)合條件的情況;

    (4)對(duì)于switch-case語句,在一般情況下,當(dāng)case語句塊中沒有break語句時(shí),對(duì)環(huán)形復(fù)雜度的計(jì)算無影響,但是一旦出現(xiàn)多個(gè)case相連這種特殊情況,在生成控制流圖時(shí),會(huì)把多個(gè)相連的case當(dāng)成一個(gè)節(jié)點(diǎn),在計(jì)算時(shí),統(tǒng)計(jì)的是case的個(gè)數(shù)。

    2)SourceMonitor工具

    (1)將復(fù)合條件拆成多個(gè)單條件進(jìn)行計(jì)算,但是在處理包含三目運(yùn)算符的語句時(shí),沒有考慮復(fù)合條件,只當(dāng)成一個(gè)判定節(jié)點(diǎn);

    (2)對(duì)于if-else結(jié)構(gòu)的語句,會(huì)把else當(dāng)成一個(gè)判定節(jié)點(diǎn);

    (3)沒有考慮循環(huán)語句中永真和永假的特殊形式;

    (4)對(duì)于switch-case語句,在一般情況下,不管有沒有default語句,判定節(jié)點(diǎn)數(shù)等于case的個(gè)數(shù)+1。但是當(dāng)case語句塊中沒有break語句時(shí),當(dāng)前case語句不當(dāng)成判定節(jié)點(diǎn),對(duì)于多個(gè)case相連的情況,會(huì)把多個(gè)相連的case當(dāng)成一個(gè)判定節(jié)點(diǎn)進(jìn)行計(jì)算。

    通過比較可知,系統(tǒng)在計(jì)算環(huán)形復(fù)雜度時(shí),相對(duì)于Understand和SourceMonitor工具更加準(zhǔn)確。

    下面分析3種工具在計(jì)算時(shí)間開銷上(單位是秒)的差別,分別以104、105、106行代碼為例進(jìn)行比較,最終結(jié)果如表3所示。

    表3 3種工具的計(jì)算時(shí)間開銷 s

    由表3可知,RcTest工具在計(jì)算效率上比SourceMonitor略高。由于Understand工具會(huì)生成控制流圖等額外信息,因此時(shí)間開銷較大,但是產(chǎn)生的信息比較齊全。

    4 結(jié)束語

    環(huán)形復(fù)雜度是軟件難度度量的一個(gè)重要指標(biāo),本文通過提取源程序中含有控制流信息的關(guān)鍵語句,對(duì)其進(jìn)行分析處理,用于實(shí)現(xiàn)環(huán)形復(fù)雜度的自動(dòng)化計(jì)算。在這種方法下,無需知道源程序的控制流圖,而且通過去掉源程序中一些無關(guān)緊要的信息,只留下影響環(huán)形復(fù)雜度的關(guān)鍵信息,進(jìn)而可以高效、準(zhǔn)確地計(jì)算出程序的環(huán)形復(fù)雜度,可操作性更強(qiáng),更簡單,節(jié)約了測(cè)試時(shí)間,降低了測(cè)試成本。下一步將完善該工具的擴(kuò)展性,使其可以計(jì)算其他語言編寫的程序的環(huán)形復(fù)雜度。

    猜你喜歡
    運(yùn)算符控制流度量
    有趣的度量
    模糊度量空間的強(qiáng)嵌入
    老祖?zhèn)魇诨具\(yùn)算符
    抵御控制流分析的Python 程序混淆算法
    工控系統(tǒng)中PLC安全漏洞及控制流完整性研究
    電子科技(2021年2期)2021-01-08 02:25:58
    抵御控制流分析的程序混淆算法
    迷向表示分為6個(gè)不可約直和的旗流形上不變愛因斯坦度量
    地質(zhì)異常的奇異性度量與隱伏源致礦異常識(shí)別
    基于控制流隱藏的代碼迷惑
    C++運(yùn)算符重載剖析
    麻豆国产av国片精品| 欧美性感艳星| 国产 一区精品| 99久久久亚洲精品蜜臀av| 欧美人与善性xxx| 天堂影院成人在线观看| a级毛色黄片| 69人妻影院| 精品久久久久久久久av| 国产精品一区二区性色av| 久久人妻av系列| aaaaa片日本免费| 免费观看的影片在线观看| 深爱激情五月婷婷| 97超视频在线观看视频| 日本五十路高清| 全区人妻精品视频| 欧美日韩一区二区视频在线观看视频在线 | 婷婷亚洲欧美| 观看免费一级毛片| 免费看日本二区| 精品一区二区三区视频在线| av视频在线观看入口| 欧美一区二区国产精品久久精品| 少妇被粗大猛烈的视频| 日本免费一区二区三区高清不卡| 亚洲精品一卡2卡三卡4卡5卡| 久久久久久久久中文| 国产乱人偷精品视频| 最近在线观看免费完整版| 嫩草影院新地址| 精品乱码久久久久久99久播| 日韩中字成人| 最好的美女福利视频网| 亚洲中文字幕一区二区三区有码在线看| 看免费成人av毛片| 少妇的逼水好多| 一卡2卡三卡四卡精品乱码亚洲| 一级毛片久久久久久久久女| 美女免费视频网站| 天天躁夜夜躁狠狠久久av| 全区人妻精品视频| 麻豆久久精品国产亚洲av| 91在线观看av| 少妇的逼水好多| 国内久久婷婷六月综合欲色啪| 成年免费大片在线观看| 一个人观看的视频www高清免费观看| 午夜a级毛片| 日本熟妇午夜| 久久久久久久久中文| 看黄色毛片网站| 欧美潮喷喷水| 美女被艹到高潮喷水动态| 免费人成在线观看视频色| 国产色爽女视频免费观看| 精品99又大又爽又粗少妇毛片| 久久久久性生活片| 国产黄色视频一区二区在线观看 | 97超碰精品成人国产| 国产高清三级在线| 日本在线视频免费播放| 成人鲁丝片一二三区免费| 99热全是精品| 1024手机看黄色片| 国产精品久久久久久av不卡| 观看美女的网站| 久久久精品欧美日韩精品| 男女下面进入的视频免费午夜| 国产伦精品一区二区三区四那| 精品人妻一区二区三区麻豆 | 99热精品在线国产| 老女人水多毛片| 午夜福利成人在线免费观看| 97超级碰碰碰精品色视频在线观看| 久久国内精品自在自线图片| 国模一区二区三区四区视频| 亚洲欧美日韩卡通动漫| 91在线精品国自产拍蜜月| 夜夜爽天天搞| 国产高清有码在线观看视频| 国产黄色小视频在线观看| 色播亚洲综合网| 一夜夜www| 免费看美女性在线毛片视频| 中文字幕熟女人妻在线| 亚洲av成人av| 精品午夜福利在线看| 97超视频在线观看视频| 日韩三级伦理在线观看| 99久久中文字幕三级久久日本| 精品一区二区免费观看| 久久久久久久久大av| 久久久久久久久大av| 香蕉av资源在线| 欧美又色又爽又黄视频| 人人妻,人人澡人人爽秒播| 12—13女人毛片做爰片一| 精品一区二区三区视频在线观看免费| av天堂中文字幕网| 国语自产精品视频在线第100页| 久久久久免费精品人妻一区二区| 久久久久久久久中文| 一级毛片aaaaaa免费看小| 国产av麻豆久久久久久久| 国产精品电影一区二区三区| 黄色欧美视频在线观看| 精品久久久噜噜| 亚洲av成人精品一区久久| 国内精品久久久久精免费| 天堂网av新在线| 国产探花在线观看一区二区| 免费观看精品视频网站| 青春草视频在线免费观看| 成人美女网站在线观看视频| 国产色婷婷99| 青春草视频在线免费观看| 日日摸夜夜添夜夜添小说| 麻豆一二三区av精品| 91在线观看av| 亚洲性久久影院| 特级一级黄色大片| 成人特级黄色片久久久久久久| 日韩国内少妇激情av| 99热这里只有是精品50| 亚洲在线观看片| 啦啦啦观看免费观看视频高清| 国产在视频线在精品| 亚洲在线自拍视频| 国产精品电影一区二区三区| 真人做人爱边吃奶动态| 成人鲁丝片一二三区免费| 可以在线观看的亚洲视频| 午夜爱爱视频在线播放| 午夜老司机福利剧场| 美女内射精品一级片tv| 少妇裸体淫交视频免费看高清| 国产精品爽爽va在线观看网站| 丰满的人妻完整版| 国产精品一及| 99热只有精品国产| 色吧在线观看| 国产亚洲91精品色在线| 久久久久久大精品| 精品久久国产蜜桃| 女生性感内裤真人,穿戴方法视频| 精品久久国产蜜桃| 我要看日韩黄色一级片| 亚洲精品国产成人久久av| 嫩草影院精品99| 亚洲国产欧美人成| a级毛片免费高清观看在线播放| 亚洲熟妇熟女久久| 亚洲真实伦在线观看| 中文字幕人妻熟人妻熟丝袜美| 桃色一区二区三区在线观看| 久久人人爽人人片av| 久久精品国产99精品国产亚洲性色| 精品日产1卡2卡| 国产av一区在线观看免费| 男人狂女人下面高潮的视频| 老司机午夜福利在线观看视频| 亚洲av不卡在线观看| 精品人妻熟女av久视频| 99在线视频只有这里精品首页| 国产黄色视频一区二区在线观看 | 日本黄色片子视频| 老司机福利观看| 直男gayav资源| 国产又黄又爽又无遮挡在线| 国产aⅴ精品一区二区三区波| 久久久久久久亚洲中文字幕| 午夜精品一区二区三区免费看| 成人欧美大片| 亚洲av二区三区四区| 亚洲成人久久性| 久久人人精品亚洲av| 久久久久久伊人网av| 国产精品久久久久久精品电影| 亚洲av成人av| 精品免费久久久久久久清纯| 好男人在线观看高清免费视频| av女优亚洲男人天堂| 国产精品久久电影中文字幕| 亚洲av中文字字幕乱码综合| 成人精品一区二区免费| 联通29元200g的流量卡| 亚洲中文日韩欧美视频| 精品福利观看| 亚洲中文字幕一区二区三区有码在线看| 欧美又色又爽又黄视频| 免费电影在线观看免费观看| 免费看美女性在线毛片视频| 日日摸夜夜添夜夜爱| 日韩亚洲欧美综合| 国产精品一区www在线观看| 欧美xxxx性猛交bbbb| 色av中文字幕| 亚洲三级黄色毛片| 亚洲性久久影院| 永久网站在线| 国产不卡一卡二| 97在线视频观看| 嫩草影院新地址| 最近在线观看免费完整版| 最新在线观看一区二区三区| 99久久成人亚洲精品观看| 亚洲丝袜综合中文字幕| 欧美不卡视频在线免费观看| 身体一侧抽搐| 看非洲黑人一级黄片| 亚洲内射少妇av| 美女内射精品一级片tv| 久久精品夜色国产| 亚洲国产精品国产精品| 精品久久久久久久人妻蜜臀av| 国产免费男女视频| 国产成人精品久久久久久| 国产午夜精品久久久久久一区二区三区 | 精品少妇黑人巨大在线播放 | 国产国拍精品亚洲av在线观看| 噜噜噜噜噜久久久久久91| 99riav亚洲国产免费| 成年免费大片在线观看| 国产大屁股一区二区在线视频| 国产精品亚洲美女久久久| 成人毛片a级毛片在线播放| 少妇人妻一区二区三区视频| 国产黄a三级三级三级人| 中国美女看黄片| 亚洲成人久久爱视频| 高清毛片免费看| 亚洲欧美成人精品一区二区| 全区人妻精品视频| 婷婷色综合大香蕉| 精品午夜福利在线看| 69av精品久久久久久| 狂野欧美白嫩少妇大欣赏| 久久人妻av系列| 婷婷亚洲欧美| 波多野结衣高清无吗| 99久久中文字幕三级久久日本| 日日干狠狠操夜夜爽| 99热6这里只有精品| 男女那种视频在线观看| 不卡视频在线观看欧美| 悠悠久久av| 少妇被粗大猛烈的视频| a级毛片免费高清观看在线播放| 亚洲最大成人手机在线| 亚洲不卡免费看| 婷婷亚洲欧美| 寂寞人妻少妇视频99o| 亚州av有码| 精品免费久久久久久久清纯| 在线免费十八禁| 亚洲美女搞黄在线观看 | 精品久久久久久久久av| 国模一区二区三区四区视频| 性欧美人与动物交配| 成人欧美大片| 夜夜看夜夜爽夜夜摸| 婷婷六月久久综合丁香| 免费看美女性在线毛片视频| 国产淫片久久久久久久久| 日本三级黄在线观看| 搞女人的毛片| 国产三级中文精品| 亚洲自偷自拍三级| 午夜老司机福利剧场| 女的被弄到高潮叫床怎么办| 欧美潮喷喷水| 不卡一级毛片| 哪里可以看免费的av片| 午夜福利在线观看吧| 欧美中文日本在线观看视频| 小蜜桃在线观看免费完整版高清| 免费观看在线日韩| 亚洲美女视频黄频| а√天堂www在线а√下载| 99热6这里只有精品| 成人综合一区亚洲| 国产黄片美女视频| 成人三级黄色视频| 日韩欧美免费精品| 国产69精品久久久久777片| 麻豆一二三区av精品| 色哟哟哟哟哟哟| 国产精品免费一区二区三区在线| 久久午夜福利片| 最近2019中文字幕mv第一页| 少妇的逼水好多| 日本黄大片高清| 99热网站在线观看| 岛国在线免费视频观看| 欧美色欧美亚洲另类二区| 亚洲av成人精品一区久久| 在线观看66精品国产| 男女做爰动态图高潮gif福利片| 日本爱情动作片www.在线观看 | 女同久久另类99精品国产91| 少妇丰满av| 一夜夜www| 久久久国产成人精品二区| 亚洲欧美成人精品一区二区| 久久精品人妻少妇| 哪里可以看免费的av片| av女优亚洲男人天堂| 久久精品国产亚洲av涩爱 | av专区在线播放| 日本黄大片高清| 亚洲18禁久久av| 国产亚洲精品久久久com| 国产在线精品亚洲第一网站| 精品一区二区三区视频在线观看免费| 91麻豆精品激情在线观看国产| 性色avwww在线观看| 久久久久久久久久久丰满| h日本视频在线播放| 搡女人真爽免费视频火全软件 | 免费在线观看成人毛片| 真人做人爱边吃奶动态| 大型黄色视频在线免费观看| 国产精品爽爽va在线观看网站| 精品人妻熟女av久视频| 成人一区二区视频在线观看| 亚洲电影在线观看av| 天堂√8在线中文| 免费观看的影片在线观看| 国产高清三级在线| 悠悠久久av| 听说在线观看完整版免费高清| 桃色一区二区三区在线观看| 成人一区二区视频在线观看| 日韩av不卡免费在线播放| 国国产精品蜜臀av免费| 久久久国产成人免费| 99久久精品一区二区三区| 亚洲精品日韩在线中文字幕 | 国产精品国产三级国产av玫瑰| 日韩av在线大香蕉| 高清毛片免费看| 熟女电影av网| 久久中文看片网| 久久九九热精品免费| 天堂网av新在线| 国产高清视频在线播放一区| 久久久久久国产a免费观看| 午夜激情欧美在线| 国产精品不卡视频一区二区| 国产伦精品一区二区三区视频9| 天美传媒精品一区二区| 亚洲欧美中文字幕日韩二区| 成人欧美大片| 日韩av不卡免费在线播放| 久久久精品欧美日韩精品| 国产单亲对白刺激| 久久久久久久久久成人| 美女大奶头视频| 欧美在线一区亚洲| 又爽又黄a免费视频| 免费观看在线日韩| 国产精品国产三级国产av玫瑰| 亚洲最大成人手机在线| 大又大粗又爽又黄少妇毛片口| 一区二区三区高清视频在线| 亚洲真实伦在线观看| 丰满乱子伦码专区| 久久久久国内视频| 亚洲精品456在线播放app| 精品福利观看| av免费在线看不卡| 国产成人aa在线观看| 国产av麻豆久久久久久久| 午夜福利高清视频| 天天躁日日操中文字幕| 亚洲人成网站高清观看| 波野结衣二区三区在线| 我的女老师完整版在线观看| 午夜精品在线福利| 精品国内亚洲2022精品成人| 日韩av不卡免费在线播放| av在线天堂中文字幕| 午夜精品国产一区二区电影 | 色在线成人网| 日日干狠狠操夜夜爽| 别揉我奶头 嗯啊视频| 夜夜看夜夜爽夜夜摸| 国产一区二区在线av高清观看| 精品无人区乱码1区二区| 欧美人与善性xxx| 日韩制服骚丝袜av| 国产亚洲av嫩草精品影院| 看片在线看免费视频| 在线观看一区二区三区| 在线观看午夜福利视频| 黄色欧美视频在线观看| 天天躁夜夜躁狠狠久久av| 午夜亚洲福利在线播放| 成年av动漫网址| 亚洲电影在线观看av| 97在线视频观看| 亚洲精品456在线播放app| 亚洲成人av在线免费| 天堂√8在线中文| 久久99热6这里只有精品| 国产精品国产高清国产av| 久久中文看片网| 99热6这里只有精品| 久久久久国产精品人妻aⅴ院| 午夜a级毛片| 日本欧美国产在线视频| 18+在线观看网站| 黄片wwwwww| 精品欧美国产一区二区三| 麻豆一二三区av精品| 草草在线视频免费看| 日韩亚洲欧美综合| 亚洲精华国产精华液的使用体验 | 日本免费一区二区三区高清不卡| 99在线人妻在线中文字幕| 午夜爱爱视频在线播放| 两性午夜刺激爽爽歪歪视频在线观看| 婷婷六月久久综合丁香| 国产真实乱freesex| 91在线观看av| 男女做爰动态图高潮gif福利片| 麻豆国产av国片精品| 亚洲无线观看免费| av免费在线看不卡| 久久精品夜色国产| 伦理电影大哥的女人| 国产男人的电影天堂91| 国产精品一二三区在线看| 亚洲色图av天堂| 亚洲av美国av| 美女 人体艺术 gogo| 日韩av在线大香蕉| 亚洲精品456在线播放app| 国产午夜福利久久久久久| 狂野欧美激情性xxxx在线观看| 国产视频内射| 99久久九九国产精品国产免费| 天堂动漫精品| 91精品国产九色| 寂寞人妻少妇视频99o| 免费大片18禁| 国产大屁股一区二区在线视频| 男女啪啪激烈高潮av片| 丝袜美腿在线中文| 欧美最黄视频在线播放免费| 亚洲自拍偷在线| 春色校园在线视频观看| 日日摸夜夜添夜夜添av毛片| 久久精品国产亚洲av香蕉五月| 能在线免费观看的黄片| 黄色一级大片看看| 久久人人爽人人爽人人片va| 久久九九热精品免费| 国产伦一二天堂av在线观看| 久久精品久久久久久噜噜老黄 | 国产成人a区在线观看| 日本黄色视频三级网站网址| av在线天堂中文字幕| 亚洲国产精品国产精品| 神马国产精品三级电影在线观看| 毛片一级片免费看久久久久| 波多野结衣巨乳人妻| 国产成人91sexporn| 精品无人区乱码1区二区| 在线a可以看的网站| 欧美性感艳星| 中文字幕av在线有码专区| 天堂√8在线中文| 亚洲第一电影网av| 久久精品人妻少妇| 性色avwww在线观看| 成人永久免费在线观看视频| 亚洲av免费在线观看| 91精品国产九色| 人妻夜夜爽99麻豆av| 91久久精品国产一区二区成人| 国产av麻豆久久久久久久| 18禁黄网站禁片免费观看直播| 日本欧美国产在线视频| 人妻制服诱惑在线中文字幕| 淫秽高清视频在线观看| 观看免费一级毛片| 一a级毛片在线观看| 日本撒尿小便嘘嘘汇集6| 国内精品美女久久久久久| 久久天躁狠狠躁夜夜2o2o| 伊人久久精品亚洲午夜| 美女xxoo啪啪120秒动态图| 国产探花在线观看一区二区| 国产成人91sexporn| 国产精品久久久久久久久免| 亚洲成人久久性| 性插视频无遮挡在线免费观看| 日韩在线高清观看一区二区三区| 久久精品国产清高在天天线| 免费看日本二区| 男女啪啪激烈高潮av片| 99久久精品国产国产毛片| 国产白丝娇喘喷水9色精品| 深爱激情五月婷婷| 看黄色毛片网站| АⅤ资源中文在线天堂| 国产精品永久免费网站| 亚洲精品在线观看二区| 亚洲av免费高清在线观看| h日本视频在线播放| 在线观看美女被高潮喷水网站| 成人一区二区视频在线观看| 国产真实伦视频高清在线观看| 老司机影院成人| 亚洲成人av在线免费| 日韩成人av中文字幕在线观看 | 久久精品久久久久久噜噜老黄 | 此物有八面人人有两片| 久久久色成人| 变态另类成人亚洲欧美熟女| 日韩成人av中文字幕在线观看 | 十八禁网站免费在线| 亚洲精品乱码久久久v下载方式| 免费看a级黄色片| 久久精品夜色国产| 国产成人精品久久久久久| 俺也久久电影网| 亚洲av五月六月丁香网| 听说在线观看完整版免费高清| 免费一级毛片在线播放高清视频| 黑人高潮一二区| 国产乱人偷精品视频| 久久亚洲精品不卡| 免费看日本二区| 99国产极品粉嫩在线观看| av女优亚洲男人天堂| 在线天堂最新版资源| 国产精品久久久久久av不卡| 国产精品乱码一区二三区的特点| 成人特级av手机在线观看| 中文字幕久久专区| 五月玫瑰六月丁香| 老女人水多毛片| 久久久久久久久大av| 老司机福利观看| 成人国产麻豆网| 久久精品夜色国产| 久久欧美精品欧美久久欧美| 可以在线观看的亚洲视频| 我的老师免费观看完整版| 男人的好看免费观看在线视频| 国产精品1区2区在线观看.| 日日摸夜夜添夜夜爱| 免费看光身美女| 男女之事视频高清在线观看| 伦精品一区二区三区| 18禁在线播放成人免费| 啦啦啦韩国在线观看视频| 国产精品国产三级国产av玫瑰| 欧美高清性xxxxhd video| 黄片wwwwww| 成年av动漫网址| 一a级毛片在线观看| 精品日产1卡2卡| 一级a爱片免费观看的视频| 成人二区视频| 精品人妻视频免费看| 国产精品日韩av在线免费观看| 亚洲图色成人| 男女做爰动态图高潮gif福利片| 99久国产av精品| 看非洲黑人一级黄片| 亚洲美女搞黄在线观看 | 国产麻豆成人av免费视频| 1000部很黄的大片| 自拍偷自拍亚洲精品老妇| 亚洲欧美中文字幕日韩二区| 悠悠久久av| 狂野欧美白嫩少妇大欣赏| 亚洲av中文av极速乱| 在线免费十八禁| 日韩av不卡免费在线播放| 国产麻豆成人av免费视频| 神马国产精品三级电影在线观看| 三级毛片av免费| 99国产极品粉嫩在线观看| 成年免费大片在线观看| 欧美日韩在线观看h| 精品午夜福利视频在线观看一区| 国产精品无大码| 欧美成人精品欧美一级黄| 美女免费视频网站| 国产精品久久电影中文字幕| 亚洲欧美成人综合另类久久久 | 久久人人精品亚洲av| 国产精品伦人一区二区| 美女免费视频网站| 免费黄网站久久成人精品| 男女做爰动态图高潮gif福利片| 色尼玛亚洲综合影院| 国产一区亚洲一区在线观看| 一级毛片aaaaaa免费看小| 露出奶头的视频| 黄色一级大片看看| 一级毛片我不卡| 免费观看在线日韩| 国产欧美日韩一区二区精品| 成人毛片a级毛片在线播放| 国产麻豆成人av免费视频| 此物有八面人人有两片| 久久99热6这里只有精品| 成人三级黄色视频| 亚洲人成网站在线播|