<软件工程>SE7 软件生存周期
本文最后更新于:2023年11月3日 凌晨
SE7 软件生存周期
软件生存周期(软件生命周期)是软件产品或系统的一系列相关活动的全周期。
软件从开始研制到最终废弃不用所经历的各个阶段。分为 3 个时期和 8 个阶段。
- 软件定义时期
- 问题定义:用户提出需求
- 可行性研究:确定软件开发可行
- 需求分析:明确客户需求,输出标准化需求规格说明书
- 软件开发时期
- 概要设计(总体设计):主要是对架构的实现
- 详细设计:对概要中表述的各模块进行深入分析
- 编码和单元测试:写出计算机可运行的程序代码
- 综合测试:建立详细的测试计划并严格执行
- 软件维护时期
- 运行和维护:增加新功能。该时期所花费的人力、物力最多。
《ISO/IEC软件生存周期过程12207-1995》标准将过程分为三类:
过程类 | 包含过程 |
---|---|
基本过程 | 获取过程、供应过程、开发过程、运行过程、维护过程 |
支持过程 | 文档过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程、审计过程、问题解决过程 |
组织过程 | 管理过程、基础设施过程、培训过程、改进过程 |
SE7.1 软件的生存周期模型
生命周期模型 | 特点 |
---|---|
瀑布模型 | 自上而下有相互衔接的特定顺序 |
增量模型 | 适用于技术驱动的产品研发 |
演化模型 | 针对事先不能完整定义需求的软件开发 |
螺旋模型 | 强调风险分析,是一种风险驱动的开发方法 |
喷泉模型 | 以用户需求为动力,以对象为驱动 |
# 瀑布模型(线性顺序模型)
将软件生存周期的各项活动规定为依照固定顺序连接的若干阶段工作。其规定了每阶段的输入,及每阶段的工作成果,作为输出传入下一阶段。
graph LR
A[系统需求]-->B[软件需求]-->C[需求分析]-->D[设计]-->F[编码]-->G[测试]-->H[运行]
H-->G-->F-->D-->C-->B-->A
瀑布模型是最古老的软件开发模型。其优点有:
- 瀑布模型在决定系统怎样做前有一个需求阶段,对系统做什么有归约。
- 在系统构造前有一个设计阶段,鼓励规划。
- 每阶段有评审,允许获取方和用户参与。
- 前一步作为下一步被认可的,文档化的基线。
瀑布模型其有利于大型软件开发过程中人员的组织管理,提高了大型软件项目开发的质量和效率。但是其缺乏灵活性,开发过程不能逆转,过多依靠早期开发人员对需求的正确理解。并且在项目结束前不能演示系统能力,增加了项目风险。实际项目开发很难严格按照该模型进行。
# 增量模型
该模型假设需求可以分段,成为一系列增量产品。每一增量可以分别开发。
graph TB
1-->1.1
1-->1.2
1-->1.3
1.1-->1.1.1
1.1-->1.1.2
1.2-->1.2.1
1.2-->1.2.2
1.3-->1.3.1
1.3-->1.3.2
增量模型是瀑布模型的变体。其优点在于:
- 第一个可交付版本所需成本和时间较少
- 很快发布第一个版本,可以减少用户需求变更
- 允许增量投资,初期可只投资一两个增量
但其并行开发的构建可能遇到不能集成的问题,并要求软件必须具备开放式体系结构。
# 演化模型
一种有弹性的过程模型。由一些小的开发步组成。每步历经需求分析、设计、实现和验证,产生软件产品的一个增量。通过数次迭代,最终实现软件产品开发。
graph LR
o( )-.->A
subgraph 迭代
direction LR
A[需求]-->B[设计]-->C[编码]-->D[测试]-->E[集成]-->F[开发]
end
F-.->n( )
a[核心系统开发]-->b[第二次迭代]-->c[第三次迭代]-->d[...]
演化模型显式地把需求获取扩展到需求阶段。并且能一定程度上减少软件开发活动的盲目性。
其优点有:
- 任何功能一经开发就能进入测试以验证是否符合产品需求
- 帮助引出高质量产品要求
- 减少软件开发活动的盲目性
缺点是:
- 容易弱化需求分析阶段的工作
在需求不能予以规约时,可以使用演化模型。演化模型需要有力的管理,且用户不易理解演化模型的自然属性,易产生误解。
# 螺旋模型
在瀑布模型和演化模型基础上,加入 风险分析 所建立的模型。特别适合庞大、复杂、高风险的系统。
软件的生存周期分为 4 个可重复的阶段。其项目的进度是螺旋式的。
graph LR
A[规划]-->B[风险分析]-->C[开发]-->D[评估]-->A
螺旋模型是一种 “风险驱动” 的方法体系,其关注解决问题的基本步骤。
缺点是过多的迭代次数会增加开发成本,延迟提交时间。
# 喷泉模型
喷泉模型是一个以用户需求为动力,以对象为驱动的开发方法,适合于面向对象的开发方法。喷泉模型认为,软件开发过程自下而上周期的各阶段是相互迭代、无间隙的。
# 快速原型模型
是快速建立起来的,可以在计算机上运行的程序。其所能完成的功能往往是最终产品功能的子集。
graph LR
A[快速分析或修改]-->B[原型构造]-->C[运行]-->D[评价]-->A
快速分析:分析者和用户紧密配合,确定软件系统的基本需求
原型构造:在分析的基础上,忽略细节,仅考虑主要特性,快速构建一个可运行的系统
原型运行与评价:与用户通信,发现问题并消除误解。目的是发现新需求并修改原有需求。
原型修正:根据意见修正原型系统
# 面向复用(基于构建)的软件开发模型
依赖于存在大量可复用的软件构件以及能组合这些构件的集成框架。
graph LR
A[需求描述]-->B[构件分析]-->C[需求修改]-->D[使用复用的系统设计]-->E[开发和集成]-->F[系统有效性验证]
构件主要有 3 类:
- 通过标准服务开发的 web 服务,可用于远程调用
- 对象的集合。作为一个包和构建框架等集成在一起
- 独立的软件系统,通过配置在特定环境下使用
面向复用的软件开发模型可使软件快速交付,并降低了开发成本。但往往会妥协需求,并且不能控制系统进化(可复用的构件版本可能不受机构控制)。
SE7.2 过程规划和管理
包含:过程规划、过程检测、过程执行、过程调整
# 过程规划
得到项目的过程计划
- 选择软件生存周期原型
- 细化选择的生存周期原型
- 为每个活动或任务标识合适的实例数目
- 确定活动的时序关系,检查信息流
- 建立过程计划的文档。
# 过程检测
包含:
- 软件生存周期过程的监控
- 评估软件生存周期过程改变产生的影响
- 改变的实施
- 实现改变