第2章 软件生存周期与软件过程(传统软件工程)

1. 软件生存周期与软件过程

1.1 软件生存周期

  • 一个软件从开始立项起,到废弃不用止,统称为软件的生存周期
  • 软件生存周期一般被划分为计划、开发与运行三个时期

1.1.1 软件生存周期主要活动

  • 需求分析:从用户的视角对需求进行分析和定义
  • 软件分析:从开发人员的视角对软件的需求模型进行分析

1.1.2 生存周期与软件过程的关系

  • 从软件生存周期到软件过程
    • 早期:二者等同——瀑布模型,都属于线性模型
  • 软件过程:围绕软件开发所进行的一系列活动
  • 早期,人们常常把软件过程称为软件开发模型(软件过程模型、软件生存周期模型、软件工程范型)

2. 传统的软件过程

2.1 瀑布模型

  • 瀑布开发模型是一种基于软件生存周期的线性开发模型,与软件生存周期的特点是一致的

2.1.1 瀑布模型特点

  1. 阶段间的顺序性和依赖性
  • 顺序性:只有前一个阶段的工作完成,后一个阶段的工作才能开始
  • 依赖性:前一个阶段的输出文档是后一个阶段的输入文档
  1. 推迟实现的观点
  • 把待开发软件的逻辑设计与物理实现清楚地区分开,即在需求分析和软件设计阶段只考虑系统的逻辑模型,等到编码阶段再来完成程序清单
  1. 保证质量的观点
  • 每一阶段必须完成规定的文档
  • 每一阶段都要对完成的文档进行复审

2.1.2 存在问题

  • 很难在开发的初始阶段彻底弄清楚软件需求
  • 滞后的风险释放

2.2 快速原型模型

  • 定义:先建立一个能反映用户需求的原型,让用户了解未来系统的概貌,反复改进,直至建立完全符合用户需求的新系统
  • 快速原型软件开发的过程模型:非线性开发模型,原型开发模式改变了“生存周期等同于过程模型”的习惯性思维

2.2.1 快速原型模型做法

  1. 原型系统仅包含未来系统的主要功能和系统接口
  2. 尽量使用能缩短开发周期的语言和工具
  3. 产生最终的实际系统:渐进或废弃原型

2.2.2 快速原型模型特点

  1. 使用快速开发工具,逼真快速
  2. 快速反馈-循环
  3. 低成本

3. 软件演化模型

  • 遵循迭代的思想方法,使所开发的软件在迭代中逐步达到完善,也成为迭代化开发模型
  • 常见的演化模型有增量模型和螺旋模型两种,一般适用于大型软件的开发

3.1 增量模型

  • 增量模型是瀑布模型的顺序特征与快速原型法的迭代特征相结合的产物
  • 增量是小而可用的软件
  • 把软件看成一系列相互联系的增量,每次完成一增量

3.1.1 增量模型特点

  1. 在前面增量的基础上开发后面的增量
  2. 每个增量的开发流程可用瀑布或快速原型模型
  3. 迭代的思路
  4. 有利于控制技术风险
  5. 计划灵活性增加

3.2 螺旋模型

  • 螺旋模型(spiral model)为目前软件开发中最常用的一种软件开发模型,是在结合瀑布模型与快速原型模型基础上演变而成的,尤其适用于大型软件的开发

3.2.1 螺旋模型活动

  • 总体上看,螺旋模型是一种典型的迭代模型。每迭代一次,螺旋线就前进一周
  • 螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,一个螺旋式周期,即:
    1. 计划:选定完成目标的策略,确定软件目标,设定约束条件
    2. 风险分析:评估本轮螺旋可能存在的风险
    3. 建立原型:建立一个原型来实现本轮螺旋的目标
    4. 用户评审:评价开发工作,计划下一轮工作

3.2.2 螺旋模型特点

  1. 瀑布模型+快速原型+风险分析
  2. 迭代过程

3.3 构件集成模型

3.3.1 面向对象

  • 面向对象开发模型均可借用面向过程面向过程开发模型的活动框架
  • 构件集成模型主要适用于面向对象的软件开发
  • 面向对象 = 对象 + 分类 + 继承 + 消息通信

3.3.2 构件

  • 构件:一个系统中,几乎独立的,并且可替换的部分,实现明确的功能,并对其提供的接口有详细的说明

3.3.3 构件集成模型特点

  1. 面向对象
  2. 基于构件库
  3. 融合螺旋模型特征
  4. 支持软件开发的迭代方法
  5. 软件重用

4. 形式化方法模型

  • 软件开发方法可以分为形式化方法和非形式化方法两大类
  • 形式化方法:是一种基于数学的开发技术,主要采用数学的方法来描述系统的性质,例如程序变换和程序验证等
  • 非(欠)形式化方法:主要运用文本、图、表与符号来描述系统的模型,如结构化设计、面向对象设计和UML语言等

4.1 转换模型

4.1.1 转换模型定义

  • 结合形式化软件开发方法和程序自动生成技术的一种软件开发模型,采用严格的、数学的表示体系来表示软件规格说明,进行自动或半自动的程序变换,转换为目标程序系统

4.1.2 转换模型特点

  1. 形式化软件开发方法
    • 形式化需求规格说明
    • 变换技术
  2. 进行自动的程序变换
  3. 确保正确

4.1.3 转换模型技术手段

  1. 基于模型的需求规格说明及变换技术
  2. 基于代数结构的需求规格说明及变换技术
  3. 基于时序逻辑的需求规格说明及验证技术
  4. 基于可视形式化的技术
  • 要得到一个正确的形式化需求规格说明书,有较大难度,但这种模型有一个变种:“净室软件工程”

4.2 净室模型

4.2.1 净室模型定义

  • 净室模型是一种形式化(盒结构表示分析和设计)的增量开发模型,其基本思想是力求在分析和设计阶段就消去错误,确保正确,然后在无缺陷或“洁净”的状态下实现软件的制作

5. 7种软件开发模型的主要特点

6. 统一过程和敏捷过程

  • 除了上面介绍的7种软件开发模型外,又出现了两种迥异的软件过程模型-统一过程和敏捷过程

6.1 统一过程

6.1.1 统一过程定义

  • 统一过程也叫RUP(Rational Unified Process)
  • 统一过程描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么做,描述了一组以某种顺序完成的活动
  • 统一过程的四个阶段
  1. 初始阶段
    确定设立的目标是否可行
  2. 细化阶段
    识别出多数用例,体系结构设计、详细设计
  3. 构造阶段
    编码、测试
  4. 迁移阶段
    验收测试、用户文档、培训

6.2 敏捷过程

6.2.1 敏捷过程定义

  • 敏捷开发是一种以人为核心、以迭代方式循序渐进开发的方法,其软件开发的过程称为“敏捷过程”,将一个大项目分为多个相互联系但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可用状态

6.2.2 极限编程

  • 极限编程(XP)是敏捷过程的一个方法:
  1. 加强交流
  2. 从简单做起
  3. 寻求反馈
  4. 勇于实事求是
posted @ 2024-11-20 21:16  awei040519  阅读(241)  评论(0)    收藏  举报