《軟件測試》課件第6章_第1頁
《軟件測試》課件第6章_第2頁
《軟件測試》課件第6章_第3頁
《軟件測試》課件第6章_第4頁
《軟件測試》課件第6章_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目六ViSort()函數(shù)的測試6.1問題情境6.2問題分析6.3任務設計與實施6.4知識總結6.5應用實踐

有如下一個程序,請用路徑覆蓋法設計一組測試用例來測試該程序。

voidViSort(intiRecordNum,intiType)

1{

2intx=0;

3inty=0;

4while(iRecordNum>0)6.1問題情境

5{

6 If(iType==0)

7 x=y+2;

8else

9 If(iType==1)

10x=y+10;

11else

12x=y+20;

13}

14}

在這個程序中有兩個輸入參數(shù)iRecordNum和iType,在程序中有一個while循環(huán),其中包括一組嵌套if結構。6.2問題分析

步驟1:分析程序結構。

程序中有兩個輸入參數(shù)iRecordNum和iType,在程序中有一個while循環(huán),其中包括一組嵌套if結構。

步驟2:設計測試用例(見表6-1)。6.3任務設計與實施表6-1設計測試用例步驟3:實施測試,并書寫測試報告。

6.4.1路徑覆蓋測試法的基礎理論

白盒測試的測試方法有代碼檢查法、靜態(tài)結構分析法、靜態(tài)質量度量法、邏輯覆蓋法、基本路徑測試法、域測試、符號測試、Z路徑覆蓋、程序變異等。其中運用最為廣泛的是基本路徑測試法。6.4知識總結

1.控制流圖

程序控制流圖(可簡稱控制流圖)是對程序流程圖進行簡化后得到的,它突出表示程序控制流的結構。

程序控制流圖是描述程序控制流的一種方式,其要點如下(見圖6-1):

(1)圖形符號:圓圈代表一個節(jié)點,表示一個或多個無分支的語句或源程序語句。

圖6-1常見結構的控制流圖

(2)程序控制流的邊和節(jié)點圈定的部分叫做區(qū)域。當對區(qū)域計數(shù)時,圖形外的一個部分也應記為一個區(qū)域。

(3)判斷語句中的條件為復合條件(條件表達式是由一個或多個邏輯運算符連接的邏輯表達式(aandb))時,則需要改變復合條件的判斷為一系列只有單個條件的嵌套的判斷。

節(jié)點由帶標號的圓圈表示,可代表一個或多個語句、一個處理框序列和一個條件判定框(假設不包含復合條件)。控制流線由帶箭頭的弧或線表示,可稱為邊,它代表程序中的控制流。為了滿足路徑覆蓋,必須首先確定具體的路徑以及路徑的個數(shù)。我們通常采用控制流圖的邊(弧)序列和節(jié)點列表示某一條具體路徑。其中,包含條件的節(jié)點被稱為判定節(jié)點(也叫謂詞節(jié)點),由判定節(jié)點發(fā)出的邊必須終止于某一個節(jié)點,由邊和節(jié)點所限定的范圍被稱為區(qū)域。

2.環(huán)形復雜度

程序的環(huán)形復雜度也稱為圈復雜度,它是度量程序邏輯復雜度的指標。

將環(huán)形復雜度用于基本路徑方法,可以提供程序基本集的獨立路徑數(shù)量,確保所有語句至少執(zhí)行一次測試。獨立路徑是指程序中至少引入了一個新的處理語句集合或一個新條件的程序通路,即包含了一組以前沒有處理的語句或條件的一條路徑。通常環(huán)形復雜度以圖論為基礎,提供軟件度量。給定一個控制流圖G,設其環(huán)形復雜度為V(G),下面介紹三種常見的計算方法來求解V(G)。

(1)

V(G)

=

A,其中A是控制流圖G中區(qū)域的數(shù)目。當在控制流圖中計算區(qū)域的數(shù)目時,控制流圖外的區(qū)域也應記為一個區(qū)域。

