等價類劃分法 ( Equivalence Class Partitioning ; ECP )

Edited by Chloe, Esther, May (以字母排序)

等價類劃分法 ( ECP ) 是一種系統化的測試技術,可以幫助測試人員有系統地評估一項功能中每個輸入的參數和輸出的變數,通常用來設計黑箱和白箱測試。適用於檢驗顯露單一錯誤 (Single Fault Assumption;註1) 的情況。

本文將會針對 ECP 的定義、作法做介紹,最後舉例,讓各位更加瞭解。

一、ECP 定義

把所有可能的輸入域劃分成不同的子集,然後從每個子集中選取具有代表性的數據作為測試案例。

相較於餵給程式一些可能或是已知會出問題的變數,ECP 技術通常會需要較多的時間。但若運用得當,ECP 將能帶來許多好處:

(1) 有效降低測試數量,且提供我們有足夠的信心。

  • 讓我們知道在相同子集的其他變數或變數組合也會產生相同的結果。

(2) 我們可以從一個子集中「隨機」選取元素來測試,來增加測試資料範圍的廣度。

  • 因為每個子集中的每個元素都會產生相同的結果。

(3) 強迫測試人員對功能和變數資料執行更詳細的分析。

(4) 幫助測試人員找出可能被忽略的特殊案例。

(5) 清楚呈現哪些資料已經被測試過,以及他們的測試方式。

(6) 有系統性地提升測試成效,以降低風險。

(7) 降低重複、多餘的測試,以提升效率。

二、ECP 作法

ECP 將輸入、輸出資料分成 2 種類別:

(1) 有效類別資料

  • 有效類別資料指的是輸入之後,會得到正面 (Positive) 的結果,或是無錯誤發生的情況。

(2) 無效類別資料

  • 無效類別資料指的是輸入之後,會得到負面 (Negative) 的結果,或是有錯誤發生的情況。

每個類別內還能分解成多個子集,每個子集內的任一資料元素都是等價的,也就是說,其輸入之後產生的結果是相同的。

分解變數資料的關鍵是必須具備系統知識和領域知識。但需要避免以下兩種情況:

(1) 將變數資料分解得不夠細

  • 會降低 ECP 測試的基礎數量,並增加漏掉錯誤的可能性,而且容易出現假訊號 (false positives) 。

(2) 過度分析變數資料

  • 會增加重複測試的可能性,因而降低測試方法的整體效用。

三、將資料分解成不同子集的方法

根據 < The Art of Software Testing > 這本書,提供四種啓發 (Heuristic;註2) 的方法來將資料分解成不同子集:

(1) 範圍 (range)

  • 指的是數值範圍,以最小邊界值、最大邊界值來劃分區塊。

(2) 群組 (group)

  • 指的是相似變數的群組,只要是會以相同方式來處理的項目,就可以把它們歸類在同一群組裡。

(3) 唯一值 (unique)

  • 與其他類別中的資料,以不同方式處理。
    • 例:一年的月份中,二月份只有 28 或 29 天,跟其他月份的 30、31 天不一樣,則可將二月分視為「唯一值」。

(4) 特殊值 (specific)

  • 必須出現、或是不可出現的值。
    • 例:針對 e-mail address,"@" 是一個特殊字元,屬於一種特殊值。所以這個 “@" 不能出現在 e-mail 的帳戶名稱或網域名稱內。

註1:單一錯誤 (Single Fault Assumption) 指的是錯誤很少是由 2 個或 2 個以上的瑕疵所導致。

註2:啓發 (Heuristic) 指的是指引、原則或經驗法則,主要用在決策、疑難排解和問題解決。

四、案例:輸入三邊長( A、B、C ),判斷是否為「一般三角形」、「等腰三角形」、「正三角形」。

  • 符合三角形的條件為:任兩邊相加和大於第三邊

  • 符合等腰三角形的條件為:任兩邊相加和大於第三邊且任兩邊長度相等

  • 符合正三角形的條件為:任兩邊相加和大於第三邊且三邊長度相等

因此,我們可以歸類出以下 2 個分類:

*有效等價類:

1. 輸入 3 個正整數或正小數

2. 兩數之和大於第三數,如 A<B+C,B<C+A,C<A+B

3. 兩數相等,如 A=B 或 B=C 或 C=A

4. 三數相等,如 A=B=C

*無效等價類:

1. 空值 (null)

2. 0

3. 負整數

4. 非數字

5. 少於三個數

根據列出的有效等價類與無效等價類可列出像下圖:

之後再用列出的有效等價類與無效等價類列出測試案例,如下圖:

我們依照有效等價類與無效等價類列出 15 個 test cases,而由滿足的類型 (結果) 來篩選,第 2、3、4 個 test cases 會出現相同的結果 (不能構成三角形),因此我們可以從中隨機選取一個來測試,不用每一個都測,就可以達到測試效果,且能提升測試資料範圍的廣度。

透過實作 ECP,讓我們在分析變數資料時,能夠更清楚瞭解、分析變數資料的意義,對 SUT (system under testing) 更熟悉,提升測試人員素質。

參考文章:

(1) Equivalence partitioning (Wiki)

(2) 測試用例的設計方法(全)之一等價類劃分、邊界值分析

(3) 軟件測試學習筆記之等價類劃分

(4) 等價類劃分法_測試用例編寫練習題1(第二次更新:2012年07月26日)

(5) 測試用例設計白皮書--等價類劃分方法

(6) 企業筆試的試題—–三角形的測試用例設計

(7) 微軟軟體測試之道 Chapter 5 <功能測試技術>

廣告

One thought on “等價類劃分法 ( Equivalence Class Partitioning ; ECP )

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s