本節書摘來自異步社群《軟體測試技術實戰:設計、工具及管理》一書中的第2章,第2.2節運用決策表設計測試用例,作者顧翔,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
2.2 運用決策表設計測試用例
決策表方法是一種很好的方法,它可以識别含有邏輯條件的系統需求,還可以将内部系統設計文檔化。這種方法可以用來記錄一個系統要實施的複雜的業務規則。建立決策表時,要分析規格說明,并識别系統的條件和動作。輸入條件和動作通常以“真”或“假”(布爾變量)的方式表述。決策表包含了觸發條件,通常還有各種輸入條件“真”或“假”的組合以及各條件組合相應的輸出動作。決策表的每一列對應了一個業務規則,該規則定義了各種條件的一個特定組合,以及這個規則相關聯的執行動作。決策表測試的常見覆寫标準是每列至少對應一個測試用例,該測試用例通常覆寫觸發條件的所有組合。
決策表測試的優點是可以生成測試條件的各種組合,而這些組合利用其他方法可能無法被測試到。它适用于當軟體的行為由一些邏輯決策決定的情況。
2.2.1 四邊形類型判斷系統
案例2-7:四邊形類型判斷系統。
下面來看一個例子。a、b、c、d是四邊形的4條邊,通過平行關系與是否相等來判斷四邊形的類型,四邊形如圖2-3所示。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicWZwpmL1MmYyQDMygDZlN2YxAjNiVjZjljM4YmZ0EjZwUmZkZ2NkRDZ3kTZ58CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpeg)
a、b、c、d為四邊形的4條邊,可以獲得如下條件。
c1:a//c(c1=t表示a平行于c;c1=f表示a不平行于c)。
c2:b//d(c2=t表示b平行于d;c2=f表示b不平行于d)。
c3:a的長度與b是否相等。
c4:b的長度與d是否相等。
四邊形類型有。
a1:平行四邊形。
a2:非等腰梯形。
a3:等腰梯形。
a4:普通四邊形。
a5:不存在。
根據如上描述,做出決策表(由于條件有4個,是以一共有24=16個組合),見表2-4。
第一列:a不平行于c,b不平行于d,a不等于c,b不等于d,判定為普通四邊形。
第二列:a不平行于c,b不平行于d,a不等于c,b等于d,判定為普通四邊形。
第三列:a不平行于c,b不平行于d,a等于c,b不等于d,判定為普通四邊形。
第四列:a不平行于c,b不平行于d,a等于c,b等于d,判定這種四邊形不存在。
第五列:a不平行于c,b平行于d,a不等于c,b等于d,判定這種四邊形為非等腰梯形。
以此類推,可以得到共十六列結果,見表2-4。
根據表2-4,下面來做一些簡化。
根據列1和2,隻要c1=f、c2=f、c3=f,就可以判斷為a4。
根據列6和8,隻要c1=f、c2=t、c4=t,就可以判斷為a5。
根據列4和12,隻要c2=f、c3=t、c4=t,就可以判斷為a5。
根據列11和15,隻要c1=t、c3=t、c4=f,就可以判斷為a5。
根據列13和14,隻要c1=t、c2=t、c3=f,就可以判斷為a5。
經過簡化後,得到表2-5。
這樣,16個測試用例就被簡化成12個,于是測試用例可以設計成表2-6。
2.2.2 使用者登入系統
案例2-8:使用者登入系統。
下面再來看一下使用者登入系統的測試用例應該如何設計。同樣,也可以用決策表的方法。使用者登入系統一般包括使用者名、密碼和驗證碼。隻要使用者名、密碼錯誤,系統就會報出錯資訊:“使用者名或者密碼錯誤”;如果使用者名、密碼都正确,驗證碼錯誤,系統報出錯資訊:“驗證碼錯誤”;使用者名、密碼和驗證碼都正确,正常進入系統。下面就可以考慮如何用決策表來設計測試用例。
條件如下。
c1:正确的使用者名。
c2:正确的密碼。
c3:正确的驗證碼。
動作如下。
a1:使用者名或密碼錯誤。
a2:驗證碼錯誤。
a3:進入系統。
如上所述,可以做出登入系統的決策表設計(系統有3個條件,是以有23=8個組合),見表2-7。
第一列:使用者名錯誤,密碼錯誤,驗證碼錯誤,得到提示資訊“使用者名或密碼錯誤”。
第二列:使用者名錯誤,密碼錯誤,驗證碼正确,得到提示資訊“使用者名或密碼錯誤”。
第三列:使用者名錯誤,密碼正确,驗證碼錯誤,得到提示資訊“使用者名或密碼錯誤”。
第四列:使用者名錯誤,密碼正确,驗證碼正确,得到提示資訊“使用者名或密碼錯誤”。
第五列:使用者名正确,密碼錯誤,驗證碼錯誤,得到提示資訊“使用者名或密碼錯誤”。
第六列:使用者名正确,密碼錯誤,驗證碼正确,得到提示資訊“使用者名或密碼錯誤”。
第七列:使用者名正确,密碼正确,驗證碼錯誤,得到提示資訊“驗證碼錯誤”。
第八列:使用者名正确,密碼正确,驗證碼正确,進入系統。
根據表2-7,下面來做些簡化。
(1)根據列1、2、3、4,隻要c1=f,就可以執行動作a1。
(2)根據列1、2、5、6,隻要c2=f,就可以執行動作a1。
簡化後,得到表2-8。
這樣,8個測試用例就簡化成4個。于是,測試用例可以這樣設計:假設使用者名:kenny,密碼:khnygh,驗證碼:243546。登入系統測試用例見表2-9。
2.2.3 飛機票定價系統
案例2-9:飛機票定價系統。
下面是一個飛機票定價系統的例子,需求如下。
(1)乘客可以免費托運重量不超過30kg(含30kg)的行李。
(2)假如行李超過30kg,其收費标準為。
頭等艙國内乘客:超重部分每千克收費4元。
其他艙國内乘客:超重部分每千克收費6元。
外國乘客:超重部分每千克比國内乘客多1倍。
殘疾乘客:為正常價格的半價。
(3)行李重量超出部分,不滿1kg的按照1kg計算。
經過分析,條件如下。
c1:國内乘客。
c2:超重遊客。
c3:頭等艙乘客。
c4:殘疾乘客。
金額
a1:免費。
a2:2元。
a3:3元。
a4:4元。
a5:6元。
a6:8元。
a7:12元。
根據如上描述做出決策表(由于條件有4個,是以一共有24=16個組合)。
第一列:攜帶行李不超過30kg,普通艙,非殘疾國外乘客:免費。
第二列:攜帶行李不超過30kg,普通艙,殘疾國外乘客:免費。
第三列:攜帶行李不超過30kg,頭等艙,非殘疾國外乘客:免費。
第四列:攜帶行李不超過30kg,頭等艙,殘疾國外乘客:免費。
第五列:攜帶行李超過30kg,普通艙,非殘疾國外乘客:8元。
第六列:攜帶行李超過30kg,普通艙,殘疾國外乘客:4元。
第七列:攜帶行李超過30kg,頭等艙,非殘疾國外乘客:12元。
第八列:攜帶行李超過30kg,頭等艙,殘疾國外乘客:6元。
以此類推,可以得到所有16列的結果,見表2-10。
根據表2-10,簡化如下。
(1)根據列1、2,隻要c1=f、c2=f、c3=f,就可以執行動作a1。
(2)根據列3、4,隻要c1=f、c2=f、c3=t,就可以執行動作a1。
(3)根據列9、10,隻要c1=t、c2=f、c3=f,就可以執行動作a1。
(4)根據列11、12,隻要c1=t、c2=f、c3=t,就可以執行動作a1。
于是得到表2-11。
根據表2-11,還可以進一步調整。
根據列1、2、7、8,隻要c2=f,就可以執行動作a1,見表2-12。
最後,16個測試用例就簡化為9個測試用例了。可以設計表2-13所示的測試用例。