【北京大学 软件工程】二、软件过程

简介: 本文介绍了软件生存周期过程的概念及其分类。软件生存周期是从概念形成到产品淘汰的全周期,涵盖开发、交付、维护等阶段。软件生存周期过程则是这些活动中的一系列相关流程。文中详细描述了基本过程(如获取、供应、开发、运行和维护)、支持过程(如文档、配置管理、质量保证)及组织过程(如管理、基础设施、改进)。此外,还介绍了常见的软件生存周期模型,包括瀑布模型、增量模型、演化模型和喷泉模型,分析了它们的特点和优缺点。

一、软件生存周期过程的概念

1、引入

开发逻辑,是获取正确软件的关键。

软件开发有哪些活动——即要做哪些映射?

应如何正确组织开发活动,形成求解软件的逻辑?

2、软件生存周期过程在软件工程知识框架中的位置

开发所涉及的活动——软件生存周期过程

3、软件生存周期(过程)的概念

  • 软件生存周期

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

  • 软件生存周期过程(软件过程)

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

为了表述软件开发需要做“什么活(映射)”,引入了以下三个概念:过程是活动的集合,活动是任务的集合,任务是把输入转换成输出的操作

ISO/IEC软件生存周期过程12207-1995

系统地给出了软件开发所需的任务,即回答了:软件开发需要做哪些基本“映射”。


二、软件生存周期过程的分类

1、过程分类

按承担软件开发工作的主体,将软件生存周期过程分为三类:

2、基本过程

又按过程中活动的不同主体,将基本过程(类)分为5个过程:获取过程、供应过程、开发过程、运行过程、维护过程。

(1)获取过程:获取过程是获取者(需方)所从事的活动和任务,其目的是获得满足客户所表达的那些要求的产品和/或服务。该过程以定义客户要求开始,以接受客户所要求的产品和/或服务结束。

(2)供应过程:供应过程是供方为了向客户提供满足需求的软件产品或服务所从事的一系列活动和任务,其目的是向客户提供一个满足已达成需求的产品或服务。

(3)开发过程:开发过是软件开发者所从事的一系列活动和任务,其目的是将一组需求转换为一个软件产品或系统。

(4)运行过程:运作过程是系统操作者所从事的一系列活动和任务。其目标是在软件产品预期的环境中运行该产品,并为该软件产品的维护提供支持。

(5)维护过程:维护过程是维护者所从事的一系列的活动和任务。其目的是:对交付后的系统或软件产品,或为了纠正其错误,改进其性能或其它属性,而对其进行修改;或因环境变更,而对其进行调整。

例如:开发过程,是软件开发者所从事的一系列活动。

包括13个活动:

3、支持过程

又按过程中活动的不同主体,将支持过程(类)分为8个过程:文档过程、配置管理过程、质量保证、验证过程、确认过程、联合评审、审计过程、问题解决等。

(1)文档过程:为记录生存周期过程所产生的信息而定义的活动。

(2)配置管理过程:应用管理上的和技术上的规程来支持整个软件生存周期的过程。

(3)质量保证过程:为客观地保证软件产品和过程符合规定的需求以及已建立的计划而定义的活动。

(4)验证过程:根据软件项目需求,按不同深度(为需方、供方或某独立方)验证软件产品而定义的活动。

(5)确认过程:确认过程是一个确定需求和最终的、已建成的系统或软件产品是否满足特定预期用途的过程。

(6)联合评审过程:为评价一项活动的状态和产品而定义的活动。

(7)审计过程:确定遵照需求、计划合同的程度。

(8)问题解决过程:为分析和解决问题而定义的活动。

3、组织过程(Organizational life cycle processes)

分为7个过程:

管理过程、基础设施过程、改进过程、人力资源过程、资产管理过程、复用程序管理过程、领域软件工程过程

(1)管理过程:管理过程是管理人员从事的、对其它过程进行管理的活动和任务。

(2)基础设施过程:为其他过程建立和维护所需基础设施的过程。

(3)改进过程:改进过程是管理人员从事的一组活动和任务,其目的是:建立、评价、测量、控制和改进软件生存周期过程。

