1.瀑布模型
特征
- 从上一项活动接收该项活动的工作对象作为输入
- 利用这一输入实施该项活动应完成的内容;
- 给出该项活动的工作成果,作为输出传给下一项活动;
- 对该项活动实施的工作进行评审,若其工作得到确认,则继续下一项活动,否则返回前项,甚至更前项的活动进行返工。
优点
- 通过设置里程碑,明确每阶段的任务与目标
- 可为每阶段制定开发计划,进行成本预算,组织开发力量
- 通过阶段评审,将开发过程纳入正确轨道
- 严格的计划性保证软件产品的按时交付
缺点
- 瀑布模型是一种理想的线性开发模式
- 缺乏灵活性,不能适应用户需求的改变
- 开始阶段的小错误被逐级放大,可能导致软件产品报废
- 返回上一级的开发需要十分高昂的代价
- 随着软件规模和复杂性的增加,软件产品成功的机率大幅下降
2.螺旋模型
特征
- 每一圈是一个阶段,每个阶段里又有一些活动
- 阶段可分为:操作的概念、软件需求、产品设计、详细设计、编码、单元测试 、集成和测试、验收测试、实现
- 是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。
- 活动有:
- 制定计划:确定目标、方案和限制条件;
- 风险分析:评估方案、标识风险和解决风险;
- 实施工程:开发确认产品;
- 客户评估:计划下一周期工作。
优点
- 风险分析可使一些极端困难的问题和可能导致费用过高的问题被更改或取消
用户评价为需求的变更带来柔性
缺点
- 需要开发人员具有相当丰富的风险评估经验和专门知识
- 要求用户参与阶段评价,对用户来说比较困难,不易取得好的效果
3.原型模型
特征
- 立项以后先提交原型给用户,在用户试用的基础上进行需求调查与原形修改
- 强调用户对软件功能和使用性能的评价
- 设计、修改原型与试用交替进行
- 一次迭代中的开发步骤:
- 了解用户/设计者的基本信息需求
- 开发初始原型系统
- 用户/设计者试用和评估原型系统
优点
- 开发者与用户充分交流,可以澄清模糊需求,需求定义比其他模型好得多
- 开发过程与用户培训过程同步
- 为用户需求的改变提供了充分的余地
- 开发风险低,产品柔性好
- 开发费用低,时间短
- 系统易维护,对用户更友好
缺点
- 开发者在不熟悉的领域中不易分清主次,原型不切题
- 产品原型在一定程度上限制了开发人员的创新
- 随着更改次数的增多,次要部分越来越大,“淹没”了主要部分
- 原型过快收敛于需求集合,而忽略了一些基本点
- 资源规划和管理较为困难,随时更新文档也带来麻烦
- 只注意原型是否满意,忽略了原型环境与用户环境的差异
4.增量模型
特征
- 应用软件可用预先编好的、功能明确的产品部件定制而成, 并可用不同版本的部件实现应用的扩展和更新。
- 利用模块化方法,将复杂的难以维护的系统分解为互相独立、协同工作的部件,并努力使这些部件可反复重用。
- 突破时间、空间及不同硬件设备的限制,利用客户和软件之间统一的接口实现跨平台的互操作。
优点
- 构件组装模型导致了软件的复用,提高了软件开发的效率,面向对象技术是软件工程的构件组装模型的基础。
- 构件可由一方定义其规格说明,被另一方实现,然后供给第三方使用。
- 构件组装模型允许多个项目同时开发,降低了费用,提高了可维护性。
- 可实现分步提交软件产品。
缺点
- 可重用性和软件高效性不易协调。
- 缺乏通用的组装结构标准,而自定义的组装结构标准引入较大的风险。
- 需要精干的有经验的分析和开发人员,一般的开发人员插不上手。
- 客户的满意度低。
5.喷泉模型
特征
- 喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。
- 开发各阶段没有明确的界限。
- 克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。
- 使开发过程具有迭代性和无间隙性。
优点
- 提高软件项目的开发效率,节省开发时间。
缺点
- 开发阶段是重叠的,开发过程中需要大量的开发人员,不利于项目的管理。
- 需要严格的管理文档,使得审核的难度加大。
6.智能模型
特征
- 智能模型也称为基于知识的软件开发模型,是知识工程与软件工程在开发模型上结合的产物,以瀑布模型与专家系统的综合应用为基础建立的模型,该模型通过应用系统的知识和规则帮组设计者认识一个特定的软件的需求和设计,这些专家系统已成为开发过程的伙伴,并指导开发过程。
优点
- 通过领域的专家系统,可使需求说明更加完整、准确和无二义性。
- 通过软件工程的专家系统,提供一个设计库支持,在开发过程中成为设计的助手。
- 通过软件工程知识和特定应用领域的知识和规则的应用来提供开发的帮助。
缺点
- 建立一个既适合软件工程由适合应用领域的知识库都是非常困难的