1. 程式人生 > >測試用例的設計方法_Study Notes

測試用例的設計方法_Study Notes

等價類劃分法

定義

是把所有可能的輸入資料,即程式的輸入域劃分成若干部分(子集),然後從每一個子集中選取少數具有代表性的資料作為測試用例。該方法是一種重要的,常用的黑盒測試用例設計方法。

劃分等價類

等價類是指某個輸入域的子集合。在該子集合中,各個輸入資料對於揭露程式中的錯誤都是等效的,併合理地假定:測試某等價類的代表值就等於對這一類其它值的測試,因此,可以把全部輸入資料合理劃分為若干等價類,在每一個等價類中取一個數據作為測試的輸入條件就可以用少量代表性的測試資料取得較好的測試結果。等價類劃分可有兩種不同的情況:有效等價類和無效等價類。

1)有效等價類
    是指對於程式的規格說明來說是合理的、有意義的輸入資料構成的集合。利用有效等價類可檢驗程式是否實現了規格說明中所規定的功能和效能。

2)無效等價類
    與有效等價類的定義恰巧相反。無效等價類指對程式的規格說明是不合理的或無意義的輸入資料所構成的集合。對於具體的問題,無效等價類至少應有一個,也可能有多個。
  設計測試用例時,要同時考慮這兩種等價類。因為軟體不僅要能接收合理的資料,也要能經受意外的考驗,這樣的測試才能確保軟體具有更高的可靠性。

劃分等價類的標準

  1. 完備測試、避免冗餘;
  2. 劃分等價類重要的是:集合的劃分,劃分為互不相交的一組子集,而子集的並是整個集合;
  3. 並是整個集合:完備性;
  4. 子集互不相交:保證一種形式的無冗餘性;
  5. 同一類中標識(選擇)一個測試用例,同一等價類中,往往處理相同,相同處理對映到"相同的執行路徑"。

方法

  1)在輸入條件規定了取值範圍或值的個數的情況下,則可以確立一個有效等價類和兩個無效等價類。如:輸入值是學生成績,範圍是0~100;

2)在輸入條件規定了輸入值的集合或者規定了"必須如何"的條件的情況下,可確立一個有效等價類和一個無效等價類;
  3)在輸入條件是一個布林量的情況下,可確定一個有效等價類和一個無效等價類。
  4)在規定了輸入資料的一組值(假定n個),並且程式要對每一個輸入值分別處理的情況下,可確立n個有效等價類和一個無效等價類。
    例:輸入條件說明學歷可為:專科、本科、碩士、博士四種之一,則分別取這四種這四個值作為四個有效等價類,另外把四種學歷之外的任何學歷作為無效等價類。
  5)在規定了輸入資料必須遵守的規則的情況下,可確立一個有效等價類(符合規則)和若干個無效等價類(從不同角度違反規則);
  6)在確知已劃分的等價類中各元素在程式處理中的方式不同的情況下,則應再將該等價類進一步的劃分為更小的等價類

設計測試用例

  在確立了等價類後,可建立等價類表,列出所有劃分出的等價類輸入條件:有效等價類、無效等價類,然後從劃分出的等價類中按以下三個原則設計測試用例:
  1)為每一個等價類規定一個唯一的編號;
  2)設計一個新的測試用例,使其儘可能多地覆蓋尚未被覆蓋地有效等價類,重複這一步,直到所有的有效等價類都被覆蓋為止;
  3)設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重複這一步,直到所有的無效等價類都被覆蓋為止。

栗子

設有一個檔案管理系統,要求使用者輸入以年月表示的日期。假設日期限定在1990年1月~2049年12月,並規定日期由6位數字字元組成,前4位表示年,後2位表示月。現用等價類劃分法設計測試用例,來測試程式的"日期檢查功能"。
  1)劃分等價類並編號,下表等價類劃分的結果

輸入等價類

有效等價類

無效等價類

日期的型別及長度

①6位數字字元

②有非數字字元

③少於6位數字字元

④多於6位數字字元

年份範圍

⑤在1990~2049之間

