软件工程
电子教案
王树林
第 2章 过程( Process)
? 软件工程是过去十年中人们普遍关注的焦点。软件过
程与软件工程不完全同义。
2.1 Software Engineering— A Layered Technology
软件工程定义
( 1) 是为了经济地获得可靠的和能在实际机器上高
效运行的软件而建立和使用的好的工程原则。 这是
Fritz Bauer在 NATO会议上给出的定义。
( 2)将系统化的、规范的、可度量的方法应用于软
件的开发、运行和维护的过程,即将工程化应用于软
件中,以及对这些方法的研究。这是 IEEE[IEE93]给
出的一个综合的定义。
第 2章 过程( Process)
? 2.1.1 过程、方法和工具
( Process,Methods,and Tools)
软件工程是一种层次化的技术。支
持软件工程的根基就在于对质量的关注。
任何工程方法都必须是以有组织的质量
保证为基础。
第 2章 过程( Process)
? 软件工程层次
软件工程
质量焦点
过程
方法
工具
第 2章 过程( Process)
? 软件工程的基层是过程层。过程与技术
结合在一起,使得软件能够被合理地和
及时有效地开发出来。过程定义了一组
关键过程区域的框架,它构成了软件项
目的管理控制基础,规定了技术方法的
采用、工程产品(模型、文档、数据、
报告和表格等)的产生、里程碑的建立、
质量的保证及变化的适当管理。
第 2章 过程( Process)
? 软件工程的方法层提供了开发软件在技
术上需要“如何做”。方法涵盖了一系
列的任务:需求分析、概要设计、详细
设计、编程、测试和维护。软件工程方
法依赖于一组基本原则,这些原则控制
了每一个技术区域,且包含建摸活动和
其它描述技术。
第 2章 过程( Process)
? 软件工程的工具层对过程和方法提供了自动
的和半自动的支持。当这些工具被集成起来
使得一个工具的输出信息是另一个工具的输
入信息时,一个支持软件开发的系统就建立
了,称为计算机辅助软件工程( CASE)。
CASE集成了软件、硬件和一个软件工程数据
库(一个仓库 包含了关于分析、设计、编程
和测试等的重要信息),从而形成了一个软
件工程。
第 2章 过程( Process)
2.1.2 软件工程的一般视图( A Generic View of Software
Engineering)
工程是对技术实体的分析、设计、建造、验证和
管理。
? 要解决的问题是什么?
? 要用于解决该问题的实体具有什么特点?
? 如何实现该实体(解决方案)?
? 如何建造该实体?
? 采用什么方法去发现该实体设计和建造过程中产生的
错误?
? 当该实体的用户要求修改、适应和增强
第 2章 过程( Process)
一般来说,一个软件项目的开发过程主要分
为三个阶段:
( 1)定义阶段主要集中于“做什么”。主要工
作是,需求分析、软件项目计划和信息工程。
定义系统或软件的关键需求,建立什么样的
软件界面,搞清楚要处理的信息,预期完成
什么样的软件功能。
( 2)开发阶段集中于“如何做”。定义数据如
何结构化,功能如何转换为软件体系结构,
过程细节如何实现,界面如何表示,设计如
何转换为程序代码,测试如何执行。
第 2章 过程( Process)
( 3)维护阶段集中于“改变”。软件开发过程中出现
的错误需要剔除,由于软件环境的变化而要求的适应
性修改,以及由于用户需求的变化而带来的增强性修
改。维护阶段重复定义和开发阶段的步骤。在维护阶
段可能遇到四类修改:
? 纠错:改正已发现的软件错误。
? 适应:适应软件外部环境的变化而修改软件。
? 增强:为适应用户提出的更好需求而修改软件。
? 预防:更好地提高软件的适应性和增强软件的需求。
第 2章 过程( Process)
软件工程活动还包括:
( 1)软件项目追踪和控制;
( 2)正式的技术复审;
( 3)软件质量保证;
( 4)软件配置管理;
( 5)文档的准备和产生;
( 6)可复用管理;
( 7)测试;
( 8)风险管理。
第 2章 过程( Process)
2.2 软件过程 (The Software Process)
软件过程框架
辅助活动
框架活动
任务集合
工作任务
里程碑、交付物
SQA(软件质量保证 )点
第 2章 过程( Process)
? 一个公共过程框架,就是通过定义若干框架
活动来建立的,如果不考虑其规模和复杂性
这些活动适应于所有的软件项目。每一个集
合都有软件工程工作任务、项目里程碑、软
件工程产品和交付物以及质量保证点组成。
? 近年来,过程成熟度成为人们关注的焦点。
软件工程研究所( SEI) 提出一个综合模型,
定义了当一个组织达到不同的过程成熟度时
应该具有的软件工程能力。 SEI的模型提供了
一个公司软件工程实践的整体有效性的方法,
且建立了五级的过程成熟度级别,定义如下:
第 2章 过程( Process)
第一级:初始级 — 软件过程的特征是无序的,
有时甚至是混乱的。几乎没有过程定义,成
功完全取决于个人的能力。
第二级:可重复级 — 建立了基本的项目管理过
程,能够追踪费用、进度和功能。有适当的
必要的过程规范,使得可以重现以前类似项
目的成功。
第三级:定义级 — 用于管理工程活动的文档已
经文档化和标准化,并与整个组织的软件过
程相集成。所有项目都使用文档化的,组织
认可的过程来开发和维护软件。本级包含了
第二级的所有特征。
第 2章 过程( Process)
第四级 管理级 — 软件过程和产品质量的详细度
量数据被收集,通过这些度量数据,软件过
程和产品能够被定量地理解和控制。本级包
含了第三级的所有特征。
第五级 优化级 — 通过定量的反馈,进行不断的
过程改进,这些反馈来自于过程或通过测试
新的想法和技术而得到,本级包含了第四级
的所有特征。
级别表示了一个组织的过程成熟度。
SEI将关键过程区域( KPAs) 与每一个成熟度级
别联系起来
第 2章 过程( Process)
2.3 软件过程模型 (Software Process Model)
? 为了解决实际问题,一个软件工程师
必须提出一个开发策略,这个策略常常
被称为过程模型或软件工程范型。
? 所有的软件都可看成是一个问题循环解
决过程,其中包含了四个截然不同的阶
段:状态描述、问题定义、技术开发和
方案综述。
第 2章 过程( Process)
问题循环解决过程中的阶段
问题定义
技术开发
方案综述
状态描述
第 2章 过程( Process)
问题循环解决阶段中的阶段
状态描述
第 2章 过程( Process)
2.4 线性顺序模型 (The Linear Sequential
Model)
软件工程的线性顺序模型,有时也称为
传统生命周期或瀑布模型。
系统 /信息工程
分析 设计 编码 测试
维护
第 2章 过程( Process)
线性顺序模型是最早,也是应用最广泛的软件
工程范例。但也存在不少问题。
( 1)实际的项目很少按照该模型给出的顺序进
行。在项目实施过程中变化可能引起混乱。
( 2)用户常常难以清楚地给出所有需求,而线
性模型却要求如此。
( 3)用户必须要有耐心。程序的运行版本要等
到项目的晚期才能得到。设计中,大的错误
可能引起灾难后果。
( 4)开发者常常被不必要地耽搁。花在等待上
的时间比花在开发上的时间还要多。
第 2章 过程( Process)
尽管问题很多,但传统的生命周期范型仍然在
软件工程中占据重要位置。
2.5 原型模型 (The Prototyping Model)
开发问题,( 1)用户定义了一组目标,但不
能标识出输入、处理及输出需求;( 2)开发
者可能不能确定算法的有效性、操作系统的
适应性或人机交互的形式。
第 2章 过程( Process)
? 原型范型 (The Prototyping Model)
听取用户意见 建造 /修改原型
用户测试
运行模型
第 2章 过程( Process)
存在问题:
( 1) 用户看到的似乎是软件的工作版本。
( 2)开发者常常需要实现上的折中,以
使原型能够尽快工作。
原型仍是一个有效的模型。
第 2章 过程( Process)
2.6 RAD模型
快速应用开发( RAD) 是一个线性顺序的软
件开发模型,强调极短的开发周期。 RAD方
法主要用于信息系统的应用软件开发。包含
以下几个开发阶段。
? 业务建摸:业务活动中的信息流被模型化。
? 数据建摸:信息流被精化,形成业务所需的
数据对象。
? 处理建摸:业务功能。增加、修改和删除数
据对象。
第 2章 过程( Process)
? 应用生成,RAD假设使用第四代技术,
使用自动化工具辅助软件开发。
? 测试及反复,RAD强调软件复用,
第 2章 过程( Process)
RAD模型 (RAD Model)
业务建摸
数据建摸
处理建摸
应用生成
测试及反复
60— 90天
第 2章 过程( Process)
? 对于大型的,但可伸缩的项目,RAD需要足
够的人力资源。
? RAD要求开发者和用户在一个很短的时间内
完成一个系统。
? 并非所有项目都适合用这种方法开发。
2.7 演化软件过程模型
开发者有时很难设计出最终的产品。但由于
市场的竞争,可以开发出一个有限的版本。
第 2章 过程( Process)
2.7.1 增量模型 (The Incremental Model)
分析 设计 编码 测试 维护
分析 设计 编码 测试 维护
分析 设计 编码 测试 维护
第 2章 过程( Process)
增量模型,象原形和其他演化方法
一样,具有迭代的特征。
2.7.2 螺旋模型 (The Spiral Model)
计划 风险分析
工程
建造及发布
用户评估
用户通讯
第 2章 过程( Process)
2.7.3 构件组装模型
对象技术为软件工程的基于构件的过程
模型提供了技术框架。面向对象范型强
调了类的创建,类封装了数据和用于操
作数据的算法。这些类可以较容易地复
用。构件组装模型是利用预先构造好的
软件构件来开发应用程序的。
第 2章 过程( Process)
? 构件组装模型 (The Component Assembly
Model)
标识侯选构件
在库中查找构件
如果存在则提取构件
如果不存在则提取构件
将新构件放入库中
标识侯选构件
开发系统的第 n次迭代
第 2章 过程( Process)
2.7.4 并发模型 (The Concurrent
Development Model)
开始
开发 等待修改
修改
复审
基线评估
完成
第 2章 过程( Process)
2.8 形式化方法基础 (The Formal Methods Model)
它们带来了计算机软件用数学说明描述的
方法。使得软件工程师能够通过采用一个严
格的、数学的表示体系来说明、开发和验证
基于计算机的系统。这种方法的一个变种就
是净室软件工程。
2.9 第四代技术 (Forth Generation techniques)
第四代技术包含一系列的工具,能使软件工
程师在较高的级别上说明软件的特征。之后
工具根据开发者的说明自动生成原代码。它
以一种用户易于理解的问题描述方法来描述
待解决的问题。
第 2章 过程( Process)
2.10 过程技术( Process Technology)
过程技术工具可以帮助软件组织者分析
他们当前的过程、组织工作任务、控制
和监管进度,以及管理技术质量。
2.11 产品和过程 (Product and Process)
如果过程很弱,最终产品不可避免会出现
问题。但过分依赖过程也是很危险的。
小结
软件工程在计算机软件的开发过程中集
成了过程、方法和工具。本章给出的若
干不同的软件工程过程模型,各有其优
缺点。但他们均有一系列的共同的一般
阶段。使得我们可以探讨过程的原则、
概念和方法。
电子教案
王树林
第 2章 过程( Process)
? 软件工程是过去十年中人们普遍关注的焦点。软件过
程与软件工程不完全同义。
2.1 Software Engineering— A Layered Technology
软件工程定义
( 1) 是为了经济地获得可靠的和能在实际机器上高
效运行的软件而建立和使用的好的工程原则。 这是
Fritz Bauer在 NATO会议上给出的定义。
( 2)将系统化的、规范的、可度量的方法应用于软
件的开发、运行和维护的过程,即将工程化应用于软
件中,以及对这些方法的研究。这是 IEEE[IEE93]给
出的一个综合的定义。
第 2章 过程( Process)
? 2.1.1 过程、方法和工具
( Process,Methods,and Tools)
软件工程是一种层次化的技术。支
持软件工程的根基就在于对质量的关注。
任何工程方法都必须是以有组织的质量
保证为基础。
第 2章 过程( Process)
? 软件工程层次
软件工程
质量焦点
过程
方法
工具
第 2章 过程( Process)
? 软件工程的基层是过程层。过程与技术
结合在一起,使得软件能够被合理地和
及时有效地开发出来。过程定义了一组
关键过程区域的框架,它构成了软件项
目的管理控制基础,规定了技术方法的
采用、工程产品(模型、文档、数据、
报告和表格等)的产生、里程碑的建立、
质量的保证及变化的适当管理。
第 2章 过程( Process)
? 软件工程的方法层提供了开发软件在技
术上需要“如何做”。方法涵盖了一系
列的任务:需求分析、概要设计、详细
设计、编程、测试和维护。软件工程方
法依赖于一组基本原则,这些原则控制
了每一个技术区域,且包含建摸活动和
其它描述技术。
第 2章 过程( Process)
? 软件工程的工具层对过程和方法提供了自动
的和半自动的支持。当这些工具被集成起来
使得一个工具的输出信息是另一个工具的输
入信息时,一个支持软件开发的系统就建立
了,称为计算机辅助软件工程( CASE)。
CASE集成了软件、硬件和一个软件工程数据
库(一个仓库 包含了关于分析、设计、编程
和测试等的重要信息),从而形成了一个软
件工程。
第 2章 过程( Process)
2.1.2 软件工程的一般视图( A Generic View of Software
Engineering)
工程是对技术实体的分析、设计、建造、验证和
管理。
? 要解决的问题是什么?
? 要用于解决该问题的实体具有什么特点?
? 如何实现该实体(解决方案)?
? 如何建造该实体?
? 采用什么方法去发现该实体设计和建造过程中产生的
错误?
? 当该实体的用户要求修改、适应和增强
第 2章 过程( Process)
一般来说,一个软件项目的开发过程主要分
为三个阶段:
( 1)定义阶段主要集中于“做什么”。主要工
作是,需求分析、软件项目计划和信息工程。
定义系统或软件的关键需求,建立什么样的
软件界面,搞清楚要处理的信息,预期完成
什么样的软件功能。
( 2)开发阶段集中于“如何做”。定义数据如
何结构化,功能如何转换为软件体系结构,
过程细节如何实现,界面如何表示,设计如
何转换为程序代码,测试如何执行。
第 2章 过程( Process)
( 3)维护阶段集中于“改变”。软件开发过程中出现
的错误需要剔除,由于软件环境的变化而要求的适应
性修改,以及由于用户需求的变化而带来的增强性修
改。维护阶段重复定义和开发阶段的步骤。在维护阶
段可能遇到四类修改:
? 纠错:改正已发现的软件错误。
? 适应:适应软件外部环境的变化而修改软件。
? 增强:为适应用户提出的更好需求而修改软件。
? 预防:更好地提高软件的适应性和增强软件的需求。
第 2章 过程( Process)
软件工程活动还包括:
( 1)软件项目追踪和控制;
( 2)正式的技术复审;
( 3)软件质量保证;
( 4)软件配置管理;
( 5)文档的准备和产生;
( 6)可复用管理;
( 7)测试;
( 8)风险管理。
第 2章 过程( Process)
2.2 软件过程 (The Software Process)
软件过程框架
辅助活动
框架活动
任务集合
工作任务
里程碑、交付物
SQA(软件质量保证 )点
第 2章 过程( Process)
? 一个公共过程框架,就是通过定义若干框架
活动来建立的,如果不考虑其规模和复杂性
这些活动适应于所有的软件项目。每一个集
合都有软件工程工作任务、项目里程碑、软
件工程产品和交付物以及质量保证点组成。
? 近年来,过程成熟度成为人们关注的焦点。
软件工程研究所( SEI) 提出一个综合模型,
定义了当一个组织达到不同的过程成熟度时
应该具有的软件工程能力。 SEI的模型提供了
一个公司软件工程实践的整体有效性的方法,
且建立了五级的过程成熟度级别,定义如下:
第 2章 过程( Process)
第一级:初始级 — 软件过程的特征是无序的,
有时甚至是混乱的。几乎没有过程定义,成
功完全取决于个人的能力。
第二级:可重复级 — 建立了基本的项目管理过
程,能够追踪费用、进度和功能。有适当的
必要的过程规范,使得可以重现以前类似项
目的成功。
第三级:定义级 — 用于管理工程活动的文档已
经文档化和标准化,并与整个组织的软件过
程相集成。所有项目都使用文档化的,组织
认可的过程来开发和维护软件。本级包含了
第二级的所有特征。
第 2章 过程( Process)
第四级 管理级 — 软件过程和产品质量的详细度
量数据被收集,通过这些度量数据,软件过
程和产品能够被定量地理解和控制。本级包
含了第三级的所有特征。
第五级 优化级 — 通过定量的反馈,进行不断的
过程改进,这些反馈来自于过程或通过测试
新的想法和技术而得到,本级包含了第四级
的所有特征。
级别表示了一个组织的过程成熟度。
SEI将关键过程区域( KPAs) 与每一个成熟度级
别联系起来
第 2章 过程( Process)
2.3 软件过程模型 (Software Process Model)
? 为了解决实际问题,一个软件工程师
必须提出一个开发策略,这个策略常常
被称为过程模型或软件工程范型。
? 所有的软件都可看成是一个问题循环解
决过程,其中包含了四个截然不同的阶
段:状态描述、问题定义、技术开发和
方案综述。
第 2章 过程( Process)
问题循环解决过程中的阶段
问题定义
技术开发
方案综述
状态描述
第 2章 过程( Process)
问题循环解决阶段中的阶段
状态描述
第 2章 过程( Process)
2.4 线性顺序模型 (The Linear Sequential
Model)
软件工程的线性顺序模型,有时也称为
传统生命周期或瀑布模型。
系统 /信息工程
分析 设计 编码 测试
维护
第 2章 过程( Process)
线性顺序模型是最早,也是应用最广泛的软件
工程范例。但也存在不少问题。
( 1)实际的项目很少按照该模型给出的顺序进
行。在项目实施过程中变化可能引起混乱。
( 2)用户常常难以清楚地给出所有需求,而线
性模型却要求如此。
( 3)用户必须要有耐心。程序的运行版本要等
到项目的晚期才能得到。设计中,大的错误
可能引起灾难后果。
( 4)开发者常常被不必要地耽搁。花在等待上
的时间比花在开发上的时间还要多。
第 2章 过程( Process)
尽管问题很多,但传统的生命周期范型仍然在
软件工程中占据重要位置。
2.5 原型模型 (The Prototyping Model)
开发问题,( 1)用户定义了一组目标,但不
能标识出输入、处理及输出需求;( 2)开发
者可能不能确定算法的有效性、操作系统的
适应性或人机交互的形式。
第 2章 过程( Process)
? 原型范型 (The Prototyping Model)
听取用户意见 建造 /修改原型
用户测试
运行模型
第 2章 过程( Process)
存在问题:
( 1) 用户看到的似乎是软件的工作版本。
( 2)开发者常常需要实现上的折中,以
使原型能够尽快工作。
原型仍是一个有效的模型。
第 2章 过程( Process)
2.6 RAD模型
快速应用开发( RAD) 是一个线性顺序的软
件开发模型,强调极短的开发周期。 RAD方
法主要用于信息系统的应用软件开发。包含
以下几个开发阶段。
? 业务建摸:业务活动中的信息流被模型化。
? 数据建摸:信息流被精化,形成业务所需的
数据对象。
? 处理建摸:业务功能。增加、修改和删除数
据对象。
第 2章 过程( Process)
? 应用生成,RAD假设使用第四代技术,
使用自动化工具辅助软件开发。
? 测试及反复,RAD强调软件复用,
第 2章 过程( Process)
RAD模型 (RAD Model)
业务建摸
数据建摸
处理建摸
应用生成
测试及反复
60— 90天
第 2章 过程( Process)
? 对于大型的,但可伸缩的项目,RAD需要足
够的人力资源。
? RAD要求开发者和用户在一个很短的时间内
完成一个系统。
? 并非所有项目都适合用这种方法开发。
2.7 演化软件过程模型
开发者有时很难设计出最终的产品。但由于
市场的竞争,可以开发出一个有限的版本。
第 2章 过程( Process)
2.7.1 增量模型 (The Incremental Model)
分析 设计 编码 测试 维护
分析 设计 编码 测试 维护
分析 设计 编码 测试 维护
第 2章 过程( Process)
增量模型,象原形和其他演化方法
一样,具有迭代的特征。
2.7.2 螺旋模型 (The Spiral Model)
计划 风险分析
工程
建造及发布
用户评估
用户通讯
第 2章 过程( Process)
2.7.3 构件组装模型
对象技术为软件工程的基于构件的过程
模型提供了技术框架。面向对象范型强
调了类的创建,类封装了数据和用于操
作数据的算法。这些类可以较容易地复
用。构件组装模型是利用预先构造好的
软件构件来开发应用程序的。
第 2章 过程( Process)
? 构件组装模型 (The Component Assembly
Model)
标识侯选构件
在库中查找构件
如果存在则提取构件
如果不存在则提取构件
将新构件放入库中
标识侯选构件
开发系统的第 n次迭代
第 2章 过程( Process)
2.7.4 并发模型 (The Concurrent
Development Model)
开始
开发 等待修改
修改
复审
基线评估
完成
第 2章 过程( Process)
2.8 形式化方法基础 (The Formal Methods Model)
它们带来了计算机软件用数学说明描述的
方法。使得软件工程师能够通过采用一个严
格的、数学的表示体系来说明、开发和验证
基于计算机的系统。这种方法的一个变种就
是净室软件工程。
2.9 第四代技术 (Forth Generation techniques)
第四代技术包含一系列的工具,能使软件工
程师在较高的级别上说明软件的特征。之后
工具根据开发者的说明自动生成原代码。它
以一种用户易于理解的问题描述方法来描述
待解决的问题。
第 2章 过程( Process)
2.10 过程技术( Process Technology)
过程技术工具可以帮助软件组织者分析
他们当前的过程、组织工作任务、控制
和监管进度,以及管理技术质量。
2.11 产品和过程 (Product and Process)
如果过程很弱,最终产品不可避免会出现
问题。但过分依赖过程也是很危险的。
小结
软件工程在计算机软件的开发过程中集
成了过程、方法和工具。本章给出的若
干不同的软件工程过程模型,各有其优
缺点。但他们均有一系列的共同的一般
阶段。使得我们可以探讨过程的原则、
概念和方法。