等價類分法 新解(2)

發表于:2015-07-08來源:uml.org.cn作者:不詳點擊數: 標簽:等價類分法
3、 理想等價類 這種等價類是嚴格按照等價類的定義來劃分的,即劃分的各個等價類中,每個等價類都滿足每個可測數據對揭示所有可能的缺陷都是等價的

  3、 理想等價類

  這種等價類是嚴格按照等價類的定義來劃分的,即劃分的各個等價類中,每個等價類都滿足每個可測數據對揭示所有可能的缺陷都是等價的,并且劃分的各個等價類中各自任意取一個可測數據做為測試數據可以將全部的缺陷都揭示出來。

  理想等價類在實際情況中是很罕見的,除非只有很少的一兩種可能的出錯情況,否則很難劃分成對揭示所有可能缺陷都等價的子集。所以在實際使用時,沒有必要去尋找理想等價類,否則徒然浪費時間,一般采用強等價類或弱等價類進行測試就足夠了。

  1.3 等價類的判定方法

  當將一個輸入域進行等價類劃分后,劃分出來的子集是否是等價的基本上靠經驗判斷,這給使用等價類分法帶來很大的難度,憑經驗劃分出來的等價類也許并不是真的等價類,如何才能確定劃分的類是等價類呢?

  按照前面講過的弱等價類與強等價類的定義,要知道劃分的子集是否等價類先要知道又那些種類的可能缺陷,然后將劃分的等價類對照可能的缺陷進行驗證看是否能揭示出那些可能發生的缺陷。

  這種判定方法的缺點是必須先知道會發生那些可能的缺陷,實際情況中往往并不知道所有可能的缺陷,那么在實際情況中如何采取一些簡單方法來判定一個子集是否是等價類呢?

  當一個子集的處理過程與輸出完全一致時,基本上可以認為是等價類,處理過程是否相同很容易從需求和設計中得出。但是現實情況中往往同一個等價類中的不同數據對應的輸出結果并不相同,所以這種方法并不能對所有的情況都適用。

  其實沒有什么特別好的辦法可以用來判斷一個子集中的任一數據對揭露程序中的缺陷都是等價的,除非將所有數據測試一遍。但是有一些條件可以協助判斷出某個子集不是等價類。

  1、路徑判定法

  最容易判定一個子集是否是等價類的方法就是路徑判定法,路徑判定法的基本思想是:對于子集中的任一數據,如果執行路徑并不完全相同,那么這個子集不是等價類。

  需要注意的是,路徑判定法的反命題并不成立,即不能由執行路徑相同就推斷出子集中的數據是等價類。因為執行路徑相同情況下得到的結果不一定相同,舉例如下:

  int mul(int a)

  {

  return (a*10000);

  }

  在mul()函數中,不論a輸入多少,執行路徑都只有一條,但是當a超過一定大小時,會出現整數乘法溢出,顯然不能將a的任意取值都作為等價類。

  路徑相同之所以不能認為是等價類的根本原因在于程序設計中本身可能存在缺陷和遺漏,設計或編碼后的程序中的路徑本身就可能不正確,測試用例設計時不能假定程序中的路徑一定是正確的。

  2、概率判定法

  概率判定法是通過計算等價子集中的數據揭示某個缺陷的概率來進行判斷的方法。如果在一個等價子集中,所有數據的揭示缺陷的概率不相同并有一定差距,那么可以認為不是等價類。

  這個判定法的使用并不是說事先需要知道所有可能發生的缺陷,它只需要找到一個缺陷來證明在這種缺陷情況下,子集中的數據在揭示這個缺陷方面的概率是不相同的,那么就可以認為在這種缺陷條件下不是等價類,至少可以認為不是強等價類。

  比如前面講的x>10的劃分,{0~10}這個集合中,在寫成x>=10的情況下,10和子集中其他數據揭示缺陷的概率是不同的,0~9都不能發現缺陷,測試會通過,也就是說揭示出這個缺陷的概率為0,而 10則能揭示出這個缺陷,所以它們不能劃分到同一個等價類里面。

原文轉自:http://www.uml.org.cn/Test/201205143.asp

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97