學(xué)習(xí)筆記 基于UML順序圖的場(chǎng)景測(cè)試用例生成方法
本節(jié)向大家介紹一下基于UML順序圖的場(chǎng)景測(cè)試用例生成方法,該方法完全基于UML,而且生成的測(cè)試用例數(shù)量少,減少了測(cè)試工作量。下面就讓我們一起來看一下詳細(xì)介紹吧。
基于UML順序圖的場(chǎng)景測(cè)試用例生成方法
摘要本文提出了一個(gè)基于UML順序圖的場(chǎng)景測(cè)試方法,它以UML順序圖為主要測(cè)試模型,結(jié)合類圖和狀態(tài)圖生成所有的測(cè)試場(chǎng)景,然后找到與每一場(chǎng)景相關(guān)的環(huán)境條件并將它與方法序列、輸入、輸出合理組合作為覆蓋該場(chǎng)景的測(cè)試用例。該方法完全基于UML,而且生成的測(cè)試用例數(shù)量少,減少了測(cè)試工作量。
0引言
本文提出了一個(gè)基于UML模型圖來測(cè)試場(chǎng)景的方法,它以順序圖為主要測(cè)試模型,結(jié)合類圖和狀態(tài)圖導(dǎo)出所有的場(chǎng)景,并將與場(chǎng)景相關(guān)的環(huán)境條件與方法序列、輸入、輸出合理組合作為覆蓋該場(chǎng)景的測(cè)試用例。我們的工作具有兩方面的優(yōu)點(diǎn):測(cè)試方法完全基于UML模型,以便已經(jīng)使用UML的軟件系統(tǒng)能方便地采用,另一方面生成的測(cè)試用例數(shù)量少,減少工作量。
1實(shí)例
本文以DHCP[2]作為一個(gè)實(shí)例,使用UML的類圖、狀態(tài)圖和UML順序圖[3]來說明我們提出的一個(gè)場(chǎng)景測(cè)試用例生成方法。DHCP是由IETF進(jìn)行標(biāo)準(zhǔn)化的一個(gè)協(xié)議,提供一種動(dòng)態(tài)指定IP地址和配置參數(shù)的機(jī)制。我們選取了DHCP協(xié)議的一個(gè)子集,協(xié)議的一般過程如下:
1.客戶端廣播一個(gè)DHCP_DISCOVER消息。
2.每個(gè)具有網(wǎng)絡(luò)地址的服務(wù)可能響應(yīng)一個(gè)DHCP_OFFER消息,如果都沒有響應(yīng),則表示超時(shí)失敗。
3.如果客戶端接收到一個(gè)或多個(gè)DHCP_OFFER消息,則選擇其中一個(gè),然后廣播一條DHCP_REQUEST消息給所有的服務(wù)器,并附上選擇參數(shù)及指明哪一個(gè)服務(wù)器。
4.所有服務(wù)器接收到客戶的廣播信息,只有被選中的服務(wù)器才綁定地址給這個(gè)客戶,并發(fā)送確認(rèn)消息DHCP_ACK,連接成功;如果要求的地址不可得(可能分配給其它用戶),則服務(wù)器發(fā)送一個(gè)DHCP_NAK給客戶,連接失敗。
圖1顯示了DHCP協(xié)議的部分類圖。 圖2是實(shí)例中請(qǐng)求IP的順序圖 圖3是DHCP中Server類的狀態(tài)圖
圖1DHCP的部分類圖 圖2請(qǐng)求IP的順序圖 圖3DHCP-Server狀態(tài)圖
2UML順序圖的一個(gè)形式化定義
為了能在測(cè)試中找出所有的場(chǎng)景,下面給出順序圖的形式化定義:
定義1(順序圖)順序圖SD可以表示為一個(gè)六元組:SD=<O,M,E,→,msg,obj>,其中:
●O={O1,O2,…,Om},是對(duì)象的集合。O1,O2,…,Om都是順序圖中的對(duì)象。
●Mguard´message´name´parameter_list,是消息的集合。順序圖中的每一個(gè)消息都形如:“[衛(wèi)士條件]消息名(參數(shù))”。
●E=M{s,r},是事件集合。事件是指消息的發(fā)送和接收。對(duì)于消息msg,發(fā)送事件用<msg,s>表示,接收事件用<msg,r>表示。順序圖中所有發(fā)送消息事件的集合記為S,所有接收消息事件的集合記為R。SÇR=Æ,SÈR=E。
●→是消息集合M上的一個(gè)全序關(guān)系,表示順序圖中的消息在縱向時(shí)間軸上的先后關(guān)系。
●msg是從E到M的一個(gè)函數(shù)關(guān)系,msg(e)M表示事件e所對(duì)應(yīng)的消息。
●Obj是從E到O的一個(gè)函數(shù)關(guān)系,obj(e)O表示時(shí)間e所對(duì)應(yīng)的對(duì)象。對(duì)象Oi上所有事件的集合記為Ei,Ei={e|eEÙobj(e)=Oi}。
在如圖4所示的順序圖中:
O={obj1,obj2,obj3};M={m1,m2,m3};
E={(m1,s),(m1,r),(m2,s),(m2,r),(m3,s),(m3,r)};
→=m1→m2→m3.
圖4一個(gè)簡(jiǎn)單的UML順序圖
UML順序圖主要描述了對(duì)象間發(fā)送消息的時(shí)間順序。我們用符號(hào)‘<<’來表示事件間的先后關(guān)系,它滿足如下三個(gè)性質(zhì):
1.對(duì)同一消息而言,發(fā)送事件先于接收事件。
2.在同一對(duì)象的生命線上,若事件e1出現(xiàn)在發(fā)送事件e2的上方,則e1先于e2。
3.在同一個(gè)對(duì)象的生命線上,如果接收事件e1出現(xiàn)在e2的上方,并且它們分別對(duì)應(yīng)的發(fā)送事件也位于同一個(gè)對(duì)象的生命線上,則e1先于e2。
‘<<’順序關(guān)系是強(qiáng)制順序關(guān)系,那么即使它們?cè)陧樞驁D的時(shí)間軸上存在先后關(guān)系,這兩個(gè)事件實(shí)際發(fā)生的先后順序也是不確定的。例如圖4中,盡管(m1,r)在(m3,r)的上方,但是在系統(tǒng)實(shí)際運(yùn)行中,由于m1,m2,m3都是異步消息,因此(m1,r)并不一定先于(m3,r)發(fā)生,這是由于圖形表示的局限性造成的。
一個(gè)簡(jiǎn)單順序圖(不包括分支)刻畫了系統(tǒng)運(yùn)行的一個(gè)場(chǎng)景,其運(yùn)行過程表現(xiàn)為一個(gè)事件的序列(e1,e2,…,em),其中事件ei+1在事件ei后發(fā)生(1≤i≤m-1)。由于事件之間存在強(qiáng)制順序關(guān)系‘<<’,因此并不是所有事件序列都是順序圖允許的。而且,由于‘<<’并不是一個(gè)全序關(guān)系,所以一個(gè)順序圖的場(chǎng)景可能允許多個(gè)事件序列??梢杂靡粋€(gè)有向無環(huán)圖(DAG)來表示‘<<’關(guān)系,對(duì)于任意兩個(gè)事件ei,ei∈E,如果ei<<ei,則畫一條從ei指向ei的邊,直到所有事件都在這個(gè)有向圖上。
通過遍歷所得的DAG圖,可以很容易的得到順序圖中的每一個(gè)有效的事件序列。在圖4的例子中,<(m1,s),(m2,s),(m2,r),(m3,s),(m3,r),(m1,r)>和<(m1,s),(m1,r),(m2,s),(m2,r),(m3,s),(m3,r)>就是兩個(gè)有效的事件序列。
定義2(順序圖的場(chǎng)景)對(duì)于順序圖SD=<O,M,E,→,msg,obj>,場(chǎng)景定義為一個(gè)消息序列<M1,M2,…,Mm>,并且滿足下面兩個(gè)條件:
(1)所有M中的事件在序列中出現(xiàn)且僅出現(xiàn)一次,也就是說{M1,M2,…,Mm}=M且對(duì)于所有的ij,MiMj。
(2)對(duì)于任意兩個(gè)消息序列Mi,MjÎM,如果(Mi,s)<<(Mj,s),那么序列中Mi在Mj的前面。
根據(jù)場(chǎng)景的定義,通過所找到的合法的事件序列就可以確定與該事件序列相應(yīng)的場(chǎng)景。如圖4,<m1,m2,m3>就是一個(gè)有效的場(chǎng)景。#p#
3基于UML順序圖生成場(chǎng)景測(cè)試用例的方法
順序圖中的場(chǎng)景設(shè)計(jì)可能與實(shí)現(xiàn)不一致,例如由于消息名的編碼錯(cuò)誤、不正確的或缺少輸出等,那么通過執(zhí)行順序圖中的所有可能場(chǎng)景,至少能在其中的一個(gè)場(chǎng)景的執(zhí)行過程中達(dá)到該錯(cuò)誤,因此只要從順序圖中生成覆蓋所有場(chǎng)景的測(cè)試用例就能有效地找出存在的錯(cuò)誤。在測(cè)試用例的生成過程中,我們將環(huán)境條件與輸入,方法調(diào)用序列和預(yù)期輸出作為最終的測(cè)試用例,最后將系統(tǒng)測(cè)試后的實(shí)際輸出和方法調(diào)用序列與預(yù)期的輸出和方法調(diào)用序列進(jìn)行比較,從整體上驗(yàn)證系統(tǒng)的最終實(shí)現(xiàn)是否與設(shè)計(jì)一致,從而完成順序圖的場(chǎng)景測(cè)試。
3.1測(cè)試衡量方法
測(cè)試的主要評(píng)測(cè)方法包括覆蓋和質(zhì)量,測(cè)試覆蓋是對(duì)測(cè)試完全程度的評(píng)測(cè),質(zhì)量是對(duì)測(cè)試對(duì)象(系統(tǒng)或測(cè)試的應(yīng)用程序)的可靠性、穩(wěn)定性以及性能的評(píng)測(cè)。對(duì)于順序圖的場(chǎng)景測(cè)試,最基本的評(píng)測(cè)方法就是測(cè)試覆蓋,即要求針對(duì)每一個(gè)場(chǎng)景都至少生成一個(gè)測(cè)試用例。但是順序圖本身并不能充分地對(duì)系統(tǒng)交互行為進(jìn)行建模,僅通過順序圖并不能生成充分地場(chǎng)景測(cè)試用例。所以我們將順序圖與交互對(duì)象的狀態(tài)圖相結(jié)合,生成更充分的測(cè)試用例。為此,定義如下評(píng)測(cè)方法:
1)順序圖中的每個(gè)場(chǎng)景至少被測(cè)試一次。
2)如果順序圖中的對(duì)象存在狀態(tài)圖,那么與場(chǎng)景相關(guān)的每個(gè)狀態(tài)至少要被測(cè)試一次。
3.2UML順序圖場(chǎng)景測(cè)試用例生成方法的步驟
第一步,檢查順序圖中的每一個(gè)對(duì)象,如果其存在狀態(tài)圖,就將對(duì)象狀態(tài)加入到順序圖中。以DHCP-Server對(duì)象為例,其狀態(tài)圖如圖3所示,HasfreeIPaddresses和HasnofreeIPaddresses是Server可能處于的兩種狀態(tài),我們將這兩個(gè)狀態(tài)加入順序圖。
第二步,使用第3節(jié)介紹的方法通過遍歷順序圖中的事件序列從而找出所有的場(chǎng)景。在圖5中,消息4和消息7、消息10和消息12分別構(gòu)成了分支,處理分支時(shí),可以為順序圖構(gòu)造多個(gè)DAG圖,每個(gè)圖包含其中一條分支。這樣就將復(fù)雜順序圖化簡(jiǎn)成多個(gè)簡(jiǎn)單的順序圖來進(jìn)行處理,遍歷每個(gè)DAG圖就可以得到所有場(chǎng)景。圖5中,得到3個(gè)場(chǎng)景如下:
A:1,2,3,4,5
B:1,2,3,6,7,8,9,10
C:1,2,3,6,7,8,11,12
第三步,選定一個(gè)場(chǎng)景,根據(jù)其消息序列在順序圖中遍歷該場(chǎng)景,記錄場(chǎng)景的輸入和最終輸出。以場(chǎng)景B為例:
輸入:用戶調(diào)用connect操作。
預(yù)期輸出:返回“nak”消息,表示申請(qǐng)IP不成功。
第四步,確定每個(gè)場(chǎng)景的環(huán)境條件。首先從UML順序圖中找出所有的測(cè)試單元,在順序圖中,每一個(gè)交互的對(duì)象就是一個(gè)測(cè)試單元。本例中的DHCP_Client和DHCP_Server就是兩個(gè)測(cè)試單元;其次對(duì)每一個(gè)測(cè)試單元,從類圖中導(dǎo)出相應(yīng)的環(huán)境設(shè)置(包括對(duì)象屬性、操作和消息中的參數(shù))。結(jié)果如表1所示。
表1DHCP的測(cè)試單元與環(huán)境
測(cè)試單元
DHCP-Server
DHCP-Client
環(huán)境設(shè)置
Offer:Boolean
hasFreeIP:Boolean
無
找出環(huán)境設(shè)置之后,再為每一個(gè)場(chǎng)景找出相應(yīng)的選擇,從而確定其環(huán)境條件,如場(chǎng)景B中,Offer=true,hasFreeIP=false。
第五步,測(cè)試用例生成一個(gè)測(cè)試用例包括4個(gè)部分:環(huán)境條件、輸入、方法調(diào)用序列、預(yù)期輸出。對(duì)于場(chǎng)景B,所有這些信息已從前面的四步中生成,只要將它們組合在一起就可以了。場(chǎng)景B的測(cè)試用例為:
環(huán)境條件:DHCP-Server:offer=true,hasFreeIP=false
輸入:用戶調(diào)用connect操作。
方法調(diào)用序列:
Client.discover,Server.isServeroffer,
Client.request,Server.hasFreeIP,
Server.nak,user.notConnected
預(yù)期輸出:返回”nak”消息,表示申請(qǐng)IP不成功。
在這個(gè)測(cè)試用例中,方法調(diào)用序列就是該場(chǎng)景中的消息序列。
可用同樣的方法為所有場(chǎng)景生成測(cè)試用例。
4結(jié)束語
文[4]出現(xiàn)了一個(gè)基于UML順序圖設(shè)計(jì)的面向?qū)ο蟮能浖淖詣?dòng)測(cè)試的概念和相應(yīng)的實(shí)現(xiàn)工具SeDiTeC,該方法提出了一個(gè)可測(cè)試的順序圖的規(guī)則,并在SeDiTeC中實(shí)現(xiàn)了完整的測(cè)試過程,但是沒有詳細(xì)描述如何從順序圖中生成測(cè)試用例。文[5]指出了多態(tài)性對(duì)順序圖測(cè)試場(chǎng)景的影響,提出了相應(yīng)的對(duì)策,有效地解決了測(cè)試消息序列中多態(tài)消息的測(cè)試問題,但沒有說明測(cè)試用例如何生成。文[6]同樣提出了一個(gè)順序圖生成測(cè)試用例的方法,但是該方法沒有給出場(chǎng)景的分析,而且生成的用例數(shù)太多,工作量大。
本文提出的基于UML順序圖生成場(chǎng)景測(cè)試用例的方法,包括找出場(chǎng)景和生成測(cè)試用例,改進(jìn)了這類方法生成測(cè)試用例數(shù)多、工作量大的缺點(diǎn),減少了測(cè)試用例的重復(fù)生成。
【編輯推薦】