等價類分法 新解

發表于:2015-07-08來源:uml.org.cn作者:不詳點擊數: 標簽:等價類分法
等價類分法是將測試空間劃分成若干個子集,并且滿足每個子集中的任一數據對揭露程序中的缺陷都是等價的,這些子集就叫做等價類或者叫等價子集。

  等價類分法

  1.1 等價類分法的基本概念

  等價類分法是將測試空間劃分成若干個子集,并且滿足每個子集中的任一數據對揭露程序中的缺陷都是等價的,這些子集就叫做等價類或者叫等價子集。

  比如一個程序的輸入數據滿足 0

  1 ~99中的任一數據和其他數據都是等價的,比如使用了2來進行測試,那么可以假定數據2測試通過的話,1~99中的其他數據也能測試通過。

  等價類分法可以用來對一些不能窮舉的集合進行合理分類,從各個等價類中選出有代表性的數據進行測試,從而保證設計出來的設計用例具有一定的代表性和一定范圍內的完整性,有效地縮減測試用例的數量。

  等價類實際上是符合測試空間劃分原則的一種特殊劃分形式,即劃分完后的子集里的可測數據是等價的,而測試空間劃分原則則是要求里面有一個可測數據測試通過能夠代表其他測試數據在滿足選取概率條件下也都可以通過。等價類選取測試數據時可以選取等價類中的任意數據作為測試數據,而測試空間劃分原則劃分的子集一般是選擇指定的數據作為測試數據,如果按測試空間劃分原則劃分后的子集剛好成為了等價類才可以選擇里面的任一數據作為測試數據。

  1.2 等價類的幾種類型

  在現實情況中,由于缺陷的可能情況非常多,一個子集中的數據對某種缺陷是等價的,但對另外一種缺陷可能又是不等價的。所以把等價類分為弱等價類、強等價類、理想等價類三種類型。

  1、弱等價類

  弱等價類是考慮某個單一缺陷情況下的等價情況,子集里所有數據在這種缺陷假設下是等價的,并且劃分成的幾個等價類能夠覆蓋整個測試空間的單一缺陷。比如以下一段程序:

  void Func(unsigned int x)

  {

  if ( x > 10 )

  {

  Func1();

  }

  else

  {

  Func2();

  }

  }

  我們可以將數據劃分為兩個等價類,0~10為1個等價類,大于 10的數據為1個等價類,在考慮“>”號誤寫成“<”號這種缺陷的情況下,這兩個等價集中的數據都是等價的,比如0~10這個等價類中,使用 0或使用10來進行測試都能發現缺陷。這兩個等價類中各自抽取一個測試數據進行測試,都能代表其他數據揭示出“>”號誤寫成“<”號這種缺陷來,因此整個測試空間都被覆蓋了。

  2、 強等價類

  強等價類是在多個缺陷假設前提下,各個等價類中的可測數據在單個或多個缺陷假設下是等價的,并且劃分的各個等價子集中各自取一個測試數據可以覆蓋整個測試空間的多個缺陷情況。

  再考慮前面弱等價類中的例子程序,出錯的可能性有那些呢?除了大于號會錯寫成小于號外,實際上還有可能寫成大于等于號,10有可能寫成1或100等大于10或小于10的數,為方便描述以錯寫成1和100為例,事實上錯誤成其他數和錯寫成1和100是等價的。這樣將各種可能出錯的情況組合起來,程序中的判斷條件有可能有以下12種情況:

  考慮0~10這個集合,在誤寫成中間一列條件中情況下,里面的數據并不等價,比如誤寫成x>1的情況下,使用1做測試和使用2做測試揭示缺陷是不同的,使用1做測試發現不了缺陷,但使用2測試就能發現缺陷。

  在判斷條件誤寫成x>=10條件下,10和0~9中的任一數據也不等價,并且使用大于10的數據也無法揭示出條件錯寫成x>=10這個缺陷,因此整個測試空間的多個缺陷無法被已劃分的兩個等價類來覆蓋,10需要單獨劃分成一個等價類。

  這樣將數據劃分成三個等價類{0~9}、{10}、{大于10的數據},再看看這三個等價類是否可以覆蓋表中各種出錯情況,顯然在x>100和x>=100兩種情況下,大于10的數據集合中的數據是不等價的,使用大于100的數據不能揭示出缺陷,但使用大于10小于100的數據卻能揭示出缺陷,因此需要對大于10的數據再劃分等價類,實際上只要將邊界值 {11}劃一個單獨的等價類就可以了。

  這樣總共得到四個等價類{0~9}、{10}、{11}、{大于 11的數據},從這四個等價類中各取一個數據的話就可以將以上列出的所有可能的缺陷情況都揭示出來,但是各個等價類并不是對所有缺陷都等價的,這種劃分的等價類由于可以將各種缺陷情況覆蓋到,把它叫叫做強等價類。

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

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