软件工程导论——2过程模型

在这里插入图片描述

软件生命周期

软件生命周期/软件生存期:指软件产品或软件系 统从定义、设计、投入使用到被淘汰的全过程。
软件生命周期由
软件定义(问题定义、可行性研究、需求分析)
软件开发(总体设计、详细设计、编码和单元测试、综合测试)
运行维护
3个时期组成,每个时期又进一步划分为若干个阶段。

在这里插入图片描述

软件过程模型

软件开发全部过程、活动和任务的结构框架,它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。
软件过程模型多种多样但所有软件过程模型都具有以下共同活动:
沟通,计划,建模,构造,部署。

过程流

过程流描述在执行顺序和执行时间上,如何组织各 项活动和任务。

线性过程流

顺序执行各活动
在这里插入图片描述

迭代过程流

执行下一活动前重复执行之前的一个或多个活动
在这里插入图片描述

演化过程流

采用循环的方式执行各个活动,每次循环都能产生更为完善的软件版本
在这里插入图片描述

并行过程流

将一个或者多个活动与其它活动并行执行
在这里插入图片描述

传统软件工程模型

瀑布模型(经典的生命周期模型)

1、线性模型,阶段 间具有顺序性和依赖性
2、文档驱动, 每个 阶段都有可交付产品
3、每个阶段结束前进 行审查,保证质量
在这里插入图片描述
优点:
1、具有顺序性和依赖性。
2、推迟实现:推迟编码实现。
3、每个阶段都有与其相关联的里程碑和可交付的产品。
4、每个阶段结束前完成文档审查,及早改正错误。

缺点:
1、各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
2、由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;
3、早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果;
4、无法适应需求不明确和需求的变化;
5、不能反映实际的开发方式,软件开发需要迭代。

适用的场合:
瀑布模型适用于系统需求明确且稳定、技术成熟、工程管理较严格的场合,如军工、航天、医疗。

带反馈的瀑布模型
在这里插入图片描述
V模型:
在这里插入图片描述

增量模型

增量:满足用户需求的一个子集,能够完成一定功能
举例:
– 文字处理软件:创建文本、组织文本、格式化文本
– 第一个增量:创建文本
– 第二个增量:组织文本
– 第三个增量:格式化文本
– 第一个发布:创建文本
– 第二个发布:创建文本、组织文本
– 第三个发布:创建文本、组织文本、格式化文本
在这里插入图片描述
优点:
– 产品逐步交付,软件开发能够较好地适应需求的变化
– 能够看到软件的中间产品,提出改进意见,减少返工, 降低开发风险
– 软件能够更早投入市场
– 开放式体系结构,便于维护
缺点:
– 软件必须具备开放式体系结构(困难)
– 易退化成边做边改的方式,使软件过程控制失去整体性
使用场合:
适用于软件开发中需求可能发生变 化、具有较大风险、或者希望尽早 进入市场的项目。

原型模型

原型: 一个部分开发的产品,使客户和开发人员能够对计划开发的系统的相关方面进行检查。
在这里插入图片描述
优点:
– 减少需求不明确带来的风险
缺点:
– 构造原型采用的技术和工具不一定主流
– 快速建立起来的系统加上连续的修改可能导致原型质量 低下
– 设计者在质量和原型中进行折中
适用场合:
适用于系统的具体需求不明确或者 开发者不确定技术方案或者算法是 否可行的情况。

螺旋模型(1)

把开发活动和风险管理结合起来控制风险,可以看作是增加了风险分析的快速原型模型。
开发过程分成若干次迭代,每次迭代代表开发的一个阶段,对应模型中一条环线,每次迭代分成四个方面的活动,对应笛卡尔坐标的四个象限:
① 确定本阶段目标,选定实施方案,弄清项目开发的限 制条件;
② 评估所选方案,考虑如何识别和消除风险;
③ 实施软件开发和验证;
④ 评价该阶段的工作成果,提出修正建议,并计划下一 阶段工作。
在这里插入图片描述
优点:
原型易于为用户和开发人员共同理解,为用户参与所有关键决策提供了方便;
原型可作为继续开发的基础;
螺旋模型特别强调原型的可扩充性和可修改性,原型的进化贯穿整个软件生存周期,这将有助于目标软件的适应能力,支持用户需求的动态变化;
螺旋模型为项目管理人员及时调整管理决策提供了 方便,进而可降低开发风险。
缺点:
如果每次迭代的效率不高,致使迭代次数过多,将会增加成本并推迟提交时间;
使用该模型需要有相当丰富的风险评估经验和专门知识,要求开发队伍水平较高,否则会带来更大风险。
适用场合:
适用于需求不明确或者需求可能 发生变化的大型复杂的软件系统。

