軟件測試-編寫測試用例

常見的用例編寫方法以下:
1、需求轉化法
根據需求轉化爲基本功能測試點
2、等價類
一、等價類:程序的輸入域劃分爲若干部分,每一個部分中選取少數有表明性的數據做爲測試用例,每一類的表明性數據在測試中的做用等價於這一類的其它值;從全部可能的輸入中努力找出某個小的子集,咱們要找的子集是正確的,而且是可能發現最多錯誤的子集。
精心挑選的用例符合兩個特性:
特性一:嚴格控制測試用例的增長,減小爲達到「合理測試」的某些既定目標而必須設計的其它測試用例的數量;
特性二:它覆蓋了大部分其它可能的測試用例;
等價類劃分有兩類不一樣的狀況: 有效等價類和無效等價類
儘管等價類測試要比隨機測試用例優越的多,但它仍然存在不足。
二、劃分等價類六大原則:
  • 輸入條件劃分了取值範圍或者值的個數的狀況下,則能夠肯定一個有效等價類和無效等價類;
  • 輸入條件規定了輸入值的集合或規定了「必須如何」的條件狀況下,則能夠肯定一個有效等價類和無效等價類;
  • 輸入條件是一個布爾值的狀況下,則能夠肯定一個有效等價類和無效等價類;
  • 輸入條件在規定了輸入數據的一組值(假定n個),而且程序要對每個輸入值分別處理的狀況下,可確立n個有效等價類和一個無效等價類.
  • 輸入條件在規定了輸入數據必須遵照的規則的狀況下,可確立一個有效等價類(符合規則)和若干個無效等價類(從不一樣角度違反規則);
  • 在確知已劃分的等價類中各元素在程序處理中的方式不一樣的狀況下,則應再將該等價類進一步的劃分爲更小的等價類;
三、轉化爲測試用例
按照輸入條件、有效等價類、無效等價類創建等價類列表,列出全部的等價類;
  • 爲每個等價類固定一個編號;
  • 設計一個測試用例,使其覆蓋一個或多個有效的等價類;
  • 設計一個或更多的測試用例以覆蓋剩餘的有效等價類;
以三角形測試爲例:輸入3個整數作爲三角形的三個邊,經過程序斷定三角形的類型

輸入條件:3個整數,a,b,c 條件 有效等價類 編號 無效等價類 編號  
  3個數 a,b,c
1


一、只有一個數;
a/b/c
二、只有兩個數
a,b;b,c;a,c;
三、三個以上數
6

7

8
 
  整數 正整數 2
一、有一個爲0;
a=0;b=0;c=0;
二、有兩個爲0;
a=b=0;a=c=0;b=c=0;
三、全爲0;
a=b=c=0;
四、一個爲負數;
a<0;b<0;c<0;
五、兩個爲負數;
a/b<0;a/c<0;b/c<0;
六、全爲負數;
a/b/c<0;
9

10


11

12

13

14
 
輸出條件:通常三角形、等邊三角形、等腰三角形
通常三角形

等腰三角形
等邊三角形
a+b>c;a+c>b;b+c>a;
a=b;a=c;b=c;
a=b=c;
3

4
5
     
測試用例

a=3,b=4,c=5
a=3,b=3,c=5
a=3,b=5,c=3
a=5,b=3,c=3
a=3,b=3,c=3
覆蓋編號1-3
覆蓋用例1-4
覆蓋用例1-4
覆蓋用例1-4
覆蓋用例1-3,5
 
a=3/b=4/c=5,其它無值
a/b/c中其二有值,其它無值
a/b/c/d,四個值
a/b/c其一=0
a/b/c其二=0
a/b/c其三=0
a/b/c其一爲負
a/b/c其二爲負
a/b/c其三爲負

覆蓋用例6

覆蓋用例7

覆蓋用例8
覆蓋用例9
覆蓋用例10
覆蓋用例11
覆蓋用例12
覆蓋用例13
覆蓋用例14
 

3、邊界值:
所謂邊界條件,是指輸入和輸出等價類中那些剛好 處於邊界、超過邊界、或在邊界如下的狀態。
與等價類不一樣:
特徵一:邊界值分析須要選擇一個或多個元素,以便等價類的每個邊界都通過了測試;
特徵二:與僅僅關注輸入條件不一樣,還須要考慮結果空間(輸出等價類)設計測試用例;
邊界條件可能很是微妙,所以把他們肯定下來須要煞費心思;
基於邊界值分析方法選擇測試用例的原則:
  • 若是輸入條件規定了值的範圍,則應取剛達到這個範圍的邊界的值,以及剛剛超越這個範圍邊界的值做爲測試輸入數據;
  • 若是輸入條件規定了值的個數,則用最大個數,最小個數,比最小個數少一,比最大個數多一的數做爲測試數據;
  • 將規則1)和2)應用於輸出條件,即設計測試用例使輸出值達到邊界值及其左右的值
  • 若是程序的規格說明給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最後一個元素做爲測試用例;
  • 若是程序中使用了一個內部數據結構,則應當選擇這個內部數據結構的邊界上的值做爲測試用例;
  • 分析規格說明,找出其它可能的邊界條件
