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

    基于分支相關(guān)性分析的不可達(dá)路徑檢測方法

    2016-06-16 07:13:12姜淑娟史嬌嬌張艷梅鞠小林錢俊彥
    關(guān)鍵詞:關(guān)聯(lián)分析軟件測試

    姜淑娟 韓 寒 史嬌嬌 張艷梅,2 鞠小林,3 錢俊彥

    1(中國礦業(yè)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 江蘇徐州 221116)2(計(jì)算機(jī)軟件新技術(shù)國家重點(diǎn)實(shí)驗(yàn)室(南京大學(xué)) 南京 210023)3(南通大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 江蘇南通 226019)4(廣西可信軟件重點(diǎn)實(shí)驗(yàn)室(桂林電子科技大學(xué)) 廣西桂林 541004)(shjjiang@cumt.edu.cn)

    基于分支相關(guān)性分析的不可達(dá)路徑檢測方法

    姜淑娟1,4韓寒1史嬌嬌1張艷梅1,2鞠小林1,3錢俊彥4

    1(中國礦業(yè)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院江蘇徐州221116)2(計(jì)算機(jī)軟件新技術(shù)國家重點(diǎn)實(shí)驗(yàn)室(南京大學(xué))南京210023)3(南通大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院江蘇南通226019)4(廣西可信軟件重點(diǎn)實(shí)驗(yàn)室(桂林電子科技大學(xué))廣西桂林541004)(shjjiang@cumt.edu.cn)

    摘要軟件測試中,不可達(dá)路徑的存在會導(dǎo)致測試資源浪費(fèi),有效地檢測程序中的不可達(dá)路徑有助于節(jié)約測試資源、提高測試效率.分支相關(guān)性的存在是不可達(dá)路徑產(chǎn)生的主要起因.因此,確定分支的相關(guān)性在不可達(dá)路徑的檢測中占據(jù)十分重要的地位.提出了一種利用關(guān)聯(lián)分析和數(shù)據(jù)流分析確定分支相關(guān)性的方法,進(jìn)而實(shí)現(xiàn)不可達(dá)路徑的自動檢測.首先,結(jié)合靜態(tài)分析和動態(tài)分析,構(gòu)建反映程序中各分支判斷語句靜態(tài)依賴關(guān)系和動態(tài)執(zhí)行信息的數(shù)據(jù)集;然后,利用關(guān)聯(lián)分析和數(shù)據(jù)流分析技術(shù)確定分支的相關(guān)性;最后,根據(jù)分支相關(guān)性信息檢測不可達(dá)路徑.基于一組基準(zhǔn)程序和開源程序,開展不可達(dá)路徑檢測實(shí)驗(yàn).實(shí)驗(yàn)結(jié)果表明,該方法能夠準(zhǔn)確地檢測出程序中的不可達(dá)路徑,可以有效地提高軟件測試的效率.

    關(guān)鍵詞軟件測試;不可達(dá)路徑;分支相關(guān)性;關(guān)聯(lián)分析;數(shù)據(jù)流分析

    許多軟件測試問題都可以歸結(jié)為面向路徑的測試數(shù)據(jù)生成問題[1],而不可達(dá)路徑的存在是路徑測試中的一個(gè)難題,因?yàn)闆]有輸入數(shù)據(jù)能經(jīng)過這些不可達(dá)路徑,從而導(dǎo)致測試數(shù)據(jù)生成階段大量人力和資源的浪費(fèi).因此,路徑的可達(dá)性直接影響著路徑測試的效率和充分性,有效地檢測出這些不可達(dá)路徑不僅能夠降低測試成本,而且能提高測試效率.然而,不可達(dá)路徑的檢測是一個(gè)不可判定的問題[2].目前,不可達(dá)路徑檢測方法主要分為靜態(tài)檢測方法[3-14]和動態(tài)檢測方法[15-17]2類.其中靜態(tài)檢測方法可劃分為基于路徑條件可滿足性的檢測方法[3-9]和基于分支相關(guān)性分析的檢測方法[10-14],前者針對每條路徑,通過對滿足路徑條件的謂詞組合進(jìn)行求解來判定路徑的可達(dá)性,復(fù)雜度較高;后者通過分析分支語句間是否存在相關(guān)性來檢測不可達(dá)路徑.Bodik等人[10]指出分支相關(guān)性的存在是不可達(dá)路徑產(chǎn)生的主要起因.在一段復(fù)雜程序中,有9%~40%的分支語句具有相關(guān)性,但是該類方法無法分析具有復(fù)雜結(jié)構(gòu)的條件謂詞,因此其分支節(jié)點(diǎn)覆蓋率較低[18].而動態(tài)檢測方法通常在面向目標(biāo)路徑生成測試數(shù)據(jù)階段完成對路徑可達(dá)性的判斷,其計(jì)算代價(jià)較大,并且檢測結(jié)果具有較強(qiáng)的不確定性.

    關(guān)聯(lián)分析是一項(xiàng)較為成熟的技術(shù),其目的是在海量數(shù)據(jù)集中發(fā)現(xiàn)數(shù)據(jù)間的關(guān)聯(lián)信息.在程序分析時(shí)采用關(guān)聯(lián)分析技術(shù),有助于以較低的時(shí)間和空間代價(jià)更快、更準(zhǔn)確地從大量的分支判斷語句執(zhí)行信息中獲取程序分支的相關(guān)信息.在關(guān)聯(lián)分析的基礎(chǔ)上對程序進(jìn)行數(shù)據(jù)流分析,并開展不可達(dá)路徑的檢測,可以有效提高檢測精度.因此本文提出一種結(jié)合關(guān)聯(lián)分析和數(shù)據(jù)流分析2種技術(shù)確定分支相關(guān)性的策略,進(jìn)而自動檢測程序中的不可達(dá)路徑.本文的方法結(jié)合了靜態(tài)分析方法和動態(tài)分析方法的優(yōu)勢,既可以避免單純使用靜態(tài)分析方法帶來的分支節(jié)點(diǎn)覆蓋率較低的缺陷,又可以降低動態(tài)分析方法導(dǎo)致的高昂代價(jià).實(shí)驗(yàn)表明:本文的方法能夠準(zhǔn)確地檢測出程序中的不可達(dá)路徑,可以有效地提高軟件測試的效率.

    本文的主要貢獻(xiàn)如下:

    1) 提出了一種動靜態(tài)結(jié)合的不可達(dá)路徑檢測方法,有效結(jié)合了靜態(tài)分析和動態(tài)分析的優(yōu)勢;

    2) 提出了一種分支相關(guān)性確定方法,將分支相關(guān)性分為B-B相關(guān)性和A-B相關(guān)性,首先利用關(guān)聯(lián)分析的方法獲取B-B相關(guān)性信息,并在此基礎(chǔ)上利用靜態(tài)數(shù)據(jù)流分析技術(shù)獲取純A-B相關(guān)性信息,提高了不可達(dá)路徑的檢測精度;

    3) 實(shí)驗(yàn)驗(yàn)證了本文方法的有效性.

    1預(yù)備知識

    在介紹不可達(dá)路徑的檢測方法之前,本節(jié)首先給出不可達(dá)路徑及關(guān)聯(lián)分析相關(guān)的一些基本概念.

    定義1.控制流圖.控制流圖(control flow graph, CFG)是程序中語句邏輯執(zhí)行的一種圖形化表示,可由四元組(N,E,s,f)表示.其中,N為節(jié)點(diǎn)的集合,表示程序中的語句;E?N×N為邊的集合,表示程序中語句間的控制關(guān)系;s為程序的入口節(jié)點(diǎn);f為程序的出口節(jié)點(diǎn).

    定義3.控制樹[19](predominator tree,PRT).在CFG中,除s外,其他任何節(jié)點(diǎn)都有一個(gè)直接控制.根據(jù)該控制關(guān)系,可構(gòu)成一棵以s為根節(jié)點(diǎn)的控制樹.控制樹可由三元組(N,E,s)表示,其中E={(idom(ni),ni)|ni∈N-{s}}.

    定義4.控制樹主干(main trunk of predominator tree,MTPRT).在控制樹中,由出口節(jié)點(diǎn)及其在控制樹中的所有祖先節(jié)點(diǎn)構(gòu)成的節(jié)點(diǎn)序列為控制樹主干.

    定義6. 蘊(yùn)含樹[19](postdominator tree, POT).在CFG中,除f外,其他任何節(jié)點(diǎn)都有一個(gè)直接蘊(yùn)含.根據(jù)該蘊(yùn)含關(guān)系,可構(gòu)成一棵以f為根節(jié)點(diǎn)的蘊(yùn)含樹.蘊(yùn)含樹可由三元組(N,E,f)表示,其中,E={(iimp(ni),ni)|ni∈N-{f}}.

    Fig. 1 An example P.圖1 函數(shù)P的示例

    定義7. 循環(huán)節(jié)點(diǎn).對于控制流圖CFG中的節(jié)點(diǎn)ni,若存在節(jié)點(diǎn)nj(i≠j),使得nj在CFG對應(yīng)的蘊(yùn)含樹和控制樹中皆是ni的子節(jié)點(diǎn),則節(jié)點(diǎn)ni為循環(huán)節(jié)點(diǎn).

    定義8. 路徑.路徑為CFG中的一個(gè)執(zhí)行序列path=(n1,n2,…,nm),其中m為路徑的長度,(ni,ni+1)∈E(i=1,2,…,m-1),若n1=s,nm=f,則path為一條完整路徑,本文中所指的路徑均為完整路徑.若存在一組輸入數(shù)據(jù),使得程序能沿路徑path執(zhí)行,則path為可達(dá)路徑,否則path為不可達(dá)路徑.

    定義10. 沖突子路徑.由程序中存在沖突的語句構(gòu)成的語句序列稱為沖突子路徑.根據(jù)產(chǎn)生沖突的語句類型,可分為B-B沖突子路徑和A-B沖突子路徑.

    1) B-B沖突子路徑.設(shè)ni和nj是2個(gè)分支判斷語句,如果(ni,nj)有T→T(或T→F)的B-B相關(guān)性,則ni(T)→nj(F)(或ni(T)→nj(T))構(gòu)成B-B沖突子路徑;同樣,如果(ni,nj)有F→T(或F→F)的B-B相關(guān)性,則ni(F)→nj(F)(或ni(F)→nj(T))構(gòu)成B-B沖突子路徑.

    2) A-B沖突子路徑.設(shè)n為分支判斷語句,AS為賦值語句集,如果(AS,n)具有&→T(或&→F)的A-B相關(guān)性,則AS→n(F)(或AS→n(T))構(gòu)成A-B沖突子路徑.

    為了更加清晰地理解上述概念,下面通過圖1所示的例子進(jìn)行具體的說明.

    例1. 圖1(a)為一段由Java語言編寫的程序P,圖1(b)為其相應(yīng)的控制流圖,s,f分別為其入口節(jié)點(diǎn)和出口節(jié)點(diǎn).

    根據(jù)控制流圖中的控制關(guān)系和蘊(yùn)含關(guān)系,可以分別得到圖1(c)所示的控制樹和圖1(d)所示的蘊(yùn)含樹,其中,控制樹主干MTPRT={s,n1,n2,n3,n13,f}.對于節(jié)點(diǎn)n6,由于節(jié)點(diǎn)n7,n8,n9,n10在控制樹和蘊(yùn)含樹中皆是節(jié)點(diǎn)n6的子節(jié)點(diǎn),因此節(jié)點(diǎn)n6為循環(huán)節(jié)點(diǎn).對于節(jié)點(diǎn)n6和n7,因?yàn)楫?dāng)節(jié)點(diǎn)n6的取值為真時(shí),節(jié)點(diǎn)n7的取值必為假,因此(n6,n7)有T→F的B-B相關(guān)性.對于路徑path=(s,n1,n2,n3,n4,n5,n6,n7,n8,n10,n6,n11,n13,f),由于path經(jīng)過n6(T)和n7(T),不會有任何一組輸入數(shù)據(jù)能使得程序沿該路徑執(zhí)行,因此路徑path為1條不可達(dá)路徑,而n6(T)→n7(T)則構(gòu)成1條B-B沖突子路徑.對于語句n5,由于賦值語句n1,n2,n4使得語句n5中d≥0取固定值T,因此,({n1,n2,n4},n5)具有&→T的A-B相關(guān)性,然而由于n4?MTPRT,因此({n1,n2,n4},n5)之間&→T的A-B相關(guān)性可轉(zhuǎn)化為(n3,n5)之間T→T的偽B-B相關(guān)性.對于語句n3,由于賦值語句n1使得語句n3中謂詞c==0取固定值T,因此,(n1,n3)具有&→T的A-B相關(guān)性,該A-B相關(guān)性不能轉(zhuǎn)化為B-B相關(guān)性,因此(n1,n3)具有&→T的純A-B相關(guān)性,而n1→n3(F)則構(gòu)成1條A-B沖突子路徑.

    定義11. 關(guān)聯(lián)規(guī)則[21].給定:

    ① 項(xiàng)的集合(itemset):I={i1,i2,…,in};

    ② 任務(wù)相關(guān)的事務(wù)數(shù)據(jù)集D,其中,每個(gè)事務(wù)TS是I的非空子集,即滿足TS?I;

    ③ 每個(gè)事務(wù)對應(yīng)唯一的事務(wù)標(biāo)識符TID;

    ④X,Y為2個(gè)項(xiàng)集,若X?I,Y?I,并且X∩Y=?,則關(guān)聯(lián)規(guī)則的蘊(yùn)涵式為

    X?Y[support,confidence],

    其中,規(guī)則X?Y在事務(wù)數(shù)據(jù)集D中成立,X為規(guī)則的前項(xiàng)集,Y為規(guī)則的后項(xiàng)集,support和confidence分別表示X?Y的支持度和置信度.其中,支持度為D中事務(wù)包含X∪Y的概率;置信度為D中包含X的事務(wù)中同時(shí)又包含Y的概率,即條件概率.

    滿足最小支持度(min_support)和最小置信度(min_confidence)的關(guān)聯(lián)規(guī)則稱為強(qiáng)關(guān)聯(lián)規(guī)則.最小支持度和最小置信度按需設(shè)定.此外,支持度不小于最小支持度的項(xiàng)集稱為頻繁項(xiàng)集.

    2不可達(dá)路徑檢測方法

    本節(jié)提出了一種不可達(dá)路徑的自動檢測方法.1)結(jié)合靜態(tài)分析和動態(tài)分析,構(gòu)建反映各分支判斷語句靜態(tài)依賴關(guān)系和動態(tài)執(zhí)行信息的數(shù)據(jù)集;2)通過關(guān)聯(lián)分析方法確定B-B相關(guān)性信息,在此基礎(chǔ)上利用數(shù)據(jù)流分析技術(shù)確定純A-B相關(guān)性信息;3)根據(jù)分支相關(guān)性檢測不可達(dá)路徑.

    2.1系統(tǒng)模型

    不可達(dá)路徑檢測方法分為3個(gè)階段:①構(gòu)建數(shù)據(jù)集;②確定分支相關(guān)性;③檢測不可達(dá)路徑.系統(tǒng)模型如圖2所示:

    Fig. 2 Framework of our method.圖2 系統(tǒng)模型

    階段1. 構(gòu)建數(shù)據(jù)集.采用靜動態(tài)結(jié)合的方法,構(gòu)建反映各分支判斷語句靜態(tài)依賴關(guān)系和動態(tài)執(zhí)行信息的數(shù)據(jù)集.首先對程序進(jìn)行靜態(tài)分析,獲取分支節(jié)點(diǎn)序列集;然后采用動態(tài)分析方法,收集程序執(zhí)行時(shí)分支判斷語句的動態(tài)信息,以得到關(guān)聯(lián)分析所需的數(shù)據(jù)集.

    階段2. 確定分支相關(guān)性.首先利用關(guān)聯(lián)分析技術(shù)對數(shù)據(jù)集進(jìn)行分析,確定包含偽B-B相關(guān)性在內(nèi)的B-B相關(guān)性;然后利用數(shù)據(jù)流分析方法,并結(jié)合B-B相關(guān)性信息,確定純A-B相關(guān)性信息.

    階段3. 檢測不可達(dá)路徑.根據(jù)分支相關(guān)性信息確定沖突子路徑,進(jìn)而檢測程序中的不可達(dá)路徑.將不可達(dá)路徑的檢測運(yùn)用到軟件測試中,從而節(jié)約測試資源、提高測試效率.

    2.2數(shù)據(jù)集的構(gòu)建

    在本節(jié)中,我們利用動靜態(tài)相結(jié)合的方法對源程序進(jìn)行分析,構(gòu)建反映各分支判斷語句靜態(tài)依賴關(guān)系和動態(tài)執(zhí)行信息的數(shù)據(jù)集.

    首先,利用Soot①對程序進(jìn)行靜態(tài)分析,構(gòu)建程序的控制流圖、控制樹及蘊(yùn)含樹,然后通過搜索控制樹獲取具有控制關(guān)系的分支節(jié)點(diǎn)序列集U,U滿足4個(gè)條件:

    1)U覆蓋控制流圖中的全部分支節(jié)點(diǎn);

    2) ?ui∈U,ui包含了控制樹主干中的每一個(gè)分支節(jié)點(diǎn);

    3) ?ui∈U,存在一條路徑pathi,使得pathi包含了ui中的每一個(gè)節(jié)點(diǎn);

    4) ?ui∈U,?uj∈U,ui≠uj,其中i≠j.

    ?ui∈U,采用動態(tài)分析技術(shù),通過JDI(Java debug interface)②監(jiān)聽序列ui中各個(gè)分支節(jié)點(diǎn)ni 1,ni 2,…,ni k的執(zhí)行情況,在輸入域內(nèi)隨機(jī)獲取M個(gè)抽樣輸入數(shù)據(jù),要求當(dāng)程序輸入每個(gè)抽樣數(shù)據(jù)時(shí)ni 1,ni 2,…,ni k全部執(zhí)行,若存在某節(jié)點(diǎn)nix不執(zhí)行,則換取其他抽樣值,直到所有的分支節(jié)點(diǎn)都執(zhí)行.在隨機(jī)抽樣時(shí),我們會使各抽樣值均勻分布在輸入域內(nèi).如果?ui∈U,利用隨機(jī)抽樣不能使ui中的所有分支節(jié)點(diǎn)都執(zhí)行,本文將不會對ui構(gòu)建相應(yīng)數(shù)據(jù)集.因?yàn)榻?jīng)過前期的多次實(shí)驗(yàn),對于不同的ui,隨機(jī)抽樣并執(zhí)行程序,如果出現(xiàn)不能使得ui中的所有分支節(jié)點(diǎn)都執(zhí)行的情況,則會改進(jìn)抽樣方法,適時(shí)調(diào)整抽樣的子區(qū)域,若仍有上述情況發(fā)生,則對ui進(jìn)行手動分析.

    M值的設(shè)定對于實(shí)驗(yàn)結(jié)果存在著一定的影響,該值增大時(shí)可能但不一定會提高不可達(dá)路徑的檢測精度,但會增加檢測的復(fù)雜度,值太小時(shí)則會降低檢測精度,增加漏報(bào)和誤報(bào)情況的發(fā)生,本文中M值主要根據(jù)分支節(jié)點(diǎn)序列中節(jié)點(diǎn)的個(gè)數(shù)和輸入?yún)?shù)的個(gè)數(shù)進(jìn)行設(shè)定,設(shè)序列中分支節(jié)點(diǎn)的個(gè)數(shù)為n,輸入?yún)?shù)的個(gè)數(shù)為k,則統(tǒng)計(jì)數(shù)據(jù)量設(shè)為k×2n+1.

    為了提高算法的效率,我們僅記錄并分析各分支節(jié)點(diǎn)的信息.?ui∈U,分析當(dāng)程序輸入抽樣值Ii j時(shí)ui中各分支節(jié)點(diǎn)的取向(TF),從而得到抽樣值Ii j對應(yīng)的分支節(jié)點(diǎn)取值序列pi j,依此類推,獲取M個(gè)抽樣值的分支節(jié)點(diǎn)取值序列集vi.為了避免路徑數(shù)目過于龐大,對于循環(huán)次數(shù)較多的循環(huán)語句,我們限制其執(zhí)行次數(shù)不超過3,并記錄其每次執(zhí)行時(shí)的取值情況.最終分支節(jié)點(diǎn)序列集U將得到一個(gè)分支節(jié)點(diǎn)取值序列集的集合V,即

    V={v1,v2,…,vi}={{p11,p12,…,p1 M},

    {p21,p22,…,p2 M},…,{pi 1,pi 2,…,pi M}},

    其中,pi j是當(dāng)程序輸入抽樣值Ii j時(shí)ui中各分支節(jié)點(diǎn)的取值序列,pi j中的每個(gè)元素取值為TF.

    算法1.分支節(jié)點(diǎn)取值序列集的獲取算法.

    Function:GetCSValue(TP,PRT)

    輸入:待測程序TP、待測程序的控制樹PRT;

    輸出:分支節(jié)點(diǎn)取值序列V.

    ①V=?;

    ②U=?;

    ③c=f;

    ④ do

    ⑤l=c;

    ⑥c=c.PRTParentNode;

    ⑦Analyze(c,l);

    ⑧ while (c.PRTParentNode!=NULL);

    ⑨ for (eachui∈U) do

    ⑩ for (intj=1;j≤M;j++) do

    procedureAnalyze(PRTNodec,PRTNodel)

    獲取分支節(jié)點(diǎn)取值序列集的集合V之后,對其進(jìn)行關(guān)聯(lián)分析之前,?vi∈V,需要將vi轉(zhuǎn)換為關(guān)聯(lián)分析所需的數(shù)據(jù)集.?vi∈V,按如下方式將vi轉(zhuǎn)化為數(shù)據(jù)集Di,即:

    No.ni1ni2…nik1TF…T2FT…T?????MTT…F

    其中:

    2.3分支相關(guān)性的確定

    本節(jié)首先利用關(guān)聯(lián)分析技術(shù)對數(shù)據(jù)集進(jìn)行分析,確定包含偽B-B相關(guān)性在內(nèi)的B-B相關(guān)性,然后利用數(shù)據(jù)流分析方法,并結(jié)合B-B相關(guān)性信息,確定純A-B相關(guān)性信息.

    2.3.1基于關(guān)聯(lián)分析的B-B相關(guān)性的確定

    本節(jié)對數(shù)據(jù)集進(jìn)行關(guān)聯(lián)分析,從而確定包含偽B-B相關(guān)性在內(nèi)的B-B相關(guān)性信息.?Di∈D,首先從數(shù)據(jù)集Di中找出所有的頻繁項(xiàng)集,然后再由頻繁項(xiàng)集產(chǎn)生強(qiáng)關(guān)聯(lián)規(guī)則.我們對傳統(tǒng)的強(qiáng)關(guān)聯(lián)規(guī)則生成算法[21]進(jìn)行了改進(jìn),避免生成無用的強(qiáng)關(guān)聯(lián)規(guī)則,使其更適用于B-B相關(guān)性的確定,從而提高算法的效率和精度.

    對Di進(jìn)行關(guān)聯(lián)分析之前,需要設(shè)定min_support和min_confidence,2值的設(shè)定直接影響得到B-B相關(guān)性信息的可靠性和正確率,結(jié)合B-B相關(guān)性的定義和特點(diǎn),令:

    min_confidence=100%.

    1) 從Di中找出所有的頻繁項(xiàng)集

    從數(shù)據(jù)集Di中,找出所有滿足支持度大于等于min_support的頻繁項(xiàng)集.以2-項(xiàng)集{ni=T,nj=F}為例,其支持度為

    support({ni=T,nj=F})=

    (1)

    我們采用FP-Growth[22]算法對數(shù)據(jù)集進(jìn)行分析.FP-Growth算法采用分治的方法,首先讀取數(shù)據(jù)集Di,構(gòu)造頻繁1-項(xiàng)集及FP-Tree;然后將FP-Tree分解成一些條件模式基(conditional pattern base, CPB)(頻繁項(xiàng)在FP-Tree中的所有節(jié)點(diǎn)祖先路徑的集合),每個(gè)CPB和1個(gè)頻繁1-項(xiàng)集相關(guān)聯(lián),根據(jù)CPB構(gòu)造其相應(yīng)的條件FP-tree;最后采用遞歸算法分別對這些條件FP-tree進(jìn)行挖掘,從而得到所有的頻繁項(xiàng)集F(Di,min_support).

    2) 由頻繁項(xiàng)集產(chǎn)生強(qiáng)關(guān)聯(lián)規(guī)則

    利用上一步得到的頻繁項(xiàng)集F(Di,min_support)產(chǎn)生置信度大于等于min_confidence的規(guī)則.以頻繁項(xiàng)集{ni=T,nj=F}為例,它產(chǎn)生的規(guī)則ni=T?nj=F,其置信度為

    confidence({ni=T}?{nj=F})=

    (2)

    在傳統(tǒng)的算法中,如果某一規(guī)則的置信度大于等于min_confidence,則該規(guī)則為強(qiáng)關(guān)聯(lián)規(guī)則.本文改進(jìn)了傳統(tǒng)的算法,將程序中各分支判斷語句的靜態(tài)依賴信息與算法相結(jié)合,避免生成無用的強(qiáng)關(guān)聯(lián)規(guī)則,使其更適用于B-B相關(guān)性的確定,改進(jìn)后的算法步驟如下:

    1) ?f∈F(Di,min_support),產(chǎn)生f的所有非空子集;

    2) 對于f的每一個(gè)非空子集g,若規(guī)則g?(f-g)滿足3個(gè)條件:

    ① (f-g)中的元素個(gè)數(shù)card(f-g)=1;

    則規(guī)則g?(f-g)為 “有用的強(qiáng)關(guān)聯(lián)規(guī)則”.

    下面通過一個(gè)例子說明基于關(guān)聯(lián)分析的B-B相關(guān)性的確定過程.

    Fig. 3 Diand FP-Tree of Di.圖3 Di及其FP-Tree

    對FP-Tree進(jìn)行關(guān)聯(lián)分析,可得到支持度大于等于25%的所有頻繁項(xiàng)集F(Di,25%),如表1所示:

    Table 1 Frequent Itemsets F(Di,25%)

    2.3.2基于數(shù)據(jù)流分析的純A-B相關(guān)性的確定

    算法2.純A-B相關(guān)性獲取算法.

    FunctionGetABCorrelation(TP,MTPRT,ARList)

    輸入:待測程序TP、TP的控制樹主干MTPRT、有效強(qiáng)關(guān)聯(lián)規(guī)則集ARList;

    輸出:純A-B相關(guān)性集A-BcorrelationsList.

    ①A-BcorrelationsList=?;

    ②CSList=TP中的所有分支判斷語句集合;

    ③NCSList=ARList中各后項(xiàng)集出現(xiàn)過的分支判斷語句集合;

    ④ for (eachci∈CSList) do

    ⑤ if (ci?NCSList) then

    ⑥r(nóng)eferencelocalList=ci引用變量;

    ⑦ancestorList=MTPRT中ci的祖先;

    ⑧ intflag=1;

    ⑨ for (eachrj∈referencelocalList) do

    ⑩DataFlowAnalysis(rj,ancestorList);

    2.4不可達(dá)路徑的檢測

    本節(jié)根據(jù)得到的分支相關(guān)性信息確定沖突子路徑,從而檢測程序中的不可達(dá)路徑.其中,根據(jù)B-B相關(guān)性信息確定B-B沖突子路徑,根據(jù)純A-B相關(guān)性信息確定A-B沖突子路徑.

    1)B-B沖突子路徑的確定.設(shè)ni和nj是程序中的2個(gè)分支判斷語句,如果經(jīng)過關(guān)聯(lián)分析后得到(ni,nj)有T→T(或T→F)的相關(guān)性,則ni(T)→nj(F)(或ni(T)→nj(T))構(gòu)成B-B沖突子路徑;同樣,如果(ni,nj)有F→T(或F→F)的相關(guān)性,則ni(F)→nj(F)(或ni(F)→nj(T))構(gòu)成B-B沖突子路徑.

    2)A-B沖突子路徑的確定.設(shè)n為分支判斷語句,AS為賦值語句集,如果經(jīng)過數(shù)據(jù)流分析后得到(AS,n)具有&→T或&→F的相關(guān)性,則AS→n(F)或AS→n(T)構(gòu)成A-B沖突子路徑.

    在得到的各條B-B沖突子路徑中,可能存在著矛盾、冗余或是無用沖突子路徑,可根據(jù)3個(gè)規(guī)則進(jìn)行刪減:

    規(guī)則1. 矛盾沖突子路徑刪減規(guī)則.若ni(T)→nj(T)與ni(T)→nj(F)為2條B-B沖突子路徑,且ni與nj同時(shí)存在于多個(gè)分支節(jié)點(diǎn)序列中,則稱這2條子路徑為矛盾的沖突子路徑,并將這2條子路徑全部刪除;同理,若ni(F)→nj(T)與ni(F)→nj(F)為2條B-B沖突子路徑,并且ni與nj同時(shí)存在于多個(gè)分支節(jié)點(diǎn)序列中,應(yīng)全部刪除.

    規(guī)則2. 冗余沖突子路徑刪減規(guī)則.若ni(F)→nk(F)與ni(F),nj(T)→nk(F)為2條B-B沖突子路徑,由于任何可以被后者檢測出來的不可達(dá)路徑同樣也可以被前者檢測出來,因此稱ni(F),nj(T)→nj(F)這類子路徑為冗余的沖突子路徑,并將其刪除.

    規(guī)則3. 無用沖突子路徑刪減規(guī)則.設(shè)ni和nj是2個(gè)分支節(jié)點(diǎn),且ni與nj同時(shí)存在于多個(gè)分支節(jié)點(diǎn)序列中,我們將這些序列的集合記為BNS.若在BNS中存在2條分支節(jié)點(diǎn)序列a,b,若存在1條B-B沖突子路徑ni(T)→nj(T),該沖突子路徑可通過分析a得到,并且不能由b得到,則稱ni(T)→nj(T)這類子路徑為無用的沖突子路徑,并將其刪除.

    確定沖突子路徑后,根據(jù)不可達(dá)路徑檢測規(guī)則檢測程序中的不可達(dá)路徑.

    不可達(dá)路徑檢測規(guī)則:對于任何一條路徑,若該路徑包含沖突子路徑,則它為不可達(dá)路徑.

    在不可達(dá)路徑的檢測過程中,分支相關(guān)性的確定主要依賴于程序中分支節(jié)點(diǎn)的執(zhí)行情況.輸入的數(shù)據(jù)是隨機(jī)抽取的,因此分支節(jié)點(diǎn)的執(zhí)行情況也帶有一定的隨機(jī)性質(zhì).然而,隨機(jī)數(shù)據(jù)的抽樣規(guī)模會影響本文方法的檢測效果與效率.如果抽樣數(shù)據(jù)過多,此時(shí)采集數(shù)據(jù)比較全面,因此檢測效果較好,但耗時(shí)較多;反之如果隨機(jī)抽取的輸入數(shù)據(jù)過少,此時(shí)采集數(shù)據(jù)不夠全面,因此可能產(chǎn)生誤報(bào)和漏報(bào)的情況,檢測效果較差,但耗時(shí)較少.為了達(dá)到較好的平衡點(diǎn),我們在隨機(jī)抽樣階段,根據(jù)輸入數(shù)據(jù)的可選值域范圍,使抽樣值的數(shù)量足夠大,并令采樣分布在輸入域的各個(gè)區(qū)域.針對可能會造成抽樣不完善的情況,如當(dāng)一個(gè)分支涉及的值域較大而另一個(gè)分支涉及的值域較小時(shí),本文采取如下措施進(jìn)行處理,即針對各個(gè)分支判斷語句中的條件表達(dá)式,通過區(qū)間算術(shù)方法并結(jié)合輸入域的邊界信息獲取分支取值域,盡可能降低因抽樣不均衡導(dǎo)致誤報(bào)、漏報(bào)的可能性.

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

    為了評估本文的方法,首先用一個(gè)實(shí)例進(jìn)行了驗(yàn)證,然后選取了5個(gè)基準(zhǔn)程序和5個(gè)開源項(xiàng)目作為測試對象,檢測程序中的不可達(dá)路徑.

    3.1實(shí)例分析

    以程序P′為例來驗(yàn)證本文方法的有效性,圖4(a)~4(d)分別為P′的源代碼、控制流圖及其控制樹、蘊(yùn)含樹.

    步驟1. 確定B-B相關(guān)性.對P′的控制流圖、控制樹及蘊(yùn)含樹進(jìn)行搜索,可得到分支節(jié)點(diǎn)序列集U={{n3,n4,n5,n14,n17},{ n3,n4,n10,n14,n17}},P′的輸入向量為(a,check),在輸入域[-350,350]×[T,F]內(nèi)隨機(jī)抽樣,在此例中,設(shè)置抽樣值的數(shù)目M=128.在抽樣值的輸入下執(zhí)行程序,分別得到u1,u2對應(yīng)的數(shù)據(jù)集D1,D2,然后分別對D1,D2進(jìn)行關(guān)聯(lián)分析,可得到表2和表3所示的分析結(jié)果.

    Fig. 4 An example P′.圖4 示例P′

    步驟2. 確定純A-B相關(guān)性.對未在后項(xiàng)集中出現(xiàn)的分支判斷語句n3進(jìn)行分析,語句n3中的引用變量為z,利用數(shù)據(jù)流技術(shù)分析s→n3間z的定值信息,可得到賦值語句n1和n2使得語句n3中z恒等于1.因此,({n1,n2},n3)具有&→T的A-B相關(guān)性.

    步驟3. 確定沖突子路徑.根據(jù)表2及表3中的B-B相關(guān)性信息,可得到程序P′中的B-B沖突子路徑信息,然后根據(jù)沖突子路徑的刪減規(guī)則對B-B沖突子路徑進(jìn)行刪減,最終得到如表4所示的B-B沖突子路徑.以n5(n6)→n14(n16)為例,其n5和n14是2個(gè)分支判斷語句,n6為n5的真分支,n16為n14的假分支,因?yàn)?n5,n14)有T→T的相關(guān)性,所以n5(T)→n14(F)是1條B-B沖突子路徑.沖突子路徑的刪減過程如下:

    1) 刪除矛盾沖突子路徑.因?yàn)樵趗1中(n3,n4)有T→T的相關(guān)性,且在u2中(n3,n4)有T→F的相關(guān)性,所以n3(T)→n4(F)和n3(T)→n4(T)是2條B-B沖突子路徑.由于n3和n4同時(shí)存在于u1和u2中,因此這2條子路徑為矛盾的沖突子路徑,全部刪除,其他此類型沖突子路徑刪除方法相同.

    2) 刪除冗余沖突子路徑.因?yàn)樵趗2中(n3,n10)有T→F的相關(guān)性,(n3,n4,n10)有TF→F的相關(guān)性,所以n3(T)→n10(T)與n3(T),n4(F)→n10(T)為2條B-B沖突子路徑.由于任何可以被n3(T),n4(F)→n10(T)檢測出來的不可達(dá)路徑同樣也可以被n3(T)→n10(T)檢測出來,因此n3(T),n4(F)→n10(T)為冗余的沖突子路徑,將其刪除,其他此類型沖突子路徑刪除方法相同.

    3) 刪除無用沖突子路徑.n14與n17同時(shí)存在于u1和u2中,因?yàn)樵趗1中(n14,n17)有T→F的相關(guān)性,所以n14(T)→n17(T)是1條B-B沖突子路徑.但該沖突子路徑不能通過u2得到,因此n14(T)→n17(T)為無用的沖突子路徑,將其刪除.根據(jù)A-B相關(guān)性n1,n2→n3(T)可得到n1,n2→n3(n20)是1條A-B沖突子路徑,如表5所示.

    Table 2 B-B Correlations in u1

    Continued (Table 2)

    Table 3 B-B Correlations in u2

    Table 4 B-B Conflicting Subpaths of P′

    Table 5 A-B Conflicting Subpaths of P′

    步驟4. 檢測不可達(dá)路徑.根據(jù)表4和表5來檢測P′中不可達(dá)路徑,在P′的17條路徑中共有14條不可達(dá)路徑(用pi表示).分別如下:

    p1=(s,n1,n2,n3,n4,n5,n6,n8,n14,n15,n17,n18,n19,f);

    p2=(s,n1,n2,n3,n4,n5,n6,n8,n14,n16,n17,n18,n19,f);

    p3=(s,n1,n2,n3,n4,n5,n6,n8,n14,n16,n17,n19,f);

    p4=(s,n1,n2,n3,n4,n5,n7,n8,n14,n15,n17,n18,n19,f);

    p5=(s,n1,n2,n3,n4,n5,n7,n8,n14,n15,n17,n19,f);

    p6=(s,n1,n2,n3,n4,n5,n7,n8,n14,n16,n17,n19,f);

    p7=(s,n1,n2,n3,n4,n9,n10,n11,n13,n14,n15,n17,n18,n19,f);

    p8=(s,n1,n2,n3,n4,n9,n10,n11,n13,n14,n15,n17,n19,f);

    p9=(s,n1,n2,n3,n4,n9,n10,n11,n13,n14,n16,n17,n18,n19,f);

    p10=(s,n1,n2,n3,n4,n9,n10,n11,n13,n14,n16,n17,n19,f);

    p11=(s,n1,n2,n3,n4,n9,n10,n12,n13,n14,n15,n17,n18,n19,f);

    p12=(s,n1,n2,n3,n4,n9,n10,n12,n13,n14,n15,n17,n19,f);

    p13=(s,n1,n2,n3,n4,n9,n10,n12,n13,n14,n16,n17,n19,f).

    p14=(s,n1,n2,n3,n20,f).

    3.2基準(zhǔn)程序?qū)嶒?yàn)數(shù)據(jù)及分析

    為了進(jìn)一步驗(yàn)證本文方法的有效性,實(shí)驗(yàn)部分對一組基準(zhǔn)程序進(jìn)行了分析,在保證分支結(jié)點(diǎn)被100%覆蓋的前提下,最終得到的實(shí)驗(yàn)數(shù)據(jù)如表6所示.表6列出了被測基準(zhǔn)程序的信息(1~3列)和不可達(dá)路徑檢測結(jié)果(4列).從表6可以看到,本文方法可以檢測出各程序中所有的不可達(dá)路徑.我們通過手動分析來驗(yàn)證實(shí)驗(yàn)結(jié)果的正確性,經(jīng)核對,本文方法所檢測到的不可達(dá)路徑均為不可達(dá)路徑,未發(fā)生誤報(bào)和漏報(bào)情況.

    Table 6 Experimental Results of Benchmark Programs

    3.3開源項(xiàng)目實(shí)驗(yàn)數(shù)據(jù)及分析

    利用一組開源程序進(jìn)行檢測,進(jìn)一步評估本文的方法在復(fù)雜程序中檢測不可達(dá)路徑的準(zhǔn)確性和性能,這些開源程序可以從SIR(software-artifact infrastructure repository)①下載.這些程序都不是以數(shù)值計(jì)算為主的程序.其中,NanoXML是一個(gè)小型的XML解析器,XML-security為XML數(shù)字簽名工具,具有較高的代碼量和復(fù)雜的程序結(jié)構(gòu).此外,本節(jié)將本文的方法與Gong的方法[23]和Suhendra的方法[11]進(jìn)行了對比.Gong方法利用最大似然估計(jì)法獲取分支相關(guān)性(B-B相關(guān)性)信息,進(jìn)而實(shí)現(xiàn)不可達(dá)路徑的檢測;Suhendra方法使用靜態(tài)分支相關(guān)性分析方法,通過檢查賦值語句和分支判斷語句之間、不同分支判斷語句之間是否存在沖突來檢測程序中的不可達(dá)路徑.表7中列出了被測程序的信息,表8為對開源程序的不可達(dá)路徑檢測結(jié)果.其中,表8的第2列為總路徑數(shù).基于程序控制流圖分析,先計(jì)算普通分支或嵌套分支結(jié)構(gòu)對應(yīng)的路徑數(shù),然后根據(jù)各部分間的連接方式(如串接等)計(jì)算程序的總路徑數(shù);第3列為不可達(dá)路徑數(shù).通過本文方法檢測到的不可達(dá)路徑數(shù)與人工分析得到的不可達(dá)路徑數(shù)進(jìn)行對比.本文的一位作者與 2名大學(xué)四年級學(xué)生花費(fèi)近2個(gè)月時(shí)間,手動分析來評估試驗(yàn)結(jié)果的正確性,借助Soot,GraphViz②等工具對程序的數(shù)據(jù)依賴、調(diào)用依賴關(guān)系等信息進(jìn)行可視化處理,一定程度上降低了手動分析的工作量.圖5和圖6分別從分支節(jié)點(diǎn)覆蓋率和檢測精度2個(gè)方面將本文的方法與其他 2種方法進(jìn)行了比較.

    Table 7 Descriptions of Industry Programs

    Table 8 Comparison of Results of SIR’s Programs

    Fig. 5 Comparison of branch node coverage of three methods.圖5 分支節(jié)點(diǎn)覆蓋率比較

    Fig. 6 Comparison of detection accuracy of three methods.圖6 檢測精度比較

    從表8、圖5和圖6可以看到,本文方法可以檢測出程序中所有不可達(dá)路徑.而Suhendra方法由于在分析賦值語句對分支判斷語句的影響時(shí),僅能分析對變量直接進(jìn)行常量賦值的賦值語句,且該方法不能很好地處理帶有循環(huán)等結(jié)構(gòu)的程序.因此該方法只能檢測出程序中的部分不可達(dá)路徑,分支節(jié)點(diǎn)覆蓋率和檢測精度較低.特別是在分析程序Elevator時(shí),Suhendra方法檢測精度僅有32.8%.Gong方法分支節(jié)點(diǎn)覆蓋率較高,但是由于該方法沒有對A-B相關(guān)性進(jìn)行分析,且在分析B-B相關(guān)性時(shí),該方法需要對具有B-B相關(guān)性的分支判斷語句的個(gè)數(shù)的最大值進(jìn)行限定,無法檢測到由多于限定值的分支判斷語句間B-B相關(guān)性而引起的不可達(dá)路徑.因此,在檢測精度方面,Gong方法相對于本文方法較低.

    綜上所述,不管是對基準(zhǔn)程序還是開源項(xiàng)目,本文方法在不可達(dá)路徑檢測方面都有較好效果,可以準(zhǔn)確地檢測出被測程序中的不可達(dá)路徑.當(dāng)分支節(jié)點(diǎn)覆蓋率小于100%時(shí),本文方法可能產(chǎn)生誤報(bào)和漏報(bào).我們在隨機(jī)抽樣階段已采取措施將此可能性降到最低.在2組實(shí)驗(yàn)中,本文方法均未出現(xiàn)誤報(bào)和漏報(bào)情況.在時(shí)間復(fù)雜度方面,假設(shè)待測程序的語句條數(shù)為N,本文方法的時(shí)間復(fù)雜度為O(4N2),Gong方法的復(fù)雜度為O(3N2),Suhendra方法的時(shí)間復(fù)雜度為O(2N2),本文的方法在時(shí)間復(fù)雜度方面較其他2種方法稍有增加,但總體上仍屬于同一個(gè)數(shù)量級.可見,本文方法是一種有效的檢測程序中不可達(dá)路徑的方法,可有效地提高軟件測試的效率.

    4相關(guān)工作

    目前,很多學(xué)者針對不可達(dá)路徑檢測開展廣泛研究,提出了若干解決方法.常見的方法主要有靜態(tài)檢測方法和動態(tài)檢測方法2類:

    1) 靜態(tài)檢測方法可分為基于路徑條件可滿足性的檢測方法和基于分支相關(guān)性檢測方法.在路徑條件可滿足性分析方面,文獻(xiàn)[3-5]使用方程組來表示各條路徑,通過判斷方程組是否有解來判定路徑的可達(dá)性.然而,這類方法的復(fù)雜度較高,而且在處理帶有數(shù)組、指針等結(jié)構(gòu)的程序時(shí),不能很好地工作;文獻(xiàn)[6-7]將區(qū)間算術(shù)用于判斷路徑的可達(dá)性,但是該類方法不能很好地解決條件謂詞中包含非線性表達(dá)式的情況;Ding等人[8]使用符號執(zhí)行技術(shù)對符合代碼模式的分支進(jìn)行分析,進(jìn)而實(shí)現(xiàn)不可達(dá)路徑的檢測;肖慶等人[9]使用變量的抽象取值范圍來表示屬性狀態(tài)條件,通過判斷屬性狀態(tài)條件中的變量取值范圍是否為空來判斷路徑的可達(dá)性.在分支相關(guān)性的分析方面,Bodik等人[10]在傳統(tǒng)的數(shù)據(jù)流分析中加入了分支相關(guān)性分析,從而提高傳統(tǒng)數(shù)據(jù)流分析的精度;Suhendra等人[11]通過檢查賦值語句和分支語句之間、不同分支語句之間是否存在沖突來檢測不可達(dá)路徑.然而,該方法在分析賦值語句對分支語句的影響時(shí),僅能分析對變量直接進(jìn)行常量賦值的賦值語句,且該方法不能很好地處理帶有循環(huán)等結(jié)構(gòu)的程序;Burhan等人[12]使用靜態(tài)分析技術(shù)對程序的控制流和數(shù)據(jù)流進(jìn)行分析,確定存在相關(guān)性的語句,進(jìn)而檢測不可達(dá)路徑;Frank[13]對傳統(tǒng)的數(shù)據(jù)流分析算法進(jìn)行了改進(jìn),并將其用于面向?qū)ο蟪绦虻牟豢蛇_(dá)路徑檢測;Mu等人[14]提出了一種面向函數(shù)調(diào)用關(guān)系的不可達(dá)路徑檢測算法,通過分析程序的控制流和數(shù)據(jù)流信息獲取條件分支相關(guān)性信息,從而實(shí)現(xiàn)面向函數(shù)的不可達(dá)路徑的檢測.在靜態(tài)檢測方法中,基于路徑條件可滿足性的檢測方法復(fù)雜度較高,而基于分支相關(guān)性的檢測方法分支節(jié)點(diǎn)覆蓋率較低.本文提出了一種基于分支相關(guān)性分析、動靜態(tài)結(jié)合的不可達(dá)路徑檢測方法,通過關(guān)聯(lián)分析和數(shù)據(jù)流分析獲取分支相關(guān)性信息,提高了不可達(dá)路徑的檢測精度,并有效克服了使用純靜態(tài)分支相關(guān)性分析方法分支節(jié)點(diǎn)覆蓋率低的問題,能有效處理帶有復(fù)雜謂詞表達(dá)式的程序.

    2) 動態(tài)檢測方法通常是在對目標(biāo)路徑生成測試數(shù)據(jù)階段來判定路徑的可達(dá)性.Balakrishnan等人[15]提出了一種語義更新技術(shù),它能從語義上自動排除程序中的不可達(dá)路徑.文獻(xiàn)[16-17]利用遺傳算法來檢測不可達(dá)路徑,為了更好地引導(dǎo)搜索,該類方法通過結(jié)合控制流圖進(jìn)行適應(yīng)度函數(shù)的設(shè)計(jì).然而,該類方法的計(jì)算代價(jià)較大.本文方法利用JDI獲取分支判斷語句的執(zhí)行信息,并在此基礎(chǔ)上采用關(guān)聯(lián)分析技術(shù)確定分支的相關(guān)性信息,降低了計(jì)算代價(jià).

    除以上2類主要方法外,研究人員還提出一些動靜態(tài)結(jié)合的不可達(dá)路徑檢測方法.Yang等人[24]首先使用靜態(tài)數(shù)據(jù)流分析方法評估路徑的可達(dá)性,路徑中定義使用對懲罰值之和越低表示路徑的可達(dá)性越高,然后根據(jù)評估值移除路徑集中的不可達(dá)路徑,最后針對靜態(tài)方法未檢測到的不可達(dá)路徑,在測試數(shù)據(jù)生成階段利用基于元啟發(fā)式動態(tài)分析技術(shù)進(jìn)行檢測.Gong等人[23]首先通過最大似然估計(jì)法計(jì)算分支判斷語句不同輸出結(jié)果的條件分布概率值,確定分支相關(guān)性(B-B相關(guān)性),然后根據(jù)分支相關(guān)性檢測不可達(dá)路徑.與本文方法不同的是:1)Gong方法沒有分析A-B相關(guān)性信息,無法檢測到僅由純A-B相關(guān)性引起(不是由B-B相關(guān)性引起)的不可達(dá)路徑;2)在對開源項(xiàng)目進(jìn)行不可達(dá)路徑檢測時(shí),該方法對具有B-B相關(guān)性的分支判斷語句數(shù)的最大值進(jìn)行了限定,無法檢測到由多于限定值的分支判斷語句間的B-B相關(guān)性而引起的不可達(dá)路徑,而本文的方法無需此約束即可檢測由任意分支判斷語句間B-B相關(guān)性引起的不可達(dá)路徑,從而具備更強(qiáng)的適用性.

    本文方法利用關(guān)聯(lián)分析和數(shù)據(jù)流分析技術(shù)對引起分支相關(guān)性的情況進(jìn)行全面的分析,具有較強(qiáng)的不可達(dá)路徑檢測能力和較高的檢測精度,可以準(zhǔn)確地檢測出被測程序中的不可達(dá)路徑.綜上所述,本文方法是一種有效的不可達(dá)路徑檢測方法,可以有效地提高軟件測試的效率.

    5結(jié)論與進(jìn)一步工作

    本文提出了一種新的不可達(dá)路徑檢測方法,首先構(gòu)建反映各分支判斷語句靜態(tài)依賴關(guān)系和動態(tài)執(zhí)行信息數(shù)據(jù)集;然后利用關(guān)聯(lián)分析方法獲取B-B相關(guān)性信息,在此基礎(chǔ)上利用靜態(tài)數(shù)據(jù)流分析技術(shù)獲取純A-B相關(guān)性信息,提高了不可達(dá)路徑的檢測精度;最后根據(jù)分支相關(guān)性檢測不可達(dá)路徑.通過實(shí)驗(yàn)與分析,本文方法能夠準(zhǔn)確地檢測出程序中的不可達(dá)路徑,進(jìn)而可以有效地提高軟件測試的效率.

    未來還有幾個(gè)方面的問題需要深入研究:如針對本文的方法還需要進(jìn)行大量的實(shí)驗(yàn)進(jìn)行驗(yàn)證;進(jìn)一步完善我們的原型工具,為后續(xù)的路徑測試提供有價(jià)值的信息.此外,對關(guān)聯(lián)分析方法進(jìn)一步的改進(jìn)和優(yōu)化,使其更適用于B-B分支相關(guān)性的確定;如何縮減冗余的強(qiáng)關(guān)聯(lián)規(guī)則也是我們未來研究方向之一.

    參考文獻(xiàn)

    [1]Shan Jinhui, Jiang Ying, Sun Ping. The progress of testing research[J]. Journal of Beijing University, 2005, 41(1): 134-145 (in Chinese)(單錦輝, 姜瑛, 孫萍. 軟件測試研究進(jìn)展[J]. 北京大學(xué)學(xué)報(bào), 2005, 41(1): 134-145)

    [2]Hedley D, Hennell M A. The causes and effects of infeasible paths in computer programs[C]Proc of the 8th Int Conf on Software Engineering. New York: ACM, 1985: 259-266

    [3]Coward P D. Symbolic execution and testing[J]. Information and Software Technology, 1991, 33(1): 53-64

    [4]Goldberg A, Wang T C, Zimmerman D. Applications of feasible path analysis to program testing[C]Proc of the 1994 Int Symp on Software Testing and Analysis. New York: ACM, 1994: 80-94

    [5]Cadar C, Dunbar D, Engler D. KLEE: Unassisted and automatic generation of high-coverage tests for complex systems programs[C]Proc of the 8th USENIX Conf on Operating Systems Design and Implementation. Berkeley: USENIX Association, 2008: 209-224

    [6]Wang Silan, Wang Yawen, Gong Yunzhan. Path chooses based on interval arithmetic for unit coverage testing[J]. Journal of Tsinghua University, 2011, 51(S1): 1402-1406 (in Chinese)(王思嵐, 王雅文, 宮云戰(zhàn). 單元覆蓋測試中基于區(qū)間運(yùn)算的路徑選擇[J]. 清華大學(xué)學(xué)報(bào), 2011, 51(S1): 1402-1406)

    [7]Wang Zhiyan, Liu Chunnian. Applications of interval arithmetic to software testing[J]. Journal of Software, 1998, 9(6): 438-443 (in Chinese)(王志言, 劉椿年. 區(qū)間算術(shù)在軟件測試中的應(yīng)用[J]. 軟件學(xué)報(bào), 1998, 9(6): 438-443)

    [8]Ding S, Zhang H Y, Tan H B K. Detecting infeasible branches based on code patterns[C]Proc of the CSMR-WCRE Conf on Software Maintenance, Reengineering and Reverse Engineering. Piscataway, NJ: IEEE, 2014: 74-83

    [9]Xiao Qing, Gong Yunzhan, Yang Zhaohong, et al. Path sensitive static defect detecting method[J]. Journal of Software, 2010, 21(2): 209-217 (in Chinese)(肖慶, 宮云戰(zhàn), 楊朝紅, 等. 一種路徑敏感的靜態(tài)缺陷檢測方法[J]. 軟件學(xué)報(bào), 2010, 21(2): 209-217)

    [10]Bodik R, Gupta R, Soffa M L. Refining data flow information using infeasible paths[C]Proc of the 6th European Software Engineering Conf and the 5th ACM SIGSOFT Symp on the Foundations of Software Engineering. New York: ACM, 1997: 361-377

    [11]Suhendra V, Mitra T, Roychoudhury A, et al. Efficient detection and exploitation of infeasible paths for software timing analysis[C]Proc of the IEEEACM Design Automation Conf. New York: ACM, 2006: 358-363

    [12]Burhan B, Izzat A. Infeasible paths detection using static analysis[J]. The Research Bulletin of Jordan ACM, 2013, 2(3): 120-126

    [13]Frank T. Infeasible paths in object-oriented programs[J]. Science of Computer Programming, 2015, 97(P1): 91-97

    [14]Mu Yongmin, Zheng Yuhui, Zhang Zhihua, et al. The algorithm of infeasible paths extraction oriented the function calling relationship[J]. Chinese Journal of Electronics, 2012, 21(2): 236-240

    [16]Bueno P M S, Jino M. Identification of potentially infeasible program paths by monitoring the search for test data[C]Proc of the 15th IEEE Int Automated Software Engineering Conf. Piscataway, NJ: IEEE, 2000: 209-218

    [17]Goldberg D E. Genetic Algorithms in Search, Optimization and Machine Learning[M]. New York: Addison-Wesley, 1989

    [18]Chen Rui. Infeasible path identification and its application in structural test[D]. Beijing: Institute of Computing Technology, Chinese Academy of Sciences, 2006 (in Chinese)(陳蕊. 程序中不可達(dá)路徑的識別及其在結(jié)構(gòu)測試中的應(yīng)用[D]. 北京: 中國科學(xué)院計(jì)算技術(shù)研究所, 2006)

    [19]Agrawal H. Dominators, super blocks, and program coverage[C]Proc of the 21st Annual ACM SIGPLAN-SIGACT Symp on Principles of Programming Languages. New York: ACM, 1994: 25-34

    [20]Mao Chengying, Lu Yansheng. A simplified method for generating test path cases in branch testing[J]. Journal of Computer Research and Development, 2006, 43(2): 321-328 (in Chinese)(毛澄映, 盧炎生. 分支測試中測試路徑用例的簡化生成方法[J]. 計(jì)算機(jī)研究與發(fā)展, 2006, 43(2): 321-328)

    [21]Shen Bin. Research on the technologies of association rules[D]. Hangzhou: Zhejiang University, 2007 (in Chinese)(沈斌. 關(guān)聯(lián)規(guī)則相關(guān)技術(shù)研究[D]. 杭州: 浙江大學(xué), 2007)

    [22]Han Jiawei, Pei Jian, Yin Yiwen. Mining frequent patterns without candidate generation[C]Proc of the 2000 ACM SIGMOD Int Conf on Management of Data. New York: ACM, 2000: 1-12

    [23]Gong Dunwei, Yao Xiangjuan. Automatic detection of infeasible paths in software testing[J]. IET Software, 2010, 4(5): 361-370

    [24]Yang Rui, Chen Zhenyu, Xu Baowen, et al. Improve the effectiveness of test case generation on EFSM via automatic path feasibility analysis[C]Proc of the 13th IEEE Int High Assurance Systems Engineering Symp. Piscataway, NJ: IEEE, 2011: 17-24

    Jiang Shujuan, born in 1966. Professor and PhD supervisor. Member of China Computer Federation. Her research interests include compilation techniques and software engineering.

    Han Han, born in 1989. Master. Her research interests include program analysis and software testing (hhan@cumt.edu.cn).

    Shi Jiaojiao, born in 1988. Master. Her research interests include program analysis and software testing (sjiao888@126.com).

    Zhang Yanmei, born in 1982. PhD and lecturer. Her research interests include program analysis and software testing (ymzhang@cumt.edu.cn).

    Ju Xiaolin, born in 1976. PhD and associate professor. His research interests include program analysis and software testing (XiaolinJu@gmail.edu.cn).

    Qian Junyan, born in 1973. PhD and professor. Member of China Computer Federation. His research interests include software engineering, model checking and program verification (qjy2000@guet.edu.cn).

    Detecting Infeasible Paths Based on Branch Correlations Analysis

    Jiang Shujuan1,4, Han Han1, Shi Jiaojiao1, Zhang Yanmei1,2, Ju Xiaolin1,3, and Qian Junyan4

    1(SchoolofComputerScienceandTechnology,ChinaUniversityofMiningandTechnology,Xuzhou,Jiangsu221116)2(StateKeyLaboratoryforNovelSoftwareTechnology(NanjingUniversity),Nanjing210023)3(SchoolofComputerScienceandTechnology,NantongUniversity,Nantong,Jiangsu226019)4(GuangxiKeyLaboratoryofTrustedSoftware(GuilinUniversityofElectronicTechnology),Guilin,Guangxi541004)

    AbstractThe existence of infeasible paths causes a waste of test resources in software testing. Detecting these infeasible paths effectively can save test resources and improve test efficiency. Since the correlation of different conditional statements is the main reason of causing infeasible paths of a program and it costs effort for attempting to cover these paths which are never executed during software testing, the determination of branch correlations plays an important role in detecting infeasible paths. The paper proposes a new approach for detecting the infeasible paths based on association analysis and data flow analysis. Firstly, it builds the data-sets that reflect the static dependencies and the dynamic execution information of conditional statements by combining static analysis with dynamic analysis; then, with two types of branch correlations (called A-B correlation and B-B correlation) defined, it determines the branch correlations respectively with two introduced algorithms which are based on association analysis and data flow analysis; finally, it detects the infeasible paths in accordance with the obtained and refined branch correlations. The paper applies the proposed approach to some benchmarks programs and industry programs to validate its efficiency and effectiveness. The experimental results indicate that our approach can detect infeasible paths accurately and improve the efficiency of software testing.

    Key wordssoftware testing; infeasible paths; branch correlations; association analysis; data flow analysis

    收稿日期:2014-09-15;修回日期:2015-10-09

    基金項(xiàng)目:國家自然科學(xué)基金項(xiàng)目(61502497,61562015);計(jì)算機(jī)軟件新技術(shù)國家重點(diǎn)實(shí)驗(yàn)室(南京大學(xué))基金項(xiàng)目(KFKT2014B19);廣西可信軟件重點(diǎn)實(shí)驗(yàn)室(桂林電子科技大學(xué))研究課題(kx201530);南通市應(yīng)用研究計(jì)劃基金項(xiàng)目(BK2014055)

    中圖法分類號TP311

    This work was supported by the National Natural Science Foundation of China (61502497,61562015), the Foundation of State Key Laboratory for Novel Software Technology (Nanjing University) (KFKT2014B19), the Foundation of Guangxi Key Laboratory of Trusted Software (Guilin University of Electronic Technology) (kx201530), and the Nantong Application Research Plan Foundation (BK2014055).

    猜你喜歡
    關(guān)聯(lián)分析軟件測試
    基于OBE的軟件測試課程教學(xué)改革探索
    航天軟件測試模型構(gòu)建與應(yīng)用
    軟件(2020年3期)2020-04-20 01:45:34
    EXCEL和VBA實(shí)現(xiàn)軟件測試記錄管理
    電子制作(2018年16期)2018-09-26 03:27:18
    關(guān)于軟件測試技術(shù)應(yīng)用與發(fā)展趨勢研究
    電子測試(2017年15期)2017-12-18 07:19:20
    玉米骨干親本及其衍生系中基因的序列變異及與株高等性狀的關(guān)聯(lián)分析
    玉米骨干親本及其衍生系中基因的序列變異及與株高等性狀的關(guān)聯(lián)分析
    基于隨機(jī)函數(shù)Petri網(wǎng)的系統(tǒng)動力學(xué)關(guān)聯(lián)分析模型
    關(guān)聯(lián)分析技術(shù)在學(xué)生成績分析中的應(yīng)用
    基于關(guān)聯(lián)分析的學(xué)生活動參與度與高校社團(tuán)管理實(shí)證研究
    科技視界(2016年15期)2016-06-30 12:43:00
    不同的數(shù)據(jù)挖掘方法分類對比研究
    国产主播在线观看一区二区 | 狠狠精品人妻久久久久久综合| 日韩视频在线欧美| av有码第一页| 麻豆国产av国片精品| 熟女少妇亚洲综合色aaa.| 午夜91福利影院| 飞空精品影院首页| 久久毛片免费看一区二区三区| 欧美日韩亚洲综合一区二区三区_| 观看av在线不卡| 黑人欧美特级aaaaaa片| 国产精品免费视频内射| 久久精品aⅴ一区二区三区四区| 久久人妻熟女aⅴ| 亚洲av成人精品一二三区| 欧美日韩视频高清一区二区三区二| 国产精品99久久99久久久不卡| 国产日韩欧美亚洲二区| 国产有黄有色有爽视频| 国产成人91sexporn| 校园人妻丝袜中文字幕| 999精品在线视频| 国产xxxxx性猛交| 久久国产精品大桥未久av| 一区在线观看完整版| 搡老乐熟女国产| 一二三四在线观看免费中文在| 亚洲欧美一区二区三区国产| 欧美97在线视频| 国产精品国产av在线观看| 看十八女毛片水多多多| 亚洲av成人精品一二三区| 一级毛片女人18水好多 | 视频区图区小说| 天堂8中文在线网| 成年人午夜在线观看视频| 91成人精品电影| 在线精品无人区一区二区三| 亚洲美女黄色视频免费看| 夫妻午夜视频| 国产亚洲av高清不卡| 国产主播在线观看一区二区 | 在线观看www视频免费| 久久久欧美国产精品| 纵有疾风起免费观看全集完整版| 久久久国产一区二区| 亚洲自偷自拍图片 自拍| 丁香六月天网| 久久99一区二区三区| 亚洲国产av影院在线观看| 国产av国产精品国产| 国产成人欧美| 看十八女毛片水多多多| 国产一区亚洲一区在线观看| 水蜜桃什么品种好| 蜜桃在线观看..| 1024视频免费在线观看| 国产成人av激情在线播放| 一区二区三区激情视频| 黄色视频不卡| 国产麻豆69| 日日爽夜夜爽网站| 国产精品免费视频内射| 国产深夜福利视频在线观看| 女人高潮潮喷娇喘18禁视频| 在线精品无人区一区二区三| 中文欧美无线码| 久久久久精品国产欧美久久久 | 午夜两性在线视频| 赤兔流量卡办理| 1024视频免费在线观看| av国产精品久久久久影院| 亚洲国产成人一精品久久久| 国产有黄有色有爽视频| www.精华液| 国产精品久久久久久精品电影小说| 国产又爽黄色视频| 亚洲精品日韩在线中文字幕| 日本猛色少妇xxxxx猛交久久| 国产精品人妻久久久影院| 巨乳人妻的诱惑在线观看| 亚洲精品国产区一区二| 国产精品国产三级国产专区5o| 欧美av亚洲av综合av国产av| 亚洲国产精品一区二区三区在线| 国产精品欧美亚洲77777| 欧美精品亚洲一区二区| 欧美老熟妇乱子伦牲交| 男人操女人黄网站| 啦啦啦中文免费视频观看日本| 亚洲三区欧美一区| 国产在线一区二区三区精| 美女高潮到喷水免费观看| 欧美xxⅹ黑人| 精品欧美一区二区三区在线| 亚洲中文字幕日韩| 国产片特级美女逼逼视频| 欧美av亚洲av综合av国产av| 汤姆久久久久久久影院中文字幕| 丁香六月欧美| 亚洲欧美色中文字幕在线| 免费观看人在逋| 国产一区亚洲一区在线观看| 欧美精品啪啪一区二区三区 | 国产深夜福利视频在线观看| 欧美精品一区二区大全| 成人18禁高潮啪啪吃奶动态图| 亚洲精品第二区| 少妇被粗大的猛进出69影院| 亚洲美女黄色视频免费看| 中文字幕av电影在线播放| 亚洲图色成人| 一级,二级,三级黄色视频| 中国国产av一级| 亚洲欧美激情在线| 国产精品九九99| 国产精品秋霞免费鲁丝片| 亚洲av片天天在线观看| 久久狼人影院| 午夜av观看不卡| 久久99热这里只频精品6学生| 午夜精品国产一区二区电影| 少妇裸体淫交视频免费看高清 | 啦啦啦在线观看免费高清www| 女性被躁到高潮视频| 在线观看一区二区三区激情| 只有这里有精品99| 日日爽夜夜爽网站| 无遮挡黄片免费观看| 纵有疾风起免费观看全集完整版| 国产一区二区 视频在线| 国产一级毛片在线| 亚洲av日韩在线播放| 国产男人的电影天堂91| 国产日韩欧美视频二区| 久久精品国产亚洲av涩爱| 观看av在线不卡| 精品卡一卡二卡四卡免费| 亚洲伊人色综图| 天堂中文最新版在线下载| 国产激情久久老熟女| 国产精品免费视频内射| 亚洲av日韩精品久久久久久密 | 国产无遮挡羞羞视频在线观看| 岛国毛片在线播放| 大片电影免费在线观看免费| 蜜桃国产av成人99| 欧美日韩综合久久久久久| 大码成人一级视频| 亚洲精品中文字幕在线视频| 成年美女黄网站色视频大全免费| 黄片播放在线免费| 丝袜喷水一区| 1024视频免费在线观看| 脱女人内裤的视频| 国产精品香港三级国产av潘金莲 | 久久精品国产a三级三级三级| 丝袜美腿诱惑在线| 亚洲国产中文字幕在线视频| 丰满饥渴人妻一区二区三| 岛国毛片在线播放| 男女边吃奶边做爰视频| 亚洲 国产 在线| 狠狠婷婷综合久久久久久88av| 欧美中文综合在线视频| 99久久人妻综合| 国产成人精品无人区| 亚洲国产精品一区三区| 少妇精品久久久久久久| 91国产中文字幕| 午夜日韩欧美国产| 久久久欧美国产精品| 免费观看a级毛片全部| 丰满少妇做爰视频| 国产精品久久久人人做人人爽| 国产黄频视频在线观看| 美国免费a级毛片| 午夜免费观看性视频| 欧美精品av麻豆av| 女人被躁到高潮嗷嗷叫费观| 在线亚洲精品国产二区图片欧美| 人妻一区二区av| 这个男人来自地球电影免费观看| av天堂久久9| 国产亚洲一区二区精品| 国产淫语在线视频| 亚洲欧美精品自产自拍| 最新在线观看一区二区三区 | 国产片特级美女逼逼视频| 亚洲av综合色区一区| 在线观看免费视频网站a站| 免费观看av网站的网址| 自拍欧美九色日韩亚洲蝌蚪91| 国产精品熟女久久久久浪| 成年av动漫网址| 90打野战视频偷拍视频| 女人精品久久久久毛片| 国产成人a∨麻豆精品| 国产无遮挡羞羞视频在线观看| 国产在线免费精品| 精品一区二区三区四区五区乱码 | h视频一区二区三区| 大香蕉久久成人网| 久久国产亚洲av麻豆专区| 婷婷色av中文字幕| 无遮挡黄片免费观看| 女人久久www免费人成看片| 婷婷色麻豆天堂久久| 国产精品欧美亚洲77777| 午夜激情av网站| 亚洲精品日韩在线中文字幕| 亚洲五月婷婷丁香| 精品欧美一区二区三区在线| 最近手机中文字幕大全| 丝瓜视频免费看黄片| 国产亚洲欧美在线一区二区| 国产一区二区在线观看av| 免费在线观看视频国产中文字幕亚洲 | 亚洲av成人精品一二三区| 国产精品一区二区精品视频观看| 国产精品一区二区在线观看99| 2018国产大陆天天弄谢| 女人被躁到高潮嗷嗷叫费观| 久久免费观看电影| 亚洲国产最新在线播放| 91精品三级在线观看| 成年女人毛片免费观看观看9 | 亚洲欧美一区二区三区黑人| 国产99久久九九免费精品| 亚洲国产毛片av蜜桃av| 免费在线观看黄色视频的| 成年人午夜在线观看视频| 美女高潮到喷水免费观看| 男女边吃奶边做爰视频| 国产在线观看jvid| 99热国产这里只有精品6| 国产精品一区二区精品视频观看| 精品久久久久久久毛片微露脸 | 黄色毛片三级朝国网站| 蜜桃在线观看..| 成人国语在线视频| 女人被躁到高潮嗷嗷叫费观| 日韩av不卡免费在线播放| av国产久精品久网站免费入址| 国产91精品成人一区二区三区 | 观看av在线不卡| a 毛片基地| 午夜福利免费观看在线| 青春草亚洲视频在线观看| 精品人妻1区二区| 只有这里有精品99| 久热爱精品视频在线9| 国产av精品麻豆| 精品一区二区三区av网在线观看 | 国产片特级美女逼逼视频| 国产精品.久久久| 欧美少妇被猛烈插入视频| 亚洲av在线观看美女高潮| 久久99精品国语久久久| 欧美性长视频在线观看| 美女高潮到喷水免费观看| 国产片内射在线| 欧美av亚洲av综合av国产av| 久久精品久久久久久噜噜老黄| 秋霞在线观看毛片| a级毛片在线看网站| 精品久久久精品久久久| 久久精品人人爽人人爽视色| 亚洲色图综合在线观看| 深夜精品福利| 成人18禁高潮啪啪吃奶动态图| 国产又爽黄色视频| 欧美黄色淫秽网站| 人人妻,人人澡人人爽秒播 | 久久精品久久久久久久性| 高清黄色对白视频在线免费看| 91精品国产国语对白视频| 亚洲人成网站在线观看播放| 少妇的丰满在线观看| 成年av动漫网址| 亚洲黑人精品在线| 黄片播放在线免费| 巨乳人妻的诱惑在线观看| 亚洲色图 男人天堂 中文字幕| 国产av国产精品国产| 成年动漫av网址| 少妇人妻久久综合中文| 丝瓜视频免费看黄片| 欧美精品一区二区免费开放| 日韩 亚洲 欧美在线| 中文字幕另类日韩欧美亚洲嫩草| 国产免费一区二区三区四区乱码| 欧美人与善性xxx| 亚洲欧洲日产国产| 午夜福利乱码中文字幕| 久久久久久亚洲精品国产蜜桃av| 97在线人人人人妻| 午夜老司机福利片| www.自偷自拍.com| 国产熟女午夜一区二区三区| 超碰97精品在线观看| 麻豆av在线久日| 老司机亚洲免费影院| 成人亚洲精品一区在线观看| 欧美日韩视频高清一区二区三区二| 成人午夜精彩视频在线观看| svipshipincom国产片| 国产在线观看jvid| 99久久精品国产亚洲精品| 纯流量卡能插随身wifi吗| 一区二区三区精品91| 国产精品熟女久久久久浪| 丝袜美腿诱惑在线| 国语对白做爰xxxⅹ性视频网站| 午夜福利,免费看| www.熟女人妻精品国产| 另类亚洲欧美激情| 国产人伦9x9x在线观看| 无遮挡黄片免费观看| 婷婷色麻豆天堂久久| 亚洲欧美日韩高清在线视频 | 最新的欧美精品一区二区| 欧美另类一区| 女人被躁到高潮嗷嗷叫费观| 欧美人与善性xxx| 又大又黄又爽视频免费| 亚洲自偷自拍图片 自拍| 国产一区有黄有色的免费视频| 亚洲九九香蕉| e午夜精品久久久久久久| 国产精品免费视频内射| 美女高潮到喷水免费观看| 婷婷丁香在线五月| 老汉色∧v一级毛片| 性色av乱码一区二区三区2| 青春草亚洲视频在线观看| 国产亚洲av片在线观看秒播厂| 香蕉国产在线看| 日本欧美国产在线视频| 深夜精品福利| 大香蕉久久成人网| 久久中文字幕一级| 视频区图区小说| 国产99久久九九免费精品| 国产精品一区二区精品视频观看| 男女无遮挡免费网站观看| 嫁个100分男人电影在线观看 | 亚洲欧美日韩另类电影网站| 亚洲精品一二三| 亚洲av成人精品一二三区| 国产精品一区二区精品视频观看| 国产在线免费精品| av网站在线播放免费| 妹子高潮喷水视频| 香蕉丝袜av| 亚洲情色 制服丝袜| 波多野结衣av一区二区av| 国产黄频视频在线观看| 亚洲欧美一区二区三区久久| 亚洲人成网站在线观看播放| 亚洲av成人精品一二三区| 国产视频一区二区在线看| av有码第一页| 亚洲国产欧美网| 五月开心婷婷网| 国产成人免费无遮挡视频| 18禁国产床啪视频网站| 国产精品一区二区免费欧美 | 亚洲激情五月婷婷啪啪| 一边摸一边做爽爽视频免费| 国产黄色免费在线视频| 亚洲欧美激情在线| 后天国语完整版免费观看| 国产片特级美女逼逼视频| 99国产精品一区二区蜜桃av | 超色免费av| 午夜两性在线视频| 成人黄色视频免费在线看| 丝袜在线中文字幕| 亚洲av成人精品一二三区| 国产深夜福利视频在线观看| 成人国产av品久久久| 2021少妇久久久久久久久久久| 美女脱内裤让男人舔精品视频| 女人爽到高潮嗷嗷叫在线视频| 色网站视频免费| 日韩免费高清中文字幕av| 少妇裸体淫交视频免费看高清 | 曰老女人黄片| 这个男人来自地球电影免费观看| 丰满饥渴人妻一区二区三| 两性夫妻黄色片| 好男人视频免费观看在线| 宅男免费午夜| 精品人妻1区二区| 色94色欧美一区二区| 国产精品 欧美亚洲| 老司机靠b影院| 日本a在线网址| 亚洲情色 制服丝袜| 巨乳人妻的诱惑在线观看| 99热国产这里只有精品6| 国产亚洲av高清不卡| 国产成人精品久久久久久| 日日夜夜操网爽| 国产一卡二卡三卡精品| av又黄又爽大尺度在线免费看| 成年av动漫网址| 免费人妻精品一区二区三区视频| 老司机亚洲免费影院| 老司机影院毛片| 久久99热这里只频精品6学生| 国产av一区二区精品久久| 十分钟在线观看高清视频www| 悠悠久久av| 亚洲精品久久久久久婷婷小说| 中文乱码字字幕精品一区二区三区| 午夜福利免费观看在线| 亚洲av电影在线观看一区二区三区| 亚洲精品久久成人aⅴ小说| 黑人猛操日本美女一级片| 国产91精品成人一区二区三区 | 国产熟女午夜一区二区三区| 99久久人妻综合| 18禁裸乳无遮挡动漫免费视频| 精品一区二区三卡| 欧美精品av麻豆av| 啦啦啦 在线观看视频| 丝袜美足系列| 男女之事视频高清在线观看 | 国产有黄有色有爽视频| a 毛片基地| 超色免费av| 男人爽女人下面视频在线观看| 亚洲成色77777| 好男人视频免费观看在线| 午夜福利在线免费观看网站| 国精品久久久久久国模美| 午夜福利一区二区在线看| 两个人看的免费小视频| 久久久久精品人妻al黑| netflix在线观看网站| 国产成人精品久久久久久| 狂野欧美激情性bbbbbb| 久9热在线精品视频| 乱人伦中国视频| 各种免费的搞黄视频| 久久精品aⅴ一区二区三区四区| www.熟女人妻精品国产| 亚洲国产精品999| av国产精品久久久久影院| 亚洲人成77777在线视频| 久久精品亚洲熟妇少妇任你| 又大又爽又粗| 亚洲精品国产av蜜桃| 操出白浆在线播放| 午夜影院在线不卡| av一本久久久久| 99国产精品免费福利视频| 91精品伊人久久大香线蕉| 男男h啪啪无遮挡| 国产伦人伦偷精品视频| 秋霞在线观看毛片| 69精品国产乱码久久久| 在线观看人妻少妇| 国产成人啪精品午夜网站| 亚洲国产精品999| 国产免费视频播放在线视频| 免费观看av网站的网址| 欧美成人午夜精品| 只有这里有精品99| 婷婷色av中文字幕| 国产成人免费观看mmmm| 两个人免费观看高清视频| 久久人人爽av亚洲精品天堂| 久久精品人人爽人人爽视色| 一边摸一边抽搐一进一出视频| 国产成人影院久久av| 欧美成人精品欧美一级黄| 色婷婷av一区二区三区视频| 一区福利在线观看| 色视频在线一区二区三区| 精品久久久久久久毛片微露脸 | 另类精品久久| av片东京热男人的天堂| 欧美黑人精品巨大| 高清不卡的av网站| 亚洲欧美一区二区三区黑人| 久久久精品区二区三区| 两人在一起打扑克的视频| 人妻 亚洲 视频| 欧美精品av麻豆av| 国产成人精品在线电影| 777久久人妻少妇嫩草av网站| 午夜av观看不卡| 91成人精品电影| 高清av免费在线| 亚洲,欧美精品.| 午夜日韩欧美国产| 久久久亚洲精品成人影院| 欧美日韩亚洲高清精品| 亚洲免费av在线视频| 考比视频在线观看| 久久 成人 亚洲| 亚洲国产精品一区二区三区在线| 另类精品久久| 爱豆传媒免费全集在线观看| 欧美黄色片欧美黄色片| 美国免费a级毛片| 18在线观看网站| 黑人巨大精品欧美一区二区蜜桃| 免费久久久久久久精品成人欧美视频| 91精品三级在线观看| 最近手机中文字幕大全| 国产精品偷伦视频观看了| 亚洲av在线观看美女高潮| 多毛熟女@视频| 美女高潮到喷水免费观看| 成年人午夜在线观看视频| 亚洲色图 男人天堂 中文字幕| 波多野结衣av一区二区av| 国产日韩一区二区三区精品不卡| 国产高清不卡午夜福利| 亚洲欧美日韩另类电影网站| 菩萨蛮人人尽说江南好唐韦庄| 80岁老熟妇乱子伦牲交| 国产成人免费无遮挡视频| 欧美精品一区二区大全| 久久久久久久国产电影| www.精华液| 女性生殖器流出的白浆| 老司机在亚洲福利影院| 国产国语露脸激情在线看| 国产精品香港三级国产av潘金莲 | 天堂中文最新版在线下载| 精品国产超薄肉色丝袜足j| 日韩大片免费观看网站| 午夜福利,免费看| 夜夜骑夜夜射夜夜干| 国产精品成人在线| 国产成人系列免费观看| 久久热在线av| 性色av乱码一区二区三区2| 欧美日韩黄片免| 久久久久国产一级毛片高清牌| 亚洲男人天堂网一区| 美国免费a级毛片| 大香蕉久久成人网| 午夜福利视频在线观看免费| 精品一区二区三区av网在线观看 | 亚洲欧美色中文字幕在线| 欧美国产精品一级二级三级| 亚洲,欧美精品.| 黄色a级毛片大全视频| av线在线观看网站| 美女脱内裤让男人舔精品视频| 老司机深夜福利视频在线观看 | 男女之事视频高清在线观看 | 亚洲成色77777| 超碰成人久久| 久久天躁狠狠躁夜夜2o2o | 大香蕉久久成人网| 18禁观看日本| 在线av久久热| avwww免费| 久久青草综合色| 成人亚洲精品一区在线观看| 欧美 亚洲 国产 日韩一| 男女之事视频高清在线观看 | 国产精品九九99| 又黄又粗又硬又大视频| 欧美精品人与动牲交sv欧美| 久久久精品区二区三区| 精品熟女少妇八av免费久了| 国产高清视频在线播放一区 | 老司机深夜福利视频在线观看 | 日日爽夜夜爽网站| 久久免费观看电影| 十八禁高潮呻吟视频| 亚洲国产精品一区三区| 亚洲欧美一区二区三区黑人| 久久久久久久国产电影| 91麻豆av在线| 久久毛片免费看一区二区三区| 91老司机精品| 亚洲第一av免费看| 黄频高清免费视频| 一本综合久久免费| 国产成人精品久久二区二区91| 老司机在亚洲福利影院| 久久性视频一级片| 纯流量卡能插随身wifi吗| 菩萨蛮人人尽说江南好唐韦庄| 欧美av亚洲av综合av国产av| √禁漫天堂资源中文www| 亚洲男人天堂网一区| 少妇猛男粗大的猛烈进出视频| 国产伦人伦偷精品视频| 一级黄片播放器| 国产欧美日韩综合在线一区二区| 天天躁狠狠躁夜夜躁狠狠躁| 91麻豆av在线| 一本一本久久a久久精品综合妖精| 午夜福利视频精品| 大话2 男鬼变身卡| 性色av一级| 99久久精品国产亚洲精品| 久热这里只有精品99| 久久青草综合色| 国产伦人伦偷精品视频| 亚洲成人免费电影在线观看 | 少妇 在线观看| 国产欧美日韩综合在线一区二区| 国产日韩欧美在线精品|