03 软件开发模型

Posted on Wed, 25 Dec 2024 17:00:43 +0800 by LiangMingJian


1.瀑布模型

1.1 瀑布模型的内容

  • 瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品。
  • 瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。
  • 瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

1.2 瀑布模型的优点

  • 为项目提供了按阶段划分的检查点。
  • 当前一阶段完成后,您只需要去关注后续阶段。
  • 每一个阶段提交的所有制品都需要进行评审和验证
  • 可在迭代模型中应用瀑布模型。增量迭代应用于瀑布模型。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。
  • 它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

1.3 瀑布模型的缺点

  • 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
  • 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
  • 通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
  • 瀑布模型的突出缺点是不适应用户需求的变化。

2.原型模型

2.1 原型模型的内容

  • 原型法又称快速原型法,其基本的思想是在限定的时间内,用最经济的方法开发出一个可实际运行的系统模型,用户在运行使用整个原型的基础上,通过对其评价,提出改进意见,对原型进行修改,统一使用,评价过程反复进行,使原型逐步完善,直到完全满足用户的需求为止。
  • 抛弃型原型,此类原型在系统真正实现后就会进行抛弃,不再使用。
  • 进化型原型,此类原型的构造从目标系统的一个或多个基本需求出发,通过修改和追加的过程逐渐丰富,演化成为最终的系统。

2.2 原型模型的优点

  • 构造方便、快速、造价低。
  • 增加了用户与开发人员的交流。
  • 用户在项目开发中占主导作用。
  • 满足了用户的动态需求。
  • 降低开发风险。

2.3 原型模型的缺点

  • 因为用户的参与,使得忽视原型对实际环境的适应性等技术问题。
  • 不适合大型、复杂项目开发。
  • 对于技术层面远大于其分析层面的问题不宜使用原型法。

3.基于构件的模型

  • 基于构件开发模型,是指采用预先打包的软件构件开发应用系统。其虽然具有许多螺旋模型的特点,它本质上是演化模型,需要以迭代方式构建软件。
  • 构件的选择可以是组织内部开发的构件,也可以是商品化成品软件构件。
  • 模型的优点在于软件复用,减少开发费用,缩短开发周期,提高软件的可靠性和生产率。
  • 模型的缺点在于需要需求妥协,不完全符合用户需求。

4.快速应用开发

  • 快速应用开发(Rapid Application Development,RAD)是一种比传统生命周期法(瀑布模型)快得多的开发方法,它强调使用极短的开发周期。
  • RAD 模型是瀑布模型的高速变种,通过使用构件,复用已有的程序结构来获得快速的开发进度。
  • RAD 模型的基本思想是让用户更主动地参与到系统分析、设计和构造活动中,通过迭代的构造方法,加速需求分析和设计,让用户提前看到一个可工作的系统。
  • RAD 模型的开发阶段包括业务建模(数据流图)、数据建模(E-R 图)、过程建模(细化数据流图加工)、应用生成(编码)、测试与交付。
  • 优点在于更好的质量,更好的风险控制,以及能在预算范围内能按时完成更多项目。
  • 缺点在于对应用的模块化要求比较高,对需求分析要求严格,不适合技术风险高的项目。

5.敏捷模型

  • 敏捷是以用户需求进化为核心,采用迭代、循序渐进的方式进行软件开发。
  • 敏捷的目的是为了降低需求变化所带来的成本,其最大特点是响应变化。项目会被切分成多个子项目,每个子项目周期内的活动称为迭代。每次迭代都会发布一个运行的软件,并且在整个迭代过程中,软件一直处于可用状态。
  • 敏捷更加关注人与人之间的沟通与交流,以人为核心,建立起全员参与的软件开发团队,使得团队互通有无。
  • 敏捷要求个体和互动 高于 过程和工具。工作的软件 高于 详尽的文档。客户合作 高于 合同谈判。响应变化 高于 遵循计划。
  • 敏捷模型的流派包括:
    • 极限编程(XP):一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期,通过积极的交流、反馈以及其他一系列的方法解决潜在的困难,并根据实际情况及时地调整开发过程。 XP 是激发开发人员创造性、使得管理负担最小的一组技术。
    • 水晶法:认为每一个不同的项目都需要一套不同的策略、约定和方法论。
    • 并列争球法:使用迭代的方法,其中把每30天一次的迭代成为一个冲刺,并按需求的优先级来实现产品。多个自组织和自治小组并行地递增实现产品,协调是通过简短的日常情况会议进行。
    • 自适应软件开发(ASD):有一个使命作为指导,它设立了项目的目标,但并不描述如何达到这个目标。

6.其他软件过程模型

  • 瀑布模型:又称为经典生命周期模型。是一种线性过程流模型,一个阶段活动完成后再开始下一个阶段活动。
  • V 模型:瀑布模型的一个变体,强调在各个阶段进行测试和验证,将软件测试阶段与系统开发阶段对应起来,以提升软件质量。但 V 模型没有从根本上解决瀑布模型的问题,测试开始依然在程序编码阶段后。
  • 原型模型:通过构造原型,即一个软件系统的最初版本,用于验证概念、适用设计选型、发现更多的问题和可能的解决方法。原型是为定义需求服务的,在需求明确后,原型需要丢弃(至少部分丢弃)。
  • 增量模型:先开发出一个初始的实现,给用户使用并听取用户的使用意见,通过不断修改直到产生一个充分的版本。各活动不是分离而是交织在一起的。反应了我们解决问题的方法,我们很少能提前制定出完整的问题解决方案,而是摸着石头过河,逐步逼近结果。
  • 螺旋模型:一种风险驱动型的过程模型,每一阶段都有风险分析。吸收了瀑布模型和原型模型(演化模型)的优点。采用循环的方式逐步加深系统定义和实现的深度,同时降低风险。将过程(项目阶段)用螺旋线表示,每个螺旋线构成一个回路,每个回路由不同的风险驱动,根据这些风险,在每个阶段规划可选的策略方案。
  • 喷泉模型:一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。喷泉模型的分析、设计、实现阶段可以重叠进行,开发人员可以边做分析边做实现,但由于阶段区分界限不是很明确,采用喷泉模型开发对文档要求比较严格。
  • RUP 统一过程模型:一种用例驱动,以体系结构为核心,迭代及增量的软件过程框架,由 UML 方法和工具支持。
    • RUP 融合统一了瀑布、增量、演化、构件、面向对象五种基本软件过程。
    • RUP 将软件开发分为四个阶段:初始(确定项目的范围)、细化(对系统进行分析)、构建(实施)、交付(让用户进行必要的测试、对用户进行培训)。
    • RUP 每个阶段都会产生相应文档。初始阶段产生项目计划,精化阶段产生架构原型,构建阶段产生集成的软件产品,交付阶段产生最终的发布版本。
    • RUP 使用工件,活动,角色,工作流来描述开发过程。
  • 敏捷模型:软件项目在构建初期被拆分为多个相互联系而又独立运行的子项目,然后迭代完成各个子项目,开发过程中,各个子项目都要经过开发测试。

7.软件体系风格