一个项目要交付特定的产品、成果和完成特定的服务。项目生命周期定义项目的开始与结束。假如一个项目交付特定的产品,那么该产品的生命期比项目生命周期更长,从该产品的研发(此时是项目的任务),到该产品投入使用(或运营),直到该产品的消亡就构成了该产品的生命周期。许多项目与组织发展战略或正在进行的工作有关。在一些组织中,一个项目只有在完成了可行性研究、初步计划或者其他等同形式的分析之后才能正式批准。在这些案例中,初步规划或分析可以采用独立项目的形式。例如,在确定开发最终产品之前,可以将原型的开发和测试作为单独的项目。
问题、机会或业务需求是典型的激发项目的驱动力。这些压力的结果就导致管理层通常必须在尊重其他潜在项目的需要和资源要求的前提下排定当前项目申请的优先级。
为将项目与执行组织中的持续运营联系起来,项目生命周期定义中也明确了在项目结束时所包括(或不包括)的移交行为。例如当一项新产品投入生产或一个新的软件程序投入市场的时候,应当注意将项目生命周期和产品生命周期区分开。例如,一个负责开发准备投入市场的新的台式计算机的项目只是产品生命周期中的一部分。图4-12插绘了这两者的联系。在某些应用领域(例如新产品开发和软件开发)中,组织是将项目生命周期作为产品生命周期的一部分来考虑的。
1.瀑布模型
瀑布模型是一个经典的软件生命周期模型,也叫预测型生命周期、完全计划驱动型
生命周期。在这个模型里,在项目生命周期的尽早时间,要确定项目范围及交付此范围所需的时间和成本。
在这个模型里,项目启动时,项目团队专注于定义产品和项目的总体范围,然后制定产品(及相关可交付成果)交付计划,接着通过各阶段来执行计划。应该仔细管理项目范围变更。如果有新增范围,则需要重新计划和正式确认。
以下情况优先选择这种生命周期:项目需求明确、充分了解拟交付的产品、有厚实的行业实践基础、或者整批一次性交付产品有利于干系人。
例如开发一个软件项目时,如果采用这个模型的话,一般将软件开发分为可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码(含单元测试)、测试、运行维护等几个阶段,如图4-13所示。
瀑布模型中每项开发活动具有以下特点。
(1)从上一项开发活动接受其成果作为本次活动的输入。
(2)利用这一输入,实施本次活动应完成的工作内容。
(3)给出本次活动的工作成果,作为输出传给下一项开发活动。
(4)对本次活动的实施工作成果进行评审。若其工作成果得到确认,则继续进行下一项开发活动;否则返回前一项,甚至更前项的活动。尽量减少多个阶段间的反复。以相对来说较小的费用来开发软件。
2.迭代模型
在大多数传统的生命周期中,阶段是以其中的主要活动命名的:需求分析、设计、编码、测试。传统的软件开发工作大部分强调过程的串行执行,也就是一个活动需要在前一个活动完成后才开始,从而形成一个过程串,该过程串就组成了软件项目的生命周期。在迭代模型中,每个阶段都执行一次传统的、完整的串行过程串,执行一次过程串就是一次迭代。每次迭代涉及的过程都包括不同比例的所有活动。
RUP (Rational Unified Process)软件统一过程是一种“过程方法”,它就是迭代模型的一种。
RUP可以用二维坐标来描述。横轴表示时间,是项目的生命周期,体现开发过程的动态结构,主要包括周期( Cycle)、阶段(Phase)、迭代(Iteration)和里程碑(Milestone);纵轴表示自然的逻辑活动,体现开发过程的静态结构,主要包括活动(Activity)、产物( Artifact)、工作者(Worker)和工作流(Workflow),如图4-14所示。
RUP中的软件生命周期在时间上被分解为4个顺序的阶段,分别是:初始阶段( Inception)、细化阶段(Elaboration)、构建阶段(Construction)和交付阶段(Transition)。这4个阶段的顺序执行就形成了一个周期。
每个阶段结束于一个主要的里程碑( Major Milestone)o在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。
每个阶段,从上到下迭代,亦即从核心过程工作流“商业建模”“需求调研”“分析与设计”……执行到“部署”,再从核心支持工作流“配置与变更管理”“项目管理”执行到“环境”完成一次迭代。根据需要,在一个阶段内部,可以完成一次到多次的迭代。各阶段的主要任务如下。
(1)初始阶段:系统地阐述项目的范围、确定项目的边界,选择可行的系统构架,计划和准备商业文件。商业文件包括验收规范、风险评估、所需资源估计、体现主要里程碑日期的阶段计划。
(2)细化阶段:分析问题领域,建立健全体系结构并选择构件,编制项目计划,淘汰项目中最高风险的元素。同时为项目建立支持环境,包括创建开发案例,创建模板、准则并准备工具。
(3)构建阶段:完成构件的开发并进行测试,把完成的构件集成为产品,测试产品所有的功能。构建阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。
(4)交付阶段:交付阶段的目的是将软件产品交付给用户群体。当本次开发的产品成熟得足够发布到最终用户时,就进入了交付阶段。
交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。
软件产品交付给用户使用一段时间后,如有新的需求则该开始另一个开发周期,就开始下一个的“初始、细化、构建和交付,,周期。
以下。隋况优先选择迭代和增量型生命周期:组织需要管理不断变化的目标和范围,组织需要降低项目的复杂性,或者,产品的部分交付有利于一个或多个干泵人,且不会影响最终或整批可交付成果的交付。
大型复杂项日通常采用迭代方式来实施,这使项目团队可以在迭代过程中综合考虑反馈意见和经验教训,从而降低项目风险。
3.敏捷方法
什么是敏捷方法?是一种以人为核心、迭代、循序渐进的开发方法,适用于一开始并没有或不能完整地确定出需求和范围的项目,或者需要应对快速变化的环境,或者需求和范围难以事先确定,或者能够以有利于干系人的方式定义较小的增量改进。
敏捷方法,也叫适应型生命周期、或者变更驱动方法。
在软件项目的敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷方法的目的在于应对大量变更,获取干系人的持续参与。敏捷方法里迭代很快(通常2~4剧迭代1次),而且所需时间和资源是固定的。虽然早期的迭代更多地聚焦于H。划活动,但通常在每次迭代中都会执行多个过程。
以前,很多软件项目经理在学习项目管理时,一方面陶醉于其清晰的过程流程,但同时又闲惑于它与自己的实际工作的差异。例如在开发软件产品时,一开始并没有或不能完整地确定出需求和范围,而是首先实现一个可以运行的大概的软件,然后和客户进一步地不断沟通探讨,不断修改甚至重构,“边设计、边建设”,小步快跑,并最终实坝客户需求。
所以说,实际工作中的项目可能有两类比较极端:一类就好比是建设奥运场馆,它是大型的、相对固定或变更较少的、需要“集团军”来完成的;另一类就好比是建设一个SNS交友网站,开发一个桌面应用软件,或设计一款时尚手机,它们是小型的、不甚确定或变更很多的、需要“特种部队”来完成的。
相应的,项目阶段之间的关系大致有三类:顺序、重叠,以及迭代。对于奥运场馆,阶段间的关系一般是顺序的:设计、采购、施工、验收及交付。而对于软件项目而言,很可能采用的是迭代关系:需求分析一设计及编程一得到部分可交付成果,然后再这样进行下一轮,即把软件的整个需求分析和设计编程都分散开来到每个阶段,每次只实现一部分可交付成果,尽早得和客户沟通、分析、调整,以满足最终的要求。对后者而言,如果…开始就消耗很多的资源、时间、花费在前期工作比如设计上,到中后期却发现并不适合客户的需求,这样的风险和变更所造成的代价是非常大的。
4.V模型
首先,看V模型的图示,V模型如图4-15所示。
V模型的左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即各测试过程的各个阶段。在不同的组织中对测试阶段的命名可能有所不同。
在模型图中的开发阶段一侧,先从定义业务需求、需求确认或测试计划开始,然后要把这些需求转换到概要设计、概要设计的验证及测试计划,从概要设计进一步分解到详细设计、详细设计的验证及测试计划,最后进行开发,得到程序代码和代码测试计划。接着就是测试执行阶段一侧,执行先从单元测试开始,然后是集成测试、系统测试和验收测试。
V模型的价值在于它非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发各阶段的对应关系。
(1)单元测试的主要目的是针对编码过程中可能存在的各种错误,例如用户输入验证过程中的边界值的错误。
(2)集成测试主要目的是针对详细设计中可能存在的问题,尤其是检查各单元与其他程序部分之间的接口上可能存在的错误。
(3)系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行,例如在产品设置中是否能达到预期的高性能。
(4)验收测试通常由业务专家或用户进行,以确认产品能真正符合用户业务上的需要。
在不同的开发阶段,会出现不同类型的缺陷和错误,所以需要不同的测试技术和方法来发现这些缺陷。
5.原型化模型
原型化模型是为弥补瀑布模型的不足而产生的。
原型化模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,经过和用户针对原型的讨论和交流,弄清需求以便真正把握用户需要的软件产品是什么样子的。充分了解后,再在原型基础上开发出用户满意的产品。在实际中原型化经常在需求分析定义的过程进行。原型化模型减少了瀑布模型中因为软件需求不明确而给开发工作带来的风险,因为在原型基础上的沟通更为直观,也为需求分析和定义,提供了新的方法。原型化模型的应用意义很广,瀑布和V模型将原型化模型的思想用于需求分析环节,来解决因为需求不明确而导致产品出现严重后果的缺陷。
对于复杂的大型软件,开发一个原型往往达不到要求,为减少开发风险,在瀑布模型和原型化模型的基础上的演进,出现了螺旋模型以及大量使用的RUP。
6.螺旋模型
螺旋模型是一个演化软件过程模型,将原型实现的迭代特征与线性顺序(瀑布)模型中控制的和系统化的方面结合起来。使得软件的增量版本的快速开发成为可能。在螺旋模型中,软件开发是一系列的增量发布。在早期的迭代中,发布的增量可能是一个纸上的模型或原型;在以后的迭代中,被开发系统的更加完善的版本逐涉产生。螺旋模型的整个开发过程如图4-16所示。
图4-16中的螺旋线代表随着时间推进的工作进展;开发过程具有周期性重复的螺旋线形状。4个象限分别标志每个周期所划分的4个阶段:制定计划、风险分析、实施工程和客户评估。螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的系统。