黑盒測試用例設計方法算法
February 12, 2009數據庫
黑盒測試用例設計方法包括等價類劃分法、邊界值分析法、錯誤推測法、因果圖法、斷定表驅動法、正交試驗設計法、功能圖法等。 數組
等價類劃分法是把程序的輸入域劃分紅若干部分(子集),而後從每一個部分中選取少數表明性數據做爲測試用例。每一類的表明性數據在測試中的做用等價於這一類中的其餘值。網絡
設計測試用例時,要同時考慮這兩種等價類.由於,軟件不只要能接收合理的數據,也要能經受意外的考驗.這樣的測試才能確保軟件具備更高的可靠性。數據結構
例:輸入值是學生成績,範圍是0~100:函數
例:輸入條件說明輸入字符爲:中文、英文、阿拉伯文三種之一,則分別取這三種這三個值做爲三個有效等價類,另外把三種字符以外的任何字符做爲無效等價類。工具
分析題目中給出和隱含的對輸入條件的要求:性能
(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)
覆蓋無效等價類的測試用例:
1)劃分等價類並編號,下表等價類劃分的結果
輸入等價類 |
有效等價類 |
無效等價類 |
日期的類型及長度 |
①6位數字字符 |
②有非數字字符 ③少於6位數字字符 ④多於6位數字字符 |
年份範圍 |
⑤在1990~2049之間 |
⑥小於1990 ⑦大於2049 |
月份範圍 |
⑧在01~12之間 |
⑨等於00 ⑩大於12 |
2)設計測試用例,以便覆蓋全部的有效等價類在表中列出了3個有效等價類,編號分別爲①、⑤、⑧,設計的測試用例以下:
測試數據 指望結果 覆蓋的有效等價類
200211 輸入有效 ①、⑤、⑧
3)爲每個無效等價類設計一個測試用例,設計結果以下:
測試數據 指望結果 覆蓋的無效等價類
95June 無效輸入 ②
20036 無效輸入 ③
2001006 無效輸入 ④
198912 無效輸入 ⑥
200401 無效輸入 ⑦
200100 無效輸入 ⑨
200113 無效輸入 ⑩
(二)強健壯等價類測試
用例ID 月份 日期 年 預期輸出
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 三個無效
邊界值分析法就是對輸入或輸出的邊界值進行測試的一種黑盒測試方法。一般邊界值分析法是做爲對等價類劃分法的補充,這種狀況下,其測試用例來自等價類的邊界。
根據大量的測試統計數據,不少錯誤是發生在輸入或輸出範圍的邊界上,而不是發生在輸入/輸出範圍的中間區域。所以針對各類邊界狀況設計測試用例,能夠查出更多的錯誤。
使用邊界值分析方法設計測試用例,首先應肯定邊界狀況。一般輸入和輸出等價類的邊界,就是應着重測試的邊界狀況。應當選取正好等於,剛剛大於或剛剛小於邊界的值做爲測試數據,而不是選取等價類中的典型值或任意值做爲測試數據。
1. 邊界值分析法與等價類分析法的區別:
1) 邊界值分析不是從某等價類中隨便挑一個做爲表明,而是使這個等價類的每一個邊界都要做爲測試條件。
2) 邊界值分析不只考慮輸入條件,還要考慮輸出空間產生的測試狀況。
例:測試計算平方根的函數
--輸入:實數
--輸出:實數
--需求說明:當輸入一個0或比0大的數的時候,返回其正平方根;當輸入一個小於0的數時,顯示錯誤信息"平方根非法-輸入值小於0"並返回0;庫函數Print-Line能夠用來輸出錯誤信息。
A. 等價類劃分:
I.能夠考慮做出以下劃分:
a、輸入 (i)<0 和 (ii)>=0
b、輸出 (a)>=0 和 (b) Error
II.測試用例有兩個:
a、輸入4,輸出2。對應於 (ii) 和 (a) 。
b、輸入-10,輸出0和錯誤提示。對應於 (i) 和 (b)。
B. 邊界值分析:
劃分(ii)的邊界爲0和最大正實數;劃分(i)的邊界爲最小負實數和0。由此獲得如下測試用例:
a、輸入 {最小負實數}
b、輸入 {絕對值很小的負數}
c、輸入 0
d、輸入 {絕對值很小的正數}
e、輸入 {最大正實數}
2. 一般狀況下,軟件測試所包含的邊界檢驗有幾種類型:數字、字符、位置、重量、大小、速度、方位、尺寸、空間等。
3. 相應地,以上類型的邊界值應該在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、 最短/最長、 空/滿等狀況下。利用邊界值做爲測試數據
項 |
邊界值 |
測試用例的設計思路 |
字符 |
起始-1個字符/結束+1個字符 |
假設一個文本輸入區域容許輸入1個到255個 字符,輸入1個和255個字符做爲有效等價類;輸入0個和256個字符做爲無效等價類,這幾個數值都屬於邊界條件值。 |
數值 |
最小值-1/最大值+1 |
假設某軟件的數據輸入域要求輸入5位的數據值,可使用10000做爲最小值、99999做爲最大值;而後使用恰好小於5位和大於5位的 數值來做爲邊界條件。 |
空間 |
小於空餘空間一點/大於滿空間一點 |
例如在用U盤存儲數據時,使用比剩餘磁盤空間大一點(幾KB)的文件做爲邊界條件。 |
4. 內部邊界值分析:
在多數狀況下,邊界值條件是基於應用程序的功能設計而須要考慮的因素,能夠從軟件的規格說明或常識中獲得,也是最終用戶能夠很容易發現問題的。然而,在測試用例設計過程當中,某些邊界值條件是不須要呈現給用戶的,或者說用戶是很難注意到的,但同時確實屬於檢驗範疇內的邊界條件,稱爲內部邊界值條件或子邊界值條件。
內部邊界值條件主要有下面幾種:
1) 數值的邊界值檢驗:計算機是基於二進制進行工做的,所以,軟件的任何數值運算都有必定的範圍限制。
項 |
範圍或值 |
位(bit) |
0 或 1 |
字節(byte) |
0 ~ 255 |
字(word) |
0~65535(單字)或 0~4294967295(雙字) |
千(K) |
1024 |
兆(M) |
1048576 |
吉(G) |
1073741824 |
2) 字符的邊界值檢驗:在計算機軟件中,字符也是很重要的表示元素,其中ASCII和Unicode是常見的編碼方式。以下列出了一些經常使用字符對應的ASCII碼值。
字符 |
ASCII碼值 |
空 (null) |
0 |
空格(space) |
32 |
可輸入的字符 |
33~126 |
0~9 |
48~57 |
A~Z |
65~90 |
a~z |
97~122 |
3) 其它邊界值檢驗:在不一樣的行業應用領域,依據硬件和軟件的標準不一樣而具備各自特定的邊界值。以下列出部分手機相關的邊界值:
硬件設備 |
範圍或值 |
手機鋰電池電壓 |
工做電壓:3.6~4.2V; 保護電壓:2.5~3V不等 |
手機正常使用溫度 |
-25°C~+60°C |
5. 基於邊界值分析方法選擇測試用例的原則
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.2四、還可取一0.01及1165.26等。
Ø 再如一程序屬於情報檢索系統,要求每次"最少顯示1條、最多顯示4條情報摘要",這時咱們應考慮的測試用例包括1和4,還應包括0和5等。
4) 若是程序的規格說明給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最後一個元素做爲測試用例。
5) 若是程序中使用了一個內部數據結構,則應當選擇這個內部數據結構的邊界上的值做爲測試用例。
6) 分析規格說明,找出其它可能的邊界條件。
1. 現有一個學生標準化考試批閱試卷,產生成績報告的程序。其規格說明以下:程序的輸入文件由一些有80個字符的記錄組成,如右圖所示,全部記錄分爲3組:
1) 標題:這一組只有一個記錄,其內容爲輸出成績報告的名字。
2) 試卷各題標準答案記錄:每一個記錄均在第80個字符處標以數字"2"。該組的第一個記錄的第1至第3個字符爲題目編號(取值爲1一999)。第10至第59個字符給出第1至第50題的答案(每一個合法字符表示一個答案)。該組的第2,第3……個記錄相應爲第51至第100,第101至第150,…題的答案。
3) 每一個學生的答卷描述:該組中每一個記錄的第80個字符均爲數字"3"。每一個學生的答卷在若干個記錄中給出。如甲的首記錄第1至第9字符給出學生姓名及學號,第10至第59字符列出的是甲所作的第1至第50題的答案。若試題數超過50,則第2,第3……紀錄分別給出他的第51至第100,第101至第150……題的解答。而後是學生乙的答卷記錄。
4) 學生人數不超過200,試題數不超過999。
5) 程序的輸出有4個報告:
a)按學號排列的成績單,列出每一個學生的成績、名次。
b)按學生成績排序的成績單。
c)平均分數及標準誤差的報告。
d)試題分析報告。按試題號排序,列出各題學生答對的百分比。
解答:分別考慮輸入條件和輸出條件,以及邊界條件。給出下表所示的輸入條件及相應的測試用例。
輸出條件及相應的測試用例表。
2. 三角形問題的邊界值分析測試用例
在三角形問題描述中,除了要求邊長是整數外,沒有給出其它的限制條件。在此,咱們將三角形每邊邊長的取範圍值設值爲[1, 100] 。
測試用例 |
a |
b |
c |
預期輸出 |
Test1 Test2 Test3 Test4 Test5 |
60 60 60 50 50 |
60 60 60 50 50 |
1 2 60 99 100 |
等腰三角形 等腰三角形 等邊三角形 等腰三角形 非三角形 |
Test6 Test7 Test8 Test9 |
60 60 50 50 |
1 2 99 100 |
60 60 50 50 |
等腰三角形 等腰三角形 等腰三角形 非三角形 |
Test10 Test11 Test12 Test13 |
1 2 99 100 |
60 60 50 50 |
60 60 50 50 |
等腰三角形 等腰三角形 等腰三角形 非三角形 |
3. NextDate函數的邊界值分析測試用例
在NextDate函數中,隱含規定了變量mouth和變量day的取值範圍爲1≤mouth≤12和1≤day≤31,並設定變量year的取值範圍爲1912≤year≤2050 。
測試用例 |
mouth |
day |
year |
預期輸出 |
Test1 Test2 Test3 Test4 Test5 Test6 Test7 |
6 6 6 6 6 6 6 |
15 15 15 15 15 15 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 |
Test8 Test9 Test10 Test11 Test12 Test13 |
6 6 6 6 6 6 |
-1 1 2 30 31 32 |
2001 2001 2001 2001 2001 2001 |
day超出[1…31] 2001.6.2 2001.6.3 2001.7.1 輸入日期超界 day超出[1…31] |
Test14 Test15 Test16 Test17 Test18 Test19 |
-1 1 2 11 12 13 |
15 15 15 15 15 15 |
2001 2001 2001 2001 2001 2001 |
Mouth超出[1…12] 2001.1.16 2001.2.16 2001.11.16 2001.12.16 Mouth超出[1…12] |
基於經驗和直覺推測程序中全部可能存在的各類錯誤, 從而有針對性的設計測試用例的方法。
基本思想:列舉出程序中全部可能有的錯誤和容易發生錯誤的特殊狀況,根據他們選擇測試用例。
1. 例如, 輸入數據和輸出數據爲0的狀況;輸入表格爲空格或輸入表格只有一行。 這些都是容易發生錯誤的狀況。可選擇這些狀況下的例子做爲測試用例。
2. 例如,前面例子中成績報告的程序,採用錯誤推測法還可補充設計一些測試用例:
1) 程序是否把空格做爲回答
2) 在回答記錄中混有標準答案記錄
3) 除了標題記錄外,還有一些的記錄最後一個字符即不是2也不是3
4) 有兩個學生的學號相同
5) 試題數是負數
3. 例如,測試一個對線性表(好比數組)進行排序的程序,可推測列出如下幾項須要特別測試的狀況:
1) 輸入的線性表爲空表;
2) 表中只含有一個元素;
3) 輸入表中全部元素已排好序;
4) 輸入表已按逆序排好;
5) 輸入表中部分或所有元素相同。
4. 例如,測試手機終端的通話功能,能夠設計各類通話失敗的狀況來補充測試用例:
1) 無SIM 卡插入時進行呼出(非緊急呼叫)
2) 插入已欠費SIM卡進行呼出
3) 射頻器件損壞或無信號區域插入有效SIM卡呼出
4) 網絡正常,插入有效SIM卡,呼出無效號碼(如一、88八、33333三、不輸入任何號碼等)
5) 網絡正常,插入有效SIM卡,使用「快速撥號」功能呼出設置無效號碼的數字
因果圖法是一種利用圖解法分析輸入的各類組合狀況,從而設計測試用例的方法,它適合於檢查程序輸入條件的各類組合狀況。
等價類劃分法和邊界值分析方法都是着重考慮輸入條件,但沒有考慮輸入條件的各類組合、輸入條件之間的相互制約關係。這樣雖然各類輸入條件可能出錯的狀況已經測試到了,但多個輸入條件組合起來可能出錯的狀況卻被忽視了。
若是在測試時必須考慮輸入條件的各類組合,則可能的組合數目將是天文數字,所以必須考慮採用一種適合於描述多種條件的組合、相應產生多個動做的形式來進行測試用例的設計,這就須要利用因果圖(邏輯模型)。
1. 因果圖介紹
1) 4種符號分別表示了規格說明中向4種因果關係。
2) 因果圖中使用了簡單的邏輯符號,以直線聯接左右結點。左結點表示輸入狀態(或稱緣由),右結點表示輸出狀態(或稱結果)。
3) C1表示緣由,一般置於圖的左部;e1表示結果,一般在圖的右部。C1和e1都可取值0或1,0表示某狀態不出現,1表示某狀態出現。
2. 因果圖涉及的概念
1) 關係
2) 約束
輸入狀態相互之間還可能存在某些依賴關係,稱爲約束。例如, 某些輸入條件自己不可能同時出現。輸出狀態之間也每每存在約束。在因果圖中,用特定的符號標明這些約束。
輸出條件的約束只有M約束(強制):若結果a是1,則結果b強制爲0。
3. 採用因果圖法設計測試用例的步驟:
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列做爲肯定測試用例的依據。
斷定表是分析和表達多邏輯條件下執行不一樣操做的狀況的工具。
1. 斷定表的優勢
可以將複雜的問題按照各類可能的狀況所有列舉出來,簡明並避免遺漏。所以,利用斷定表可以設計出完整的測試用例集合。
在一些數據處理問題當中,某些操做的實施依賴於多個邏輯條件的組合,即:針對不一樣邏輯條件的組合值,分別執行不一樣的操做。斷定表很適合於處理這類問題。
2. 「閱讀指南」斷定表
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
||
問題 |
以爲疲倦? |
Y |
Y |
Y |
Y |
N |
N |
N |
N |
感興趣嗎? |
Y |
Y |
N |
N |
Y |
Y |
N |
N |
|
糊塗嗎? |
Y |
N |
Y |
N |
Y |
N |
Y |
N |
|
建議 |
重讀 |
√ |
|||||||
繼續 |
√ |
||||||||
跳下一章 |
√ |
√ |
|||||||
休息 |
√ |
√ |
√ |
√ |
3. 斷定表一般由四個部分組成以下圖所示。
1) 條件樁(Condition Stub):列出了問題得全部條件。一般認爲列出的條件的次序可有可無。
2) 動做樁(Action Stub):列出了問題規定可能採起的操做。這些操做的排列順序沒有約束。
3) 條件項(Condition Entry):列出針對它左列條件的取值。在全部可能狀況下的真假值。
4) 動做項(Action Entry):列出在條件項的各類取值狀況下應該採起的動做。
4. 規則及規則合併
1) 規則:任何一個條件組合的特定取值及其相應要執行的操做稱爲規則。在斷定表中貫穿條件項和動做項的一列就是一條規則。顯然,斷定表中列出多少組條件取值,也就有多少條規則,既條件項和動做項有多少列。
2) 化簡:就是規則合併有兩條或多條規則具備相同的動做,而且其條件項之間存在着極爲類似的關係。
5. 規則及規則合併舉例
1) 以下圖左端,兩規則動做項同樣,條件項相似,在一、2條件項分別取Y、N時,不管條件3取何值,都執行同一操做。即要執行的動做與條件3無關。因而可合併。「-」表示與取值無關。
2) 與上相似,下圖中,無關條件項「-」可包含其餘條件項取值,具備相同動做的規則可合併。
3) 化簡後的讀書指南斷定表
1 |
2 |
3 |
4 |
||
問題 |
你以爲疲倦嗎? |
- |
- |
Y |
N |
你對內容感興趣嗎? |
Y |
Y |
N |
N |
|
書中內容使你胡塗嗎? |
Y |
N |
- |
- |
|
建議 |
請回到本章開頭重讀 |
x |
|||
繼續讀下去 |
X |
||||
跳到下一章去讀 |
x |
||||
中止閱讀,請休息 |
x |
6. 斷定表的創建步驟:(根據軟件規格說明)
1) 肯定規則的個數.假若有n個條件。每一個條件有兩個取值(0,1),故有2n種規則。
2) 列出全部的條件樁和動做樁。
3) 填入條件項。
4) 填入動做項。等到初始斷定表。
5) 簡化.合併類似規則(相同動做)。
1. 問題要求:」……對功率大於50馬力的機器、維修記錄不全或已運行10年以上的機器,應給予優先的維修處理……」 。這裏假定,「維修記錄不全」和「優先維修處理」均已在別處有更嚴格的定義 。請創建斷定表。
解答:
1) 肯定規則的個數:這裏有3個條件,每一個條件有兩個取值,故應有2*2*2=8種規則。
2) 列出全部的條件茬和動做樁:
3) 填入條件項。可從最後1行條件項開始,逐行向上填滿。如第三行是: Y N Y N Y N Y N,第二行是: Y Y N N Y Y N N等等。
4) 填入動做樁和動做頂。這樣便獲得形如圖的初始斷定表。
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
||
條件 |
功率大於50馬力嗎? |
N |
Y |
Y |
Y |
N |
N |
N |
N |
維修記錄不全嗎? |
Y |
Y |
N |
N |
Y |
Y |
N |
N |
|
運行超過10年嗎? |
Y |
N |
Y |
N |
Y |
N |
Y |
N |
|
動做 |
進行優先處理 |
x |
x |
X |
X |
X |
|||
做其餘處理 |
X |
x |
x |
初始斷定表
5) 化簡,合併類似規則後獲得圖。
1 |
2 |
3 |
4 |
5 |
||
條件 |
功率大於50馬力嗎? |
Y |
Y |
Y |
N |
N |
維修記錄不全嗎? |
Y |
N |
N |
- |
- |
|
運行超過10年嗎? |
- |
Y |
N |
Y |
N |
|
動做 |
進行優先處理 |
x |
x |
X |
||
做其餘處理 |
x |
x |
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}
Y1 ={年:年是閏年}
Y2 ={年:年不是閏年}
輸入變量間存在大量邏輯關係的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),畫出簡化後的決策表。
案例分析以下:
M1: {month=4,6,9,11} M2: {month=1,3,5,7,8,10}
M3: {month=12 }M4: {month=2}
D1:{1≤day≤26} D2: {day=27} D3: {day=28} D4: {day=29} D5: {day=30} D6: {day=31}
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) 一些軟件的功能需求可用斷定表表達得很是清楚,在檢驗程序的功能時斷定表也就成爲一個不錯的工具。若是一個軟件的規格說明指出:
這裏,斷定表只給出了16種規則中的8種。事實上,除這8條之外的一些規則是指當不能知足指定的條件,執行3種操做時,要執行1個默許的操做。在不必時,斷定表一般可略去這些規則。但若是用斷定表來設計測試用例,就必須列出這些默許規則(以下表)。
規則5 |
規則6 |
規則7 |
規則8 |
|
條件1 |
- |
N |
Y |
Y |
條件2 |
- |
Y |
Y |
N |
條件3 |
Y |
N |
N |
N |
條件4 |
N |
N |
Y |
- |
默許操做 |
x |
x |
x |
x |
默許的規則
2) 斷定表的優勢和缺點
3) B. Beizer 指出了適合使用斷定表設計測試用例的條件:
B. Beizer提出這5個必要條件的目的是爲了使操做的執行徹底依賴於條件的組合。其實對於某些不知足這幾條的斷定表,一樣能夠藉以設計測試用例,只不過尚需增長其它的測試用例罷了。
依據Galois理論,從大量的(實驗)數據(測試例)中挑選適量的,有表明性的點(例),從而合理地安排實驗(測試)的一種科學實驗設計方法.相似的方法有:聚類分析方法,因子方法方法等.
利用因果圖來設計測試用例時, 做爲輸入條件的緣由與輸出結果之間的因果關係,有時很難從軟件需求規格說明中獲得。每每因果關係很是龐大,以致於據此因果圖而獲得的測試用例數目多的驚人,給軟件測試帶來沉重的負擔,爲了有效地,合理地減小測試的工時與費用,可利用正交實驗設計方法進行測試用例的設計。
利用正交實驗設計測試用例的步驟:
1. 提取功能說明,構造因子--狀態表
把影響實驗指標的條件稱爲因子.而影響實驗因子的條件叫因子的狀態.利用正交實驗設計方法來設計測試用例時,首先要根據被測試軟件的規格說明書找出影響其功能實現的操做對象和外部因素,把他們看成因子,而把各個因子的取值看成狀態.對軟件需求規格說明中的功能要求進行劃分,把總體的概要性的功能要求進行層層分解與展開,分解成具體的有相對獨立性的基本的功能要求.這樣就能夠把被測試軟件中全部的因子都肯定下來,併爲肯定個因子的權值提供參考的依據.肯定因子與狀態是設計測試用例的關鍵.所以要求儘量全面的正確的肯定取值,以確保測試用例的設計做到完整與有效。
2. 加權篩選,生成因素分析表
對因子與狀態的選擇可按其重要程度分別加權.可根據各個因子及狀態的做用大小,出現頻率的大小以及測試的須要,肯定權值的大小。
3. 利用正交表構造測試數據集
正交表的推導依據Galois理論(這裏省略,須要時可查數理統計方面的教材)。
利用正交實驗設計方法設計測試用例,比使用等價類劃分,邊界值分析,因果圖等方法有如下優勢:節省測試工做工時;可控制生成的測試用例數量;測試用例具備必定的覆蓋率。
功能圖由狀態遷移圖和布爾函數組成.狀態遷移圖用狀態和遷移來描述.一個狀態指出數據輸入的位置(或時間),而遷移則指明狀態的改變.同時要依靠斷定表或因果圖表示的邏輯功能.例,一個簡化的自動出納機ATM的功能圖。
一個程序的功能說明一般由動態說明和靜態說明組成.動態說明描述了輸入數據的次序或轉移的次序.
靜態說明描述了輸入條件與輸出條件之間的對應關係.對於較複雜的程序,因爲存在大量的組合狀況,所以,僅用靜態說明組成的規格說明對於測試來講每每是不夠的.必須用動態說明來補充功能說明.功能圖方法是用功能圖FD形式化地表示程序的功能說明,並機械地生成功能圖的測試用例.
功能圖模型由狀態遷移圖和邏輯功能模型構成.狀態遷移圖用於表示輸入數據序列以及相應的輸出數據.在狀態遷移圖中,由輸入數據和當前狀態決定輸出數據和後續狀態.邏輯功能模型用於表示在狀態中輸入條件和輸出條件之間的對應關係.邏輯功能模型只適合於描述靜態說明,輸出數據僅由輸入數據決定.測試用例則是由測試中通過的一系列狀態和在每一個狀態中必須依靠輸入/輸出數據知足的一對條件組成.功能圖方法實際上是是一種黑盒白盒混合用例設計方法。
(功能圖方法中,要用到邏輯覆蓋和路徑測試的概念和方法,其屬白盒測試方法中 的內容.邏輯覆蓋是以程序內部的邏輯結構爲基礎的測試用例設計方法.該方法要求測試人員對程序的邏輯結構有清楚的瞭解.因爲覆蓋測試的目標不一樣,邏輯覆蓋可分爲:語句覆蓋,斷定覆蓋,斷定-條件覆蓋,條件組合覆蓋及路徑覆蓋.下面咱們指的邏輯覆蓋和路徑是功能或系統水平上的,以區別與白盒測試中的程序內部的.)
從功能圖生成測試用例,獲得的測試用例數是可接受的. 問題的關鍵的是如何從狀態遷移圖中選取測試用例. 若用節點代替狀態,用弧線代替遷移,則狀態遷移圖就可轉化成一個程序的控制流程圖形式.問題就轉化爲程序的路徑測試問題(如白盒測試)問題了.
爲了把狀態遷移(測試路徑)的測試用例與邏輯模型(局部測試用例)的測試用例組合起來,從功能圖生成實用的測試用例,須定義下面的規則.在一個結構化的狀態遷移(SST)中,定義三種形式的循環:順序,選擇和重複.但分辨一個狀態遷移中的全部循環是有困難的.(其表示圖形省略)。
1) 生成局部測試用例:在每一個狀態中,從因果圖生成局部測試用例.局部測試用例由緣由值(輸入數據)組合與對應的結果值(輸出數據或狀態)構成。
2) 測試路徑生成:利用上面的規則(三種)生成從初始狀態到最後狀態的測試路徑。
3) 測試用例合成:合成測試路徑與功能圖中每一個狀態中的局部測試用例.結果是初始狀態到最後狀態的一個狀態序列,以及每一個狀態中輸入數據與對應輸出數據的組合。
如今的軟件幾乎都是用事件觸發來控制流程的,事件觸發時的情景便造成了場景,而同一事件不一樣的觸發順序和處理結果就造成事件流。這種在軟件設計方面的思想也能夠引入到軟件測試中,能夠比較生動地描繪出事件觸發時的情景,有利於測試設計者設計測試用例,同時使測試用例更容易理解和執行。
基本流和備選流:以下圖所示,圖中通過用例的每條路徑都用基本流和備選流來表示,直黑線表示基本流,是通過用例的最簡單的路徑。備選流用不一樣的色彩表示,一個備選流可能從基本流開始,在某個特定條件下執行,而後從新加入基本流中(如備選流1和3);也可能起源於另外一個備選流(如備選流2),或者終止用例而再也不從新加入到某個流(如備選流2和4)。
下圖所示是ATM例子的流程示意圖。
表3-8 場景設計
場景1——成功提款 |
基本流 |
|
場景2——ATM內沒有現金 |
基本流 |
備選流2 |
場景3——ATM內現金不足 |
基本流 |
備選流3 |
場景4——PIN有誤(還有輸入機會) |
基本流 |
備選流4 |
場景5——PIN有誤(再也不有輸入機會) |
基本流 |
備選流4 |
場景6——帳戶不存在/帳戶類型有誤 |
基本流 |
備選流5 |
場景7——帳戶餘額不足 |
基本流 |
備選流6 |
注:爲方便起見,備選流3和6(場景3和7)內的循環以及循環組合未歸入上表。
對於這7個場景中的每個場景都須要肯定測試用例。能夠採用矩陣或決策表來肯定和管理測試用例。下面顯示了一種通用格式,其中各行表明各個測試用例,而各列則表明測試用例的信息。本示例中,對於每一個測試用例,存在一個測試用例ID、條件(或說明)、測試用例中涉及的全部數據元素(做爲輸入或已經存在於數據庫中)以及預期結果。
表3-9 測試用例表
TCID |
場景/條件 |
PIN |
帳號 |
輸入(或選擇)的金額 |
帳面 金額 |
ATM內的金額 |
預期結果 |
CW1 |
場景1:成功提款 |
V |
V |
V |
V |
V |
成功提款 |
CW2 |
場景2:ATM內沒有現金 |
V |
V |
V |
V |
I |
提款選項不可用,用例結束 |
CW3 |
場景3:ATM內現金不足 |
V |
V |
V |
V |
I |
警告消息,返回基本流步驟6,輸入金額 |
CW4 |
場景4:PIN有誤(還有不止一次輸入機會) |
I |
V |
n/a |
V |
V |
警告消息,返回基本流步驟4,輸入 PIN |
CW5 |
場景4:PIN有誤(還有一次輸入機會) |
I |
V |
n/a |
V |
V |
警告消息,返回基本流步驟4,輸入 PIN |
CW6 |
場景4:PIN有誤(再也不有輸入機會) |
I |
V |
n/a |
V |
V |
警告消息,卡予保留,用例結束 |
一旦肯定了全部的測試用例,則應對這些用例進行復審和驗證以確保其準確且適度,並取消多餘或等效的測試用例。
測試用例一經承認,就能夠肯定實際數據值(在測試用例實施矩陣中)而且設定測試數據,如表3-10所示。
表3-10 測試用例表
TCID |
場景/條件 |
PIN |
帳號 |
輸入(或選擇)的金額(元) |
帳面 |
ATM內的金額(元) |
預期結果 |
CW1 |
場景1:成功提款 |
4987 |
809-498 |
50.00 |
500.00 |
2 000 |
成功提款。帳戶餘額被更新爲450.00 |
CW2 |
場景2:ATM內沒有現金 |
4987 |
809-498 |
100.00 |
500.00 |
0.00 |
提款選項不可用,用例結束 |
CW3 |
場景3:ATM內現金不足 |
4987 |
809-498 |
100.00 |
500.00 |
70.00 |
警告消息,返回基本流步驟6,輸入金額 |
CW4 |
場景4:PIN有誤(還有不止一次輸入機會) |
4978 |
809-498 |
n/a |
500.00 |
2 000 |
警告消息,返回基本流步驟4,輸入PIN |
CW5 |
場景4:PIN有誤(還有一次輸入機會) |
4978 |
809-498 |
n/a |
500.00 |
2 000 |
警告消息,返回基本流步驟4,輸入PIN |
CW6 |
場景4:PIN有誤(再也不有輸入機會) |
4978 |
809-498 |
n/a |
500.00 |
2 000 |
警告消息,卡予保留,用例結束 |
1) 在任何狀況下都必須使用邊界值分析方法,經驗代表用這種方法設計出測試用例發現程序錯誤的能力最強。】
2) 必要時用等價類劃分方法補充一些測試用例。
3) 用錯誤推測法再追加一些測試用例。
4) 對照程序邏輯,檢查已設計出的測試用例的邏輯覆蓋程度,若是沒有達到要求的覆蓋標準,應當再補充足夠的測試用例。
5) 若是程序的功能說明中含有輸入條件的組合狀況,則一開始就可選用因果圖法。
1) 構造根據設計規格得出的基本功能測試用例;
2) 邊界值測試用例;
3) 狀態轉換測試用例;
4) 錯誤猜想測試用例;
5) 異常測試用例;】
6) 性能測試用例;
7) 壓力測試用例。
1) 利用設計測試用例的8種方法不斷的對測試用例進行分解與合併;
2) 採用遺傳算法理論進化測試用例;
3) 在測試時利用發散思惟構造測試用例;