软件工程笔记——第七、八章

时间:2024-03-26 11:07:16

第七章 软件生存周期过程与管理

第一节 软件生存周期过程概述

软件生存周期

软件生存周期是软件产品或系统的一系列相关活动的全周期。从形成概念开始,历经开发、交付使用、在使用中不断修订和演化,直到最后被淘汰,让位于新的软件产品。

国际标准化组织于1995年发布《ISO/IEC软件生存周期过程12207-1995》,该标准针对“什么需要去做”这一需要,描述了软件过程及活动和任务,回答了软件开发需要做哪些基本“映射”。

该标准按过程主题把软件生存周期过程分为3类:

基本过程:与软件生存直接相关的活动集

  1. 获取过程

  2. 供应过程

  3. 开发过程

  4. 运行过程

  5. 维护过程

支持过程:有关各方按它们的目标所从事的一系列相关支持活动集

  1. 文档过程
  2. 配置管理过程
  3. 质量保障过程
  4. 验证过程
  5. 确认过程
  6. 联合评审过程
  7. 审计过程
  8. 问题解决过程

组织过程:与软件生产组织相关的活动集

  1. 管理过程
  2. 基础设施过程
  3. 培训过程
  4. 改进过程

软件生存周期过程是软件生存周期中的一系列相关过程。

为了表述软件开发需要做什么活(映射)引入过程、活动、任务3个术语。

过程是软件生存周期中活动的一个集合,活动是任务的一个集合,而任务是将输入变换为输出的操作。

过程类→过程→活动→任务


第二节 过程描述

在《ISO/IEC系统与软件工程——软件生存周期过程12207-2008》标准中把软件生存周期过程分为7个过程组。

供应过程

活动1:机遇标识

活动2:供应方投标

    任务1:需求评审

    任务2:做出有关投标或接受合同的决定

    任务3:准备一份提案

活动3:合同协商

    任务1:与获取方就提供的软件产品或服务,协商合同条文

    任务2:请求对合同的修改,作为变更控制机制的一个成分。

活动4:合同执行

    任务1:进行获取需求评审

    任务2:定义或选择一个适合项目范围、粒度和复杂性的生存周期模型。

    任务3:

……

软件实现过程

活动:软件实现策略

    任务1:开发人员选择合适的生存周期模型

    任务2:实施人员

    任务3:实施人员选择合适的标准、方法、工具和编程语言

    任务4:开发进行该过程活动的计划

    任务5:对不用交付的软件项的处理。

软件需求分析过程

软件确认过程

软件验证过程

软件体系结构设计


第三节 应用说明

是对标准《ISO/IEC系统与软件工程-软件生存周期过程12207-2008》的应用说明。

系统和软件

软件是整个系统的组成部分。

区分系统需求分析和软件需求分析。

与《ISO/IEC系统生存周期15288》的关系

当系统中包括非常重要的非软件因素时,要应用《ISO/IEC系统生存周期15288》。

组织层和项目层

项目可能由组织执行

过程之间的时序关系

没有明确过程、活动、任务之间的时间依赖的序列。

支持活动之间的迭代和再现。

过程分解

把过程划分为一些小的“片段”

生存周期模型和阶段

剪裁


第四节 软件生存周期模型   ★

软件生存周期模型是一个包括软件产品开发、运行和维护中有关过程活动和任务的框架,覆盖了从该系统的需求定义到系统的使用终止。

1.瀑布模型

软件工程笔记——第七、八章

 

自上而下具有相互衔接的固定顺序。

每一阶段的输入,即工作对象以及本阶段的工作成果,作为输出传送到下一阶段。

瀑布模型的贡献(优点):

  1. 在决定系统怎样做之前存在一个需求阶段,它鼓励对系统做什么有一个规约。
  2. 在系统构造之前有一个设计阶段,它鼓励规划系统结构
  3. 每一阶段都有评审,允许获取方和用户的参与
  4. 前一步作为下一步被认可的、文档化的基线,并允许基线和配置早期接受控制。