协同模型(3)

在这里插入图片描述

喷泉模型(3)

在这里插入图片描述

现代软件工程模型

基于构件的开发模型

构件:系统中模块化的、可更换的部分,它实现特定的功能,并对实现进行封装 。
在这里插入图片描述
优点:
– 软件复用思想
– 降低开发成本,加快开发进度,提高软件质量
缺点:
– 商业构件不能修改,会导致修改需求,进而导致系统不 能完全符合客户需求
适用场景:
适用于系统之间有共性的情况。

形式化方法模型

形式化方法:
– 基于数学的方法
– 运用数学符号对系统进行描述、开发和验证
优点:
1、基于形式化数学变换;
2、能够解决歧义性、不完整性、 不一致性问题,可以提供无缺陷的软件;
3、不需要测试来寻找错误,系 统测试是为了评估可靠性
缺点:
– 形式化方法难于掌握
– 形式化描述和转换费时费力,成本很高
– 对于一般客户,很难用这种方法进行沟通
适用场景:
适用于对安全性和可靠性要求极高 的软件系统开发,如飞行器和医疗器械的控制系统。

面向方面的软件开发

为定义、说明、设计和构建方面/Aspect提供过程和方法
关注点:客户需要的属性或者技术兴趣点
横切关注点:涉及到系统多个方面的功能、特性和信息的关注点
方面: 对整个软件体系结构产生影响的横切关注点

Rational统一过程

基于面向对象方法学,使用统一建模语言UML,从3个视角描述软件开发过程
– 动态视角:随时间变化的各个阶段
– 静态视角:所进行的活动
– 实践视角:可采用的良好实践建议

动态视角

动态结构:
Rational统一过程的动态结构,是通过对迭代式软件开发 过程的周期、阶段、迭代过程以及里程碑等的描述来进行 表示的。
• 迭代过程分成4个连续阶段
① 初始阶段:项目计划、评估风险
② 细化阶段:设计系统的体系结构、制定项目计划 、确定资源需求
③ 构建阶段:开发出所有组件和应用程序,集成 并进行详尽测试;
④ 移交:将产品移交给用户

静态视角

在Rational统一过程的开发流程中定义了“谁”“何时”“如何” 做“某事”,并分别使用四种主要的建模元素来进行表达:
① 角色,代表了“谁”来做?
② 活动,代表了“如何”去做?
③ 产物,代表了要做“某事”?
④ 工作流,代表了“何时”做?

实践视角(6条最佳实践)

1、迭代式开发
2、管理需求
3、适用基于构件的体系结构
4、可视化建模
5、验证软件质量
6、控制软件变更
适用场景:适合大团队大项目

敏捷软件开发

敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。
高效工作、快速响应变化
优点:
– 对变化和不确定性有更快速更敏捷的反应
– 在快速的同时保持可持续的开发速度
– 能较好的地适应商业竞争环境下对小项目提出的有限资 源和有限开发时间的约束
缺点:
– 极限编程中的测试驱动开发可能会导致系统通过了测试 但不是用户期望的
– 重构而不降低系统体系结构的质量是困难的
– 用于大型项目有很多问题
适用场景:
适用于需求模糊且经常改变的场合, 适合商业竞争环境下的小项目。

考纲

过程模型
重点是各种实用的软件过程模型,以及不同过程模型的特点比较。掌握几种典型模型的优缺点和能依据项目特征选择使用不同的模型;理解为什么有不同的模型、不同模型的特征。主要知识点:

  1. 软件生命周期概念、软件过程概念、能力成熟度模型CMM概念
  2. 常见的几种软件过程模型:瀑布、增量、原型、螺旋、喷泉等,比较各自优缺点
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值