(2)

V(G)

=

E

-

N

+

2,其中E是控制流圖G中邊的數(shù)量,N是控制流圖中節(jié)點的數(shù)目。

(3)

V(G)

=

P

+

1,其中P是控制流圖G中判斷節(jié)點的數(shù)目。

圖6-2某程序控制流圖計算結果為:節(jié)點數(shù)量N

=

8,邊的數(shù)量E

=

10,根據(jù)上述公式可得出:

V(G)

=

A

=

4

V(G)

=

E

-

N

+

2

=

10

-

8

+

2

=

4

V(G)

=

P

+

1

=

3

+

1

=

4

計算出獨立路徑為

路徑1:1→5;

路徑2:1→2→3→5;

路徑3:1→2→4→6→8→1→5;

路徑4:1→2→4→7→8→1→5。

根據(jù)上述路徑就可以設計相應的測試用例。

3.如何根據(jù)程序流程圖畫出控制流圖

將程序流程圖簡化成控制流圖時,應注意以下幾點:

(1)在選擇或多分支結構中,分支的匯聚處應有一個匯聚節(jié)點。

(2)邊和節(jié)點圈定的范圍叫做區(qū)域,當對區(qū)域計數(shù)時,圖形外的區(qū)域也應記為一個區(qū)域,如圖6-3所示。

圖6-3根據(jù)程序流程圖畫出控制流圖

(3)如果判斷中的條件表達式是由一個或多個邏輯運算符(or、and、nand、nor)連接的復合條件表達式,則需要改為一系列只有單條件的嵌套的判斷。

例如:

1ifaorb

2x

3else

4y

對應的邏輯如圖6-4所示。

圖6-4控制流圖6.4.2基本路徑測試方法

路徑測試就是從一個程序的入口開始,執(zhí)行所經歷的各個語句的完整過程。從廣義的角度講,任何有關路徑分析的測試都可以被稱為路徑測試。

完成路徑測試的理想情況是做到路徑覆蓋,但對于復雜度高的程序,要做到所有路徑覆蓋(測試所有可執(zhí)行路徑)是不可能的。在不能做到所有路徑覆蓋的前提下,如果某一程序的每一個獨立路徑都被測試過,那么可以認為程序中的每個語句都已經檢驗過了,即達到了語句覆蓋。

基本路徑測試方法是在控制流圖的基礎上,通過分析控制結構的環(huán)形復雜度,導出執(zhí)行路徑的基本集,再從該基本集設計測試用例的?;韭窂綔y試方法包括以下四個步驟。

圖6-5程序流程圖

1.畫出程序的控制流圖

程序流程圖用來描述程序控制結構,可將程序流程圖映射為一個控制流圖(假設流程圖的菱形判定框中不包含復合條件)。在控制流圖中,每一個圓稱為控制流圖的節(jié)點,代表一個或多個語句;一個處理方框序列和一個菱形判定框可被映射為一個節(jié)點;箭頭稱為邊或連接,代表控制流,類似于流程圖中的箭頭。一條邊必須終止于一個節(jié)點,即使該節(jié)點并不代表任何語句(例如if-else-then結構)。例16.1節(jié)中測試任務的程序流程圖如圖6-5所示。

畫出與其程序流程圖對應的控制流圖,如圖6-6所示。

圖6-6程序流程圖對應的控制流圖

2.計算環(huán)形復雜度

由圖6-6計算出環(huán)形復雜度如下:

V(G)

=

A

=

4

V(G)

=

10

-

8

+

2

=

4

V(G)

=

3

+

1

=

4

3.確定基本路徑集合

根據(jù)上面的計算方法,可得出四個獨立的路徑。

路徑1:4→14;

路徑2:4→6→7→13→4→14;

路徑3:4→6→8→10→13→4→14;

路徑4:4→6→8→11→13→4→14。

根據(jù)上面的獨立路徑,設計輸入數(shù)據(jù),使得上面的四條路徑都被執(zhí)行到。

