软件开发模型可以概括地描述软件过程,典型的软件模型有四种:瀑布模型、快速原型模型、增量模型、螺旋模型。
瀑布模型
瀑布模型是最早也是应用最为广泛的一种开发模型,它将软件生命周期分为制定计划、需求分析、软件设计、编码、测试、运行维护等基本活动,并且规定了这些活动自上而下、相互衔接的固定先后次序,如同瀑布流水一般。
瀑布模型特点
- 顺序性:前一阶段工作完成后才能开始下一阶段,前一阶段的输出作为下一阶段的输入。
- 依赖性:只有前一阶段输出正确,下一阶段的工作才可能得到正确的结果。
- 推迟实现:把逻辑设计和物理实现划分开,尽可能推迟程序的物理实现。
推迟实现是瀑布模型的一条重要指导思想,可理解为“欲速则不达”“磨刀不误砍柴工”,缺乏经验的软件开发人员往往喜欢接到开发任务后尽早地开始编写程序,但实践表明,过早地考虑程序实现而没有扎实好前期工作,往往导致大量返工,使得开发时间变得更长。 - 质量保证:强迫开发人员采用规范的技术方法,严格规定了每个阶段必须提交的文档,每个阶段结束前必须对产生的文档进行严格评审。
及时复审有利于尽早排查问题,降低开发成本,保证软件的优质质量。
瀑布模型缺点
- 要求一开始就给出所有的需求,并且之后不能有任何的变化。但这是不可能实现的,用户常常也难以给出所有精准的需求表达,同时在开发开始阶段存在许多的不确定性。
- 瀑布模型是由文档驱动的,也就意味着程序的运行版本要等到开发周期的很后期才能得到。在这之前,用户只能通过文档来了解产品的样子,而这恰恰可能导致最终的产品不能满足用户需求。
快速原型模型
该模型是快速建立起来的、可以在计算机上运行的程序,它所完成的功能一般是最终产品功能的一个子集。
基本想法是开发一个原型给用户,根据用户的使用和评价,重新修改模型。
一般步骤
- 收集需求。
- 快速建立原型。
- 用户评估原型,并进一步精化需求。
- 逐步调整原型使其满足用户需求。
快速原型模型优点
相对于瀑布模型,快速原型模型有以下优点:
- 为开发人员和用户提供了一种整理、分析和提炼软件需求的机制。开发人员给用户提供一个“原型”,用户很容易就能从中找到不满意的地方,好比建筑工程师与其拿着建筑图纸给客户讲解,不如直接给他看一个建筑物模型比划两下来得实在。
- 用户不必等很久才等到一个运行版本。
快速原型模型缺点
可能太慢、太大、难以使用,并没有考虑软件的质量和长期可维护性,因此在大多数项目中很少使用。
增量模型
增量模型中,软件产品被作为一系列增量构件来设计、编码、集成和测试。它由一系列线性序列构成,融合了瀑布模型的基本成分,并在每一个线性末尾产生一个软件可发布的“增量”(其实质便是一些列的瀑布模型)。同时增量模型也有与快速原型类似的过程。
增量模型特点
- 能在短时间内向用户提交可完成部分工作的产品。
- 逐步增加产品功能,从而使用户有较充裕的时间学习适应新产品,减少一个全新软件带给用户的冲击。
- 融合了瀑布模型和快速原型模型,在“需求有变化”是不可避免的时候,增量模型远远优于其余两种模型。
增量模型缺点
软件过程容易失去整体性,退化为“边做边改模型”。
螺旋模型
螺旋模型=瀑布模型+快速原型。
基本思想是使用原型及其他方法降低开发过程中的风险(降低风险是其他模型中所忽略的),而降低风险的一种方法是构建原型,因此可以简单的把螺旋模型理解为是每个阶段之前增加了风险分析的快速原型模型。
该模型特别适合于大型复杂的系统。
螺旋模型的特点
- 有利于已有软件的重用。
- 有助于把软件质量作为软件开发的一个重要目标。
- 减少了测试过多或测试不足带来的风险。
- 软件维护与软件开发没有本质区别。