摘要:將軟件過程技術與工作流技術相結(jié)合,嚴格定義了SPEM2XPDL模型轉(zhuǎn)換規(guī)則,設計并實現(xiàn)了一個SPEM2XPDL模型轉(zhuǎn)換引擎。此引擎將SPEM描述的軟件過程轉(zhuǎn)換為符合工作流定義(XPDL)的工作流過程,從而可基于工作流管理系統(tǒng)對軟件過程提供執(zhí)行支持。SPEM模型經(jīng)引擎轉(zhuǎn)換后在工作流管理系統(tǒng)Shark上的成功執(zhí)行表明了引擎的可用性。
關鍵詞:軟件過程工程元模型; 可擴展標記語言過程定義語言; 軟件過程; 工作流; 模型轉(zhuǎn)換
中圖分類號:TP31152文獻標志碼:A
文章編號:10013695(2007)04004205
0引言
SPEM(Software Process Engineering Metamodel)[1]是OMG(Object Management Group)在2002年提出的軟件過程建模標準。它定義了軟件過程建模中所需要的元素集合,適合于描述任何軟件過程。近年來,SPEM取得了廣泛應用,出現(xiàn)了很多基于SPEM的軟件過程模型,如IBM的RUP、DMR的Macroscope以及Unisys的QuadCycle等[1]。然而,SPEM側(cè)重于過程建模中的過程描述方面,在過程執(zhí)行支持方面做得不夠[2]。
為了支持軟件過程的執(zhí)行,人們做了大量工作。20世紀90年代后,研究人員發(fā)現(xiàn)盡管軟件過程和工作流各有特點,但它們遵循相同的過程范型[3,4]。人們在將軟件過程模型轉(zhuǎn)換到工作流模型并通過WfMS(Workflow Management System)執(zhí)行方面進行了研究,且取得了一些成果。Ghan D.K.C.等人[5]將ISPW6軟件過程模型轉(zhuǎn)換為用Valmont語言定義的Liaison模型,并在支持該模型的自定義WfMS上執(zhí)行。Barnes A.等人[6]將軟件設計階段的過程模型轉(zhuǎn)換為用WPDL(Workflow Process Definition Language)描述的工作流模型,并在實現(xiàn)工作流參考模型的WfMS上執(zhí)行。由于這些研究通常采用的軟件過程元模型不同,元模型到工作流的轉(zhuǎn)換規(guī)則也不相同,使得它們的研究成果得不到重用,軟件過程模型之間也不好交互。
將SPEM模型轉(zhuǎn)換到XPDL[7](XML Process Definition Language)模型,并利用成熟的WfMS,如IBM WebSphere MQ Workflow或開源社區(qū)的Shark[8]等,來解決對SPEM模型的過程支持問題。其優(yōu)點表現(xiàn)在:
(1)SPEM作為廣泛應用的軟件過程建模標準,本身可以保證SPEM模型的可重用性以及可交互性,減少了因重復開發(fā)軟件過程元建模所帶來的巨大時間和成本支出。
(2)XPDL作為WfMC(Workflow Management Coalition)制定的工作流過程定義標準,不僅可以帶來工作流所具有的開放性、靈活性、強大的過程支持能力,而且還保證了轉(zhuǎn)換后模型的可重用性以及可交互性。
(3)SPEM與具體的軟件開發(fā)方法無關,可以對任何具體的軟件開發(fā)方法,如XP、RUP等提供過程執(zhí)行支持。
實現(xiàn)SPEM模型到XPDL模型的轉(zhuǎn)換,要解決兩大問題,即模型之間的轉(zhuǎn)換規(guī)則以及轉(zhuǎn)換的具體實現(xiàn)問題。
1SPEM和XPDL元模型簡介
1.1SPEM
SPEM的核心概念是:軟件過程是ProcessRole之間的協(xié)作,而ProcessRole對WorkProduct執(zhí)行Activity操作。
在SPEM元模型中,SPEM_Extensions包為描述軟件過程模型添加了相應的元素及語義。Process Structure子包包含構(gòu)成過程的主要元素以及元素之間的關系,是SPEM元模型中的主要內(nèi)容,如圖1所示。
圖9中WorkProduct表示過程執(zhí)行中所涉及的任何制品;WorkProductKind表示W(wǎng)orkProduct的類別;WorkDefinition表示過程任務定義,WorkDefinition與ProcessPerformer關聯(lián),表示該WorkDefinition的執(zhí)行角色。WorkDefinition可包含子WorkDefinition,形成WorkDefinition的層次關系。Activity表示由ProcessRole所執(zhí)行的活動,作為WorkDefinition的子類,Activity同樣也可包含子Activity,從而構(gòu)成Activity之間的層次關系;此外,Activity還可以包含原子元素Step。
1.2XPDL
XPDL元模型描述了工作流過程定義中要用到的實體以及實體屬性。其結(jié)構(gòu)如圖2所示。
圖2中Workflow Process Definition實體為過程中的其他實體提供上下文信息。Workflow Process Activity由一個或多個活動組成。活動可以是BlockActivity,它與Activity Set相關聯(lián);也可以是SubProcesss Definition,它與其他Workflow Process Definition相關聯(lián);還可以是Atomic Activity,只負責在輸入轉(zhuǎn)移和輸出轉(zhuǎn)移中進行路由。Transition Information描述活動間的轉(zhuǎn)移信息。Workflow Participant Specification描述在過程定義中各個活動的執(zhí)行者所需要的資源。Workflow Application Specification描述工作流執(zhí)行時需要調(diào)用的應用程序或者接口。Workflow Relevant Data描述工作流執(zhí)行時,每個過程實例都需要用到的或創(chuàng)建的數(shù)據(jù)。
2SPEM2XPDL模型轉(zhuǎn)換規(guī)則
實現(xiàn)模型轉(zhuǎn)換,首先要確定模型之間的轉(zhuǎn)換規(guī)則,即要確定SPEM模型元素到XPDL模型元素的轉(zhuǎn)換規(guī)則以及SPEM模型元素關系到XPDL模型元素關系的轉(zhuǎn)換規(guī)則。因此,SPEM2XPDL模型轉(zhuǎn)換規(guī)則包括兩類,即元素的轉(zhuǎn)換規(guī)則和關系的轉(zhuǎn)換規(guī)則。
2.1元素轉(zhuǎn)換規(guī)則
當模型元素被轉(zhuǎn)換時,元素的屬性也要同時被轉(zhuǎn)換。主要元素轉(zhuǎn)換規(guī)則如下(SPEM->XPDL):
(1)Package, Discipline, Phase, Lifecycle->Package
利用XPDL Package元素的擴展屬性來標志不同SPEM元素。例如<ExtendedAttribute Name=\"type\" Value=\"Phase\"/>表示SPEM Package元素。
(2)Process->WorkflowProcess
將SPEM Process元素轉(zhuǎn)換為XPDL中的WorkflowProcess元素。
(3)Iteration, Activity, Step->Activity
Iteration轉(zhuǎn)換為XPDL中實現(xiàn)類型為“Subflow”的Activity;包含Step的Activity轉(zhuǎn)換為XPDL中活動類型為“BlockActivity”的Activity,包含子Activity的Activity轉(zhuǎn)換為實現(xiàn)類型為“Subflow”的Activity;Step轉(zhuǎn)換為普通Activity。
(4)WorkProduct,WorkProductKind->ExtendedAttribute
WorkProduct和WorkProductKind均轉(zhuǎn)換為XPDL活動的擴展屬性。擴展屬性名分別為“WorkProduct”和“WorkProductKind”。
(5)ProcessPerformer->Participant
轉(zhuǎn)換為過程執(zhí)行者,并設置執(zhí)行者的類型屬性為“Role”。
(6)ProcessRole->ExtendedAttribute
轉(zhuǎn)換為過程活動的擴展屬性。擴展屬性名為“Assistant”。
為支持工作流過程的執(zhí)行,在XPDL的Activity元素中存在一些過程執(zhí)行屬性,而它們在SPEM模型中沒有對應表示。對于這種屬性,本文為其設定了默認值。比如XPDL Activity中的Start Mode屬性默認設置為“Manual”;Transition Restrictions屬性默認設置為“AND Join”和“AND Split”。
2.2關系轉(zhuǎn)換規(guī)則
在SPEM中,活動之間的關聯(lián)關系有多種,而XPDL中活動的關聯(lián)關系只有一種,即活動的轉(zhuǎn)換關系。因此,需要解決SPEM的多種關聯(lián)關系與XPDL的單一關聯(lián)關系的映射問題。為此,將SPEM活動關系分類,針對每個分類,建立它到XPDL活動關系的轉(zhuǎn)換規(guī)則。
(1)層次關系(LR)
層次關系有兩種,即Package和其包含元素的所屬關系以及Activity和Step之間的包含關系。在XPDL中,層次關系表現(xiàn)為Package以及ActivitySet與Activity之間的關系。
(2)轉(zhuǎn)換關系(TR)
轉(zhuǎn)換關系有兩種:活動之間的Precedes關系和活動—產(chǎn)品關系。活動—產(chǎn)品關系要求活動a1的輸出產(chǎn)品w是活動a2的輸入產(chǎn)品。在XPDL中,轉(zhuǎn)換關系對應于活動之間的Transition關系。
(3)角色—活動關系(RAR)
角色—活動關系有兩種:WorkDefinition和ProcessPerformer之間的Perform關系;Activity和 ProcessRole之間的Assistant關系。在XPDL中,前者表現(xiàn)為活動的執(zhí)行者,后者對應于活動的擴展屬性。
(4)其他關系(OTR)
除了上述關系之外,其他關系均用OTR進行描述。其中如WorkProduct之間的Trace、Impact等關系,由于缺少對應語義,將不能轉(zhuǎn)換到XPDL中。
3SPEM2XPDL模型轉(zhuǎn)換引擎
3.1系統(tǒng)架構(gòu)
基于SPEM和XPDL元模型結(jié)構(gòu)以及模型轉(zhuǎn)換規(guī)則,本文設計并實現(xiàn)了一個SPEM2XPDL模型轉(zhuǎn)換引擎。其系統(tǒng)架構(gòu)如圖3所示。
SPEM模型和XPDL模型一般存儲為XML文件格式。而模型在引擎內(nèi)部會被表示為DOC形式(XML文件在內(nèi)存中的組織形式,可通過DOM、SAX等文檔解析技術對它進行操作)以及Java對象形式。
SPEM2XPDL模型轉(zhuǎn)換引擎按功能主要分為:
(1)預處理器。由SPEM輸入預處理器和XPDL輸出預處理器組成。SPEM輸入預處理器負責將SPEM模型(XML格式)轉(zhuǎn)換為SPEM DOC;XPDL輸出預處理器負責將XPDL DOC轉(zhuǎn)換為XPDL模型(XML)。
(2)SPEM對象生成器。負責將SPEM DOC轉(zhuǎn)換為SPEM Java對象。
(3)XPDL DOC生成器。負責將XPDL Java對象轉(zhuǎn)換為XPDL DOC。
(4)轉(zhuǎn)換規(guī)則庫。定義SPEM Java對象到XPDL Java對象的轉(zhuǎn)換規(guī)則。
(5)對象轉(zhuǎn)換器。依據(jù)轉(zhuǎn)換庫中定義的轉(zhuǎn)換規(guī)則,負責執(zhí)行對象轉(zhuǎn)換。
3.2系統(tǒng)各部分實現(xiàn)
(1)預處理器
SPEM2XPDL預處理器分為兩個部分,即SPEM模型輸入預處理器和XPDL模型輸出預處理器。
SPEM模型一般是在UML CASE工具中建立的,但具體實現(xiàn)時各工具通常在模型中添加了與工具相關的模型信息。例如與模型顯示相關的坐標信息等。因此各工具產(chǎn)生的SPEM模型文件并不一樣。SPEM模型輸入預處理的目的是將SPEM模型文件中與工具相關的內(nèi)容清除,以得到真正有效的SPEM模型文件。其工作流程如圖4所示。
SPEM XML文件經(jīng)過XML凈化后得到簡潔有效的XML文件。此文件如果通過XML格式驗證,則進行XML解析后得到SPEM DOC;否則,系統(tǒng)提示“SPEM文件格式不正確”出錯信息。XML凈化指通過配置文件來配置UML CASE工具對應的XSL文件,然后對SPEM XML文件進行格式轉(zhuǎn)換;XML格式驗證指檢查文件是否符合SPEM DTD或Schema定義;XML解析指解析XML文件為內(nèi)存中DOC對象,以dom4j編程實現(xiàn)。
類似地,XPDL輸出預處理器工作流程如圖5所示。
XML填充指根據(jù)內(nèi)存DOC對象構(gòu)建XML文件,以dom4j編程實現(xiàn)。
(2)SPEM對象生成器
SPEM對象生成器將SPEM DOC轉(zhuǎn)換為SPEM模型在引擎中的對象表示,即SPEM Java對象。本文對SPEM模型進行了面向?qū)ο蠼#漕惤Y(jié)構(gòu)如圖6所示。SPEM Java對象就是這些類的運行實例。
接口AssociationEnd表示關聯(lián)關系的關聯(lián)端,其特定子類分別定義特定的關聯(lián)端類型。例如Actor表示過程執(zhí)行者,是對ProcessPerformer、ProcessRole元素的建模;WorkProduct代表活動的工作產(chǎn)品,是對WorkProduct、WorkProductKind元素的建模;AbstractActivity類的具體子類Activity以及Step則分別表示過程活動以及過程步驟,類Activity以及Step則分別表示過程活動以及過程步驟,是對Iteration、Activity元素以及Step元素的建模。抽象類Association表示關聯(lián)關系,其特定子類分別定義特定的關聯(lián)關系。例如PerformAssociation、AssistAssociation描述了Actor與WorkProduct之間的RAR關系;PrecedeAssociation、StepAssociation、InputAssociation以及OutputAssociation關系則分別描述了Activity與Activity、Step與Step、WorkProduct與Activity之間的TR關系;LR關系則通過Package與Activity之間的包含關系,Activity與Activity之間的包含關系,Activity與Step之間的包含關系來表示;最后,由于OTR關系不能轉(zhuǎn)換到XPDL模型中,因此沒有對OTR關系進行建模。類Package用于描述SPEM模型中Package、Discipline、Phase、Lifecycle、Process元素,它包含屬于這些元素的元素列表以及關系列表對象。
在SPEM對象生成器的具體實現(xiàn)中,由SPEMParser類提供從SPEM DOC到SPEM Java對象的解析方法。例如:
List getSteps()//解析出Step對象列表
List getPackages()//解析出Package對象列表
List getStepAssociation()//解析出StepAssociation關系對象列表
(3)XPDL DOC生成器
XPDL DOC生成器將XPDL模型在引擎中的對象表示,即XPDL Java對象轉(zhuǎn)換為XPDL DOC。本文對XPDL模型所作的面向?qū)ο蠼#漕惤Y(jié)構(gòu)如圖7所示。XPDL Java對象就是這些類的運行實例。
抽象類AbstractActivity用于描述XPDL模型中的Activity元素。其特定子類分別定義特定的活動類型:BlockActivity子類是對BlockActivity元素的建模,它與ActivitySet類相關聯(lián);SubFlowActivity子類是對實現(xiàn)類型為“Subflow”的Activity元素的建模,它與WorkflowProcess類相關聯(lián);NormalActivity子類是對普通Activity元素的建模。與XPDL元模型結(jié)構(gòu)一樣,AbstractActivity類與Participant類相關聯(lián),表示活動與參與者之間的關聯(lián)關系;AbstractActivity類與Transition類相關聯(lián),表示活動與活動之間的轉(zhuǎn)換關系。另外,ExtendedAttribute類用于描述模型中的擴展屬性,它可以與其他各個類相關聯(lián),表示相應模型元素的擴展屬性。ActivitySet類用于描述ActivitySet元素,該類包含屬于ActivitySet元素的活動列表以及活動之間的轉(zhuǎn)換關系列表。WorkflowProcess類用于描述WorkflowProcess元素,該類包含工作流中的活動(如果活動類型是BlockActivity,那么WorkflowProcess類中還包含有與該BlockActivity所對應的ActivitySet對象)以及活動的Transition關系列表。Package類用于描述Package元素,該類包含屬于此Package元素所在層次的Participant列表以及WorkflowProcess列表。
在XPDL DOC生成器的具體實現(xiàn)中,XPDLCreator類提供由XPDL Java對象到XPDL DOC的生成方法。例如:
void createPackageParticipants(Element root,List participantList)
//創(chuàng)建Participants元素
void createWorkflowProcesses(Element root,List workflowProcessList,List participantList)//創(chuàng)建WorkflowProcesse元素
void createActivitySets(Element workflowProcess, List activitySetList)//創(chuàng)建ActivitySets元素
void createActivities(Element workflowProcess,List activityList)
//創(chuàng)建Activities元素
(4)轉(zhuǎn)換規(guī)則庫
轉(zhuǎn)換規(guī)則庫由SPEM2XPDL模型轉(zhuǎn)換規(guī)則組成。在具體實現(xiàn)中,本文根據(jù)模型轉(zhuǎn)換的目標XPDL對象來構(gòu)建轉(zhuǎn)換規(guī)則類。主要包含如下轉(zhuǎn)換類:
①ParticipantRule
定義Participant類的轉(zhuǎn)換規(guī)則,主要方法如下:
Participant convert(Actor aActor)//轉(zhuǎn)換Actor為 Participant
②ActivityRule
定義Activity類的轉(zhuǎn)換規(guī)則,主要方法如下:
//轉(zhuǎn)換spemActivity為 AbstractActivity子類對象
BlockActivity convert2Block(Activity spemActivity, List performAssociationList, List assistAssociationList)
SubFlowActivity convert2Sub(Activity spemActivity, List performAssociationList, List assistAssociationList)
NormalActivity convert2Normal(Activity spemActivity, List performAssociationList, List assistAssociationList)
③ActivitySetRule
定義ActivitySet類的轉(zhuǎn)換規(guī)則,主要方法如下:
//轉(zhuǎn)換Step為NormalActivity
NormalActivity convert2Normal(Activity father,Step step,List performAssociationList)
//轉(zhuǎn)換spemActivity包含的Step為ActivitySet對象
ActivitySet convert(Activity spemActivity, List performerAssociationList, List stepAssociationList)
④WorkflowProcessRule
定義WorkflowProcess類的轉(zhuǎn)換規(guī)則,主要方法如下:
List convertProcesses(Activity composite, Package spemPackage//遞歸生成WorkflowProcess對象列表)
⑤PackageRule
定義Package類的轉(zhuǎn)換規(guī)則,主要方法如下:
//轉(zhuǎn)換spemPackage為Package對象
Package convert(com.wzg.spemPackage spemPackage)
(5)對象轉(zhuǎn)換器
對象轉(zhuǎn)換器執(zhí)行對象轉(zhuǎn)換。在實現(xiàn)中,Spem2Xpdl類提供了轉(zhuǎn)換方法。主轉(zhuǎn)換算法如下:
主算法
輸入:SPEM Package對象
輸出:XPDL Package對象
①創(chuàng)建XPDL Package對象。
②將SPEM Package的Actor對象轉(zhuǎn)換為XPDL Participant對象。
③調(diào)用WorkflowProcess生成算法,得到XPDL WorkflowProcess對象列表。
④根據(jù)②、③設置①中的XPDL Package對象。
⑤返回XPDL Package對象。
WorkflowProcess生成算法
輸入:SPEM Package對象
輸出:XPDL WorkflowProcess對象列表
①如果SPEM Package對象的活動列表為空,那么返回NULL。
②否則,創(chuàng)建XPDL WorkflowProcess對象列表wpList。
③創(chuàng)建XPDL WorkflowProcess對象,對于SPEM Package中的每個活動spemActivity:
如果spemActivity的Children屬性不為空,取出spemAcitivity的Children列表,遞歸調(diào)用③;將spemActivity所對應的WorkflowProcess對象添加到wpList;轉(zhuǎn)換spemActivity為SubFlowActivity,并將SubFlowActivity對象添加到WorkflowProcess對象的ActivityList屬性中。
如果該spemActivity的stepList屬性不為空,生成該spemActivity所對應的ActivitySet對象,同時將spemActivity轉(zhuǎn)換為BlockActivity對象;將ActivitySet對象添加到WorkflowProcess對象的ActivitySetList中,同時將BlockActivity對象添加到XPDL WorkflowProcess對象的ActivityList屬性中。
否則,將spemActivity轉(zhuǎn)換為NormalActivity。將NormalActivity對象添加到WorkflowProcess對象的ActivityList屬性中。
④轉(zhuǎn)換SPEM關系對象為Transition,并添加到WorkflowProcess對象的TransitionList屬性中。
⑤將XPDL Workflow對象添加到XPDL WorkflowProcess對象列表中。
⑥返回XPDL WorkflowProcess列表。
4實例研究
為了驗證轉(zhuǎn)換引擎的可用性,以中國科學院軟件所互聯(lián)網(wǎng)軟件實驗室開發(fā)的SoftPM[9]評審過程為例,在Enterprise Architecture中建立了評審過程的SPEM模型,如圖8所示。
在模型中,定義了四種過程角色。這些過程角色通過Perform或者Assist關系與過程活動相連;活動之間通過中間產(chǎn)品或者Precedes關系相關聯(lián)。在本模型中,Prereview活動由包含四個子活動的活動圖來表示,而Independent Review活動又由包含三個活動步驟的狀態(tài)圖來表示。
經(jīng)過SPEM2XPDL模型轉(zhuǎn)換引擎轉(zhuǎn)換出來的XPDL模型在Shark中的表示如圖9所示。
圖1中,SPEM模型中PreReview活動被轉(zhuǎn)換為XPDL中類型為SubFlowActivity的活動。PreReview活動包含的子活動被轉(zhuǎn)換到XPDL的WorkflowProcess中;Independent Review活動被轉(zhuǎn)換為XPDL中類型為BlockActivity的活動,Independent Review包含的活動步驟被轉(zhuǎn)換為XPDL中與BlockActivity相關聯(lián)的ActivitySet;SPEM模型中活動的各種關系都被正確轉(zhuǎn)換到XPDL模型中。該XPDL模型可以在Shark中進行過程執(zhí)行,此應用充分驗證了SPEM2XPDL模型轉(zhuǎn)換引擎的可用性。
5結(jié)束語
本文建立了SPEM2XPDL模型轉(zhuǎn)換規(guī)則,設計實現(xiàn)了SPEM2XPDL模型轉(zhuǎn)換引擎,并通過實例驗證了引擎的可用性。該引擎與SoftPM[9]的過程資產(chǎn)工具結(jié)合,將從過程定義、過程執(zhí)行、過程度量方面對企業(yè)實施過程管理提供全方位支持。
本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。