本文根據Vince整理的《測試用例設計白皮書》整理
Word版本下載地址:/Files/Jackc/黑盒測試用例設計方法.doc
一、黑盒測試用例方法
黑盒測試用例設計方法,主要包括等價類划分法、邊界值分析法、錯誤推測法、因果圖法、判定表驅動發、正交試驗設計法、功能圖法等
1.等價類划分法
等價類划分法是把程序的輸入域分成若干部分,然后從每個部分中選取少數代表性數據作為測試用例。每一類的代表性數據在測試中的作用等價於這一類中的其他值。
應用場景:
某程序規定:“輸入三個整數a,b,c分別作為三邊的邊長構成三角形.通過程序判定所構成的三角形的類型,當此三角形為一般三角形\等腰三角形及等邊三角形時,分別作計算...”.用等價類划分方法為該程序進行測試用例設計.
分析題目中給出和隱含的對輸入條件的要求:
⑴整數 ⑵三個數 ⑶非零數 ⑷正數 ⑸兩邊之和大於第三邊 ⑹等腰 ⑺等邊
如果a、b、c滿足條件1-4,則輸入下列四種情況之一:
①如果不滿足條件5,則呈現輸出為“非三角形”
②如果三條邊相等即滿足條件7,則呈現輸出為“等邊三角形”
③如果只有兩條邊相等,即滿足條件6,則呈現輸出為“等腰三角形”
④如果三條邊都不相等,則程序輸出為“一般三角形”
覆蓋有效等價類的測試用例:
a b c 覆蓋等價類號碼
3 4 5 1-7
4 4 5 1-7,8
4 4 5 1-7,9
5 4 5 1-7,10
4 4 4 1-7,11
覆蓋無效等價類的測試用例:
2.邊界值分析法
邊界值分析法就是對輸入火輸出的邊界值進行測試的一種黑盒測試方法.同城邊界值分析法是作為對等價類划分法的補充.
使用邊界值分析方法設計測試用例,首先應確定邊界情況.通常輸入和輸出等價類的邊界,就是應着重測試的邊界情況.應當選取正好等於,剛剛大於或者剛剛小於邊界的值作為測試數據.
通常情況下,軟件測試所包含的邊界檢驗有幾種類型:數字,字符,位置,重量,大小,速度,方位,尺寸,空間等
相應地,以上類型的邊界值應該在:最大/最小,首位/末位,上/下,最快/最慢,最高/最低,最短/最長,空/滿等情況下,利用邊界值作為測試數據.
項 |
邊界值 |
測試用例的設計思路 |
字符 |
起始-1個字符/結束+1個字符 |
假設一個文本輸入區域允許輸入1個到255個 字符,輸入1個和255個字符作為有效等價類;輸入0個和256個字符作為無效等價類,這幾個數值都屬於邊界條件值。 |
數值 |
最小值-1/最大值+1 |
假設某軟件的數據輸入域要求輸入5位的數據值,可以使用10000作為最小值、99999作為最大值;然后使用剛好小於5位和大於5位的 數值來作為邊界條件。 |
空間 |
小於空余空間一點/大於滿空間一點 |
例如在用U盤存儲數據時,使用比剩余磁盤空間大一點(幾KB)的文件作為邊界條件。 |
應用場景:
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] |
4.錯誤推斷法
基於經驗和直覺推測程序中所有可能存在的各種錯誤,從而有針對性的設計測試用例的方法.
5.因果圖法
因果圖法師一種利用圖解法分析輸入的各種組合情況,從而設計測試用例的方法.
采用因果圖法設計測試用例的步驟:
① 分析軟件規格說明描述中,哪些是原因(即輸入條件或輸入條件的等價類),哪些是結果(即輸出條件),並給每個原因和結果賦予一個標識符.
② 分析軟件規格說明描述中的語義,找出原因與結果之間,原因與原因之間對應的關系,根據這些關系,畫出因果圖.
③ 由於語法或環境限制,有些原因與原因之間,原因與結果之間的組合情況不可能出現,為表明這些特殊情況,在因果圖上用一些記號表明約束或限制條件.
④ 把因果圖轉換為判定表
⑤ 把判定表的每一列拿出來作為依據,設計測試用例.
6.判定表驅動法
判定表通常由4個部分組成
① 條件樁:列出了問題得所有條件.通常認為列出的條件的次序無關緊要
② 動作樁:列出了問題規定可能采取的操作.這些操作的排列順序沒有約束
③ 條件項:列出針對它左列條件的取值.在所有可能情況下的真假值.
④ 動作項:列出在條件項的各種取值情況下應該采取的動作.
判定表的建立步驟:
① 確定規則的個數.加入有n個條件.每個條件有兩個取值(0,1),故有2n種規則.
② 列出所有的條件樁和動作樁
③ 填入條件項
④ 填入動作項.等到初始判定表
⑤ 簡化.合並相似規則
應用場景:
問題要求:"....對功率大於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馬力嗎? |
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 |
⑤ 化簡,合並相似規則后得到圖.
條件 |
功率大於50馬力嗎? |
Y |
Y |
Y |
N |
N |
維修記錄不全嗎? |
Y |
N |
N |
- |
- |
|
運行超過10年嗎? |
- |
Y |
N |
Y |
N |
|
動作 |
進行優先處理 |
x |
x |
X |
||
作其他處理 |
x |
x |
7.正交試驗法
依據Galois理論,從大量的(實驗)數據(測試例)中挑選適量的,有代表性的點(例),從而合理地安排實驗(測試)的一種科學實驗設計方法.
8.功能圖法
功能圖由狀態遷移圖和布爾函數組成.狀態遷移圖用狀態和遷移來描述.一個狀態指出數據輸入的位置(或時間),而遷移則指明狀態的改變.同事要依靠判定表或因果圖表示的邏輯功能.
9.場景法
事件觸發時的情景便形成了場景,二同一事件不同的觸發順序和處理結果就形成事件流.
應用場景:
ATM例子的流程示意圖.
場景設計:
場景1——成功提款 |
基本流 |
|
場景2——ATM內沒有現金 |
基本流 |
備選流2 |
場景3——ATM內現金不足 |
基本流 |
備選流3 |
場景4——PIN有誤(還有輸入機會) |
基本流 |
備選流4 |
場景5——PIN有誤(不再有輸入機會) |
基本流 |
備選流4 |
場景6——賬戶不存在/賬戶類型有誤 |
基本流 |
備選流5 |
場景7——賬戶余額不足 |
基本流 |
備選流6 |
用例設計:
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 |
警告消息,卡予保留,用例結束 |
數據設計
CID |
場景/條件 |
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 |
警告消息,卡予保留,用例結束 |
10.測試用例設計綜合策略
1.Myers提出了使用各種測試方法的綜合策略:
① 在任何情況下都必須使用邊界值分析方法,經驗表明用這種方法設計出測試用例發現程序錯誤的能力最強
② 必要時用等價類划分方法補充一些測試用例
③ 用錯誤推測法再追加一些測試用例
④ 對照程序邏輯,檢查已設計出的測試用例的邏輯覆蓋程度,如果沒有達到要求的覆蓋標准,應當再補充足夠的測試用例
⑤ 如果程序的功能說明中含有輸入條件的組合情況,則一開始就可選用因果圖法
2.測試用例的設計步驟
① 構造更加設計規格得出的基本功能測試用例
② 邊界值測試用例
③ 狀態轉換測試用例
④ 錯誤猜測測試用例
⑤ 異常測試用例
⑥ 性能測試用例
⑦ 壓力測試用例
3.優化測試用例的方法
① 利用設計測試用例的8中方法不斷的對測試用例進行分解與合並
② 采用遺傳算法理論進化測試用例
③ 在測試時利用發散思維構造測試用例