概述

介绍如下内容:

  • 介绍软件过程的是什么
  • 几种常见的过程模型

什么是软件过程

软件过程是为了获得高质量的软件所需要完成的一系列任务的框架,规定了完成各项任务的

  • 工作步骤
  • 运用方法的顺序
  • 文档资料
  • 管理措施
  • 各个阶段的里程碑。

模型选用的原则

  • 模型应符合软件本身的性质(规模、复杂性等)
  • 模型应符合软件应用系统整体开发的进度需求
  • 模型应有可能控制并消除软件开发风险
  • 模型应有可用的计算机辅助工具(如快速原型工具)的支持
  • 模型与用户和软件开发人员的知识技能相匹配
  • 模型应有利于软件的开发的管理与控制

过程模型

通常使用生命周期模型描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段以及各个阶段的执行顺序,生命周期模型也称过程模型

瀑布模型

1970年提出,现在仍然是应用最广泛的模型。瀑布模型的成功很大程度想在于它是一种文档驱动模型,不过这也是它的主要缺点。

生命周期的划分及执行顺序

  1. 制定计划
  2. 需求分析
  3. 软件设计
  4. 程序编写
  5. 软件测试
  6. 运行维护

图片加载失败

特点

  • 阶段间具有顺序性和依赖性:
    • 必须等前一阶段完成后才能开始后一阶段
    • 前一阶段的输出文档是后一阶段的输入文档
  • 推迟实现的观点:在编码前设置了系统分析与设计阶段,区分了逻辑设计和物理设计。因为根据经验,规模越大的软件,开始编码的时间越早,往往开发所需的时间越长。
  • 质量保证的观点:因为软件工程的基本目标是优质和高产,所以会有如下规定
    • 每个阶段都必须完成规定的文档
    • 每个阶段结束前都必须对完成的文档进行评审

优点

  • 迫使开发人员采用规范的方法
  • 严格规定了每个阶段必须提交的文档
  • 要求各阶段的产品必须经过质量验证

缺点

  • 几乎完全依赖于书面的规则说明,可能导致最终的软件不符合用户需求

适用条件

瀑布模型适用于同时满足下列条件的软件系统的开发

  • 功能和性能明确
  • 无重大变化

原型模型/快速原型模型

快速原型模型认为系统的需求定义不是在系统设计和实现前一次完成,而是贯穿整个开发过程并逐步完善。

通过快速开发出一个原型给用户使用,收集用户反馈并重复上述过程来获取用户真正的需求。

两种类型

根据软件项目的特点和运行原型目的的不同快速原型模型可以分为两种类型。

废弃型/快速建立需求规格原型/RSP法

  1. 先构造一个简单而且质量要求不高的模型给用户使用
  2. 收集反馈
  3. 重复上述步骤直到需求说明书确定
  4. 按照瀑布模型进行开发

废弃型/快速建立渐进原型/RCP法

  1. 先构造一个简单而且质量要求不高的模型给用户使用
  2. 收集反馈
  3. 根据反馈扩充修改原型
  4. 重复上述步骤直到所有性质全部满足也就获得了最终产品

生命周期的划分及执行顺序

  1. 快速分析:快速确定软件系统的基本要求;快速确定原型所体现的特定。包括
    • 总体结构
    • 功能
    • 性能
    • 界面等
  2. 构造原型:根据基本规格说明,只考虑主要特性,快速构造一个可以运行的系统。包括
    • 用户界面原型
    • 功能原型
    • 性能原型
  3. 运行和评价原型:用户试用原型并与开发者频繁交流,发现问题,目的是验证原型的正确性
  4. 修正与改进

图片加载失败

构造快速原型的途径

  • 模拟原有系统的人机界面和人机交互方式
  • 开发工作原型实现软件系统的部分功能
  • 找来正在运行的相似软件

优点

  • 用户全程参与,可快速确定模糊的需求

缺点

  • 对开发环境要求高,资源规划管理困难

适用条件

首先需要满足下列所有条件

  • 对于大型项目要有足够的人力资源以建立足够的原型组
  • 要求开发者和用户在一段时间内共同完成原型系统的开发
  • 待开发的系统模块模块化不是十分困难

同时还要满足需要满足下列任意一个条件

  • 用户需求不完善、不准确且有快速原型开发工具
  • 项目招投标时,可以原型模型作为软件的开发模型
  • 产品移植、升级或对已有的产品原型进行客户化工作

增量模型/渐增模型

把待开发的软件系统模块化,每个模块作为一个增量组件,分批次地分析、设计、编码和测试。每个增量组件应该实现系统的某种功能。增量组件可以使用瀑布式开发。

特点

  • 系统模块化和组件化
  • 不需要一次性地将整个产品提交给用户而是分批次地提交
  • 第一个增量组件一般是提供最核心的功能

优点

  • 分批次提交产品可以使用户及时了解项目进展
  • 以组件为单位开发降低了软件开发的风险
  • 开发顺序灵活

缺点

  • 需要待开发的系统模块模块化不是十分困难

适用条件

满足下列全部条件即可适用增量模型

  • 允许软件分批次地交付
  • 待开发的系统模块模块化不是十分困难
  • 软件开发对应用领域不熟悉,难以一次性地进行开发
  • 项目管理人员把握全局的水平较高

螺旋模型

使用原型即其它方法尽可能降低风险,在每个阶段之前都增加了带有风险分析的快速原型模型。

软件开发的风险有很多

  • 成本不足
  • 核心人员跑路
  • 开发过程中有类似的软件发布等

生命周期的划分即执行顺序

图片加载失败

风险分析

从风险角度分析上一步的实现结果,尽量降低风险。通常用建造原型的方法排除风险,如果不能排除,则停止项目或大幅度削减项目规模。

如果成功排除了所有风险,则启动下一个开发步骤,这个工作的工作过程相当于纯粹的瀑布模型。

优点

  • 风险驱动的开发模型

  • 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标

  • 减少了多个测试(浪费资金)或测试不足(产品故障多)所带来的风险

  • 更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别

缺点

  • 风险驱动的开发模型需要软件开发人员有丰富的风险评估经验和相关的专业知识

适用条件

螺旋模型主要适用于内部开发的大规模软件项目。

喷泉模型

一种以用户需求为动力,以对象为驱动,主要用于描述面向对象软件的开发过程。

该模型认为软件的开发过程自上而下,周期的各个阶段是交叉重叠和多次重复的。

生命周期的划分及执行顺序

图片加载失败

特点

  • 可以针对不同的对象集合并行开发

优点

  • 提高开发效率,节省开发时间。
  • 通常结合其它模型共同使用,如结合增量模型。

缺点

  • 由于开发阶段存在重叠性,开发人员的管理和阶段生成的工件管理存在困难

适用条件

  • 面向对象的软件项目
  • 软件的某个部分通常被重复多次
  • 相关对象在每次迭代后随之加入渐进的软件成分

其它模型(扩展)