⑥小於1990

⑦大於2049

月份範圍

⑧在01~12之間

⑨等於00

⑩大於12

2)設計測試用例,以便覆蓋所有的有效等價類在表中列出了3個有效等價類,編號分別為①、⑤、⑧,設計的測試用例如下:
    測試資料    期望結果      覆蓋的有效等價類
    200211      輸入有效      ①、⑤、⑧
3)為每一個無效等價類設計一個測試用例,設計結果如下:
    測試資料   期望結果     覆蓋的無效等價類
    95June     無效輸入          ②
    20036      無效輸入          ③
    2001006   無效輸入          ④
    198912     無效輸入          ⑥
    200401     無效輸入          ⑦
    200100     無效輸入          ⑨
    200113     無效輸入          ⑩

邊界值分析法

定義

邊界值分析法就是對輸入或輸出的邊界值進行測試的一種黑盒測試方法。通常邊界值分析法是作為對等價類劃分法的補充,這種情況下,其測試用例來自等價類的邊界。

與等價劃分的區別

1)邊界值分析不是從某等價類中隨便挑一個作為代表,而是使這個等價類的每個邊界都要作為測試條件。
2)邊界值分析不僅考慮輸入條件,還要考慮輸出空間產生的測試情況。

邊界值分析法的考慮

長期的測試工作經驗告訴我們,大量的錯誤是發生在輸入或輸出範圍的邊界上,而不是發生在輸入輸出範圍的內部。因此針對各種邊界情況設計測試用例,可以查出更多的錯誤。
  使用邊界值分析方法設計測試用例,首先應確定邊界情況。通常輸入和輸出等價類的邊界,就是應著重測試的邊界情況。應當選取正好等於,剛剛大於或剛剛小於邊界的值作為測試資料,而不是選取等價類中的典型值或任意值作為測試資料。

常見的邊界值

1)對16-bit 的整數而言 32767 和 -32768 是邊界
2)螢幕上游標在最左上、最右下位置
3)報表的第一行和最後一行
4)陣列元素的第一個和最後一個
5)迴圈的第 0 次、第 1 次和倒數第 2 次、最後一次

邊界值分析

  1)邊界值分析使用與等價類劃分法相同的劃分,只是邊界值分析假定錯誤更多地存在於劃分的邊界上,因此在等價類的邊界上以及兩側的情況設計測試用例。
  例:測試計算平方根的函式
        --輸入:實數
        --輸出:實數
        --規格說明:當輸入一個0或比0大的數的時候,返回其正平方根;當輸入一個小於0的數時,顯示錯誤資訊"平方根非法-輸入值小於0"並返回0;庫函式Print-Line可以用來輸出錯誤資訊。
 2)等價類劃分:
    I.可以考慮作出如下劃分:
      a、輸入 (i)<0 和 (ii)>=0
      b、輸出 (a)>=0 和 (b) Error
    II.測試用例有兩個:
      a、輸入4,輸出2。對應於 (ii) 和 (a) 。
      b、輸入-10,輸出0和錯誤提示。對應於 (i) 和 (b) 。

 3)邊界值分析:
    劃分(ii)的邊界為0和最大正實數;劃分(i)的邊界為最小負實數和0。由此得到以下測試用例:
    a、輸入 {最小負實數}
    b、輸入 {絕對值很小的負數}
    c、輸入 0
    d、輸入 {絕對值很小的正數}
    e、輸入 {最大正實數}
   
  4)通常情況下,軟體測試所包含的邊界檢驗有幾種型別:數字、字元、位置、重量、大小、速度、方位、尺寸、空間等。
  5)相應地,以上型別的邊界值應該在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、  最短/最長、 空/滿等情況下。
  6)利用邊界值作為測試資料

邊界值

測試用例的設計思路

字元

起始-1個字元/結束+1個字元

假設一個文字輸入區域允許輸入1個到255個 字元,輸入1個和255個字元作為有效等價類;輸入0個和256個字元作為無效等價類,這幾個數值都屬於邊界條件值。

數值

