王萬金 韓成柱
(92124部隊 大連 116023)
根據(jù)GJB 2434A-2004《軍用軟件產(chǎn)品評價》的要求,軟件產(chǎn)品質(zhì)量需求一般包括內(nèi)部質(zhì)量、外部質(zhì)量和使用質(zhì)量。目前裝備軟件測試的重點集中在基于需求的測試,即側(cè)重軟件外部質(zhì)量和內(nèi)部質(zhì)量的驗證,而反映裝備軟件最終表現(xiàn)的使用質(zhì)量,即用戶的使用需求卻沒有被很好重視。
本文給出一種基于場景的裝備軟件測試方法。通過分析、構(gòu)建軟件使用場景,基于場景路徑覆蓋設(shè)計、生成用例,并在具體的實例中進行了應(yīng)用。
通常,我們把系統(tǒng)一個最小的功能狀態(tài)定義為原子場景。原子場景按照一定規(guī)則通過順序、條件、循環(huán)等各種控制結(jié)構(gòu)組成場景(Scenario)。
圖1 場景空間轉(zhuǎn)換示意圖
一個場景的狀態(tài)空間可以用一個三元組<S0,S,T>表示:
S0∈S,S0是狀態(tài)空間的初始狀態(tài)。
S是狀態(tài)空間所有狀態(tài)(原子場景)的集合,包含初始狀態(tài)和終止?fàn)顟B(tài)。
T是變遷的集合,當(dāng)Si和Ti相關(guān)聯(lián)的所有輸入變遷滿足使能時,狀態(tài)發(fā)生遷移Si→Sj。
隨著軟件工程化的深入開展,軟件文檔質(zhì)量較以前有了比較大的改善,基于需求進行使用場景構(gòu)建已經(jīng)具備了輸入條件。
對于使用場景的構(gòu)建,需要做好以下工作:
1)提取需求,確定軟件的初始狀態(tài)(即:場景的輸入);
2)確定軟件的最終狀態(tài)(即:場景的終止?fàn)顟B(tài));
3)分析歸納軟件的使用場景;
4)畫出軟件使用場景狀態(tài)圖。
對于狀態(tài)空間< S0,S,T >,設(shè)Si∈S且Ti∈T,對于所有的0 ≤ i≤(n-1),如果 Si→TiSi+1,則序列(S0,T0),(S1,T1),(S2,T2),…,(Sn-1,Tn-1),(Sn)稱 為 路徑。設(shè)P是路徑的集合。
場景覆蓋準(zhǔn)則一般有2種:狀態(tài)覆蓋、路徑覆蓋。
狀態(tài)覆蓋State Coverage(SC):當(dāng)測試集生成的測試路徑P,對于其中的狀態(tài)Si,如果滿足∑Si=S,則測試集滿足狀態(tài)覆蓋。
路徑覆蓋Path Coverage(PC):當(dāng)測試集生成的測試路徑P,對于其中的變遷Ti,如果滿足∑Ti=T,則測試集滿足路徑覆蓋。
顯然,路徑覆蓋的要求大于狀態(tài)覆蓋,本文將重點討論路徑覆蓋的用例設(shè)計、生成方法。
在軟件使用場景狀態(tài)圖的基礎(chǔ)上,路徑覆蓋準(zhǔn)則要求遍歷所有分支路徑,覆蓋從初始節(jié)點到終止節(jié)點的每條路徑至少一次。遍歷場景狀態(tài)圖的每一條路徑,即對應(yīng)一個測試用例。通過遍歷使用場景狀態(tài)圖中的全部路徑可以獲得所有的測試用例,然后確定相關(guān)的用例輸入。
基于場景路徑覆蓋的測試用例生成的步驟如下:
1)將場景狀態(tài)圖中的初始節(jié)點放入一個堆棧中,記錄初始節(jié)點為當(dāng)前節(jié)點;
2)查找當(dāng)前節(jié)點的后繼節(jié)點,按照深度優(yōu)先的方法進行遍歷,將該變遷及目標(biāo)節(jié)點壓入堆棧并將該路徑標(biāo)記為已訪問,將該目標(biāo)節(jié)點記錄為當(dāng)前節(jié)點;
3)重復(fù)步驟2),直到當(dāng)前節(jié)點沒有后繼節(jié)點(即當(dāng)前節(jié)點為終止節(jié)點)。此時,輸出從堆棧的棧底到棧頂?shù)乃泄?jié)點和變遷信息(即初始節(jié)點到終止節(jié)點構(gòu)成一個測試場景的路徑輸出);
4)從堆棧中依次彈出節(jié)點和變遷,如當(dāng)前棧頂對象是節(jié)點且該節(jié)點有尚未訪問的后繼節(jié)點和變遷,則轉(zhuǎn)到步驟2)、步驟3),直到彈出堆棧中的所有節(jié)點和變遷為止。
其中,步驟3)輸出的一條路徑構(gòu)成一個測試用例,所有輸出構(gòu)成測試用例集。
自動飲料機程序是軟件測試常用的例子,該問題的需求說明如下:
1)自動飲料機僅接受1元硬幣和5毛硬幣;2)1聽飲料價值1.5元;
3)當(dāng)硬幣總額超過1.5元以后,飲料機拒絕再接受其它的硬幣;
4)飲料機在用戶硬幣金額不足、沒有飲料、沒有找零硬幣時會分別給出提示“金額不足”、“沒有飲料”、“沒有零錢”,在這3種情況下,無法完成飲料購買的交易;在正常情況下,機器顯示“交易成功”;
5)飲料機程序處理流程:統(tǒng)計投入的硬幣錢數(shù)→統(tǒng)計機內(nèi)飲料數(shù)→統(tǒng)計機內(nèi)零錢數(shù),分別根據(jù)統(tǒng)計結(jié)果進行相應(yīng)處理。
根據(jù)飲料機需求,提取并定義場景的節(jié)點和變遷如表1。
很顯然,可以提取4種使用場景,分別為金額不足、沒有飲料、沒有找零、正常交易。經(jīng)過分析,對應(yīng)的場景狀態(tài)圖分別如圖2~5所示。
根據(jù)基于場景路徑覆蓋的測試用例設(shè)計、生成方法,依次生成的測試用例如表2。
表1 飲料機模型的節(jié)點和變遷定義表
圖2 場景1:“金額不足”場景狀態(tài)圖
圖3 場景2:“沒有飲料”場景狀態(tài)圖
圖4 場景3:“沒有找零”場景狀態(tài)圖
表2 飲料機模型的用例設(shè)計表
裝備軟件比較適用于基于狀態(tài)的行為描述,適合進行場景建模。按本文提出的基于場景的方法對自動飲料機模型進行使用場景構(gòu)建和測試用例的設(shè)計,試驗結(jié)果表明,該方法可以很好地設(shè)計和生成“基于使用”的測試用例。下一步工作:1)對場景狀態(tài)圖進行形式化描述,結(jié)合場景用例生成算法,自動生成測試路徑(測試用例);2)研究測試路徑轉(zhuǎn)換成測試環(huán)境支持的測試腳本,實現(xiàn)測試自動化。