• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種從UML類圖和協(xié)作圖到狀態(tài)圖的轉(zhuǎn)換方法

      2011-08-01 05:39:44吳曉龍賁可榮
      關(guān)鍵詞:類圖狀態(tài)圖消息

      吳曉龍,賁可榮

      (海軍工程大學(xué)計(jì)算機(jī)工程系,湖北 武漢 430033)

      軟件模型是對(duì)軟件行為和軟件結(jié)構(gòu)的抽象描述。軟件行為可用系統(tǒng)輸入序列、活動(dòng)、條件、輸出邏輯或數(shù)據(jù)流進(jìn)行描述,軟件結(jié)構(gòu)則使用組件圖、部署圖等進(jìn)行描述[1]。UML是一種可視化的建模語(yǔ)言,它能讓系統(tǒng)的構(gòu)造者用標(biāo)準(zhǔn)的、易于理解的方式建立系統(tǒng)藍(lán)圖,并提供一種機(jī)制,以便于不同人之間有效地共享和交流設(shè)計(jì)結(jié)果[2]。UML包括一些可以相互結(jié)合為圖表的圖形元素,目的是用多個(gè)視圖來(lái)展示一個(gè)系統(tǒng),這組視圖被稱為一個(gè)模型。

      系統(tǒng)的需求分析階段通常使用時(shí)序圖來(lái)描述系統(tǒng)運(yùn)行的場(chǎng)景,而狀態(tài)圖展示系統(tǒng)中某個(gè)對(duì)象在其生存周期內(nèi)由于事件和觸發(fā)事件而發(fā)生狀態(tài)改變的過(guò)程,狀態(tài)圖更有利于發(fā)現(xiàn)對(duì)象交互的動(dòng)態(tài)錯(cuò)誤。史耀馨等在文獻(xiàn)[3]中介紹了一種從UML順序圖中合成狀態(tài)圖的方法;袁海等在文獻(xiàn)[4]中提出了從UML順序圖生成狀態(tài)圖的一種方法,但在添加語(yǔ)義約束時(shí),對(duì)于時(shí)序圖中消息的發(fā)送和接收對(duì)象狀態(tài)變量的變化未明確定義;馬偉等在文獻(xiàn)[5]中提出了基于UML時(shí)序圖的集成測(cè)試序列自動(dòng)生成方法,然后使用WP方法構(gòu)造測(cè)試序列,但只是從單一順序圖生成狀態(tài)機(jī),未考慮相關(guān)聯(lián)順序圖;YUE在文獻(xiàn)[6]中提出一種從用例模型自動(dòng)轉(zhuǎn)換成UML活動(dòng)圖的方法,在文獻(xiàn)[7]中提出一種從用例模型自動(dòng)轉(zhuǎn)化成UML狀態(tài)圖的方法,并提出了一種轉(zhuǎn)換工具aToucan,由于工具的復(fù)雜性,使得轉(zhuǎn)換過(guò)程不易控制。筆者對(duì)文獻(xiàn)[4]的方法進(jìn)行了改進(jìn),以類圖和協(xié)作圖為基礎(chǔ)模型,采用對(duì)象約束語(yǔ)言[8](object constraint language,OCL)對(duì)協(xié)作圖中每條消息加上前置和后置條件約束,在進(jìn)行消息的語(yǔ)義約束時(shí),強(qiáng)調(diào)只有接收消息才能使對(duì)象的狀態(tài)發(fā)生改變,添加的這些規(guī)約包含狀態(tài)變量的定義。該變量組成了系統(tǒng)的狀態(tài)向量,用于區(qū)分系統(tǒng)所處的不同狀態(tài)。生成的狀態(tài)圖具有較高的結(jié)構(gòu)化和可讀性。

      1 類圖、協(xié)作圖和狀態(tài)圖

      類圖(class diagram,CD)是顯示一組類、接口、協(xié)作及它們之間聯(lián)系的圖。UML中用矩形符號(hào)表示類。類的基本組成包括名稱、屬性及操作。

      協(xié)作圖(collaboration diagram,CD)[9]是一種交互圖。一個(gè)協(xié)作圖顯示了一系列的對(duì)象和在這些對(duì)象之間的聯(lián)系以及對(duì)象間發(fā)送與接收的消息。協(xié)作圖是強(qiáng)調(diào)發(fā)送與接收消息對(duì)象之間的結(jié)構(gòu)組織,可以用來(lái)按交互中的角色及其關(guān)系對(duì)一個(gè)用例特定的實(shí)現(xiàn)場(chǎng)景進(jìn)行建模,形式定義如下:

      協(xié)作圖CD為一個(gè)6元組,即CD=<O,M,E,→,vs,vs'> 。其中:O={O1,O2,…,Om}為對(duì)象的集合,O1,O2,…,Om為協(xié)作圖中的對(duì)象;M?前綴×守衛(wèi)條件×序列表達(dá)式×返回值×消息名×參數(shù)列表,為消息的集合;E=M×{s,r}為事件集合,事件是指消息的發(fā)送和接收,對(duì)于消息msg,發(fā)送事件用<msg,s>表示,接收事件用<msg,r>表示;→為消息集合M上的一個(gè)全序關(guān)系,表示協(xié)作圖中的消息按序列表達(dá)式約束的先后順序;vs,vs'為消息msg前后對(duì)象的狀態(tài)。

      狀態(tài)圖(statechart diagram,SD)[10]是一個(gè)實(shí)體基于事件反應(yīng)的動(dòng)態(tài)行為,顯示了該實(shí)體如何根據(jù)當(dāng)前所處的狀態(tài)對(duì)不同的事件做出反應(yīng),描述了實(shí)體所處的可能狀態(tài)以及狀態(tài)之間的轉(zhuǎn)換,并給出了狀態(tài)變化序列的起點(diǎn)和終點(diǎn)。形式化定義如下:

      狀態(tài)圖 SD 為一個(gè) 8元組:SD={S,T,α,β,γ,λ,V,v}。其中:S={s0,s1,…,sn}為狀態(tài)的集合,s0,s1,…,sn為狀態(tài)圖中的狀態(tài);T={t1,t2,…,tm}為轉(zhuǎn)換的集合,t1,t2,…,tm為狀態(tài)圖中的轉(zhuǎn)換;α(ti)為轉(zhuǎn)換 ti的源狀態(tài);β(ti)為轉(zhuǎn)換 ti的目標(biāo)狀態(tài);γ(si)為狀態(tài)si的后繼轉(zhuǎn)換,后繼轉(zhuǎn)換不唯一;λ為狀態(tài)轉(zhuǎn)換標(biāo)簽;V為狀態(tài)向量的集合;v為狀態(tài)對(duì)應(yīng)狀態(tài)向量的值。

      2 一個(gè)飲料銷售機(jī)實(shí)例

      筆者以一個(gè)飲料銷售機(jī)為例。飲料銷售機(jī)并不復(fù)雜,但足以說(shuō)明從協(xié)作圖自動(dòng)生成狀態(tài)圖的方法。圖1給出了飲料銷售機(jī)的類圖。

      圖1 飲料銷售機(jī)的類圖

      飲料銷售機(jī)有3個(gè)部分:前端、錢幣記錄儀及飲料分配器,圖1展示了其組合關(guān)系。前端接收顧客的選購(gòu)和錢幣,顯示信息,返還錢幣,從飲料分配器接收飲料并把飲料交給顧客。錢幣記錄儀從前端獲取顧客輸入信息,更新現(xiàn)鈔存儲(chǔ)以及找零錢。飲料分配器檢查飲料是否有貨及分發(fā)飲料。

      一個(gè)較復(fù)雜的系統(tǒng)通常由多個(gè)協(xié)作圖描述其內(nèi)部對(duì)象間的消息傳遞,在整個(gè)系統(tǒng)中,這些協(xié)作圖并不是孤立存在的,它們之間有一定的關(guān)系,如在兩個(gè)協(xié)作圖中涉及了幾個(gè)相同的對(duì)象,或兩個(gè)協(xié)作圖中的對(duì)象雖然一樣,但它們之間的消息傳遞發(fā)生在兩種不同的場(chǎng)景,這兩種場(chǎng)景在某一時(shí)刻不可能同時(shí)發(fā)生,只會(huì)有一種場(chǎng)景出現(xiàn)。圖2、圖3分別給出了飲料銷售機(jī)在飲料已賣完和顧客塞入零錢數(shù)目有誤兩種場(chǎng)景的協(xié)作圖。

      3 創(chuàng)建單個(gè)對(duì)象狀態(tài)圖

      UML協(xié)作圖并沒(méi)有包含足夠的語(yǔ)義信息,這給轉(zhuǎn)換成狀態(tài)圖帶來(lái)了麻煩,因此,在轉(zhuǎn)換前,必須對(duì)協(xié)作圖進(jìn)行擴(kuò)展,添加必要的語(yǔ)義信息。UML中提供的對(duì)象約束語(yǔ)言O(shè)CL是純描述性語(yǔ)言,只描述做什么,不描述如何做。OCL表達(dá)式只可用于描述狀態(tài)變化,即用于對(duì)操作/動(dòng)作的描述和聲明系統(tǒng)狀態(tài)的改變。可以用OCL定義一組表示對(duì)象某方面狀態(tài)的變量,該變量組成了系統(tǒng)的狀態(tài)向量,用于區(qū)分系統(tǒng)所處的不同狀態(tài)。對(duì)象之間的消息傳遞可能引起系統(tǒng)狀態(tài)向量的變化,也可能不改變系統(tǒng)的狀態(tài)向量。為協(xié)作圖中對(duì)象之間的消息加上前置條件和后置條件,前置條件和后置條件與操作或行為特征相關(guān),OCL表達(dá)式用<precondition>和<postcondition>標(biāo)識(shí)前置條件和后置條件,前置條件是原狀態(tài)與守衛(wèi)條件的組合,而后置條件為目標(biāo)狀態(tài)的謂詞。

      按以上所述,分別對(duì)飲料銷售機(jī)的3個(gè)部分用OCL進(jìn)行語(yǔ)義約束。

      前端:

      錢幣記錄儀:

      飲料分配器:

      在協(xié)作圖中,指向?qū)ο驩的消息msg對(duì)應(yīng)為對(duì)象O狀態(tài)圖中的事件,從對(duì)象O發(fā)出的消息msg對(duì)應(yīng)為對(duì)象O狀態(tài)圖中的動(dòng)作。因此,指向?qū)ο驩的消息,能夠改變對(duì)象O的狀態(tài),而由對(duì)象O發(fā)出的消息不改變對(duì)象O的狀態(tài)。

      為協(xié)作圖中的單個(gè)對(duì)象構(gòu)造狀態(tài)圖的方法為:按照協(xié)作圖的消息序列遍歷每一條與該對(duì)象相關(guān)的消息,對(duì)于消息msg,如果是對(duì)象的接收消息,則添加一個(gè)轉(zhuǎn)換,把消息msg作為轉(zhuǎn)換的事件;如果是對(duì)象的發(fā)送消息,則添加一個(gè)轉(zhuǎn)換,把消息msg作為轉(zhuǎn)換的動(dòng)作。筆者為簡(jiǎn)單起見,并不關(guān)心消息的細(xì)節(jié),如消息的參數(shù)、返回值等。對(duì)于一個(gè)對(duì)象,不允許同時(shí)接收一個(gè)以上的消息,也不允許在接收一個(gè)消息的同時(shí)發(fā)送另一個(gè)消息。用OCL定義的系統(tǒng)狀態(tài)向量來(lái)表示對(duì)象的狀態(tài),如果狀態(tài)向量的值發(fā)生變化,就表示對(duì)象遷移到一個(gè)新的狀態(tài)。在添加的過(guò)程中,若轉(zhuǎn)換的后繼狀態(tài)未在狀態(tài)圖中出現(xiàn)過(guò),則添加轉(zhuǎn)換至此狀態(tài);若后繼狀態(tài)在狀態(tài)圖中已出現(xiàn)過(guò),則產(chǎn)生回路。

      生成狀態(tài)圖的算法如下:

      輸入:一組包含 n個(gè)對(duì)象 O1,O2,…,On的協(xié)作圖 CD1,CD2,…,CDp,每個(gè)協(xié)作圖的消息序列為 msg1,msg2,…,msgq,…

      輸出:對(duì)象 O1,O2,…,On的合成狀態(tài)圖

      為對(duì)象構(gòu)造一個(gè)狀態(tài)圖,并設(shè)置初始狀態(tài)curr:=O[i][0];

      for each msgk∈協(xié)作圖CDj下的消息集合

      if存在轉(zhuǎn)換 t,使得 λ(t)=mkand α(t)=curr and v(β(t))=vs'(mk),

      則 curr:=β(t);

      else if存在狀態(tài)s,使得v(s)=vs'(mk)and vs(mk)! =vs'(mk)and 存在 γ(si)=mk+1,

      則增加一個(gè)轉(zhuǎn)換 t,α(t)=curr and β(t)=s and λ(t)=mkand curr:=s;

      else

      增加一個(gè)狀態(tài)s,使得v(s)=vs'(mk),

      增加一個(gè)轉(zhuǎn)換 t,使得 α(t)=curr and β(t)=s and λ(t)=mkand curr:=s

      通過(guò)以上算法,能夠得到協(xié)作圖里飲料銷售機(jī)的3個(gè)對(duì)象的狀態(tài)圖。如圖4~圖6所示,為了便于標(biāo)注,令 O[1]=a,O[2]=b,O[3]=c。

      圖4 前端狀態(tài)圖

      4 生成系統(tǒng)狀態(tài)圖

      系統(tǒng)中每一個(gè)對(duì)象生成狀態(tài)圖后,接著就是把這些對(duì)象的狀態(tài)圖合成,形成一個(gè)描述系統(tǒng)完整功能的狀態(tài)圖。

      合并單個(gè)對(duì)象的狀態(tài)圖為系統(tǒng)狀態(tài)圖時(shí),按每個(gè)協(xié)作圖中的消息順序,對(duì)每一條消息進(jìn)行遍歷,每條消息與兩個(gè)對(duì)象相關(guān)聯(lián),消息分別對(duì)應(yīng)關(guān)聯(lián)對(duì)象的事件與動(dòng)作。

      分別取飲料銷售機(jī)的3個(gè)對(duì)象的初始狀態(tài)作為系統(tǒng)狀態(tài)圖的初始狀態(tài),即a0b0c0,首先遍歷飲料已賣完場(chǎng)景協(xié)作圖的消息序列:由于消息display screen,只與前端和顧客有關(guān),因此狀態(tài)變?yōu)閍1b0c0;同樣消息 insert()、request()、enter()也都只與前端和顧客有關(guān),因此只有前端改變狀態(tài),下一條與對(duì)象前端和飲料分配器關(guān)聯(lián)的消息get-CustomerInput()狀態(tài)變?yōu)閍5b1c0,按照該方法遍歷該協(xié)作圖余下消息;然后遍歷關(guān)聯(lián)協(xié)作圖的消息序列,即顧客塞入零錢有誤場(chǎng)景協(xié)作圖,在消息checkAvailability()之前狀態(tài)變化都與上一個(gè)協(xié)作圖相同,到達(dá)了狀態(tài)a5b2c1,下一條消息availability(),狀態(tài)變?yōu)閍5b5c3,在狀態(tài)a5b2c1產(chǎn)生分支,按照該協(xié)作圖消息序列遍歷下去,就生成了飲料銷售機(jī)的狀態(tài)圖,如圖7所示。

      5 結(jié)論

      協(xié)作圖強(qiáng)調(diào)對(duì)象的結(jié)構(gòu)組織和它們之間消息的發(fā)送和接收,筆者以類圖和協(xié)作圖作為基礎(chǔ)模型,首先分析了協(xié)作圖的語(yǔ)義信息,然后采用OCL對(duì)消息添加約束規(guī)約,從中提取相關(guān)信息自動(dòng)生成狀態(tài)圖。進(jìn)行消息的語(yǔ)義約束時(shí),對(duì)文獻(xiàn)[4]中時(shí)序圖消息的發(fā)送和接收對(duì)象狀態(tài)變量的變化未明確定義的問(wèn)題進(jìn)行了改進(jìn),強(qiáng)調(diào)只有接收消息才能使對(duì)象的狀態(tài)發(fā)生改變;轉(zhuǎn)換過(guò)程中,考慮到系統(tǒng)狀態(tài)變化來(lái)自多個(gè)協(xié)作圖場(chǎng)景,選擇了多個(gè)關(guān)聯(lián)協(xié)作圖場(chǎng)景進(jìn)行模型轉(zhuǎn)換,解決了文獻(xiàn)[5]中場(chǎng)景單一的問(wèn)題,根據(jù)上述方法能精確地捕捉協(xié)作圖中的語(yǔ)義信息生成狀態(tài)圖。生成的狀態(tài)圖具有較高的結(jié)構(gòu)化和可讀性,并可用于測(cè)試用例生成。

      圖7 飲料銷售機(jī)的狀態(tài)圖

      [1] 顏炯,王戟,陳火旺.基于模型的軟件測(cè)試綜述[J].計(jì)算機(jī)科學(xué),2004,31(2):184-187.

      [2] KUNDU D,SAMANTA D.A novel approach to generate test cases from UML activity diagrams[J].Journal of Object Technology,2009,8(3):66-83.

      [3] 史耀馨,崔萌,李宣東,等.基于MDA的UML模型轉(zhuǎn)換技術(shù):從順序圖到狀態(tài)圖[J].計(jì)算機(jī)工程與應(yīng)用,2004,40(13):40-45.

      [4] 袁海,李宣東,鄭國(guó)梁.從UML順序圖生成狀態(tài)圖的一個(gè)方法[J].計(jì)算機(jī)科學(xué),2003,30(6):155-161.

      [5] 馬偉,張毅坤.基于UML時(shí)序圖的集成測(cè)試序列自動(dòng)生成[J].計(jì)算機(jī)工程與應(yīng)用,2005,41(19):108-111.

      [6] YUE T,BRIAND L,LABICHE Y.An automated approach to transform use cases into activity diagram[C]//Sixth European Conference on Modelling Foundations and Application(ECMFA).Paris:[s.n.],2010:337-353.

      [7] YUE T,ALI S,BRIAND L.Automated transition from use cases to UML state machines to support statebased testing[C]//Accepted for Publication in Seventh European Conference on Modelling Foundations and Application(ECMFA).Birmingham:[s.n.],2011:336-342.

      [8] BINDER R V.面向?qū)ο笙到y(tǒng)的測(cè)試[M].華慶一,譯.北京:人民郵電出版社,2001:47-62.

      [9] 董玉村,李村合.基于UML協(xié)作圖的集成測(cè)試序列生成方法[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(5):96-98.

      [10] 陳卉.UML順序圖和狀態(tài)圖的形式化方法研究[D].南京:南京師范大學(xué)圖書館,2008.

      猜你喜歡
      類圖狀態(tài)圖消息
      基于Web 的高校資產(chǎn)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      航線網(wǎng)絡(luò)優(yōu)化方法研究
      基于語(yǔ)義和結(jié)構(gòu)的UML類圖的檢索
      一張圖看5G消息
      UML類圖元模型基于描述邏輯的表示及驗(yàn)證
      基于UML狀態(tài)圖的軟件系統(tǒng)測(cè)試用例生成方法
      UML類圖的一種表示方法
      消息
      消息
      消息
      张家界市| 阿拉善盟| 广东省| 新密市| 饶阳县| 西丰县| 加查县| 嵊泗县| 广汉市| 河间市| 治县。| 江达县| 盐城市| 潮州市| 关岭| 金平| 罗城| 逊克县| 工布江达县| 文成县| 安阳县| 广汉市| 通化县| 扎鲁特旗| 阿克| 沙洋县| 吉隆县| 墨玉县| 高青县| 达拉特旗| 彝良县| 会理县| 普宁市| 无为县| 凌源市| 南部县| 富顺县| 蓬莱市| 三门县| 郁南县| 平塘县|