白盒測試及用例設(shè)計(jì)_第1頁
白盒測試及用例設(shè)計(jì)_第2頁
白盒測試及用例設(shè)計(jì)_第3頁
白盒測試及用例設(shè)計(jì)_第4頁
白盒測試及用例設(shè)計(jì)_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

白盒測試白盒測試(White-boxTesting,又稱邏輯驅(qū)動(dòng)測試,結(jié)構(gòu)測試)是把測試對(duì)象看作一個(gè)打開的盒子。利用白盒測試法進(jìn)行動(dòng)態(tài)測試時(shí),需要測試軟件產(chǎn)品的內(nèi)部結(jié)構(gòu)和處理過程,不需測試軟件產(chǎn)品的功能。白盒測試又稱為結(jié)構(gòu)測試和邏輯驅(qū)動(dòng)測試。白盒測試法的覆蓋標(biāo)準(zhǔn)有邏輯覆蓋、循環(huán)覆蓋和基本路徑測試。其中邏輯覆蓋包括語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋。六種覆蓋標(biāo)準(zhǔn):語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋發(fā)現(xiàn)錯(cuò)誤的能力呈由弱至強(qiáng)的變化。語句覆蓋每條語句至少執(zhí)行一次。判定覆蓋每個(gè)判定的每個(gè)分支至少執(zhí)行一次。條件覆蓋每個(gè)判定的每個(gè)條件應(yīng)取到各種可能的值。判定/條件覆蓋同時(shí)滿足判定覆蓋條件覆蓋。條件組合覆蓋每個(gè)判定中各條件的每一種組合至少出現(xiàn)一次。路徑覆蓋使程序中每一條可能的路徑至少執(zhí)行一次。白盒測試也稱結(jié)構(gòu)測試或邏輯驅(qū)動(dòng)測試,它是知道產(chǎn)品內(nèi)部工作過程,可通過測試來檢測產(chǎn)品內(nèi)部動(dòng)作是否按照規(guī)格說明書的規(guī)定正常進(jìn)行,按照程序內(nèi)部的結(jié)構(gòu)測試程序,檢驗(yàn)程序中的每條通路是否都有能按預(yù)定要求正確工作,而不顧它的功能,白盒測試的主要方法有邏輯驅(qū)動(dòng)、基路測試等,主要用于軟件驗(yàn)證?!卑缀小狈ㄈ媪私獬绦騼?nèi)部邏輯結(jié)構(gòu)、對(duì)所有邏輯路徑進(jìn)行測試?!卑缀小狈ㄊ歉F舉路徑測試。在使用這一方案時(shí),測試者必須檢查程序的內(nèi)部結(jié)構(gòu),從檢查程序的邏輯著手,得出測試數(shù)據(jù)。貫穿程序的獨(dú)立路徑數(shù)是天文數(shù)字。但即使每條路徑都測試了仍然可能有錯(cuò)誤。第一,窮舉路徑測試決不能查出程序違反了設(shè)計(jì)規(guī)范,即程序本身是個(gè)錯(cuò)誤的程序。第二,窮舉路徑測試不可能查出程序中因遺漏路徑而出錯(cuò)。第三,窮舉路徑測試可能發(fā)現(xiàn)不了一些與數(shù)據(jù)相關(guān)的錯(cuò)誤。白盒測試六種覆蓋方法摘要:白盒測試作為測試人員常用的一種測試方法,越來越受到測試工程師的重視。白盒測試并不是簡單的按照代碼設(shè)計(jì)用例,而是需要根據(jù)不同的測試需求,結(jié)合不同的測試對(duì)象,使用適合的方法進(jìn)行測試。因?yàn)閷?duì)于不同復(fù)雜度的代碼邏輯,可以衍生出許多種執(zhí)行路徑,只有適當(dāng)?shù)臏y試方法,才能幫助我們從代碼的迷霧森林中找到正確的方向。本文介紹六種白盒子測試方法:語句覆蓋、判定覆蓋、條件覆蓋、判定條件覆蓋、條件組合覆蓋、路徑覆蓋。由于邏輯錯(cuò)誤和不正確假設(shè)與一條程序路徑被運(yùn)行的可能性成反比。由于我們經(jīng)常相信某邏輯路徑不可能被執(zhí)行,而事實(shí)上,它可能在正常的情況下被執(zhí)行。由于代碼中的筆誤是隨機(jī)且無法杜絕的,因此我們要進(jìn)行白盒測試。白盒測試又稱結(jié)構(gòu)測試,透明盒測試、邏輯驅(qū)動(dòng)測試或基于代碼的測試。白盒測試是一種測試用例設(shè)計(jì)方法,盒子指的是被測試的軟件,白盒指的是盒子是可視的,你清楚盒子內(nèi)部的東西以及里面是如何運(yùn)作的。白盒的測試用例需要做到:.保證一個(gè)模塊中的所有獨(dú)立路徑至少被使用一次?對(duì)所有邏輯值均需測試.在上下邊界及可操作范圍內(nèi)運(yùn)行所有循環(huán)?檢查內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性白盒測試的目的:通過檢查軟件內(nèi)部的邏輯結(jié)構(gòu),對(duì)軟件中的邏輯路徑進(jìn)行覆蓋測試;在程序不同地方設(shè)立檢查點(diǎn),檢查程序的狀態(tài),以確定實(shí)際運(yùn)行狀態(tài)與預(yù)期狀態(tài)是否一致。白盒測試的特點(diǎn):依據(jù)軟件設(shè)計(jì)說明書進(jìn)行測試、對(duì)程序內(nèi)部細(xì)節(jié)的嚴(yán)密檢驗(yàn)、針對(duì)特定條件設(shè)計(jì)測試用例、對(duì)軟件的邏輯路徑進(jìn)行覆蓋測試。白盒測試的實(shí)施步驟:測試計(jì)劃階段:根據(jù)需求說明書,制定測試進(jìn)度。測試設(shè)計(jì)階段:依據(jù)程序設(shè)計(jì)說明書,按照一定規(guī)范化的方法進(jìn)行軟件結(jié)構(gòu)劃分和設(shè)計(jì)測試用例。測試執(zhí)行階段:輸入測試用例,得到測試結(jié)果。測試總結(jié)階段:對(duì)比測試的結(jié)果和代碼的預(yù)期結(jié)果,分析錯(cuò)誤原因,找到并解決錯(cuò)誤。白盒測試的方法:總體上分為靜態(tài)方法和動(dòng)態(tài)方法兩大類。靜態(tài)分析是一種不通過執(zhí)行程序而進(jìn)行測試的技術(shù)。靜態(tài)分析的關(guān)鍵功能是檢查軟件的表示和描述是否一致,沒有沖突或者沒有歧義。動(dòng)態(tài)分析的主要特點(diǎn)是當(dāng)軟件系統(tǒng)在模擬的或真實(shí)的環(huán)境中執(zhí)行之前、之中和之后,對(duì)軟件系統(tǒng)行為的分析。動(dòng)態(tài)分析包含了程序在受控的環(huán)境下使用特定的期望結(jié)果進(jìn)行正式的運(yùn)行。它顯示了一個(gè)系統(tǒng)在檢查狀態(tài)下是正確還是不正確。在動(dòng)態(tài)分析技術(shù)中,最重要的技術(shù)是路徑和分支測試。下面要介紹的六種覆蓋測試方法屬于動(dòng)態(tài)分析方法。白盒測試的優(yōu)缺點(diǎn)1、 優(yōu)點(diǎn)?迫使測試人員去仔細(xì)思考軟件的實(shí)現(xiàn)?可以檢測代碼中的每條分支和路徑?揭示隱藏在代碼中的錯(cuò)誤?對(duì)代碼的測試比較徹底?最優(yōu)化2、 缺點(diǎn)昂貴無法檢測代碼中遺漏的路徑和數(shù)據(jù)敏感性錯(cuò)誤?不驗(yàn)證規(guī)格的正確性六種覆蓋方法首先為了下文的舉例描述方便,這里先給出一張程序流程圖。(本文以1995年軟件設(shè)計(jì)師考試的一道考試題目為例,圖中紅色字母代表程序執(zhí)行路徑)。

