李宗花
(淮陰師范學院計算機科學與技術學院,江蘇淮安 223300)
交互流建模語言(Interaction Flow Modeling Language,IFML)由OMG 提出,可為系統架構師、軟件工程師和軟件開發人員提供用于定義和描述應用程序前端主要維度的交互流細節[1-2]。不同于HTML5平臺的特點,IFML 模型側重于業務模型的可用性和可讀性,支持以圖形方式描述與平臺無關的交互細節,其描述重點是最終用戶理解的應用程序行為和體系結構,而忽略執行平臺的細節[3-4]。因此,IFML 模型可對Web 應用系統、桌面應用程序、C/S 應用程序、移動應用程序等平臺和系統進行交互流建模。當前對IFML 模型的研究主要集中在語義描述[5-6]、模型自動生成[7-8]、基于IFML 的前端建模[9-10]和可視化建模工具[11-12]等方面。
服務內容模型(Service Content Model,SCM)基于UML2.0 類模型,著重定義服務實體的屬性和操作,并根據服務實體之間的交互行為定義服務實體之間的關系。在已有的相關研究[13-15]和OMG 標準文檔[16]中,SCM 模型能夠在平臺相關模型(Platform Specific Model,PSM)層次上直接映射為數據庫的實體和關系。因此,當前諸多研究基于模型驅動框架(Model Driven Architecture,MDA)技術,研究用例模型至類模型的轉換[17]、問題模型至類模型的轉換[18]和業務流程模型至類模型的轉換[19-20]等。然而,在這些聚焦于類模型的轉換中,轉換結果主要是類的概念模型,而類的操作往往由軟件開發人員手動設計。可見,這些模型轉換研究忽略了前端交互模型中的動作和交互流事件對系統類模型的影響,特別是類的操作建模往往與前端交互模型中的動作和事件相關。因此,有必要研究前端交互模型至服務內容模型的映射,以提高軟件開發質量。
SCM 模型中的重要元素包括服務實體、服務實體屬性和操作,以及服務實體之間的關系。現有研究聚焦于類模型至數據庫關系模型的映射,而針對其他模型至SCM 模型的自動映射研究較少。眾所周知,SCM 模型的構造和設計往往與需求模型緊密相關,是軟件系統中最重要的一個模型。現有需求模型至SCM 模型的自動映射研究主要包括以下幾類:
(1)形式化模型至類模型的映射。文獻[15]基于領域本體模型,利用檢索技術,從領域本體模型中通過設計概念查詢與UML 元素查詢提取領域本體模型中的概念實體和實體關系,并利用最短路徑算法剔除相似的概念實體。這種語義技術與信息技術的結合,可提高概念實體抽取效率。文獻[21]則從對象約束語言(Object Constraint Language,OCL)不變量中,利用約束邏輯編程范式(Constraint Logic Programming,CLP)推理UML 類圖的元素,并從正確性屬性方面驗證生成的模型實例,該方法可用于推理和驗證UML 類模型設計。
(2)業務過程模型至類模型的映射。文獻[20]基于模型驅動技術,利用查詢、視圖和轉換(Query/View/Transformation,QVT)語言,以UML 活動圖為橋梁,設計了業務流程模型元素至UML 活動圖模型元素的轉換和UML 活動圖模型元素至類模型元素之間的轉換。通過UML 活動圖,可有效地將業務流程模型中的任務、池、消息流等元素轉為類模型中的類、屬性和關系等元素。但在設計的轉換規則中,由于某些轉換約束較強,使得業務過程模型中如中間事件等元素被忽略。
(3)UseCase 用例模型至類模型的映射。文獻[17]基于MDA 框架,利用UseCase 模型代表業務系統的計算無關模型(Computation Independent Model,CIM),利用UML 類模型代表平臺無關模型(Platform Independent Model,PIM),利用關系模型代表PSM,設計了UseCase 模型至類模型、類模型至關系模型的映射。該方法依賴于完整的MDA 框架體系,使軟件系統的設計與用戶需求可很好地保持一致。
上述以需求模型為基礎,實現類模型映射的研究缺少語義一致性驗證,其SCM 模型是否滿足用戶需求主要依賴于系統分析員的建模能力,具有一定的主觀性和局限性。因此,本文在這些模型轉換的基礎上,從用戶角度出發,聚焦于用戶交互流信息,設計交互流、動作與事件等信息至類、屬性和操作元素的映射,基于QVTo(QVT Operational mappings)語言實現IFML 模型至SCM 模型的轉換,并利用語義驗證技術驗證IFML 模型與SCM 模型的一致性。與其他模型至類模型的映射研究相比,IFML 模型至SCM 模型的轉換使得業務系統的內容模型與用戶需求更加一致,進一步縮短了SCM 模型與用戶需求的鴻溝。
IFML 模型從用戶角度描述前端的交互細節,適用于交互流建模,其元模型如圖1 所示。可以看出,IFML 元模型的主要元素包括視圖元素(ViewElement)、視圖組件(ViewComponent)、操作(Action)、事件(Event)、交互流(InteractionFlow)、條件表達(Expression)、參數(Parmeter)、內容綁定(ContentBinding)、視圖容器(ViewContainer)等。

