引言
本文提出了一個基于UML模型圖來測試場景的方法,它以順序圖為主要測試模型,結合類圖和狀態圖導出所有的場景,并將與場景相關的環境條件與方法序列、輸入、輸出合理組合作為覆蓋該場景的測試用例。我們的工作具有兩方面的優點:測試方法完全基于UML模型,以便已經使用UML的軟件系統能方便地采用,另一方面生成的測試用例數量少,減少工作量。
1、實例
本文以DHCP[2]作為一個實例,使用UML的類圖、狀態圖和順序圖[3]來說明我們提出的一個場景測試用例生成方法。DHCP是由IETF進行標準化的一個協議,提供一種動態指定IP地址和配置參數的機制。我們選取了DHCP協議的一個子集,協議的一般過程如下:
1.客戶端廣播一個DHCP_DISCOVER消息。
2.每個具有網絡地址的服務可能響應一個DHCP_ OFFER消息,如果都沒有響應,則表示超時失敗。
3.如果客戶端接收到一個或多個DHCP_OFFER消息,則選擇其中一個,然后廣播一條DHCP_REQUEST消息給所有的服務器,并附上選擇參數及指明哪一個服務器。
4.所有服務器接收到客戶的廣播信息,只有被選中的服務器才綁定地址給這個客戶,并發送確認消息DHCP_ACK,連接成功;如果要求的地址不可得(可能分配給其它用戶),則服務器發送一個DHCP_NAK給客戶,連接失敗。
圖1顯示了DHCP協議的部分類圖。
![]() |
圖1:DHCP的部分類圖 |
圖2是實例中請求IP的順序圖。
![]() |
圖2:請求IP的順序圖 |
圖3是DHCP中Server類的狀態圖。
![]() |
圖3:DHCP-Server狀態圖 |
2、UML順序圖的一個形式化定義
為了能在測試中找出所有的場景,下面給出順序圖的形式化定義:
定義1(順序圖)順序圖SD可以表示為一個六元組:SD=
◆O={O1, O2, …,Om},是對象的集合。O1, O2, …,Om都是順序圖中的對象。
◆M guard´message´name´parameter_list,是消息的集合。順序圖中的每一個消息都形如:“[衛士條件]消息名(參數)”。
◆E=M {s, r},是事件集合。事件是指消息的發送和接收。對于消息msg,發送事件用
◆→是消息集合M上的一個全序關系,表示順序圖中的消息在縱向時間軸上的先后關系。
◆msg是從E到M的一個函數關系,msg(e) M表示事件e所對應的消息。
◆Obj是從E到O的一個函數關系,obj(e) O表示時間e所對應的對象。對象Oi上所有事件的集合記為Ei,Ei={e | e EÙ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:一個簡單的順序圖 |
順序圖主要描述了對象間發送消息的時間順序。我們用符號‘<<’來表示事件間的先后關系,它滿足如下三個性質:
1.對同一消息而言,發送事件先于接收事件。
2.在同一對象的生命線上,若事件e1出現在發送事件e2的上方,則e1先于e2。
3.在同一個對象的生命線上,如果接收事件e1出現在e2的上方,并且它們分別對應的發送事件也位于同一個對象的生命線上,則e1先于e2。
‘<<’順序關系是強制順序關系,那么即使它們在順序圖的時間軸上存在先后關系,這兩個事件實際發生的先后順序也是不確定的。例如圖4中,盡管(m1,r)在(m3,r)的上方,但是在系統實際運行中,由于m1, m2, m3都是異步消息,因此(m1,r)并不一定先于(m3,r)發生,這是由于圖形表示的局限性造成的。
一個簡單順序圖(不包括分支)刻畫了系統運行的一個場景,其運行過程表現為一個事件的序列(e1 , e2,…, em),其中事件ei+1 在事件 ei后發生(1≤ i ≤m-1)。由于事件之間存在強制順序關系‘<<’,因此并不是所有事件序列都是順序圖允許的。而且,由于‘<<’并不是一個全序關系,所以一個順序圖的場景可能允許多個事件序列?梢杂靡粋有向無環圖(DAG)來表示‘<<’關系,對于任意兩個事件 ei,ei∈ E,如果 ei<< ei,則畫一條從ei 指向ei 的邊,直到所有事件都在這個有向圖上。
通過遍歷所得的DAG圖,可以很容易的得到順序圖中的每一個有效的事件序列。在圖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)>就是兩個有效的事件序列。
定義2(順序圖的場景)對于順序圖SD=
(1)所有M中的事件在序列中出現且僅出現一次,也就是說{M1,M2,…,Mm}=M且對于所有的i j,Mi Mj。
(2)對于任意兩個消息序列Mi,MjÎM,如果(Mi,s)<<(Mj,s),那么序列中Mi在Mj的前面。
根據場景的定義,通過所找到的合法的事件序列就可以確定與該事件序列相應的場景。如圖4,
共2頁: 1 [2] 下一頁 |