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

    基于混合測(cè)試和動(dòng)態(tài)分析的分段代碼測(cè)試

    2015-01-06 08:20:40劉春宏徐立華楊宗源
    計(jì)算機(jī)工程 2015年2期
    關(guān)鍵詞:源代碼測(cè)試數(shù)據(jù)分支

    劉春宏,徐立華,顏 婷,楊宗源

    (華東師范大學(xué)計(jì)算機(jī)科學(xué)技術(shù)系,上海200241)

    基于混合測(cè)試和動(dòng)態(tài)分析的分段代碼測(cè)試

    劉春宏,徐立華,顏 婷,楊宗源

    (華東師范大學(xué)計(jì)算機(jī)科學(xué)技術(shù)系,上海200241)

    傳統(tǒng)混合執(zhí)行測(cè)試方法無(wú)法對(duì)源代碼不可見(jiàn)函數(shù)進(jìn)行符號(hào)執(zhí)行。針對(duì)該問(wèn)題,將符號(hào)執(zhí)行、分段式符號(hào)執(zhí)行以及具體執(zhí)行按需結(jié)合,提出一種分段式混合執(zhí)行測(cè)試方法,將源代碼不可見(jiàn)函數(shù)以分段式分析法截取為單獨(dú)代碼片段,結(jié)合動(dòng)態(tài)執(zhí)行和回歸分析方法推導(dǎo)其相應(yīng)的程序語(yǔ)義。為驗(yàn)證該方法的有效性,實(shí)現(xiàn)sCREST原型系統(tǒng),并對(duì)5個(gè)應(yīng)用廣泛的開(kāi)源系統(tǒng)進(jìn)行測(cè)試。實(shí)驗(yàn)結(jié)果表明,該方法能夠產(chǎn)生比傳統(tǒng)方法覆蓋更多分支數(shù)的測(cè)試數(shù)據(jù)。

    軟件測(cè)試;混合測(cè)試;分段式符號(hào)分析;動(dòng)態(tài)分析;測(cè)試數(shù)據(jù)生成;分支覆蓋

    1 概述

    混合執(zhí)行測(cè)試[1-2]是一種將具體執(zhí)行和符號(hào)執(zhí)行相結(jié)合的有效測(cè)試方法,自動(dòng)生成測(cè)試輸入來(lái)執(zhí)行程序中所有可行路徑以進(jìn)行錯(cuò)誤檢測(cè),受到廣泛關(guān)注[3-5]。CREST[3]在混合執(zhí)行中提供多種基于程序控制流圖的路徑搜索策略,以盡量生成覆蓋更多分支的測(cè)試輸入。文獻(xiàn)[4]提出一種目標(biāo)制導(dǎo)的混合執(zhí)行測(cè)試方法,只生成和執(zhí)行可能會(huì)覆蓋待檢測(cè)缺陷語(yǔ)句的測(cè)試輸入。文獻(xiàn)[5]將混合執(zhí)行測(cè)試應(yīng)用于基于污點(diǎn)指針的二進(jìn)制代碼缺陷檢測(cè)中?;旌蠄?zhí)行測(cè)試在100行~2 000行代碼的小型系統(tǒng)的單元測(cè)試中非常有效[3],但目前將其用于工業(yè)界實(shí)際軟件仍存在一些局限性[6]。本文主要專注于混合執(zhí)行測(cè)試中源代碼不可見(jiàn)的函數(shù)調(diào)用處理這一局限性(也稱為native calls,它包括源代碼不可獲得的標(biāo)準(zhǔn)庫(kù)函數(shù)或者第三方組件的使用)。文獻(xiàn)[6]實(shí)驗(yàn)表明源代碼不可見(jiàn)的函數(shù)調(diào)用是除指針外在被測(cè)軟件系統(tǒng)中出現(xiàn)頻率最高的局限性,阻礙工具產(chǎn)生高分支覆蓋的測(cè)試數(shù)據(jù)。

    混合執(zhí)行測(cè)試?yán)^承于符號(hào)執(zhí)行技術(shù),無(wú)法對(duì)源代碼不可見(jiàn)的被調(diào)函數(shù)進(jìn)行符號(hào)執(zhí)行。DART[1], CUTE[2]和CREST[3]使用運(yùn)行時(shí)具體值代替符號(hào)值的“具體化”方法處理源代碼不可見(jiàn)的函數(shù)調(diào)用,但在測(cè)試生成環(huán)境下,該方法并不精確,因?yàn)殡S之產(chǎn)生的測(cè)試數(shù)據(jù)只能覆蓋某一具體輸入值可以到達(dá)的被調(diào)函數(shù)中的一條路徑,有時(shí)還可能導(dǎo)致路徑分歧[1,7]。且如果符號(hào)路徑條件中的函數(shù)調(diào)用沒(méi)有得到有效處理,也會(huì)影響生成的測(cè)試數(shù)據(jù)的完備性?;旌蠄?zhí)行測(cè)試中采用函數(shù)跟進(jìn)[1-3]和函數(shù)摘要[8]處理函數(shù)調(diào)用,但針對(duì)的是存在源代碼函數(shù)體的函數(shù),不適用于本文研究的源代碼不可見(jiàn)的函數(shù)調(diào)用;對(duì)于無(wú)法獲得源代碼的第三方組件或標(biāo)準(zhǔn)庫(kù)函數(shù)調(diào)用,如果采用函數(shù)摘要方法,則需要通過(guò)人工的編寫(xiě)完成[9]。

    針對(duì)源代碼不可見(jiàn)的函數(shù),文獻(xiàn)[7]提出一種使用未解釋的函數(shù)符號(hào)表示源代碼不可獲得的函數(shù)的高階測(cè)試生成方法,比具體化方法更加精確,但實(shí)現(xiàn)代價(jià)昂貴且受限于現(xiàn)有SMT solver的求解能力。文獻(xiàn)[10]在Cloud9中手動(dòng)開(kāi)發(fā)庫(kù)模型,但每一個(gè)新的應(yīng)用程序可能會(huì)引入一個(gè)不同的庫(kù),模型并不總是可以重用。文獻(xiàn)[11]在ICSE 2013上提出的分段式符號(hào)分析是一種將靜態(tài)程序分析中無(wú)法繼續(xù)的代碼片段以動(dòng)態(tài)分析的方式推導(dǎo)相應(yīng)程序語(yǔ)義,按需對(duì)被測(cè)程序分段并交替使用動(dòng)靜態(tài)程序分析的方法,成功用于分析緩沖區(qū)溢出問(wèn)題。

    據(jù)筆者所知,目前還不存在分段式符號(hào)分析[11]應(yīng)用于測(cè)試領(lǐng)域的通用方法。由于分段式符號(hào)分析中使用線性回歸分析技術(shù)匯總了源代碼不可見(jiàn)的函數(shù)代碼片段的多次運(yùn)行的動(dòng)態(tài)信息,而“具體化”方法只執(zhí)行了被調(diào)函數(shù)中某一特定的具體值所能執(zhí)行到的一條路徑,理論上,由此分析所得的轉(zhuǎn)移函數(shù)相較單純的“具體化”方法中的一次運(yùn)行的具體值更準(zhǔn)確,能更準(zhǔn)確地模擬程序的執(zhí)行情況和代表相應(yīng)程序點(diǎn)的變量的符號(hào)值。

    本文針對(duì)混合執(zhí)行測(cè)試中的源代碼不可見(jiàn)的函數(shù)調(diào)用問(wèn)題,提出分段式混合執(zhí)行測(cè)試方法,把分段式分析方法[11]引入傳統(tǒng)混合執(zhí)行測(cè)試中,將符號(hào)執(zhí)行、分段式符號(hào)執(zhí)行以及具體執(zhí)行方法按需結(jié)合,針對(duì)符號(hào)執(zhí)行無(wú)法分析的代碼片段進(jìn)行動(dòng)態(tài)分析,以此替代簡(jiǎn)單使用運(yùn)行時(shí)具體值代替符號(hào)值的方法,以期進(jìn)一步緩解源代碼不可見(jiàn)的函數(shù)調(diào)用這一局限性?;贑REST開(kāi)發(fā)sCREST(segmented CREST)系統(tǒng),實(shí)現(xiàn)并評(píng)估本文提出的分段式混合執(zhí)行測(cè)試方法。

    2 分段式混合執(zhí)行方法

    首先給出一個(gè)例子來(lái)直觀解釋分段式混合執(zhí)行測(cè)試方法的工作方式,然后介紹本文在CREST上實(shí)現(xiàn)的分段式混合執(zhí)行測(cè)試系統(tǒng)sCREST。

    2.1 分段式混合執(zhí)行方法

    一個(gè)使用CREST測(cè)試,包含strcmp庫(kù)函數(shù)的示例程序如下:

    其中,CREST_char(tmp1)表示把tmp1作為符號(hào)變量來(lái)處理,CREST生成一個(gè)char型數(shù)據(jù)并賦值給tmp1,再把tmp1賦值給pattern數(shù)組的元素,表明pattern數(shù)組需要CREST為其生成測(cè)試數(shù)據(jù)。程序中if條件中包含一個(gè)源代碼不可見(jiàn)的庫(kù)函數(shù)strcmp,只有當(dāng)CREST生成的測(cè)試輸入等于“test”時(shí),該if條件才會(huì)被滿足,從而覆蓋if分支。

    該示例程序在CREST中很難生成覆蓋所有分支的有效測(cè)試數(shù)據(jù),只能迭代一次,覆蓋else分支。這是因?yàn)閟trcmp函數(shù)的源代碼不可見(jiàn),CREST無(wú)法對(duì)其符號(hào)執(zhí)行。CREST采取“具體化”方法,具體執(zhí)行strcmp函數(shù),使用具體值代替符號(hào)值構(gòu)造符號(hào)條件,因此雖然pattern數(shù)組聲明為符號(hào)變量,但strcmp的返回值仍然是運(yùn)行時(shí)的具體值。CREST首次運(yùn)行時(shí)的測(cè)試值是隨機(jī)生成的,隨機(jī)生成測(cè)試值“test”來(lái)滿足if分支的概率很低,且“具體化”后,符號(hào)路徑條件簡(jiǎn)化為一個(gè)具體值,不存在可被取非的某個(gè)符號(hào)分支條件,導(dǎo)致CREST只執(zhí)行一次迭代,測(cè)試過(guò)程結(jié)束。因此“具體化”方法往往只能覆蓋else分支,不能產(chǎn)生覆蓋if分支的測(cè)試輸入“test”。

    本文提出的分段式混合執(zhí)行測(cè)試方法,當(dāng)遇到無(wú)法符號(hào)執(zhí)行的源代碼不可見(jiàn)的函數(shù)調(diào)用(如此處的strcmp)時(shí),使用分段式符號(hào)執(zhí)行處理:

    步驟1截取與strcmp相關(guān)的代碼片段,包括2個(gè)部分:(1)strcmp函數(shù)所在的語(yǔ)句strcmp (pattern,"test")。(2)庫(kù)函數(shù)strcmp的參數(shù)變量的初始化語(yǔ)句char pattern[NUM_SYM_CHARS+1]。

    步驟2分析上下文,提煉分段式符號(hào)執(zhí)行所需的輸入變量與輸出變量在被測(cè)程序和庫(kù)函數(shù)中對(duì)應(yīng)的變量,這里提煉出的輸入變量是pattern,輸出變量是strcmp的返回值。

    步驟3動(dòng)態(tài)執(zhí)行步驟1中得到的代碼片段,并結(jié)合步驟2中提煉的輸入變量與輸出變量進(jìn)行回歸分析。

    步驟4將回歸分析推導(dǎo)出的輸入變量與輸出變量之間的符號(hào)表達(dá)式或者與被處理的函數(shù)strcmp等價(jià)的代碼片段,代入程序體,使用混合執(zhí)行測(cè)試產(chǎn)生系統(tǒng)的測(cè)試輸入,使混合執(zhí)行測(cè)試過(guò)程繼續(xù)下去。

    本文提出的分段式混合執(zhí)行測(cè)試方法可以產(chǎn)生覆蓋if和else兩個(gè)分支的測(cè)試數(shù)據(jù),而CREST中的“具體化”方法只能覆蓋else分支的測(cè)試數(shù)據(jù)。由此可見(jiàn),分段式混合執(zhí)行測(cè)試方法比傳統(tǒng)混合執(zhí)行測(cè)試中使用具體值簡(jiǎn)化復(fù)雜符號(hào)條件的“具體化”方法更加準(zhǔn)確,生成的測(cè)試數(shù)據(jù)能夠覆蓋“具體化”方法不能覆蓋到的路徑(或分支),因而執(zhí)行更多系統(tǒng)路徑,提高系統(tǒng)的分支覆蓋。

    2.2 sCREST系統(tǒng)

    sCREST是在CREST上實(shí)現(xiàn)的分段式混合執(zhí)行測(cè)試系統(tǒng),將符號(hào)執(zhí)行、分段式符號(hào)執(zhí)行和具體執(zhí)行按需結(jié)合。選擇CREST基于以下原因:(1)CREST是針對(duì)C程序一個(gè)廣泛認(rèn)可的代碼開(kāi)源的工具;它對(duì)源程序靜態(tài)插樁實(shí)現(xiàn)在運(yùn)行時(shí)從具體執(zhí)行抽取符號(hào)路徑條件以實(shí)現(xiàn)混合執(zhí)行,該方法的實(shí)現(xiàn)相對(duì)簡(jiǎn)單,因此相對(duì)方便在CREST上應(yīng)用新的技術(shù)[12]。 (2)CREST只能對(duì)源代碼已經(jīng)被插樁過(guò)的函數(shù)進(jìn)行符號(hào)執(zhí)行,對(duì)于在編譯時(shí)源代碼不可見(jiàn)的函數(shù),無(wú)法對(duì)其靜態(tài)插樁導(dǎo)致無(wú)法對(duì)其符號(hào)執(zhí)行。CREST使用“具體化”方法處理這類(lèi)函數(shù),但如果某源代碼不可見(jiàn)的函數(shù)直接的出現(xiàn)在某個(gè)符號(hào)分支條件中,或間接影響到某個(gè)符號(hào)分支的真值,該方法有可能會(huì)導(dǎo)致不能產(chǎn)生到達(dá)某一特定分支的測(cè)試輸入,或者會(huì)導(dǎo)致“路徑分歧”現(xiàn)象迫使測(cè)試中止,這些會(huì)降低測(cè)試數(shù)據(jù)的分支覆蓋。(3)在實(shí)際使用CREST測(cè)試大型程序時(shí),時(shí)常需要手動(dòng)添加常用的libc庫(kù)函數(shù)的自定義代碼[13-14],以便這些源代碼不可見(jiàn)的函數(shù)可被靜態(tài)插樁,從而被符號(hào)執(zhí)行,產(chǎn)生到達(dá)與這些函數(shù)調(diào)用相關(guān)的分支(或路徑)的測(cè)試數(shù)據(jù),以此提高測(cè)試覆蓋。但這種手動(dòng)添加代碼不可見(jiàn)的函數(shù)的自定義代碼的方式效率不高,且也不容易確定需要添加哪些庫(kù)函數(shù)的自定義的代碼。

    現(xiàn)階段sCREST針對(duì)的是源代碼不可見(jiàn)的庫(kù)函數(shù)調(diào)用,sCREST是基于CREST實(shí)現(xiàn)的,重用CREST的3個(gè)主要模塊:源代碼插樁模塊,進(jìn)行動(dòng)態(tài)符號(hào)執(zhí)行的引擎組件(C++library)和搜索策略模塊,本文對(duì)動(dòng)態(tài)符號(hào)執(zhí)行引擎中的Symbolic-Interpreter類(lèi)做部分修改,并增加分段式符號(hào)分析組件。sCREST的概要執(zhí)行流程如圖1所示。

    圖1 sCREST系統(tǒng)的概要執(zhí)行流程

    如圖1所示,傳統(tǒng)混合執(zhí)行測(cè)試方法中具體執(zhí)行和符號(hào)執(zhí)行同時(shí)進(jìn)行,首先以一些隨機(jī)輸入值具體執(zhí)行程序,同時(shí)進(jìn)行動(dòng)態(tài)符號(hào)執(zhí)行,沿著具體執(zhí)行路徑收集符號(hào)路徑條件,使用搜索策略選取符號(hào)條件的某個(gè)分支取非,調(diào)用約束求解器求解新的符號(hào)條件,產(chǎn)生執(zhí)行新路徑的測(cè)試輸入。在混合執(zhí)行測(cè)試產(chǎn)生測(cè)試輸入的過(guò)程中,sCREST在遇到靜態(tài)符號(hào)執(zhí)行無(wú)法繼續(xù)的源代碼不可見(jiàn)的庫(kù)函數(shù)時(shí),使用分段式符號(hào)分析處理,推導(dǎo)出關(guān)聯(lián)模型,將其代入到相應(yīng)的截取點(diǎn),使用混合執(zhí)行測(cè)試產(chǎn)生系統(tǒng)的測(cè)試輸入;同時(shí),具體執(zhí)行指導(dǎo)系統(tǒng)的執(zhí)行路徑,使混合執(zhí)行測(cè)試過(guò)程進(jìn)行下去。圖2顯示了sCREST的詳細(xì)流程,突出說(shuō)明分段式符號(hào)分析,其中的傳統(tǒng)混合執(zhí)行測(cè)試的內(nèi)部細(xì)節(jié)與圖1中的傳統(tǒng)混合執(zhí)行測(cè)試相同。

    圖2 sCREST系統(tǒng)的詳細(xì)執(zhí)行流程

    在sCREST系統(tǒng)的詳細(xì)執(zhí)行流程中,不同組件對(duì)源程序進(jìn)行處理的過(guò)程如下:

    步驟1首先對(duì)被測(cè)程序進(jìn)行預(yù)處理,識(shí)別出被測(cè)程序中接收輸入的代碼,把這些代碼替換為CREST_int,CREST_char等調(diào)用,使被測(cè)程序可以接收symbolic inputs(使用CREST需要做的前期工作);然后使用插樁模塊crestc對(duì)程序編譯生成完成插樁的可執(zhí)行文件;最后使用run_crest進(jìn)行測(cè)試執(zhí)行,生成測(cè)試數(shù)據(jù)。sCREST系統(tǒng)通過(guò)對(duì)CREST源代碼中的SymbolicInterpreter類(lèi)進(jìn)行部分修改,使之輸出測(cè)試中遇到的源代碼不可見(jiàn)的函數(shù)的信息statement-id號(hào)。

    步驟2sCREST系統(tǒng)的片段截取組件,實(shí)現(xiàn)對(duì)源代碼不可見(jiàn)的函數(shù)相關(guān)的代碼片段的截取以及函數(shù)名稱的識(shí)別。代碼片段包括2個(gè)部分:(1)源代碼不可見(jiàn)的庫(kù)函數(shù)所在的程序語(yǔ)句;(2)源代碼不可見(jiàn)的庫(kù)函數(shù)的參數(shù)變量的初始化語(yǔ)句。因?yàn)樵闯绦?.c文件)在被crestc編譯后會(huì)產(chǎn)生插樁后的文件(.cil.c文件),步驟1中輸出的庫(kù)函數(shù)的statementid號(hào)在其對(duì)應(yīng)的.cil.c文件中是唯一的,所以通過(guò)編寫(xiě)perl程序在相應(yīng)的.cil.c文件中查找該statementid號(hào),確定此代碼不可見(jiàn)的函數(shù)名稱以及其在程序中所在的行號(hào),得出代碼片段的第(1)部分;第(2)部分則通過(guò)編寫(xiě)perl程序分析識(shí)別出庫(kù)函數(shù)的參數(shù)變量,然后識(shí)別出參數(shù)變量的相應(yīng)的初始化語(yǔ)句而獲得。

    步驟3根據(jù)步驟2識(shí)別出的源代碼不可見(jiàn)的函數(shù)名稱,在函數(shù)“摘要”庫(kù)中查找,是否已存在該函數(shù)的“摘要”,如果已存在,則直接提取調(diào)用其“摘要”;否則,進(jìn)入步驟4。

    步驟4通過(guò)提煉輸入與輸出變量組件,分析上下文,提煉需要分段式符號(hào)分析的庫(kù)函數(shù)代碼片段的輸入變量與輸出變量在被測(cè)程序中對(duì)應(yīng)的變量(輸入變量一般是源代碼不可見(jiàn)的庫(kù)函數(shù)的輸入?yún)?shù),輸出變量是庫(kù)函數(shù)的返回值變量)。動(dòng)態(tài)執(zhí)行步驟2得到的源代碼不可見(jiàn)的庫(kù)函數(shù)的代碼片段的測(cè)試單元,并結(jié)合當(dāng)前步驟提煉的分段式符號(hào)分析的輸入變量與輸出變量,進(jìn)入下一步的回歸分析。動(dòng)態(tài)執(zhí)行的具體過(guò)程是,首先根據(jù)輸入與輸出變量以及步驟2得到的代碼片段,構(gòu)建一個(gè)可以獨(dú)立運(yùn)行的測(cè)試單元,然后自動(dòng)生成輸入變量的具體值集合,多次實(shí)際動(dòng)態(tài)運(yùn)行構(gòu)建的測(cè)試單元,同時(shí)記錄下每次運(yùn)行的測(cè)試輸入值及其相應(yīng)的輸出值[11]。

    步驟5 經(jīng)過(guò)回歸分析組件,推導(dǎo)出輸入變量與輸出變量之間的符號(hào)表達(dá)式,或者推導(dǎo)出與被處理的源代碼不可見(jiàn)的函數(shù)等價(jià)的代碼片段(通過(guò)對(duì)步驟4得到的多個(gè)輸入變量值與其對(duì)應(yīng)的輸出變量值,經(jīng)過(guò)回歸分析推導(dǎo)出輸入變量與輸出變量之間的關(guān)聯(lián)模型[11]),并將其代入到程序中,使混合執(zhí)行測(cè)試過(guò)程得以繼續(xù)進(jìn)行下去。同時(shí)將分段式符號(hào)分析自動(dòng)生成的結(jié)果作為該函數(shù)的摘要保存到函數(shù)摘要數(shù)據(jù)庫(kù)中。

    3 實(shí)驗(yàn)與評(píng)估

    為評(píng)估本文的分段式混合執(zhí)行測(cè)試方法的性能,將sCREST應(yīng)用于5個(gè)不同規(guī)模的開(kāi)源應(yīng)用程序的測(cè)試數(shù)據(jù)生成中。選取Siemens Benchmark Suite[15]中2個(gè)程序tcas和replace,其中,tcas是一個(gè)飛機(jī)防撞系統(tǒng);replace是其中最大的測(cè)試程序,還有3個(gè)應(yīng)用廣泛的開(kāi)源應(yīng)用程序:gzip-1.2.4,grep-2.2,vim-5.7。所有的實(shí)驗(yàn)運(yùn)行在VMware Workstation 8.0(RAM 2 GB)的ubuntu10.04上,使用的是CREST 0.1.1 (revision132)。宿主配置是Intel Pentium CPU,2.30 GHZ,內(nèi)存8 GB。

    針對(duì)每一個(gè)被測(cè)程序,在設(shè)置相同的迭代次數(shù)(即插樁程序的運(yùn)行次數(shù))和使用相同的搜索策略(本文使用深度優(yōu)先策略dfs)前提下,分別使用sCREST與CREST系統(tǒng)對(duì)相同設(shè)置的同一程序進(jìn)行測(cè)試,并對(duì)比測(cè)試情況,以評(píng)估本文方法。

    本文實(shí)驗(yàn)的目的在于檢驗(yàn)本文的分段式混合執(zhí)行測(cè)試方法是否能提高測(cè)試數(shù)據(jù)的分支覆蓋。采用2個(gè)評(píng)估指標(biāo)是sCREST以及CRSET最終能夠達(dá)到的分支覆蓋數(shù)和各自的執(zhí)行時(shí)間。由于CREST中存在隨機(jī)因素,使得同一測(cè)試生成命令在不同的時(shí)刻運(yùn)行,最終得到的覆蓋分支數(shù)有所不同,因此,本文實(shí)驗(yàn)把CREST源代碼中的隨機(jī)數(shù)發(fā)生器的初始化函數(shù)srand函數(shù)注釋掉,使得每次調(diào)用rand函數(shù)生成的偽隨機(jī)數(shù)序列都是一樣的,從而使得同一測(cè)試命令在不同的時(shí)刻運(yùn)行最終得到的分支覆蓋數(shù)相同;由于CREST中同一個(gè)測(cè)試生成命令在不同時(shí)刻運(yùn)行的執(zhí)行時(shí)間有所不同,因此這里的執(zhí)行時(shí)間記錄的是5次運(yùn)行的平均執(zhí)行時(shí)間。CREST和sCREST的實(shí)驗(yàn)對(duì)比結(jié)果如表1和表2所示。在表1中,dfs后面括號(hào)中的數(shù)字表示設(shè)置的搜索深度;在表2中,相對(duì)分支覆蓋率=覆蓋的分支數(shù)/到達(dá)的分支數(shù);絕對(duì)分支覆蓋率=覆蓋的分支數(shù)/總分支數(shù)。

    表1 CREST和sCREST系統(tǒng)的分支覆蓋數(shù)與執(zhí)行時(shí)間對(duì)比

    表2 CREST和sCREST系統(tǒng)的分支覆蓋率對(duì)比%

    由表1可以看出,本文的分段式混合執(zhí)行測(cè)試方法比傳統(tǒng)的混合執(zhí)行測(cè)試達(dá)到更高的分支覆蓋,而且所有被測(cè)程序的測(cè)試過(guò)程都在一個(gè)合理的時(shí)間內(nèi)完成。tcas在花費(fèi)一些迭代次數(shù)生成有效范圍內(nèi)的測(cè)試數(shù)據(jù)后,CREST只執(zhí)行了tcas中的一條路徑,混合執(zhí)行測(cè)試就被迫中止,執(zhí)行時(shí)間不足1s,因此,表1中記為“-”,sCREST執(zhí)行了tcas程序中的更多條路徑,執(zhí)行時(shí)間增加到35 s。

    表2中分別對(duì)CREST和sCREST的分支覆蓋率進(jìn)行對(duì)比,除replace外,其他被測(cè)程序,無(wú)論是相對(duì)分支覆蓋率還是絕對(duì)分支覆蓋率,sCREST比CREST都有所提高。

    表1和表2中的數(shù)據(jù)是實(shí)驗(yàn)總體情況,下面對(duì)具代表性的被測(cè)程序做詳細(xì)說(shuō)明。

    3.1 tcas程序

    tcas需要從程序外部接收12個(gè)輸入?yún)?shù),每一個(gè)輸入?yún)?shù)都需使用atoi函數(shù)進(jìn)行類(lèi)型轉(zhuǎn)換。本文將每一個(gè)輸入?yún)?shù)設(shè)定為固定長(zhǎng)度的符號(hào)字符數(shù)組,并添加限制條件使CREST和sCREST生成有效范圍內(nèi)的符號(hào)變量,提高測(cè)試數(shù)據(jù)的有效性。

    從圖3可見(jiàn),tcas在CREST中只執(zhí)行17次迭代測(cè)試過(guò)程中止,最終覆蓋59個(gè)分支(tcas在CREST中的分支覆蓋情況如圖4所示);而tcas在sCREST中可以執(zhí)行設(shè)定的2 000次迭代,最終覆蓋93個(gè)分支。這是因?yàn)閠cas的每一個(gè)輸入?yún)?shù)必須經(jīng)atoi函數(shù)進(jìn)行類(lèi)型轉(zhuǎn)換,且符號(hào)路徑條件中只有這一個(gè)源代碼不可見(jiàn)的函數(shù)atoi,atoi對(duì)輸入?yún)?shù)的測(cè)試數(shù)據(jù)的生成有非常重要的作用。CREST首先花費(fèi)一些迭代用來(lái)生成在有效范圍內(nèi)的測(cè)試數(shù)據(jù),由于atoi的源代碼在程序中不可見(jiàn),CREST無(wú)法對(duì)其符號(hào)執(zhí)行,使用atoi的具體運(yùn)行值代替符號(hào)值后,使得符號(hào)路徑條件簡(jiǎn)化為一個(gè)具體值,導(dǎo)致測(cè)試過(guò)程中止; sCREST使用分段式符號(hào)分析方法對(duì)atoi處理后,使CREST中原本中止的測(cè)試過(guò)程繼續(xù)進(jìn)行,明顯提高了被測(cè)程序的分支覆蓋數(shù)。

    圖3 tcas程序的分支覆蓋情況對(duì)比

    圖4 tcas程序在CREST系統(tǒng)中的分支覆蓋情況

    表1表明,tcas在sCREST中所需的測(cè)試執(zhí)行時(shí)間比CREST有所增加,是因?yàn)閠cas在CREST中使用“具體化”方法后,符號(hào)路徑條件被簡(jiǎn)化為一個(gè)具體值,迫使只執(zhí)行一條路徑就結(jié)束了;sCREST使原本異常中止的混合執(zhí)行過(guò)程繼續(xù)進(jìn)行,執(zhí)行更多次迭代,生成更多的測(cè)試數(shù)據(jù),使得測(cè)試時(shí)間有所增加。

    3.2 gzip-1.2.4程序

    gzip是一個(gè)開(kāi)源的文件壓縮程序。本文把gzip-1.2.4中的被解壓縮的文件參數(shù)設(shè)置為某一固定文件,把gzip-1.2.4程序接收的命令行選項(xiàng)參數(shù)設(shè)置為符號(hào)變量,使工具為這些變量生成測(cè)試數(shù)據(jù),并添加額外的限制條件使工具生成有效合理的測(cè)試數(shù)據(jù)。由圖5可以看出,隨著迭代次數(shù)的增加, sCREST系統(tǒng)可以顯著提高被測(cè)程序的分支覆蓋數(shù)。

    圖5 gzip-1.2.4程序的分支覆蓋情況對(duì)比

    3.3 grep-2.2程序

    grep是一個(gè)開(kāi)源C程序,用于使用正則表達(dá)式進(jìn)行文本搜索。本文把程序中正則表達(dá)式設(shè)置為長(zhǎng)度為5的符號(hào)字符數(shù)組,被搜索的文本設(shè)置為長(zhǎng)度為40的符號(hào)字符數(shù)組,使用默認(rèn)的匹配選項(xiàng)。為方便實(shí)驗(yàn)對(duì)比,此處設(shè)置與文獻(xiàn)[3]中對(duì)grep-2.2程序的設(shè)置相同。

    從圖6中可見(jiàn),sCREST比CREST能夠覆蓋更多的分支。但sCREST對(duì)grep-2.2的分支覆蓋的提高幅度不如tcas程序明顯,是因?yàn)殡m然在測(cè)試grep-2.2時(shí)符號(hào)路徑條件中出現(xiàn)一些庫(kù)函數(shù),但是在CREST中使用“具體值”簡(jiǎn)化后,符號(hào)路徑條件中仍然存在其他的分支可以被取非,混合執(zhí)行測(cè)試過(guò)程可以繼續(xù)進(jìn)行,沒(méi)有出現(xiàn)中止的情況。

    圖6 grep-2.2程序的分支覆蓋情況對(duì)比

    在sCREST系統(tǒng)中,對(duì)grep-2.2中的源代碼不可見(jiàn)的庫(kù)函數(shù)進(jìn)行分段式符號(hào)執(zhí)行,因而庫(kù)函數(shù)使用具體值代替符號(hào)值的次數(shù)有所減少,提高了符號(hào)路徑條件的準(zhǔn)確性,但是被分段式符號(hào)分析的庫(kù)函數(shù)對(duì)被測(cè)系統(tǒng)行為的影響程度以及對(duì)測(cè)試數(shù)據(jù)的生成的影響程度不是很大,所以,分支覆蓋數(shù)并沒(méi)有得到非常明顯的提高。

    在replace程序以及大型開(kāi)源程序vim-5.7[3]上進(jìn)行實(shí)驗(yàn),結(jié)果如表1所示??梢钥闯?sCREST也能夠比CREST系統(tǒng)覆蓋更多的分支。但由于篇幅限制,其分支覆蓋變化不在此給出。

    綜上,從表1、表2及各個(gè)被測(cè)程序的分支覆蓋變化曲線圖(圖3~圖6)中可以發(fā)現(xiàn),分支覆蓋數(shù)提高的幅度并不是與被測(cè)程序的代碼規(guī)模成正比。被分段符號(hào)分析處理的源代碼不可見(jiàn)的庫(kù)函數(shù)對(duì)整個(gè)程序行為的影響程度對(duì)分支數(shù)目的提高幅度起到重要的作用。庫(kù)函數(shù)對(duì)程序行為的影響包括該該庫(kù)函數(shù)是否對(duì)測(cè)試數(shù)據(jù)生成有影響(CREST為被定義為符號(hào)變量的變量生成測(cè)試數(shù)據(jù),庫(kù)函數(shù)是否直接或間接地對(duì)符號(hào)變量進(jìn)行操作)以及庫(kù)函數(shù)在程序中出現(xiàn)的次數(shù)。如果某個(gè)庫(kù)函數(shù)在程序中出現(xiàn)多次,更重要的是它對(duì)符號(hào)變量的測(cè)試數(shù)據(jù)的生成具有影響作用,那么sCREST用分段式符號(hào)分析方法對(duì)這些庫(kù)函數(shù)進(jìn)行處理后,分支覆蓋數(shù)可以得到明顯的提高。

    總之,分段式混合執(zhí)行測(cè)試方法提高分支覆蓋的幅度取決于被分段式符號(hào)分析的函數(shù)對(duì)被測(cè)系統(tǒng)行為的影響程度以及其對(duì)測(cè)試數(shù)據(jù)的生成的影響程度,影響程度越大,分支覆蓋數(shù)提高越明顯。

    從表1中可見(jiàn),sCREST系統(tǒng)所需的執(zhí)行時(shí)間比CREST有所增加,經(jīng)分析原因有2個(gè):

    (1)當(dāng)CREST中的“具體化”方法處理源代碼不可見(jiàn)的函數(shù)導(dǎo)致混合執(zhí)行測(cè)試中止時(shí),sCREST會(huì)使這些異常中止的混合執(zhí)行繼續(xù)進(jìn)行,執(zhí)行更多次迭代,致使執(zhí)行時(shí)間增加(CREST使用“具體化”處理源代碼不可見(jiàn)的函數(shù)導(dǎo)致測(cè)試中止一般有2種情況:1)“具體化”后的極端情況是符號(hào)路徑條件被簡(jiǎn)化為一個(gè)具體值;2)由于“具體化”方法只對(duì)源代碼不可見(jiàn)的被調(diào)函數(shù)進(jìn)行具體執(zhí)行,計(jì)算其運(yùn)行時(shí)的具體值,無(wú)法對(duì)其跟進(jìn)符號(hào)執(zhí)行,導(dǎo)致沒(méi)有考慮被調(diào)函數(shù)的表達(dá)式,因此得到的符號(hào)路徑條件不完備,有可能使下次迭代程序的實(shí)際執(zhí)行路徑與預(yù)期執(zhí)行路徑不一致,導(dǎo)致路徑分歧,出現(xiàn)“Predicate failure”錯(cuò)誤,迫使CREST測(cè)試過(guò)程中止)。

    (2)當(dāng)CREST中使用“具體化”方法處理源代碼不可見(jiàn)函數(shù)未導(dǎo)致測(cè)試過(guò)程異常中止時(shí),由于在sCREST中對(duì)源代碼不可見(jiàn)的函數(shù)進(jìn)行分段式符號(hào)分析,比直接使用源代碼不可見(jiàn)的庫(kù)函數(shù)的某一具體運(yùn)行值代替符號(hào)值需要更多的時(shí)間,因此sCREST的執(zhí)行時(shí)間會(huì)增加。實(shí)驗(yàn)數(shù)據(jù)也表明,雖然sCREST的測(cè)試執(zhí)行時(shí)間有所增加,但都是在可以接受的范圍內(nèi)。

    4 結(jié)束語(yǔ)

    本文針對(duì)混合執(zhí)行測(cè)試中的源代碼不可見(jiàn)函數(shù)調(diào)用問(wèn)題,提出分段式混合執(zhí)行測(cè)試方法,將分段式分析引入傳統(tǒng)混合執(zhí)行測(cè)試,按需結(jié)合符號(hào)執(zhí)行、分段式符號(hào)執(zhí)行以及具體執(zhí)行,針對(duì)符號(hào)執(zhí)行無(wú)法分析的源代碼不可見(jiàn)函數(shù)代碼片段進(jìn)行動(dòng)態(tài)分析,緩解了傳統(tǒng)混合執(zhí)行測(cè)試中的源代碼不可見(jiàn)的函數(shù)調(diào)用處理的局限性;在CREST上實(shí)現(xiàn)sCREST系統(tǒng),對(duì)本文提出的分段式混合執(zhí)行測(cè)試方法與傳統(tǒng)混合執(zhí)行方法進(jìn)行對(duì)比,結(jié)果顯示本文方法提高了測(cè)試數(shù)據(jù)的分支覆蓋數(shù),驗(yàn)證了其可行性和有效性。

    本文工作是分段式符號(hào)分析應(yīng)用于混合執(zhí)行測(cè)試的初步探索,現(xiàn)階段sCREST系統(tǒng)針對(duì)的是源代碼不可見(jiàn),且分段式符號(hào)分析能夠處理的標(biāo)準(zhǔn)庫(kù)函數(shù)調(diào)用,但理論上,對(duì)于其他工作在源代碼層的、通過(guò)對(duì)源程序靜態(tài)插樁以實(shí)現(xiàn)從具體執(zhí)行獲取符號(hào)路徑條件的混合執(zhí)行測(cè)試工具,該方法也具有可行性。對(duì)分段式混合執(zhí)行測(cè)試方法產(chǎn)生的測(cè)試數(shù)據(jù)進(jìn)行檢錯(cuò)能力評(píng)估,是下一步的工作。

    [1] Godefroid P,KlarlundN,SenK.DART:Directed Automated RandomTesting[J].ACMSIGPLAN Notices,2005,40(6):213-223.

    [2] Sen K,Marinov D,Agha G.CUTE:A Concolic Unit Testing Engine for C[J].ACM SIGSOFT Software Engineering Notes,2005,30(5):263-272.

    [3] Burnim J,Sen K.Heuristics for Scalable Dynamic Test Generation[C]//Proceedings of ASE’08.L’aquila, Italy:[s.n.],2008:443-446.

    [4] 崔展齊,王林章,李宣東.一種目標(biāo)制導(dǎo)的混合執(zhí)行測(cè)試方法[J].計(jì)算機(jī)學(xué)報(bào),2011,34(6):953-964.

    [5] 劉 杰,王嘉捷,歐陽(yáng)永基,等.基于污點(diǎn)指針的二進(jìn)制代碼缺陷檢測(cè)[J].計(jì)算機(jī)工程,2012,38(24): 46-49.

    [6] Qu Xiao,Robinson B.A Case Study of Concolic Testing ToolsandTheirLimitations[C]//Proceedingsof ESEM’11.Banff,Canada:IEEE Press,2011:117-126.

    [7] Godefroid P.Higher-order Test Generation[C]//Proceedings of PLDI’11.San Jose,USA:ACM Press,2011: 258-269.

    [8] Godefroid P.CompositionalDynamicTestGeneration[C]//Proceedings of POPL’07.Nice,France: ACM Press,2007:47-54.

    [9] 林錦濱,張曉菲,劉暉.符號(hào)執(zhí)行技術(shù)研究[C]//全國(guó)計(jì)算機(jī)安全學(xué)術(shù)交流會(huì)論文集.麗江:[出版者不詳], 2009:404-408.

    [10] Chipounov V,Kuznetsov V,Candea G.S2E:A Platform for In-vivo Multi-Path Analysis of Software Systems[J]. ACM Transactions on Computer Systems,2012,30(1):1-49.

    [11] Le W.Segmented Symbolic Analysis[C]//Proceedings of ICSE’13.San Francisco,USA:IEEE Press,2013: 212-221.

    [12] Kim M,Kim Y,Jang Y.Industrial Application of Concolic TestingonEmbeddedSoftware:CaseStudies[C]// Proceedings of ICST’12.Montreal,Canada:IEEE Press, 2012:390-399.

    [13] Kim Y,Kim M,Kim Y J,et al.Industrial Application of Concolic Testing Approach:A Case Study on Libexif by Using CREST-BV and KLEE[C]//Proceedings of ICSE’12.Zurich,Switzerland:IEEEPress,2012: 1143-1152.

    [14] Jacob B.External Function Support[EB/OL].(2010-07-07).https://groups.google.com/forum/#1topic/ crest-users/UxRhhbSqNlk.

    [15] Harrold J,Rothermel G.Siemens Programs,HR Variants [EB/OL].[2014-02-16].http://www.cc.gatech.edu/ aristotle/Tools/subjects/.

    編輯 金胡考

    Segmented Code Testing Based on Concolic Testing and Dynamic Analysis

    LIU Chunhong,XU Lihua,YAN Ting,YANG Zongyuan
    (Department of Computer Science and Technology,East China Normal University,Shanghai 200241,China)

    Function calls with unavailable source codes can not be appropriately handled by symbolic execution in traditional concolic testing.To solve this problem,this paper proposes a segmented concolic testing method,which weaves,by demand,symbolic execution,segmented symbolic execution and concrete execution throughout the testing process.These function calls are treated as separate code segments,dynamically executed and analyzed to derive their corresponding program semantics.To demonstrate the effectiveness of the proposed method,this paper implements sCREST,a segmented concolic testing system based on CREST,and experiments with five open source systems. Experimental results show that segmente concolic testing is able to generate test data that covers more branches than that of the traditional approaches.

    software testing;concolic testing;segmented symbolic analysis;dynamic analysis;test data generation; branch coverage

    劉春宏,徐立華,顏 婷,等.基于混合測(cè)試和動(dòng)態(tài)分析的分段代碼測(cè)試[J].計(jì)算機(jī)工程, 2015,41(2):63-69,80.

    英文引用格式:Liu Chunhong,Xu Lihua,Yan Ting,et al.Segmented Code Testing Based on Concolic Testing and Dynamic Analysis[J].Computer Engineering,2015,41(2):63-69,80.

    1000-3428(2015)02-0063-07

    :A

    :TP311.5

    10.3969/j.issn.1000-3428.2015.02.013

    上海市自然科學(xué)基金資助項(xiàng)目(13ZR1413000)。

    劉春宏(1988-),女,碩士研究生,主研方向:軟件測(cè)試;徐立華(通訊作者),副教授、博士;顏 婷,碩士研究生;楊宗源,教授、博士生導(dǎo)師。

    2014-03-12

    :2014-04-15E-mail:lhxu@cs.ecnu.edu.cn

    猜你喜歡
    源代碼測(cè)試數(shù)據(jù)分支
    人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
    基于TXL的源代碼插樁技術(shù)研究
    巧分支與枝
    測(cè)試數(shù)據(jù)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
    軟件源代碼非公知性司法鑒定方法探析
    一類(lèi)擬齊次多項(xiàng)式中心的極限環(huán)分支
    基于自適應(yīng)粒子群優(yōu)化算法的測(cè)試數(shù)據(jù)擴(kuò)增方法
    揭秘龍湖產(chǎn)品“源代碼”
    空間co-location挖掘模式在學(xué)生體能測(cè)試數(shù)據(jù)中的應(yīng)用
    體育科技(2016年2期)2016-02-28 17:06:21
    生成分支q-矩陣的零流出性
    久久香蕉激情| 国产99久久九九免费精品| 国产成人精品在线电影| 国产欧美亚洲国产| 成人亚洲精品一区在线观看| 在线精品无人区一区二区三| 在线永久观看黄色视频| 亚洲国产看品久久| 在线永久观看黄色视频| 热re99久久精品国产66热6| 久久久久网色| 国精品久久久久久国模美| 夫妻午夜视频| 青青草视频在线视频观看| 午夜福利视频精品| 欧美乱码精品一区二区三区| 国产精品熟女久久久久浪| 又紧又爽又黄一区二区| 日韩一区二区三区影片| 午夜精品国产一区二区电影| 亚洲少妇的诱惑av| 午夜福利乱码中文字幕| 精品人妻熟女毛片av久久网站| 免费观看人在逋| 人人妻人人澡人人看| 免费在线观看日本一区| 美女视频免费永久观看网站| 国产欧美亚洲国产| 国产麻豆69| xxxhd国产人妻xxx| 亚洲专区中文字幕在线| 女性生殖器流出的白浆| 亚洲国产av新网站| 无限看片的www在线观看| 欧美日韩av久久| 在线亚洲精品国产二区图片欧美| 亚洲av日韩精品久久久久久密| 制服诱惑二区| 国产免费视频播放在线视频| 国产在线一区二区三区精| 国产一区二区激情短视频 | 老司机深夜福利视频在线观看 | 午夜久久久在线观看| 热99国产精品久久久久久7| 久久久国产欧美日韩av| 久久99一区二区三区| 十分钟在线观看高清视频www| 亚洲av片天天在线观看| 久久国产精品男人的天堂亚洲| 免费女性裸体啪啪无遮挡网站| 女人精品久久久久毛片| 我要看黄色一级片免费的| 91成人精品电影| 亚洲性夜色夜夜综合| bbb黄色大片| 国产成人免费无遮挡视频| 飞空精品影院首页| 老司机影院毛片| 日本wwww免费看| 国产免费一区二区三区四区乱码| 乱人伦中国视频| 美女高潮到喷水免费观看| 69精品国产乱码久久久| 国产亚洲精品一区二区www | 精品人妻1区二区| 成人亚洲精品一区在线观看| 91麻豆av在线| 一边摸一边抽搐一进一出视频| 亚洲国产看品久久| 香蕉国产在线看| 亚洲精品久久午夜乱码| 乱人伦中国视频| 99精国产麻豆久久婷婷| 熟女少妇亚洲综合色aaa.| 成年人午夜在线观看视频| 精品国产一区二区三区四区第35| 18在线观看网站| 国产一区二区 视频在线| 日韩中文字幕欧美一区二区| 啦啦啦 在线观看视频| 日本一区二区免费在线视频| 美女福利国产在线| av线在线观看网站| 国产精品自产拍在线观看55亚洲 | 亚洲熟女精品中文字幕| 亚洲欧美一区二区三区久久| 亚洲精品久久成人aⅴ小说| 亚洲激情五月婷婷啪啪| 亚洲精品久久午夜乱码| 亚洲少妇的诱惑av| 性色av乱码一区二区三区2| 夜夜夜夜夜久久久久| 午夜福利影视在线免费观看| 亚洲av成人不卡在线观看播放网 | 免费久久久久久久精品成人欧美视频| 国产免费一区二区三区四区乱码| 国产精品久久久久久精品古装| 国产在线一区二区三区精| 精品视频人人做人人爽| 国产成人精品在线电影| 国产精品 国内视频| 黄色视频,在线免费观看| av超薄肉色丝袜交足视频| 如日韩欧美国产精品一区二区三区| 菩萨蛮人人尽说江南好唐韦庄| 中文精品一卡2卡3卡4更新| 成人18禁高潮啪啪吃奶动态图| 真人做人爱边吃奶动态| 黄网站色视频无遮挡免费观看| 日韩制服丝袜自拍偷拍| 精品少妇黑人巨大在线播放| 一级片免费观看大全| 欧美日韩视频精品一区| 免费av中文字幕在线| 亚洲精品av麻豆狂野| 久久精品亚洲熟妇少妇任你| 日韩电影二区| 这个男人来自地球电影免费观看| 黄色毛片三级朝国网站| 国产xxxxx性猛交| 最近最新中文字幕大全免费视频| 国产一区二区 视频在线| 飞空精品影院首页| 人人妻人人澡人人爽人人夜夜| 精品一区二区三区四区五区乱码| 97人妻天天添夜夜摸| 国产一卡二卡三卡精品| 欧美日韩福利视频一区二区| 成年人午夜在线观看视频| 久久久精品免费免费高清| 国产精品偷伦视频观看了| 久久人人爽av亚洲精品天堂| 精品亚洲成国产av| 又大又爽又粗| 丰满少妇做爰视频| 欧美变态另类bdsm刘玥| 国产成人av教育| 亚洲精品国产av成人精品| 美女午夜性视频免费| 亚洲精品日韩在线中文字幕| 在线观看免费高清a一片| 涩涩av久久男人的天堂| 又大又爽又粗| 美国免费a级毛片| 波多野结衣av一区二区av| 亚洲黑人精品在线| 亚洲 欧美一区二区三区| 丝瓜视频免费看黄片| 狠狠婷婷综合久久久久久88av| 一级片'在线观看视频| 久久国产精品影院| 精品久久久久久久毛片微露脸 | 亚洲av成人不卡在线观看播放网 | 在线观看www视频免费| 亚洲精品粉嫩美女一区| 在线av久久热| av免费在线观看网站| 人妻一区二区av| 久久精品久久久久久噜噜老黄| 天天躁日日躁夜夜躁夜夜| 美女中出高潮动态图| 日韩大码丰满熟妇| 国产成人a∨麻豆精品| 波多野结衣av一区二区av| 亚洲激情五月婷婷啪啪| netflix在线观看网站| 欧美97在线视频| 免费看十八禁软件| 精品久久久精品久久久| 国产欧美日韩一区二区三 | 亚洲精品第二区| www.999成人在线观看| 日本wwww免费看| 亚洲国产精品成人久久小说| 国产一区二区激情短视频 | 欧美黄色片欧美黄色片| 国产成人欧美在线观看 | 免费在线观看视频国产中文字幕亚洲 | 欧美变态另类bdsm刘玥| 美女主播在线视频| 一边摸一边抽搐一进一出视频| 亚洲男人天堂网一区| 国产成人av教育| 我要看黄色一级片免费的| videos熟女内射| 午夜影院在线不卡| 久热爱精品视频在线9| 日韩欧美国产一区二区入口| 十八禁网站网址无遮挡| 色94色欧美一区二区| 欧美日韩黄片免| 国产淫语在线视频| 男女之事视频高清在线观看| 18禁黄网站禁片午夜丰满| 极品人妻少妇av视频| 一级片'在线观看视频| 大片免费播放器 马上看| 777久久人妻少妇嫩草av网站| 亚洲三区欧美一区| 丁香六月天网| 国产欧美日韩一区二区三 | 丝袜喷水一区| 12—13女人毛片做爰片一| 中文字幕制服av| 新久久久久国产一级毛片| 他把我摸到了高潮在线观看 | 三上悠亚av全集在线观看| 亚洲国产欧美日韩在线播放| 国产日韩欧美在线精品| 亚洲久久久国产精品| 性高湖久久久久久久久免费观看| 日韩欧美免费精品| 99香蕉大伊视频| 久久影院123| 在线十欧美十亚洲十日本专区| 国产精品麻豆人妻色哟哟久久| 国产免费av片在线观看野外av| 免费女性裸体啪啪无遮挡网站| 一区二区av电影网| 午夜久久久在线观看| 欧美日韩av久久| 日本黄色日本黄色录像| 十八禁人妻一区二区| 国产高清videossex| 麻豆乱淫一区二区| 国产91精品成人一区二区三区 | 后天国语完整版免费观看| 亚洲精品国产色婷婷电影| 国产精品一区二区精品视频观看| 蜜桃在线观看..| 成人手机av| 脱女人内裤的视频| 精品亚洲乱码少妇综合久久| 天堂中文最新版在线下载| 精品一区二区三区四区五区乱码| 国产免费视频播放在线视频| 国产一级毛片在线| 99re6热这里在线精品视频| 美女主播在线视频| 亚洲人成电影观看| 亚洲色图 男人天堂 中文字幕| 精品高清国产在线一区| 97精品久久久久久久久久精品| 美女午夜性视频免费| 最近最新中文字幕大全免费视频| 欧美中文综合在线视频| 午夜日韩欧美国产| 欧美av亚洲av综合av国产av| 亚洲激情五月婷婷啪啪| 啦啦啦视频在线资源免费观看| 亚洲 国产 在线| 国产在线一区二区三区精| 狠狠狠狠99中文字幕| 国产高清国产精品国产三级| 另类精品久久| 美女高潮到喷水免费观看| 亚洲av男天堂| 国产精品99久久99久久久不卡| 精品亚洲成国产av| 高清黄色对白视频在线免费看| 丰满人妻熟妇乱又伦精品不卡| 亚洲精品成人av观看孕妇| 中文字幕人妻丝袜一区二区| 色婷婷av一区二区三区视频| 久久精品国产综合久久久| tube8黄色片| 久久精品人人爽人人爽视色| 法律面前人人平等表现在哪些方面 | 制服诱惑二区| 搡老熟女国产l中国老女人| 欧美在线黄色| 三上悠亚av全集在线观看| 亚洲av日韩在线播放| 桃花免费在线播放| 曰老女人黄片| 在线天堂中文资源库| 国产男女超爽视频在线观看| 欧美精品人与动牲交sv欧美| 国产成人a∨麻豆精品| 午夜免费观看性视频| 国产精品成人在线| 黑人操中国人逼视频| av在线老鸭窝| 欧美亚洲 丝袜 人妻 在线| 国产1区2区3区精品| 丁香六月天网| 久久免费观看电影| 91老司机精品| 久久久久国产精品人妻一区二区| 美女脱内裤让男人舔精品视频| cao死你这个sao货| 国产99久久九九免费精品| 久久人人97超碰香蕉20202| 欧美激情高清一区二区三区| 黄色a级毛片大全视频| 自线自在国产av| 国产亚洲精品久久久久5区| 久久久久国产一级毛片高清牌| 亚洲国产精品成人久久小说| 免费高清在线观看日韩| 亚洲综合色网址| 国产精品99久久99久久久不卡| 人人妻人人爽人人添夜夜欢视频| 后天国语完整版免费观看| 真人做人爱边吃奶动态| tube8黄色片| 免费高清在线观看日韩| 久久综合国产亚洲精品| www.自偷自拍.com| 一级片免费观看大全| 看免费av毛片| 免费少妇av软件| 一区在线观看完整版| 精品国产国语对白av| 日韩视频在线欧美| 一级,二级,三级黄色视频| 国产人伦9x9x在线观看| 国产亚洲精品第一综合不卡| 亚洲黑人精品在线| 久久久久久久精品精品| 精品亚洲成a人片在线观看| 免费看十八禁软件| 国产1区2区3区精品| 韩国精品一区二区三区| 欧美日韩成人在线一区二区| 王馨瑶露胸无遮挡在线观看| 国产精品久久久av美女十八| 久久久久国内视频| 中国国产av一级| 婷婷成人精品国产| 肉色欧美久久久久久久蜜桃| 午夜福利在线观看吧| 一区二区三区精品91| 黑丝袜美女国产一区| 波多野结衣一区麻豆| 搡老熟女国产l中国老女人| 国产又爽黄色视频| 十八禁人妻一区二区| 丝袜美足系列| 欧美黑人精品巨大| 午夜精品久久久久久毛片777| 夜夜骑夜夜射夜夜干| 另类亚洲欧美激情| 桃红色精品国产亚洲av| 天天躁日日躁夜夜躁夜夜| 日韩视频在线欧美| 欧美亚洲 丝袜 人妻 在线| 欧美黄色淫秽网站| 国产熟女午夜一区二区三区| 欧美 亚洲 国产 日韩一| 99精品欧美一区二区三区四区| 日韩制服骚丝袜av| 一边摸一边做爽爽视频免费| 中文字幕人妻丝袜制服| 大片电影免费在线观看免费| 丝袜脚勾引网站| 一二三四社区在线视频社区8| 亚洲国产看品久久| 亚洲一卡2卡3卡4卡5卡精品中文| 777久久人妻少妇嫩草av网站| 日本精品一区二区三区蜜桃| 国产欧美日韩综合在线一区二区| 成年人午夜在线观看视频| 国产欧美亚洲国产| 久久人人爽av亚洲精品天堂| 天天影视国产精品| 99香蕉大伊视频| 亚洲精品成人av观看孕妇| 久久女婷五月综合色啪小说| 国产成人啪精品午夜网站| 欧美精品高潮呻吟av久久| 99久久国产精品久久久| 欧美日韩av久久| 国产在线免费精品| 亚洲av男天堂| 国产亚洲一区二区精品| 母亲3免费完整高清在线观看| 中文字幕精品免费在线观看视频| 视频区欧美日本亚洲| 黄色a级毛片大全视频| 热99久久久久精品小说推荐| 日本撒尿小便嘘嘘汇集6| 狂野欧美激情性bbbbbb| 男女之事视频高清在线观看| av在线播放精品| 天天影视国产精品| 久久久精品国产亚洲av高清涩受| 亚洲精品成人av观看孕妇| 一个人免费在线观看的高清视频 | 色播在线永久视频| 久久中文看片网| 精品欧美一区二区三区在线| 国产欧美日韩一区二区三区在线| 最近最新免费中文字幕在线| 美国免费a级毛片| 精品少妇黑人巨大在线播放| www.精华液| 乱人伦中国视频| 久久性视频一级片| 男人爽女人下面视频在线观看| 午夜福利免费观看在线| 男女国产视频网站| 在线观看一区二区三区激情| 别揉我奶头~嗯~啊~动态视频 | 1024视频免费在线观看| 高清欧美精品videossex| 国产亚洲欧美在线一区二区| 国产人伦9x9x在线观看| 美女午夜性视频免费| 在线av久久热| 乱人伦中国视频| 波多野结衣一区麻豆| 国产精品免费视频内射| 丰满少妇做爰视频| 亚洲男人天堂网一区| 免费av中文字幕在线| 日韩电影二区| 99久久精品国产亚洲精品| 韩国高清视频一区二区三区| 免费观看av网站的网址| 脱女人内裤的视频| 欧美av亚洲av综合av国产av| 久久天堂一区二区三区四区| 一本—道久久a久久精品蜜桃钙片| 乱人伦中国视频| 精品国产乱码久久久久久小说| 亚洲精品在线美女| 视频在线观看一区二区三区| 色婷婷久久久亚洲欧美| 久久国产精品大桥未久av| 高潮久久久久久久久久久不卡| 波多野结衣av一区二区av| 亚洲成人国产一区在线观看| 久久精品熟女亚洲av麻豆精品| 精品久久久久久电影网| 欧美97在线视频| av欧美777| 欧美黄色淫秽网站| 丝袜在线中文字幕| 超色免费av| 亚洲欧美精品综合一区二区三区| 精品免费久久久久久久清纯 | 免费观看av网站的网址| 黑人操中国人逼视频| 女人久久www免费人成看片| 精品第一国产精品| 国产精品久久久av美女十八| 一区二区av电影网| 丝袜在线中文字幕| 日韩大码丰满熟妇| 水蜜桃什么品种好| 男女之事视频高清在线观看| 91精品伊人久久大香线蕉| 亚洲精品一二三| 高清av免费在线| 亚洲少妇的诱惑av| 中文字幕人妻熟女乱码| 久久人人爽人人片av| 欧美xxⅹ黑人| 亚洲欧美一区二区三区久久| 国产三级黄色录像| 丁香六月欧美| 日本精品一区二区三区蜜桃| 成人国语在线视频| 中文字幕色久视频| 国产欧美日韩一区二区三区在线| 久久精品亚洲av国产电影网| 亚洲国产精品成人久久小说| 久久久国产精品麻豆| 日日摸夜夜添夜夜添小说| 欧美日本中文国产一区发布| 91老司机精品| 天天影视国产精品| 大码成人一级视频| 免费少妇av软件| 成年女人毛片免费观看观看9 | 人人妻人人爽人人添夜夜欢视频| 久久亚洲精品不卡| 欧美日韩福利视频一区二区| 黑人巨大精品欧美一区二区mp4| 91av网站免费观看| 亚洲精品国产av成人精品| 性色av乱码一区二区三区2| 岛国在线观看网站| 免费观看人在逋| 两性午夜刺激爽爽歪歪视频在线观看 | 女人高潮潮喷娇喘18禁视频| 后天国语完整版免费观看| 美女视频免费永久观看网站| 男人操女人黄网站| 亚洲国产成人一精品久久久| 国产成人av教育| 纯流量卡能插随身wifi吗| 久久久久国内视频| 一边摸一边抽搐一进一出视频| 久久99一区二区三区| 成年美女黄网站色视频大全免费| 成人影院久久| 国产一区有黄有色的免费视频| 婷婷丁香在线五月| 久久亚洲精品不卡| 黑人猛操日本美女一级片| 青春草视频在线免费观看| 亚洲国产中文字幕在线视频| 久久久久久久大尺度免费视频| 国产黄色免费在线视频| 亚洲va日本ⅴa欧美va伊人久久 | 成年人黄色毛片网站| 丰满饥渴人妻一区二区三| 美女大奶头黄色视频| 中文精品一卡2卡3卡4更新| 亚洲精品久久午夜乱码| 在线精品无人区一区二区三| 一级毛片女人18水好多| 国产91精品成人一区二区三区 | av天堂久久9| 久热这里只有精品99| 中国国产av一级| 在线永久观看黄色视频| 9色porny在线观看| 精品人妻熟女毛片av久久网站| 黄色怎么调成土黄色| 一个人免费在线观看的高清视频 | 91麻豆精品激情在线观看国产 | 丝袜在线中文字幕| 在线观看免费日韩欧美大片| 性色av一级| 日韩有码中文字幕| 国产在线一区二区三区精| 操美女的视频在线观看| 精品亚洲成国产av| 国产男人的电影天堂91| 久久久精品免费免费高清| 欧美精品av麻豆av| 国产av一区二区精品久久| 久久久久精品国产欧美久久久 | 久久香蕉激情| 久久人人97超碰香蕉20202| 日本wwww免费看| 国产精品1区2区在线观看. | a 毛片基地| 色精品久久人妻99蜜桃| 一级黄色大片毛片| 久久久国产成人免费| 国产欧美日韩一区二区三区在线| 国产精品秋霞免费鲁丝片| 国产一区有黄有色的免费视频| 少妇的丰满在线观看| 美女中出高潮动态图| 欧美精品av麻豆av| 老汉色av国产亚洲站长工具| 91精品国产国语对白视频| 99精国产麻豆久久婷婷| 老司机深夜福利视频在线观看 | 亚洲国产精品成人久久小说| 亚洲人成电影观看| 亚洲精品国产av蜜桃| 国产精品亚洲av一区麻豆| 午夜福利乱码中文字幕| 法律面前人人平等表现在哪些方面 | 美女大奶头黄色视频| 亚洲精品在线美女| 国产极品粉嫩免费观看在线| 亚洲成人免费av在线播放| 亚洲国产欧美在线一区| 一区二区日韩欧美中文字幕| 制服人妻中文乱码| 一二三四社区在线视频社区8| 窝窝影院91人妻| 90打野战视频偷拍视频| 日韩免费高清中文字幕av| 永久免费av网站大全| 97精品久久久久久久久久精品| 成人手机av| 自线自在国产av| 欧美黄色淫秽网站| 在线观看免费视频网站a站| 久久影院123| 国产在线免费精品| 美国免费a级毛片| 亚洲av欧美aⅴ国产| 激情视频va一区二区三区| 国产国语露脸激情在线看| 国产亚洲av片在线观看秒播厂| √禁漫天堂资源中文www| 中文字幕人妻丝袜一区二区| 午夜日韩欧美国产| 最近最新中文字幕大全免费视频| 亚洲熟女毛片儿| 99久久国产精品久久久| 在线观看一区二区三区激情| 国产精品一区二区在线不卡| 亚洲中文av在线| 亚洲va日本ⅴa欧美va伊人久久 | 久久热在线av| 色94色欧美一区二区| 不卡av一区二区三区| 18在线观看网站| 成年av动漫网址| 亚洲综合色网址| 深夜精品福利| 国产亚洲精品一区二区www | 日本撒尿小便嘘嘘汇集6| 精品人妻1区二区| 亚洲激情五月婷婷啪啪| 成人av一区二区三区在线看 | 韩国精品一区二区三区| 夜夜夜夜夜久久久久| 国产淫语在线视频| 久久人人爽av亚洲精品天堂| 亚洲中文av在线| 在线十欧美十亚洲十日本专区| a在线观看视频网站| 丝瓜视频免费看黄片| 久久久国产一区二区|