Fig.1 IFML meta model圖1 IFML元模型
分析圖1 所示的元模型結構,其IFML 模型元素特征如下:①一個IFML 模型由一個或多個頂層視圖容器組成;②一個視圖容器可包含視圖組件,視圖組件表示數據輸入(如表單、數據網格或圖像庫);③視圖容器和視圖組件可與事件關聯,表示支持用戶的交互;④事件效果由交互流連接表示,該連接將事件連接到受事件影響的視圖容器或組件;⑤事件還可以觸發操作,該操作在更新用戶界面狀態之前執行;⑥視圖元素(視圖容器和視圖組件)之間或視圖元素和操作之間的輸入—輸出依賴關系由與導航流(用于在視圖元素之間導航的交互流)關聯的參數綁定表示。
目前,支持IFML 建模的工具包括Eclipse IFML 和WebRatio,其還可支持從平臺無關模型到平臺特定模型的自動映射。
SCM 元模型如圖2 所示,該模型包括類(Class)、服務實體(ServiceEntity)、屬性(Property)、操作(Operation)、服務操作(ServiceOperation)、聯系(Association)等元素[22]。與UML2.0類模型的元模型相比,SCM模型是在UML2.0類模型基礎上加入了服務實體和服務操作元素,主要刻畫服務實體之間的靜態關系。其中,服務實體表示業務系統中的參與者、組件或應用程序等。服務操作描述業務服務的基本行為單元,并用于表示所建模系統中的一些交互流或處理。

Fig.2 SCM meta model圖2 SCM元模型
MDA 規范中有4 種映射方法:使用模式和標記映射、使用模型類型映射、模型合并映射和元模型映射[16]。元模型映射是元模型之間的映射,自動映射的實現依賴于模型映射語言。本文的IFML 模型至SCM 模型的映射采用基于元模型的映射技術,映射規則使用QVTo 語言進行描述,詳細映射方法如下:①模型之間的映射使用自然語言定義;②這些映射由一組規則組成,而這些規則由QVTo 語言描述;③QVTo 語言描述的規則在IBM Rational Software Architect(RSA)平臺上通過QVTo引擎執行。
SCM 模型根據交互行為和交互過程定義其服務內容,并根據IFML 模型的事件和動作定義其操作行為。因此,IFML 模型中的對象對應SCM 模型中的類,IFML 中的消息對應SCM 模型中的操作行為。表1 列出了自然語言定義的IFML 模型至SCM 模型的映射規則。需要注意的是,IFML 模型中有一些視圖容器映射到SCM 模型中會出現兩個名字相同的實體,在這種情況下,軟件設計者需要將這些相同的實體合并。同時,有些元素(例如導航流和數據流)需要軟件設計人員手動進行區分。但在本文中,將重點展示自動映射規則以及映射的實現。
RSA 是基于Eclipse3.0 平臺的設計開發工具,支持UML2.0建模、EMF 建模、圖形編輯框架(GEF)開發和Plugin 開發[23]。此外,RSA 還是模型驅動開發的常用工具。因此,本文提出IFML 模型至SCM 模型的映射通過執行在RSA 平臺上開發的ifmlToscm 映射插件實現。其模型映射框架如圖3所示。

