[ 黑盒測試方法 ] 等價類划分法


  等價類划分,指的是一種典型的、重要的黑盒測試方法。其就是解決如何選擇適當的數據子集來代表整個數據集的問題,通過降低測試的數目去實現合理的覆蓋,以此來發現更多的軟件缺陷。

概述

  等價類划分法將程序所有可能的輸入數據(有效的和無效的)划分成若干個等價類。然后從每個部分中選取具有代表性的數據當做測試用例進行合理的分類,測試用例由有效等價類和無效等價類的代表組成,從而保證測試用例具有完整性和代表性。等價類划分法是一種系統性的確定要輸入的測試條件的方法。等價類划分不僅可以用來確定測試用例中的數據的輸入輸出的精確取值范圍,也可以用來准備中間值、狀態和與時間相關的數據以及接口參數等。

等價類相關基本概念  

  有效等價類:指對於程序規格說明來說,是合理的、有意義的輸入數據構成的集合。利用有效等價類可以檢驗程序是否實現了規格說明預先規定的功能和性能。有效等價類可以是一個,也可以是多個,根據系統的輸入域划分若干部分,然后從每個部分中選取少數有代表性數據當做數據測試的測試用例,等價類是輸入域的集合。

  無效等價類:和有效等價類相反,無效等價類是指對於軟件規格說明而言,沒有意義的、不合理的輸入數據集合。利用無效等價類,可以找出程序異常說明情況,檢查程序的功能和性能的實現是否有不符合規格說明要求的地方。

  弱一般等價類:  基於單缺陷假設,只針對有效等價類中進行用例設計,不針對無效等價類進行用例設計。也就是用例僅覆蓋正常場景。這里描述的所謂的“弱”主就是指基於單缺陷假設,“一般”是指僅考慮有效等價類的覆蓋,也就是正常場景。

  強一般等價類:基於多缺陷假設,覆蓋每個有效等價類進行用例設計。不針對無效等價類進行用例設計。所謂的“強”指的是基於多缺陷假設,也就是1個用例中考慮多個等價類中取值的組合。

  弱健壯等價類:基於單缺陷假設的健壯性測試,同時考慮覆蓋有效等價類和無效等價類。所謂的“健壯”是指同時覆蓋了有效等價類,也就是異常場景。一個程序只有同時能夠處理各種異常的輸入,才能稱之為程序具有健壯性。

  強健壯等價類:基於多缺陷假設的健壯性測試。同時考慮覆蓋有效等價類和無效等價類。

  這里描述的概念后續都會通過實際案例進行講解,如果不能馬上理解,可以繼續先往下看,最后再來看這些基本概念,可能就更容易明白。

等價類划分方法和原則

  划分等價類最重要的是:集合的划分,划分為一組互不相交的子集,而子集的並集是一個集合。下面根據不同場景舉例等價類划分的方法和原則。

(1)在輸入條件規定的取值范圍或值的個數的情況下,可以確定一個有效等價類和兩個無效等價類。假設輸入學生成績范圍為[0,100],則有效等價類為[0,100],無效等價類為成績<0和>100。

(2)在規定了輸入數據的一組值中(假定有n個值),並且程序要對每個輸入值分別處理的情況下,可以確定n個有效等價類和一個無效等價類。假設程序選項輸入為1、2、3三個選項。則有效等價類1、2、3,無效等價類為非整數值1/2/3。

(3)在規定輸入數據必須遵守的規則的情況下,可以確定一個有效等價類(符合規則)和若干個無效等價類(從不同角度違反規則)。假設程序規定輸入為非0的正整數。應該充分考慮是否可以拆分為單一的子規則,然后得到從不同角度違反規則的無效等價類。該例子起碼可以拆分為非0、數字、正數、整數4個子規則。至少每一個子規則對應1個無效等價類。即0、字符串、負數、小數,設置可以挖掘出輸入為空的隱含等價類。

(4)在輸入條件規定了輸入值的集合或規定了“必須如何”的條件下,可以確定一個有效等價類和一個無效等價類。假設程序設定連續輸入密碼錯誤次數最多為3次。則有效等價類為小於等於3次,無效等價類為大於3次。

(5)在確定已划分的等價類中各元素在程序處理中的方式不同的情況下,則應將該等價類進一步地划分為更小的等價類。假設程序為測試輸入日期的有效性,初步有效等價類是Month=[1,12],Day=[1,31],可是考慮到閏年、閏月、長月、短月等。需要進一步細分,當然這還涉及到年月日組合的問題。

