软件工程笔记Chapter2 软件生存期模型-瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、RUP(统一过程)

软件工程笔记Chapter2 软件生存期模型-瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、RUP(统一过程)

Chapter2 软件生存期模型

2.1软件过程

可定义为一个为建造高质量软件所需要完成的活动、动作和任务的框架。
是为获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动 。
软件过程是研究软件开发的方法论,规范软件开发的活动集合和活动顺序
软件过程:

  • 产品构建时所执行的一系列活动、动作和任务的集合
  • 动作、活动和任务,以及它们之间的关系
  • 软件过程定义了软件开发中采用的过程(process),但软件工程还包含该过程中应用的技术(技术、方法和自动化工具)。
  • 软件工程是由有创造力、用知识的人完成的,他们根据产品构建的需要和市场需求,选取成熟的软件过程

内涵:

  • 在活动的时间进程上要遵循软件工程原理实行分阶段,实行阶段评审和控制。
  • 在活动的执行顺序上可以有循环、往复、重叠、迭代、嵌套或者是有条件地引发,不一定都是线性顺序。
  • 在活动的内容上是遵循自顶向下、层层分解、逐步抽象与细化的思想。
  • 在构建软件的结构上遵循模块分解原理,可以自顶向下,也可自底向上。
  • 基线与里程碑的目标进行总结、评审、调整和部署阶段活动。
  • 软件过程的活动集合和活动顺序贯穿了软件开发的方法论。即把软件工程分阶段、分层次、逐步细化、基线与里程碑、阶段评审、变更管理、过程监控等基本原理贯穿在整个活动当中。

2.2模型

1.瀑布模型(1970)(重要)

最初的瀑布模型:

最初瀑布模型

  • 阶段间具有顺序性和依赖性。

① 必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
② 前一阶段的输出文档就是后一阶段的输入文档。

  • 推迟实现的观点

① 瀑布模型在编码之前设置了系统分析和系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。
② 清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想。

  • 质量保证的观点

① 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
② 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。

实际的瀑布模型:

实际瀑布模型

实际的瀑布模型是带“反馈环”的,增加了后阶段对齐纳阶段的反馈,实线箭头表示开发过程,虚线箭头表示维护过程。

测试模型:

α版本:开发方发布测试修复。
β版本:发给用户使用测试,反馈问题后修复。

V模型:瀑布模型的一个变体

V模型

V模型描述了测试阶段的活动与开发阶段相关活动(包括需求建模、概要设计、详细设计、编码)之间的关系。

瀑布模型的优点

可强迫开发人员采用规范化的方法。
严格地规定了每个阶段必须提交的文档。
要求每个阶段交出的所有产品都必须是经过验证的。

瀑布模型的缺点

由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。如果需求规格说明与用户需求之间有差异,就会发生这种情况。
瀑布模型只适用于项目开始时需求已确定的情况

2.快速原型模型(1979)

对将要实现的软件进行部分的实现,
快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。

快速原型模型

快速原型模型优点:

(1)有助于满足用户的真实需求。
(2)原型系统已经通过与用户的交互而得到验证,据此产生的规格说明文档能够正确地描述用户需求。
(3)软件产品的开发基本上是按线性顺序进行。
(4)因为规格说明文档正确地描述了用户需求,因此,在开发过程的后续阶段不会因为发现规格说明文档的错误而进行较大的返工。
(5)开发人员通过建立原型系统已经学到了许多东西,因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。
(6) 快速原型的突出特点是“快速”。开发人员应该尽可能快地建造出原型系统,以加速软件开发过程,节约软件开发成本。
(7)原型的用途是获知用户的真正需求,一旦需求确定了,原型可以抛弃(抛弃型原型),当然也可以在原型的基础上进行开发(演化型原型)。

3.增量模型(1980)

先提供最核心的功能,逐步增加产品的功能。
可以应对开发周期较长,用户需求急切的情况。
同时项目失败风险较低。

增量模型

增量模型的优点

(1)能在较短时间内向用户提交可完成一些有用的工作产品,即从第1个构件交付之日起,用户就能做一些有用的工作。
(2)逐步增加产品的功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给用户组织带来的冲击。
(3)项目失败的风险较低,虽然在某些增量构件中可能遇到一些问题,但其他增量构件将能够成功地交付给客户。
(4)优先级最高的服务首先交付,然后再将其他增量构件逐次集成进来。因此,最重要的系统服务将接受最多的测试。

增量构件开发

每个增量构件应当实现某种系统功能,因此增量构件的开发可以采用瀑布模型的方式

增量构件开发

采用增量模型需要注意的问题
  • 再新增构件时集成到现有的软件体系结构中时,必须不破坏原来已经开发出的产品。
  • 软件体系结构必须是开放的,即向现有产品中加入新构件的过程必须简单、方便。