1、語句覆蓋1) 主要特點(diǎn):語句覆蓋是最起碼的結(jié)構(gòu)覆蓋要求,語句覆蓋要求設(shè)計(jì)足夠多的測試用例,使得程序中每條語句至少被執(zhí)行一次。2) 用例設(shè)計(jì):(如果此時(shí)將A路徑上的語句1一〉T去掉,那么用例如下)XY路徑15050OBDE29070OBCE3) 優(yōu)點(diǎn):可以很直觀地從源代碼得到測試用例,無須細(xì)分每條判定表達(dá)式。4) 缺點(diǎn):由于這種測試方法僅僅針對(duì)程序邏輯中顯式存在的語句,但對(duì)于隱藏的條件和可能到達(dá)的隱式邏輯分支,是無法測試的。在本例中去掉了語句1一〉T去掉,那么就少了一條測試路徑。在if結(jié)構(gòu)中若源代碼沒有給出else后面的執(zhí)行分支,那么語句覆蓋測試就不會(huì)考慮這種情況。但是我們不能排除這種以外的分支不會(huì)被執(zhí)行,而往往這種錯(cuò)誤會(huì)經(jīng)常出現(xiàn)。再如,在Do-While結(jié)構(gòu)中,語句覆蓋執(zhí)行其中某一個(gè)條件分支。那么顯然,語句覆蓋對(duì)于多分支的邏輯運(yùn)算是無法全面反映的,它只在乎運(yùn)行一次,而不考慮其他情況。2、判定覆蓋1) 主要特點(diǎn):判定覆蓋又稱為分支覆蓋,它要求設(shè)計(jì)足夠多的測試用例,使得程序中每個(gè)判定至少有一次為真值,有一次為假值,即:程序中的每個(gè)分支至少執(zhí)行一次。每個(gè)判斷的取真、取假至少執(zhí)行一次。2) 用例設(shè)計(jì):XY路徑19090OAE25050OBDE39070OBCE3) 優(yōu)點(diǎn):判定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,當(dāng)然也就具有比語句覆蓋更強(qiáng)的測試能力。同樣判定覆蓋也具有和語句覆蓋一樣的簡單性,無須細(xì)分每個(gè)判定就可以得到測試用例。4) 缺點(diǎn):往往大部分的判定語句是由多個(gè)邏輯條件組合而成(如,判定語句中包含AND、OR、CASE),若僅僅判斷其整個(gè)最終結(jié)果,而忽略每個(gè)條件的取值情況,必然會(huì)遺漏部分測試路徑。3、條件覆蓋1) 主要特點(diǎn):條件覆蓋要求設(shè)計(jì)足夠多的測試用例,使得判定中的每個(gè)條件獲得各種可能的結(jié)果,即每個(gè)條件至少有一次為真值,有一次為假值。2) 用例設(shè)計(jì):XY路徑19070OBC240OBD3) 優(yōu)點(diǎn):顯然條件覆蓋比判定覆蓋,增加了對(duì)符合判定情況的測試,增加了測試路徑。4) 缺點(diǎn):要達(dá)到條件覆蓋,需要足夠多的測試用例,但條件覆蓋并不能保證判定覆蓋。條件覆蓋只能保證每個(gè)條件至少有一次為真,而不考慮所有的判定結(jié)果。4、判定/條件覆蓋1)主要特點(diǎn):設(shè)計(jì)足夠多的測試用例,使得判定中每個(gè)條件的所有可能結(jié)果至少出現(xiàn)一次,每個(gè)判定本身所有可能結(jié)果也至少出現(xiàn)一次。