(4)人力资源过程:是为组织和项目提供具有技能和知识人员的过程。

(5)资产管理过程:为组织的资产管理者而定义的活动。

(6)复用程序管理过程:为组织的软件复用而定义的活动。

(7)领域软件工程过程:为领域模型、领域软件体系结构的确定及该领域资产的开发和维护而定义的活动。

软件过程之间的关系


三、软件生存周期模型的概念

1、软件生存周期模型与软件生存周期过程间的关系

开发活动的组织框架——软件生存周期模型

2、软件生存周期模型的概念&软件开发模型

软件生存周期模型 IEEE Standard 12207.0-1996

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

中国计算机科学与技术百科全书称软件生存周期模型为“软件开发模型”,并把它定义为:软件过程、活动、任务的结构框架。


四、常见的软件生存周期模型

1、瀑布模型

1970年,W.Royce

(1)瀑布模型将软件生存周期的各项活动规定为依固定顺序而连接的若干阶段工作;

(2)瀑布模型规定了每一阶段的输入,以及本阶段的工作成果,作为输出传入下一阶段。

(1)项目的开发依次经过:需求、设计、编码和单元测试、集成以及维护这一基本路径。

(2)通过每一阶段,提交以下产品:软件需求规约、设计文档、实际代码、测试用例、最终产品等。工作产品(又称可提交的产品,Deliverables)流经“正向”开发的基本步骤路径。

(3)“反向”步骤流表示对前一个可提交产品的重复变更(又称为“返工”(Rework))

  • 由于所有开发活动的非确定性,因此是否需要重复变更,这仅在下一个阶段或更后的阶段才能认识到。
  • 返工不仅在以前阶段的某一地方需要,而且对当前正在进行的工作也是需要的。

关于瀑布模型的优缺点

(1)瀑布模型的优点

虽然瀑布模型是一个比较“老”的、甚至过时的开发模型。

但其优点为:

  1. 在决定系统怎样做之前,存在一个需求阶段,鼓励对系统“做什么”进行规约(即设计之前的规约)。
  2. 在建造构件之前,存在一个设计阶段,鼓励规划系统结构(即编码之前的设计)。
  3. 在每一阶段结束时进行复审,允许获取方和用户的参与。
  4. 前一步工作产品可作为下一步被认可的、文档化的基线。允许基线和配置早期接受控制。

(2)瀑布模型存在的不足

  1. 客户必须能够完整、正确和清晰地表达他们的需求;开发人员一开始就必须理解需求。
  2. 缺乏灵活性。一旦软件需求存在偏差,就会导致开发出的软件产品不能满足用户的实际要求。
  3. 在一个项目的早期阶段,过分地强调了基线和里程碑处的文档,可能要花费更多的时间,用于建立一些用处不大的文档。
  4. 直到项目结束之前,都不能演示系统的能力,增加了项目的风险。

2、增量模型

该模型有一个假设,即需求可以分段,成为一系列增量产品,每一增量可以分别地开发。

关于增量模型的优缺点:

(1)增量模型的优点

作为瀑布模型的第一个变体,具有瀑布模型的所有优点。此外,它还有以下优点:

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

注:如果采用增量投资方式,那么客户就可以对一些增量进行招标,然后,开发人员按提出的截止期限进行增量开发,这样客户就可以用多个契约来管理组织的资源和成本。

(2)增量模型的缺点

如果增量模型不适于某些项目,或使用有误,则有以下缺点:

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

3、演化模型(Evolutionary model)

是一种有弹性的过程模式,由一些小的开发步组成,每一步历经需求分析、设计、实现和验证,产生软件产品的一个增量。通过这些迭代,完成最终软件产品的开发。

  • 针对事先不能完整地定义需求的软件开发
  • 针对用户的核心需求,开发核心系统
  • 根据用户的反馈,实施活动的迭代

4、喷泉模型

  • 特征:迭代、无缝
  • 与面向对象技术的关系

