軟件測試課件9.25--白盒測試技術_hebut_第1頁
軟件測試課件9.25--白盒測試技術_hebut_第2頁
軟件測試課件9.25--白盒測試技術_hebut_第3頁
軟件測試課件9.25--白盒測試技術_hebut_第4頁
軟件測試課件9.25--白盒測試技術_hebut_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、白盒測試白盒測試吳鴻韜軟件測試方法和技術軟件測試方法和技術第第2版版第第3章章 軟件測試的方法軟件測試的方法方法論和具體方法方法論和具體方法p 從方法論看,更多體現(xiàn)了一種哲學的思想,例如辯證統(tǒng)一的方法,在測試中有許多對立統(tǒng)一體,如靜態(tài)測試和動態(tài)測試、白盒測試和黑盒測試、自動化測試和手工測試等。p 軟件測試的方法論來源于軟件工程的方法論,例如有面向對象的開發(fā)方法,就有面向對象的測試方法;有敏捷方法,就有和敏捷方法對應的測試方法。黑盒子和白盒子黑盒子和白盒子功能測試功能測試數(shù)據(jù)驅動測試數(shù)據(jù)驅動測試 結構測試結構測試邏輯驅動測試邏輯驅動測試 客戶需求事件驅動輸入輸出靜態(tài)的和動態(tài)的靜態(tài)的和動態(tài)的主持人

2、主持人作者記錄員列席人員內(nèi)審員內(nèi)審員技術專業(yè)人員用戶代表不正式正式互審 走讀 審查會議運行程序運行程序自動測試和手工測試自動測試和手工測試手工模擬用戶手工模擬用戶操作操作3.1白盒測試方法白盒測試方法測試覆蓋標準測試覆蓋標準測試覆蓋標準測試覆蓋標準o 流程圖中包括了一個執(zhí)行達流程圖中包括了一個執(zhí)行達2020次的循環(huán)。那次的循環(huán)。那么它所包含的不同執(zhí)行路徑數(shù)高達么它所包含的不同執(zhí)行路徑數(shù)高達5 52020條,若條,若要對它進行窮舉測試,覆蓋所有的路徑。假要對它進行窮舉測試,覆蓋所有的路徑。假使測試程序對每一條路徑進行測試需要使測試程序對每一條路徑進行測試需要1 1毫毫秒,同樣假定一天工作秒,同樣

3、假定一天工作2424小時,一年工作小時,一年工作365 365 天,天, 那么要想把如圖所示的小程序的那么要想把如圖所示的小程序的所有路徑測試完,則需要所有路徑測試完,則需要31703170年。年。白盒測試概念白盒測試概念o 白盒測試也稱結構測試或邏輯驅動測試,是白盒測試也稱結構測試或邏輯驅動測試,是一種測試用例設計方法,它從程序的控制結一種測試用例設計方法,它從程序的控制結構導出測試用例。構導出測試用例。o 白盒測試使用被測單元內(nèi)部如何工作的信息,白盒測試使用被測單元內(nèi)部如何工作的信息,允許測試人員對程序內(nèi)部邏輯結構及有關信允許測試人員對程序內(nèi)部邏輯結構及有關信息來設計和選擇測試用例,對程序

4、的邏輯路息來設計和選擇測試用例,對程序的邏輯路徑進行測試?;谝粋€應用代碼的內(nèi)部邏輯徑進行測試?;谝粋€應用代碼的內(nèi)部邏輯知識,測試是基于覆蓋全部代碼、分支、路知識,測試是基于覆蓋全部代碼、分支、路徑、條件。徑、條件。 白盒測試的主要原則白盒測試的主要原則:o 保證一個模塊中的所有獨立路徑至少被執(zhí)行保證一個模塊中的所有獨立路徑至少被執(zhí)行一次;一次;o 對所有的邏輯值均需要測試真、假兩個分支;對所有的邏輯值均需要測試真、假兩個分支;o 對程序進行邊界檢查對程序進行邊界檢查( (常見的如數(shù)據(jù)結構越常見的如數(shù)據(jù)結構越界檢查界檢查) );o 檢查內(nèi)部數(shù)據(jù)結構以確保其有效性。檢查內(nèi)部數(shù)據(jù)結構以確保其有效

5、性。白盒測試的主要方法白盒測試的主要方法o 邏輯驅動測試邏輯驅動測試o 語句覆蓋語句覆蓋o 判定覆蓋判定覆蓋o 條件覆蓋條件覆蓋o 判定判定/條件覆蓋條件覆蓋o 條件組合覆蓋條件組合覆蓋o 基本路徑測試基本路徑測試邏輯驅動測試邏輯驅動測試o 語句覆蓋:語句覆蓋就是設計若干個測語句覆蓋:語句覆蓋就是設計若干個測試用例,運行被測試程序,使得每一條試用例,運行被測試程序,使得每一條可執(zhí)行語句至少執(zhí)行一次可執(zhí)行語句至少執(zhí)行一次o 判定覆蓋(也稱為分支覆蓋):設計若判定覆蓋(也稱為分支覆蓋):設計若干個測試用例,運行所測程序,使程序干個測試用例,運行所測程序,使程序中每個判斷的取真分支和取假分支至少中每

6、個判斷的取真分支和取假分支至少執(zhí)行一次;執(zhí)行一次;o 條件覆蓋:設計足夠多的測試用例,運條件覆蓋:設計足夠多的測試用例,運行所測程序,使程序中每個判斷的每個行所測程序,使程序中每個判斷的每個條件的每個可能取值至少執(zhí)行一次;條件的每個可能取值至少執(zhí)行一次;邏輯驅動測試邏輯驅動測試o 判定判定/ /條件覆蓋:設計足夠多的測試用例,條件覆蓋:設計足夠多的測試用例,運行所測程序,使程序中每個判斷的每運行所測程序,使程序中每個判斷的每個條件的所有可能取值至少執(zhí)行一次,個條件的所有可能取值至少執(zhí)行一次,并且每個可能的判斷結果也至少執(zhí)行一并且每個可能的判斷結果也至少執(zhí)行一次,換句話說,即是要求各個判斷的所次