等價類表轉換測試用例方法

(1)按照輸入條件、有效等價類、無效等價類、 建立等價類表,列出所有划分出的等價類。

(2)為每一個等價類規定一個唯一的編號。

(3)設計一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價類,重復這一步,直到所有的有效等價類都被覆蓋為止。

(4)設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重復這一步,直到所有的無效等價類都被覆蓋為止。

 等價類划分實例

1、某日期檢查程序,要求用戶輸入以年月表示的日期。假設日期限定在1990年1月~2049年12月,並規定日期由6位數字字符組成,前4位表示年,后2位表示月。現用等價類划分法設計測試用例,來測試程序的"日期檢查功能"。(不考慮2月的問題)

(1)閱讀程序規格說明書,識別影響程序輸出結果的因子。這里包括輸入類型和長度(6位數字字符)、輸入組成(前4位表示年、后2位表示月)。

(2)針對不同的因子划分出有效等價類和無效等價類。

    A、輸入日期類型和長度。有效等價類:6位數字字符,無效等價類:有非數字字符、少於6位數字字符、多於6位數字字符。

    B、年份范圍。有效等價類:[1990,2049],無效等價類:小於1990,大於2049。

    C、月份范圍。有效等價類:[01,12],無效等價類:等於00,大於12

 依次對不同因子的有效等價類和無效等價類進行編號,獲得等價類表如下所示:

輸入等價類

有效等價類

無效等價類

日期的類型及長度

①6位數字字符

②有非數字字符

③少於6位數字字符

④多於6位數字字符

年份范圍

⑤在1990~2049之間

⑥小於1990

⑦大於2049

月份范圍

⑧在01~12之間

⑨等於00

⑩大於12

(3)設計測試用例覆蓋有效等價類。每個用例盡可能多地覆蓋尚未被覆蓋的有效等價類。步驟(2)中的等價類表中列出了3個有效等價類,編號分別為①、⑤、⑧,設計的測試用例如下:

    TestCase1:輸入測試數據200211,輸出日期合法。覆蓋的有效等價類為:①、⑤、⑧  <-- 強弱一般等價類就只有這1個用例。僅覆蓋有效等價類。

(4)設計測試用例覆蓋無效等價類,每個用例僅覆蓋一個尚未被覆蓋的無效等價類。設計結果如下:

  TestCase2:輸入測試數據95June,輸出日期不合法。覆蓋無效等價類:② 有非數字字符

  TestCase3:輸入測試數據20036,輸出日期不合法。覆蓋無效等價類:③ 少於6位數字字符

  TestCase4:輸入測試數據2001006,輸出日期不合法。覆蓋無效等價類: ④ 多於6位數字字符

  TestCase5:輸入測試數據198912,輸出日期不合法。覆蓋無效等價類:⑥ 年份小於1990

  TestCase6:輸入測試數據205401,輸出日期不合法。覆蓋無效等價類:⑦ 年份大於2049

  TestCase7:輸入測試數據201800,輸出日期不合法。覆蓋無效等價類: ⑨  月份等於00

  TestCase8:輸入測試數據200113,輸出日期不合法。覆蓋無效等價類:⑩ 月份大於12

  這里屬於弱健壯等價類測試,僅考慮單缺陷假設,不做多缺陷假設。如果是強健壯等價類測試用例設計,還包括如下:

  TestCase9:輸入測試數據2June,輸出日期不合法。覆蓋無效等價類:⑩ ③ 覆蓋 少於6位並且包含非數字字符

  TestCase10:輸入測試數據200June,輸出日期不合法。覆蓋無效等價類:⑩ ④ 覆蓋 大於6位並且包含非數字字符

  TestCase11:輸入測試數據1989Je,輸出日期不合法。覆蓋無效等價類:⑩ ④ 覆蓋 年份小於1990並且包含非數字字符

  TestCaseN: ...

小結

  等價類划分方法的使用不僅要針對輸入域進行等價類划分,也可以針對輸出域進行等價類划分,這一點在使用過程中一定不要忘記了。此外,如果考慮將端到端場景進行細分,等價類划分方法同時也適用於中間過程的輸入、輸出域進行划分。比如輸出三角形類型程序的判定,用例輸出一定要覆蓋到輸出三角形類型中的等腰、等邊、不等邊三角形以及非三角形4種類型。

參考資料

1、等價類划分_百度百科

2、《黑盒測試用例設計方法》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM