首先要说明下一个可能的误区,并不是越高级的越复杂的模型就一定好,不是螺旋模型一定比瀑布模型一定好,与每个项目的需要的开发人员数目和进度安排一样,根据各个项目特性,都各不相同。每个项目都有自己的一个适合的生命周期模型,具体决定选择模型上有几个维度:需求是否清晰、客户的信息化能力、行业的特点、是否采用新的架构和技术、开发人员的经验(包括程序员和架构师)、管理方面的经验等。而且越是复杂的模型对架构师的要求越高,如果没有很强的能力那么可能适得其反。具体的生命周期模型有:瀑布模型、螺旋模型、增量模型、迭代。
这些模型只是理论,没有哪个项目会严格的按照生命周期模型来做的。下面简单的说下各个模型的特点:
瀑布模型
瀑布模型是基础,在其他模型中常会用到瀑布模型。瀑布模型适合那些已经需求很明确的项目。瀑布模型要求软件开发严格按照需求 ->分析->设计->编码->测试的阶段进行,每一个阶段都可以定义明确的产出物和验证准则。瀑布模型在每一个阶段完成后都可以组织相关的评审和验证,只有在评审通过后才能够进入到下一个阶段。需求设计和开发人员往往在项目开始后就会全部投入到项目中,而不是分阶段投入,因此采用瀑布模型会导致项目人力资源过多的闲置的情况。在概念需求阶段人力能够得到充分保证的情况下,瀑布模型和迭代模型在开发周期上并不会存在太大的差别.反而是很多项目对于迭代或敏捷模型用不好,为了赶进度在前期需求不明确,没有经过一个总体的架构设计情况下就开始编码,后期出现大量的返工而严重影响进度。
螺旋模型
可以理解成瀑布+原型+风险分析+迭代,是一个反复迭代的过程。螺旋模型实现了随着项目成本投入不断增加,风险逐渐减小。以帮我我们加强项目的管理和跟踪,在每次迭代结束后都需要对产出物进行评估和验证,当发现无法继续进行下去时可以及早的终止项目。螺旋模型复杂的地方在于尽责,专心和知识渊博的管理。因为对于每一次迭代我们要制定出清晰的目标,分析出相关的关键风险和计划中可以验证和测试的交付物并不是一件容易的事情。螺旋模型的每一次迭代只包含了瀑布模型的某一个或两个阶段。如第二次迭代重点是需求,第三次迭代是总体设计和后续设计开发计划等。因此这是和RUP提倡的迭代模型是有区别的,RUP的每一次迭代都会包含需求,设计,开发和测试等各个阶段的活动。RUP迭代的目的在于逐步求精而不是仅仅完成瀑布模型某一阶段的工作。
增量和迭代模型
增量要求系统业务功能可分,整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。迭代每次都包含了需求,设计和开发,测试等各个过程,而且每次迭代完成后都是一个可以交付的原型。迭代不是并行,在每次迭代过程中仍然要遵循需求->设计->开发的瀑布过程。如果项目没有一个很好的架构师,很难规划出每次迭代的内容和要到达的目标,验证相关的交付和产出。因此迭代模型虽然能够很好的满足与用户的交付,需求的变化,但确是一个很难真正用好的模型。就对风险的消除上,增量和迭代模型都能够很好的控制前期的风险并解决。但迭代模型在这方面更有优势。迭代模型更多的可以从总体方面去系统的思考问题,从最早就可以给出相对完善的框架或原型,后期的每次迭代都是针对上次迭代的逐步精化。
最后几点:
1.在前期需求明确的情况下尽量采用瀑布模型或改进型的瀑布模型.
2.在用户无信息系统使用经验,需求分析人员技能不足情况下一定要借助原型.
3.在资金和成本无法一次到位情况下可以采用增量模型,软件产品分多个版本进行发布
4.对于全新系统的开发必须在总体设计完成后再开始增量或并行.
5.对于编码人员经验较少情况下建议不要采用敏捷或迭代等生命周期模型.
参考:
http://blog.youkuaiyun.com/tomfshao/article/details/4378299
http://www.cnblogs.com/blsong/archive/2010/10/14/1851214.html