瀑布模型存在的问题:

  1. 要求客户能够完整、正确和清晰地表达他们的需求,并要求开发人员一开始就理解这一应用。
  2. 由于需求的不确定性,使设计、编码和测试阶段都可能发生延期,并且当项目接近结束时,出现了大量的集成和测试工作。
  3. 在开始的阶段中,很难评估真正的进度状态,并且直到项目结束之前都不能演示系统的功能。
  4. 在一个项目的早期阶段,过分地强调了基线和里程碑处的文档,并可能需要花费更多的时间用于建立一些用处不大的文档。

瀑布模型适用情况:

  1. 需求已被很好的理解和定义
  2. 过程设计人员也很清楚:开发组织非常熟悉为实现这一模型所需要的过程。

2. 增量模型

在给出整个系统需求的体系结构的基础上,首先完整地开发系统的一个初始子集,如包含需求子集{1,2,5,9}的版本,发布并于运行;然后,根据这一子集建造一个更加精细的版本,如包含需求子集{{1,2,5,9},{3,6,4,10,7,11}}的版本,如此不断地进行系统的增量开发。

软件工程笔记——第七、八章

 

增量模型适用于“技术驱动”的软件产品开发。

增量模型的优点:

  1. 第一个可交付版本所需要的成本和时间是较少的,从而可减少开发由增量表示的小系统所承担的风险。
  2. 由于很快发布第一个版本,因此可以减少用户需求的变更。
  3. 允许增量投资,即在项目开始时可以仅对一个或两个增量投资。

增量模型的缺点:

  1. 如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定。
  2. 如果需求不想早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布。
  3. 由于进度和配置的复杂性,可能会增大管理成本,超出组织的能力。

增量模型的适用情况:

  1. 在开始开发时,需求很明确,且产品还可被适当分解为一些独立的,可交付的软件。
  2. 在开发中,期望尽快提交其中的一些增量产品。

3. 演化模型

演化模型主要针对事先不能完整定义需求的软件开发。

  1. 用户提出待开发系统的核心需求,软件开发人员首先开发一个核心系统并投入运行;
  2. 用户提出反馈(精化系统、增强系统能力的需求);
  3. 接着,软件开发人员根据用户反馈实施开发的迭代过程;每一迭代过程由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义的、可管理的子集;
  4. 如果在一次迭代中有的需求不能满足用户,可在下一次迭代中修正。

软件工程笔记——第七、八章

 

该模型可以表示为:

第一次迭代(需求->设计->实现->测试->集成)->反馈->第二次迭代(需求->设计->实现->测试->集成)->反馈->……

实际上,这个模型可看作是重复执行的多个“瀑布模型”。 一旦理解需求,就可以像实现瀑布模型那样开始设计和编码。

演化模型的不足:

即使很好的理解需求或设计,也很容易弱化需求分析阶段的工作。

4. 螺旋模型

螺旋模型是在瀑布模型和演化模型的基础上,加入两者所忽略的风险分析所建立的一种软件开发模型。

软件工程笔记——第七、八章

 

4个方面的活动:

  1. 制定计划——确定软件目标,选定实施方案,弄清软件开发的限制条件
  2. 风险分析——分析所选方案——考虑如何识别和消除风险
  3. 实施工程——实施软件开发
  4. 客户评估——评价开发工作,提出修正意见

沿螺旋线自内向外每转一圈便开发出一个更为完善的、新的软件版本;每一圈螺旋线的风险分析后,作出是否继续下去的判断。如果风险太大,开发者和用户无法承受,项目就可能会终止。多数情况下沿螺旋线的活动会继续下去,自内向外逐步延申,最终得到所期望的系统。

如果对所开发的项目的需求已有了较好的理解或较大的把握,便可以采用普通的瀑布模型,就只需要经历单圈螺旋线;如果对所开发的项目需求理解较差,就要经历多圈螺旋线。

与演化模型和增量模型相比,同样使用了瀑布模型作为一个嵌入的过程,即分析、设计、编码、实现、维护的过程,并在框架和全局体系结构方面是等同的。

螺旋模型的适用场景:项目的开发风险很大或客户不能确定系统的需求。

5.喷泉模型

