天天看點

黑盒測試用例設計方法

簡介:

黑盒測試也稱功能測試,它是通過測試來檢測每個功能是否都能正常使用。在測試中把程式看作一個不能打開的黑盒子,在完全不考慮程式内部結構和内部特性的情況下,在程式接口進行測試,它隻檢查程式功能是否按照需求規格說明書的規定正常使用,程式是否能适當地接收輸入資料而産生正确的輸出資訊。黑盒測試着眼于程式外部結構,不考慮内部邏輯結構,主要針對軟體界面和軟體功能進行測試。黑盒測試是以使用者的角度,從輸入資料與輸出資料的對應關系出發進行測試的。很明顯,如果外部特性本身有問題或規格說明的規定有誤,用墨盒測試方法是發現不了的。黑盒測試法注重于測試軟體的功能需求,主要試圖發現下列幾類錯誤:

1.功能不正确或遺漏界面錯誤; 

2.資料庫通路錯誤;

3.性能錯誤;

4.初始化和終止錯誤等。

從理論上講,黑盒測試隻有采用窮舉輸入測試,把所有可能的輸入都作為測試情況考慮,才能查出程式中所有的錯誤。實際上測試情況有無窮多個,人們不僅要測試所有佥的輸入,而且還要對那些不合法但可能的輸入進行測試。這樣看來,完全測試是不可能的,是以我們要進行有針對性的測試,通過制定測試案例指導測試的實施,保證軟體測試有組織、按步驟,以及有計劃地進行。黑盒測試行為必須能夠加以量化,才能真正保證軟體品質,而測試用例就是将測試行為具體量化的方法之一。

具體的黑盒測試用例設計方法包括:等價類劃分法、邊界值分析法、錯誤推測法、因果圖法、判定表驅動法、正交試驗設計法、功能圖法等。

a.等價類劃分的辦法是把程式的輸入域劃分成若幹部分,然後從每個部分中選取少數代表性資料作為測試用例。每一類的代表性資料在測試中的作用等價于這一類中的其他值。

b.邊界值分析是通過選擇等價類邊界的測試用例。邊界值分析法不僅重視輸入條件邊界,而且也必須考慮輸出域邊界。

c.錯誤推測設計方法就是基于經驗和直覺推測程式中所有可能存在的各種錯誤,進而有針對性地設計測試用例的方法。

d.因果圖方法是從用自然語言書寫的程式規格說明的描述中找出因(輸入條件)和果(輸出或程式狀态的改變),可以通過因果圖轉換為判定表。

e.正交試驗設計法,就是使用已經造好了的正交表格來安排試驗并進行資料分析的一種方法,目的是用最少的測試用例達到最高的測試覆寫率。

f.功能圖法是由狀态遷移圖和布爾函數組成,狀态遷移圖用狀态和遷移來表示。一個狀态指出資料輸入的位置(或時間),一個遷移指明狀态的改變,同時要依靠判定表或因果圖表示的邏輯功能

I. 等價類方法

方法簡介

1.定義

是把所有可能的輸入資料,即程式的輸入域劃分成若幹部分(子集),然後從每一個子集中選取少數具有代表性的資料作為測試用例。該方法是一種重要的,常用的黑盒測試用例設計方法。

2.劃分等價類:

等價類是指某個輸入域的子集合。在該子集合中,各個輸入資料對于揭露程式中的錯誤都是等效的,并合理地假定:測試某等價類的代表值就等于對這一類其它值的測試,是以,可以把全部輸入資料合理劃分為若幹等價類,在每一個等價類中取一個資料作為測試的輸入條件就可以用少量代表性的測試資料取得較好的測試結果。等價類劃分可有兩種不同的情況:有效等價類和無效等價類。

1)有效等價類

是指對于程式的規格說明來說是合理的、有意義的輸入資料構成的集合。利用有效等價類可檢驗程式是否實作了規格說明中所規定的功能和性能。

2)無效等價類

與有效等價類的定義恰巧相反。無效等價類指對程式的規格說明是不合理的或無意義的輸入資料所構成的集合。對于具體的問題,無效等價類至少應有一個,也可能有多個。

設計測試用例時,要同時考慮這兩種等價類。因為軟體不僅要能接收合理的資料,也要能經受意外的考驗,這樣的測試才能確定軟體具有更高的可靠性。

3.劃分等價類的标準:

1)完備測試、避免備援;

2)劃分等價類重要的是:集合的劃分,劃分為互不相交的一組子集,而子集的并是整個集合;

3)并是整個集合:完備性;

4)子集互不相交:保證一種形式的無備援性;

5)同一類中辨別(選擇)一個測試用例,同一等價類中,往往處理相同,相同處理映射到"相同的執行路徑"。

4.劃分等價類的方法

1)在輸入條件規定了取值範圍或值的個數的情況下,則可以确立一個有效等價類和兩個無效等價類。如:輸入值是學生成績,範圍是0~100;

2)在輸入條件規定了輸入值的集合或者規定了"必須如何"的條件的情況下,可确立一個有效等價類和一個無效等價類;

3)在輸入條件是一個布爾量的情況下,可确定一個有效等價類和一個無效等價類。

4)在規定了輸入資料的一組值(假定n個),并且程式要對每一個輸入值分别處理的情況下,可确立n個有效等價類和一個無效等價類。

例:輸入條件說明學曆可為:專科、大學、碩士、博士四種之一,則分别取這四種這四個值作為四個有效等價類,另外把四種學曆之外的任何學曆作為無效等價類。