7、,換句話說,即是要求各個判斷的所有可能的條件取值組合至少執(zhí)行一次;有可能的條件取值組合至少執(zhí)行一次;o 條件組合覆蓋:設計足夠多的測試用例,條件組合覆蓋:設計足夠多的測試用例,運行所測程序,使程序中每個判斷的所運行所測程序,使程序中每個判斷的所有可能的條件取值組合至少執(zhí)行一次;有可能的條件取值組合至少執(zhí)行一次;基本路徑測試基本路徑測試o 設計足夠多的測試用例,運行所測程序,要設計足夠多的測試用例,運行所測程序,要覆蓋程序中所有可能的路徑。這是最強的覆覆蓋程序中所有可能的路徑。這是最強的覆蓋準則。但在路徑數(shù)目很大時,真正做到完蓋準則。但在路徑數(shù)目很大時,真正做到完全覆蓋是很困難的,必須把覆蓋路徑

8、數(shù)目壓全覆蓋是很困難的,必須把覆蓋路徑數(shù)目壓縮到一定限度??s到一定限度。o 在程序控制流程的基礎上,分析控制構造的在程序控制流程的基礎上,分析控制構造的環(huán)路復雜性,導出基本可執(zhí)行路徑集合,從環(huán)路復雜性,導出基本可執(zhí)行路徑集合,從而設計測試用例而設計測試用例語句覆蓋語句覆蓋 o 語句覆蓋語句覆蓋”是一個比較弱的測試標準,它的含義是:是一個比較弱的測試標準,它的含義是:選擇足夠的測試用例,使得程序中每個語句至少都選擇足夠的測試用例,使得程序中每個語句至少都能被執(zhí)行一次。能被執(zhí)行一次。 floatfloat M (float AM (float A,float Bfloat B,float X)fl

9、oat X) if (A1) & (B=0) if (A1) & (B=0) X=X/AX=X/A; if (A=2) | (X1) if (A=2) | (X1) X=X+1X=X+1; return X;return X; 語句覆蓋語句覆蓋為使程序中每個語句至為使程序中每個語句至少執(zhí)行一次,只需設計一少執(zhí)行一次,只需設計一個能通過路徑個能通過路徑aceace的例子的例子就可以了,例如選擇輸入就可以了,例如選擇輸入數(shù)據(jù)為:數(shù)據(jù)為: A=2A=2,B=0B=0,X=3 X=3 就可達到就可達到“語句覆蓋語句覆蓋”標準。標準。 語句覆蓋 語句覆蓋語句覆蓋從上例可看出,語句覆蓋實際

10、上是很弱的,從上例可看出,語句覆蓋實際上是很弱的,如果第一個條件語句中的如果第一個條件語句中的ANDAND錯誤地編寫成錯誤地編寫成OROR,上面的測試用例是不能發(fā)現(xiàn)這個錯誤的;,上面的測試用例是不能發(fā)現(xiàn)這個錯誤的;又如第三個條件語句中又如第三個條件語句中X X1 1誤寫成誤寫成X X0 0,這,這個測試用例也不能暴露它,此外,沿著路徑個測試用例也不能暴露它,此外,沿著路徑abdabd執(zhí)行時,執(zhí)行時,X X的值應該保持不變,如果這一的值應該保持不變,如果這一方面有錯誤,上述測試數(shù)據(jù)也不能發(fā)現(xiàn)它們。方面有錯誤,上述測試數(shù)據(jù)也不能發(fā)現(xiàn)它們。 語句覆蓋語句覆蓋void DoWork(int x,int

11、 y,int z) void DoWork(int x,int y,int z) int k=0,j=0; int k=0,j=0; if(x3)&(z3)&(z5) if(x= =4)|(y5) j=x j=x* *y+10; /y+10; /語句塊語句塊22 j=j%3; / j=j%3; /語句塊語句塊33語句覆蓋語句覆蓋Yes入口Noabc執(zhí)行語句塊2執(zhí)行語句塊1YesdNoe出口執(zhí)行語句塊3(x3)&(z5)為了測試語句覆蓋率只為了測試語句覆蓋率只要設計一個測試用例就可要設計一個測試用例就可以把三個執(zhí)行語句塊中的以把三個執(zhí)行語句塊中的語句覆蓋了。測試用例輸語句

12、覆蓋了。測試用例輸入為:入為: x=4x=4、y=5y=5、z=5z=5程序執(zhí)行的路徑是:程序執(zhí)行的路徑是:abdabd語句覆蓋語句覆蓋該測試用例雖然覆蓋了可執(zhí)行語句,但并該測試用例雖然覆蓋了可執(zhí)行語句,但并不能檢查判斷邏輯是否有問題,例如在第一不能檢查判斷邏輯是否有問題,例如在第一個判斷中把個判斷中把&錯誤的寫成了錯誤的寫成了|,則上面的測,則上面的測試用例仍可以覆蓋所有的執(zhí)行語句。試用例仍可以覆蓋所有的執(zhí)行語句。o 一般認為一般認為“語句覆蓋語句覆蓋”是很不充分的一種標是很不充分的一種標準,是最弱的邏輯覆蓋準則。準,是最弱的邏輯覆蓋準則。判定覆蓋判定覆蓋 o 執(zhí)行足夠的測試用例,使

13、得程序中的每一個執(zhí)行足夠的測試用例,使得程序中的每一個判定取真分支和取假分支至少都通過一次。判定取真分支和取假分支至少都通過一次。 判定覆蓋判定覆蓋對例對例1 1的程序,如果設計兩個例子,使的程序,如果設計兩個例子,使它們能通過路徑它們能通過路徑aceace和和abdabd,或者通過路徑,或者通過路徑acdacd和和abeabe,就可達到,就可達到“判定覆蓋判定覆蓋”標準,標準,為此,可以選擇輸入數(shù)據(jù)為:為此,可以選擇輸入數(shù)據(jù)為: A=3A=3,B=0B=0,X=1 (X=1 (沿路徑沿路徑acdacd執(zhí)行執(zhí)行) ); A=2A=2,B=1B=1,X=3(X=3(沿路徑沿路徑abeabe執(zhí)行執(zhí)

14、行) ) 判定覆蓋判定覆蓋判定覆蓋 判定覆蓋 A=3,B=0,X=1 (沿路徑acd執(zhí)行) A=2,B=1,X=3 (沿路徑abe執(zhí)行)判定覆蓋判定覆蓋對于例對于例2 2的程序,如果設計兩個測試的程序,如果設計兩個測試用例則可以滿足條件覆蓋的要求。用例則可以滿足條件覆蓋的要求。 測試用例的輸入為:測試用例的輸入為:x=4x=4、y=5y=5、z=5z=5x=2x=2、y=5y=5、z=5z=5 上面的兩個測試用例雖然能夠滿足上面的兩個測試用例雖然能夠滿足條件覆蓋的要求,但是也不能對判斷條條件覆蓋的要求,但是也不能對判斷條件進行檢查,例如把第二個條件件進行檢查,例如把第二個條件y5y5錯誤錯誤的

