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