1.1 选择软件开发模型
软件生命周期(Software Life Cycle)与软件开发模型(Software Development Model)有关,不同的开发模型,对应的生命周期略有差异。
生命周期指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编程和测试阶段,有时也包括软件实施与维护阶段。目前IT企业在软件开发实践中使用的各种生命周期模型,基本上是瀑布模型、增量模型、原型模型与迭代模型。
1.瀑布模型
瀑布模型(Waterfall Model)又称流水式过程模型,它形象地用阶梯瀑布描述,水由上向下一个阶梯接着一个阶梯地倾泻下来。在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前阶段的活动接受上一阶段活动的工作结果,实施完成所需的工作内容。对当前阶段活动的工作结果需要进行验证,如果验证通过,则该结果作为下一阶段活动的输入,继续进行下一阶段的活动,否则返回上一阶段进行修改。
瀑布模型选取的条件是:在开发周期内,客户的需求是稳定的。
2.增量模型
增量模型(Incremental Model)是遵循递增方式来进行软件开发的。软件产品被作为一组增量构件(模块),每次需求、设计、编程、集成、测试和交付一块构件,直到所有构件全部实现为止。
增量模型选取的条件是:项目本身可拆卸成多个模块,并且客户同意一个模块接着一个模块地交付。
一般而言,增量模型与迭代模型一起使用。
3.原型模型
原型模型(Prototype Model)的本意是:在初步需求分析之后,马上向客户展示一个软件产品原型(样品),对客户进行培训,让客户试用,在试用中收集客户意见,根据客户意见立刻修改原型,之后再让客户试用,反复循环几次,直到客户确认为止。
原型模型选取的条件是:开发者手中有相近或相似的产品原型。
一般而言,原型模型与迭代模型一起使用。
4.迭代模型
迭代模型(Iterative Model)的所谓迭代,是指活动的多次重复。从这个意义上讲,原型不断完善和增量不断产生,都是迭代的过程。因此,快速原型法和增量模型都可以看成是部分的迭代模型。但是,这里所讲的迭代模型是RUP(Rational Unified Process),它是一种最有代表性的迭代模型。RUP推出的一种“逐步求精”的面向对象的软件开发过程模型,被认为是软件界迄今为止最完善的、商品化的开发过程模型。
迭代模型的特点是:迭代或迭代循环驱动,每一次迭代或迭代循环,均要走完初始(规范业务与需求)、精化(架构设计与详细设计)、构建(编程与测试)、移交(产品化)这4个阶段。
迭代模型选取的条件是:在开发周期内,客户的需求是有变化的。
5.瀑布模型与迭代模型之间的关系
在宏观上,迭代模型是动态模型,瀑布模型是静态模型。一方面,迭代模型需要经过多次反复迭代,才能形成最终产品。另一方面,迭代模型的每一次迭代,实质上都是执行一次瀑布模型,都要经历初始、精化、构造、移交4个阶段(或需求、设计、实现、交付4个阶段),走完瀑布模型的全过程。
在微观上,迭代模型与瀑布模型都是动态模型。迭代模型与瀑布模型在每一个开发阶段(初始、精化、构造、移交)的内部,都有一个小小的迭代过程,只有经历这个小小的迭代过程,该阶段的开发工作才能做细做好。
瀑布模型与迭代模型之间的这种微妙关系,如图1-1所示。
图1-1 瀑布模型与迭代模型之间的关系
从图1-1可见,迭代中有瀑布,瀑布中有迭代,即你中有我、我中有你。
瀑布模型与迭代模型之间的关系,反映了人们对客观事物的认识论:要认识与掌握某一客观事物,必须经历由宏观到微观的多次反复过程。只有从宏观上反复迭代几次,才能看清全貌,掌握事物的宏观发展规律。只有从微观上反复迭代几次,才能吃透每个细节,掌握事物的微观发展规律。
6. 软件开发模型总结
以上介绍的4种开发模型,是IT企业常用的模型,它们的性能比较,如表1-2所示。
表1-2 4种开发模型性能对比
此外,自从敏捷文化出现之后,在一些中小型软件企业,XP模型(Extreme Programming Model)也迅速得到了应用。
除了上面介绍的几种常用模型之外,还有螺旋模型(Spiral Model)、喷泉模型(Fountain Model)等,目前这些模型在IT企业很少使用。