15、寫成的寫成y5,y3)&(z5)判定覆蓋判定覆蓋往往大部分的判定語句是由多個邏輯條往往大部分的判定語句是由多個邏輯條件組合而成,若僅僅判斷其整個最終結件組合而成,若僅僅判斷其整個最終結果,而忽略每個條件的取值情況,比然果,而忽略每個條件的取值情況,比然會遺漏部分測試路徑會遺漏部分測試路徑 條件覆蓋條件覆蓋 o “條件覆蓋條件覆蓋”的含義是:執(zhí)行足夠的測試用的含義是:執(zhí)行足夠的測試用例,使得判定中的每個條件的可能取值至少例,使得判定中的每個條件的可能取值至少滿足一次。滿足一次。 條件覆蓋條件覆蓋例例1 1的程序有四個條件:的程序有四個條件: A A1 1、 B=0B=0、A=2A=2、X

16、 X1 1 為了達到為了達到“條件覆蓋條件覆蓋”標準,需要執(zhí)行足夠的測試用例使得標準,需要執(zhí)行足夠的測試用例使得在在a a點有:點有: A A1 1、A1A1、B=0B=0、B0 B0 等各種結果出現(xiàn),以及在等各種結果出現(xiàn),以及在b b點有:點有: A=2A=2、A2A2、X X1 1、X1 X1 等各種結果出現(xiàn)。等各種結果出現(xiàn)?,F(xiàn)在只需設計以下兩個測試用例就可滿足這一標準:現(xiàn)在只需設計以下兩個測試用例就可滿足這一標準: A=2A=2,B=0B=0,X=4X=4 ( (沿路徑沿路徑aceace執(zhí)行執(zhí)行) ); A=1A=1,B=1B=1,X=1X=1 ( (沿路徑沿路徑abdabd執(zhí)行執(zhí)行)

17、)。 條件覆蓋條件覆蓋條件覆蓋條件覆蓋A=2A=2,B=0B=0,X=4X=4 ( (沿路徑沿路徑aceace執(zhí)行執(zhí)行) )A=1A=1,B=1B=1,X=1X=1 ( (沿路徑沿路徑abdabd執(zhí)行執(zhí)行)條件覆蓋條件覆蓋對例對例2 2中的所有條件取值加以標記。中的所有條件取值加以標記。對于第一個判斷:對于第一個判斷:條件條件x3 x3 取真值為取真值為T1T1,取假值為,取假值為F1F1條件條件z10 z5 y5 取真值為取真值為T4T4,取假值為,取假值為F4F4Yes入口Noabc執(zhí)行語句塊2執(zhí)行語句塊1YesdNoe出口執(zhí)行語句塊3(x3)&(z5)條件覆蓋條件覆蓋則可以設計測

18、試用例如下則可以設計測試用例如下測試用例測試用例 通過路通過路徑徑 條件取值條件取值覆蓋分支覆蓋分支x=4x=4、y=6y=6、z=5 z=5 abdabdT1T1、T2T2、T3T3、T4 T4 bdbdx=2x=2、y=5y=5、z=5 z=5 aceaceF1F1、T2T2、F3F3、F4 F4 cecex=4x=4、y=5y=5、z=15 z=15 acdacdT1T1、F2F2、T3T3、F4 F4 cdcd 上面的測試用例不但覆蓋了所有分支的上面的測試用例不但覆蓋了所有分支的真假兩個分支,而且覆蓋了判斷中的所有條真假兩個分支,而且覆蓋了判斷中的所有條件的可能值。件的可能值。 Yes

19、入口Noabc執(zhí)行語句塊2執(zhí)行語句塊1YesdNoe出口執(zhí)行語句塊3(x3)&(z5)條件覆蓋條件覆蓋o “條件覆蓋條件覆蓋”通常比通常比“判定覆蓋判定覆蓋”強,因為強,因為它使一個判定中的每一個條件都取到了兩個它使一個判定中的每一個條件都取到了兩個不同的結果,而判定覆蓋則不保證這一點。不同的結果,而判定覆蓋則不保證這一點。o “條件覆蓋條件覆蓋”并不包含并不包含“判定覆蓋判定覆蓋”,如對,如對語句語句IF(A AND B)THEN S IF(A AND B)THEN S 設計測試用例使其設計測試用例使其滿足滿足 條件覆蓋條件覆蓋,即使即使A A為真并使為真并使B B為假為假, ,以及

20、以及使使A A為假而且為假而且B B為真為真, ,但是它們都未能使語句但是它們都未能使語句S S得以執(zhí)行。得以執(zhí)行。 條件覆蓋條件覆蓋 如對例如對例2 2設計了下面的測試用例,設計了下面的測試用例,則雖然滿足了條件覆蓋,但只覆蓋了則雖然滿足了條件覆蓋,但只覆蓋了第一個條件的取假分支和第二個條件第一個條件的取假分支和第二個條件的取真分支,不滿足的取真分支,不滿足分支分支覆蓋的要求。覆蓋的要求。 測試用例測試用例 通過路徑通過路徑 條件取值條件取值覆蓋分覆蓋分支支x=2、y=6、z=5 acdF1、T2、F3、T4 cdx=4、y=5、z=15 acdT1、F2、T3、F4 cdYes入口Noab

21、c執(zhí)行語句塊2執(zhí)行語句塊1YesdNoe出口執(zhí)行語句塊3(x3)&(z5)判定判定/條件覆蓋條件覆蓋o 判定條件覆蓋判定條件覆蓋”,它的含義是:執(zhí)行足夠,它的含義是:執(zhí)行足夠的測試用例,使得的測試用例,使得分支分支中每個條件取到各種中每個條件取到各種可能的值,并使每個可能的值,并使每個分支分支取到各種可能的結取到各種可能的結果。果。n 對例對例1 1的程序,前面的兩個例子的程序,前面的兩個例子 A=2A=2,B=0B=0,X=4 (X=4 (沿沿aceace路路) ) A=1 A=1,B=1B=1,X=1 (X=1 (沿沿abdabd路徑路徑) ) 是滿足這一標準的是滿足這一標準的。判

22、定判定/條件覆蓋條件覆蓋對例對例2 2,根據(jù)定義只需設計以下,根據(jù)定義只需設計以下兩個測試用例便可以覆蓋兩個測試用例便可以覆蓋8 8個條件值個條件值以及以及4 4個判斷分支。個判斷分支。 Yes入口Noabc執(zhí)行語句塊2執(zhí)行語句塊1YesdNoe出口執(zhí)行語句塊3(x3)&(z5)測試用例測試用例 通過通過路徑路徑 條件取值條件取值覆蓋覆蓋分支分支x=4x=4、y=6y=6、z=5 z=5 abdabdT1T1、T2T2、T3T3、T4 T4 bdbdx=2x=2、y=5y=5、z=11z=11aceaceF1F1、F2F2、F3F3、F4 F4 cece判定判定/條件覆蓋條件覆蓋o 分

23、支分支/ /條件覆蓋從表面來看,它測試了所有條件的條件覆蓋從表面來看,它測試了所有條件的取值,但是實際上某些條件掩蓋了另一些條件。取值,但是實際上某些條件掩蓋了另一些條件。o 例如對于條件表達式例如對于條件表達式(x3)&(z3)&(z3x3)為假則一般的編譯器不在判斷是否為假則一般的編譯器不在判斷是否z10z5y5)來說,若)來說,若x=4x=4測試測試結果為真,就認為表達式的結果為真,這時不再檢結果為真,就認為表達式的結果為真,這時不再檢查(查(y5y5)條件了。因此,采用分支)條件了。因此,采用分支/ /條件覆蓋,邏條件覆蓋,邏輯表達式中的錯誤不一定能夠查出來了。輯表達式

