1. 程式人生 > >等價類劃分法測試用例設計舉例

等價類劃分法測試用例設計舉例

一、基本概念
等價類是指程式輸入域的子集。
等價類劃分(Equivalance Partitioning)測試的思想:將程式的輸入域劃分為若干個區域(等價類),並在每個等價類中選擇一個具有代表性的元素生成測試用例。該方法是常用的黑盒(Blackbox Testing)測試用例(Testcase)設計方法。
一)劃分等價類
1.有效等價類與無效等價類
等價類劃分可有兩種不同的情況:有效等價類和無效等價類。有效等價類是指對於程式的規格說明來說是合理的、有意義的輸入資料構成的集合,它能檢驗程式是否可以實現規格說明中所規定的功能需求

無效等價類是指對程式的規格說明是不合理的或無意義的輸入資料所構成的集合,它能檢驗程式在不符合規則的資料輸入下,是否會有異常;無效等價類至少應有一個,也可能有多個,視具體情況而定。因此,設計測試用例時,要同時考慮這兩種等價類。因為軟體不僅要能接收合理的資料,也要能經受意外的考驗,這樣的測試才能確保軟體具有更高的可靠性。
2.劃分等價類的標準
完備測試、避免冗餘。這就要求:集合(程式輸入域)應劃分為互不相交的一組子集,而這些子集的並集是整個集合(整個程式輸入域)。
3.等價類的劃分原則
(1) 若輸入條件規定了取值範圍或值的個數的情況下,可劃分為一個有效等價類和兩個無效等價類;
Eg.設定風控指標,其中權重設定範圍在[-1000,1000]
這裡寫圖片描述

(2) 若輸入條件為布林表示式,可劃分為一真一假的有效等價類與無效等價類;
Eg.設定產品資訊,其中產品份額必填
這裡寫圖片描述
(3) 若規定了輸入資料必須要遵循的原則,可劃分為一個有效等價類(符合規則)和若干個無效等價類;
Eg.系統的初始資金只可輸入數字
這裡寫圖片描述
(4)若只要求輸入資料符合某幾個原則,這時可能存在多個有效類和若干個無效等價類;
Eg. 交易使用者登入密碼只可輸入數字、字母及部分特殊符號,不能輸入單/雙引號及漢字
這裡寫圖片描述
注:每個有效等價類所對應的無效等價類的並集是不符合輸入原則的資料集合。
(5)若規定了輸入資料的一組值(假定n個),且程式對不同輸入值做不同處理,則可劃分為n個有效等價類(每個允許的輸入值為一個有效等價類)和一個無效等價類(所有不允許的輸入值的集合)。
Eg. 設定資金賬戶時,必須選擇是否檢查自成交
這裡寫圖片描述

Eg.輸入條件規定學歷可為:專科、本科、碩士、博士四種之一
這裡寫圖片描述
(6)在確知已劃分的等價類中各元素在程式中的處理方式不同的情況下,則應再將該等價類進一步的劃分為更小的等價類。
二)測試用例設計步驟
(1) 劃分等價類後,建立等價類表,併為每一個等價類規定一個唯一的編號;
(2) 設計一個測試用例,使其儘可能多地覆蓋尚未被覆蓋地有效等價類,重複這一步驟,直到所有的有效等價類都被覆蓋為止;
(3)設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重複這一步驟,直到所有的無效等價類都被覆蓋為止。(因為用單個測試用例覆蓋無效等價類,是因為某些特定的輸入錯誤會遮蔽或取代其他輸入錯誤檢查)

