陳翠娟
(閩江學(xué)院 軟件學(xué)院,福建 福州 350001)
基于UML活動圖的場景法測試用例生成策略的研究
陳翠娟
(閩江學(xué)院 軟件學(xué)院,福建 福州 350001)
傳統(tǒng)的軟件場景測試法存在著構(gòu)造場景難度大,場景數(shù)量龐大、冗余度高等問題.針對這些問題,本文提出了一種基于UML活動圖的場景法測試用例生成策略,利用活動圖和基本路徑覆蓋法壓縮、優(yōu)化測試場景和測試數(shù)據(jù),為軟件系統(tǒng)測試提供有效、可行、系統(tǒng)的方法.
UML;場景測試;基本路徑覆蓋法;控制流圖;獨(dú)立路徑
UML是一種可視化的建模語言,它通過圖形表示法從多個側(cè)面對系統(tǒng)的分析、設(shè)計、實(shí)現(xiàn)、測試等進(jìn)行刻畫.研究表明,采用有效的形式化方法來描述問題域,并選擇適當(dāng)?shù)臏y試策略,是設(shè)計和生成完備的測試用例集合的關(guān)鍵環(huán)節(jié)[1].活動圖是UML中的一種行為圖,它描述系統(tǒng)為完成某項(xiàng)功能而執(zhí)行的操作序列,其實(shí)質(zhì)就是流程圖,可用于描述程序流程和工作流程.所以活動圖是軟件系統(tǒng)測試,尤其是業(yè)務(wù)流程測試的重要手段.
場景測試法是通過構(gòu)建各種測試場景,對系統(tǒng)的功能點(diǎn)或業(yè)務(wù)流程進(jìn)行描述來設(shè)計測試用例的一種方法.場景測試法的關(guān)鍵就是構(gòu)建測試場景和生成測試數(shù)據(jù).本文通過研究如何運(yùn)用UML中的活動圖來構(gòu)建測試場景,然后利用基本路徑覆蓋法導(dǎo)出基本路徑集合,從中尋找獨(dú)立路徑,生成測試用例.
活動圖(Activity Diagram)是一種特殊形式的狀態(tài)機(jī)[2].活動圖中的狀態(tài)表示計算過程或業(yè)務(wù)流程中所處的各種狀態(tài).我們將活動圖做如下定義.
定義1一個活動圖是一個四元組AD={V0,VF(AD),V (AD),E(AD)}.
(1)V0表示活動圖中起始結(jié)點(diǎn),活動圖的起始結(jié)點(diǎn)只有一個;
(2)VF(AD)表示活動圖中的所有終止結(jié)點(diǎn)的集合;
(3)V(AD)={v1,v2,……,vn}表示活動圖中所有結(jié)點(diǎn)的集合;
(4)E(AD)={e1,e2,……,em}表示活動圖中所有邊的集合.
活動圖中的分支結(jié)點(diǎn)用于表示具有條件的行為,只有一個輸入轉(zhuǎn)換,可以有多個帶互斥的守衛(wèi)條件的輸出轉(zhuǎn)換.分叉用于表示多個控制并發(fā)執(zhí)行.
基本路徑覆蓋法是在控制流程圖的基礎(chǔ)上,分析環(huán)路復(fù)雜性,導(dǎo)出獨(dú)立路徑集合,從而設(shè)計測試用例的方法.控制流圖是一種用來描述控制流的圖形,圓圈表示結(jié)點(diǎn),帶箭頭的邊表示控制流的方向,結(jié)點(diǎn)和邊圈起的部分稱為區(qū)域.為了方便描述,我們做如下定義.
定義2基本路徑集合是從控制流圖的起始結(jié)點(diǎn)開始到終止結(jié)點(diǎn),由邊連接而成的結(jié)點(diǎn)序列的集合,記為PS={p1, p2,……,pnp},p為一條路徑,np為控制流程圖中的路徑總數(shù).
定義3環(huán)路度量又稱為環(huán)路復(fù)雜性,是基本路徑集合中獨(dú)立路徑的條數(shù).記為V(G).環(huán)路度量有三種方法:
(1)V(G)=M-N+2,其中M為圖中的總邊數(shù),N為圖的總結(jié)點(diǎn)數(shù);
(2)V(G)=P+1,其中P為圖中的判定結(jié)點(diǎn)數(shù),判定結(jié)點(diǎn)是該結(jié)點(diǎn)輸出邊數(shù)大于等于2的結(jié)點(diǎn);
(3)V(G)=A,A表示圖中的區(qū)域數(shù),區(qū)域是圖中邊和結(jié)點(diǎn)圈起來的部分,當(dāng)計算區(qū)域時,圖形最外圈應(yīng)記為一個區(qū)域.
定義4環(huán)路是指在控制流圖中,由邊和結(jié)點(diǎn)構(gòu)成了一個閉合回路.
定義5獨(dú)立路徑是指至少包含一條新邊的路徑,所謂的新邊就是指在前面已定義的獨(dú)立路徑集合中未曾用到的邊.我們將獨(dú)立路徑集合記為IDPS={idp1,idp2,……,idpmp},idp為一條獨(dú)立路徑.生成獨(dú)立路徑時,需要對環(huán)路進(jìn)行限制,采取不進(jìn)入環(huán)路或只進(jìn)入環(huán)路一次處理.
場景測試法是基于IBM公司提出的RUP的測試用例生成方法,該方法從系統(tǒng)分析的結(jié)果——用例出發(fā),首先從用例開始到結(jié)束遍歷其中的所有基本流和備選流,從基本流開始,再將基本流和備選流結(jié)合起來,可以確定用例場景,然后通過確定某個特定條件來生成每個場景的測試用例[3].
基于活動圖的場景測試策略就是利用可視化的UML的活動圖來構(gòu)建測試場景,然后將活動圖映射成為控制流圖,利用基本路徑覆蓋法導(dǎo)出獨(dú)立路徑集合,從而確定測試場景和測試用例的一種方法.傳統(tǒng)的場景測試法對于一些復(fù)雜的業(yè)務(wù)流程,選擇測試場景有一定難度,且容易遺漏.而且復(fù)雜業(yè)務(wù)流程中并發(fā)和分支較多,錯綜復(fù)雜,導(dǎo)致測試場景數(shù)量爆炸.采用基于活動圖的場景測試法,通過合并業(yè)務(wù)流程中并發(fā)執(zhí)行的活動和順序執(zhí)行的活動,從而大大減少測試場景和測試用例,提高測試的效率.
本節(jié)就某教務(wù)管理系統(tǒng)中的添加課程設(shè)置的系統(tǒng)功能為例,論述基于活動圖的場景法測試用例生成的全過程. 5.1 活動圖建模
在每個學(xué)期開學(xué)前,教務(wù)管理人員通過教務(wù)管理系統(tǒng)能為每門課程選擇任課教師、上課的時間和地點(diǎn),生成課程設(shè)置.根據(jù)需求,構(gòu)建課程設(shè)置功能的活動圖,如圖1所示.教務(wù)管理人員登錄系統(tǒng)后,可以添加教師信息和課程信息,這兩個活動可以并發(fā)執(zhí)行.然后選擇已有的教師和課程,以及上課時間、上課地點(diǎn)等,添加為課程設(shè)置,此時系統(tǒng)將進(jìn)行沖突檢查,檢查同一教師在同一時間是否有其他的課程,或是同一教室在同一時間是否已排了其他課程等.檢查通過的課程設(shè)置再檢查課時數(shù)是否符合課程要求,都符合要求則添加成功.
圖1 課程設(shè)置活動圖和控制流圖
根據(jù)前面的定義,此活動圖記為AD={V0,VF(AD),V(AD), E(AD)},其中結(jié)點(diǎn)集合V(AD)={V1,V2,……,V10},邊集合E(AD) ={e1,e2,……,e18},終止結(jié)點(diǎn)集合VF(AD)={Vf}.
活動圖中的各種并發(fā)活動總是從某個結(jié)點(diǎn)開始分叉,然后于某個結(jié)點(diǎn)匯合結(jié)束,可以把它看成是一個單入口和單出口的結(jié)點(diǎn).對于只有單一入口和單一出口的結(jié)點(diǎn),我們可以對它們進(jìn)行合并.假設(shè)對于活動圖中的分叉和匯合不做壓縮合并,那么并發(fā)活動的任意排列組合勢必造成場景數(shù)量爆炸.所以,我們將活動圖中V2和V3結(jié)點(diǎn)壓縮合并成一個活動的結(jié)點(diǎn)N1,合并后刪除e3、e4、e5、e6邊,則V(AD)’={V1, N1,……,V10},E(AD)’={e1,e7,e8,……,e18}.
5.2 活動圖映射為控制流圖
在實(shí)際應(yīng)用中,一個不太復(fù)雜的功能的測試場景,其路徑組合都是一個龐大的數(shù)字,為了能好地分析路徑,我們將活動圖映射為表現(xiàn)形式更為簡單的控制流圖.活動圖中順序執(zhí)行的結(jié)點(diǎn)沒有分支和分叉,只有一條輸入邊和一條輸出邊,可以合并為一個結(jié)點(diǎn),使得控制流圖進(jìn)一步簡化,有利于分析環(huán)路復(fù)雜和生成獨(dú)立路徑集合.如圖1,映射為控制流圖時可以將V0、V1和N1結(jié)點(diǎn)合并為M0,V5和V6結(jié)點(diǎn)合并為M1,V10和Vf結(jié)點(diǎn)合并為Mf結(jié)點(diǎn).合并后,得到右邊的控制流圖.
5.3 生成獨(dú)立路徑
(1) 按照定義3,計算環(huán)路復(fù)雜性,采用公式V(G) =M-N+2=8-7+2=3,或V(G)=P+1=2+1=3,或計算區(qū)域數(shù)V(G) =A=3;
(2) 按照定義4,生成獨(dú)立路徑集合IDPS={idp1,idp2, idp4},其中idp1表示獨(dú)立路徑M0→V4→M1→V8→Mf,idp2示獨(dú)立路徑M0→V4→M1→V7→V4→M1→V8→Mf,idp3示獨(dú)立路徑M0→V4→M1→V8→V9→M4→M1→V8→Mf.
每條獨(dú)立路徑就是一個測試場景,為每個測試場景設(shè)置一個測試用例.然后,在測試場景中運(yùn)行測試用例.最后,將期望的結(jié)果與實(shí)際輸出的結(jié)果做比較,如果兩個結(jié)果不相符,則表示在此路徑上存在錯誤,以此來達(dá)到測試軟件功能的目的.
本文采用可視化的UML活動圖對測試場景進(jìn)行描述,并對UML活動圖進(jìn)行壓縮、合并,然后采用基本路徑覆蓋法將化簡后的UML活動圖映射為更為形式化更為簡單的控制流圖,最后通過對控制流圖的分析得到獨(dú)立路徑集合,完成了場景測試中場景的構(gòu)建和測試用例的生成.通過實(shí)例的分析和演示,有效地證明了,基于UML活動圖的場景法測試用例生成技術(shù),能有效地解決由于活動并發(fā)執(zhí)行帶來的數(shù)量爆炸問題,大大減少了場景集的數(shù)量,提高了測試效率.——————————
〔1〕張楣,劉超,孫昌愛.基于UML活動圖模型的測試用例生成技術(shù)研究 [J].北京航空航天大學(xué)學(xué)報,2001,27(4) 433~437.
〔2〕Tombros D,Geppert A,Dittrieh K.Semantics of reactive componentsin event.driven workflow execution[C]// Proceedingsofthe InternationalConference on Advanced Information Systems Engineering.Barcelona,Spain,1997:409—422.
〔3〕徐宏喆,陳建明,等.UML自動化測試技術(shù)[M].西安:西安交通大學(xué)出版社,2006(8).
TP311.5
:A
:1673-260X(2017)05-0024-02
2017-01-16