24、中的錯誤不一定能夠查出來了。 條件組合覆蓋條件組合覆蓋 o 它的含義是:執(zhí)行足夠的例子,使得每個判它的含義是:執(zhí)行足夠的例子,使得每個判定中條件的各種可能組合都至少出現(xiàn)一次。定中條件的各種可能組合都至少出現(xiàn)一次。顯然,滿足顯然,滿足“條件組合覆蓋條件組合覆蓋”的測試用例是的測試用例是一定滿足一定滿足“分支覆蓋分支覆蓋”、“條件覆蓋條件覆蓋”和和“分支分支/ /條件覆蓋條件覆蓋”的。的。 條件組合覆蓋條件組合覆蓋再看例再看例1 1的程序,我們需要選擇適當?shù)睦某绦?,我們需要選擇適當?shù)睦?,使得下面子,使得下?8 8種條件組合都能夠出現(xiàn):種條件組合都能夠出現(xiàn):1 1)A1, B=0A1, B=0

25、 2)2) A1, B0A1, B03)3) A1, B=0A1, B=04) A1, B04) A1, B05) A=2, X1 5) A=2, X1 6) A=2,X1 6) A=2,X1 7) A2, X1 7) A2, X1 8) A2, X1 8) A2, X1 5)5)、 6)6)、 7)7)、8 8)四種情況是第二)四種情況是第二個個 IFIF語句的條件組合,而語句的條件組合,而X X的值在該語的值在該語句之前是要經(jīng)過計算的,所以還必須根句之前是要經(jīng)過計算的,所以還必須根據(jù)程序的邏輯推算出在程序的入口點據(jù)程序的邏輯推算出在程序的入口點X X的的輸入值應是什么。輸入值應是什么。 條

26、件組合覆蓋條件組合覆蓋下面設計的四個例子可以使下面設計的四個例子可以使上述上述 8 8種條件組合至少出現(xiàn)一次:種條件組合至少出現(xiàn)一次: A=2A=2,B=0B=0,X=4 X=4 使使 1)1)、5)5)兩種情況出現(xiàn);兩種情況出現(xiàn); A=2A=2,B=1B=1,X=1 X=1 使使 2)2)、6)6)兩種情況出現(xiàn);兩種情況出現(xiàn); A=1A=1,B=0B=0,X=2 X=2 使使 3)3)、7)7)兩種情況出現(xiàn);兩種情況出現(xiàn); A=1A=1,B=1B=1,X=1 X=1 使使 4)4)、8)8)兩種情況出現(xiàn)兩種情況出現(xiàn)。條件組合覆蓋條件組合覆蓋上面四個例子雖然滿足條上面四個例子雖然滿足條件組合覆

27、蓋,但并不能覆蓋件組合覆蓋,但并不能覆蓋程序中的每一條路徑,例如程序中的每一條路徑,例如路徑路徑acdacd就沒有執(zhí)行,因此,就沒有執(zhí)行,因此,條件組合覆蓋標準仍然是不條件組合覆蓋標準仍然是不徹底。徹底。 條件組合覆蓋條件組合覆蓋1 x3,z3,z3,z=102 x3,z=10記做記做T1 F2T1 F2,第一個判斷的取假分支,第一個判斷的取假分支3 x=3,z103 x=3,z10記做記做F1 T2F1 T2,第一個判斷的取假分支,第一個判斷的取假分支4 x=104 x=10記做記做F1 F2F1 F2,第一個判斷的取假分支,第一個判斷的取假分支5 x=4,y5 5 x=4,y5 記做記做T

28、3 T4T3 T4,第二個判斷的取真分支,第二個判斷的取真分支6 x=4,y=5 6 x=4,y5 7 x!=4,y5 記做記做F3 T4F3 T4,第二個判斷的取真分支,第二個判斷的取真分支8 x!=4,y=58 x!=4,y3)&(z5)根據(jù)定義取根據(jù)定義取4 4個測試用例,就可以覆蓋上面?zhèn)€測試用例,就可以覆蓋上面8 8種條件取值的組合。種條件取值的組合。測試用例如下表:測試用例如下表:測試用例測試用例通過路徑通過路徑 條件取值條件取值覆蓋組合號覆蓋組合號x=4、y=6、z=5 abdT1、T2、T3、T4 1和5 x=4、y=5、z=15 acdT1、F2、T3、F4 2和6 x