5)在規定了輸入資料必須遵守的規則的情況下,可确立一個有效等價類(符合規則)和若幹個無效等價類(從不同角度違反規則);

6)在确知已劃分的等價類中各元素在程式進行中的方式不同的情況下,則應再将該等價類進一步的劃分為更小的等價類。

5.設計測試用例

在确立了等價類後,可建立等價類表,列出所有劃分出的等價類輸入條件:有效等價類、無效等價類,然後從劃分出的等價類中按以下三個原則設計測試用例:

1)為每一個等價類規定一個唯一的編号;

2)設計一個新的測試用例,使其盡可能多地覆寫尚未被覆寫地有效等價類,重複這一步,直到所有的有效等價類都被覆寫為止;

3)設計一個新的測試用例,使其僅覆寫一個尚未被覆寫的無效等價類,重複這一步,直到所有的無效等價類都被覆寫為止。

二.實戰演習

1.某程式規定:"輸入三個整數 a 、 b 、 c 分别作為三邊的邊長構成三角形。通過程式判定所構成的三角形的類型,當此三角形為一般三角形、等腰三角形及等邊三角形時,分别作計算 … "。用等價類劃分方法為該程式進行測試用例設計。(三角形問題的複雜之處在于輸入與輸出之間的關系比較複雜。)

分析題目中給出和隐含的對輸入條件的要求: 

(1)整數 (2)三個數 (3)非零數 (4)正數 

(5)兩邊之和大于第三邊 (6)等腰 (7)等邊 

如果 a 、 b 、 c 滿足條件( 1 ) ~ ( 4 ),則輸出下列四種情況之一:

1)如果不滿足條件(5),則程式輸出為 " 非三角形 " 。

2)如果三條邊相等即滿足條件(7),則程式輸出為 " 等邊三角形 " 。

3)如果隻有兩條邊相等、即滿足條件(6),則程式輸出為 " 等腰三角形 " 。

4)如果三條邊都不相等,則程式輸出為 " 一般三角形 " 。 

列出等價類表并編号

覆寫有效等價類的測試用例:

a b c 覆寫等價類号碼

3 4 5 (1)--(7)

4 4 5 (1)--(7),(8)

4 5 5 (1)--(7),(9) 

5 4 5 (1)--(7),(10)

4 4 4 (1)--(7),(11)

覆寫無效等價類的測試用例:

2.設有一個檔案管理系統,要求使用者輸入以年月表示的日期。假設日期限定在1990年1月~2049年12月,并規定日期由6位數字字元組成,前4位表示年,後2位表示月。現用等價類劃分法設計測試用例,來測試程式的"日期檢查功能"。

1)劃分等價類并編号,下表等價類劃分的結果

輸入等價類

有效等價類

無效等價類

日期的類型及長度

①6位數字字元

②有非數字字元

③少于6位數字字元

④多于6位數字字元

年份範圍

⑤在1990~2049之間

⑥小于1990

⑦大于2049

月份範圍

⑧在01~12之間

⑨等于00

⑩大于12

2)設計測試用例,以便覆寫所有的有效等價類在表中列出了3個有效等價類,編号分别為①、⑤、⑧,設計的測試用例如下:

測試資料 期望結果 覆寫的有效等價類

200211 輸入有效 ①、⑤、⑧

3)為每一個無效等價類設計一個測試用例,設計結果如下:

測試資料 期望結果 覆寫的無效等價類

95June 無效輸入 ②

20036 無效輸入 ③

2001006 無效輸入 ④

198912 無效輸入 ⑥

200401 無效輸入 ⑦

200100 無效輸入 ⑨

200113 無效輸入 ⑩

3.NextDate 函數包含三個變量:month 、 day 和 year ,函數的輸出為輸入日期後一天的日期。 例如,輸入為 2006年3月 7日,則函數的輸出為 2006年3月8日 。要求輸入變量 month 、 day 和 year 均為整數值,并且滿足下列條件:

①1≤month≤12

②1≤day≤31

③1920≤year≤2050 

1)有效等價類為:

M1={月份:1≤月份≤12}

D1={日期:1≤日期≤31}

Y1={年:1812≤年≤2012}

2)若條件 ① ~ ③中任何一個條件失效,則 NextDate 函數都會産生一個輸出,指明相應的變量超出取值範圍,比如 "month 的值不在 1-12 範圍當中 " 。顯然還存在着大量的 year 、 month 、 day 的無效組合, NextDate 函數将這些組合作統一的輸出: " 無效輸入日期 " 。其無效等價類為:

M2={月份:月份<1}

M3={月份:月份>12}

D2={日期:日期<1}

D3={日期:日期>31}

Y2={年:年<1812}

Y3={年:年>2012}

弱一般等價類測試用例

月份 日期 年 預期輸出

6 15 1912 1912年6月16日

強一般等價類測試用例同弱一般等價類測試用例

注:弱--有單缺陷假設;健壯--考慮了無效值 

(一)弱健壯等價類測試

用例ID 月份 日期 年 預期輸出

WR1 6 15 1912 1912年6月16日

WR2 -1 15 1912 月份不在1~12中

WR3 13 15 1912 月份不在1~12中

WR4 6 -1 1912 日期不在1~31中

WR5 6 32 1912 日期不在1~31中

WR6 6 15 1811 年份不在1812~2012中

WR7 6 15 2013 年份不在1812~2012中

(二)強健壯等價類測試

SR1 -1 15 1912 月份不在1~12中

SR2 6 -1 1912 日期不在1~31中

SR3 6 15 1811 年份不在1812~2012中

