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

下載本文檔

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

文檔簡介

1、白盒測試用例設(shè)計(jì)方法一、白盒測試 根據(jù)軟件產(chǎn)品的內(nèi)部工作過程,在計(jì)算機(jī)上進(jìn)行測試,以證實(shí)每種內(nèi)部操作是否符合設(shè)計(jì)規(guī)格要求,所有內(nèi)部成分是否已經(jīng)過檢查。這種測試方法就是白盒測試。白盒測試把測試對象看做一個(gè)打開的盒子,允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計(jì)或選擇測試用例,對程序所有邏輯路徑進(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ī)

2、上運(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億年。圖 10-4-1黑盒子而對一個(gè)具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目也可能是天文數(shù)字。設(shè)給出一個(gè)如圖 10-4-2所示的小程序的流程圖,其中包括了一個(gè)執(zhí)行達(dá)20次的循環(huán)。那么它所包含的不同執(zhí)行路徑數(shù)高達(dá) 條,若要對它進(jìn)行窮舉測試,覆蓋所有的路徑。假使測試程序?qū)γ恳粭l路徑進(jìn)行測試需

3、要1毫秒,同樣假定一天工作24小時(shí),一年工作365 天,那么要想把如圖 10-4-2所示的小程序的所有路徑測試完,則需要3170年。圖 10-4-2白盒測試中的窮舉測試以上的分析表明,實(shí)行窮舉測試,由于工作量過大,實(shí)施起來是不現(xiàn)實(shí)的。任何軟件開發(fā)項(xiàng)目都要受到期限、費(fèi)用、人力和機(jī)時(shí)等條件的限制,盡管為了充分揭露程序中所有隱藏錯(cuò)誤,需要針對所有可能的數(shù)據(jù)進(jìn)行測試,但事實(shí)告訴我們,這樣做是不可能的。軟件工程的總目標(biāo)是充分利用有限的人力、物力資源,高效率、高質(zhì)量、低成本地完成軟件開發(fā)項(xiàng)目。在測試階段既然窮舉測試不可行,為了節(jié)省時(shí)間和資源,提高測試效率,就必須要從數(shù)量極大的可用測試用例中精心地挑選少量的

4、測試數(shù)據(jù),使得采用這些測試數(shù)據(jù)能夠達(dá)到最佳的測試效果,能夠高效率地把隱藏的錯(cuò)誤揭露出來。二、邏輯覆蓋邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計(jì)測試用例的技術(shù)。屬白盒測試。這一方法要求測試人員對程序的邏輯結(jié)構(gòu)有清楚的了解,甚至要能掌握源程序的所有細(xì)節(jié)。由于覆蓋測試的目標(biāo)不同,邏輯覆蓋又可分為:語句覆蓋、判定覆蓋、判定條件覆蓋、條件組合覆蓋及路徑覆蓋。1.語句覆蓋語句覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。這種覆蓋又稱為點(diǎn)覆蓋,它使得程序中每個(gè)可執(zhí)行語句都得到執(zhí)行,但它是最弱的邏輯覆蓋準(zhǔn),效果有限,必須與其他方法交互使用。2.判定覆蓋判定覆蓋就是設(shè)計(jì)若干個(gè)測試用例

5、,運(yùn)行被測程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。判定覆蓋只比語句覆蓋稍強(qiáng)一些,但實(shí)際效果表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中存在的錯(cuò)誤。因此,還需要更強(qiáng)的邏輯覆蓋準(zhǔn)則去檢驗(yàn)判斷內(nèi)部條件。3.條件覆蓋條件覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。條件覆蓋深入到判定中的每個(gè)條件,但可能不能滿足判定覆蓋的要求。4.判定條件覆蓋判定條件覆蓋就是設(shè)計(jì)足夠的測試用例,使得判斷中每個(gè)條件的所有可能取值至少執(zhí)行一次,同時(shí)每個(gè)判斷本身的所有可能判斷結(jié)果至少執(zhí)行一次。換言之,即是要求各個(gè)判斷的所有可能