2)用例設(shè)計(jì):3) 優(yōu)點(diǎn):判定/條件覆蓋滿足判定覆蓋準(zhǔn)則和條件覆蓋準(zhǔn)則,彌補(bǔ)了二者的不足。4) 缺點(diǎn):判定/條件覆蓋準(zhǔn)則的缺點(diǎn)是未考慮條件的組合情況。5、組合覆蓋:1) 主要特點(diǎn):要求設(shè)計(jì)足夠多的測試用例,使得每個(gè)判定中條件結(jié)果的所有可能組合至少出現(xiàn)一次。2) 用例設(shè)計(jì):3) 優(yōu)點(diǎn):多重條件覆蓋準(zhǔn)則滿足判定覆蓋、條件覆蓋和判定/條件覆蓋準(zhǔn)則。更改的判定/條件覆蓋要求設(shè)計(jì)足夠多的測試用例,使得判定中每個(gè)條件的所有可能結(jié)果至少出現(xiàn)一次,每個(gè)判定本身的所有可能結(jié)果也至少出現(xiàn)一次。并且每個(gè)條件都顯示能單獨(dú)影響判定結(jié)果。4) 缺點(diǎn):線性地增加了測試用例的數(shù)量。1) 主要特點(diǎn):設(shè)計(jì)足夠的測試用例,覆蓋程序中所有可能的路徑。2) 用例設(shè)計(jì):3) 優(yōu)點(diǎn):這種測試方法可以對(duì)程序進(jìn)行徹底的測試,比前面五種的覆蓋面都廣。4) 缺點(diǎn):由于路徑覆蓋需要對(duì)所有可能的路徑進(jìn)行測試(包括循環(huán)、條件組合、分支選擇等),那么需要設(shè)計(jì)大量、復(fù)雜的測試用例,使得工作量呈指數(shù)級(jí)增長。而在有些情況下,一些執(zhí)行路徑是不可能被執(zhí)行的,如:If(!A)B++;If(!A)D--;這兩個(gè)語句實(shí)際只包括了2條執(zhí)行路徑,即A為真或假時(shí)候?qū)和D的處理,真或假不可能都存在,而路徑覆蓋測試則認(rèn)為是包含了真與假的4條執(zhí)行路徑。這樣不僅降低了測試效率,而且大量的測試結(jié)果的累積,也為排錯(cuò)帶來麻煩??偨Y(jié)白盒測試是一種被廣泛使用的邏輯測試方法,是由程序內(nèi)部邏輯驅(qū)動(dòng)的一種單元測試方法。只有對(duì)程序內(nèi)部十分了解才能進(jìn)行適度有效的白盒測試。但是貫穿在程序內(nèi)部的邏輯存在著不確定性和無窮性,尤其對(duì)于大規(guī)模復(fù)雜軟件。因此我們不能窮舉所有的邏輯路徑,即使窮舉也未必會(huì)帶來好運(yùn)(窮舉不能查出程序邏輯規(guī)則錯(cuò)誤,不能查出數(shù)據(jù)相關(guān)錯(cuò)誤,不能查出程序遺漏的路徑)。那么正確使用白盒測試,就要先從代碼分析入手,根據(jù)不同的代碼邏輯規(guī)則、語句執(zhí)行情況,選用適合的覆蓋方法。任何一個(gè)高效的測試用例,都是針對(duì)具體測試場景的。邏輯測試不是片面的測試正確的結(jié)果或是測試錯(cuò)誤的結(jié)果,而是盡可能全面地覆蓋每一個(gè)邏輯路徑用例設(shè)計(jì)一、白盒測試根據(jù)軟件產(chǎn)品的內(nèi)部工作過程,在計(jì)算機(jī)上進(jìn)行測試,以證實(shí)每種內(nèi)部操作是否符合設(shè)計(jì)規(guī)格要求,所有內(nèi)部成分是否已經(jīng)過檢查。這種測試方法就是白盒測試。白盒測試把測試對(duì)象看做一個(gè)打開的盒子,允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計(jì)或選擇測試用例,對(duì)程序所有邏輯路徑進(jìn)行測試。通過在不同點(diǎn)檢查程序的狀態(tài),確定實(shí)際的狀態(tài)是否與預(yù)期的狀態(tài)一致。不論是黑盒測試,還是白盒測試,都不可能把所有可能的輸入數(shù)據(jù)都拿來進(jìn)行所謂的窮舉測試。因?yàn)榭赡艿臏y試輸入數(shù)據(jù)數(shù)目往往達(dá)到天文數(shù)字。下面讓我們看兩個(gè)例子。假設(shè)一個(gè)程序P有輸入X和Y及輸出Z,參看圖10-4-1。在字長為32位的計(jì)算機(jī)上運(yùn)行。如果X、Y只取整數(shù),考慮把所有的X、Y值都做為測試數(shù)據(jù),按黑盒測試方法進(jìn)行窮舉測試,力圖全面、無遺漏地“挖掘”出程序中的所有錯(cuò)誤。這樣做可能采用的測試數(shù)據(jù)組(Xi,Yi)的最大可能數(shù)目為:。如果程序P測試一組X、Y數(shù)據(jù)需要1毫秒,且一天工作24小時(shí),一年工作365天,要完成264組測試,需要5億年。X P Z圖10-4-1黑盒子而對(duì)一個(gè)具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目也可能是天文數(shù)字。設(shè)給出一個(gè)如圖10-4-2所示的小程序的流程圖,其中包括了一個(gè)執(zhí)行達(dá)20次的循環(huán)。那么它所包含的不同執(zhí)行路徑數(shù)高達(dá)條,若要對(duì)它進(jìn)行窮舉測試,覆蓋所有的路徑。假使測試程序?qū)γ恳粭l路徑進(jìn)行測試需要1毫秒,同樣假定一天工作24小時(shí),一年工作365天,那么要想把如圖10-4-2所示的小程序的所有路徑測試完,則需要3170年。圖10-4-2白盒測試中的窮舉測試以上的分析表明,實(shí)行窮舉測試,由于工作量過大,實(shí)施起來是不現(xiàn)實(shí)的。任何軟件開發(fā)項(xiàng)目都要受到期限、費(fèi)用、人力和機(jī)時(shí)等條件的限制,盡管為了充分揭露程序中所有隱藏錯(cuò)誤,需要針對(duì)所有可能的數(shù)據(jù)進(jìn)行測試,但事實(shí)告訴我們,這樣做是不可能的。軟件工程的總目標(biāo)是充分利用有限的人力、物力資源,高效率、高質(zhì)量、低成本地完成軟件開發(fā)項(xiàng)目。在測試階段既然窮舉測試不可行,為了節(jié)省時(shí)間和資源,提高測試效率,就必須要從數(shù)量極大的可用測試用例中精心地挑選少量的測試數(shù)據(jù),使得采用這些測試數(shù)據(jù)能夠達(dá)到最佳的測試效果,能夠高效率地把隱藏的錯(cuò)誤揭露出來。二、邏輯覆蓋邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計(jì)測試用例的技術(shù)。屬白盒測試。這一方法要求測試人員對(duì)程序的邏輯結(jié)構(gòu)有清楚的了解,甚至要能掌握源程序的所有細(xì)節(jié)。由于覆蓋測試的目標(biāo)不同,邏輯覆蓋又可分為:語句覆蓋、判定覆蓋、判定一條件覆蓋、條件組合覆蓋及路徑覆蓋。語句覆蓋語句覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。這種覆蓋又稱為點(diǎn)覆蓋,它使得程序中每個(gè)可執(zhí)行語句都得到執(zhí)行,但它是最弱的邏輯覆蓋準(zhǔn),效果有限,必須與其他方法交互使用。判定覆蓋判定覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。判定覆蓋只比語句覆蓋稍強(qiáng)一些,但實(shí)際效果表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中存在的錯(cuò)誤。因此,還需要更強(qiáng)的邏輯覆蓋準(zhǔn)則去檢驗(yàn)判斷內(nèi)部條件。條件覆蓋條件覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。條件覆蓋深入到判定中的每個(gè)條件,但可能不能滿足判定覆蓋的要求。判定一條件覆蓋判定一條件覆蓋就是設(shè)計(jì)足夠的測試用例,使得判斷中每個(gè)條件的所有可能取值至少