SR4 -1 -1 1912 兩個無效一個有效

SR5 6 -1 1811 兩個無效一個有效

SR6 -1 15 1811 兩個無效一個有效

SR7 -1 -1 1811 三個無效

4.傭金問題等價類測試用例,它是根據傭金函數的輸出值域定義等價類,來改進測試用例集合。

輸出銷售額≤1000元 傭金10%

1000<銷售額≤1800 傭金=100+(銷售額-1000)*15%

銷售額>1800 傭金=220+(銷售額-1800)*20%

測試用例 槍機(45) 槍托(30) 槍管(25) 銷售額 傭金

1 5 5 5 500 50

2 15 15 15 1500 175

3 25 25 25 2500 360

根據輸出域選擇輸入值,使落在輸出域等價類内,可以結合弱健壯測試用例結合。

II. 邊界值

1.定義:邊界值分析法就是對輸入或輸出的邊界值進行測試的一種黑盒測試方法。通常邊界值分析法是作為對等價類劃分法的補充,這種情況下,其測試用例來自等價類的邊界。 

2.與等價劃分的差別

1)邊界值分析不是從某等價類中随便挑一個作為代表,而是使這個等價類的每個邊界都要作為測試條件。

2)邊界值分析不僅考慮輸入條件,還要考慮輸出空間産生的測試情況。

3.邊界值分析方法的考慮:

長期的測試工作經驗告訴我們,大量的錯誤是發生在輸入或輸出範圍的邊界上,而不是發生在輸入輸出範圍的内部。是以針對各種邊界情況設計測試用例,可以查出更多的錯誤。

使用邊界值分析方法設計測試用例,首先應确定邊界情況。通常輸入和輸出等價類的邊界,就是應着重測試的邊界情況。應當選取正好等于,剛剛大于或剛剛小于邊界的值作為測試資料,而不是選取等價類中的典型值或任意值作為測試資料。

4.常見的邊界值

1)對16-bit 的整數而言 32767 和 -32768 是邊界

2)螢幕上光标在最左上、最右下位置

3)報表的第一行和最後一行

4)數組元素的第一個和最後一個

5)循環的第 0 次、第 1 次和倒數第 2 次、最後一次

5.邊界值分析

1)邊界值分析使用與等價類劃分法相同的劃分,隻是邊界值分析假定錯誤更多地存在于劃分的邊界上,是以在等價類的邊界上以及兩側的情況設計測試用例。

例:測試計算平方根的函數

--輸入:實數

--輸出:實數

--規格說明:當輸入一個0或比0大的數的時候,傳回其正平方根;當輸入一個小于0的數時,顯示錯誤資訊"平方根非法-輸入值小于0"并傳回0;庫函數Print-Line可以用來輸出錯誤資訊。

2)等價類劃分:

I.可以考慮作出如下劃分:

a、輸入 (i)<0 和 (ii)>=0

b、輸出 (a)>=0 和 (b) Error

II.測試用例有兩個:

a、輸入4,輸出2。對應于 (ii) 和 (a) 。

b、輸入-10,輸出0和錯誤提示。對應于 (i) 和 (b) 。

3)邊界值分析:

劃分(ii)的邊界為0和最大正實數;劃分(i)的邊界為最小負實數和0。由此得到以下測試用例:

a、輸入 {最小負實數}

b、輸入 {絕對值很小的負數}

c、輸入 0

d、輸入 {絕對值很小的正數}

e、輸入 {最大正實數}

4)通常情況下,軟體測試所包含的邊界檢驗有幾種類型:數字、字元、位置、重量、大小、速度、方位、尺寸、空間等。

5)相應地,以上類型的邊界值應該在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、 最短/最長、 空/滿等情況下。

6)利用邊界值作為測試資料

邊界值

測試用例的設計思路

字元

起始-1個字元/結束+1個字元

假設一個文本輸入區域允許輸入1個到255個 字元,輸入1個和255個字元作為有效等價類;輸入0個和256個字元作為無效等價類,這幾個數值都屬于邊界條件值。

數值

最小值-1/最大值+1

假設某軟體的資料輸入域要求輸入5位的資料值,可以使用10000作為最小值、99999作為最大值;然後使用剛好小于5位和大于5位的 數值來作為邊界條件。

空間

小于空餘空間一點/大于滿空間一點

例如在用U盤存儲資料時,使用比剩餘磁盤空間大一點(幾KB)的檔案作為邊界條件。

7)内部邊界值分析:

在多數情況下,邊界值條件是基于應用程式的功能設計而需要考慮的因素,可以從軟體的規格說明或常識中得到,也是最終使用者可以很容易發現問題的。然而,在測試用例設計過程中,某些邊界值條件是不需要呈現給使用者的,或者說使用者是很難注意到的,但同時确實屬于檢驗範疇内的邊界條件,稱為内部邊界值條件或子邊界值條件。

内部邊界值條件主要有下面幾種:

a)數值的邊界值檢驗:計算機是基于二進制進行工作的,是以,軟體的任何數值運算都有一定的範圍限制。

範圍或值

位(bit)

0 或 1

位元組(byte)

0 ~ 255

字(word)

0~65535(單字)或 0~4294967295(雙字)

千(K)

1024

兆(M)

1048576

吉(G) 

1073741824

b)字元的邊界值檢驗:在計算機軟體中,字元也是很重要的表示元素,其中ASCII和Unicode是常見的編碼方式。下表中列出了一些常用字元對應的ASCII碼值。

ASCII碼值

空 (null)

A

65

空格 (space)

32

a

97