以用户需求为动力,以对象为驱动的模型,主要用于采用面向对象技术的软件开发项目,体现了软件创建所固有的迭代和无间隙的特征。

软件工程笔记——第七、八章

 



第五节 过程规划与管理

过程规划与管理是软件项目管理的一项重要工作。把过程管理称为软件生存周期管理过程,包括过程建立、过程评估、过程改进,强调了过程规划(P)、过程检测(C)、过程执行(D)、过程调整(A)。

1.过程建立

  1. 选择软件生存周期模型
  2. 细化所选择的生存周期模型
  3. 为每一个活动或任务标识合适的实例数目
  4. 确定活动的时序关系,并检查信息流

2.关于软件生存周期过程的监控

  1. 软件生存周期过程的监控
  2. 软件生存周期过程改变所产生的影响的评估
  3. 改变的实施
  4. 实现改变

第八章 集成化能力成熟度模型(CMMI)

上一章主要内容是如何管理一个项目的生存周期过程,包括过程建立与监控。对于软件开发组织而言,更关心整个组织过程改善的问题。

第一节背景和原理

1.集成化能力成熟度模型CMMI

CMMI的目的:帮助软件企业对软件工程进行管理和改进,增强开发与改进功能,从而能按时,不超预算地开发出高质量的软件。

该模型基于过程途径思想,通过过程把软件质量的3个支撑点——受训的人员、规程和方法、工具和设备进行集成,以开发所期望的系统/产品。

2.CMMI集成的模型

软件CMM、产品集成开发CMM、系统工程CMM

软件工程笔记——第七、八章


第二节 CMMI的模型部件

CMMI是一种过程改善框架。

1.过程改善(Process Improvement)

是指人为设计的一个活动程序,其目的是改进组织的过程性能和成熟度,并改进这一程序的结果。

2.CMMI的模型部件

  1. 由一些过程域组成,过程域有自己的确定专用目标公共目标
  2. 每个专用目标和公共目标的实现,分别依赖一些实践
  3. 每个专用实践有自己的子实践和确定的典型工作产品;每个公共实践有自己的子实践和公共时间的精化。    
  4.  每个过程域还有意图陈述简介性注释以及相关过程域

软件工程笔记——第七、八章


一个业务域中一束相关的实践,当它们一起得以实现时,就满足被认为对该过程域的改善具有重要作用的一组条件。3.过程域

CMMI有22个过程域,分为四类。

过程域类名

包括的过程域

项目管理类

规划、监控、定量项目管理、集成项目管理、风险管理、提供方协议管理

工程类

需求开发、需求管理、技术解决方案、产品集成、确认、验证

支持类

配置管理、过程和产品质量保证、测量与分析、原因分析与解决、决策分析与解决

过程管理类

组织过程定义、组织过程性能、组织过程培训、组织过程关注、组织创新与部署


第三节 CMMI的等级

CMMI引入两种类型的“等级”:能力等级、成熟度等级,描述了两种过程改善的演化路径。

1.能力等级

能力等级是一种过程改善路径,该路径可使组织针对单一过程域不断改善该过程域。

0: 未完成级

1:已执行级

2: 已管理级

3: 已定义级

4: 已定量管理级

5级: 持续优化

2.组织成熟度等级

成熟度等级也是一种过程改善路径,该路径可使组织通过关注一组过程域不断改善一组相关的过程域。

CMMI的阶段式表示模型定义了5个成熟度等级,在持续的过程改进上,每一等级都是构成下一阶段基础的一个层次,这些等级用从15的数字表示。

1:初始级

2: 已管理级

3: 已定义级

4: 已定量管理级

5级: 持续优化

3.成熟度等级与能力等级的关系

为了达到成熟度2级,2级中所包含的所有过程域必须达到能力等级2级或更高级。

为了达到成熟度3级,2级、3级中所有过程域必须达到能力等级3级或更高级。

为了达到成熟度4级,2级、3级、4级中所有过程域必须达到能力等级4级或更高级。

为了达到成熟度5级,所有过程域必须达到能力等级5级或更高级。


第四节 过程域举例

两个过程域:项目规划(2级)和需求开发过程(3级)。