最小值-1/最大值+1

假設某軟體的資料輸入域要求輸入5位的資料值,可以使用10000作為最小值、99999作為最大值;然後使用剛好小於5位和大於5位的 數值來作為邊界條件。

空間

小於空餘空間一點/大於滿空間一點

例如在用U盤儲存資料時,使用比剩餘磁碟空間大一點(幾KB)的檔案作為邊界條件。

7)內部邊界值分析:
    在多數情況下,邊界值條件是基於應用程式的功能設計而需要考慮的因素,可以從軟體的規格說明或常識中得到,也是終端使用者可以很容易發現問題的。然而,在測試用例設計過程中,某些邊界值條件是不需要呈現給使用者的,或者說使用者是很難注意到的,但同時確實屬於檢驗範疇內的邊界條件,稱為內部邊界值條件或子邊界值條件。
    內部邊界值條件主要有下面幾種:
    a)數值的邊界值檢驗:計算機是基於二進位制進行工作的,因此,軟體的任何數值運算都有一定的範圍限制。

範圍或值

位(bit)

0或者1

位元組(byte)

0——225

字(word)

0~65535(單字)或 0~4294967295(雙字)

千(K)

1024

兆(M)

1048576

吉(G)

1073741824

b)字元的邊界值檢驗:在計算機軟體中,字元也是很重要的表示元素,其中ASCII和Unicode是常見的編碼方式。下表中列出了一些常用字元對應的ASCII碼值。

字元

ASCII碼值

字元

ASCII碼值

空 (null)

0

A

65

空格 (space)

32

a

97

斜槓 ( / )

47

Z

90

0

48

z

122

冒號 ( : )

58

單引號 ( ‘ )

96

@

64

 

 

c)其它邊界值檢驗
6.基於邊界值分析方法選擇測試用例的原則
  1)如果輸入條件規定了值的範圍,則應取剛達到這個範圍的邊界的值,以及剛剛超越這個範圍邊界的值作為測試輸入資料。
    例如,如果程式的規格說明中規定:"重量在10公斤至50公斤範圍內的郵件,其郵費計算公式為……"。作為測試用例,我們應取10及50,還應取10.01,49.99,9.99及50.01等。
  2)如果輸入條件規定了值的個數,則用最大個數,最小個數,比最小個數少一,比最大個數多一的數作為測試資料。
    比如,一個輸入檔案應包括1~255個記錄,則測試用例可取1和255,還應取0及256等。
  3)將規則1)和2)應用於輸出條件,即設計測試用例使輸出值達到邊界值及其左右的值。
    例如,某程式的規格說明要求計算出"每月保險金扣除額為0至1165.25元",其測試用例可取0.00及1165.24、還可取一0.01及1165.26等。
    再如一程式屬於情報檢索系統,要求每次"最少顯示1條、最多顯示4條情報摘要",這時我們應考慮的測試用例包括1和4,還應包括0和5等。
  4)如果程式的規格說明給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最後一個元素作為測試用例。
  5)如果程式中使用了一個內部資料結構,則應當選擇這個內部資料結構的邊界上的值作為測試用例。
  6)分析規格說明,找出其它可能的邊界條件。

栗子

現有一個學生標準化考試批閱試卷,產生成績報告的程式。其規格說明如下:程式的輸入檔案由一些有80個字元的記錄組成,如右圖所示,所有記錄分為3組:

①標題:這一組只有一個記錄,其內容為輸出成績報告的名字。
②試卷各題標準答案記錄:每個記錄均在第80個字元處標以數字"2"。該組的第一個記錄的第1至第3個字元為題目編號(取值為1一999)。第10至第59個字元給出第1至第50題的答案(每個合法字元表示一個答案)。該組的第2,第3……個記錄相應為第51至第100,第101至第150,…題的答案。
③每個學生的答卷描述:該組中每個記錄的第80個字元均為數字"3"。每個學生的答卷在若干個記錄中給出。如甲的首記錄第1至第9字元給出學生姓名及學號,第10至第59字元列出的是甲所做的第1至第50題的答案。若試題數超過50,則第2,第3……紀錄分別給出他的第51至第100,第101至第150……題的解答。然後是學生乙的答卷記錄。
④學生人數不超過200,試題數不超過999。
⑤程式的輸出有4個報告:
   a)按學號排列的成績單,列出每個學生的成績、名次。
   b)按學生成績排序的成績單。
   c)平均分數及標準偏差的報告。
   d)試題分析報告。按試題號排序,列出各題學生答對的百分比。
  解答:分別考慮輸入條件和輸出條件,以及邊界條件。給出下表所示的輸入條件及相應的測試用例。

   輸出條件及相應的測試用例表。

