在不同應(yīng)用場景中,我們該如何進(jìn)行測試呢?
在我們的日常工作中,我們通常接觸到的都是比較復(fù)雜的系統(tǒng)。而復(fù)雜的系統(tǒng)就意味著比較復(fù)雜的測試程序。首先,對于復(fù)雜的系統(tǒng)來說,如果想要做功能測試,一般需要考慮到測試數(shù)據(jù)的問題,還要考慮如何從全局出發(fā),既要把整個(gè)業(yè)務(wù)流程需要測試的內(nèi)容充分覆蓋到。保證即使是多個(gè)功能點(diǎn)交叉、存在復(fù)雜約束的條件下,也不會(huì)出現(xiàn)漏測或者新bug的問題。
其次,即使是單一功能點(diǎn),也需要足夠熟悉,才能確保功能能在操作流程中順利實(shí)現(xiàn)。
因此,作為軟件測試工程師,我們需要在日常工作中不斷積累經(jīng)驗(yàn),精進(jìn)技術(shù),確保自己能夠應(yīng)對不同場景完成測試任務(wù)。那么針對這些復(fù)雜的系統(tǒng),我們應(yīng)該如何進(jìn)行測試呢?今天我們就來回顧一下。
1、基于場景的測試
為了解決復(fù)雜的測試任務(wù),我們提出了基于場景的測試這一概念。這一概念主要以事件流為核心。當(dāng)然,這一概念,也是為我們后期做高層次的功能測試設(shè)計(jì)打基礎(chǔ)。那么,這一概念的基本思想是什么呢?
它是通過分析不同事件的觸發(fā)順序和處理結(jié)果,從而構(gòu)建各個(gè)事件流。并且,基于這些事件的觸發(fā)控制業(yè)務(wù)流程,形成多個(gè)不同場景,最終基于場景設(shè)計(jì)測試用例。

上圖是這一概念的原理。我們不難看出,該圖是一條自上而下、貫穿始終的基本事件流(簡稱基本流)。而其中,每個(gè)基本流代表一個(gè)被測的典型功能點(diǎn)或主業(yè)務(wù)。在基本流上,又存在多個(gè)觸發(fā)點(diǎn),不同觸發(fā)點(diǎn)又會(huì)產(chǎn)生不同事件,從而觸發(fā)業(yè)務(wù)流程分流,形成多個(gè)備選事件流(簡稱備選流)。由此,由基本流和備選流形成的不同業(yè)務(wù)流程(簡稱場景)誕生了。
2、測試用例設(shè)計(jì)
由于在不同的場景中,每個(gè)場景至少對應(yīng)一組輸入和一個(gè)預(yù)期輸出結(jié)果(簡稱測試用例)。因此,基于場景的測試用例將是一個(gè)既龐大,又復(fù)雜的工程。那么,對于這樣復(fù)雜的工程,測試難點(diǎn)有哪些呢?我們又應(yīng)該如何設(shè)置基本流與備選流呢?下面,我們來一一回答。
1)測試難點(diǎn)
主要有以下幾個(gè)難點(diǎn):
l?如何根據(jù)業(yè)務(wù),來構(gòu)建測試的基本流和備選流;
l?如何基于事件流構(gòu)建場景,從而滿足測試的完整性和無冗余性;
l?如何根據(jù)場景,合理設(shè)計(jì)測試用例。
2)基本流和備選流的設(shè)置
針對我們要重點(diǎn)測試的業(yè)務(wù),我們需要構(gòu)建一個(gè)基本流和和若干備選流。
(1)基本流
先來回顧一下概念:基本流是指。從系統(tǒng)的某個(gè)初始狀態(tài)開始,經(jīng)一系列狀態(tài)變化后,到達(dá)終止?fàn)顟B(tài)的過程中,最主要的一個(gè)業(yè)務(wù)流程。簡言之,就是說整個(gè)業(yè)務(wù)流程中最基本的一個(gè)流程。它不需要很復(fù)雜,但卻是一條高風(fēng)險(xiǎn)的業(yè)務(wù)流程。
(2)備選流
備選流是以基本流為基礎(chǔ),在經(jīng)過基本流上每個(gè)判定節(jié)點(diǎn)(包括條件判定和循環(huán)判定),滿足不同的觸發(fā)條件,而導(dǎo)致的其他事件流。
與基本流不同的是,基本流是一條完整的業(yè)務(wù)流程,而備選流僅是業(yè)務(wù)流程中的一個(gè)執(zhí)行片段。對比圖如下:

對于我們來說,備選流數(shù)目決定了我們的工作量有多大。一般情況下,備選流的數(shù)目,取決于判定節(jié)點(diǎn)的數(shù)目與事務(wù)分析的顆粒度。簡言之,顆粒度越細(xì),考慮得越周全,得到的數(shù)目就越多,測試工作量也就越大。
總之,如果你還是記不太清這兩者的關(guān)系,可以通過下圖回憶一下:

3、構(gòu)建場景
我們都知道,場景是基本流與備選流的有序集合。場景實(shí)際用途是用來描述流經(jīng)用例的路徑,即,整個(gè)測試過程經(jīng)歷哪些步驟(基本流和備選流)。這也就不難理解,為什么一個(gè)測試用例只能對應(yīng)唯一一個(gè)場景了。
那么,我們的場景應(yīng)該是什么樣的呢?下面我們來回憶一下:
l?場景1:基本流;
l?場景2:基本流+備選流1;
l?場景3:基本流+備選流2;
l?場景4:基本流+備選流2+備選流3;
l?場景5:基本流+備選流2+備選流4;
l?場景6:基本流+備選流5;
l?場景7:基本流+備選流1+備選流2+備選流5;
l?場景8:基本流+備選流1+備選流2+備選流3;
l?場景9:基本流+備選流1+備選流2+備選流4。
除了以上的幾種場景外,我們還可以通過增加更多備選流,從而構(gòu)建更多的場景。但是,在這個(gè)過程中,我們就會(huì)發(fā)現(xiàn),工作量變得異常龐大了。
那么,我們要如何做才能既給自己“減負(fù)”,同時(shí)又能合理的完成工作呢?我認(rèn)為,你至少需要考慮這3點(diǎn):
(1)最少的場景數(shù)等于事件流的總數(shù),即基本流與備選流的總數(shù);
(2)有且唯一有一個(gè)場景僅包含基本流;
(3)對應(yīng)某個(gè)備選流,至少應(yīng)有一個(gè)場景覆蓋該備選流,且在該場景中應(yīng)盡量避免覆蓋其他的備選流。
4、如何設(shè)計(jì)測試用例呢?
基于場景,我們可以按照如下步驟,來設(shè)計(jì)測試用例:
(1)分析被測業(yè)務(wù),基于風(fēng)險(xiǎn)的思想找到基本流和所有備選流;
(2)根據(jù)基本流和備選流構(gòu)造適當(dāng)規(guī)模的場景;
(3)根據(jù)場景設(shè)計(jì)測試用例;
(4)對每個(gè)測試用例補(bǔ)充測試數(shù)據(jù),并實(shí)施測試。