斜杠 ( / )

47

Z

90

48

z

122

冒号 ( : )

58

單引号 ( ‘ )

96

@

64

c)其它邊界值檢驗

6.基于邊界值分析方法選擇測試用例的原則

1)如果輸入條件規定了值的範圍,則應取剛達到這個範圍的邊界的值,以及剛剛超越這個範圍邊界的值作為測試輸入資料。

例如,如果程式的規格說明中規定:"重量在10公斤至50公斤範圍内的郵件,其郵費計算公式為……"。作為測試用例,我們應取10及50,還應取10.01,49.99,9.99及50.01等。

2)如果輸入條件規定了值的個數,則用最大個數,最小個數,比最小個數少一,比最大個數多一的數作為測試資料。

比如,一個輸入檔案應包括1~255個記錄,則測試用例可取1和255,還應取0及256等。

3)将規則1)和2)應用于輸出條件,即設計測試用例使輸出值達到邊界值及其左右的值。

例如,某程式的規格說明要求計算出"每月保險金扣除額為0至1165.25元",其測試用例可取0.00及1165.24、還可取一0.01及1165.26等。

再如一程式屬于情報檢索系統,要求每次"最少顯示1條、最多顯示4條情報摘要",這時我們應考慮的測試用例包括1和4,還應包括0和5等。 

4)如果程式的規格說明給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最後一個元素作為測試用例。

5)如果程式中使用了一個内部資料結構,則應當選擇這個内部資料結構的邊界上的值作為測試用例。

6)分析規格說明,找出其它可能的邊界條件。

1.現有一個學生标準化考試批閱試卷,産生成績報告的程式。其規格說明如下:程式的輸入檔案由一些有80個字元的記錄組成,如右圖所示,所有記錄分為3組:

①标題:這一組隻有一個記錄,其内容為輸出成績報告的名字。

②試卷各題标準答案記錄:每個記錄均在第80個字元處标以數字"2"。該組的第一個記錄的第1至第3個字元為題目編号(取值為1一999)。第10至第59個字元給出第1至第50題的答案(每個合法字元表示一個答案)。該組的第2,第3……個記錄相應為第51至第100,第101至第150,…題的答案。

③每個學生的答卷描述:該組中每個記錄的第80個字元均為數字"3"。每個學生的答卷在若幹個記錄中給出。如甲的首記錄第1至第9字元給出學生姓名及學号,第10至第59字元列出的是甲所做的第1至第50題的答案。若試題數超過50,則第2,第3……紀錄分别給出他的第51至第100,第101至第150……題的解答。然後是學生乙的答卷記錄。

④學生人數不超過200,試題數不超過999。 

⑤程式的輸出有4個報告:

a)按學号排列的成績單,列出每個學生的成績、名次。

b)按學生成績排序的成績單。

c)平均分數及标準偏差的報告。

d)試題分析報告。按試題号排序,列出各題學生答對的百分比。 

解答:分别考慮輸入條件和輸出條件,以及邊界條件。給出下表所示的輸入條件及相應的測試用例。

輸出條件及相應的測試用例表。

2.三角形問題的邊界值分析測試用例

在三角形問題描述中,除了要求邊長是整數外,沒有給出其它的限制條件。在此,我們将三角形每邊邊長的取範圍值設值為[1, 100] 。

測試用例

b

c

預期輸出

Test1

Test2

Test3

Test4

Test5

60

50

1

2

99

100

等腰三角形

等邊三角形

非三角形

Test6

Test7

Test8

Test9

Test10

Test11

Test12

Test13

3.NextDate函數的邊界值分析測試用例

在NextDate函數中,隐含規定了變量mouth和變量day的取值範圍為1≤mouth≤12和1≤day≤31,并設定變量year的取值範圍為1912≤year≤2050 。

mouth

day

year

6

15

1911

1912

1913

1975

2049

2050

2051

1911.6.16

1912.6.16

1913.6.16

1975.6.16

2049.6.16

2050.6.16

2051.6.16

-1

30

31

2001

day超出[1…31]

2001.6.2

2001.6.3

2001.7.1

輸入日期超界

Test14

Test15

Test16

Test17

Test18

Test19

11

12

13

Mouth超出[1…12]

2001.1.16

2001.2.16

2001.11.16

2001.12.16

III. 錯誤推測法

1.定義:基于經驗和直覺推測程式中所有可能存在的各種錯誤, 進而有針對性的設計測試用例的方法。

2.錯誤推測方法的基本思想:

列舉出程式中所有可能有的錯誤和容易發生錯誤的特殊情況,根據他們選擇測試用例。

1) 例如, 輸入資料和輸出資料為0的情況;輸入表格為空格或輸入表格隻有一行。 這些都是容易發生錯誤的情況。可選擇這些情況下的例子作為測試用例。

2) 例如,前面例子中成績報告的程式,采用錯誤推測法還可補充設計一些測試用例:

I. 程式是否把空格作為回答

II. 在回答記錄中混有标準答案記錄

III. 除了标題記錄外,還有一些的記錄最後一個字元即不是2也不是3

IV. 有兩個學生的學号相同

V. 試題數是負數。 

3) 再如,測試一個對線性表(比如數組)進行排序的程式,可推測列出以下幾項需要特别測試的情況:

I. 輸入的線性表為空表;

II. 表中隻含有一個元素;

III. 輸入表中所有元素已排好序;

IV. 輸入表已按逆序排好;

V. 輸入表中部分或全部元素相同。

IV. 因果圖法