相关文章
|
5月前
|
人工智能 Cloud Native 数据管理
Gartner®全球云数据库管理系统魔力象限:阿里云连续6年获评“领导者”
Gartner®公布2025年度全球《云数据库管理系统魔力象限》报告。阿里云成为亚太区唯一入选该报告“领导者(LEADERS)”象限的科技企业,同时也是唯一一家连续6年位居“领导者”象限的中国企业。对阿里云而言,本次再度入选代表着其全栈云原生能力、面向AI时代的多模数据管理架构以及完整的Data+AI平台服务体系得到了高度认可,也充分彰显了阿里云在全球云数据库领域的行业引领地位,并印证了其在AI就绪时代的战略前瞻性。
|
2月前
|
缓存 JavaScript 前端开发
Bun.js:四大核心功能 + 性能对比 + 实战教程,新手也能快速上手
Bun.js 是一款高性能、一体化的 JavaScript/TypeScript 工具链,集运行时、包管理器、打包器、测试器于一身,启动快、配置简、兼容 Node.js,支持 TS/JSX 零配置运行。适合新项目、性能敏感型应用及 TypeScript 全栈开发。(239字)
708 1
|
供应链 安全 区块链
【北京大学 软件工程】一、软件工程概论
本文介绍了软件的定义、特点及分类,探讨了软件工程的起源、概念及其框架,并展望了软件工程的新视野。软件是指计算机系统中的程序及其文档,具有无形性、复杂性和高开发成本等特点,分为系统软件、支撑软件和应用软件三类。软件工程起源于解决早期编程难题,历经个人程序、软件作坊到软件工程时期的发展,旨在以工程化方法解决软件危机。软件工程的核心目标是生产正确、可用且开销合理的软件,主要活动包括需求分析、设计、实现、确认和支持。新一代信息技术如量子计算、区块链等正推动软件工程向更高效、安全的方向发展。
【北京大学 软件工程】一、软件工程概论
|
9月前
|
C# 图形学 开发者
【Unity3D实例-功能-镜头】第三人称视觉
本文介绍了Unity中常用的第三人称视角实现方法,适用于角色扮演游戏。内容包括安装Cinemachine插件、为角色添加面朝向点、创建虚拟摄像机、编写控制脚本及测试运行,帮助开发者快速掌握镜头控制技巧。
406 0
|
算法 数据挖掘
【北京大学 软件工程】五、结构化设计方法-1
结构化设计是软件开发中的重要环节,旨在根据需求规约构建系统的软件模型。其主要目标是在抽象层面上建立系统架构(包括数据和程序结构),并详细描述处理算法,最终形成设计规格说明书。结构化设计分为总体设计和详细设计两部分:总体设计确定系统的模块结构及模块间的调用关系;详细设计则深入描述各模块的具体实现。 设计方法需提供体现原理的术语、表达软件模型的工具及过程指导。总体设计引入了“模块”与“调用”两个核心概念,并使用模块结构图(MSD)来表达静态结构。设计步骤包括将DFD(数据流图)转化为MSD,区分变换型和事务型数据流图,通过自顶向下的方式逐步细化模块,确保高内聚低耦合。
1060 1
【北京大学 软件工程】五、结构化设计方法-1
如何绘制PAD图和N-S图(详细步骤)
如何绘制PAD图和N-S图(详细步骤)
4028 0
|
监控 数据可视化 安全
软件生命周期是什么?包括哪些阶段?各阶段的目标和任务是什么?
在数字化时代,软件如同空气般无处不在,其生命周期涵盖从需求分析到退役的多个阶段,如同生物的成长过程。本文详细介绍了软件生命周期各阶段的目标与任务,并探讨了瀑布模型、迭代模型和敏捷模型等常见生命周期模型。未来,随着技术和业务的不断演变,软件生命周期管理将面临更多挑战与机遇,需不断学习先进方法和技术,以满足用户需求。
7693 0
|
移动开发 前端开发 Swift
iOS 最好的应用程序开发编程语言竟然是这7种
iOS 最好的应用程序开发编程语言竟然是这7种
737 8
|
存储 应用服务中间件 API
高效C++项目实战:秋招简历项目解析(提供源码下载)
高效C++项目实战:秋招简历项目解析(提供源码下载)
|
存储 缓存 安全
USB 2.0 规范摘录2
USB 2.0 规范摘录
452 1