Table 1 Mapping rule from IFML model to SCM model表1 IFML模型至SCM模型映射規則

Fig.3 The mapping framework from IFML model to SCM model圖3 IFML模型至SCM模型映射框架
圖3 所示的映射框架以IFML 模型為源模型、以SCM模型為目標模型,其模型映射的執行由QVTo 語言編寫的映射插件實施。在映射插件的設計中,首先使用元模型建模框架EMF(Eclipse Modelling Framework)插件創建IFML元模型(ifmlmeta.ecore)和SCM 元模型(classmeta.ecore);然后根據表1 的映射規則,通過QVTo 插件設計映射代碼;最后,QVTo 執行引擎運行映射代碼,執行IFML 模型至SCM模型的映射。由于IFML 模型與SCM 模型之間的映射規則基于元模型技術,因此模型映射是在M2級別定義的。
為說明該過程,圖4 顯示了從IFML 模型至SCM 模型映射的部分代碼視圖。可以看出,在IFML 至SCM 模型的映射中設計了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 模型映射部分代碼
本文的轉換演示以Web 應用系統為例,選自W3C 標準文檔[24]中的網上購物系統,該購物系統提供搜索產品、查看產品、管理購物車和支付訂單等服務。其購物場景如下:首先,用戶選擇其中一個產品類別,或者輸入產品信息(包括產品名稱、類別或其他信息)。網上購物系統獲取用戶請求,匹配產品后,顯示產品列表。然后,當用戶選擇某個產品時,會獲得所選產品的詳細信息(例如完整描述和價格)以及將產品添加到購物車選項。當用戶決定購買該產品并將其添加到購物車時,該產品就會被添加到購物車中。此時,用戶可以繼續瀏覽商品,也可以進入購物車支付訂單或修改購物車信息。最后,一旦用戶決定支付其中一個產品選項,網上購物系統會要求用戶提供其個人信息和銀行賬戶詳細信息,并由相應的金融公司處理付款。付款執行完畢后,會顯示帶有交易詳細信息的確認消息,并將訂單狀態修改為交付流程。
下面通過具體案例來說明IFML 建模,并描述IFML 模型至SCM 模型的映射。
依據IFML 所包含的視圖元素、交互流元素、事件元素、端口元素和動作元素等內容,其建模包括以下活動:①根據業務流分析與識別視圖容器和視圖組件(功能方面);②設計事件和交互流,關聯視圖容器與視圖組件;③分析事件原因,細化動作要素;④建立交互流與視圖元素之間或視圖元素與動作之間的關聯參數綁定。執行上述活動后,網上購物系統的IFML 模型如圖5 所示。可以看出,IFML 模型顯示了所有前端細節,以及視圖容器之間相關事件觸發的交互流細節。
以交互流為例,一旦用戶從CategoryList 中選擇了一個類別,就會產生一個導航事件,從而顯示SelectedCategory對應的產品。同樣,當用戶從ProductList 中選擇產品時,會顯示SelectedProduct 的詳細信息。因此,SelectedProducts參數綁定組分別關聯ProductList和ProductsDetails。

