摘要:采用工作流技术构建软件项目管理系统的架构,通过
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年发表于《青岛职业技术学院学报》)