29、=2、y=6、z=5 acdF1、T2、F3、T4 3和7 x=2、y=5、z=15aceF1、F2、F3、F4 4和8 上面的測試用例覆蓋了所有條件的可能取值的組合,覆上面的測試用例覆蓋了所有條件的可能取值的組合,覆蓋了所有判斷的可取分支,但是卻丟失了一條路徑蓋了所有判斷的可取分支,但是卻丟失了一條路徑abeabe。條件組合覆蓋條件組合覆蓋路徑測試n路徑測試就是設計足夠多的測試用例,路徑測試就是設計足夠多的測試用例,覆蓋被測試對象中的所有可能路徑。覆蓋被測試對象中的所有可能路徑。測試用例測試用例 通過路徑通過路徑 A=2A=2、B=0B=0、X=3 X=3 aceaceA=1A=1、B=0B

30、=0、X=1X=1abdabdA=2A=2、B=1B=1、X=1X=1abeabeA=3A=3、B=0B=0、X=1X=1acdacd路徑測試n對于例2,下面的測試用例則可對程序進行全部的路徑覆蓋。測試用例測試用例 通過路徑通過路徑 覆蓋條件覆蓋條件 x=4x=4、y=6y=6、z=5 z=5 abdabdT1T1、T2T2、T3T3、T4T4x=4x=4、y=5y=5、z=15 z=15 acdacdT1T1、F2F2、T3T3、F4 F4 x=2x=2、y=5y=5、z=15 z=15 aceaceF1F1、F2F2、F3F3、T4 T4 x=5x=5、y=5y=5、z=5 z=5 abe

31、abeT1T1、T2T2、F3F3、F4 F4 Yes入口Noabc執(zhí)行語句塊2執(zhí)行語句塊1YesdNoe出口執(zhí)行語句塊3(x3)&(z5)測試覆蓋標準測試覆蓋標準測試覆蓋標準測試覆蓋標準n流程圖中包括了一個執(zhí)行達流程圖中包括了一個執(zhí)行達2020次的循環(huán)。那么次的循環(huán)。那么它所包含的不同執(zhí)行路徑數(shù)高達它所包含的不同執(zhí)行路徑數(shù)高達5 52020條,若要條,若要對它進行窮舉測試,覆蓋所有的路徑。假使測對它進行窮舉測試,覆蓋所有的路徑。假使測試程序對每一條路徑進行測試需要試程序對每一條路徑進行測試需要1 1毫秒,同毫秒,同樣假定一天工作樣假定一天工作2424小時,一年工作小時,一年工作365

32、 365 天,天, 那么要想把如圖所示的小程序的所有路徑測試那么要想把如圖所示的小程序的所有路徑測試完,則需要完,則需要31703170年。年?;韭窂綔y試 基本路徑測試就是在程序控制圖的基礎基本路徑測試就是在程序控制圖的基礎上,通過分析控制構造的環(huán)行復雜性,導出上,通過分析控制構造的環(huán)行復雜性,導出基本可執(zhí)行路徑集合,從而設計測試用例的基本可執(zhí)行路徑集合,從而設計測試用例的方法。設計出的測試用例要保證在測試中程方法。設計出的測試用例要保證在測試中程序的每一個可執(zhí)行語句至少執(zhí)行一次。序的每一個可執(zhí)行語句至少執(zhí)行一次。 基本路徑測試o 前提條件前提條件測試進入的前提條件是在測試人員已經(jīng)對測試進入

33、的前提條件是在測試人員已經(jīng)對被測試對象有了一定的了解,基本上明確被測試對象有了一定的了解,基本上明確了被測試軟件的邏輯結構。了被測試軟件的邏輯結構。o 測試過程測試過程過程是通過針對程序邏輯結構設計和加載過程是通過針對程序邏輯結構設計和加載測試用例,驅動程序執(zhí)行,以對程序路徑測試用例,驅動程序執(zhí)行,以對程序路徑進行測試。測試結果是分析實際的測試結進行測試。測試結果是分析實際的測試結果與預期的結果是否一致。果與預期的結果是否一致。 基本路徑測試o在程序控制流圖的基礎上,通過分析控制構造的環(huán)路復雜在程序控制流圖的基礎上,通過分析控制構造的環(huán)路復雜性,導出基本可執(zhí)行路徑集合,從而設計測試用例。包括性

34、,導出基本可執(zhí)行路徑集合,從而設計測試用例。包括以下以下4 4個步驟和一個工具方法:個步驟和一個工具方法:1.1. 程序的控制流圖:描述程序控制流的一種圖示方法。程序的控制流圖:描述程序控制流的一種圖示方法。2.2. 程序環(huán)路復雜度:程序環(huán)路復雜度:McCabeMcCabe復雜性度量。從程序的環(huán)路復雜性度量。從程序的環(huán)路復雜性可導出程序基本路徑集合中的獨立路徑條數(shù),復雜性可導出程序基本路徑集合中的獨立路徑條數(shù),這是確定程序中每個可執(zhí)行語句至少執(zhí)行一次所必須這是確定程序中每個可執(zhí)行語句至少執(zhí)行一次所必須的測試用例數(shù)目的上界。的測試用例數(shù)目的上界。3.3. 導出測試用例:根據(jù)環(huán)路復雜度和程序結構設

35、計用例導出測試用例:根據(jù)環(huán)路復雜度和程序結構設計用例數(shù)據(jù)輸入和預期結果。數(shù)據(jù)輸入和預期結果。4.4. 準備測試用例:確?;韭窂郊械拿恳粭l路徑的執(zhí)準備測試用例:確保基本路徑集中的每一條路徑的執(zhí)行。行?;韭窂綔y試工具方法:工具方法: 圖形矩陣:是在基本路徑測試中起輔圖形矩陣:是在基本路徑測試中起輔助作用的軟件工具,利用它可以實現(xiàn)自助作用的軟件工具,利用它可以實現(xiàn)自動地確定一個基本路徑集。動地確定一個基本路徑集??刂屏鲌D的符號o 流圖是對待測試程序過程處理的一種表示。流圖使流圖是對待測試程序過程處理的一種表示。流圖使用下面的符號描述邏輯控制流,每一種結構化構成用下面的符號描述邏輯控制流,每一種

36、結構化構成元素有一個相應的流圖符號元素有一個相應的流圖符號。順序結構if 結構Case 結構while 結構until 結構控制流圖o 流圖只有二種圖形符號流圖只有二種圖形符號n 圖中的每一個圓稱為流圖的結點,代表一條或圖中的每一個圓稱為流圖的結點,代表一條或多條語句。多條語句。n 流圖中的箭頭稱為邊或連接,代表控制流。流圖中的箭頭稱為邊或連接,代表控制流。o 任何過程設計都要被翻譯成控制流圖。任何過程設計都要被翻譯成控制流圖。 控制流圖o 在將程序流程圖簡化成控制流圖時,應注意:在將程序流程圖簡化成控制流圖時,應注意:n 在選擇或多分支結構中,分支的匯聚處應有一個匯在選擇或多分支結構中,分支