執(zhí)行一次,同時(shí)每個(gè)判斷本身的所有可能判斷結(jié)果至少執(zhí)行一次。換言之,即是要求各個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。判定一條件覆蓋有缺陷。從表面上來看,它測試了所有條件的取值。但是事實(shí)并非如此。往往某些條件掩蓋了另一些條件。會(huì)遺漏某些條件取值錯(cuò)誤的情況。為徹底地檢查所有條件的取值,需要將判定語句中給出的復(fù)合條件表達(dá)式進(jìn)行分解,形成由多個(gè)基本判定嵌套的流程圖。這樣就可以有效地檢查所有的條件是否正確了。圖10-4-3(b) 改為單個(gè)條件判定的嵌套結(jié)構(gòu)的例子多重條件覆蓋多重條件覆蓋就是設(shè)計(jì)足夠的測試用例,運(yùn)行被測程序,使得每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。這是一種相當(dāng)強(qiáng)的覆蓋準(zhǔn)則,可以有效地檢查各種可能的條件取值的組合是否正確。它不但可覆蓋所有條件的可能取值的組合,還可覆蓋所有判斷的可取分支,但可能有的路徑會(huì)遺漏掉。測試還不完全。路徑測試路徑測試就是設(shè)計(jì)足夠的測試用例,覆蓋程序中所有可能的路徑。這是最強(qiáng)的覆蓋準(zhǔn)則。但在路徑數(shù)目很大時(shí),真正做到完全覆蓋是很困難的,必須把覆蓋路徑數(shù)目壓縮到一定限度。下面我們做一分析。三、關(guān)于控制結(jié)構(gòu)測試的一些討論分支結(jié)構(gòu)的路徑數(shù)當(dāng)程序中判定多于一個(gè)時(shí),形成的分支結(jié)構(gòu)可以分為兩類:嵌套型分支結(jié)構(gòu)和連鎖型分支結(jié)構(gòu)。如圖10-4-4所示。對(duì)于嵌套型分支結(jié)構(gòu),若有n個(gè)判定語句,則需要n+1個(gè)測試用例;但對(duì)連鎖型分支結(jié)構(gòu),若有n個(gè)判定語句,則需要有個(gè)測試用例,去覆蓋它的條路徑。當(dāng)n較大時(shí)將無法測試。(a)嵌套型分支結(jié)構(gòu)(b)連鎖型分支結(jié)構(gòu)圖10-4-4分支的兩種類型為減少測試用例的數(shù)目,可采用試驗(yàn)設(shè)計(jì)法,抽取部分路徑進(jìn)行測試。由于抽樣服從均勻分布,因此,在假定各條路徑的重要性相同,或暫不明確各條路徑的重要性的情況下可以做到均勻抽樣。如果明確了各條路徑的重要性,還可以采取加權(quán)的辦法,篩選掉部分路徑,再用如下的措施進(jìn)行抽樣。具體步驟如下:設(shè)耦合型分支結(jié)構(gòu)中有n個(gè)判定,計(jì)算滿足關(guān)系式的最小自然數(shù)m;設(shè),取正交表L4,并利用它設(shè)計(jì)測試數(shù)據(jù)。例如,一個(gè)耦合型分支結(jié)構(gòu)中有三個(gè)判定語句P1,P2,P3。它全部路徑是23=8條。先計(jì)算的t,得t=4。取正交表L4,如圖10-4-5(a)所示,把每一列當(dāng)做一個(gè)判定,每一行當(dāng)做可取的測試用例,則正交表L4最多可取三個(gè)判定,分別代之以P1,P2,P3。判定P1,P2,P3的取假分支和取真分支分別記作S1、S2;S3、S4;S5、S6,用各個(gè)判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建立起一個(gè)測試路徑矩陣,如圖10-4-5(b)所示。這樣,測試路徑數(shù)目從條減少到3+1=4條。圖10-4-5(a)正交表L4圖10-4-5(b) 圖10-4-5(b) 路徑抽樣矩陣S3—S5S3-S6S4-S6S4-S6條件測試的策略程序中的條件分為簡單條件和復(fù)合條件。簡單條件是一個(gè)布爾變量或一個(gè)關(guān)系表達(dá)式(可加前綴NOT),復(fù)合條件由簡單條件通過邏輯運(yùn)算符(AND、OR、NOT)和括號(hào)連接而成。如果條件出錯(cuò),至少是條件中某一成分有錯(cuò)。條件中可能的出錯(cuò)類型有:布爾運(yùn)算符錯(cuò)、布爾變量錯(cuò)、布爾括號(hào)錯(cuò)、關(guān)系運(yùn)算符錯(cuò)、算術(shù)表達(dá)式錯(cuò)。如果在一個(gè)判定的復(fù)合條件表達(dá)式中每個(gè)布爾變量和關(guān)系運(yùn)算符最多只出現(xiàn)一次,而且沒有公共變量,應(yīng)用一種稱之為BRO(分支與關(guān)系運(yùn)算符)的測試法可以發(fā)現(xiàn)多個(gè)布爾運(yùn)算符或關(guān)系運(yùn)算符錯(cuò),以及其他錯(cuò)誤。BRO策略引入條件約束的概念。設(shè)有n個(gè)簡單條件的復(fù)合條件C,其條件約束為,其中是條件C中第i個(gè)簡單條件的輸出約束。如果在C的執(zhí)行過程中,其每個(gè)簡單條件的輸出都滿足D中對(duì)應(yīng)的約束,則稱條件C的條件約束D由C的執(zhí)行所覆蓋。特別地,布爾變量或布爾表達(dá)式的輸出約束必須是真(?;蚣伲╢);關(guān)系表達(dá)式的輸出約束為符號(hào)〉、二、<。(1) 設(shè)條件為。其中是布爾變量,的輸出約束為,在此,和或?yàn)閠或?yàn)閒。則是可能的一個(gè)約束。覆蓋此約束的測試(一次運(yùn)行)將令為t,為f。BRO策略要求對(duì)的可能約束集合中的每一個(gè),分別設(shè)計(jì)一組測試用例。如果布爾運(yùn)算符有錯(cuò),這三組測試用例的運(yùn)行結(jié)果必有一組導(dǎo)致失敗。(2)設(shè)條件為。其中是布爾表達(dá)式,和是算術(shù)表達(dá)式,的輸出約束為,在此,或?yàn)閠或?yàn)閒;則是<、=或〉。因此,只有與中的不同,可以修改的約束集合,導(dǎo)出的約束集合。因?yàn)樵谥?,“t”相當(dāng)于"二”,“f”相當(dāng)于“<”或“>”,則的約束集合為。據(jù)此設(shè)計(jì)4組測試用例,檢查中可能的布爾或關(guān)系運(yùn)算符中的錯(cuò)誤。(3)設(shè)條件為。其中都是算術(shù)表達(dá)式,的輸出約束為,在此,和的約束均為<、二、>。中只有與中的不同,可以修改的約束集合,導(dǎo)出的約束集合。因?yàn)樵谥?,“t”相當(dāng)于">”,〃f〃相當(dāng)于“<”或“二”,則的約束集合為。根據(jù)這個(gè)約束集合設(shè)計(jì)測試用例,就能夠檢測中的關(guān)系運(yùn)算符中的錯(cuò)誤。循環(huán)測試循環(huán)分為4種不同類型:簡單循環(huán)、連鎖循環(huán)、嵌套循環(huán)和非結(jié)構(gòu)循環(huán),見圖10-4-6。非結(jié)構(gòu)循環(huán)對(duì)于簡單循環(huán),測試應(yīng)包括以下幾種,其中的n表示循環(huán)允許的最大次數(shù)。(1)零次循環(huán):從循環(huán)入口直接跳到循環(huán)出口。一次循環(huán):查找循環(huán)初始值方面的錯(cuò)誤。二次循環(huán):檢查在多次循環(huán)時(shí)才能暴露的錯(cuò)誤。m次循環(huán):此時(shí)的mVn,也是檢查在多次循環(huán)時(shí)才能暴露的錯(cuò)誤。?最大次數(shù)循環(huán)、比最大次數(shù)多一次的循環(huán)、比最大次數(shù)少一次的循環(huán)。對(duì)于嵌套循環(huán),不能將簡單循環(huán)的測試方法簡單地?cái)U(kuò)大到嵌套循環(huán),因?yàn)榭赡艿臏y試數(shù)目將隨嵌套層次的增加呈幾何倍數(shù)增長。這可能導(dǎo)致一個(gè)天文數(shù)字的測試數(shù)目。下面給出一種有助于減少測試數(shù)目的測試方法。?除最內(nèi)層循環(huán)外,從最內(nèi)層循環(huán)開始,置所有其他層的循環(huán)為最小值;?對(duì)最內(nèi)層循環(huán)做簡單循環(huán)的全部測試。測試時(shí)保持所有外層循環(huán)的循環(huán)變量為最小值。另外,對(duì)越界值和非法值做類似的測試。?逐步外推,對(duì)其外面一層循環(huán)進(jìn)行測試。測試時(shí)保持所有外層循環(huán)的循環(huán)變量取最小值,所有其它嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。?反復(fù)進(jìn)行,直到所有各層循環(huán)測試完畢。對(duì)全部各層循環(huán)同時(shí)取最小循環(huán)次數(shù),或者同時(shí)取最大循環(huán)次數(shù)。對(duì)于后一種測試,由于測試量太大,需人為指定最大循環(huán)次數(shù)。對(duì)于連鎖循環(huán),要區(qū)別兩種情況。如果各個(gè)循環(huán)互相獨(dú)立,則連鎖循環(huán)可以用與簡單循環(huán)相同的方法進(jìn)行測試。例如,有兩個(gè)循環(huán)處于連鎖狀態(tài),則前一個(gè)循環(huán)的循環(huán)變量的值就可以做為后一個(gè)循環(huán)的初值。但如果幾個(gè)循環(huán)不是互相獨(dú)立的,則需要使用測試嵌套循環(huán)的辦法來處理。對(duì)于非結(jié)構(gòu)循環(huán),應(yīng)該使用結(jié)構(gòu)化程序設(shè)計(jì)方法重新設(shè)計(jì)測試用例。四、基本路徑測試如果把覆蓋的路徑數(shù)壓縮到一定限度內(nèi),例如,程序中的循環(huán)體只執(zhí)行零次和一次,就成為基本路徑測試。它是在程序控制流圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計(jì)測試用例的方法。設(shè)計(jì)出的測試用例要保證在測試中,程序的每一個(gè)可執(zhí)行語句至少要執(zhí)行一次。程序的控制流圖控制流圖是描述程序控制流的一種圖示方法?;究刂茦?gòu)造的圖形符號(hào)如圖10-4-7所示。符號(hào)。稱為控制流圖的一個(gè)結(jié)點(diǎn),一組順序處理框可以映射為一個(gè)單一的結(jié)點(diǎn)。控制流圖中的箭頭稱為邊,它表示了控制流的方向,在選擇或多分支結(jié)構(gòu)中分支的匯聚處,即使沒有執(zhí)行語句也應(yīng)該有一個(gè)匯聚結(jié)點(diǎn)。邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域,當(dāng)對(duì)區(qū)域計(jì)數(shù)

時(shí),圖形外的區(qū)域也應(yīng)記為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論