4.準備測試用例

根據(jù)判斷節(jié)點給出的條件,選擇適當?shù)臄?shù)據(jù)以保證每一條路徑都可以被測試到。滿足該基本路徑集的測試用例如下所示。

路徑1:4→14。

輸入數(shù)據(jù):iRecordNum

=

0,或者取iRecordNum

<

0的某一個值。預期結果:x

=

0。

路徑2:4→6→7→13→4→14

輸入數(shù)據(jù):iRecordNum

=

1,iType

=

0。

預期結果:x

=

2。

路徑3:4→6→8→10→13→4→14。

輸入數(shù)據(jù):iRecordNum

=

1,iType

=

1。

預期結果:x

=

10。

路徑4:4→6→8→11→13→4→14。

輸入數(shù)據(jù):iRecordNum

=

1,iType

=

2。

預期結果:x

=

20。6.4.3循環(huán)測試方法

1.循環(huán)測試

從本質上說,循環(huán)測試的目的就是檢查循環(huán)結構的有效性。通常,循環(huán)可以劃分為簡單循環(huán)、嵌套循環(huán)、串接循環(huán)和非結構循環(huán)四類。

(1)測試簡單循環(huán)。設其循環(huán)的最大次數(shù)為n,可采用以下測試集(見圖6-7):

跳過整個循環(huán);

只循環(huán)一次;

只循環(huán)兩次;

循環(huán)m次,其中m

<

n;

分別循環(huán)n

-

1、n和n

+

1次。

圖6-7典型循環(huán)結構

(2)測試嵌套循環(huán)。如果將簡單循環(huán)的測試方法用于嵌套循環(huán),可能的測試次數(shù)會隨嵌套層數(shù)成幾何級數(shù)增加。此時可采用以下方法減少測試次數(shù):

測試從最內層循環(huán)開始,所有外層循環(huán)次數(shù)設置為最小值;

對最內層循環(huán)按照簡單循環(huán)的測試方法進行;

由內向外進行下一個循環(huán)的測試,本層循環(huán)的所有外層循環(huán)仍取最小值,而由本層循環(huán)嵌套的循環(huán)取某些“典型”值;

重復上一步的過程,直到測試完所有循環(huán)。

(3)測試串接循環(huán)。若串接的各個循環(huán)相互獨立,則可分別采用簡單循環(huán)的測試方法;否則采用嵌套循環(huán)的測試方法。

(4)對于非結構循環(huán)這種情況,無法進行測試,需要按結構化程序設計的思想將程序結構化后,再進行測試。

2.Z路徑覆蓋下的循環(huán)測試方法

Z路徑覆蓋是路徑覆蓋的一種變體,它是將程序中的循環(huán)結構簡化為選擇結構的一種路徑覆蓋。

循環(huán)簡化的目的是限制循環(huán)的次數(shù),無論循環(huán)的形式是怎樣的,也無論循環(huán)體實際執(zhí)行的次數(shù)是多少,簡化后的循環(huán)測試只考慮執(zhí)行循環(huán)體一次和零次(不執(zhí)行)兩種情況,即考慮執(zhí)行時進入循環(huán)體一次和跳過循環(huán)體這兩種情況,如圖6-8所示。

圖6-8Z路徑覆蓋下的循環(huán)測試方法6.4.4產生測試用例的其他方法

在實踐中,除了前面給出的各種方法外,通常還可以采用以下三種方法來補充設計測試用例:

(1)通過非路徑分析得到測試用例。通過這種方法得到的測試用例基本上是測試人員憑工作經驗得到的,甚至是猜測得到的。

(2)尋找尚未測試過的路徑并生成相應的測試用例。這種方法需要窮舉被測程序的所有路徑,并與前面已測試路徑進行對比。

(3)通過指定特定路徑來生成相應的測試用例。6.4.5最少測試用例數(shù)計算