37、的匯聚處應有一個匯聚結點。聚結點。n 邊和結點圈定的區(qū)域叫做區(qū)域,當對區(qū)域計數(shù)時,邊和結點圈定的區(qū)域叫做區(qū)域,當對區(qū)域計數(shù)時,圖形外的區(qū)域也應記為一個區(qū)域。圖形外的區(qū)域也應記為一個區(qū)域??刂屏鲌D1762,38910114,5 76 231 8 4 511 910節(jié)點邊區(qū)域區(qū)域:由邊和解點封閉起來的區(qū)域計算區(qū)域:不要忘記區(qū)域外的部分待測試程序用流圖表示的待測試程序控制流圖n 如果判斷中的條件表達式是由一個或多個邏輯運算如果判斷中的條件表達式是由一個或多個邏輯運算符符 (OR, AND, NAND, NOR) (OR, AND, NAND, NOR) 連接的復合條件表達連接的復合條件表達式,則需要

38、改為一系列只有單條件的嵌套的判斷。式,則需要改為一系列只有單條件的嵌套的判斷。例如: 1 if a or b 2 x 3 else 4 y對應的邏輯為:獨立路徑獨立路徑:至少沿一條新的邊移動的路徑1762,38910114,5路徑1:1-11路徑2:1-2-3-4-5-10-1-11路徑3:1-2-3-6-8-9-10-1-11路徑4:1-2-3-6-7-9-10-1-11對以上路徑的遍歷,就是至少一次地執(zhí)行了程序中的所有語句。基本路徑測試o 第一步:畫出控制流圖第一步:畫出控制流圖 流程圖用來描述程序控制結構。可將流程圖映射流程圖用來描述程序控制結構。可將流程圖映射到一個相應的流圖到一個相應

39、的流圖( (假設流程圖的菱形決定框中不假設流程圖的菱形決定框中不包含復合條件包含復合條件) )。在流圖中,每一個圓,稱為流圖。在流圖中,每一個圓,稱為流圖的結點,代表一個或多個語句。一個處理方框序列的結點,代表一個或多個語句。一個處理方框序列和一個菱形決測框可被映射為一個結點,流圖中的和一個菱形決測框可被映射為一個結點,流圖中的箭頭,稱為邊或連接,代表控制流,類似于流程圖箭頭,稱為邊或連接,代表控制流,類似于流程圖中的箭頭。一條邊必須終止于一個結點,即使該結中的箭頭。一條邊必須終止于一個結點,即使該結點并不代表任何語句點并不代表任何語句( (例如:例如:if-else-thenif-else-

40、then結構結構) )。由邊和結點限定的范圍稱為區(qū)域。計算區(qū)域時應包由邊和結點限定的范圍稱為區(qū)域。計算區(qū)域時應包括圖外部的范圍。括圖外部的范圍。基本路徑測試例4:有下面的C函數(shù),用基本路徑測試法進行測試 void Sort(int iRecordNum,int iType)1. 2. int x=0;3. int y=0;4. while (iRecordNum- 0)5. 6. if(0= =iType)7. x=y+2; break;8. else9. if (1= =iType)10.x=y+10;11. else12. x=y+20;13. 14. 基本路徑測試基本路徑測試o 畫出其程

41、序流程圖和對應的控制流圖如下467810111314467148101113程序流程圖 控制流圖基本路徑測試 - 計算圈復雜度o第二步:計算環(huán)路復雜度第二步:計算環(huán)路復雜度 環(huán)路復雜度是一種為程序邏輯復雜性提供定量測環(huán)路復雜度是一種為程序邏輯復雜性提供定量測度的軟件度量,將該度量用于計算程序的基本的度的軟件度量,將該度量用于計算程序的基本的獨立路徑數(shù)目,為確保所有語句至少執(zhí)行一次的獨立路徑數(shù)目,為確保所有語句至少執(zhí)行一次的測試數(shù)量的上界。獨立路徑必須包含一條在定義測試數(shù)量的上界。獨立路徑必須包含一條在定義之前不曾用到的邊。之前不曾用到的邊。有以下三種方法計算環(huán)路復雜度:有以下三種方法計算環(huán)路復

42、雜度:1.1. 流圖中區(qū)域的數(shù)量對應于環(huán)型的復雜性;流圖中區(qū)域的數(shù)量對應于環(huán)型的復雜性;2.2. 給定流圖給定流圖G G的環(huán)路復雜度的環(huán)路復雜度V(G)V(G),定義為,定義為V(G)=E-N+2V(G)=E-N+2,E E是是流圖中邊的數(shù)量,流圖中邊的數(shù)量,N N是流圖中結點的數(shù)量;是流圖中結點的數(shù)量;3.3. 給定流圖給定流圖G G的環(huán)路復雜度的環(huán)路復雜度V(G)V(G),定義為,定義為V(G)=P+1V(G)=P+1,P P是流是流圖圖G G中判定結點的數(shù)量。中判定結點的數(shù)量。 基本路徑測試 - 計算環(huán)路環(huán)路復雜度對應上面圖中的環(huán)路復雜度,對應上面圖中的環(huán)路復雜度,計算如下:計算如下:

43、流圖中有四個區(qū)域;流圖中有四個區(qū)域; V(G)=10V(G)=10條邊條邊-8-8結點結點+2=4;+2=4; V(G)=3V(G)=3個判定結點個判定結點+1=4+1=4。4671481011132134基本路徑測試 - 導出測試用例o第三步:導出測試用例第三步:導出測試用例根據(jù)上面的計算方法,可得出四個獨立的根據(jù)上面的計算方法,可得出四個獨立的路徑路徑。( (一條獨立路徑是指,和其他的一條獨立路徑是指,和其他的獨立路徑相比,至少引入一個新處理語獨立路徑相比,至少引入一個新處理語句或一個新判斷的程序通路。句或一個新判斷的程序通路。V(G)V(G)值正值正好等于該程序的獨立路徑的條數(shù)。好等于該

44、程序的獨立路徑的條數(shù)。) )路徑路徑1 1:4-144-14路徑路徑2 2:4-6-7-144-6-7-14路徑路徑3 3:4-6-8-10-13-4-144-6-8-10-13-4-14路徑路徑4 4:4-6-8-11-13-4-144-6-8-11-13-4-14根據(jù)上面的獨立路徑,去設計輸入根據(jù)上面的獨立路徑,去設計輸入數(shù)據(jù),使程序分別執(zhí)行到上面四條路徑數(shù)據(jù),使程序分別執(zhí)行到上面四條路徑。4671481011132134基本路徑測試 - 準備測試用例o 第四步:準備測試用例第四步:準備測試用例 為了確?;韭窂郊械拿恳粭l路徑的執(zhí)行,為了確?;韭窂郊械拿恳粭l路徑的執(zhí)行,根據(jù)判斷結點給