例如:三角形問題,假定取值範圍爲[1,100];
邊界值可取值爲1,100,0,101
正常狀況下,邊界值得測試點有4*4*4=64種組合;
4、因果圖:
輸入條件的組合進行分析。用一個系統的方法選擇出高效的測試用例集;
若是在測試時必須考慮輸入條件的各類組合,則可能的組合數目將是天文數字,所以必須考慮採用一種適合於描述多種條件的組合、相應產生多個動做的形式來進行測試用例的設計,這就須要利用因果圖(邏輯模型)
1)     分析軟件規格說明描述中 那些是緣由 ( 即輸入條件或輸入條件的等價類 ), 那些是結果 ( 即輸出條件 ),  並給每一個緣由和結果賦予一個標識符。
2)     分析軟件規格說明描述中的語義,找出緣由與結果之間 緣由與緣由之間對應的關係,根據這些關係 , 畫出因果圖。
3)     因爲語法或環境限制 有些緣由與緣由之間 , 緣由與結果之間的組合狀況不可能出現,爲代表這些特殊狀況 在因果圖上用一些記號代表約束或限制條件。
4)     把因果圖轉換爲斷定表。
5)     把斷定表的每一列拿出來做爲依據 , 設計測試用例。

5、正交實驗法
利用因果圖來設計測試用例時 ,  做爲輸入條件的緣由與輸出結果之間的因果關係,有時很難從軟件需求規格說明中獲得。每每因果關係很是龐大,以致於據此因果圖而獲得的測試用例數目多的驚人,給軟件測試帶來沉重的負擔,爲了有效地,合理地減小測試的工時與費用,可利用正交實驗設計方法進行測試用例的設計
利用正交實驗設計測試用例的步驟:
1.      提取功能說明,構造因子--狀態表
把影響實驗指標的條件稱爲因子 . 而影響實驗因子的條件叫因子的狀態 . 利用正交實驗設計方法來設計測試用例時 , 首先要根據被測試軟件的規格說明書找出影響其功能實現的操做對象和外部因素 , 把他們看成因子 , 而把各個因子的取值看成狀態 . 對軟件需求規格說明中的功能要求進行劃分 , 把總體的概要性的功能要求進行層層分解與展開 , 分解成具體的有相對獨立性的基本的功能要求 . 這樣就能夠把被測試軟件中全部的因子都肯定下來 , 併爲肯定個因子的權值提供參考的依據 . 肯定因子與狀態是設計測試用例的關鍵 . 所以要求儘量全面的正確的肯定取值 , 以確保測試用例的設計做到完整與有效。
2.      加權篩選,生成因素分析表
對因子與狀態的選擇可按其重要程度分別加權 . 可根據各個因子及狀態的做用大小 , 出現頻率的大小以及測試的須要 , 肯定權值的大小。
3.      利用正交表構造測試數據集
正交表的推導依據 Galois 理論(這裏省略 , 須要時可查數理統計方面的教材)。
利用正交實驗設計方法設計測試用例 , 比使用等價類劃分 , 邊界值分析 , 因果圖等方法有如下優勢 : 節省測試工做工時;可控制生成的測試用例數量;測試用例具備必定的覆蓋率。
6、場景實驗法:
每個場景都須要肯定測試用例。能夠採用矩陣或決策表來肯定和管理測試用例。下面顯示了一種通用格式,其中各行表明各個測試用例,而各列則表明測試用例的信息。本示例中,對於每一個測試用例,存在一個測試用例 ID 、條件(或說明)、測試用例中涉及的全部數據元素(做爲輸入或已經存在於數據庫中)以及預期結果。
7、探索性測試
發散思惟,進行探索式測試;
8、經驗測試
根據測試中出現的問題和經驗,編寫相關測試用例;
9、設計文檔
根據設計文檔,編寫測試用例;
10、錯誤推斷法:利用直覺和經驗猜想出錯的可能類型,
11、斷定表驅動法
斷定表是分析和表達多邏輯條件下執行不一樣操做的狀況的工具
可以將複雜的問題按照各類可能的狀況所有列舉出來,簡明並避免遺漏。所以,利用斷定表可以設計出完整的測試用例集合。
斷定表一般有四個部分組成:條件樁、動做樁、條件項、動做項;
斷定表的創建步驟:(根據軟件規格說明)
1)     肯定規則的個數 .假若有n個條件。每一個條件有兩個取值(0,1,故有2n種規則。
2)     列出全部的條件樁和動做樁。
3)     填入條件項。
4)     填入動做項。等到初始斷定表。
5)     簡化 .合併類似規則(相同動做)。
斷定表的優勢和缺點
Ø   優勢:它能把複雜的問題按各類可能的狀況一一列舉出來,簡明而易於理解,也可避免遺漏。
Ø   缺點:不能表達重複執行的動做,例如循環結構。
B. Beizer 指出了適合使用斷定表設計測試用例的條件:
Ø   規格說明以斷定表形式給出 ,或很容易轉換成斷定表。
Ø   條件的排列順序不會也不影響執行哪些操做。
Ø   規則的排列順序不會也不影響執行哪些操做。
Ø   每當某一規則的條件已經知足 ,並肯定要執行的操做後,沒必要檢驗別的規則。
Ø   若是某一規則獲得知足要執行多個操做 ,這些操做的執行順序可有可無
12、功能圖法
1.     功能圖介紹
一個程序的功能說明一般由動態說明和靜態說明組成.動態說明描述了輸入數據的次序或轉移的次序.
靜態說明描述了輸入條件與輸出條件之間的對應關係 . 對於較複雜的 程序,因爲存在大量的組合狀況,所以,僅用靜態說明組成的規格說明對於測試來講每每是不夠的.必須用動態說明來補充功能說明.功能圖方法是用功能圖FD形式化地表示程序的功能說明,並機械地生成功能圖的測試用例.
功能圖模型由狀態遷移圖和邏輯功能模型構成.狀態遷移圖用於表示輸入數據序列以及相應的輸出數據.在狀態遷移圖中,由輸入數據和當前狀態決定輸出數據和後續狀態.邏輯功能模型用於表示在狀態中輸入條件和輸出條件之間的對應關係.邏輯功能模型只適合於描述靜態說明,輸出數據僅由輸入數據決定.測試用例則是由測試中通過的一系列狀態和在每一個狀態中必須依靠輸入/輸出數據知足的一對條件組成.功能圖方法實際上是是一種黑盒白盒混合用例設計方法
(功能圖方法中 , 要用到邏輯覆蓋和路徑測試的概念和方法 , 其屬白盒測試方法中  的內容.邏輯覆蓋是以程序內部的邏輯結構爲基礎的測試用例設計方法.該方法要求測試人員對程序的邏輯結構有清楚的瞭解.因爲覆蓋測試的目標不一樣,邏輯覆蓋可分爲:語句覆蓋,斷定覆蓋,斷定-條件覆蓋,條件組合覆蓋及路徑覆蓋.下面咱們指的邏輯覆蓋和路徑是功能或系統水平上的,以區別與白盒測試中的程序內部的.
2.     測試用例生成方法
從功能圖生成測試用例,獲得的測試用例數是可接受的. 問題的關鍵的是如何從狀態遷移圖中選取測試用例. 若用節點代替狀態,用弧線代替遷移,則狀態遷移圖就可轉化成一個程序的控制流程圖形式.問題就轉化爲程序的路徑測試問題(如白盒測試)問題了.
3.     測試用例生成規則
爲了把狀態遷移(測試路徑)的測試用例與邏輯模型(局部測試用例)的測試用例組合起來,從功能圖生成實用的測試用例,須定義下面的規則.在一個結構化的狀態遷移(SST)中,定義三種形式的循環:順序,選擇和重複.但分辨一個狀態遷移中的全部循環是有困難的.(其表示圖形省略)。
4.     從功能圖生成測試用例的過程
1)     生成局部測試用例 : 在每一個狀態中 , 從因果圖生成局部測試用例 . 局部測試用例由緣由值(輸入數據)組合與對應的結果值(輸出數據或狀態)構成。
2)     測試路徑生成 : 利用上面的規則(三種)生成從初始狀態到最後狀態的測試路徑。
3)     測試用例合成 : 合成測試路徑與功能圖中每一個狀態中的局部測試用例 . 結果是初始狀態到最後狀態的一個狀態序列 , 以及每一個狀態中輸入數據與對應輸出數據的組合。
5.     測試用例的合成算法 : 採用條件構造樹 .

測試用例綜合設計策略
1.     Myers提出了使用各類測試方法的綜合策略
1)     在任何狀況下都必須使用邊界值分析方法,經驗代表用這種方法設計出測試用例發現程序錯誤的能力最強。
2)     必要時用等價類劃分方法補充一些測試用例
3)     用錯誤推測法再追加一些測試用例
4)     對照程序邏輯,檢查已設計出的測試用例的邏輯覆蓋程度,若是沒有達到要求的覆蓋標準,應當再補充足夠的測試用例
5)     若是程序的功能說明中含有輸入條件的組合狀況,則一開始就可選用因果圖法
2.     測試用例的設計步驟
1)     構造根據設計規格得出的基本功能測試用例
2)     邊界值測試用例
3)     狀態轉換測試用例
4)     錯誤猜想測試用例
5)     異常測試用例
6)     性能測試用例
7)     壓力測試用例
3.     優化測試用例的方
1)     利用設計測試用例的8種方法不斷的對測試用例進行分解與合併
2)     採用遺傳算法理論進化測試用例
3)     在測試時利用發散思惟構造測試用例