6、的條件取值組合至少執(zhí)行一次。判定條件覆蓋有缺陷。從表面上來看,它測試了所有條件的取值。但是事實(shí)并非如此。往往某些條件掩蓋了另一些條件。會遺漏某些條件取值錯(cuò)誤的情況。為徹底地檢查所有條件的取值,需要將判定語句中給出的復(fù)合條件表達(dá)式進(jìn)行分解,形成由多個(gè)基本判定嵌套的流程圖。這樣就可以有效地檢查所有的條件是否正確了。圖 10-4-3(a)復(fù)合判定的例子圖 10-4-3(b)改為單個(gè)條件判定的嵌套結(jié)構(gòu)的例子5.多重條件覆蓋多重條件覆蓋就是設(shè)計(jì)足夠的測試用例,運(yùn)行被測程序,使得每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。這是一種相當(dāng)強(qiáng)的覆蓋準(zhǔn)則,可以有效地檢查各種可能的條件取值的組合是否正確。它不但可

7、覆蓋所有條件的可能取值的組合,還可覆蓋所有判斷的可取分支,但可能有的路徑會遺漏掉。測試還不完全。6.路徑測試路徑測試就是設(shè)計(jì)足夠的測試用例,覆蓋程序中所有可能的路徑。這是最強(qiáng)的覆蓋準(zhǔn)則。但在路徑數(shù)目很大時(shí),真正做到完全覆蓋是很困難的,必須把覆蓋路徑數(shù)目壓縮到一定限度。下面我們做一分析。三、關(guān)于控制結(jié)構(gòu)測試的一些討論1.分支結(jié)構(gòu)的路徑數(shù)當(dāng)程序中判定多于一個(gè)時(shí),形成的分支結(jié)構(gòu)可以分為兩類:嵌套型分支結(jié)構(gòu)和連鎖型分支結(jié)構(gòu)。如圖 10-4-4所示。對于嵌套型分支結(jié)構(gòu),若有n個(gè)判定語句,則需要n+1個(gè)測試用例;但對連鎖型分支結(jié)構(gòu),若有n個(gè)判定語句,則需要有 個(gè)測試用例,去覆蓋它的 條路徑。當(dāng)n較大時(shí)將無

8、法測試。(a)嵌套型分支結(jié)構(gòu)(b)連鎖型分支結(jié)構(gòu)圖 10-4-4分支的兩種類型為減少測試用例的數(shù)目,可采用試驗(yàn)設(shè)計(jì)法,抽取部分路徑進(jìn)行測試。由于抽樣服從均勻分布,因此,在假定各條路徑的重要性相同,或暫不明確各條路徑的重要性的情況下可以做到均勻抽樣。如果明確了各條路徑的重要性,還可以采取加權(quán)的辦法,篩選掉部分路徑,再用如下的措施進(jìn)行抽樣。具體步驟如下:(1) 設(shè)耦合型分支結(jié)構(gòu)中有n個(gè)判定,計(jì)算滿足關(guān)系式的最小自然數(shù)m;(2) 設(shè),取正交表L4,并利用它設(shè)計(jì)測試數(shù)據(jù)。例如,一個(gè)耦合型分支結(jié)構(gòu)中有三個(gè)判定語句P1,P2,P3。它全部路徑是238條。先計(jì)算的t,得t= 4。取正交表L4,如圖10-4-

9、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ù)目從條減少到314條。圖 10-4-5(a)正交表L4圖 10-4-5(b)路徑抽樣矩陣2.條件測試的策略程序中的條件分為簡單條件和復(fù)合條件。簡單條件是一個(gè)布爾變量或一個(gè)關(guān)系表達(dá)式(可加前綴NOT),復(fù)合條件由簡單條件通過邏輯運(yùn)算符(AND、OR

10、、NOT)和括號連接而成。如果條件出錯(cuò),至少是條件中某一成分有錯(cuò)。條件中可能的出錯(cuò)類型有:布爾運(yùn)算符錯(cuò)、布爾變量錯(cuò)、布爾括號錯(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中對應(yīng)的約束,則稱條件C的條件約束D由C的執(zhí)行所覆蓋。特別地,布爾變量或布爾表達(dá)式的輸出約

11、束必須是真(t)或假(f);關(guān)系表達(dá)式的輸出約束為符號>、=、<。(1) 設(shè)條件為。其中是布爾變量, 的輸出約束為 ,在此,和或?yàn)閠或?yàn)閒。則 是可能的一個(gè)約束。覆蓋此約束的測試(一次運(yùn)行)將令 為t,為f。BRO策略要求對 的可能約束集合 中的每一個(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)于“<”或“>”,則