二、習題練習
一)三角形問題的等價測試用例
【問題描述】程式要求:輸入三個整數 a 、 b 、 c 分別作為三角形的三邊長度,通過程式判定所構成的三角形的型別;當三角形為一般三角形、等腰三角形或等邊三角形時,分別作 …處理 。
<問題分析>
(1) 輸入值域的顯/隱式要求:A 整數、B 三個、C 正數、D 兩邊之和大於第三邊、E 三邊均不相等、F 兩邊相等但不等於第三邊、G 三邊相等;(D~G由輸出值域的等價類隱性確定)
(2) 輸出值域的等價類:R1={不構成三角形}、R2={一般三角形}、R3={等腰三角形}、R4={等邊三角形};
<問題解答>
(1) 列出等價類表並編號
這裡寫圖片描述
(2) 設計覆蓋有效等價類的測試用例
這裡寫圖片描述
(3) 設計覆蓋無效等價類的測試用例
這裡寫圖片描述
二)NextDate函式的等價測試用例
【問題描述】NextDate 函式包含三個變數:month 、 day 和 year ,函式的輸出為輸入日期後一天的日期。 例如,輸入為 2006年3月 7日,則函式的輸出為 2006年3月8日 。要求輸入變數 month 、 day 和 year 均為整數值,並且滿足下列條件: ①1≤month≤12
②1≤day≤31
③1912≤year≤2050
<問題分析>該函式的主要特點是輸入變數之間的邏輯關係比較複雜,具體體現在:輸入域的複雜性;閏年規則。如,變數year和變數mouth取不同值時,對應的變數day會有不同的取值範圍,或1~30或1~31或1~28或1~29。
<問題解答>
(1)劃分法一
(1.1)劃分等價類
A. 有效等價類
M1={mouth:1≤mouth≤12}; D1={day:1≤day≤31};Y1={year:1912≤year≤2050}
B. 無效等價類
M2={mouth:mouth<1}、M2={mouth:mouth>12};
D2={day:day<1}、D3={day:day>31};
Y2={year:year<1912}、Y2={year:year>2050};
(1.2) 一般等價類測試
由於有效類的數量等於獨立變數的個數,因此只有弱一般等價類測試用例出現,且與強一般等價類測試用例相同。
這裡寫圖片描述
【注】“弱”是指含單缺陷假設(失效極少是由兩個或兩個以上的缺陷同時引起的),“強”是指含多缺陷假設(失效是由兩個或兩個以上的缺陷同時引起的);“一般”是指不考慮無效值。弱一般等價類測試用例通過使用一個測試用例中的每個有效等價類(區間)的代表值來實現(常以對稱方式來標識這些測試用例,且注意單邊假設作用);強一般等價類測試用例通過每個獨立變數的有效等價類的笛卡爾積來實現。
(1.3) 健壯等價類測試
(1.3.1) 弱健壯等價類測試
弱健壯等價類測試中的無效測試用例只含一個無效值,其他都是有效值,即含有單缺陷假設。【注:“弱”是指含單缺陷假設,“強”是指含多缺陷假設;“健壯”是指考慮無效值】
這裡寫圖片描述
(1.3.2) 強健壯等價類測試
強健壯等價類測試考慮了更多的無效值情況。強健壯等價類測試中的無效測試用例可以包含多個無效值,即含有多個缺陷假設。NextDate函式有三個變數,故相應地強健壯等價類測試用例可包含一個無效值、兩個無效值或三個無效值。【注:“強”是指含多缺陷假設,“強”是指含多缺陷假設;“健壯”是指考慮無效值】
這裡寫圖片描述
(2)劃分法二
顯然地,在用劃分法一測試NextDate函式時,既沒有考慮2月份的天數問題,又沒有考慮閏年的問題。因此,應作進一步地改善。
(2.1)劃分等價類
等價關係的要點是:等價類中的元素要被“同樣處理”,即要麼都在有效層次上進行,要麼都在無效層次上進行。因此,更詳細地有效等價類為:
√變數mouth:M1={mouth: mouth有30天}、M2={mouth: mouth有31天,除去12月}、M3={mouth: mouth是2月}、M4={mouth: mouth是12月};
√變數day:D1={day: 1≤day≤28}、D2={day: day=29}、D3={day: day=30}、D4={day: day=31};
√變數day:Y1={year: year是閏年}、Y2={year: year是平年};
(2.2) 一般等價類測試
A. 弱一般等價類測試
考慮到單邊假設,機械地以對稱方式來選擇對應類的有效輸入:
這裡寫圖片描述
B. 強一般等價類測試
從弱等價類測試到強等價類測試,不管是一般類還是健壯類,都做要獨立性假設,都要以等價類的笛卡爾積表示。
在本問題中,變數mouth等價類數量為4、變數day等價類數量為4、變數year等價類數量為2,故強一般等價類測試用例數量為4*4*2=32。
這裡寫圖片描述
(2.3) 健壯等價類測試
A. 弱健壯等價類測試

     B. 強健壯等價類測試

    **三)佣金問題的等價測試用例** 

待更新……