等價類划分法、邊界值分析法及錯誤推斷法在對輸入條件的考慮中並未重視輸入條件的組合。事實上,當輸入條件存在若干種可能的組合時,必須對這些組合加以考慮,以證實測試程序在某種輸入組合的情況下恩能否完成規格說明書中預先規定的功能,否則所做的測試是不充分的。
因果圖(Cuase-effect Graph)是一種描述輸入條件的組合及每種組合對應的輸出的圖形化工具。在因果圖的基礎上可以設計測試用例。
因果圖的畫法:
(a)恆等。若原因出現,則結果出現;若原因不出現,則結果不出現。
(b)非。若原因出現,則結果不出現;若原因不出現,則結果出現。
(c)或。若幾個原因中有一個出現,則結果出現;若幾個原因均不出現,則結果不出現。
(d)與。若幾個原因都出現,結果才出現;若幾個原因中有一個不出現,則結果不出現。
為了表示因果圖中的約束條件,可用一些符號在因果圖中加以標識。
從原因方面考慮主要有4種約束條件:
(a)E(互斥、排他)。a、b兩個原因不會同時出現,最多只有一個出現。
(b)I(包含、或)。a、b、c三個原因至少有一個出現。
(c)O(唯一)。a、b兩個原因必須有一個出現,且僅有一個出現。
(d)R(需求)。a出現時b必定出現。
從結果方面考慮主要有1種約束條件:
(a)M(屏蔽)。a出現時,b必定不出現;a不出現時,b則不確定。
利用因果圖設計測試用例應遵循的步驟:
1)分析程序的規格說明書中哪些事原因,哪些是結果。所謂原因,是指輸入條件或輸入條件的等價類,而結果是指輸出條件。
給每一個原因和結果賦一個標識符。
2)分析程序規格說明書中的語義,確定原因與原因,原因與結果之間的關系,畫出因果圖。
3)由於語法環境的限制,一些原因與原因之間,原因與結果之間的組合不能出現。對於這些特殊情況,在因果圖中用一些記號標明約束或限制條件。
4)將因果圖轉化為判定表。
5)根據判定表的沒一列設計測試用例。
當然,若能直接得到判定表,可以直接根據判定表設計測試用例。
因果圖法設計測試用例舉例:
有一個單價為五角錢的飲料自動售貨機軟件,對其采用因果圖方法設計測試用例。需求如下:
1)若售貨機沒有零錢找,則一個現實“零錢找完”的紅燈亮,以提示顧客在此情況下不要投入1元錢,否則此紅燈不亮。
2)顧客投入5角硬幣,然后按下“橙汁”或“啤酒”按鈕,則相應的飲料被送出。
3)顧客投入1元硬幣並按下“橙汁”或“啤酒”按鈕后,若售貨機沒有零錢找,則顯示“零錢找完”的紅燈亮,1元硬幣被退出,且無飲料送出;若有零錢找,則五角硬幣被退出且飲料被送出。
列出原因
編號 | 原因 |
1 | 售貨機有零錢找 |
2 | 投入1元硬幣 |
3 | 投入五角硬幣 |
4 | 按“橙汁”按鈕 |
5 | 按“啤酒”按鈕 |
列出結果:
編號 | 結果 |
21 | 售貨機“零錢找完”燈亮 |
22 | 退還1元硬幣 |
23 | 退還五角硬幣 |
24 | 送出橙汁飲料 |
25 | 送出啤酒飲料 |
根據需求說明設置中間節點:
序號 | 中間節點 |
11 | 投入1元硬幣且按飲料按鈕 |
12 | 按“橙汁”或“啤酒”按鈕 |
13 | 退還五角零錢且售貨機有零錢找 |
14 | 錢已付清 |
根據列出的原因、結果、中間節點花出因果圖:
2、3號原因不能同時出現,4、5號原因不能同時出現。
將因果圖轉換為判斷表:
在構成的判定表中,個原因、中間節點、結果的取值為0表示其代表的狀態不出現;為1表示狀態出現。
中間節點與結果沒有值為因違反約束不會出現的情況,16、32列沒有做任何操作。8、12、24、28列不符合常理(投幣卻沒有選擇飲料)為無效列。
根據剩下的列設計測試用例。
用例編號 | 有無零錢 | 投入金額 | 飲料 | 預期結果 |
C01 | 有 | 1元 | 橙汁 | 退回五角、送出橙汁 |
C02 | 有 | 1元 | 啤酒 | 退回五角、送出啤酒 |
C03 | 有 | 5角 | 橙汁 | 送出橙汁 |
C04 | 有 | 5角 | 啤酒 | 送出啤酒 |
C05 | 無 | 1元 | 橙汁 | 燈亮、退出1元 |
C06 | 無 | 1元 | 啤酒 | 燈亮,退出1元 |
C07 | 無 | 5角 | 橙汁 | 燈亮,送出橙汁 |
C08 | 無 | 5角 | 啤酒 | 燈亮、送出啤酒 |
這個例子中,事實上在分析問題時進行了一些簡化,主要有一下幾點:
1)判定表中8,12,24,28列不符合常理(投幣卻沒選飲料),但卻是可能發生的。可以考慮對需求做一下完善:若投幣N秒后仍沒有選擇飲料,售貨機上“請選擇飲料”燈亮。進而根據需求規格說明改進因果圖和判斷表。
2)判斷表中14,15,30,31列表示只選擇飲料卻沒投幣。可以對需求做以下完善:只選擇飲料卻沒有投幣時,自動售貨機上“請投幣”的等亮。進而根據需求規格說明改進因果圖和判斷表。
3)26、27表示在自動售貨機沒零錢找的情況下投入五角錢,此時自動售貨機進入有零錢找狀態,由於需求說明沒有考慮這一特殊狀態,故判定表中第26、27列的21號結果沒有從1變成0實際上是不正確的。在需求規格說明書中應對此種情況加以考慮,進而改進因果圖和判斷表。
4)6、7列對應的是自動售貨機在有零錢的情況下找了5角錢,此刻自動售貨機有可能進入無零錢找的狀態,由於需求說明沒有考慮這一特殊狀態,故判定表中第6、7列的21號結果沒有從1變成0實際上是不一定正確的。在需求規格說明書中應對此種情況加以考慮,進而改進因果圖和判斷表。
金否違反