45、出的條件,選擇適當?shù)臄?shù)據(jù)以根據(jù)判斷結點給出的條件,選擇適當?shù)臄?shù)據(jù)以保證某一條路徑可以被測試到,滿足上面例子保證某一條路徑可以被測試到,滿足上面例子基本路徑集的測試用例是:基本路徑集的測試用例是:基本路徑測試 - 準備測試用例路徑1:4-14輸入數(shù)據(jù):iRecordNum0,或者取iRecordNum 0)5. 6. if(0= =iType)7. x=y+2; break;8. else9. if(1= =iType)10. x=y+10;11. else12. x=y+20;13. 14. 基本路徑測試o 必須注意,一些獨立的路徑,往往不是完全孤立的,有時它是程序正常的控制流的一部分,這時,

46、這些路徑的測試可以是另一條路徑測試的一部分。工具方法:圖形矩陣o 導出控制流圖和決定基本測試路徑的過程均需要機導出控制流圖和決定基本測試路徑的過程均需要機械化,為了開發(fā)輔助基本路徑測試的軟件工具,稱械化,為了開發(fā)輔助基本路徑測試的軟件工具,稱為圖形矩陣為圖形矩陣(graph matrix)(graph matrix)的數(shù)據(jù)結構很有用。的數(shù)據(jù)結構很有用。o 利用圖形矩陣可以實現(xiàn)自動地確定一個基本路徑集。利用圖形矩陣可以實現(xiàn)自動地確定一個基本路徑集。一個圖形矩陣是一個方陣,其行一個圖形矩陣是一個方陣,其行/ /列數(shù)控制流圖中列數(shù)控制流圖中的結點數(shù),每行和每列依次對應到一個被標識的結的結點數(shù),每行和

47、每列依次對應到一個被標識的結點,矩陣元素對應到結點間的連接(即邊)。在圖點,矩陣元素對應到結點間的連接(即邊)。在圖中,控制流圖的每一個結點都用數(shù)字加以標識,每中,控制流圖的每一個結點都用數(shù)字加以標識,每一條邊都用字母加以標識。如果在控制流圖中第一條邊都用字母加以標識。如果在控制流圖中第i i個結點到第個結點到第j j個結點有一個名為個結點有一個名為x x的邊相連接,則在的邊相連接,則在對應的圖形矩陣中第對應的圖形矩陣中第i i行行/ /第第j j列有一個非空的元素列有一個非空的元素x x。 工具方法:圖形矩陣對每個矩陣項加入連接權值對每個矩陣項加入連接權值(link weight)(link

48、 weight),圖,圖矩陣就可以用于在測試中評估程序的控制結構,矩陣就可以用于在測試中評估程序的控制結構,連接權值為控制流提供了另外的信息。最簡單連接權值為控制流提供了另外的信息。最簡單情況下,連接權值是情況下,連接權值是 1(1(存在連接存在連接) )或或0(0(不存在不存在連接連接) ),但是,連接權值可以賦予更有趣的屬性:,但是,連接權值可以賦予更有趣的屬性:1.1.執(zhí)行連接執(zhí)行連接( (邊邊) )的概率。的概率。2.2.穿越連接的處理時間。穿越連接的處理時間。3.3.穿越連接時所需的內(nèi)存。穿越連接時所需的內(nèi)存。4.4.穿越連接時所需的資源。穿越連接時所需的資源。工具方法:圖形矩陣根據(jù)

49、上面的方法對例4畫出圖形矩陣如下:46714810111321344 6 7 8 10 11 13 14 4678101113141111111111圖形矩陣工具方法:圖形矩陣連接權為連接權為“1 1”表示存在一個連接,在圖中表示存在一個連接,在圖中如果一行有兩個或更多的元素如果一行有兩個或更多的元素“1 1”,則這行,則這行所代表的結點一定是一個判定結點,通過連所代表的結點一定是一個判定結點,通過連接矩陣中有兩個以上(包括兩個)元素為接矩陣中有兩個以上(包括兩個)元素為“1 1”的個數(shù),就可以得到確定該圖圈復雜度的個數(shù),就可以得到確定該圖圈復雜度的另一種算法。的另一種算法。 基本路徑測試再舉

50、例例例5 5:下例程序流程圖描述了最多輸入下例程序流程圖描述了最多輸入5050個個值(以值(以1 1作為輸入結束標志),計算其中有效作為輸入結束標志),計算其中有效的學生分數(shù)的個數(shù)、總分數(shù)和平均值。的學生分數(shù)的個數(shù)、總分數(shù)和平均值。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112123456789111012R1R2R3R4R5R6開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0avera

51、ge=sum/n1average= 1 返回FFFTTT12和345和6789101112步驟1:導出過程的流圖。步驟步驟2:2:確定環(huán)形復雜性度量確定環(huán)形復雜性度量V(G)V(G):1 1)V(G)= 6 V(G)= 6 (個區(qū)域)(個區(qū)域)2 2)V(G)=EV(G)=EN+2=16N+2=1612+2=612+2=6其中其中E E為流圖中的邊數(shù),為流圖中的邊數(shù),N N為結點數(shù);為結點數(shù);3 3)V(G)=P+1=5+1=6V(G)=P+1=5+1=6 其中其中P P為謂詞結點的個數(shù)。在流圖中,為謂詞結點的個數(shù)。在流圖中,結點結點2 2、3 3、5 5、6 6、9 9是謂詞結點。是謂詞結點

