如果程序的輸入條件和動作之間的邏輯關系明確,則可直接使用判定表驅動法。但是,如果輸入條件和動作關系不明確,則應當使用因果圖法
1.因果圖法原理:
因果圖是一種形式化的圖形語言,通過圖形記號將自然語言規格說明轉變成形式化語言規格說明,能夠嚴格地表達程序輸入和輸出的邏輯關系。
(1)因果圖表達形式
- 恆等:如果原因出現,則結果出現,如果願意不出現,則結果也不出現
- 非(~):如果原因出現,則結果不出現;如果原因不出現,則結果出現
- 或(∨):如果幾個原因中有一個出現,則結果出現;如果幾個原因都不出現,則結果不出現
- 與(∧):如果幾個原因都出現,則結果出現;如果幾個原因有一個不出現,則結果不出現
在實際問題中,輸入條件之間、輸出條件之間往往存在着某些依賴關系,我們稱之為約束。
- E(互斥):表示C1和C2兩個原因不會同時成立,兩個原因中最多可能有一個成立
- I(包含):表示C1、C2、C3三個原因中至少有一個必須成立
- O(唯一):表示C1、C2中必須有且僅有一個成立
- R(要求):表示當C1出現時,C2也必須出現,即C1時1時,C2也必須時1
- M(強制):表示當結果E1是1時,結果E2必須時0
(2)利用因果圖設計測試用例的步驟
- 分析軟件的規格說明,確定哪些是原因(即輸入條件或輸出條件的等價類),哪些是結果(輸出條件),給每一個原因和結果賦標識符
- 分析軟件規格說明中的語義信息,確定原因和結果之間、原因和原因之間的對應邏輯關系,然后根據這些關系畫出因果圖
- 在因果圖上標明約束。由於語法或環境的限制,有些原因和結果的組合情況是不可能出現的。為了表明這些特殊情況,在因果圖上通過標准的符號標明約束條件
- 將因果圖轉換為判定表
- 根據判定表的每一條規則設計測試用例
2.因果圖法實例
軟件規格說明要求如下:第一列字符必須是A或B,第二列字符必須是數字,在此情況下進行文件的修改。但是如果第一列字符不正確,則給出信息L;如果第二列字符不是數字,則給出信息M
根據以上規格說明,可分析如下原因和結果
原因:1——第一列字符是A
2——第一列字符是B
3——第二列字符是數字
結果:21——修改信息
22——給出信息L
23——給出信息M
圖中,11是中間原因,因為原因1和原因2不可能同時為1,即第一個地府不可能既是A又是B,因此在因果圖上對他們施加E約束。
由上因果圖可得如下所示判定表,由於原因1和原因2互斥,因此規則1和規則2無效,只需要設計剩下的6個規則所對應的測試用例。
序號 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | |
2 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
3 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
中間原因 | 11 | 1 | 1 | 1 | 1 | 0 | 0 | ||
結果 | 22 | 0 | 0 | 0 | 0 | 1 | 1 | ||
21 | 1 | 0 | 1 | 0 | 0 | 0 | |||
23 | 0 | 1 | 0 | 1 | 0 | 1 | |||
測試用例 | A2 | AK | B2 | BD | F4 | UR | |||
A6 | A# | B7 | B? | S9 | W! |
3.因果圖法的優點與局限性
優點:
- 因果圖法借助圖形,能夠直觀地分析和表達輸入的各種組合關系、約束關系和每種組合條件下的輸出結果
- 采用因果圖法不僅可以發現輸入和輸出中的錯誤,而且能夠發現規格說明中存在的不完整性和二義性問題
局限性:程序輸入與輸出之間的因果關系有時候難以從規格說明中直接得到。當輸入條件很多時,測試用例數量會很大,會造成測試工作量大和用例不便於維護的問題,需要根據實際情況盡量精簡輸入條件的個數