耿 雪,鄒盛榮,劉曉瑩,姚聚義
(揚(yáng)州大學(xué) 信息工程學(xué)院,江蘇 揚(yáng)州 225009)
UML在軟件建模行業(yè)應(yīng)用普及[1],以圖形化的方式幫助開發(fā)人員直觀地理解系統(tǒng)的需求。在面向?qū)ο蟮能浖_發(fā)中,UML已經(jīng)成為事實(shí)上的建模標(biāo)準(zhǔn)[2]。但是,實(shí)際上UML是一種半形式化的建模語言,存在不精確性[3],無法進(jìn)行形式化的驗(yàn)證[4]。而形式化方法是一種嚴(yán)格基于數(shù)學(xué)的特種技術(shù),可以在安全性要求較高的系統(tǒng)中進(jìn)行驗(yàn)證。形式化方法的研究有很多。例如Z方法、B方法、Event-B方法等[5]。B方法是比較熱門和易于使用的形式化方法[6],Event-B是最新的B方法[7],具有精確的語義[8]。但是Event-B形式化方法基于大量的數(shù)學(xué)邏輯謂詞,對于軟件需求分析人員來說難以理解和應(yīng)用。鑒于UML不精確而Event-B方法雖精確不太易懂,將UML與Event-B相結(jié)合是一直以來研究的課題[9]。
UML與形式化方法的結(jié)合已有一些研究。例如,文獻(xiàn)[10]中評估了B模型和UML-B模型,UML-B模型與Event-B模型的可理解性,評估結(jié)果表明半形式化和形式化方法的結(jié)合促進(jìn)了參與者對于模型問題域的理解。Event-B形式化方法到UML的一些轉(zhuǎn)換方法已經(jīng)被提出[11]。UML到Event-B形式化方法的轉(zhuǎn)換方法也有一些被提出。例如,文獻(xiàn)[12]提出了在元模型層自動(dòng)地將UML圖轉(zhuǎn)換成Event-B形式化方法。文獻(xiàn)[13]提出了活動(dòng)圖到Event-B形式化方法的轉(zhuǎn)換。根據(jù)類圖到Event-B形式化方法的轉(zhuǎn)換,該方法被應(yīng)用在了歐洲鐵路信號系統(tǒng)中[14]。文獻(xiàn)[15-16]提出了順序圖到Event-B形式化方法的轉(zhuǎn)換。文獻(xiàn)[17]提出了協(xié)作圖、狀態(tài)圖到B形式化方法的轉(zhuǎn)換。但是上述所提到的轉(zhuǎn)換方法都是基于UML 14種圖的零散個(gè)別圖到Event-B形式化方法的轉(zhuǎn)換,沒有形成系統(tǒng)的轉(zhuǎn)換方法?;谏鲜鯱ML 14種圖的零散的轉(zhuǎn)換方法,在轉(zhuǎn)換的過程中,可能會(huì)存在轉(zhuǎn)換的不一致問題[18]和轉(zhuǎn)換沖突問題,難以應(yīng)用在實(shí)際的軟件開發(fā)過程中。因此,對于UML到Event-B形式化方法的轉(zhuǎn)換有必要加以系統(tǒng)化的研究。筆者認(rèn)為系統(tǒng)化地將UML轉(zhuǎn)換成Event-B形式化方法存在許多優(yōu)點(diǎn):一方面,軟件開發(fā)人員不僅可以依據(jù)圖形化的方式直觀理解系統(tǒng)的需求,而且可以使得UML精確化,易于軟件從業(yè)人員的使用;另一方面,將UML轉(zhuǎn)換成Event-B形式化方法,可以在軟件設(shè)計(jì)的早期進(jìn)行形式化的驗(yàn)證,提高軟件設(shè)計(jì)的可靠性,降低在軟件開發(fā)后期因解決缺陷和錯(cuò)誤所需付出的高額代價(jià)和成本。同時(shí),也有利于形式化方法的普及和應(yīng)用。
一般的軟件系統(tǒng)是中型系統(tǒng),代碼量在5 000行到5萬行之間,這種中型系統(tǒng)完全可以只選擇UML的用例圖、類圖、順序圖和狀態(tài)圖這四種圖就能夠很好地表達(dá)出來[19]。在軟件的需求分析階段,用例圖抽象地描述了系統(tǒng)的功能,對系統(tǒng)中的哪些用戶實(shí)現(xiàn)系統(tǒng)中的哪些功能進(jìn)行建模,即為軟件產(chǎn)品本身和軟件產(chǎn)品的使用者之間建模。類圖是使用最廣泛的UML圖,可以應(yīng)用于軟件開發(fā)的各個(gè)階段,在每個(gè)階段的抽象程度和詳細(xì)程度不同。類圖為系統(tǒng)的靜態(tài)結(jié)構(gòu)進(jìn)行建模,描述了系統(tǒng)中的元素以及這些元素之間的關(guān)系。UML中的狀態(tài)圖不僅可以詳細(xì)描述實(shí)體對象和整個(gè)系統(tǒng)的狀態(tài),同時(shí)也可以描述狀態(tài)轉(zhuǎn)換過程中觸發(fā)狀態(tài)轉(zhuǎn)換的事件,以及系統(tǒng)中的實(shí)體對象在每個(gè)狀態(tài)中表現(xiàn)出的行為。UML中的順序圖描述了系統(tǒng)中實(shí)體對象之間的交互過程??梢詫τ美龍D中用例的詳細(xì)執(zhí)行過程進(jìn)行描述,即對系統(tǒng)中的復(fù)雜功能模塊的具體交互實(shí)現(xiàn)過程進(jìn)行詳細(xì)的展示。有了上述的四種圖,軟件生命周期的需求獲取、分析、設(shè)計(jì)、詳細(xì)設(shè)計(jì)就完全表達(dá)清楚。為了系統(tǒng)地將UML轉(zhuǎn)換成Event-B形式化方法,基于上述所提到的四種UML圖,該文提出了一種UML到Event-B形式化方法的轉(zhuǎn)換方法。以表格的形式展示了UML圖中的各元素與Event-B中的各元素之間的對應(yīng)關(guān)系,并給出了UML到Event-B形式化方法的轉(zhuǎn)換步驟。最后通過將該系統(tǒng)化的轉(zhuǎn)換方法應(yīng)用到電梯控制系統(tǒng)中,實(shí)現(xiàn)了電梯控制系統(tǒng)的UML圖到Event-B形式化方法的轉(zhuǎn)換,并基于Rodin平臺為電梯控制系統(tǒng)建模,對于模型中產(chǎn)生的證明義務(wù)進(jìn)行解除。使用ProB提供的證明器對所創(chuàng)建的模型進(jìn)行檢驗(yàn),確保沒有死鎖、不變量違規(guī)等問題?;谠撾娞菹到y(tǒng)的實(shí)例研究,證明了該系統(tǒng)性的轉(zhuǎn)換方法的可行性和有效性。
用例圖到Event-B形式化方法的一些轉(zhuǎn)換方法已經(jīng)被提出。例如,文獻(xiàn)[20]介紹了將UML用例圖轉(zhuǎn)換成Event-B方法的轉(zhuǎn)換步驟?;谝陨系霓D(zhuǎn)換方法,該文基于關(guān)系的角度改進(jìn)了UML用例圖到Event-B的轉(zhuǎn)換方法,對用例圖中的元素實(shí)現(xiàn)了更全面的翻譯。
用例圖中的參與者和用例轉(zhuǎn)換成上下文中的常量。用例圖中的各種關(guān)系則轉(zhuǎn)換為Event-B中的事件。其中,關(guān)聯(lián)關(guān)系和擴(kuò)展關(guān)系轉(zhuǎn)換成抽象機(jī)器中的事件。泛化關(guān)系和包含關(guān)系則通過Event-B的精化機(jī)制實(shí)現(xiàn)。特別的,如果是參與者元素構(gòu)成的泛化關(guān)系,則在擴(kuò)展的上下文中添加公理表示參與者之間的泛化關(guān)系。如果是用例元素構(gòu)成的泛化關(guān)系,則在精化的機(jī)器中添加事件表示用例之間的泛化關(guān)系。表1展示了用例圖到Event-B方法的轉(zhuǎn)換規(guī)則。
表1 用例圖轉(zhuǎn)換規(guī)則
2.1.1 參與者和用例
將用例圖中的參與者和用例轉(zhuǎn)換成Event-B中的常量,并在上下文中分別創(chuàng)建表示參與者和用例的集合ACTOR,USECASE。添加公理聲明上述的常量的類型。
CONSTANTS
actor1
usecase1
…
AXIOMS
axm1 : partition(ACTOR,{actor1}…)
axm2 : partition(USECASE,{usecase1}...)
END
2.1.2 關(guān) 系
用例圖中的關(guān)系都可以轉(zhuǎn)換成Event-B中的事件。用例圖中的關(guān)聯(lián)關(guān)系轉(zhuǎn)換成Event-B事件的具體過程展示如下:首先,抽象機(jī)器中需要?jiǎng)?chuàng)建變量actor,usecase以及basic_relation分別表示用例圖中的參與者、用例和關(guān)聯(lián)關(guān)系。其次,在不變量中聲明上述三個(gè)變量的類型,其中,basic_relation聲明為actor到usecase之間的映射關(guān)系,表示構(gòu)成該關(guān)聯(lián)關(guān)系的參與者和用例。Event-B的機(jī)器中表示關(guān)聯(lián)關(guān)系的變量聲明如下所示:
INVARIANTS
inv1 : actor∈ACTOR
inv2 : usecase∈USECASE
inv3 : basic_relation∈{actor}→{usecase}
最后,在Event-B中的機(jī)器中創(chuàng)建事件表示關(guān)聯(lián)關(guān)系。如下所示的usecase1事件表示參與者actor1和用例usecase1之間的關(guān)聯(lián)關(guān)系。事件的動(dòng)作模塊act1-act3對表示參與者、用例以及關(guān)聯(lián)關(guān)系的變量賦值。用例圖中的其他關(guān)系與關(guān)聯(lián)關(guān)系轉(zhuǎn)換成Event-B形式化方法類似。特別的,由參與者構(gòu)成的關(guān)聯(lián)關(guān)系在上下文中添加公理進(jìn)行表示。
BEGIN
act1 : actor : =actor1
act2 : usecase : =usecase1
act3 : basic_relation:∈{actor1}→{usecase1}
END
iUML-B是一個(gè)“類似UML”的圖形前端,用于為Event-B形式化方法的面向?qū)ο蟾拍罱!UML-B支持類圖和狀態(tài)機(jī)圖的建模[21],在Rodin平臺中可以實(shí)現(xiàn)自動(dòng)地將UML中的類圖和狀態(tài)機(jī)圖轉(zhuǎn)換成Event-B形式化方法。iUML-B應(yīng)用廣泛,許多使用iUML-B建模的研究實(shí)例已經(jīng)給出。例如,文獻(xiàn)[22]使用iUML-B中的類圖和狀態(tài)機(jī)圖為歐洲鐵路控制系統(tǒng)建模;文獻(xiàn)[23]使用iUML-B為血液透析機(jī)建模。
iUML-B中的類圖提供了可視化建模數(shù)據(jù)關(guān)系的方法。類圖中的類、屬性和關(guān)系與Event-B中的常量、變量等元素相關(guān)聯(lián)。特別的,類圖中的類還可以與Event-B中的集合元素相關(guān)聯(lián)。在轉(zhuǎn)換的過程中,可以對這些轉(zhuǎn)換而來的元素添加公理或不變量進(jìn)行約束。類中的方法轉(zhuǎn)換成Event-B中的事件,事件的動(dòng)作模塊表示了方法的具體執(zhí)行過程。表2展示了iUML-B中類圖到Event-B形式化方法的轉(zhuǎn)換規(guī)則。
表2 類圖轉(zhuǎn)換規(guī)則
順序圖到Event-B形式化方法的一些轉(zhuǎn)換方法已經(jīng)被提出[16]。基于以上的轉(zhuǎn)換方法中,順序圖在轉(zhuǎn)換成Event-B方法時(shí),順序圖中的通信對象和消息轉(zhuǎn)換成上下文中的常量,機(jī)器中添加變量控制順序圖中消息的傳遞順序,消息傳遞的源對象以及目標(biāo)對象。消息的具體傳遞過程則在機(jī)器中的事件進(jìn)行展現(xiàn)。表3展示了順序圖到Event-B形式化方法的轉(zhuǎn)換規(guī)則。
表3 順序圖轉(zhuǎn)換規(guī)則
2.3.1 通信對象和消息
順序圖中的消息轉(zhuǎn)換成上下文中的常量,上下文中添加表示消息的集合MESSAGE,公理中聲明表示消息的常量為集合MESSAGE中的元素,轉(zhuǎn)換過程如下所示。類似的,通信對象也轉(zhuǎn)換成上下文中的常量。
SETS
MESSAGE
CONSTANTS
message1
…
AXIOMS
partition : partition(MESSAGE,{message1},…)
END
2.3.2 交互過程
機(jī)器中創(chuàng)建變量source_obj,target_obj,message和order分別表示消息傳遞的源對象、目標(biāo)對象、待傳遞的消息以及消息的傳遞順序。機(jī)器中上述變量的類型聲明如下所示:
INVARIANTS
inv1 : source_obj∈OBJECT
inv2 : target_obj∈OBJECT
inv3 : message∈MESSAGE
inv4 : order∈N1
順序圖中對象之間消息的傳遞過程轉(zhuǎn)換成Event-B中的事件。順序圖中message1消息的傳遞過程轉(zhuǎn)換的事件如下所示。守衛(wèi)條件grd1通過判斷變量order的值確定消息的傳遞順序是否正確。動(dòng)作模塊act1-act4明確了消息傳遞的源對象、目標(biāo)對象和待傳遞的消息。
WHEN
grd1 : order=1
THEN
act1 : message: =message1
act2 : source_obj: =object1
act3 : target_obj: =object2
act4 : order: =order+1
END
iUML-B同樣也支持狀態(tài)機(jī)圖建模。狀態(tài)機(jī)圖轉(zhuǎn)換成Event-B方法時(shí),存在兩種轉(zhuǎn)換方式。一種是基于Enumeration translation的轉(zhuǎn)換方式;另一種是基于variables translation的轉(zhuǎn)換方式[24]。兩種轉(zhuǎn)換方式最大的區(qū)別在于是否自動(dòng)產(chǎn)生上下文,由于產(chǎn)生上下文的轉(zhuǎn)換方式更容易理解,因此,該文選擇的是基于Enumeration translation的轉(zhuǎn)換方式以便于理解和應(yīng)用。
在使用iUML-B為狀態(tài)機(jī)圖建模時(shí)。狀態(tài)機(jī)圖中的狀態(tài)轉(zhuǎn)換成常量,轉(zhuǎn)換可以鏈接到Event-B中的事件,事件的發(fā)生會(huì)觸發(fā)狀態(tài)的改變,動(dòng)作語句表示系統(tǒng)的具體操作。狀態(tài)機(jī)圖中的復(fù)合狀態(tài)則通過Event-B的精化機(jī)制實(shí)現(xiàn),抽象的上下文會(huì)通過Event-B方法中的擴(kuò)展關(guān)系擴(kuò)展出新的上下文,復(fù)合狀態(tài)在擴(kuò)展后的上下文中轉(zhuǎn)換成常量。表4中明確了狀態(tài)機(jī)圖到Event-B方法的轉(zhuǎn)換規(guī)則。
表4 狀態(tài)圖轉(zhuǎn)換規(guī)則
電梯是對可靠性和安全性要求較高的實(shí)時(shí)硬件系統(tǒng)。電梯控制系統(tǒng)是安全領(lǐng)域最常見的例子[25],大批學(xué)者在安全控制領(lǐng)域中常常以電梯控制系統(tǒng)作為研究實(shí)例[26-27],而且電梯是一個(gè)中型化的系統(tǒng)[28],適合于該系統(tǒng)化的轉(zhuǎn)換方法。本節(jié)將以電梯控制系統(tǒng)作為實(shí)例應(yīng)用在該系統(tǒng)化的轉(zhuǎn)換方法中,以驗(yàn)證該方法的可行性和可靠性。用戶請求使用電梯時(shí),電梯控制器根據(jù)用戶請求的樓層信息調(diào)度電梯向上或向下運(yùn)行,電梯運(yùn)行過程中,傳感器始終處于感應(yīng)狀態(tài)。電梯控制器在接收到傳感器發(fā)送的傳感信息后,控制電梯停止在相應(yīng)樓層,電梯停止在該樓層后,電梯門將在一定的時(shí)間間隔內(nèi)處于打開狀態(tài),等待用戶進(jìn)出電梯。
根據(jù)電梯控制系統(tǒng)的需求描述,得到電梯控制系統(tǒng)的用例圖,如圖1所示。
圖1 電梯模型用例圖
根據(jù)上述UML用例圖到Event-B的轉(zhuǎn)換方法。抽象機(jī)器m0中的RequestElevator事件由用例圖中ElevatorUser參與者和RequestElevator用例轉(zhuǎn)換而來。在RequestElevator事件中,表示用戶請求狀態(tài)的參數(shù)any_request被創(chuàng)建,動(dòng)作模塊act1-act4為表示關(guān)聯(lián)關(guān)系的變量和參數(shù)賦值。
ANY
any_request
WHERE
grd1 : any_request∈ BOOL
THEN
act1 : actor: =ElevatorUser
act2 : usecase: =RequestElevator
act3 : association :∈ {ElevatorUser} → {RequestElevator}
act4 : control_request: =any_request
END
類圖到Event-B形式化方法的轉(zhuǎn)換,抽象電梯模型中不再進(jìn)行展示,具體轉(zhuǎn)換過程將在精化模型的類圖中進(jìn)行描述。精化電梯模型的類圖如圖2所示。根據(jù)電梯模型需求的描述,精化的電梯模型中抽象出電梯用戶類和維修人員,這兩個(gè)類在轉(zhuǎn)換時(shí),則轉(zhuǎn)換成上下文中的常量,這與用例圖中類之間的泛化關(guān)系相一致。
圖2 電梯模型類圖
User類中的RequestMaintenance方法表示用戶請求維修電梯,轉(zhuǎn)換成的事件如下所示。該事件的動(dòng)作模塊act1-act2語句對變量control_request, Elevator_state進(jìn)行賦值,表示電梯處于故障狀態(tài)且無法響應(yīng)用戶的請求。
ANY
this_User // generated class instance
WHERE
instanceType_this_User_User : this_User ∈ User
THEN
act1 : control_request :∈ Elevator → {FALSE}
act2 : Elevator_state :∈ Elevator → {fault}
END
圖3描述了電梯響應(yīng)用戶請求的執(zhí)行過程。用戶向電梯發(fā)送請求后,電梯控制器會(huì)根據(jù)電梯的狀態(tài)判斷是否對用戶的請求進(jìn)行響應(yīng)。電梯處于非故障狀態(tài),電梯控制器調(diào)度電梯運(yùn)行,各樓層的傳感器持續(xù)感應(yīng)電梯,電梯控制器在接收到傳感信息后,將電梯停止在相應(yīng)的樓層。
圖3 電梯模型順序圖
JudgeRequest消息的傳遞過程轉(zhuǎn)換成的事件如下所示。首先,守衛(wèi)條件grd1會(huì)根據(jù)變量order的值判斷消息的傳遞順序。其次,動(dòng)作act1-act3明確了傳遞的消息為JudgeRequest,消息傳遞的源對象和目標(biāo)對象都是電梯控制器。最終,act4將order的值增一,表示順序圖中該消息傳遞過程的結(jié)束。
WHEN
grd1 : order = 3
THEN
act1 : source_obj: =ElevatorController
act2 : message: =JudgeRequest
act3 : target_obj: =ElevatorController
act4 : order: =order + 1
END
精化的電梯模型狀態(tài)機(jī)圖如圖4所示,主要對運(yùn)行狀態(tài)和故障狀態(tài)進(jìn)行精化。電梯在運(yùn)行過程中,電梯控制器調(diào)度電梯向上或向下運(yùn)行,傳感器始終在感應(yīng)電梯是否到達(dá)相應(yīng)的樓層。所以,running狀態(tài)中添加了dispatch和induce狀態(tài)。電梯處于故障狀態(tài)時(shí),安保人員在接收到維修請求后會(huì)進(jìn)行維修。因此,在故障狀態(tài)中,添加了maintenance狀態(tài)表示電梯被安保人員維修。
圖4 電梯模型狀態(tài)機(jī)圖
根據(jù)前面介紹的轉(zhuǎn)換規(guī)則,狀態(tài)圖中的InduceElevator事件轉(zhuǎn)換的Event-B方法中的事件如下所示:
ANY
any_Induce
WHERE
isin_running : Elevator_Statemachine = running
any_Induce_type : any_Induce∈ BOOL
THEN
act1 : isInduce : =any_Induce
enter_induce : Elevator_running: =induce
END
電梯在運(yùn)行過程中,電梯傳感器始終處于感應(yīng)狀態(tài),以此感應(yīng)電梯是否到達(dá)該樓層。該事件中添加了BOOL類型的參數(shù)any_Induce,以參數(shù)any_Induce的值判斷電梯傳感器是否感應(yīng)到電梯的到達(dá),事件的守衛(wèi)條件isin_running和動(dòng)作act1明確了電梯處于被感應(yīng)狀態(tài)。
該文使用了上述所提到的UML到Event-B的系統(tǒng)轉(zhuǎn)換方法在Rodin平臺中為電梯控制系統(tǒng)建模。Rodin平臺中自帶的證明器和Atelier B等提供的外部證明器對模型中產(chǎn)生的證明義務(wù)進(jìn)行解除。但是盡管模型中產(chǎn)生的證明義務(wù)全部得到了解除,這也并不能保證模型中的事件在動(dòng)態(tài)的運(yùn)行過程中不會(huì)出現(xiàn)死鎖問題。因此,又使用了ProB[29]提供的模型檢查工具,補(bǔ)充驗(yàn)證了模型的定理證明技術(shù),提高了模型的可靠性和精確性。此外,ProB還提供了一個(gè)動(dòng)畫模擬的功能,可以動(dòng)態(tài)地模擬模型中事件的執(zhí)行過程,以驗(yàn)證模型中可能會(huì)出現(xiàn)的問題,增強(qiáng)模型的可讀性和可理解性。因此,借助于ProB的動(dòng)畫模擬功能,動(dòng)態(tài)地模擬了電梯模型中事件的執(zhí)行過程。
基于Rodin平臺將電梯控制系統(tǒng)的UML圖轉(zhuǎn)換成Event-B形式化方法后,模型中產(chǎn)生的證明結(jié)果如圖5所示。圖5(a)中顯示抽象機(jī)器m0中共產(chǎn)生了26條證明義務(wù),圖5(b)中顯示精化機(jī)器m1中產(chǎn)生了17條證明義務(wù),這些證明義務(wù)均已通過自動(dòng)證明和交互式證明得到了解除,模型證明的結(jié)果驗(yàn)證了抽象轉(zhuǎn)換方法的可行性。
圖5 模型證明結(jié)果
圖5(c)中展示了電梯模型中的事件在動(dòng)態(tài)執(zhí)行過程中,共經(jīng)歷了45個(gè)變遷,在這些變遷轉(zhuǎn)換的過程中,ProB證明器排除了模型中可能會(huì)出現(xiàn)的死鎖等相關(guān)問題,提高了模型的精確性,驗(yàn)證了抽象轉(zhuǎn)換方法的正確性。
ProB可以動(dòng)態(tài)地模擬模型中事件的執(zhí)行過程以及系統(tǒng)當(dāng)前所處的狀態(tài),能夠被觸發(fā)的事件以加粗的箭頭顯示,加粗顯示的狀態(tài)表示系統(tǒng)當(dāng)前的狀態(tài)。圖6(a)中顯示系統(tǒng)當(dāng)前的狀態(tài)為idle,加粗顯示的事件為RequestElevator,即用戶可以請求使用電梯,但是由于維修保養(yǎng)等其他外部因素,電梯可能無法響應(yīng)用戶的請求,因此,ReponseRequest事件觸發(fā)的前提是ReuqestElevator事件以參數(shù)TRUE觸發(fā)。ReponseRequest事件被觸發(fā)后,圖6(b)中顯示running,dispatch和induce狀態(tài)均被選中,其中,running狀態(tài)中添加了不變量Elevator_door=FALSE,保證電梯門在電梯運(yùn)行過程中處于關(guān)閉狀態(tài)。電梯控制器在收到了傳感器發(fā)送的感應(yīng)信息后,控制電梯停止在該樓層。因此,StopElevatorAtFloor事件觸發(fā)的前提是InduceElevator事件以參數(shù)TRUE觸發(fā)。電梯停止后,即StopElevatorAtFloor事件觸發(fā)后,圖6(c)中顯示電梯處于stop狀態(tài)。由于電梯發(fā)生故障的不確定性,所以RequestMaintenance事件在任何狀態(tài)下都可以被觸發(fā),圖6(d)中顯示了該事件被觸發(fā)后,fault狀態(tài)被選中,變量control_request的值為FALSE,表示電梯處于故障狀態(tài)下,無法響應(yīng)用戶的請求。
圖6 ProB動(dòng)畫模擬狀態(tài)圖
該文提出的轉(zhuǎn)換方法系統(tǒng)地將半形式化建模語言(UML)轉(zhuǎn)換成Event-B形式化方法。該轉(zhuǎn)換方法將UML與Event-B形式化方法結(jié)合帶來了許多優(yōu)點(diǎn)。一方面,使UML精確化,可以在軟件設(shè)計(jì)的早期對所建立的模型進(jìn)行形式化的驗(yàn)證,提高軟件設(shè)計(jì)的可靠性和準(zhǔn)確性,有利于軟件從業(yè)人員的使用。另一方面,增強(qiáng)了形式化方法的可理解性和可讀性,有利于形式化方法的推廣和應(yīng)用。采用了四種圖系統(tǒng)地將UML轉(zhuǎn)換成Event-B形式化方法,一般的中型系統(tǒng)采用這四種圖就可以很好地表達(dá)清楚。對于復(fù)雜的特殊系統(tǒng)建模時(shí)可能需要添加其它的UML圖去補(bǔ)充。例如,對于實(shí)時(shí)嵌入式系統(tǒng),可能需要添加時(shí)間圖進(jìn)行補(bǔ)充。將來,可以對轉(zhuǎn)換的方法提出改進(jìn),實(shí)現(xiàn)更全面的將UML圖轉(zhuǎn)換成Event-B形式化方法。