判定表是分析和表達多邏輯條件下執行不同操作的工具。它能夠將復雜的問題按照各種可能的情況全部列舉出來。因此,利用判定表能夠設計出完整的測試用例集合。在一些數據處理問題當中,某些操作的實施依賴於多個邏輯條件的組合,即:針對不同邏輯條件的組合值,分別執行不同的操作。判定表很適合於處理這類問題。另外,判定表通常與因果圖法結合使用。
判定表的組成
判定表通常由四個部分組成如下圖所示。

(1)條件樁(Condition Stub):列出問題的所有條件。通常認為列出的條件的次序無關緊要。
(2)動作樁(Action Stub):列出問題規定可能采取的操作。這些操作的排列順序沒有約束。
(3)條件項(Condition Entry):列出針對它左列條件的取值。在所有可能情況下的真假值。
(4)動作項(Action Entry):列出在條件項的各種取值情況下應該采取的動作。
(5)規則:任何一個條件組合的特定取值及其相應要執行的操作稱為規則。在判定表中貫穿條件項和動作項的一列就是一條規則。顯然,判定表中列出多少組條件取值,也就有多少條規則,既條件項和動作項有多少列。注意化簡,即規則合並有兩條或多條規則具有相同的動作,並且其條件項之間存在着極為相似的關系。
判定表建立方法
(1)確定規則的個數。假如有n個條件,每個條件有兩個取值(0,1),故有2的n次方種規則。
(2)列出所有的條件樁和動作樁。
(3)填入條件項。
(4)填入動作項。制定初始判定表。
(5)簡化。合並相似規則或者相同動作。
判定表使用實例
1、需求描述:”……對功率大於50馬力的機器、維修記錄不全或已運行10年以上的機器,應給予優先的維修處理……” 。這里假定,“維修記錄不全”和“優先維修處理”均已在別處有更嚴格的定義 。請建立判定表。
(1)確定規則的個數。規則個數的取值為2的n次方,n為條件個數。需求描述中有有3個條件(功率大於50馬力、維修記錄不全、運行10年以上),每個條件有兩個取值,故應有2的3次方,共8種規則。
(2)列出所有的條件樁和動作樁。

(3)填入條件項。可以從第1列開始次序減去1。按照二進制計算方法。如7(111)、6(110)、...、0(000)。
(4)填入動作樁和動作頂。這樣便得到形如圖的初始判定表。
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
| 條件 |
功率大於50馬力嗎? |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
| 維修記錄不全嗎? |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
|
| 運行超過10年嗎? |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
|
| 動作 |
進行優先處理 |
1 |
1 |
1 |
|
1 |
|
1 |
|
| 作其他處理 |
|
|
|
0 |
|
0 |
|
0 |
|
(5)化簡,合並相似規則后得到圖。
| 1 |
2 |
3 |
4 |
5 |
||
| 條件 |
功率大於50馬力嗎? |
1 |
1 |
1 |
0 |
0 |
| 維修記錄不全嗎? |
1 |
0 |
0 |
- |
- |
|
| 運行超過10年嗎? |
- |
1 |
0 |
1 |
0 |
|
| 動作 |
進行優先處理 |
1 |
1 |
|
1 |
|
| 作其他處理 |
|
|
1 |
|
1 |
|
適合使用判定表的場景
B. Beizer 指出了適合使用判定表設計測試用例的條件:
(1)規格說明以判定表形式給出,或很容易轉換成判定表。
(2)條件的排列順序不會也不影響執行哪些操作。
(3)規則的排列順序不會也不影響執行哪些操作。
(4)每當某一規則的條件已經滿足,並確定要執行的操作后,不必檢驗別的規則。
(5)如果某一規則得到滿足要執行多個操作,這些操作的執行順序無關緊要。
B. Beizer提出這5個必要條件的目的是為了使操作的執行完全依賴於條件的組合。其實對於某些不滿足這幾條的判定表,同樣可以使用判定表設計測試用例,只不過還需要增加其它的測試用例。
判定表的優點和缺點
優點:它能把復雜的問題按各種可能的情況一一列舉出來,簡明而易於理解,也可以避免遺漏。
缺點:不能表達重復執行的動作,例如循環結構。
參考資料
2、《黑盒測試用例設計方法》