1.定義:是一種利用圖解法分析輸入的各種組合情況,進而設計測試用例的方法,它适合于檢查程式輸入條件的各種組合情況。

2.因果圖法産生的背景:

等價類劃分法和邊界值分析方法都是着重考慮輸入條件,但沒有考慮輸入條件的各種組合、輸入條件之間的互相制約關系。這樣雖然各種輸入條件可能出錯的情況已經測試到了,但多個輸入條件組合起來可能出錯的情況卻被忽視了。

如果在測試時必須考慮輸入條件的各種組合,則可能的組合數目将是天文數字,是以必須考慮采用一種适合于描述多種條件的組合、相應産生多個動作的形式來進行測試用例的設計,這就需要利用因果圖(邏輯模型)。

3.因果圖介紹

1) 4種符号分别表示了規格說明中的4種因果關系。

2) 因果圖中使用了簡單的邏輯符号,以直線聯接左右結點。左結點表示輸入狀态(或稱原因),右結點表示輸出狀态(或稱結果)。 

3) Ci表示原因,通常置于圖的左部;ei表示結果,通常在圖的右部。Ci和ei均可取值0或1,0表示某狀态不出現,1表示某狀态出現。

4.因果圖概念

1) 關系

①恒等:若ci是1,則ei也是1;否則ei為0。

②非:若ci是1,則ei是0;否則ei是1。

③或:若c1或c2或c3是1,則ei是1;否則ei為0。“或”可有任意個輸入。

④與:若c1和c2都是1,則ei為1;否則ei為0。“與”也可有任意個輸入。

2) 限制

輸入狀态互相之間還可能存在某些依賴關系,稱為限制。例如, 某些輸入條件本身不可能同時出現。輸出狀态之間也往往存在限制。在因果圖中,用特定的符号标明這些限制。

A.輸入條件的限制有以下4類:

① E限制(異):a和b中至多有一個可能為1,即a和b不能同時為1。

② I限制(或):a、b和c中至少有一個必須是1,即 a、b 和c不能同時為0。

③ O限制(唯一);a和b必須有一個,且僅有1個為1。

④R限制(要求):a是1時,b必須是1,即不可能a是1時b是0。

B.輸出條件限制類型

輸出條件的限制隻有M限制(強制):若結果a是1,則結果b強制為0。

5.采用因果圖法設計測試用例的步驟:

1)分析軟體規格說明描述中, 那些是原因(即輸入條件或輸入條件的等價類),那些是結果(即輸出條件), 并給每個原因和結果賦予一個辨別符。

2)分析軟體規格說明描述中的語義,找出原因與結果之間, 原因與原因之間對應的關系,根據這些關系,畫出因果圖。

3)由于文法或環境限制, 有些原因與原因之間,原因與結果之間的組合情況不可能出現,為表明這些特殊情況, 在因果圖上用一些記号表明限制或限制條件。

4)把因果圖轉換為判定表。

5)把判定表的每一列拿出來作為依據,設計測試用例。

二. 實戰演習

1. 某軟體規格說明書包含這樣的要求:第一列字元必須是A或B,第二列字元必須是一個數字,在此情況下進行檔案的修改,但如果第一列字元不正确,則給出資訊L;如果第二列字元不是數字,則給出資訊M。

解答:

1) 根據題意,原因和結果如下:

原因:

1——第一列字元是A;

2——第一列字元是B;

3——第二列字元是一數字。

結果:

21——修改檔案;

22 ——給出資訊L;

23——給出資訊M。

2) 其對應的因果圖如下:

11為中間節點;考慮到原因1和原因2不可能同時為1,是以在因果圖上施加E限制。

3)根據因果圖建立判定表。

表中8種情況的左面兩列情況中,原因①和原因②同時為1,這是不可能出現的,故應排除這兩種情況。表的最下一欄給出了6種情況的測試用例,這是我們所需要的資料。

2.有一個處理單價為5角錢的飲料的自動售貨機軟體測試用例的設計。其規格說明如下:若投入5角錢或1元錢的硬币,押下〖橙汁〗或〖啤酒〗的按鈕,則相應的飲料就送出來。若售貨機沒有零錢找,則一個顯示〖零錢找完〗的紅燈亮,這時在投入1元硬币并押下按鈕後,飲料不送出來而且1元硬币也退出來;若有零錢找,則顯示〖零錢找完〗的紅燈滅,在送出飲料的同時退還5角硬币。

1) 分析這一段說明,列出原因和結果

1.售貨機有零錢找

2.投入1元硬币

3.投入5角硬币 

4.押下橙汁按鈕

5.押下啤酒按鈕 

結果: 

21.售貨機〖零錢找完〗燈亮 

22.退還1元硬币

23.退還5角硬币 

24.送出橙汁飲料

25.送出啤酒飲料

2)畫出因果圖,如圖所示。所有原因結點列在左邊,所有結果結點列在右邊。建立中間結點,表示處理的中間狀态。中間結點:

11. 投入1元硬币且押下飲料按鈕

12. 押下〖橙汁〗或〖啤酒〗的按鈕

13. 應當找5角零錢并且售貨機有零錢找

14. 錢已付清

3)轉換成判定表:

4) 在判定表中,陰影部分表示因違反限制條件的不可能出現的情況,删去。第16列與第32列因什麼動作也沒做,也删去。最後可根據剩下的16列作為确定測試用例的依據。

V. 判定表驅動分析法

1.定義:判定表是分析和表達多邏輯條件下執行不同操作的情況的工具。

2.判定表的優點

