測試方法和測試用例設計


測試方法和測試用例設計

用戶需求/原始需求

需求分析/規格說明書(評審過后,將不合理、無法做到的地方去掉以后的說明書)

測試需求(在需求分析的基礎上,以測試團隊的工作計划、方式的需要、工作優先級安排)

主要解決“測什么”的問題,即指明被測對象中什么需要測試。

功能是第一要務,按照測試團隊的工作要求進行計划

在后期交流中,要不斷驗證客戶需求,要保留文檔

對於測試工程師:測試一般划分為功能性測試、非功能性測試

如果沒有需求文檔,先做冒煙測試,對軟件大體有什么功能,進行了解,哪些是功能的重點,有多少功能點,把需求理出來

測試原則:

\1. 所有測試活動應以需求為源頭和驅動

\2. 應盡早地和不斷地進行測試

\3. 完全測試(窮舉測試)是不可能的,數據是無窮無盡的,總有測試不到的數據

\4. 沒有完美的軟件和完美的測試

\5. 應避免僅有程序員自己檢查程序,避免隨意性(避免隨意測試)

\6. 二八定律,把相對多的時間、成本、精力花在重要的模塊、部分

\7. Good enough 不做不充分的測試,也不做過多的測試,找到測試費用和測試量之間平衡點

\8. 一定要有正確和錯誤驗證

1、所有測試活動都應追溯到用戶需求,測試活動應以需求(用戶需求->需求規格說明書)為源頭和驅動

2、應盡早地和不斷地進行軟件測試

3、完全測試(窮舉測試)是不可能的,因為數據本身是無窮無盡的,總有無法測試到的數據、方面。沒有完美的測試和完美的軟件,只有未被發現的缺陷,沒有不存在問題的軟件

4、應充分注意測試中的集群現象:二八定律(把相對多數的時間花在重要的部分)

5、應避免只有程序員自己檢查程序,盡量避免測試的隨意性(即避免隨機測試)

6、測試的Good Enough,不要做不充分的測試,也不做過多的測試,找到測試費用和測試量之間的平衡點,是最佳選擇

制定測試內容和最低測試通過標准加以衡量(必要時具體問題具體分析)

7、兼顧合理的輸入數據、操作對軟件進行測試和不合理的輸入數據、操作對軟件進行測試

8、程序修改后要做回歸測試(不論修改的多少,都要做回歸測試)

測試的完成標准:

  1.   功能符合需求
    
  2.   被測系統所有的功能點都要被覆蓋到(100%覆蓋)  如果某個功能點被測試到了,就說該功能點被覆蓋了(但凡是要交付到下一階段的功能、內容,都必須覆蓋到,所有功能點至少覆蓋一次)
    
  3.   被測系統不允許出現嚴重程度為一、二、三級缺陷(致命錯誤、嚴重錯誤、一般錯誤)
    
  4.   所有的配置項必須完整(產業鏈的各個項目必須完整)
    

測試過程中遇到的問題:

不知道是否較全面的測試了所有功能

測試的覆蓋率無法衡量

對新版本的重復測試很難實施

存在大量冗余測試影響測試效率

軟件還未測試之前,就對需求進行設計,實用性要很強

測試用例

測試用例(Test Case)是為了實施測試而向被測試的系統提供的一組集合,這組集合包含:測試環境、操作步驟、測試數據、預期結果等要素。

解決要測什么、怎么測、如何衡量的問題

軟件名、版本、模塊、測試步驟、順序、數據、預期結果(根據需求、設計,對可能的結果進行預測)

//測試用例一般可以划分為:場景測試用例(簡稱“測試用例”)和基本測試用例(給或稱為“工用測試用例”)

定義:集合(測試環境、測試步驟、數據、代碼、預期結果)

解決“測什么,怎么測,如何衡量”

測試是在測試執行之前設計、編寫的文檔/報告,它不一定會發現缺陷

缺陷報告是在測試執行完成之后,發現問題、缺陷的報告

作用:

1、 執行測試的有效依據(文檔而非口頭或主觀)

2、 追溯測試的有效依據(可在做回歸、缺陷分析時查看)

3、 衡量測試工作量的有效數據

4、 衡量測試人員工作量和工作質量的依據

5、 評估測試覆蓋力度的依據(需求中的內容/功能點被測試涉及到了,就說它被覆蓋了,需求/功能點覆蓋100%)

6、 驗證需求和尋找缺陷的重要手段

7、 為新版本或其他項目參考和累積測試經驗

測試用例在什么時候開始