12、的約束集合為 。據(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ò)誤。3.循環(huán)測試循環(huán)分為4種不同類型:簡單循環(huán)、連鎖循環(huán)、嵌套循環(huán)和非結(jié)構(gòu)循環(huán),見圖 10-4-6。圖 10-4-6循環(huán)的分類對于簡單循環(huán),測試應(yīng)包括以下幾種,其中的n表示循環(huán)允許的最大次數(shù)。

13、(1) 零次循環(huán):從循環(huán)入口直接跳到循環(huán)出口。(2) 一次循環(huán):查找循環(huán)初始值方面的錯(cuò)誤。(3) 二次循環(huán):檢查在多次循環(huán)時(shí)才能暴露的錯(cuò)誤。(4) m次循環(huán):此時(shí)的mn,也是檢查在多次循環(huán)時(shí)才能暴露的錯(cuò)誤。·最大次數(shù)循環(huán)、比最大次數(shù)多一次的循環(huán)、比最大次數(shù)少一次的循環(huán)。對于嵌套循環(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)為最小值;·對最內(nèi)層循環(huán)做簡單循環(huán)的全部測試。測試時(shí)保持所

14、有外層循環(huán)的循環(huán)變量為最小值。另外,對越界值和非法值做類似的測試。·逐步外推,對其外面一層循環(huán)進(jìn)行測試。測試時(shí)保持所有外層循環(huán)的循環(huán)變量取最小值,所有其它嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。·反復(fù)進(jìn)行,直到所有各層循環(huán)測試完畢。·對全部各層循環(huán)同時(shí)取最小循環(huán)次數(shù),或者同時(shí)取最大循環(huán)次數(shù)。對于后一種測試,由于測試量太大,需人為指定最大循環(huán)次數(shù)。對于連鎖循環(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ú)立的,則需要使用測試

15、嵌套循環(huán)的辦法來處理。對于非結(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í)行一次。1.程序的控制流圖控制流圖是描述程序控制流的一種圖示方法?;究刂茦?gòu)造的圖形符號如圖10-4-7所示。符號稱為控制流圖的一個(gè)結(jié)點(diǎn),一組順序處理框可以映射為一個(gè)單一的結(jié)點(diǎn)??刂屏鲌D中的箭頭稱為邊,它表示了控制流的方向,在選擇或多分支結(jié)

16、構(gòu)中分支的匯聚處,即使沒有執(zhí)行語句也應(yīng)該有一個(gè)匯聚結(jié)點(diǎn)。邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域,當(dāng)對區(qū)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)記為一個(gè)區(qū)域。圖 10-4-7控制流圖的各種圖形符號如果判定中的條件表達(dá)式是復(fù)合條件時(shí),即條件表達(dá)式是由一個(gè)或多個(gè)邏輯運(yùn)算符(OR,AND,NAND,NOR)連接的邏輯表達(dá)式,則需要改復(fù)合條件的判定為一系列只有單個(gè)條件的嵌套的判定。例如對應(yīng)圖 10-4-8(a)的復(fù)合條件的判定,應(yīng)該畫成如圖 10-4-8(b)所示的控制流圖。條件語句ifaORb中條件a和條件b各有一個(gè)只有單個(gè)條件的判定結(jié)點(diǎn)。圖 10-4-8復(fù)合邏輯下的控制流圖2.計(jì)算程序環(huán)路復(fù)雜性進(jìn)行程序的基本路徑測試時(shí),程序

17、的環(huán)路復(fù)雜性給出了程序基本路徑集合中的獨(dú)立路徑條數(shù),這是確保程序中每個(gè)可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目的上界。所謂獨(dú)立路徑,是指包括一組以前沒有處理的語句或條件的一條路徑。如在圖10-4-9(b)所示的控制流圖中,一組獨(dú)立的路徑是path1:1-11path2:1-2-3-4-5-10-1-11path3:1-2-3-6-8-9-10-1-11path4:1-2-3-6-7-9-10-1-11路徑path1,path2,path3,path4組成了圖 10-4-9(b)所示控制流圖的一個(gè)基本路徑集。只要設(shè)計(jì)出的測試用例能夠確保這些基本路徑的執(zhí)行,就可以使得程序中的每個(gè)可執(zhí)行語句至少執(zhí)行一次,每個(gè)條件的取真和取假分支也能得到測試。基本路徑集不是唯一的,對于給定的控制流圖,

溫馨提示

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

評論

0/150

提交評論