李宗花
(淮陰師范學(xué)院計算機科學(xué)與技術(shù)學(xué)院,江蘇淮安 223300)
交互流建模語言(Interaction Flow Modeling Language,IFML)由OMG 提出,可為系統(tǒng)架構(gòu)師、軟件工程師和軟件開發(fā)人員提供用于定義和描述應(yīng)用程序前端主要維度的交互流細(xì)節(jié)[1-2]。不同于HTML5平臺的特點,IFML 模型側(cè)重于業(yè)務(wù)模型的可用性和可讀性,支持以圖形方式描述與平臺無關(guān)的交互細(xì)節(jié),其描述重點是最終用戶理解的應(yīng)用程序行為和體系結(jié)構(gòu),而忽略執(zhí)行平臺的細(xì)節(jié)[3-4]。因此,IFML 模型可對Web 應(yīng)用系統(tǒng)、桌面應(yīng)用程序、C/S 應(yīng)用程序、移動應(yīng)用程序等平臺和系統(tǒng)進行交互流建模。當(dāng)前對IFML 模型的研究主要集中在語義描述[5-6]、模型自動生成[7-8]、基于IFML 的前端建模[9-10]和可視化建模工具[11-12]等方面。
服務(wù)內(nèi)容模型(Service Content Model,SCM)基于UML2.0 類模型,著重定義服務(wù)實體的屬性和操作,并根據(jù)服務(wù)實體之間的交互行為定義服務(wù)實體之間的關(guān)系。在已有的相關(guān)研究[13-15]和OMG 標(biāo)準(zhǔn)文檔[16]中,SCM 模型能夠在平臺相關(guān)模型(Platform Specific Model,PSM)層次上直接映射為數(shù)據(jù)庫的實體和關(guān)系。因此,當(dāng)前諸多研究基于模型驅(qū)動框架(Model Driven Architecture,MDA)技術(shù),研究用例模型至類模型的轉(zhuǎn)換[17]、問題模型至類模型的轉(zhuǎn)換[18]和業(yè)務(wù)流程模型至類模型的轉(zhuǎn)換[19-20]等。然而,在這些聚焦于類模型的轉(zhuǎn)換中,轉(zhuǎn)換結(jié)果主要是類的概念模型,而類的操作往往由軟件開發(fā)人員手動設(shè)計。可見,這些模型轉(zhuǎn)換研究忽略了前端交互模型中的動作和交互流事件對系統(tǒng)類模型的影響,特別是類的操作建模往往與前端交互模型中的動作和事件相關(guān)。因此,有必要研究前端交互模型至服務(wù)內(nèi)容模型的映射,以提高軟件開發(fā)質(zhì)量。
SCM 模型中的重要元素包括服務(wù)實體、服務(wù)實體屬性和操作,以及服務(wù)實體之間的關(guān)系。現(xiàn)有研究聚焦于類模型至數(shù)據(jù)庫關(guān)系模型的映射,而針對其他模型至SCM 模型的自動映射研究較少。眾所周知,SCM 模型的構(gòu)造和設(shè)計往往與需求模型緊密相關(guān),是軟件系統(tǒng)中最重要的一個模型?,F(xiàn)有需求模型至SCM 模型的自動映射研究主要包括以下幾類:
(1)形式化模型至類模型的映射。文獻[15]基于領(lǐng)域本體模型,利用檢索技術(shù),從領(lǐng)域本體模型中通過設(shè)計概念查詢與UML 元素查詢提取領(lǐng)域本體模型中的概念實體和實體關(guān)系,并利用最短路徑算法剔除相似的概念實體。這種語義技術(shù)與信息技術(shù)的結(jié)合,可提高概念實體抽取效率。文獻[21]則從對象約束語言(Object Constraint Language,OCL)不變量中,利用約束邏輯編程范式(Constraint Logic Programming,CLP)推理UML 類圖的元素,并從正確性屬性方面驗證生成的模型實例,該方法可用于推理和驗證UML 類模型設(shè)計。
(2)業(yè)務(wù)過程模型至類模型的映射。文獻[20]基于模型驅(qū)動技術(shù),利用查詢、視圖和轉(zhuǎn)換(Query/View/Transformation,QVT)語言,以UML 活動圖為橋梁,設(shè)計了業(yè)務(wù)流程模型元素至UML 活動圖模型元素的轉(zhuǎn)換和UML 活動圖模型元素至類模型元素之間的轉(zhuǎn)換。通過UML 活動圖,可有效地將業(yè)務(wù)流程模型中的任務(wù)、池、消息流等元素轉(zhuǎn)為類模型中的類、屬性和關(guān)系等元素。但在設(shè)計的轉(zhuǎn)換規(guī)則中,由于某些轉(zhuǎn)換約束較強,使得業(yè)務(wù)過程模型中如中間事件等元素被忽略。
(3)UseCase 用例模型至類模型的映射。文獻[17]基于MDA 框架,利用UseCase 模型代表業(yè)務(wù)系統(tǒng)的計算無關(guān)模型(Computation Independent Model,CIM),利用UML 類模型代表平臺無關(guān)模型(Platform Independent Model,PIM),利用關(guān)系模型代表PSM,設(shè)計了UseCase 模型至類模型、類模型至關(guān)系模型的映射。該方法依賴于完整的MDA 框架體系,使軟件系統(tǒng)的設(shè)計與用戶需求可很好地保持一致。
上述以需求模型為基礎(chǔ),實現(xiàn)類模型映射的研究缺少語義一致性驗證,其SCM 模型是否滿足用戶需求主要依賴于系統(tǒng)分析員的建模能力,具有一定的主觀性和局限性。因此,本文在這些模型轉(zhuǎn)換的基礎(chǔ)上,從用戶角度出發(fā),聚焦于用戶交互流信息,設(shè)計交互流、動作與事件等信息至類、屬性和操作元素的映射,基于QVTo(QVT Operational mappings)語言實現(xiàn)IFML 模型至SCM 模型的轉(zhuǎn)換,并利用語義驗證技術(shù)驗證IFML 模型與SCM 模型的一致性。與其他模型至類模型的映射研究相比,IFML 模型至SCM 模型的轉(zhuǎn)換使得業(yè)務(wù)系統(tǒng)的內(nèi)容模型與用戶需求更加一致,進一步縮短了SCM 模型與用戶需求的鴻溝。
IFML 模型從用戶角度描述前端的交互細(xì)節(jié),適用于交互流建模,其元模型如圖1 所示??梢钥闯觯琁FML 元模型的主要元素包括視圖元素(ViewElement)、視圖組件(ViewComponent)、操作(Action)、事件(Event)、交互流(InteractionFlow)、條件表達(Expression)、參數(shù)(Parmeter)、內(nèi)容綁定(ContentBinding)、視圖容器(ViewContainer)等。
Fig.1 IFML meta model圖1 IFML元模型
分析圖1 所示的元模型結(jié)構(gòu),其IFML 模型元素特征如下:①一個IFML 模型由一個或多個頂層視圖容器組成;②一個視圖容器可包含視圖組件,視圖組件表示數(shù)據(jù)輸入(如表單、數(shù)據(jù)網(wǎng)格或圖像庫);③視圖容器和視圖組件可與事件關(guān)聯(lián),表示支持用戶的交互;④事件效果由交互流連接表示,該連接將事件連接到受事件影響的視圖容器或組件;⑤事件還可以觸發(fā)操作,該操作在更新用戶界面狀態(tài)之前執(zhí)行;⑥視圖元素(視圖容器和視圖組件)之間或視圖元素和操作之間的輸入—輸出依賴關(guān)系由與導(dǎo)航流(用于在視圖元素之間導(dǎo)航的交互流)關(guān)聯(lián)的參數(shù)綁定表示。
目前,支持IFML 建模的工具包括Eclipse IFML 和WebRatio,其還可支持從平臺無關(guān)模型到平臺特定模型的自動映射。
SCM 元模型如圖2 所示,該模型包括類(Class)、服務(wù)實體(ServiceEntity)、屬性(Property)、操作(Operation)、服務(wù)操作(ServiceOperation)、聯(lián)系(Association)等元素[22]。與UML2.0類模型的元模型相比,SCM模型是在UML2.0類模型基礎(chǔ)上加入了服務(wù)實體和服務(wù)操作元素,主要刻畫服務(wù)實體之間的靜態(tài)關(guān)系。其中,服務(wù)實體表示業(yè)務(wù)系統(tǒng)中的參與者、組件或應(yīng)用程序等。服務(wù)操作描述業(yè)務(wù)服務(wù)的基本行為單元,并用于表示所建模系統(tǒng)中的一些交互流或處理。
Fig.2 SCM meta model圖2 SCM元模型
MDA 規(guī)范中有4 種映射方法:使用模式和標(biāo)記映射、使用模型類型映射、模型合并映射和元模型映射[16]。元模型映射是元模型之間的映射,自動映射的實現(xiàn)依賴于模型映射語言。本文的IFML 模型至SCM 模型的映射采用基于元模型的映射技術(shù),映射規(guī)則使用QVTo 語言進行描述,詳細(xì)映射方法如下:①模型之間的映射使用自然語言定義;②這些映射由一組規(guī)則組成,而這些規(guī)則由QVTo 語言描述;③QVTo 語言描述的規(guī)則在IBM Rational Software Architect(RSA)平臺上通過QVTo引擎執(zhí)行。
SCM 模型根據(jù)交互行為和交互過程定義其服務(wù)內(nèi)容,并根據(jù)IFML 模型的事件和動作定義其操作行為。因此,IFML 模型中的對象對應(yīng)SCM 模型中的類,IFML 中的消息對應(yīng)SCM 模型中的操作行為。表1 列出了自然語言定義的IFML 模型至SCM 模型的映射規(guī)則。需要注意的是,IFML 模型中有一些視圖容器映射到SCM 模型中會出現(xiàn)兩個名字相同的實體,在這種情況下,軟件設(shè)計者需要將這些相同的實體合并。同時,有些元素(例如導(dǎo)航流和數(shù)據(jù)流)需要軟件設(shè)計人員手動進行區(qū)分。但在本文中,將重點展示自動映射規(guī)則以及映射的實現(xiàn)。
RSA 是基于Eclipse3.0 平臺的設(shè)計開發(fā)工具,支持UML2.0建模、EMF 建模、圖形編輯框架(GEF)開發(fā)和Plugin 開發(fā)[23]。此外,RSA 還是模型驅(qū)動開發(fā)的常用工具。因此,本文提出IFML 模型至SCM 模型的映射通過執(zhí)行在RSA 平臺上開發(fā)的ifmlToscm 映射插件實現(xiàn)。其模型映射框架如圖3所示。
Table 1 Mapping rule from IFML model to SCM model表1 IFML模型至SCM模型映射規(guī)則
Fig.3 The mapping framework from IFML model to SCM model圖3 IFML模型至SCM模型映射框架
圖3 所示的映射框架以IFML 模型為源模型、以SCM模型為目標(biāo)模型,其模型映射的執(zhí)行由QVTo 語言編寫的映射插件實施。在映射插件的設(shè)計中,首先使用元模型建??蚣蹺MF(Eclipse Modelling Framework)插件創(chuàng)建IFML元模型(ifmlmeta.ecore)和SCM 元模型(classmeta.ecore);然后根據(jù)表1 的映射規(guī)則,通過QVTo 插件設(shè)計映射代碼;最后,QVTo 執(zhí)行引擎運行映射代碼,執(zhí)行IFML 模型至SCM模型的映射。由于IFML 模型與SCM 模型之間的映射規(guī)則基于元模型技術(shù),因此模型映射是在M2級別定義的。
為說明該過程,圖4 顯示了從IFML 模型至SCM 模型映射的部分代碼視圖??梢钥闯?,在IFML 至SCM 模型的映射中設(shè)計了6 個模型元素的映射(9-14 行)。以View-ContainerToClass 的 映 射 為 例,ViewContainer 的ID 和name直接映射為Class 的ID 和name(18-19 行),ViewContainer是否為缺省決定了Class是否是抽象類(20行)。
Fig.4 Code excerpt of ifmlToscm mapping圖4 ifmlToscm 模型映射部分代碼
本文的轉(zhuǎn)換演示以Web 應(yīng)用系統(tǒng)為例,選自W3C 標(biāo)準(zhǔn)文檔[24]中的網(wǎng)上購物系統(tǒng),該購物系統(tǒng)提供搜索產(chǎn)品、查看產(chǎn)品、管理購物車和支付訂單等服務(wù)。其購物場景如下:首先,用戶選擇其中一個產(chǎn)品類別,或者輸入產(chǎn)品信息(包括產(chǎn)品名稱、類別或其他信息)。網(wǎng)上購物系統(tǒng)獲取用戶請求,匹配產(chǎn)品后,顯示產(chǎn)品列表。然后,當(dāng)用戶選擇某個產(chǎn)品時,會獲得所選產(chǎn)品的詳細(xì)信息(例如完整描述和價格)以及將產(chǎn)品添加到購物車選項。當(dāng)用戶決定購買該產(chǎn)品并將其添加到購物車時,該產(chǎn)品就會被添加到購物車中。此時,用戶可以繼續(xù)瀏覽商品,也可以進入購物車支付訂單或修改購物車信息。最后,一旦用戶決定支付其中一個產(chǎn)品選項,網(wǎng)上購物系統(tǒng)會要求用戶提供其個人信息和銀行賬戶詳細(xì)信息,并由相應(yīng)的金融公司處理付款。付款執(zhí)行完畢后,會顯示帶有交易詳細(xì)信息的確認(rèn)消息,并將訂單狀態(tài)修改為交付流程。
下面通過具體案例來說明IFML 建模,并描述IFML 模型至SCM 模型的映射。
依據(jù)IFML 所包含的視圖元素、交互流元素、事件元素、端口元素和動作元素等內(nèi)容,其建模包括以下活動:①根據(jù)業(yè)務(wù)流分析與識別視圖容器和視圖組件(功能方面);②設(shè)計事件和交互流,關(guān)聯(lián)視圖容器與視圖組件;③分析事件原因,細(xì)化動作要素;④建立交互流與視圖元素之間或視圖元素與動作之間的關(guān)聯(lián)參數(shù)綁定。執(zhí)行上述活動后,網(wǎng)上購物系統(tǒng)的IFML 模型如圖5 所示??梢钥闯?,IFML 模型顯示了所有前端細(xì)節(jié),以及視圖容器之間相關(guān)事件觸發(fā)的交互流細(xì)節(jié)。
以交互流為例,一旦用戶從CategoryList 中選擇了一個類別,就會產(chǎn)生一個導(dǎo)航事件,從而顯示SelectedCategory對應(yīng)的產(chǎn)品。同樣,當(dāng)用戶從ProductList 中選擇產(chǎn)品時,會顯示SelectedProduct 的詳細(xì)信息。因此,SelectedProducts參數(shù)綁定組分別關(guān)聯(lián)ProductList和ProductsDetails。
Fig.5 IFML model of the Web payment system圖5 網(wǎng)上購物系統(tǒng)的IFML模型
為提高模型的復(fù)用性和模塊化程度,可將多個視圖容器集成到一個模塊中。例如,ProductCategories、ProductList和ProductDetails 3個視圖容器可集成到一個查看產(chǎn)品模塊中,而CustomerInformation、PaymentInformation、Comfirmation視圖容器可集成到一個支付訂單模塊中。反之,一個模塊也可作進一步分解,以細(xì)化交互細(xì)節(jié)。圖6 顯示ShoppingCart模塊可進一步細(xì)化為兩個事件:增加商品數(shù)量和清空購物車??梢姡瑢σ晥D容器的集成操作可簡化設(shè)計并增加模型的可讀性,而分解操作則可進一步完善交互細(xì)節(jié)。
根據(jù)映射規(guī)則(見表1),IFML 模型中的視圖容器元素直接被映射為SCM 模型中的類元素,模塊元素被映射為接口,動作被映射為操作。同時,IFML 模型中的交互流被映射為SCM 模型中的關(guān)聯(lián)關(guān)系。然而,在映射過程中,可能出現(xiàn)一些類(如Confirmation、ProductList)的操作和關(guān)系不太正確,需要軟件工程師使用UML2.0 插件手動修改映射的初始SCM 模型。因此,SCM 模型的完善工作需要執(zhí)行以下活動:①找出所有與在線購物系統(tǒng)直接交互的有用實體,并刪除無用實體(沒有屬性和操作的實體),以及刪除交互過程中生成的臨時實體信息;②完善實體類的屬性,修改操作。因此,圖7 顯示了在RSA 平臺執(zhí)行、由IFML 模型映射而來,并經(jīng)過修改完善的SCM 模型。
Fig.6 Refine the IFML model of the Shopping Cart business service圖6 細(xì)化“Shopping Cart”業(yè)務(wù)服務(wù)的IFML模型
Fig.7 SCM model of the web payment system圖7 網(wǎng)上購物系統(tǒng)的SCM模型
模型一致性是指模型與模型之間的契約,即當(dāng)一個模型被修改時,另一個模型中的相應(yīng)元素也應(yīng)被修改?;蛘呤且粋€模型的修改不能影響另一個模型業(yè)務(wù)功能的完整性。驗證IFML 模型與SCM 模型之間的一致性是有益的,如果IFML 模型中的一個View Container 元素不能對應(yīng)SCM 模型中的某一具體類,表明該View Container 元素的內(nèi)容沒有被記錄下來,說明該View Container 元素可能是不正確的,該元素里沒有任何內(nèi)容可顯示。反之,如果SCM 模型中一個Class 元素內(nèi)容在IFML 模型中找不到對應(yīng)的View Container 元素,說明該Class 元素可能是孤立、無意義的。因此,IFML 模型與SCM 模型之間的一致性分析步驟為:
說明如下:
(1)針對完全語義一致,兩個模型的緊鄰序?qū)贤耆嗤?,表明轉(zhuǎn)換后的SCM 模型沒有作任何修改與完善。
(2)針對部分語義一致,兩個模型緊鄰序?qū)现械牟糠中驅(qū)ο嗤?,表明轉(zhuǎn)換后的SCM 模型進行了小范圍的修改與完善。
應(yīng)用以上驗證步驟,對上述網(wǎng)上購物系統(tǒng)的IFML 模型和SCM 模型進行一致性分析。
通過上述的語義一致性分析,通過模型轉(zhuǎn)換而來的SCM 模型,其修改與完善操作不能完全脫離IFML 模型,否則系統(tǒng)中所建立的SCM 模型不能與用戶交互流模型保持一致。同時,通過對比圖5-圖7,可看出SCM 模型中的關(guān)系、類和操作都可追溯至IFML 模型中的交互流、視圖容器與動作。
可見,基于模型驅(qū)動技術(shù),IFML 模型中的相關(guān)元素可自動被映射為SCM 模型中的元素。因此,聚焦于用戶視圖,從用戶角度建模系統(tǒng)的內(nèi)容模型,其用戶需求與系統(tǒng)模型之間的一致性更好,使得最終開發(fā)的系統(tǒng)能更加貼合用戶需求。
本文針對現(xiàn)有各種模型映射為類模型的研究中忽略了前端模型與SCM 模型之間一致性的問題,設(shè)計了表示前端的IFML 模型映射為SCM 模型的方法。重點分析了IFML 模型元素與SCM 模型元素的特點,基于元模型技術(shù)和QVTo 模型映射語言,設(shè)計了IFML 模型至SCM 模型的自動映射,并從語義角度分析了IFML 模型與SCM 模型之間的一致性。通過實例演示,將IFML 模型自動映射為SCM 模型可有效提高服務(wù)內(nèi)容模型的完整性,使得軟件設(shè)計更加貼合用戶需求,提高軟件開發(fā)質(zhì)量。但設(shè)計的映射規(guī)則可能導(dǎo)致服務(wù)內(nèi)容模型中出現(xiàn)重復(fù)的服務(wù)實體和服務(wù)操作,目前需要軟件工程師手動進行調(diào)整。同時,由于大型復(fù)雜業(yè)務(wù)系統(tǒng)中的IFML 模型元素眾多,在進行模型轉(zhuǎn)換時,轉(zhuǎn)換效率會下降。因此,如何進一步屏蔽重復(fù)元素的生成及提高轉(zhuǎn)換效率是下一步研究需要解決的主要問題。