能夠将複雜的問題按照各種可能的情況全部列舉出來,簡明并避免遺漏。是以,利用判定表能夠設計出完整的測試用例集合。

在一些資料處理問題當中,某些操作的實施依賴于多個邏輯條件的組合,即:針對不同邏輯條件的組合值,分别執行不同的操作。判定表很适合于處理這類問題。

3.“閱讀指南”判定表

3

4

5

7

8

問題

覺得疲倦?

Y

N

感興趣嗎?

糊塗嗎?

建議

重讀

繼續

跳下一章

休息

4.判定表通常由四個部分組成如下圖所示。

1)條件樁(Condition Stub):列出了問題得所有條件。通常認為列出的條件的次序無關緊要。

2)動作樁(Action Stub):列出了問題規定可能采取的操作。這些操作的排列順序沒有限制。

3)條件項(Condition Entry):列出針對它左列條件的取值。在所有可能情況下的真假值。

4)動作項(Action Entry):列出在條件項的各種取值情況下應該采取的動作。

5.規則及規則合并

1)規則:任何一個條件組合的特定取值及其相應要執行的操作稱為規則。在判定表中貫穿條件項和動作項的一列就是一條規則。顯然,判定表中列出多少組條件取值,也就有多少條規則,既條件項和動作項有多少列。

2)化簡:就是規則合并有兩條或多條規則具有相同的動作,并且其條件項之間存在着極為相似的關系。

6.規則及規則合并舉例

1)如下圖左端,兩規則動作項一樣,條件項類似,在1、2條件項分别取Y、N時,無論條件3取何值,都執行同一操作。即要執行的動作與條件3無關。于是可合并。“-”表示與取值無關。

2)與上類似,下圖中,無關條件項“-”可包含其他條件項取值,具有相同動作的規則可合并。

3)化簡後的讀書指南判定表

你覺得疲倦嗎?

-

你對内容感興趣嗎?

書中内容使你胡塗嗎?

請回到本章開頭重讀

x

繼續讀下去

X

跳到下一章去讀

停止閱讀,請休息

7.判定表的建立步驟:(根據軟體規格說明)

1)确定規則的個數.假如有n個條件。每個條件有兩個取值(0,1),故有2n種規則。

2)列出所有的條件樁和動作樁。

3)填入條件項。

4)填入動作項。等到初始判定表。

5)簡化.合并相似規則(相同動作)。

1.問題要求:”……對功率大于50馬力的機器、維修記錄不全或已運作10年以上的機器,應給予優先的維修處理……” 。這裡假定,“維修記錄不全”和“優先維修處理”均已在别處有更嚴格的定義 。請建立判定表。

①确定規則的個數:這裡有3個條件,每個條件有兩個取值,故應有2*2*2=8種規則。

②列出所有的條件茬和動作樁:

③填入條件項。可從最後1行條件項開始,逐行向上填滿。如第三行是: Y N Y N Y N Y N,第二行是: Y Y N N Y Y N N等等。 

④填入動作樁和動作頂。這樣便得到形如圖的初始判定表。

功率大于50馬力嗎?

維修記錄不全嗎?

運作超過10年嗎?

進行優先處理

作其他處理

初始判定表

⑤化簡。合并相似規則後得到圖。

2.NextData函數的精簡決策表

M1={月份, 每月有30天}

M2={月份, 每月有31天}

M3={月份, 2月} 有29=512條規則

D1={日期,1~28} 12月末31日和其它31

D2={日期,29} 日月份的31日處理不同

D3={日期,30} 平年2月28日處理不同

D4={日期,31} 于2月27日

Y1 ={年:年是閏年}

Y2 ={年:年不是閏年}

改進為

M1={月份: 每月有30天}

M2={月份: 每月有31天, 12月除外}

M4={月份:12月}

M3={月份: 2月} 

D1={日期:1<=日期<=27}

D2={日期:28}

D3={日期:29}

D4={日期:30}

D5={日期:31}

輸入變量間存在大量邏輯關系的NextData決策表

3. 用決策表測試法測試以下程式:該程式有三個輸入變量month、day、year(month、day和year均為整數值,并且滿足:1≤month≤12和1≤day≤31),分别作為輸入日期的月份、日、年份,通過程式可以輸出該輸入日期在月曆上隔一天的日期。

例如,輸入為2004年11月29日,則該程式的輸出為2000年12月1日。

1)分析各種輸入情況,列出為輸入變量month、day、year劃分的有效等價類。

2)分析程式規格說明,結合以上等價類劃分的情況給出問題規定的可能采取的操作(即列出所有的動作樁)。

3)根據(1)和(2),畫出簡化後的決策表。

案例分析如下:

1) month變量的有效等價類:

M1: {month=4,6,9,11} M2: {month=1,3,5,7,8,10}

M3: {month=12} M4: {month=2}

2)day變量的有效等價類:

D1:{1≤day≤26} D2: {day=27} D3: {day=28} D4: {day=29} D5: {day=30} D6: {day=31}

3)year變量的有效等價類:

Y1: {year是閏年} Y2: {year不是閏年}

4)考慮各種有效的輸入情況,程式中可能采取的操作有以下六種:

a1: day+2 a2: day=2 a3: day=1 

a4: month+1 a5: month=1 a6: year+1 

4. 判定表在功能測試中的應用

1)一些軟體的功能需求可用判定表表達得非常清楚,在檢驗程式的功能時判定表也就成為一個不錯的工具。如果一個軟體的規格說明指出:

I. 當條件1和條件2滿足,并且條件3和條件4不滿足,或者當條件1、3和條件4滿足時,要執行操作1。

