摘要:采用工作流技術構建軟件項目管理系統的架構,通過
WindowsWorkflowFoundation技術把系統業務流程的應用邏輯和過程邏輯分離,在不修改具體功能模塊的情況下,只需修改過程模型即可改變系統功能,從而實現對系統業務流程的過程化的集成管理。
關鍵詞:WindowsWorkflowFoundation;工作流技術;軟件項目管理系統;應用邏輯;過程邏輯
一、引言
隨著信息化進程的推進和軟件業的蓬勃發展,軟件系統的規模越來越大。如何高效率、高質量地開發計算機軟件成為軟件組織必須積極應對的一個課題。
事實證明,軟件開發過程的項目管理對提高軟件質量具有重要作用,[1]在對軟件實施項目管理的過程中,離不開項目管理工具的支持,[2]而軟件項目管理系統是主要的項目管理工具之一,它代替傳統的管理方式,可以及時、準確地收集到信息,科學地分析項目執行的動態情況和存在的問題,予以協調解決,進而保證項目的順利進行。但傳統的軟件項目管理系統由于本身的局限性,只能處理特定的開發流程,[3]當開發流程發生變化時,就必須修改系統的應用程序或重新開發新的應用程序,無法滿足項目開發流程多樣化和需求的不確定性。
本文使用NetFramework3.0框架所提供的WindowsWorkflowFoundation技術生成工作流,采用工作流技術構建軟件項目管理系統,將全部的工作內容抽象出一系列能夠用工作流所解釋并執行的工作流程定義,通過WindowsWorkflowFoundation技術把業務流程的應用邏輯和過程邏輯分離,可以不修改具體功能模塊而只修改過程模型來改變系統功能,從而可以實現對業務流程的部分或全部過程的集成管理。[4]
基于WindowsWorkflowFoundation技術的軟件項目管理系統,通過工作流建模可以非常方便、靈活地定義軟件開發流程模型。當開發流程需要發生變化時,可以迅速地修改流程模型及表單定義來滿足需求,具有高度的靈活性和實用性,能夠有效地解決傳統項目管理系統的不足。
二、軟件項目管理系統的流程結構分析
軟件項目管理是管理項目開發的整個過程,而不是管理項目開發的結果。只有管理好整個開發過程,才可能會有好的結果,因此軟件項目管理的實質是過程管理。
過程管理的核心思想是不能完全依賴于目標管理控制方法,而應該關注項目開發各階段的每一個重要開發過程的正確執行。軟件產品的開發是由具體的軟件開發過程來完成的,軟件開發過程的質量在很大程度上決定了軟件產品的質量和軟件生產效率。
軟件過程有時也被稱為軟件生命周期,因為它描述了軟件產品從概念形成開始,經過開發、使用和維護,直到最后退役的整個生命過程對軟件項目的管理,實際上就是對軟件生命周期各個階段的管理,是對軟件開發過程的管理。
所以可以這樣說,軟件項目管理的根本目的是為了讓軟件項目尤其是大型項目的整個軟件生命周期(從分析、設計、編碼到測試、維護全過程)都能在管理者的控制之下,以預定成本按期、按質的完成軟件交付用戶使用。
軟件生命周期根據軟件所處的狀態、特征以及軟件開發活動的目的、任務可以分為若干階段。全方位管理軟件項目開發過程中的各個階段,與軟件項目各個節點上的管理數據形成一個緊密結合的整體開發過程(如圖1所示)。
圖1 軟件項目開發流程圖及主要工作產品
每個階段既相對獨立又互相聯系,每個階段又可以分為若干個子過程,各個子過程之間關系緊密,而且并行的、反復循環的工作內容比較頻繁。上一階段的工作結果是下一個階段開展工作的前提和依據,而下一階段工作則是上一階段工作的進化和完善,是一個迭代開發的過程。
不論是作坊式開發,還是團隊協作開發,這7個階段都是不可缺少的。在時間上有先后順序,因而圖1中并未含有控制階段,但軟件項目管理過程中的控制卻是無時無處不在,貫穿于整個軟件開發過程,使軟件開發各個階段能按預定的計劃進行。
隨著軟件質量體系發展,過程管理的作用將越來越明顯。無論是對軟件項目,還是對整個軟件企業而言,從過程管理的角度來評價軟件開發應該成為評價軟件質量的重要標準之一。
三、基于WindowsWorkflowFoundation技術的工作流實現方法
(一)WindowsWorkflowFoundation技術簡析MicrosoftWindowsWorkflowFoundation(WWF)是一個廣泛且通用的工作流框架,應用于Windows平臺開發工作流解決方案。WindowsWorkflowFoundation從下到上,在每個級別都針對可擴展性進行了設計。基于WindowsWorkflowFoundation的解決方案,得到Microsoft.NET代碼支持且由在宿主應用程序中運行的互連組件組成。就像在定制的環境中以可視方式創建Web頁一樣,您需要在可視設計器中制訂特定工作流的步驟,并且添加代碼隱藏工作流組件以實現規則并定義業務過程。
WWF主要有兩類工作流:順序工作流(Sequen2tialWorkflow)和狀態機工作流(StateMachineWorkflow)。
順序工作流是為執行一種由一系列預定義的步驟組成的任務而設計的,它是只向前運行的,同時也用于那些重復的、流程相對固定的場景中。這種體系結構是模擬基于過程的應用程序。
狀態機工作流是為事件驅動的工作場景設計的。一個狀態機工作流包含兩個或兩個以上的狀態,且任意時刻只有一個處于激活狀態。
本系統把工作流建模成一個狀態機。工作流本身是由許多狀態組成的,其中一個狀態指定為起始狀態。每個狀態能接收一組指定的事件,事件的觸發將導致狀態的遷移。當狀態遷移到終止狀態時,工作流就結束了。
(二)基于WWF技術系統工作流的模型設計與代碼實現
1.工作流模型設計。在使用傳統的程序軟件(如ASP)編寫管理系統時,在流程跳轉即頁面與頁面之間切換時,一般使用的都是在前一個頁面上做一個操作按鈕,按鈕的功能為調用下一個頁,當具有相應權限的用戶點擊此按鈕時,將激活其功能。但是,如果用戶的開發流程改變了,那么就需要到所有ASP頁面中去修改大量的代碼,這樣做相當麻煩、耗時且容易出錯。
本系統使用NetFramework3.0所提供的Win2dowsWorkflowFoundation框架來創建一個工作流模型,通過使用這個工作流模型所提供的流程控件、狀態管理、事務和同步器,開發人員可以分離應用程序邏輯和業務邏輯,只要通過修改業務邏輯就可以改變應用程序邏輯,對于應用程序邏輯不用作任何的修改。構造一個高層次的抽象,達到提高開發者效率的目的。
軟件項目管理系統中項目維護階段的一個總體流程,經歷了5個頁面,本文就以這5個頁面為模型使用WindowsWorkflowFoundation創建一個狀態機工作流,來描述應用程序所需要的處理過程。使用.NET打開上述項目維護階段對應的.NET項目(如圖2所示)
圖2 項目維護階段的.NET項目
此窗口現在分為左右兩側,左側顯示各個頁面所對應的代碼,右側是系統提供的“解決方案資源管理器”(如圖3所示)。在“解決方案資源管理器”中有三個部分的內容,下面對其分別進行介紹。
圖3 解決方案資源管理器
2.工作流設計與代碼實現。根據圖4中工作流架構,項目解決方案中三類工作流技術實現方法如下:
(1)項目程序頁面結構。“解決方案資源管理器”中的第一部分是以擴展名為aspx的用戶應用程序頁面為主的項目程序頁,里面包含了上述項目維護階段的5個頁面,分別為用戶需求提報頁(user_xiuqiu.aspx)、部門技術經理確認頁(JiShuJingLiinfo.aspx)、項目經理確認頁(XiangMuJingLiinfo.aspx)、需求維護項目啟動頁(XiangMuqidong.aspx)和需求驗收頁(XiangMufinish.aspx),它們分別對應上面所說的5個流程頁面。除了這5個頁面以外,還有一個名為Web.config的文件,是連接用戶應用頁與Workflow工作流的系統配置文件,即連接應用程序邏輯和業務邏輯的系統文件。
Web.config文件可以看成是工作流Mapping,工作流Mapping是真正連接用戶應用邏輯和工作流業務邏輯的一個橋梁,通過在Mapping中定義用戶所訪問頁面的順序來定義工作流的流程,即工作流的跳轉。在上述代碼中的pageworkflowmapping中可以清楚的看到頁面調用的順序,而在用戶應用頁面中并沒有定義每個頁面的下一個跳轉頁面。這樣以來,當需要改變用戶的應用程序邏輯時,只需更改工作流中的Mapping就可以了。
(2)狀態機工作流。“解決方案資源管理器”中的第二部分是工作流Activity項目(PageFlowLi2brary),如圖3所示。此工作流定義了5個頁面跳轉的工作流。本項目創建的是一個狀態機工作流。
WWF為創建狀態機工作流提供了與狀態機相關的活動(圖4),這些活動可以看成是構建工作流的控件。它們提供了各種豐富的功能,可以使用這些活動來控制工作流的業務邏輯流程。
圖4 WWF為狀態機工作流提供的部分相關活動
一個狀態機工作流可以從StateMachineWork2flow類中繼承,這一類中已經實現了狀態機工作流的大部分功能。一旦繼承了這個類,就可以開始在工作流中加入所需的狀態,并使用SetState活動或事件驅動的活動(如EventSink)把這些狀態連接起來。工作流類XiangMuProcessingWorkflow是整個程序的基礎,以下所列的是該類的代碼:
usingSystem;
usingSystem.Workflow.ComponentModel;
usingSystem.Workflow.Runtime;
usingSystem.Workflow.Activities;
usingSystem.Workflow.Activities.Rules;
namespaceMicrosoft.Samples.Workflow.
Quickstarts.StateMachine
{publicpartialclassXiangMuProcessing2Workflow:StateMachineWorkflow
{privatestringXiangMuId;
privatestringitemStatus;
publicXiangMuProcessingWorkflow()
{InitializeComponent();}
privatevoidInitializeComponent()
{}
}
}
創建活動和參數綁定:
WWF中有兩個類ActivityBind和Parame2terBinding,是專門用來將活動中的變量綁定到方法調用所需的參數上。這個方法定義在一個接口中,接口的實現就是注冊到工作流中的服務。以下的代碼示例了如何創建和聯系工作流的私有變量和參數,這些參數將用來根據當前工作流的狀態來更新宿主。
第一個狀態監聽來自宿主的事件,這個事件通知工作流一個新的需求已經被提交了,應該馬上處理它。當要創建狀態時,狀態的第一個子活動必須是StateInitialization活動或實現了IEventActivity接口的活動。本工作流的WaitForXiangMuState采用了后者,因為這個狀態是由宿主程序的事件激活的。
EventSink活動是用來監聽注冊在WWF運行庫中的服務事件。在本程序中,這個服務由宿主程序提供。在工作流中定義IXiangMuingService接口,這個接口將由宿主程序實現。
一旦EventSink活動處理了觸發事件后,一個狀態消息需要通過IXiangMuingInterface發回宿主程序。工作流需要調用接口中的ItemStatusUpdate方法,并傳遞XiangMuId和newStatues參數。而調用接口方法的工作,就交給InvokeMethodActivity活動了。這里指定活動的InterfaceType參數為系統需要的服務接口,MethodName屬性設為要調用的服務接口中的方法名稱,然后在ParameterBindings中加入之前構造好的參數綁定,最后為活動的MethodIn2voking事件指定一個事件處理程序,用來改變當前需求的狀態。因為已經把XiangMuId和newStatus參數綁定到了私有變量XiangMuId和itemStatus上了,所以為ItemStatusUpdate方法傳遞參數的過程是由WWF運行庫自動完成的。
更新完成之后,WaitingForXiangMuState狀態已經準備好轉移下一個狀態,即XiangMuPrecess2ingState狀態。SetState活動是專門負責狀態轉移的。把一個SetState活動加入到EventDriven的最后一環,當一切處理完后,SetState活動將執行,并立刻跳轉到指定的下一個狀態。
另外,可以在InvokeMethodActivity活動執行的前一刻,加入一些附加的邏輯。只需為MethodIn2voking事件指定一個處理程序,就能做到這一點。MethodInvoking事件的處理程序為itemStatus和XiangMuId變量指定了新的值。事件處理程序的指定,已經在上面的代碼中實現了。
使用WWF所提供的活動能夠靈活地構建工作流,每一個工作流并沒有指出它所對應的前臺用戶應用程序頁面,只是定義了業務流程的跳轉。WWF就是通過這種方式分離了應用程序邏輯和業務邏輯。
(3)工作流服務器。“解決方案資源管理器”中的第三部分是工作流服務器(PageFlowService),如圖5所示。工作流服務器為工作流提供了系統數據、工作流活動定義、從工作流中調用的外部方法等,為工作流的定義和執行提供了基礎。
圖5 工作流服務器
四、結束語
基于工作流解決方案的真正優點,是使復雜的進程更易于建模和實現,更重要的是使其更易于改進和擴展。采用WindowsWorkflowFoundation(WWF)技術,使用戶可以直觀地設計復雜的算法,從而解決業務問題并為進程建模,為WindowsWorkflow程序提供了托管執行環境,并為程序提供了持續時間、可靠性、掛起/恢復以及補償特征。在某種意義上,活動類似于中間語言(IL)操作碼或程序語句,但包含特定領域的知識。WWF技術使得程序語義具有聲明性且十分準確,使用戶能夠為接近實際進程的應用程序建模。 WWFSDK提供了廣泛的編程語言,專門用于復雜業務程序的建模。尤其是在這些程序可能隨時需要改進的情況下,用戶可以添加特殊活動來使用工作流,并使用內置行為活動來控制該工作流。
參考文獻:
[1]高琰,李建華,費耀平,等.基于CMM的軟件項目管理系統的設計與實現[J].計算機工程,2002(9).
[2]錢福培.美國項目管理軟件的應用與發展[J].軟件,1993(12).
[3]范玉順,吳澄.工作流管理技術研究與產品現狀及發展趨勢[J].計算機集成制造系統,2000(1).
[4]夏冬,白樹仁,鄧惠建.基于J2EE的工作流管理系統模型[J].計算機工程與科學,2006(3).(本文于2008年發表于《青島職業技術學院學報》)