软件生存周期模型是一个包括软件产品开发、运行和维护中有关过程、活动和任务的框架,覆盖了从该系统的需求定义到系统的使用终止。
常见的软件生存周期模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。
模型 | 说明 | 优缺点 | |
1 | 瀑布模型 (Waterfall Model) | 定义:将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。包括需求分析、设计、编码、测试、运行和维护。规定了由前至后、相互衔接的固定次序,如同瀑布流水,逐级下落。 特点:以文档为驱动、适合于需求很明确的软件项目。以项目阶段评审和文档控制为手段,有效控制整个开发过程。 前提:假定待开发系统的需求是完整、简明和一致的,而且可以先于设计和实现之前产生。 | 优点: (1)容易理解,管理成本低; (2)强调开发阶段性早期计划及需求调查和产品测试。 缺点: (1)客户必须能够完整、正确和清晰地表达需求; (2)在项目进行中,很难评估真正的进度状态; (3)当项目结束时,积累大量的集成和测试工作; (4)在项目结束前,无法演示系统。 (5)风险控制能力弱,需求或设计错误在项目后期才能被发现,从而导致项目延期,开发费用超支。 |
2 | 增量模型 (Incremental Model) | 定义:融合了瀑布模型基本成分和原型实现的迭代特征。随着日程时间的进展而交错的线性序列,每个线性序列产生软件的一个可发布的“增量”,第1个增量往往是核心产品。强调每一个增量均发布一个可操作的产品 前提:假定能将需求分段为一系列增量产品,每个增量可以分别开发。 | 优点:具有瀑布模型的所有优点, (1)第一个可交付版本所需要的成本和时间很少; (2)开发由增量表示的小系统所承担的风险不大。 (3)第一个版本发布后,可以减少用户需求变更。 (4)运行增量投资,即在项目开始时,可以仅对一个或两个增量投资 缺点: (1)如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定; (2)如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布; (3)管理发生的成本、进度和配置的复杂性,可能会超出组织的能力。 |
3 | 演化模型 (Evolutionary Model) | 定义:针对事先不能完整定义需求的软件开发,在快速开发一个原型的基础上,根据用户意见和建议改进原型,获得原型新版本。重复这一过程,最终可得到令用户满意的软件产品。 | 优点: 任何功能一经开发就能进入测试,以便验证是否符合产品需求,可以帮助引导出高质量的产品要求。 缺点: 如果不加控制地让用户接触开发中尚未稳定的功能,可能对开发人员及用户都会产生负面影响。 |
4 | 螺旋模型 (Spiral Model) | 定义:将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补这两种模型的不足。 将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,每个螺旋周期分为4个步骤: (1)制订计划。确定软件目标,选定实施方案,明确项目开发限制条件; (2)风险分析。分析所选方案,识别风险,消除风险。 (3)实施工程。实施软件开发,验证阶段性产品。 (4)用户评估。评价开发工作,提出修正建议,建立下一个周期的开发计划。 螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应。特别适用于庞大、复杂并且具有高风险的系统。 | 优点: (1)与瀑布模型相比,支持用户需求的动态变化,为用户参与关键决策提供了方便,有助于提高软件的适应能力, (2)为项目管理人员及时调整管理决策提供便利,降低软件开发风险。 缺点: (1)需要开发人员具有相当丰富的风险评估经验和专门知识。 (2)过多的迭代次数会增加开发成本,延迟提交时间。 |
5 | 喷泉模型 (Fountain Model) | 定义:是一种以用户需求为动力,以对象为驱动的模型,适合于面向对象的开发方法。 对比瀑布模型: (1)克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,使开发过程具有迭代性(开发活动常需要重复多次)和无间隙性(在开发活动如分析、设计、编码之间不存在明显边界)。 (2)不同于瀑布模型,按照需求分析、设计和编码顺序进行,而是允许活动同时交叉、迭代地进行。 | 优点:各阶段没有明显界限,开发人员可以同步进行。提高项目开发效率,节省开发时间。 缺点: (1)在各开发阶段重叠,需要大量开发人员,不利于项目管理。 (2)要求严格管理文档,使得审核难度加大。 |