為實現(xiàn)測試的邏輯覆蓋,必須設計足夠多的測試用例,并使用這些測試用例執(zhí)行被測程序,實施測試。我們關心的是,對于某個具體的程序來說,至少需要設計多少個測試用例。這里提供一種估算最少測試用例數(shù)的方法。

我們知道,結構化程序是由三種基本控制結構組成的:順序型(構成串行操作)、選擇型(構成分支操作)和重復型(構成循環(huán)操作)。為了把問題化簡,避免出現(xiàn)測試用例極多的組合爆炸,應把構成循環(huán)操作的重復型結構用選擇結構代替。這樣,任意一個循環(huán)便改造成進入循環(huán)體或不進入循環(huán)體的分支操作,如圖6-9所示。

圖6-9用N-S圖表示程序的三種基本控制結構例2圖6-10給出了兩個順序執(zhí)行的分支結構。當兩個分支謂詞P1和P2取不同值時,將分別執(zhí)行a或b及c或d操作。

顯然,要測試這個小程序,需要至少提供4個測試用例才能做到邏輯覆蓋,使得ac、ad、bc及bd操作均得到檢驗。其實,這里的4是圖中的第1個分支謂詞引出的兩個操作及第2個分支謂詞引出的兩個操作組合起來而得到的,即2

×

2

=

4。并且,這里的2是由兩個并列的操作,即1

+

1

=

2而得到的。

對于一般的、更為復雜的問題,估算最少測試用例個數(shù)的原則也是同樣的,即:

圖6-10分支結構

(1)如果在N-S圖中存在有并列的層次A1、A2,A1和A2的最少測試用例個數(shù)分別為a1、a2,則由A1、A2兩層所組合的N-S圖對應的最少測試用例數(shù)為a1

×

a2。

(2)如果在N-S圖中不存在有并列的層次,則對應的最少測試用例數(shù)等于并列的操作的個數(shù),即N-S圖中除謂詞之外的操作框的個數(shù)。

例3如圖6-11、圖6-12所示的兩個N-S圖,至少需要多少個測試用例才能完成邏輯覆蓋?

圖6-11程序N-S圖1

(1)對于圖6-11,由于圖中并不存在并列的層次,因而最少測試用例數(shù)等于并列操作的個數(shù),即為1

+

1

+

1

=

3。

(2)對于圖6-12,由于圖中沒有包含并列的層次,因而最少測試用例數(shù)也是并列的操作的個數(shù),即為1

+

1

+

1

+

1

+

1

=

5。

圖6-12程序N-S圖2例4如圖6-13所示的N-S圖,至少需要多少個測試用例才能完成邏輯覆蓋?

分析圖6-13:圖中的2345和67是并列的兩層。其中,2345層對應的最少測試用例

數(shù)為

1

+

1

+

1

+

1

+

1

=

5

67層對應的測試用例數(shù)為

1

+

1

+

1

=

3

2345和67這兩層組合后對應的測試用例數(shù)為

5

×

3

=

15

圖6-13程序N-S圖3最后,由于兩層組合后的部分是不滿足謂詞1時所要做的操作,因此還要加上滿足謂詞1要做的操作,因此整個程序所需測試用例數(shù)為15

+

1

=

16。

圖6-14所示程序流程圖描述的功能是:最多輸入50個值(以

-1作為輸入結束標志),計算其中有效的學生分數(shù)的個數(shù)、總分數(shù)和平均值。要求畫出控制流圖,計算環(huán)形復雜度,并對程序進行路徑覆蓋法測試。6.5應用實踐

圖6-14程序流程圖

(1)導出控制流圖,如圖6-15所示。

(2)計算環(huán)形復雜度V(G):

V(G)

=6(個區(qū)域)

V(G)

=

E

-

N

+

2

=

16

-

12

+

2

=

6

V(G)

=

P

+

1

=

5

+

1

=

6

(3)確定基本路徑集合(即獨立路徑集合)??纱_定以下6條獨立路徑:

路徑1:1→2→9→10→12;

路徑2:1→2→9→11→12;

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

評論

0/150

提交評論