一、什么是測試用例
測試用例設計:將軟件測試的行為活動,作為一個科學化的組織歸納。
測試用例:設計一個情況,軟件程序在這種情況下,必須能夠正常運行並且達到程序所設計的執行結果。
因為我們不可能進行窮舉測試,為了節省時間和資源、提高測試效率,必須從數量極大的可用測試數據精心挑選出具有代表性或者特殊性的測試數據來進行測試。
二、測試用例的好處
在開始實施測試之前設計好測試用例,可以避免盲目測試並提高測試效率。
測試用例的使用令軟件測試的實施重點突出、目的明確。
在軟件版本更新后只修正少部分的測試用例便可展開測試工作,降低工作強度,縮短項目周期。
功能測試模塊的通用化和復用化使軟件易於開發,而測試用例的通用化和復用化則會使軟件測試易於開展,並隨着測試用例的不斷精化其效率也不斷攀升。
三、測試用例設計方法
1、等價類划分法
將輸入(輸出)划分成若干個子集合,從子集合中選取一些代表值,只要選取的值測試沒有問題,就認為未被選取的數據測試也沒有問題。
- 有效等價類:有意義的合理的正確輸入;
- 無效等價類:非法的錯誤的異常的輸入;
等價類的划分原則:
- 如果輸入是一個取值范圍或者值的個數,則划分成一個有效等價類和兩個無效等價類;
- 如果輸入是一個有限的集合或者必須如何的條件,則划分成一個有效等價類和一個無效等價類;
- 如果輸入是一個布爾量,則划分成一個有效等價類和一個無效等價類;
- 如果輸入已經划分等價類,針對具體的值處理方式會有所不同更加細化,則划分成多個有效等價類和一個無效等價類;
- 如果輸入要同時滿足多個條件,則划分成一個有效等價類和多個無效等價類;
等價類划分的使用步驟:
- 將需求規格划分成需求子片段;
- 分析需求子片段,找出輸入條件;
- 分析輸入條件,結合等價類划分原則進行等價類划分;
- 對划分的等價類進行編號;
- 從划分的等價類中選取數據結合測試用例寫作規范生成最終的測試用例;
一條測試用例盡量覆蓋多個有效等價類
一條測試用例只覆蓋一個無效等價類
等價類划分法例題:
(一)一個有效&兩個無效
取值范圍:駕照年齡18-65周歲
一個有效(18-65之間)
兩個無效(17,66)
(二)一個有效&一個無效
取值范圍:第三期學員
一個有效(第三期學員)
一個無效(非第三期學員)
(三)一個有效&一個無效
取值范圍:男性
一個有效(男性)
一個無效(女性)
(四)多個有效&一個無效
英語考試,60以上合格(含60分)
一個有效:60分以上
60-79:合格
80-89:良好
90-100:優秀
一個無效:60分以下
(五)一個有效&多個無效
個人信息注冊:身高,體重,年齡
一個有效:三個資料都填寫
三個無效: 身高填寫X
體重填寫Y
年齡填寫Z
(六)一個有效&多個無效
個人信息注冊:身高,體重,年齡
一個有效:三個資料都填寫
三個無效:身高填寫X
體重填寫Y
年齡填寫Z
(七)萬年歷查詢軟件,要求用戶輸入以年月日表示的日期,然后系統會換算出該日期的農歷表示法及相關黃歷信息,假設日期限定在1900年1月1日~2049年12月31日,並規定日期由8位數字字符組成,前4位表示年,中間2位表示月,最后兩位表示日期。其中4、6、9、11月只有30天,平年的2月份只有28天,閏年的2月份有29天。(備注:為簡化處理,本題進行用例設計時。不考慮對平年、閏年的判斷)
划分等價類並編號:
設計測試用例覆蓋的有效等價類,設計的測試用例如下:
為每一個無效等價類設計一個測試用例,設計結果如下:
2、邊界值分析法
邊界值分析法是對等價類划分法的一種補充,經驗表明邊界是問題多發區;如果邊界測試沒有發現問題,就認為其他區域發生問題的概率較小。
相關術語:
- 上點:邊界上的點叫做上點
- 離點:離邊界最近的點叫做離點
- 如果是閉區間,離點落在邊界外
- 如果是開區間,離點落在邊界內
- 內點:邊界內任意一個點叫做內點
邊界值分析法選取數據原則:
- 如果輸入是一個取值范圍或者值的個數,則以邊界和邊界附近的值作為測試用例數據選取;
- 如果輸入的值的個數是一個取值范圍,則以最大個數;最大個數+1;最小個數;最小個數-1作為測試用例數據選取;
- 如果輸入是一個有序的集合,則以第一個元素和最后一個元素作為測試用例數據選取;
- 如果是一個內部數據結構,則以極限值作為測試數據選取;
邊界值分析法使用步驟:
- 將需求規格划分成需求子片段;
- 找出需求片段中的輸入條件。為每個條件划分等價類;
- 確定等價類的邊界值;
- 根據邊界值分析法測試用例選取原則確定測試用例的輸入數據;
- 生成最終的測試用例;
邊界值分析法例題:
(一)
取值范圍:計算器計算100以內正數加減法:1-100
取值:有效:1,100
無效:0,101
值的個數(固定是幾):處理三個數是否能組成三角形
有效:3個
無效:2個,4個
(二)
值的個數是取值范圍:密碼6-16
取值:有效:6,16
無效:5,17
(三)
有序的集合:01-12月
取值:有效:01,12
無效:00,13
(四)
內部數據結構:棧:儲存10個數據
取值:有效:10
無效:11
3、因果圖法
如果輸入之間有關系,我們在測試時必須考慮輸入條件的各種組合,那么可以考慮使用一種適合於描述對於多種條件的組合,相應產生多個動作的形式來設計測試用例,這就需要利用因果圖。
優點:因果圖方法最終生成的就是判定表。它適合於檢查程序輸入條件的各種組合情況。
因果圖法的基本思想:
使用因果圖法設計測試用例時,首先從程序規格說明書的描述中,找出因(輸入條件)和果(輸出結果或者程序狀態的改變),然后通過因果圖轉換為判定表,最后為判定表中的每一列設計一個測試用例。
因果圖中出現的基本符號:
通常在因果圖中用Ci表示原因,用Ei表示結果,各結點表示狀態,可取值“0”或“1”。“0”表示某狀態不出現,“1”表示某狀態出現。
主要的原因和結果之間的關系有:
- 恆等: 若c1為1,則e1也為1,否則e1為0.
- 非: 若c1是1,則e1為0,否則e1是1.
- 或: 若c1或c2或c3是1,則e1是1,若三者都不為1,則e1為0.
- 與: 若c1和c2都是1,則e1為1,否則若有其中一個不為1,則e1為0.
實際問題中,輸入狀態之間可能存在某些依賴關系,這種依賴關系被稱為”約束”.
在因果圖中使用特定的符號來表示這些約束關系:
約束關系說明:
E約束(異): a,b最多有一個可能為1,不能同時為1.
I約束(或): a,b,c中至少有一個必須為1,不能同時為0.
O約束(惟一): a和b必須有一個且僅有一個為1
R約束(要求):a是1時,b必須是1,即a為1時,b不能為0
M約束:對輸出條件的約束,若結果a為1,則結果b必須為0.
用因果圖生成測試用例的基本步驟:
- 分析軟件規格說明描述中,哪些是原因 (即輸入條件或輸入條件的等價類),哪些是結果 (即輸出條件),並給每個原因和結果賦予一個標識符。
- 分析軟件規格說明描述中的語義,找出原因與結果之間,原因與原因之間對應的是什么關系? 根據這些關系,畫出因果圖。
- 由於語法或環境限制,有些原因與原因之間,原因與結果之間的組合情況不可能出現。為表明這些特殊情況,在因果圖上用一些記號標明約束或限制條件。
- 把因果圖轉換成判定表。
- 把判定表的每一列拿出來作為依據,設計測試用例。
應用舉例:
分析問題,按照如下步驟進行:
(1)根據軟件規格說明書,列出原因和結果.
(2)找出原因和結果之間的關系,原因和原因之間的約束關系,畫出因果圖.
(3)將因果圖轉化為判定表
(4)根據判定表設計測試用例.
某文件修改需求:
如想對文件進行修改,需要遵守以下規則:
輸入的第一列字符必須是A或B,
第二列字符必須是一個數字,
如果第一列字符不正確,則給出信息L;
如果第二列字符不正確,則給出信息M。
如果兩列字符輸入正確,則修改文件
原因:
C1:第一個字符是A;
C2:第一個字符是B;
C3:第二個字符是一個數字字符.
結果:
E1:給出信息L;
E2:修改文件;
E3:給出信息M;
將因果圖轉化為判定表:
設計測試用例:
測試用例1: 輸入數據:A3 預期輸出:修改文件
測試用例2: 輸入數據:AM 預期輸出:給出信息M
測試用例3: 輸入數據:B3 預期輸出:修改文件
測試用例4: 輸入數據:B* 預期輸出:給出信息M
測試用例5: 輸入數據:C2 預期輸出:給出信息L
測試用例6: 輸入數據:CM 預期輸出:給出信息LM
因果圖法的優點:
考慮了多個輸入之間的相互組合、相互制約關系;
能夠幫助我們按一定步驟,高效率地選擇測試用例,同時還能為我們指出,程序規格說明描述中存在着什么問題。