• <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ù)挖掘方法分類對比研究
    又粗又爽又猛毛片免费看| 最近中文字幕高清免费大全6| 精品少妇黑人巨大在线播放 | 免费观看人在逋| 99久久精品热视频| 日本黄色视频三级网站网址| 久久久久国产网址| 少妇的逼水好多| 久久久国产成人精品二区| 亚洲真实伦在线观看| 久久久久久久久久成人| 国产又黄又爽又无遮挡在线| 国产精品久久电影中文字幕| 久久精品国产99精品国产亚洲性色| 久久久久九九精品影院| 深爱激情五月婷婷| 国产亚洲5aaaaa淫片| 亚洲精品自拍成人| 国产欧美日韩精品一区二区| 精品久久久久久久久久久久久| 最近的中文字幕免费完整| 九色成人免费人妻av| 少妇的逼好多水| 国产精品久久久久久久电影| 日韩一区二区视频免费看| 天堂网av新在线| 级片在线观看| 在线免费观看不下载黄p国产| 国产精品久久久久久av不卡| 免费搜索国产男女视频| 色噜噜av男人的天堂激情| 边亲边吃奶的免费视频| 天堂av国产一区二区熟女人妻| 可以在线观看毛片的网站| 欧美成人免费av一区二区三区| 国产精品一区二区三区四区久久| 欧美日韩一区二区视频在线观看视频在线 | 波多野结衣高清作品| 精品熟女少妇av免费看| 天堂av国产一区二区熟女人妻| 别揉我奶头 嗯啊视频| 国产精品一区www在线观看| 欧美zozozo另类| 久久久久久九九精品二区国产| 熟妇人妻久久中文字幕3abv| 国产精品99久久久久久久久| 最近最新中文字幕大全电影3| 欧美zozozo另类| 国产av不卡久久| 我的老师免费观看完整版| 欧美高清成人免费视频www| 性欧美人与动物交配| 国产片特级美女逼逼视频| 欧美日韩乱码在线| 听说在线观看完整版免费高清| 天美传媒精品一区二区| 中文字幕熟女人妻在线| 久久久久久久久大av| 黄色日韩在线| 亚洲丝袜综合中文字幕| 亚洲国产精品国产精品| 国产又黄又爽又无遮挡在线| 99热精品在线国产| 国产av麻豆久久久久久久| 韩国av在线不卡| 国产精品嫩草影院av在线观看| 给我免费播放毛片高清在线观看| 国产人妻一区二区三区在| 在线免费十八禁| 亚洲高清免费不卡视频| 色综合亚洲欧美另类图片| 国产亚洲精品久久久久久毛片| 久久精品国产亚洲av涩爱 | 亚洲av男天堂| 日韩欧美三级三区| 亚洲自偷自拍三级| 日韩成人伦理影院| 99久久成人亚洲精品观看| 欧美色视频一区免费| 嫩草影院精品99| 成人漫画全彩无遮挡| 久久6这里有精品| 天天躁日日操中文字幕| 久久久久网色| 亚洲精品久久国产高清桃花| 少妇裸体淫交视频免费看高清| 我要看日韩黄色一级片| 亚洲自偷自拍三级| 欧美精品国产亚洲| 变态另类丝袜制服| 成年女人永久免费观看视频| 噜噜噜噜噜久久久久久91| 亚洲av男天堂| 我的老师免费观看完整版| av福利片在线观看| 国产成人freesex在线| 亚洲最大成人中文| 久久鲁丝午夜福利片| 色尼玛亚洲综合影院| 国产老妇伦熟女老妇高清| 欧美成人一区二区免费高清观看| 少妇裸体淫交视频免费看高清| 国产精品三级大全| 亚洲av.av天堂| 亚洲欧洲国产日韩| 一级黄色大片毛片| 熟妇人妻久久中文字幕3abv| 欧美变态另类bdsm刘玥| 亚洲国产精品久久男人天堂| 51国产日韩欧美| 亚洲真实伦在线观看| 国产在线男女| 丝袜喷水一区| 国产精品久久电影中文字幕| a级毛色黄片| 在线免费十八禁| 美女cb高潮喷水在线观看| av视频在线观看入口| 色综合站精品国产| 黑人高潮一二区| 亚洲美女视频黄频| 久久精品人妻少妇| 亚洲一区二区三区色噜噜| 永久网站在线| 插逼视频在线观看| 国产精品一区二区在线观看99 | 亚洲真实伦在线观看| 国产精品av视频在线免费观看| 尾随美女入室| 亚洲无线观看免费| 成人一区二区视频在线观看| 国产精品久久电影中文字幕| 99精品在免费线老司机午夜| 免费一级毛片在线播放高清视频| 国产av麻豆久久久久久久| 久久久久久久亚洲中文字幕| 国产在线男女| 亚洲av二区三区四区| 成人特级黄色片久久久久久久| 日韩人妻高清精品专区| 22中文网久久字幕| 真实男女啪啪啪动态图| 国产中年淑女户外野战色| 非洲黑人性xxxx精品又粗又长| 欧美另类亚洲清纯唯美| 又黄又爽又刺激的免费视频.| 亚洲图色成人| 99国产精品一区二区蜜桃av| 国产精品免费一区二区三区在线| 一本—道久久a久久精品蜜桃钙片 精品乱码久久久久久99久播 | 免费人成在线观看视频色| 岛国毛片在线播放| 麻豆久久精品国产亚洲av| 男人舔女人下体高潮全视频| 久久99精品国语久久久| 悠悠久久av| 只有这里有精品99| 精品人妻视频免费看| 网址你懂的国产日韩在线| 亚洲欧美精品自产自拍| 午夜a级毛片| 国产一区二区在线av高清观看| 免费搜索国产男女视频| 久久韩国三级中文字幕| 少妇被粗大猛烈的视频| 少妇丰满av| 国产一区二区三区av在线 | 晚上一个人看的免费电影| 成人欧美大片| 97热精品久久久久久| 99国产精品一区二区蜜桃av| 亚洲自偷自拍三级| 搡女人真爽免费视频火全软件| 中文欧美无线码| 久久久久国产网址| av在线亚洲专区| 色尼玛亚洲综合影院| 卡戴珊不雅视频在线播放| 国产老妇伦熟女老妇高清| 久久草成人影院| 欧美成人一区二区免费高清观看| 在线观看美女被高潮喷水网站| 日韩强制内射视频| 乱人视频在线观看| 我要看日韩黄色一级片| 18禁在线播放成人免费| 嫩草影院精品99| 美女xxoo啪啪120秒动态图| 成人漫画全彩无遮挡| 有码 亚洲区| 淫秽高清视频在线观看| 嫩草影院精品99| 超碰av人人做人人爽久久| 综合色丁香网| 日韩成人av中文字幕在线观看| 69人妻影院| 国产精品久久久久久av不卡| 一夜夜www| 免费人成视频x8x8入口观看| 嫩草影院入口| 插阴视频在线观看视频| 久久午夜福利片| 久久精品国产自在天天线| 91午夜精品亚洲一区二区三区| 国产白丝娇喘喷水9色精品| 欧美不卡视频在线免费观看| 人妻制服诱惑在线中文字幕| 大型黄色视频在线免费观看| 欧美日本亚洲视频在线播放| av又黄又爽大尺度在线免费看 | 麻豆一二三区av精品| 国内精品久久久久精免费| 九九爱精品视频在线观看| 日韩一区二区视频免费看| 亚洲国产高清在线一区二区三| 亚洲欧美成人综合另类久久久 | 亚洲最大成人av| 国产精品国产三级国产av玫瑰| 国产黄a三级三级三级人| 免费看美女性在线毛片视频| 能在线免费观看的黄片| 午夜久久久久精精品| 久久久久久久久久成人| 欧美不卡视频在线免费观看| 天天一区二区日本电影三级| 婷婷亚洲欧美| 熟女电影av网| 欧美精品一区二区大全| www.色视频.com| 日本av手机在线免费观看| 1024手机看黄色片| 我要看日韩黄色一级片| 91久久精品国产一区二区三区| 免费搜索国产男女视频| 狂野欧美白嫩少妇大欣赏| 啦啦啦啦在线视频资源| 国产av麻豆久久久久久久| 欧美三级亚洲精品| 久久精品国产亚洲av香蕉五月| а√天堂www在线а√下载| 久久久国产成人精品二区| 国产伦一二天堂av在线观看| 九草在线视频观看| 夜夜看夜夜爽夜夜摸| 国内揄拍国产精品人妻在线| 免费看美女性在线毛片视频| 深爱激情五月婷婷| 一区福利在线观看| 中国国产av一级| 久久久久性生活片| 亚洲国产日韩欧美精品在线观看| 久久热精品热| 日韩强制内射视频| 日本一二三区视频观看| 老司机影院成人| 韩国av在线不卡| 欧美成人免费av一区二区三区| 国产精品麻豆人妻色哟哟久久 | 久久99精品国语久久久| 日日啪夜夜撸| 国产蜜桃级精品一区二区三区| 久久久久久国产a免费观看| 一个人观看的视频www高清免费观看| 国产成人影院久久av| 韩国av在线不卡| 国产成人精品一,二区 | 国产一区二区激情短视频| 久99久视频精品免费| 国产日韩欧美在线精品| 亚洲人成网站在线观看播放| kizo精华| 美女脱内裤让男人舔精品视频 | 最新中文字幕久久久久| 美女黄网站色视频| 99九九线精品视频在线观看视频| 亚洲婷婷狠狠爱综合网| 亚洲人与动物交配视频| 欧美极品一区二区三区四区| 中文字幕人妻熟人妻熟丝袜美| 小蜜桃在线观看免费完整版高清| 免费av观看视频| av福利片在线观看| 国产熟女欧美一区二区| 日韩精品青青久久久久久| 久久精品国产亚洲av香蕉五月| 男女边吃奶边做爰视频| 亚洲av熟女| 久久久国产成人免费| 女人被狂操c到高潮| a级一级毛片免费在线观看| 午夜福利在线观看免费完整高清在 | 亚洲综合色惰| av又黄又爽大尺度在线免费看 | 人妻夜夜爽99麻豆av| 国产不卡一卡二| 亚洲国产精品成人综合色| 免费黄网站久久成人精品| 网址你懂的国产日韩在线| 色噜噜av男人的天堂激情| 乱人视频在线观看| 99热这里只有是精品在线观看| 亚洲成av人片在线播放无| 日韩欧美 国产精品| 有码 亚洲区| 简卡轻食公司| 尤物成人国产欧美一区二区三区| 国模一区二区三区四区视频| 综合色丁香网| av女优亚洲男人天堂| 亚洲不卡免费看| 老女人水多毛片| 午夜福利在线观看免费完整高清在 | 高清日韩中文字幕在线| 最后的刺客免费高清国语| 国产乱人偷精品视频| 国产成人freesex在线| 成人特级黄色片久久久久久久| 午夜a级毛片| 91在线精品国自产拍蜜月| 精品无人区乱码1区二区| 国产高清三级在线| 身体一侧抽搐| 九色成人免费人妻av| 日本撒尿小便嘘嘘汇集6| 国产亚洲精品av在线| 国产午夜精品久久久久久一区二区三区| 麻豆国产97在线/欧美| 国产真实乱freesex| 日韩一区二区视频免费看| 欧美+亚洲+日韩+国产| 美女xxoo啪啪120秒动态图| 日韩一区二区三区影片| 联通29元200g的流量卡| 精品一区二区三区人妻视频| 久久精品影院6| 精品无人区乱码1区二区| 亚洲国产日韩欧美精品在线观看| 国产精品无大码| 性插视频无遮挡在线免费观看| 国产精品美女特级片免费视频播放器| 在现免费观看毛片| 中文字幕制服av| 少妇熟女aⅴ在线视频| 国产精品无大码| 久久韩国三级中文字幕| av黄色大香蕉| 国产免费一级a男人的天堂| 我的女老师完整版在线观看| 亚洲高清免费不卡视频| 老司机福利观看| 国产成人一区二区在线| 国产极品天堂在线| 久久久久久久午夜电影| 麻豆国产av国片精品| av在线老鸭窝| 国产亚洲精品久久久久久毛片| 99久久精品热视频| 免费搜索国产男女视频| 99久久成人亚洲精品观看| 日本黄大片高清| 一边亲一边摸免费视频| 国产精品嫩草影院av在线观看| 一卡2卡三卡四卡精品乱码亚洲| 国产伦精品一区二区三区四那| 亚洲人成网站在线播放欧美日韩| 久久精品久久久久久噜噜老黄 | 国产精品一及| 性色avwww在线观看| 精品日产1卡2卡| 看免费成人av毛片| 亚洲欧美成人综合另类久久久 | 欧美性感艳星| 毛片女人毛片| 亚洲av不卡在线观看| 日韩,欧美,国产一区二区三区 | 国产精品一区二区性色av| 波多野结衣高清作品| 成人性生交大片免费视频hd| 国产午夜精品论理片| 欧美bdsm另类| 欧美日韩乱码在线| 久久草成人影院| 在线观看66精品国产| 在线免费观看的www视频| 久99久视频精品免费| 国产精品乱码一区二三区的特点| 人人妻人人澡欧美一区二区| avwww免费| 亚州av有码| 亚洲欧美清纯卡通| 夜夜夜夜夜久久久久| 亚洲精华国产精华液的使用体验 | 日韩欧美精品免费久久| 看片在线看免费视频| 国产一区二区在线观看日韩| 国产黄色小视频在线观看| 十八禁国产超污无遮挡网站| 成人亚洲欧美一区二区av| 色哟哟哟哟哟哟| 精品久久久久久久久av| 麻豆乱淫一区二区| 亚洲av成人精品一区久久| 日韩国内少妇激情av| 26uuu在线亚洲综合色| 卡戴珊不雅视频在线播放| 国产欧美日韩精品一区二区| av免费观看日本| 麻豆国产av国片精品| 亚洲,欧美,日韩| 五月玫瑰六月丁香| 热99re8久久精品国产| 久久亚洲国产成人精品v| 国产伦精品一区二区三区视频9| 简卡轻食公司| 亚洲成人av在线免费| 久久人人爽人人爽人人片va| 国产真实乱freesex| 一个人看视频在线观看www免费| 国产精品一区二区三区四区久久| 人妻系列 视频| 精品熟女少妇av免费看| 搡老妇女老女人老熟妇| 丝袜喷水一区| 看非洲黑人一级黄片| 国产美女午夜福利| av福利片在线观看| 国产国拍精品亚洲av在线观看| a级毛色黄片| av在线亚洲专区| 亚洲自拍偷在线| av卡一久久| 成人一区二区视频在线观看| 国产精品人妻久久久影院| 能在线免费观看的黄片| 99久久九九国产精品国产免费| 国产精品精品国产色婷婷| 精品国内亚洲2022精品成人| 久久亚洲精品不卡| 免费观看的影片在线观看| 久久久久久久久久久免费av| 超碰av人人做人人爽久久| 看片在线看免费视频| 久久久久久久久久黄片| 蜜桃亚洲精品一区二区三区| 国产白丝娇喘喷水9色精品| 少妇被粗大猛烈的视频| 亚洲精品国产av成人精品| 91精品一卡2卡3卡4卡| 婷婷六月久久综合丁香| 欧美色视频一区免费| 搞女人的毛片| 在线免费观看的www视频| 在线免费观看不下载黄p国产| 九草在线视频观看| 国产高清视频在线观看网站| 一级黄片播放器| h日本视频在线播放| 亚洲精品粉嫩美女一区| 亚洲欧美精品综合久久99| 国产极品精品免费视频能看的| 99久久九九国产精品国产免费| 国产v大片淫在线免费观看| 国语自产精品视频在线第100页| av免费在线看不卡| 乱系列少妇在线播放| 亚洲最大成人中文| 免费不卡的大黄色大毛片视频在线观看 | 亚洲国产欧美人成| 91精品国产九色| 国产午夜福利久久久久久| 中国国产av一级| 久久久久久久久久久丰满| 日本免费一区二区三区高清不卡| 日本免费a在线| av在线老鸭窝| 自拍偷自拍亚洲精品老妇| 在线观看午夜福利视频| 午夜免费男女啪啪视频观看| 一区福利在线观看| 亚洲欧美中文字幕日韩二区| 欧美日韩国产亚洲二区| 国产精品国产三级国产av玫瑰| 久久99热6这里只有精品| 欧美日韩一区二区视频在线观看视频在线 | 免费无遮挡裸体视频| 一级毛片久久久久久久久女| 啦啦啦韩国在线观看视频| 热99在线观看视频| 成人av在线播放网站| 欧美激情久久久久久爽电影| 色哟哟·www| 在线播放国产精品三级| 日韩欧美精品v在线| 人妻少妇偷人精品九色| 高清午夜精品一区二区三区 | 一级毛片aaaaaa免费看小| 久久亚洲精品不卡| 夜夜夜夜夜久久久久| 国产白丝娇喘喷水9色精品| 久久人人爽人人爽人人片va| 日韩欧美国产在线观看| 美女大奶头视频| 成人二区视频| 亚洲乱码一区二区免费版| 男插女下体视频免费在线播放| 岛国毛片在线播放| 99九九线精品视频在线观看视频| 成人美女网站在线观看视频| 亚洲精品日韩av片在线观看| 日韩高清综合在线| 中文资源天堂在线| 深夜精品福利| 性欧美人与动物交配| 欧美精品一区二区大全| 春色校园在线视频观看| 免费无遮挡裸体视频| 日日干狠狠操夜夜爽| 亚洲在久久综合| 国产精品爽爽va在线观看网站| 亚洲av成人精品一区久久| 国产私拍福利视频在线观看| 国产精品蜜桃在线观看 | 亚洲欧美成人综合另类久久久 | 可以在线观看的亚洲视频| 99久久九九国产精品国产免费| 免费看美女性在线毛片视频| 日韩大尺度精品在线看网址| 日韩制服骚丝袜av| 久久草成人影院| 日韩欧美精品v在线| 99热这里只有是精品在线观看| 22中文网久久字幕| 国产真实乱freesex| 男的添女的下面高潮视频| 麻豆国产av国片精品| av福利片在线观看| 欧美性猛交╳xxx乱大交人| 国产精品电影一区二区三区| 亚州av有码| 国产 一区 欧美 日韩| 国产私拍福利视频在线观看| 亚洲av不卡在线观看| 国产三级在线视频| 国产黄色视频一区二区在线观看 | 免费av不卡在线播放| 卡戴珊不雅视频在线播放| 黄色配什么色好看| 嫩草影院新地址| 欧美人与善性xxx| 日韩强制内射视频| 日韩一区二区视频免费看| 国产精品一及| 九九爱精品视频在线观看| 日本色播在线视频| 中文字幕精品亚洲无线码一区| 日韩一本色道免费dvd| 可以在线观看的亚洲视频| 天堂中文最新版在线下载 | 亚洲美女视频黄频| 男人狂女人下面高潮的视频| 神马国产精品三级电影在线观看| 亚洲国产精品成人久久小说 | 久久6这里有精品| 色综合色国产| 边亲边吃奶的免费视频| 超碰av人人做人人爽久久| kizo精华| or卡值多少钱| 久久久久久久久中文| 久久久久久久午夜电影| 成人一区二区视频在线观看| 波多野结衣高清作品| 国产在线精品亚洲第一网站| 久久久成人免费电影| 精品久久久久久成人av| 亚洲成人中文字幕在线播放| 国产精品久久久久久久久免| 99国产极品粉嫩在线观看| 国产中年淑女户外野战色| 国产乱人视频| 久久久久性生活片| 此物有八面人人有两片| 国产精品美女特级片免费视频播放器| 不卡一级毛片| 午夜精品在线福利| 精品熟女少妇av免费看| 亚洲va在线va天堂va国产| 国产高清不卡午夜福利| 男女视频在线观看网站免费| 国产精品国产高清国产av| 亚洲七黄色美女视频| 国产成人freesex在线| 日本免费a在线| 欧美人与善性xxx| 一级毛片久久久久久久久女| 日日摸夜夜添夜夜添av毛片| 久久久久久大精品| 久久久欧美国产精品| 国产视频首页在线观看| 国产成人午夜福利电影在线观看| 久久久精品94久久精品| 波多野结衣巨乳人妻| 丰满乱子伦码专区| 午夜免费男女啪啪视频观看| 欧美性猛交╳xxx乱大交人| 久久亚洲国产成人精品v| av在线天堂中文字幕| 欧美日韩国产亚洲二区| 我要搜黄色片| 国产成人freesex在线| 国产高清有码在线观看视频| 国内精品一区二区在线观看| 女人十人毛片免费观看3o分钟| h日本视频在线播放| 国产精品久久视频播放|