錯誤推測法

定義

基於經驗和直覺推測程式中所有可能存在的各種錯誤, 從而有針對性的設計測試用例的方法。

思想

列舉出程式中所有可能有的錯誤和容易發生錯誤的特殊情況,根據他們選擇測試用例。例如, 輸入資料和輸出資料為0的情況;輸入表格為空格或輸入表格只有一行。 這些都是容易發生錯誤的情況。可選擇這些情況下的例子作為測試用例。

因果圖法

定義

是一種利用圖解法分析輸入的各種組合情況,從而設計測試用例的方法,它適合於檢查程式輸入條件的各種組合情況。

產生背景

等價類劃分法和邊界值分析方法都是著重考慮輸入條件,但沒有考慮輸入條件的各種組合、輸入條件之間的相互制約關係。這樣雖然各種輸入條件可能出錯的情況已經測試到了,但多個輸入條件組合起來可能出錯的情況卻被忽視了。如果在測試時必須考慮輸入條件的各種組合,則可能的組合數目將是天文數字,因此必須考慮採用一種適合於描述多種條件的組合、相應產生多個動作的形式來進行測試用例的設計,這就需要利用因果圖(邏輯模型)。

介紹

1) 4種符號分別表示了規格說明中向4種因果關係。

2) 因果圖中使用了簡單的邏輯符號,以直線聯接左右結點。左結點表示輸入狀態(或稱原因),右結點表示輸出狀態(或稱結果)。

3) Ci表示原因,通常置於圖的左部;ei表示結果,通常在圖的右部。Ci和ei均可取值0或1,0表示某狀態不出現,1表示某狀態出現。

概念

1)    關係

①恆等:若ci是1,則ei也是1;否則ei為0。

②非:若ci是1,則ei是0;否則ei是1。

③或:若c1或c2或c3是1,則ei是1;否則ei為0。“或”可有任意個輸入。

④與:若c1和c2都是1,則ei為1;否則ei為0。“與”也可有任意個輸入。

2)    約束

輸入狀態相互之間還可能存在某些依賴關係,稱為約束。例如, 某些輸入條件本身不可能同時出現。輸出狀態之間也往往存在約束。在因果圖中,用特定的符號標明這些約束。

A.輸入條件的約束有以下4類:

   ① E約束(異):a和b中至多有一個可能為1,即a和b不能同時為1。

   ② I約束(或):a、b和c中至少有一個必須是1,即 a、b 和c不能同時為0。

   ③ O約束(唯一);a和b必須有一個,且僅有1個為1。

   ④R約束(要求):a是1時,b必須是1,即不可能a是1時b是0。

B.輸出條件約束型別

   輸出條件的約束只有M約束(強制):若結果a是1,則結果b強制為0。

設計步驟

1)分析軟體規格說明描述中, 那些是原因(即輸入條件或輸入條件的等價類),那些是結果(即輸出條件), 並給每個原因和結果賦予一個識別符號。

2)分析軟體規格說明描述中的語義,找出原因與結果之間, 原因與原因之間對應的關係,根據這些關係,畫出因果圖。

3)由於語法或環境限制, 有些原因與原因之間,原因與結果之間的組合情況不可能出現,為表明這些特殊情況, 在因果圖上用一些記號表明約束或限制條件。

4)把因果圖轉換為判定表。

5)把判定表的每一列拿出來作為依據,設計測試用例。