因此采用增量模型比采用瀑布模型和快速原型模型更需要精心的设计。

4.螺旋模型(重要)

每个阶段之前先进性风险分析。
该模型将瀑布模型与快速原型模型结合起来,并且加入两种模型均忽略了的风险分析。
本质上螺旋模型就是在每个阶段之前加上了风险分析的快速原型模型

螺旋模型

螺旋模型的4项活动

螺线上的每一个循环可划分为4个象限,分别表达了4个方面的活动。
(1)目标设定——定义在该阶段的目标,弄清对过程和产品的限制条件,制订详细的管理计划,识别项目风险,可能还要计划与这些风险有关的对策。
(2)风险估计与弱化——针对每一个风险进行详细分析,设想弱化风险的步骤。
(3)开发与验证——评价风险之后选择系统开发模型。
(4)计划——评价开发工作,确定是否继续进行螺线的下一个循环。如果确定要继续,则计划项目的下一个阶段的工作。

螺旋模型的优点

对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
减少了过多测试或测试不足所带来的风险。
在螺旋模型中维护只是模型的另一个周期,因而在维护和开发之间并没有本质区别。

螺旋模型的缺点

螺旋模型是风险驱动的,因此要求软件开发人员必须具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还以为一切正常。

5.喷泉模型(1990)

自下而上,各阶段重叠,反复迭代。
喷泉模型是典型的面向对象生命周期模型。
“喷泉”一词体现了迭代和无间隙特性

喷泉模型

6.RUP(统一过程)(重要)

RUP模型全面应用了软件开发分段、分层、细化、往复、循环、迭代、并发、重叠、演进、基线、里程碑、评审、控制等方法论。

RUP

核心

用例驱动(出发点),以架构为基础,循环迭代的过程

UP的二维模型 :

UP分为时间轴(横轴)和活动内容轴(纵轴)。
横轴是过程展开的生命周期特征,体现开发过程的动态结构,用来描述它的术语主要包括周期(Cycle)、阶段(Phase)、迭代(Iteration)、基线(BaseLine)和里程碑(Milestone);
纵轴是开发活动,体现开发过程的静态结构,用来描述它的术语主要包括活动(Activity)、产物(Artifact)、工作者(Worker)和工作流(Workflow)

横轴的时间组织,划分四个阶段、四个里程碑
  • 初始阶段(Inception),该阶段主要完成商业需求并确定项目的边界。
  • 细化阶段(Elaboration),该阶段主要完成领域问题分析和软件的设计
  • 构造阶段(Construction),该阶段是产品的制造过程,以系统实现和测试为主,其重点放在管理资源及控制运作以优化成本、进度和质量
  • 交付阶段(Transition),该阶段的重点是确保软件对最终用户是可用的
RUP模型体现的思想

重叠思想的表达
更合理的生命周期模型
RUP的维护活动
完美的增量开发—双重迭代
基线与里程牌
RUP可灵活应用

7.基于构件的开发(CBD/CBCE etc.)

基于构件的软件工程(component-based software engineering,CBSE)是强调使用可复用的软件“构件”来设计和构造基于计算机的系统的过程。
利用预先包装的构件来构造应用系统。

构件

系统中模块化的、可部署的和可替换的部件,该部件封装了实现并暴露一系列接口
一个构件是一个组装单元,它具有约定式规范的接口,以及明确的依赖环境。构件可以被独立部署,有第三方组装。

8.敏捷过程(2001)

敏捷原则

(1)我们最优先要做的是通过尽早、持续交付有价值的软件来使客户满意。
(2)即使在开发的后期,也欢迎需求变更。敏捷过程利用变更为客户创造竞争优势。
(3)经常交付可运行软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
(4)在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
(5)围绕有积极性的个人构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
(6)在团队内部,最富有效果和效率的信息传递方法是面对面交谈。
(7)可运行软件是进度的首要度量标准。
(8)敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一种长期、稳定的开发速度。
(9)不断地关注优秀的技能和好的设计会增强敏捷能力。
(10)简单是必要的。
(11)好的架构、需求和设计出自于自组织团队。
(12)每隔一定时间,团队会反省如何才能更有效地工作,并相应调整自己的行为。

人的因素

敏捷开发团队成员及团队本身必须具备的一些特点:
基本能力
共同目标
精诚合作
决策能力
模糊问题解决能力
相互信任和尊重
自我组织

极限编程

使用最广泛的敏捷过程,最初由Kent Beck提出。XP包含了策划、设计、编码和测试4个框架活动的规则和实践

自适应软件开发(adaptive software development,ASD)

自适应软件开发是由Jim Highsmith提出的;
它可作为构建复杂软件和系统的一项技术,其基本概念着眼于人员合作和团队自组织

© 版权声明
THE END
喜欢就支持一下吧
点赞28 分享
评论 共1条

请登录后发表评论