52、?;韭窂綔y試再舉例123456789111012R1R2R3R4R5R6基本路徑測試再舉例步驟3:確定基本路徑集合(即獨立路徑集合)。于是可確定6條獨立的路徑:路徑1:1-2-9-10-12路徑2:1-2-9-11-12路徑3:1-2-3-9-10-12路徑4:1-2-3-4-5-8-2路徑5:1-2-3-4-5-6-8-2路徑6:1-2-3-4-5-6-7-8-2123456789111012R1R2R3R4R5R6基本路徑測試再舉例步驟4:為每一條獨立路徑各設計一組測試用例,以便強迫程序沿著該路徑至少執(zhí)行一次。1)路徑1(1-2-9-10-12)的測試用例: scorek=有效分數(shù)值,當

53、k i ; scorei=1, 2i50;期望結果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總分sum和平均分average。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112基本路徑測試再舉例2)路徑2(1-2-9-11-12)的測試用例: score 1 = 1 ; 期望的結果:average = 1 ,其他量保持初值。3)路徑3(1-2-3-9-10-12)的測試用例: 輸入多于50個有效分數(shù),即試圖處理51個分數(shù),要求前51個為有效分

54、數(shù);期望結果:n1=50、且算出正確的總分和平均分。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112基本路徑測試再舉例4)路徑4(1-2-3-4-5-8-2)的測試用例: scorei=有效分數(shù),當i50; scorek0, k i ;期望結果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總分sum和平均分average。5)路徑5的測試用例: scorei=有效分數(shù), 當i100, k i ;期望結果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1

55、、總分sum和平均分average。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112基本路徑測試再舉例6)路徑6(1-2-3-4-5-6-7-8-2)的測試用例: scorei=有效分數(shù), 當i50;期望結果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1、總分sum和平均分average。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FF

56、FTTT12和345和6789101112作業(yè)o為以下流程圖所示的程序段設計一組測試用例,要求分別滿足語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。X8 AND Y5X0 OR Y0引用語句1引用語句2NYNYX16 OR Y10引用語句3NY作業(yè)o根據(jù)左圖給出的程序流程圖,完成以下要求:(1)畫出相應的控制流圖。(2)計算環(huán)形復雜度。(3)給出相應的圖矩陣。(4)找出程序的獨立路徑集合??刂平Y構測試的變種前面所述的基本路徑測試技術是控制結構測試前面所述的基本路徑測試技術是控制結構測試技術之一。盡管基本路徑測試簡單高效,但是,技術之一。盡管基本路徑測試簡單高效,但是,其本身

57、并不充分。下面討論控制結構測試的其他其本身并不充分。下面討論控制結構測試的其他變種,這些測試覆蓋并提高了白盒測試的質(zhì)量。變種,這些測試覆蓋并提高了白盒測試的質(zhì)量。1. 條件測試條件測試2. 數(shù)據(jù)流測試數(shù)據(jù)流測試3. 循環(huán)測試。循環(huán)測試。推薦參考資料推薦參考資料Roger S. Pressman,軟件工程軟件工程-實踐者的研究方法實踐者的研究方法循環(huán)測試 o 循環(huán)測試是一種白盒測試技術,注重于循環(huán)構造的有效性。o 有四種循環(huán):簡單循環(huán),串接(連鎖)循環(huán),嵌套循環(huán)和不規(guī)則循環(huán)。循環(huán)測試簡單循環(huán)嵌套循環(huán)串接循環(huán)無結構循環(huán)循環(huán)測試 - 簡單循環(huán)o 對于簡單循環(huán),測試應包括以下幾種,其中的n表示循環(huán)允許

58、的最大次數(shù)。(1) 零次循環(huán):從循環(huán)入口直接跳到循環(huán)出口。(2) 一次循環(huán):查找循環(huán)初始值方面的錯誤。(3) 二次循環(huán):檢查在多次循環(huán)時才能暴露的錯誤。(4) m次循環(huán):此時的mn,也是檢查在多次循環(huán)時才能暴露的錯誤。(5) n(最大)次數(shù)循環(huán)、n+1(比最大次數(shù)多一)次的循環(huán)、n-1(比最大次數(shù)少一)次的循環(huán)。循環(huán)測試 - 嵌套循環(huán)o 對于嵌套循環(huán),不能將簡單循環(huán)的測試方法簡單地擴大到嵌套循環(huán),因為可能的測試數(shù)目將隨嵌套層次的增加呈幾何倍數(shù)增長。這可能導致一個天文數(shù)字的測試數(shù)目。下面是一種有助于減少測試數(shù)目的測試方法。n從最內(nèi)層循環(huán)開始,設置所有其他層的循環(huán)為最小值;n對最內(nèi)層循環(huán)做簡單循環(huán)

59、的全部測試。測試時保持所有外層循環(huán)的循環(huán)變量為最小值。另外,對越界值和非法值做類似的測試。n逐步外推,對其外面一層循環(huán)進行測試。測試時保持所有外層循環(huán)的循環(huán)變量取最小值,所有其它嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。n反復進行,直到所有各層循環(huán)測試完畢。n對全部各層循環(huán)同時取最小循環(huán)次數(shù),或者同時取最大循環(huán)次數(shù)。對于后一種測試,由于測試量太大,需人為指定最大循環(huán)次數(shù)。循環(huán)測試 - 串接循環(huán)o 對于串接循環(huán),要區(qū)別兩種情況。n 如果各個循環(huán)互相獨立,則串接循環(huán)可以用與簡單循環(huán)相同的方法進行測試。n 如果有兩個循環(huán)處于串接狀態(tài),而前一個循環(huán)的循環(huán)變量的值是后一個循環(huán)的初值。則這幾個循環(huán)不是互相獨立的

60、,則需要使用測試嵌套循環(huán)的辦法來處理。 循環(huán)測試 - 非結構循環(huán)o 對于非結構循環(huán),不能測試,應重新設計循環(huán)結構,使之成為其它循環(huán)方式,然后再進行測試。測試用例自動生成o model-driven的測試,可以從從UML-diagram自動生成test case,其中最成熟的是從state diagram生成o 基于形式化語言的測試用例自動生成o 面向路徑的測試數(shù)據(jù)生成方法 基于形式化語言的測試用例自動生成o 在測試用例自動生成方面,Tsai等提出了從關系代數(shù)查詢表示的規(guī)格說明中自動生成測試用例的方法,Weyuker等提出了基于布爾規(guī)格說明的測試數(shù)據(jù)自動生成方法。此外,基于Z語言的測試用例生成技術也己經(jīng)非常成熟。但這些測試用例生成方法,因為形式化程度太高而難于得到廣泛的應用。面向路徑的測試數(shù)據(jù)生成方法

溫馨提示

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

評論

0/150

提交評論