設計人員會根據需求進行設計,只要需求和設計文檔到位,就可以開始編寫測試用例

測試人員的時間周期比開發人員的時間周期長,測試人員早在需求階段就進入測試階段

1、如果需求、設計缺失或不完整,在軟件完成后編寫用例

2、需求、設計完整

熟悉需求、設計之后,在編碼之前或實現過程中設計用例

3、軟件代碼、需求、設計變更后,測試用例需要變更

4、執行用例過程中或執行之后需要適時調整、修改

如何對軟件執行操作動作、步驟?

操作步驟中輸入些什么樣的數據,數據有什么講究,有什么范圍,數據的營造

用合理的方式造出數據

黑盒測試與功能性測試、兼容性測試、自動化測試是平等的

黑盒設計用例的方法:(黑盒測試:以數據為驅動的功能性測試,不關注內部結構)

1、等價類

兩位數加法計數器

需求:兩位數范圍內(-99~99),兩個數求和

兩位數包不包括小數?

衡量成本、時間,評估一下工作量,進行測試

加數1:[-99,99]

加數2:[-99,99]

工作量:199*199=39601

留哪些數據?為什么留這些數據?為什么砍掉其他數據?

等價類(解決了不能窮舉測試的問題/極大的控制了測試成本在可接收范圍內/控制測試用例的數量)

根據用戶需求及其特點和數據本身的特點,將數據划分為有限的若干個類型,從每個類型中的抽取一個具有代表性的數據進行測試

如何利用現有的時間成本,將數據划分到什么地步

有效等價類

無效等價類

等價類1:[-99,99]

等價類2: <-99 因為無法找到小於-99同時大於99的數,因此,無效等價類分

等價類3: > 99 為兩個

划分等價類的方法

1、在連續的數據取值范圍中,至少可以划分三個等價類,其中1個有效等價類[0,100],2個無效等價類(<0)(>100)

有規律的數據,例如奇數、偶數,也可以用等價划分的方法

課堂練習:

微信紅包(0,200]

分析需求特點,邊界值的特點,是否需要取等於

等價類1 0<x<=200

等價類2 x<=0

等價類3 200>x

T0305樣品軟件

需求:一班學生學號[1,40]

​ 各科成績[0,100]

一班學生學號

等價類1 [1,40]

等價類2 <1

等價類3 >40

等價類4 >200

成績

等價類1 [0,100]

等價類2 <0

等價類3 >100

2、輸入條件規定了必須輸入某些數據,至少划分為一個有效等價類、一個無效等價類

3、輸入數據只有兩種可能,true、false/yes、no等,划分為一個有效等價類、一個無效等價類

4、確定一個有效等價類(多個條件都滿足),若干個無效等價類(不滿足長度要求或者不滿足開頭或者不滿足組成,三個無效等價類)

5、在已知等價類的基礎上,根據具體情況再划分

等價類細分的素材 例如:

非數值:

漢字

字母

其他字符

空白

6、規定了輸入數據的一組值,並且對每個輸入值分別處理,划分若干個有效等價類,一個無效等價類

建議盡可能在一個下拉框中,減少輸入選項,可以增加下拉框控件數量

等價類划分步驟:

1、對輸入數據進行分析(結合需求分析,數據本身特點的分析),再划分等價類

考慮輸入數據的數據類型(輸入類型)、數據范圍(輸入長度)

2、為等價類進行編號

3、每個等價類中的數據至少要用一次

9.25回顧

等價類划分方法

1、連續數據取值范圍,可以分為一個有效,兩個無效

2、規定輸入某些無規律的數據取值集合,例如驗證碼,可以分為一個有效,一個無效

3、輸入條件是布爾量true/fales,yes/no,可以分為一個有效,一個無效

4、由多個無關聯的條件共同構成數據范圍,例如Java標識符的命名規則,可以分為一個有效,多個無效

5、在已知等價類基礎上,再進行細分

6、規定了輸入數據是無規律的一組值,並且對每個輸入值分別處理,例如下拉框,可划分為若干個有效,1個無效(除了下拉框中的,其他的都是無效的)

划分等價類標准

完備測試、避免冗余;

子集互不相交:保證無冗余,不會出現多個用例用到相同類型的數據;

所有子集相加即為數據總集(整個集合)。

等價類1 x>99

等價類2 x<-99

-99<=x<=99

等價類3 -99<=x<0

等價類4 x=0 若3和4中都包括0這個取值,那么會造成冗余

等價類5 0<x<=99

邊界值

-99<=x<=99

if(-99<=x&&x<=99)

{

…//正確處理

}

