測試用例可以用來衡量一個項目測試質量,因此在平時的測試流程中,編寫測試用例就是測試過程中很重要的一步,每一個測試工程師都需要並且非常熟練的編寫測試用例,能在編寫測試用例中盡可能的覆蓋任何異常的測試點;如何能編寫優秀的測試用例,就需要測試人員掌握更多的用例編寫技巧以及思考出更多的測試點。針對於游戲測試,大多更偏向於功能方面的測試,根據功能測試用例逐項測試,檢查產品是否達到了策划的需求。功能測試主要采用黑盒測試策略設計測試用例,進行測試。主要功能模塊測試的測試用例設計方法包括:等價類划分、邊界值分析、錯誤推測法、因果圖和判定表、場景法、正交實驗法。下面就以上幾種方法進行一些分享。
1. 等價類划分法
等價類划分,指的是一種典型的、重要的黑盒測試方法。其就是解決如何選擇適當的數據子集來代表整個數據集的問題,通過降低測試的數目去實現“合理的”覆蓋,以此發現更多的軟件缺陷,統計好數據后由此對軟件進行改進升級。
舉例一: 設有一個認證條件,要求玩家輸入以年月表示的日期。假設日期限定在1990年1月~2049年12月,並規定日期由6位數字字符組成,前4位表示年,后2位表示月。現用等價類划分法設計測試用例,來測試程序的"日期檢查功能"。 首先,划分等價類並編號,下表等價類划分的結果
輸入等價類 | 有效等價類 | 無效等價類 |
---|---|---|
日期的類型及長度 | (1)日期的類型及長度 | (2)有非數字字符 (3)少於6位數字字符 (4)多於6位數字字符 |
年份范圍 | (5)在1990~2049之間 | (6)小於1990 (7)大於2049 |
月份范圍 | (8)在01~12之間 | (9)等於00 (10)大於12 |
設計測試用例,以便覆蓋所有的有效等價類,在表中列出了3個有效等價類,編號分別為(1)、(5)、(8),設計的測試用例如下:
測試數據 | 期望結果 | 覆蓋的有效等價類 |
---|---|---|
200211 | 輸入有效 | (1)、(5)、(8) |
為每一個無效等價類設計一個測試用例,設計結果如下:
測試數據 | 期望結果 | 覆蓋的無效等價類 |
---|---|---|
95June | 無效輸入 | (2) |
20036 | 無效輸入 | (3) |
2001006 | 無效輸入 | (4) |
198912 | 無效輸入 | (6) |
200401 | 無效輸入 | (7) |
200100 | 無效輸入 | (9) |
200113 | 無效輸入 | (10) |
舉例二: 登錄賬號的時候,郵箱地址輸入框輸入數據,程序檢測,判斷用戶輸入的郵箱地址是否合法。現用等價類划分法和邊界值分析法設計測試用例:
對輸入的要求:
a.用戶名只能用小寫字母和數字還有‘.’組成
b.郵箱用戶名首位必須是小寫字母或者數字
c.用戶名長度在6-30個字符之間
d.必須要有 @ 符號和必須要有 ‘.’
e.@后面要以.結束(*為任意字符串)
等價類表:
輸入等價類 | 有效等價類 | 無效等價類 |
---|---|---|
郵箱的組成 | (1)小寫字母、數字和‘.’、@ | (2)在非小寫字母、數字和‘.’、@的字符 |
用戶名首位 | (3)小寫字母或數字 | (4)以‘.’開頭 (5)以@開頭 |
用戶名長度 | (6)6-30個字符之間 | (7)小於6個字符 (8)大於30個字符 |
@符號和‘.’ | (9)@后面要以*.*結束(*為任意字符串) | (10)沒有@符號 (11)以@符號結尾 (12)@符號后面沒有‘.’(13)以‘.’結尾 (14)@ 符號和‘.’沒有字符串 |
覆蓋等價類的測試用例:
符號 | 輸入 | 覆蓋等價類 | 期望結果 |
---|---|---|---|
1 | zhangyuting313 @gmail.com | (1)、(3)、(6)、(9) | 有效輸入 |
2 | zhang-yuting313 @gmail.com | (2) | 無效輸入 |
4 | .zhangyuting313 @gmail.com | (4) | 無效輸入 |
4 | @zhangyuting313 @gmail.com | (5) | 無效輸入 |
5 | yu @gmail.com | (7) | 無效輸入 |
6 | zhangyuting313124567896321456987569 @gmail.com | (8) | 無效輸入 |
7 | zhangyuting313gmail.com | (10) | 無效輸入 |
8 | zhangyuting313@ | (11) | 無效輸入 |
9 | zhangyuting313@gmailcom | (12) | 無效輸入 |
10 | zhangyuting313@gmail. | (13) | 無效輸入 |
11 | zhangyuting313@.com | (14) | 無效輸入 |
2. 邊界值分析法
其實邊界值可以算是為了配合等價類而加的一個限制條件,一般會根據略小於最小值、略大於最大值、等於最小值/最大值進行邊界值的一些驗證;一般來說,關於區間型數據邊界值的測試,大多都是略小於最小值和略大於最大值是不滿足要求的,中間的數據是滿足需求的。 邊界值附近的數據確定的幾種方法:
項 | 邊界值 | 測試用例的設計思路 |
---|---|---|
字符 | 起始-1個字符/結束+1個字符 | 假設一個文本輸入區域允許輸入1~255個字符,輸入1個和255個字符作為有效等價類;輸入0個和256個字符為無效等價類,這幾個數值都屬於邊界條件值 |
數值 | 開始位-1/結束位+1 | 數據的輸入域為1~999,其最小值為1,最大值為999,則0、1000為邊界值 |
空間 | 小於空余空間一點/大於滿空間一點 | 測試數據存儲時,使用比最小剩余空間大一點(幾千字節)的文件作為最大值檢驗的邊界條件 |
方向 | 剛剛超過/剛剛低於 | 整數的話考慮最低值-1/最大值+1;其他非整數情況根據實際情況少於/大於最小/最大值 |
報表 | 第一行和最后一行 | 第一行和最后一行 |
循環結構 | 第2次和倒數第2次循環 | 第一次/小於最后一次循環 |
舉例一: 還是以上面要求玩家輸入以年月表示的日期來作為例子。假設日期限定在1990年1月~2049年12月,並規定日期由6位數字字符組成,前4位表示年,后2位表示月。現用等價類划分法設計測試用例,來測試程序的"日期檢查功能",下面是關於邊界值需要檢測的點。
序號 | 輸入及操作說明 | 期望的測試結果 |
---|---|---|
1 | 輸入198912 | 不滿足 |
2 | 輸入199001 | 滿足 |
3 | 輸入199002 | 滿足 |
4 | 輸入204911 | 滿足 |
5 | 輸入204912 | 滿足 |
6 | 輸入205001 | 不滿足 |
舉例二: 購買一個寶箱,一次性最多只能購買5個,以邊界值的標准可選取5個(正好等於)、6個(剛剛大於)、4個(剛剛小於),3個(正常值)作為邊界值來測試。
序號 | 輸入及操作說明 | 期望的測試結果 |
---|---|---|
1 | 一次性成功購買五個 | 購買成功 |
2 | 一次性購買6個 | 不能購買 |
3 | 一次性后買4個 | 購買成功 |
4 | 一次性購買3個 | 購買成功 |
3. 錯誤推測法
沒有確定的步驟,很大程度上是憑經驗, 結合以往測試經驗和直覺設計軟件在功能和流程上可能存在的各種錯誤,進行容錯性測試。例如輸入數據為零或輸出數據為零時容易發生錯誤的情況,所以可選擇輸入值為零的例子,以及使輸出值為零的例子;又如輸入表格為“空”或輸入表格只有一行是較易出錯誤的情況,所以可選擇表示這些情況的例子。根據字面意思,也就是列出可能出現問題的點,猜測哪些情況可能會有問題。
舉例一: 如面購買寶箱的例子,針對於需求,僅是對於給出的數據進行了測試,但是在實際情況中,實際要求中需要注意的點。根據平時測試,出現過問題的地方,所以又應該考慮到以下的測試點:
a.嘗試購買-1個寶箱
b.嘗試購買0個寶箱
c.多次購買小於5個寶箱
d.多次購買5個寶箱
e.購買寶箱后重啟客戶端/服務器
f........
舉例二:對於游戲中,需要做屏蔽詞功能,需要考慮到以下玩家會進行操作的功能點進行測試(多多自走棋為例),我們需要考慮到所有可能出現玩家輸入信息的地方,根據對平時對項目的熟悉以及自己的經驗,想到一些可能會出現問題的地方:
a.創建賬號(玩家填寫角色名稱)
b.聊天功能(世界聊天、好友私聊、隊伍聊天、發送邀約信息、制圖工坊、房間隊伍聊天、局內戰斗聊天、局內私聊、局內觀眾、局內裁判、觀戰發送聊天信息)
c.個人信息(玩家修改昵稱)
d.自建房間(玩家創建/修改房間昵稱)
4. 場景法
百度百科對場景法的解釋是:通過運用場景來對系統的功能點或業務流程的描述,從而提高測試效果的一種方法。用例場景來測試需求是指模擬特定場景邊界發生的事情,通過事件來觸發某個動作的發生,觀察事件的最終結果,從而用來發現需求中存在的問題。我們通常以正常的用例場景分析開始,然后再着手其他的場景分析。場景法一般包含基本流和備用流,從一個流程開始,通過描述經過的路徑來確定的過程,經過遍歷所有的基本流和備用流來完成整個場景。場景主要包括4種主要的類型:正常的用例場景,備選的用例場景,異常的用例場景,假定推測的場景。 在一個游戲功能中,將大功能拆分為一個個小功能,而這些小功能就可以視為一個個小場景,這些小場景的集合就成了這個完整的功能模塊。
舉例,比如多多自走棋的通行證每周挑戰功能:
根據這個界面,我們可以分為以下幾個部分:
a.每日獎勵
b.經驗等級
c.具體任務信息
d.購買等級
e.獎勵展示
f.視頻播放
g.幫助按鈕
h.購買等級
以上這些小功能以玩家可能會涉及到的操作為出發點,我們可以理解為一個個小場景,將他們組合起來就構成了這個完整的功能,這些小功能構成了整個每周挑戰這個功能。以上的這些小功能應該更多以玩家的角度進行考慮。
5. 因果圖法和判定表
等價類划分方法和邊界值分析方法,都是着重考慮輸入條件,但未考慮輸入條件之間的聯系、相互組合等。考慮輸入條件之間的相互組合,可能會產生一 些新的情況。但要檢查輸入條件的組合不是一件容易的事情,即使把所有輸入條件划分成等價類,他們之間的組合情況也相當多,因此需要考慮采用一種適合於描述對於多種條件的組合,相應產生多個動作的形式來考慮設計測試用例,這就需要利用因果圖。
下面先了解一下因果圖得一些規則,下面以圖的形式詳細說明6種因果邏輯。
c表示原因,e表示結果:
a.恆等:如果原因為真,那么結果必定為真。
b.非:只有原因為假,結果才為真。
c.與:只有2個原因都為真,那么結果為真。
d.或:2個原因中有一個為真時,結果就為真。
e.與非:先與后非。
f.或非:先或后非。
g.排他性約束:各個原因之間不能同時為真, 但可以同時為假。
h.包含性約束:各個原因中總有一個為真。即可以同時為真,但不可以同時為假。
i.必要性約束:當原因a為真時,原因b必須同時為真
j.唯一性約束:有且只有原因a和原因b中的一個為真但是原因b為真時,原因a既可以為真,也可以為假。
k. 掩碼標記(結果約束):如果結果b為真,那么結果a一定為假,如果結果b為假,則結果a的狀態不定
舉例一: 以多多自走棋為例,玩家查看圖鑒中的棋子:第一步必須是A(點擊倉庫)或B(點擊大廳右上角圖鑒按鈕),第二步必須是C(點擊棋子圖鑒),在此情況下玩家進入到棋子圖鑒界面,但如果第一步不正確,得出結論L;如果第二步驟不是C,則得出結論M。 首先我們整理一下,得出以下信息以及因果圖:
根據題意,原因和結果如下:
原因:
1——第一步是A;
2——第一步是B;
3——第二步是點擊棋子圖鑒。
結果:
21——進入棋子圖鑒;
22——得出結論L;
23——得出結論M。
其對應的因果圖如下:
11為中間節點;考慮到原因1和原因2不可能同時為1,因此在因果圖上施加E約束。
根據因果圖建立判定表: 因為 一般可以根據因果圖畫出判定表,判定表里只有0,1(1代表真,0代表假)兩個數字。若輸入條件有n個,則用例考慮的情況有2n種,即8種:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
---|---|---|---|---|---|---|---|---|---|
條件(原因) | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
條件(原因) | 2 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
條件(原因) | 3 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
條件(原因) | 11 | 1 | 1 | 1 | 1 | 0 | 0 | ||
動作(結果) | 22 | 0 | 0 | 0 | 0 | 1 | 1 | ||
動作(結果) | 21 | 1 | 0 | 1 | 0 | 0 | 0 | ||
動作(結果) | 23 | 0 | 1 | 0 | 1 | 0 | 1 |
表中8種情況的左面兩列情況中,原因①和原因②同時為1,這是不可能出現的,故應排除這兩種情況。表的最下一欄給出了6種情況的測試用例,這是我們所 需要的數據。所以用例有:
a.1,3------21
b.1-----23
c.2,3----21
d.2-----23
e.3---22
f.不進行任何操作-----22,23
6. 正交試驗法
利用正交實驗設計方法設計測試用例,比使用等價類划分、邊界值分析、因果圖等方法有以下優點:節省測試工作工時;可控制生成的測試用例數量;測試用例具有一定的覆蓋率。
舉例:
這是游戲賬號注冊的一個窗口。我們可以看到要測試的控件有3個:郵箱地址、密碼、驗證碼,也就是要考慮的因素有三個;而每個因素里的狀態有兩個:填與不填。 選擇正交表時分析一下:
a.表中的因素數>=3;
b.表中至少有3個因素數的水平數>=2;
c.行數取最少的一個。
從正交表公式中開始查找,結果為:
L4(23)(0-填 1-不填):
1 | 2 | 3 | |
---|---|---|---|
1 | 0 | 0 | 0 |
2 | 0 | 1 | 1 |
3 | 1 | 0 | 1 |
4 | 1 | 1 | 0 |
變量映射如下
郵箱地址 | 密碼 | 驗證碼 | |
---|---|---|---|
1 | 填 | 填 | 填 |
2 | 填 | 不填 | 不填 |
3 | 不填 | 填 | 不填 |
4 | 不填 | 不填 | 填 |
測試用例如下:
a.填寫郵箱地址、填寫密碼、填寫驗證碼
b.填寫郵箱地址、不填密碼、不填驗證碼
c.不填郵箱地址、填寫密碼、不填驗證碼
d.不填郵箱地址、不填密碼、填寫驗證碼 增補測試用例
e.不填郵箱地址、不填密碼、不填驗證碼
從測試用例可以看出:
a.如果按每個因素兩個水平數來考慮的話,需要8個測試用例,而通過正交實驗法進行的測試用例只有5個,大大減少了測試用例數。用最小的測試用例集合去獲取最大的測試覆蓋率。
b.因素數不相同 如果因素數不同的話,可以采用包含的方法,在正交表公式中找到包含該情況的公式,如果有N個符合條件的公式,那么選取行數最少的公式。
c.水平數不相同 采用包含和組合的方法選取合適的正交表公式。
PS:
我們是行者AI,我們在“AI+游戲”中不斷前行。
如果你也對游戲感興趣,對AI充滿好奇,那就快來加入我們(hr@xingzhe.ai)。