II. 在任一個條件都不滿足時,要執行操作2。

III. 在條件1不滿足,而條件4被滿足時,要執行操作3。 根據規格說明得到如下判定表:

這裡,判定表隻給出了16種規則中的8種。事實上,除這8條以外的一些規則是指當不能滿足指定的條件,執行3種操作時,要執行1個默許的操作。在沒必要時,判定表通常可略去這些規則。但如果用判定表來設計測試用例,就必須列出這些默許規則(如下表)。

規則5

規則6

規則7

規則8

條件1

條件2

條件3

條件4

默許操作

默許的規則

2)判定表的優點和缺點

I. 優點:它能把複雜的問題按各種可能的情況一一列舉出來,簡明而易于了解,也可避免遺漏。

II. 缺點:不能表達重複執行的動作,例如循環結構。

3)B. Beizer 指出了适合使用判定表設計測試用例的條件:

①規格說明以判定表形式給出,或很容易轉換成判定表。

②條件的排列順序不會也不影響執行哪些操作。

③規則的排列順序不會也不影響執行哪些操作。

④每當某一規則的條件已經滿足,并确定要執行的操作後,不必檢驗别的規則。

⑤如果某一規則得到滿足要執行多個操作,這些操作的執行順序無關緊要。

B. Beizer提出這5個必要條件的目的是為了使操作的執行完全依賴于條件的組合。其實對于某些不滿足這幾條的判定表,同樣可以借以設計測試用例,隻不過尚需增加其它的測試用例罷了。

VI. 正交法

利用因果圖來設計測試用例時, 作為輸入條件的原因與輸出結果之間的因果關系,有時很難從軟體需求規格說明中得到。往往因果關系非常龐大,以至于據此因果圖而得到的測試用例數目多的驚人,給軟體測試帶來沉重的負擔,為了有效地,合理地減少測試的工時與費用,可利用正交實驗設計方法進行測試用例的設計。

正交實驗設計方法:依據Galois理論,從大量的(實驗)資料(測試例)中挑選适量的,有代表性的點(例),進而合理地安排實驗(測試)的一種科學實驗設計方法.類似的方法有:聚類分析方法,因子方法方法等.

利用正交實驗設計測試用例的步驟:

1.提取功能說明,構造因子--狀态表

把影響實驗名額的條件稱為因子.而影響實驗因子的條件叫因子的狀态.利用正交實驗設計方法來設計測試用例時,首先要根據被測試軟體的規格說明書找出影響其功能實作的操作對象和外部因素,把他們當作因子,而把各個因子的取值當作狀态.對軟體需求規格說明中的功能要求進行劃分,把整體的概要性的功能要求進行層層分解與展開,分解成具體的有相對獨立性的基本的功能要求.這樣就可以把被測試軟體中所有的因子都确定下來,并為确定個因子的權值提供參考的依據.确定因子與狀态是設計測試用例的關鍵.是以要求盡可能全面的正确的确定取值,以確定測試用例的設計作到完整與有效。

2.權重篩選,生成因素分析表

對因子與狀态的選擇可按其重要程度分别權重.可根據各個因子及狀态的作用大小,出現頻率的大小以及測試的需要,确定權值的大小。

3.利用正交表構造測試資料集

正交表的推導依據Galois理論(這裡省略,需要時可查數理統計方面的教材)。

利用正交實驗設計方法設計測試用例,比使用等價類劃分,邊界值分析,因果圖等方法有以下優點:節省測試工作工時;可控制生成的測試用例數量;測試用例具有一定的覆寫率。

暫無

VII. 功能圖

一個程式的功能說明通常由動态說明和靜态說明組成.動态說明描述了輸入資料的次序或轉移的次序.靜态說明描述了輸入條件與輸出條件之間的對應關系.對于較複雜的程式,由于存在大量的組合情況,是以,僅用靜态說明組成的規格說明對于測試來說往往是不夠的.必須用動态說明來補充功能說明.功能圖方法是用功能圖FD形式化地表示程式的功能說明,并機械地生成功能圖的測試用例. 功能圖模型由狀态遷移圖和邏輯功能模型構成.狀态遷移圖用于表示輸入資料序列以及相應的輸出資料.在狀态遷移圖中,由輸入資料和目前狀态決定輸出資料和後續狀态.邏輯功能模型用于表示在狀态中輸入條件和輸出條件之間的對應關系.邏輯功能模型隻适合于描述靜态說明,輸出資料僅由輸入資料決定.測試用例則是由測試中經過的一系列狀态和在每個狀态中必須依靠輸入/輸出資料滿足的一對條件組成.功能圖方法其實是是一種黑盒白盒混合用例設計方法。

(功能圖方法中,要用到邏輯覆寫和路徑測試的概念和方法,其屬白盒測試方法中 的内容.邏輯覆寫是以程式内部的邏輯結構為基礎的測試用例設計方法.該方法要求測試人員對程式的邏輯結構有清楚的了解.由于覆寫測試的目标不同,邏輯覆寫可分為:語句覆寫,判定覆寫,判定-條件覆寫,條件組合覆寫及路徑覆寫.下面我們指的邏輯覆寫和路徑是功能或系統水準上的,以差別與白盒測試中的程式内部的.)

1.功能圖

功能圖由狀态遷移圖和布爾函數組成.狀态遷移圖用狀态和遷移來描述.一個狀态指出資料輸入的位置(或時間),而遷移則指明狀态的改變.同時要依靠判定表或因果圖表示的邏輯功能.例,一個簡化的自動出納機ATM的功能圖。