if(x<-99||x>99)

{

…//錯誤處理

}

邊界值是等價類派生出來的方法,只要有數據的取值范圍,就肯定有邊界值

開區間:一個連續的取值范圍,大於最小值,小於最大值,不包括兩個端點

1<x<10 (1,10)

閉區間:一個連續的取值范圍,大於等於最小值,小於等於最大值,包括兩個端點

1<=x<=10 [1,10]

上點:不區分開閉區間,邊界上的點,1和10是上點

若是開區間,上點在域范圍外

若是閉區間,上點在域范圍外

內點:在取值范圍內的任意一點,2,3,4等都是內點

離點:若是開區間,離點是范圍內離上點最近的點,若是閉區間,離點就是范圍外離上點最近的點

開區間(1,10),2和9就是離點,內收,因為1,10是無效值,所以還應取又消失

閉區間[1,10],0和11是離點,外放

邊界值:上點和離點

(49,79):49,79,50,78

(49,79]:49,79,50,80

[49,79):49,79,48,78

回顧上午的知識:

邊界值(等價類的補充/特例)

開區間:不包含最大值和最小值的數據取值范圍 (1,10)

閉區間:包含最大值和最小值的數據取值范圍 [1,10]

上點:邊界上的點,最大值、最小值,不區分開閉區間

內點:取值范圍內的任意一點

離點:區分開閉區間,離上點最近的點

開區間的離點是取值范圍內離上點最近的點,內收,最小值+1個單位,最大值-1個單位,因為上點是無效值,故還應取有效值

閉區間的離點是取值范圍外離上點最近的點,外放,最小值-1個單位,最大值+1個單位,因為上點是有效值,故還應取無效值

4+1理論,2個上點,2個離點,1個內點

6+1理論

[10,100] 邊界值,9,10,100,101

(10,100) 邊界值,10,11,99,100

不管開閉區間,六個邊界值:9,10,11,99,100,101

若已知,開閉區間,會產生冗余,若需求不明確,或團隊技術不高的情況可考慮采用6+1理論

回顧:

等價類的作用:解決不能窮舉測試的問題,極大的控制成本在可接收范圍內

等價類划分(根據需求的特點,數據本身的特點進行划分)

有效等價類:符合需求的數據

無效等價類:不符合需求的數據

等價類划分方法:

1、 連續數據取值范圍,可划分為一個有效,兩個無效

2、 規定輸入的數據是無規律的一組值,並且對每個輸入值分別進行處理,例如下拉框,可划分為若干個有效,一個無效(除了下拉框中的,都是無效的)

等價類缺點:數據值是不准確的,不精確的/數據值的准確性不一樣

邊界值:是等價類的補充,解決數據不准確的缺點

邊界值的優點:數據值的准確性、判斷數據的邊界,解決了數據中極大極小值可能存在的問題

int i;

If(i>=1 && i<=12)

{

System.out.print(i+“月是月份”);//正確處理

}

If(i<1 ||1>12)

{

System.out.print(i+”不是月份”);//錯誤處理

}

等價類、邊界值都是為黑盒測試設計數據的

4+1理論

開區間:包含最大值和最小值的數據取值范圍 (1,12) 1<x<12

1,2,12,13

閉區間:不包含最大值和最小值的數據取值范圍 [1,12] 1<=x<=12

0,1,12,13

上點:邊界上的點,取值范圍的兩個端點

離點:離上點最近的點,在開區間中,離點是取值范圍內離上點最近的點;

在閉區間中,離點是取值范圍外離上點最近的點。

char c;

for(c=0;c<70000;c++)

{

System.out.print(c);

}

代碼可編譯,可運行,結果是死循環,

ping –l 5000 192.168.0.106 向IP地址為192.168.0.106發送字節數為50000的數據包

ping –t 5000 192.168.0.106 不間斷的向IP地址為192.168.0.106發送字節數為32的數據包

ping –l 5000 192.168.0.106 -t 不間斷的向IP地址為192.168.0.106發送字節數為50000的數據包

ping IP地址,向該IP地址發送數據包,數據包字節的取值范圍為[0,65500]

端口號,采用短整型,[0,65536]

數據設計和制造

數據組合:因果圖,正交排列(有較強的局限性)

掌握原理、目的、操作步驟

因果圖:(質量控制,也稱石川圖/魚骨圖/樹杈圖)

輸入的數據(因)

程序結果(果)

先分析因果關系

確定因與因,因與果之間的關系

用例評審標准:

1、100%覆蓋需求、功能、控件

2、執行效率,文字說明不夠清晰、步驟不嚴謹