Fig.5 IFML model of the Web payment system圖5 網上購物系統的IFML模型
為提高模型的復用性和模塊化程度,可將多個視圖容器集成到一個模塊中。例如,ProductCategories、ProductList和ProductDetails 3個視圖容器可集成到一個查看產品模塊中,而CustomerInformation、PaymentInformation、Comfirmation視圖容器可集成到一個支付訂單模塊中。反之,一個模塊也可作進一步分解,以細化交互細節。圖6 顯示ShoppingCart模塊可進一步細化為兩個事件:增加商品數量和清空購物車。可見,對視圖容器的集成操作可簡化設計并增加模型的可讀性,而分解操作則可進一步完善交互細節。
根據映射規則(見表1),IFML 模型中的視圖容器元素直接被映射為SCM 模型中的類元素,模塊元素被映射為接口,動作被映射為操作。同時,IFML 模型中的交互流被映射為SCM 模型中的關聯關系。然而,在映射過程中,可能出現一些類(如Confirmation、ProductList)的操作和關系不太正確,需要軟件工程師使用UML2.0 插件手動修改映射的初始SCM 模型。因此,SCM 模型的完善工作需要執行以下活動:①找出所有與在線購物系統直接交互的有用實體,并刪除無用實體(沒有屬性和操作的實體),以及刪除交互過程中生成的臨時實體信息;②完善實體類的屬性,修改操作。因此,圖7 顯示了在RSA 平臺執行、由IFML 模型映射而來,并經過修改完善的SCM 模型。

Fig.6 Refine the IFML model of the Shopping Cart business service圖6 細化“Shopping Cart”業務服務的IFML模型

Fig.7 SCM model of the web payment system圖7 網上購物系統的SCM模型
模型一致性是指模型與模型之間的契約,即當一個模型被修改時,另一個模型中的相應元素也應被修改。或者是一個模型的修改不能影響另一個模型業務功能的完整性。驗證IFML 模型與SCM 模型之間的一致性是有益的,如果IFML 模型中的一個View Container 元素不能對應SCM 模型中的某一具體類,表明該View Container 元素的內容沒有被記錄下來,說明該View Container 元素可能是不正確的,該元素里沒有任何內容可顯示。反之,如果SCM 模型中一個Class 元素內容在IFML 模型中找不到對應的View Container 元素,說明該Class 元素可能是孤立、無意義的。因此,IFML 模型與SCM 模型之間的一致性分析步驟為:


說明如下:
(1)針對完全語義一致,兩個模型的緊鄰序對集合完全相同,表明轉換后的SCM 模型沒有作任何修改與完善。
(2)針對部分語義一致,兩個模型緊鄰序對集合中的部分序對相同,表明轉換后的SCM 模型進行了小范圍的修改與完善。
應用以上驗證步驟,對上述網上購物系統的IFML 模型和SCM 模型進行一致性分析。

通過上述的語義一致性分析,通過模型轉換而來的SCM 模型,其修改與完善操作不能完全脫離IFML 模型,否則系統中所建立的SCM 模型不能與用戶交互流模型保持一致。同時,通過對比圖5-圖7,可看出SCM 模型中的關系、類和操作都可追溯至IFML 模型中的交互流、視圖容器與動作。
可見,基于模型驅動技術,IFML 模型中的相關元素可自動被映射為SCM 模型中的元素。因此,聚焦于用戶視圖,從用戶角度建模系統的內容模型,其用戶需求與系統模型之間的一致性更好,使得最終開發的系統能更加貼合用戶需求。
本文針對現有各種模型映射為類模型的研究中忽略了前端模型與SCM 模型之間一致性的問題,設計了表示前端的IFML 模型映射為SCM 模型的方法。重點分析了IFML 模型元素與SCM 模型元素的特點,基于元模型技術和QVTo 模型映射語言,設計了IFML 模型至SCM 模型的自動映射,并從語義角度分析了IFML 模型與SCM 模型之間的一致性。通過實例演示,將IFML 模型自動映射為SCM 模型可有效提高服務內容模型的完整性,使得軟件設計更加貼合用戶需求,提高軟件開發質量。但設計的映射規則可能導致服務內容模型中出現重復的服務實體和服務操作,目前需要軟件工程師手動進行調整。同時,由于大型復雜業務系統中的IFML 模型元素眾多,在進行模型轉換時,轉換效率會下降。因此,如何進一步屏蔽重復元素的生成及提高轉換效率是下一步研究需要解決的主要問題。