2.測試用例生成方法

從功能圖生成測試用例,得到的測試用例數是可接受的. 問題的關鍵的是如何從狀态遷移圖中選取測試用例. 若用節點代替狀态,用弧線代替遷移,則狀态遷移圖就可轉化成一個程式的控制流程圖形式.問題就轉化為程式的路徑測試問題(如白盒測試)問題了.

3.測試用例生成規則

為了把狀态遷移(測試路徑)的測試用例與邏輯模型(局部測試用例)的測試用例組合起來,從功能圖生成實用的測試用例,須定義下面的規則.在一個結構化的狀态遷移(SST)中,定義三種形式的循環:順序,選擇和重複.但分辨一個狀态遷移中的所有循環是有困難的.(其表示圖形省略)。

4.從功能圖生成測試用例的過程

1)生成局部測試用例:在每個狀态中,從因果圖生成局部測試用例.局部測試用例由原因值(輸入資料)組合與對應的結果值(輸出資料或狀态)構成。

2)測試路徑生成:利用上面的規則(三種)生成從初始狀态到最後狀态的測試路徑。

3)測試用例合成:合成測試路徑與功能圖中每個狀态中的局部測試用例.結果是初始狀态到最後狀态的一個狀态序列,以及每個狀态中輸入資料與對應輸出資料的組合。

5.測試用例的合成算法:采用條件構造樹.

VIII. 場景設計方法

現在的軟體幾乎都是用事件觸發來控制流程的,事件觸發時的情景便形成了場景,而同一事件不同的觸發順序和處理結果就形成事件流。這種在軟體設計方面的思想也可以引入到軟體測試中,可以比較生動地描繪出事件觸發時的情景,有利于測試設計者設計測試用例,同時使測試用例更容易了解和執行。

基本流和備選流:如下圖所示,圖中經過用例的每條路徑都用基本流和備選流來表示,直黑線表示基本流,是經過用例的最簡單的路徑。備選流用不同的色彩表示,一個備選流可能從基本流開始,在某個特定條件下執行,然後重新加入基本流中(如備選流1和3);也可能起源于另一個備選流(如備選流2),或者終止用例而不再重新加入到某個流(如備選流2和4)。

1. 例子描述

下圖所示是ATM例子的流程示意圖。

2.場景設計:下表所示是生成的場景。

表3-8 場景設計

場景1——成功提款

基本流

場景2——ATM内沒有現金

備選流2

場景3——ATM内現金不足

備選流3

場景4——PIN有誤(還有輸入機會)

備選流4

場景5——PIN有誤(不再有輸入機會)

場景6——賬戶不存在/賬戶類型有誤

備選流5

場景7——賬戶餘額不足

備選流6

注:為友善起見,備選流3和6(場景3和7)内的循環以及循環組合未納入上表。

3.用例設計

對于這7個場景中的每一個場景都需要确定測試用例。可以采用矩陣或決策表來确定和管理測試用例。下面顯示了一種通用格式,其中各行代表各個測試用例,而各列則代表測試用例的資訊。本示例中,對于每個測試用例,存在一個測試用例ID、條件(或說明)、測試用例中涉及的所有資料元素(作為輸入或已經存在于資料庫中)以及預期結果。

表3-9 測試用例表

TC(測試用例)ID号

場景/條件

PIN

賬号

輸入(或選擇)的金額

賬面

金額

ATM内的金額

預期結果

CW1

場景1:成功提款

V

成功提款

CW2

場景2:ATM内沒有現金

I

提款選項不可用,用例結束

CW3

場景3:ATM内現金不足

警告消息,傳回基本流步驟6,輸入金額

CW4

場景4:PIN有誤(還有不止一次輸入機會)

n/a

警告消息,傳回基本流步驟 4,輸入 PIN

CW5

場景4:PIN有誤(還有一次輸入機會)

CW6

場景4:PIN有誤(不再有輸入機會)

警告消息,卡予保留,用例結束

4.資料設計

一旦确定了所有的測試用例,則應對這些用例進行複審和驗證以確定其準确且适度,并取消多餘或等效的測試用例。

測試用例一經認可,就可以确定實際資料值(在測試用例實施矩陣中)并且設定測試資料,如表3-10所示。

表3-10 測試用例表

(元)

金額(元)

ATM内的金額(元)

4987

809-498

500.00

2 000

成功提款。賬戶餘額被更新為450.00

0.00

70.00

4978

警告消息,傳回基本流步驟4,輸入PIN

IX. 綜合政策

1.Myers提出了使用各種測試方法的綜合政策:

2)必要時用等價類劃分方法補充一些測試用例。

3)用錯誤推測法再追加一些測試用例。

4)對照程式邏輯,檢查已設計出的測試用例的邏輯覆寫程度,如果沒有達到要求的覆寫标準,應當再補充足夠的測試用例。

5)如果程式的功能說明中含有輸入條件的組合情況,則一開始就可選用因果圖法。

2.測試用例的設計步驟

1)構造根據設計規格得出的基本功能測試用例;

2)邊界值測試用例;

3)狀态轉換測試用例;

4)錯誤猜測測試用例;

6)性能測試用例;

7)壓力測試用例。

3.優化測試用例的方法

1)利用設計測試用例的8種方法不斷的對測試用例進行分解與合并;

2)采用遺傳算法理論進化測試用例;

3)在測試時利用發散思維構造測試用例。

本文轉自 jasonteststudy 51CTO部落格,原文連結:http://blog.51cto.com/jasonteststudy/1201169

繼續閱讀