等價類之間互不相交

將等價類中的數據進行等價分類,將有效等價類和無效等價類划分出來,再將它們進行組合

一個應用程序輸入項目的個數很多,等價類個數偏多,組合更多,人工成本過大

因果圖基本步驟:

1、 在程序中梳理輸入項目,(再根據輸入項目數據的特點)划分等價類(因)

2、 在程序中梳理得出預期結果(果)

3、考慮因之間的關系、產生的結果的組合(石川圖)

4、判定驅動法形成判定表、對判定表進行優化(化簡)

5、判定表的每一列即一條測試用例

解決問題:

分析數據之間組合產生的不同結果,從而設計測試用例/分析因與因之間的組合產生的不同結果,設計測試用例

原因為真,結果必為真

![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)

![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg)與(並且):兩個原因都為真,結果才為真

![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg)或:有一個原因為真,結果就為真

![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg)非:原因為假,結果為真

排他性約束:各個原因之間不能同時為真,但可以同時為假

![img](file:///C:/Users/82426/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg)

在一個復雜的應用程序中,可以局部的使用因果圖

使用因果圖的方法寫測試用例

1、 門檻相對較高(需要一定需求分析能力)

2、 需要較高的熟練度

3、 成本偏高(規模大、復雜度高)

正交

正交測試目標:

節省工作時間/節省測試用例設計時間,減少人工排列組合的時間

控制測試用例數量

具有比較均衡的覆蓋率

優點:

節省測試用例設計時間,減少人工排列組合的時間

控制測試用例數量

具有比較均衡的覆蓋率

特點:均勻分散、齊整可比(概率相同)

正交表必須滿足這兩個特點,有一條不滿足,就不是正交表:

1、 每列中不同數字(水平)出現的次數相等

2、 在任意兩列,其橫向組成的數字對中,每種數字對出現的次數相等

因素:考察的變量/被測的輸入項/ (外貌、家庭、個人、能力)

水平:因素被考察的值/輸入項中的等價類/控件中的取值范圍、等價類(身高、體重、顏值、背景、經濟、性格、三觀、年齡、經濟、生活)

因素1:水平1、水平2… 每個因素的水平數量相等

因素1:水平1、水平2…

……

Ln(mk) Ln_k_m

n:表的行數,需要測試組合的次數/測試用例的數量

k:表的列數,控件個數/因素的數量

m:每個控件包含的取值個數/水平的數量

正交表的表示形式:L行數(水平數因素數)

L9(34)表示用例數量為9,因素數量為4,每個因素含3個水平

正交表類型

1、完全符合正交表(每個因素的水平相同,且符合正交規律)的整齊排列直接套用現成的正交表

2、部分符合正交表(每個因素的水平相同,但因素或水平無現成的正交表),將因素或水平適當增減向可能的正交表靠攏,如果是減則在正交表基礎上適當人工增加用例

3、非整齊的排列借助正交公式縮減並計算出排列數量,再人工方式在最終的排列數量中按規律排列

正交表公式:N=(p1-1)q1+(p2-1)q2+…+1

p:水平的數量

q:擁有此水平數量的因素個數

N:最后求出的最后結果數量

1:校驗值

a:a1 a2

b:b1 b2

c:c1 c2 c3

d:d1 d2 d3

e:e1 e2 e3 e4 e5 e6

N=(2-1)2+(3-1)2+(6-1)*1+1=12

狀態圖

數據、操作動作

狀態圖的分析使用步驟

  1.   列出被測系統的輸入事件
    
  2.   對空閑狀態(程序剛啟動時的狀態)加所有可能的輸入,判斷產生哪些新狀態
    
  3.   對第二步產生的每個新狀態分別加所有可能的輸入
    
  4.   對第三步產生的每個新狀態分別加所有可能的輸入
    
  5.   對第四步產生的每個新狀態分別加所有可能的輸入
    
  6.   直到沒有新狀態產生
    

在空閑狀態下,單獨進行

第一輪

1、空閑->ip1->人民幣金額已輸入

2、空閑->ip2->國家已選擇

3、空閑->ip3->國家未選擇,人民幣金額未輸入

4、空閑->ip4->空閑

5、空閑->ip5->程序結束,退出

第二輪

1、人民幣金額已輸入->ip1->人民幣金額已輸入

6、人民幣金額已輸入->ip2->國家已選擇,人民幣金額已輸入

7、人民幣金額已輸入->ip3->國家未選擇,人民幣金額已輸入

4、人民幣金額已輸入->ip4->空閑

5、人民幣金額已輸入->ip5->程序結束,退出

第三輪

6、國家已選擇->ip1->國家已選擇,人民幣金額已輸入

2、國家已選擇->ip2->國家已選擇

8、國家已選擇->ip3->國家已選擇,人民幣金額未輸入

4、國家已選擇->ip4->空閑

5、國家已選擇->ip5->程序結束,退出

第四輪

7、國家未選擇,人民幣金額未輸入->ip1->國家未選擇,人民幣金額已輸入

6、國家未選擇,人民幣金額未輸入->ip2->國家已選擇,人民幣金額未輸入

3、國家未選擇,人民幣金額未輸入->ip3->國家未選擇,人民幣金額未輸入

4、國家未選擇,人民幣金額未輸入->ip4->空閑

5、國家未選擇,人民幣金額未輸入->ip5->程序結束,退出

4、國家未選擇,人民幣金額未輸入->ip6->空閑

第五輪

6、國家已選擇,人民幣金額已輸入->ip1->國家已選擇,人民幣金額已輸入

6、國家已選擇,人民幣金額已輸入->ip2->國家已選擇,人民幣金額已輸入

9、國家已選擇,人民幣金額已輸入->ip3->顯示金額

4、國家已選擇,人民幣金額已輸入->ip4->空閑

5、國家已選擇,人民幣金額已輸入->ip5->程序結束,退出

第六輪

7、國家未選擇,人民幣金額已輸入->ip1->國家未選擇,人民幣金額已輸入

6、國家未選擇,人民幣金額已輸入->ip2->國家已選擇,人民幣金額已輸入

7、國家未選擇,人民幣金額已輸入->ip3->國家未選擇,人民幣金額已輸入

4、國家未選擇,人民幣金額已輸入->ip4->空閑

5、國家未選擇,人民幣金額已輸入->ip5->程序結束,退出

7、國家未選擇,人民幣金額已輸入->ip6->國家未選擇,人民幣金額已輸入

第七輪

6、國家已選擇,人民幣金額未輸入->ip1->國家已選擇,人民幣金額已輸入

8、國家已選擇,人民幣金額未輸入->ip2->國家已選擇,人民幣金額未輸入

8、國家已選擇,人民幣金額未輸入->ip3->國家已選擇,人民幣金額未輸入

4、國家已選擇,人民幣金額未輸入->ip4->空閑

5、國家已選擇,人民幣金額未輸入->ip5->程序結束,退出

7、國家已選擇,人民幣金額未輸入->ip6->國家已選擇,人民幣金額未輸入

測試點:給出錯誤提示,點擊確定后,能否繼續正確的完成操作

每種狀態至少訪問一次

被用戶多次使用,常用的模塊、狀態要多次覆蓋

優點

能夠清晰地看出哪些狀態未被覆蓋到

能夠清楚的計算出狀態覆蓋力度

1、思路清晰,要求我們事先做好設計思路,需求分析

2、測試用例的概述、測試點要清晰准確

3、測試步驟簡潔,即別人看你的測試用例是,可以清晰地看到第一步做什么,第二步做什么

4、測試步驟清晰、具體,即不會產生歧義

5、無冗余即測試用例不要重復,每條用例的測試點要不一樣

6、100%覆蓋就是在設計用例時,用戶需求、功能、控件都要涉及到

7、可復用性,即測試用例可反復使用,可執行性高

1、100%覆蓋

2、預期結果是否確定、唯一

3、可執行性,語言描述是否清晰、步驟是否嚴謹

4、對中間、后台的數據的檢查

正確保存,即數據能夠完整、准確的保存到后台,

冗余:

在設計上存在等價類的子集相交(你在划分等價類的時候,就存在交集)

不是為了驗證重復性或業務需求,多條用例的數據步驟完全一樣

多條測試用例不能測試出需求、設計或程序或數據的不同類型和方面

考慮等價類、方法夠不夠

1、 需求點100%覆蓋

2、 被測功能點、控件100%覆蓋

3、 必須有正確數據、正確步驟和坑能導致出錯的數據、步驟

4、 有數據值域的必須考慮數據值域覆蓋:邊界值、等價類

5、 所有邊界值都必須覆蓋

6、 等價類必須包含有效和無效等價類

7、 所有等價類都必須覆蓋(等價類數量過多導致超過測試成本,優先考慮有效等價類,然后根據數據使用頻率、機率高低分優先級,高級優先覆蓋,同時考慮自動化測試)

8、 核心功能點必須被覆蓋多次()

9、 測試用例數量要大於功能點的數量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM