PowerPoint 演示文稿

软 件 工 程
第一章 软件与软件工程
1.1
软件
1.2
软件工程的概念
1.3
软件生存周期
1.4
软件开发模式
1.5
软件开发方法、工具及环境
软 件 工 程
第1章
软件与软件工程
教学题目:1.1 软件
1.2 软件工程的概念
教学目的:1. 了解软件、软件危机等概念
2. 掌握软件工程的定义、原理、目标和原
则.
教学重点:软件工程的定义、原理、目标和原则
教学难点:软件工程的目标和原则
教
具:多媒体教室、电子教案
作
业:看书
软 件 工 程
1.1 软件(Software)1.1.1 软件与软件的组成
计算机软件——与计算机系统操作有关的程序、规程、
规则及任何与之有关的文档和数据。
∴软件
程序及有关数据—机器可执行;
文档(与软件开发、运行、维护、使用、
培训有关)——不可执行。
程序(program)——用程序设计语言描述的,适合
于计算机处理的语句序列。
软 件 工 程
程序设计语言三种类型:
1.机器语言、汇编语言:依赖于机器,面向机器
2.高级语言:独立于机器,面向过程或面向对象
3.面向问题语言:独立于机器,非过程式语言(4GL)
文档(document)—一种数据媒体和其上所记录的数据。
文档记录软件开发活动和阶段成果,具有永久性,可供
人或机器阅读。
文档可用于
专业人员和用户之间的通信和交流;
软件开发过程的管理;
运行阶段的维护。
面向过程
软 件 工 程
1. 软件的特点
软件是逻辑产品,硬件是物理产品。
特点:
(1)软件开发更依赖于开发人员的业务素质、智力、
人员的组织、合作和管理。软件开发、设计几
乎都是从头开始,成本和进度很难估计。
(2)软件存在潜伏错误,硬件错误一般能排除。
(3)软件开发成功后,只需对原版进行复制。
软 件 工 程
1. 软件的特点(续)
(4)软件在使用过程中维护复杂:
1)纠错性维护—改正运行期间发现的潜伏错误;
2)完善性维护—提高或完善软件的性能;
3)适应性维护—修改软件,以适应软硬件环境
的变化;
4)预防性维护—改进软件未来的可维护性和
可靠性。
(5)软件不会磨损和老化。
软 件 工 程
2. 软件的发展
第一阶段——20世纪60年代中期以前,软件开发处于
个体化生产状态。在这一阶段中,软件
还没有系统化的开发方法。目标主要集
中在如何提高时空效率上。
第二阶段——从20世纪60年代中期到70年代末期。软
件开发已进入了作坊式生产方式,即出
现了“软件车间”。软件开发开始形成
产
品。到20世纪60年代末,“软件危机”
变
得十分严重。
软 件 工 程
2. 软件的发展
第三阶段——从20世纪70年代中期到20世纪80年代末
期。软件开发进入了产业化生产,即出
现了众多大型的“软件公司”。在这一
阶
段,软件开发开始采用了“工程”的方
法,
软件产品急剧增加,质量也有了很大的
提高。
第四阶段——从20世纪80年代末期开始的。这是一个
软件产业大发展的时期。也是软件工程
大发展的时期,人们开始采用面向对象
的技术和可视化的集成开发环境。
软 件 工 程
1.1.2 软件危机
——软件危机是指在计算机软件开发、使用与维护
过程中遇到的一系列严重问题和难题。
1.软件危机的表现
1)对软件开发成本和进度的估计常常很不准确。常
常出现实际成本比估算成本高出一个数量级、实
际进度比计划进度拖延几个月甚至几年的现象,
从而降低了开发商的信誉,引起用户不满。
2)用户对已完成的软件不满意的现象时有发生。
3)软件产品的质量往往是靠不住的。
软 件 工 程
1.软件危机的表现
4)软件常常是不可维护的。
5)软件通常没有适当的文档资料。文档资料不全或不
合格,必将给软件开发和维护工作带来许多难以想
象的困难和难以解决的问题。
6)软件成本在计算机系统总成本中所占比例逐年上升。
特别是软件维护成本迅速增加,已经占据软硬件总
成本的40%~75%,如图1-1-1所示。
7)开发生产率提高的速度远跟不上软件需求。
100%
80%
软件开发
硬 件
60%
40%
软件维护
20%
1955年
1970年
图1-1-1 软件、硬件成本变化趋势
1985年
软 件 工 程
2.产生软件危机的原因
1)用户对软件需求的描述不精确。
2)软件开发人员对用户需求的理解有偏差,这将导致
软件产品与用户的需求不一致。
3)缺乏处理大型软件项目的经验。开发大型软件项目
需要组织众多人员共同完成。一般来说,多数管理
人员缺乏大型软件的开发经验,而多数软件开发人
员又缺乏大型软件项目的管理经验,致使各类人员
的信息交流不及时、不准确、容易产生误解。
软 件 工 程
2.产生软件危机的原因
4)开发大型软件易产生疏漏和错误。
5)缺乏有力的方法学的指导和有效的开发工
具的支持。软件开发过多地依靠程序员的
“技巧”,从而加剧了软件产品的个性化。
6)面对日益增长的软件需求,人们显得力不
从心。从某种意义上说,解决供求矛盾将
是一个永恒的主题。
软 件 工 程
3.缓解软件危机的途径
• 到了20世纪60年代末期,软件危机已相当严
重。这促使计算机科学家们开始探索缓解软
件危机的方法。他们提出了“软件工程”的
概念,即用现代工程的原理、技术和方法进
行软件的开发、管理、维护和更新。于是,
开创了计算机科学技术的一个新的研究领域。
软 件 工 程
1.2 软件工程的概念1.2.1 软件工程的定义
1968年,北大西洋公约组织在原西德召开计算机科学会
议,由Fritz Bauer首次提出了“软件工程”的概念。
软件工程——用工程、科学和数学的原则与方法开发、
维护计算机软件的有关技术和管理方法。
软件工程由方法、工具和过程三部分组成,称软件工程
的三要素。
软 件 工 程
1.2.1 软件工程的定义
软件工程中的各种方法是完成软件工程项目的技
术手段,它们支持软件工程的各个阶段。
软件工程使用的软件工具能够自动或半自动地支
持软件的开发、管理和文档的生成。
软件工程中的过程贯穿于整个工程的各个环节,
在这一过程中,管理人员应对软件开发的质量、
进度、成本等进行评估、管理和控制,包括计划
跟踪与控制、成本估算、人员的组织、质量保证、
配置管理等
软 件 工 程
1.2.2 软件工程的基本原理
• 著名的软件工程专家B. W. Boehm于1983年综
合了软件工程专家学者们的意见并总结了开
发软件的经验,提出了软件工程的7条基本原
理。这7条原理被认为是确保软件产品质量和
开发效率的原理的最小集合,又是相互独立、
缺一不可、相当完备的最小集合。下面就简
单介绍软件工程的这7条原理:
软 件 工 程
1.用分阶段的生存周期计划严格管理
• 这条基本原理是应该把软件生存周期划分成若
干个阶段,并相应地制定出切实可行的计划,
然后严格按照计划对软件开发与维护工作进行
管理。应该制定的计划有项目概要计划、里程
碑计划、项目控制计划、产品控制计划、验证
计划和运行维护计划等。各级管理人员都必须
严格按照计划对软件开发和维护工作进行管理。
据统计,不成功的软件项目中,有一半左右是
由于计划不周造成的。
软 件 工 程
2.坚持进行阶段评审
• 据统计,在软件生存周期各阶段中,编码阶段
之前的错误约占63%,而编码错误仅占37%。
另外,错误发现并改正得越晚,所花费的代价
越高。坚持在每个阶段结束前进行严格的评审,
就可以尽早发现错误,从而可以最小的代价改
正错误。因此,这是一条必须坚持的重要原理。
软 件 工 程
3.实行严格的产品控制
• 决不能随意改变需求,只能依靠科学的产品控制技
术来顺应用户提出的改变需求的要求。为了保持软
件各个配置成分的一致性,必须实行严格的产品控
制。其中主要是实行基准配置管理(又称为变动控
制),即凡是修改软件的建议,尤其是涉及基本配
置的修改建议,都必须按规程进行严格的评审,评
审通过后才能实施。
• 这里的“基准配置”是指经过阶段评审后的软件配
置成分,即各阶段产生的文档或程序代码等。
软 件 工 程
4.采用现代程序设计技术
• 实践表明,采用先进的程序设计技术既可以提
高软件开发与维护的效率,又可以提高软件的
质量。多年来,人们一直致力于研究新的“程
序设计技术”。比如,20世纪60年代末提出的
结构程序设计技术;后来又发展出各种结构分
析(SA)和结构设计(SD)技术;之后又出现
了面向对象分析(OOA)和面向对象设计
(OOD)技术等等。
软 件 工 程
5.结果应能清楚地审查
• 软件产品是一种看不见、摸不着的逻辑产品。
因此,软件开发小组的工作进展情况可见性
差,难于评价和管理。为了更好地进行评价
与管理,应根据软件开发的总目标和完成期
限,尽量明确地规定软件开发小组的责任和
产品标准,从而使所得到的结果能清楚地审
查。
软 件 工 程
6.开发小组的人员应少而精
• 软件开发小组人员素质和数量是影响软件质量
和开发效率的重要因素。实践表明,素质高的
人员与素质低的人员相比,开发效率可能高几
倍至几十倍、而且所开发的软件中的错误也要
少得多。另外,开发小组的人数不宜过多,因
为随着人数的增加,人员之间交流情况、讨论
问题的通信开销将急剧增加,这不但不能提高
生产率,反而由于误解等原因可能增加出错的
概率。
软 件 工 程
7.承认不断改进软件工程实践的必要性
• 遵循上述六条基本原理,就能够较好地实现软件的
工程化生产。但是,软件工程不能停留在已有的技
术水平上,应积极主动地采纳或创造新的软件技术,
要注意不断总结经验,收集工作量、进度、成本等
数据,并进行出错类型和问题报告的统计。这些数
据既可用来评估新的软件技术的效果,又可用来指
明应优先进行研究的软件工具和技术。
软 件 工 程
1.2.3 软件工程的目标
• 软件工程的目标是在给定成本、进度的前提
下,开发出具有可修改性、有效性、可靠性、
可理解性、可维护性、可重用性、可适应性、
可移植性、可追踪性和可互操作性并满足用
户需求的软件产品。
软 件 工 程
名词解释
1)可修改性(modifiability),允许对软件系统进行
修改而不增加其复杂性。它支持软件调试与维护。
2)有效性(efficiency),指软件系统的时间和空间
效率。这是一个应当努力追求的重要目标。
3)可靠性(reliability),是指在给定的时间间隔内,
程序成功运行的概率。可靠性是衡量软件质量的一
个重要目标。
软 件 工 程
名词解释
4)可理解性(understandability),指系统具有清晰的结
构,能直接反映问题的需求。可理解性有助于控制软件
系统的复杂性,并支持软件的维护、移植和重用。
5)可维护性(maintainability),是指软件产品交付使用
后,在实现改正潜伏的错误、改进性能等属性、适应环
境变化等方面工作的难易程度。由于软件的维护费用在
整个软件生存周期中占主要的比重,因此,可维护性是
软件工程中的一个十分重要的目标。软件的可理解性和
可修改性支持软件的可维护性。
软 件 工 程
名词解释
6)可重用性(reusability),是指软部件可以在多种场
合使用的程度。
概念或功能相对独立的一个或一组相关模块可构
成一个软部件。软部件应具有清晰的结构和注释、正
确的编码和较高的时空效率。可将各种软部件按照某
种规则放在软部件库中供开发人员选用。
广义地讲,可重用性还应包括应用项目、规格说
明、设计、概念和方法等等的重用。一般来说,重用
的层次越高,带来的效益越大。
可重用性有助于提高软件产品的质量和开发效率、
降低软件开发和维护费用。
软 件 工 程
名词解释
7)可适应性(adaptability),是指软件在不同的系统约束
条件下,使用户需求得到满足的难易程度。
选择广为流行的软硬件支持环境、采用广为流行的程序设
计语言编码、采用标准的术语和格式书写文档可增强软
件产品的可适应性。
8)可移植性(portability),是指软件从一个计算机系统
或环境移植到另一个上去的难易程度。
采用通用的运行支持环境和尽量通用的程序设计语言的标
准部分可提高可移植性。而应将依赖于计算机系统的低
级(物理)特征部分相对独立、集中起来。可移植性支
持软件的可重用性和可适应性。
软 件 工 程
名词解释
9)可追踪性(traceability),是指根据软
件需求对软件设计、程序进行正向追踪,
或根据程序、软件设计对软件需求进行
逆向追踪的能力。软件开发各阶段的文
档和程序的完整性、一致性、可理解性
支持软件的可追踪性。
10)可互操作性(interoperability),是指
多个软件元素相互通信并协同完成任务
的能力。
软 件 工 程
1.2.4 软件工程的原则
1.抽象(abstraction),抽取各个事物中共同的最基本的
特征和行为,暂时忽略它们之间的差异。一般采用分层
次抽象的方法来控制软件开发过程的复杂性。抽象使软
件的可理解性增强并有利于开发过程的管理。
2.信息隐藏(information hiding),将模块内部的信息
(数据和过程)封装起来。其他模块只能通过简单的模
块接口来调用该模块,而不能直接访问该模块内部的数
据或过程,即将模块设计成“黑箱”。信息隐藏的原则
可使开发人员把注意力集中于更高层次的抽象上。
软 件 工 程
1.2.4 软件工程的原则
4.局部化(localization),即在一个物理模块内集
中逻辑上相互关联的计算资源。局部化支持信息
隐藏,从而保证模块之间具有松散的耦合、模块
内部有较强的内聚。这有助于控制每一个解的复
杂性。
5.一致性(consistency),整个软件系统(包括程
序、数据和文档)的各个模块应使用一致的概念、
符号和术语;程序内部接口应保持一致;软件与
环境的接口应保持一致;系统规格说明应与系统
行为保持一致;用于形式化规格说明的公理系统
应保持一致。
软 件 工 程
1.2.4 软件工程的原则
6.完全性(completeness),软件系统不丢失任何重要
成分,完全实现所需的系统功能的程度。为了保证
系统的完全性,在软件的开发和维护过程中需要严
格的技术评审。
7.可验证性(verifiability),开发大型软件系统需要
对系统逐层分解。系统分解应遵循易于检查、测试、
评审的原则,以使系统可验证。
 抽象、信息隐藏、模块化和局部化的原则支持可理
解性、可修改性、可靠性等目标,并可提高软件产
品的质量和开发效率;
 一致性、完全性和可验证性等原则可以帮助软件开
发人员去实现一个正确的系统。
软 件 工 程
第一章 软件与软件工程
教学题目:1.3 软件生存周期 ~ 1.5 方法、
工具及环境
教学目的:掌握软件生存周期的划分, 了
解各个阶段的任务;熟悉几种软件开发模
型、了解CASE工具及环境。
教学重点:软件生存周期、软件开发模型。
教学难点:开发模型
教
具:多媒体教室、电子教案
作
业:看书
软 件 工 程
1.3 软件生存周期
• 软件从定义开始,经过开发、使用和维护,
直到最终退役的全过程称为软件生存周期。
• 可将软件生存周期划分为3个过程共9个阶段。
• 3个过程是:软件定义过程、软件开发过程、
软件使用与维护过程。
• 9个阶段有:可行性研究、需求分析、概要设
计、详细设计、实现、组装测试、
验收测试、使用与维护、退役。
它们之间的关系如图1-3-1所示。
定义过程
可行性研究
需求分析
概要设计
详细设计
开发过程
实现
组装测试
验收测试
使用与维护
使用与维护过程
退役
图1-3-1 软件生存周期阶段的划分
软 件 工 程
1.3.1 软件定义
• 软件定义的基本任务是确定软件系统的
工程需求,也就是要搞清“做什么”。
• 软件定义过程可通过软件系统的可行性
研究和需求分析两个阶段来完成。
软 件 工 程
1.可行性研究
 本阶段的任务是根据用户提出的工程项目的性质、目标和
规模,进一步了解用户的要求及现有的环境及条件,从技
术、经济和社会等多方面研究并论证该项目的可行性。即
该项目是否值得去解决,是否存在可行的解决办法。
 此时,系统分析人员应在用户的配合下对用户的要求和现
有的环境进行深入调查并写出调研报告。进而进行可行性
论证。可行性论证包括经济可行性、技术可行性、操作可
行性、法律可行性等。在此基础上还要制定初步的项目计
划,包括需要的软硬件资源、定义任务、风险分析、成本/
效益分析以及进度安排等。
 可行性研究的结果将是使用部门负责人做出是否继续进行
该项目决定的重要依据。
软 件 工 程
2.需求分析
1)需求分析的任务
需求分析的任务是确定待开发的软件系统
“做什么”。
具体任务包括确定软件系统的功能需求、
性能需求和运行环境约束,编制软件需求
规格说明书、软件系统的验收测试准则和
初步的用户手册。
软 件 工 程
2.需求分析
2)需求分析的实现途径
软件系统需求一般由用户提出。系统分析员和
开发人员在需求分析阶段必须与用户反复讨论、
协商,充分交流信息,并用某种方法和工具构建
软件系统的逻辑模型。为了使开发方与用户对待
开发软件系统达成一致的理解,必须建立相应的
需求文档。有时对大型、复杂的软件系统的主要
功能、接口、人机界面等还要进行模拟或建造原
型,以便向用户和开发方展示待开发软件系统的
主要特征。确定软件需求的过程有时需要反复多
次,最终得到用户和开发者的确认。
软 件 工 程
2.需求分析
3)需求分析的阶段成果
需求分析阶段的主要成果有软件需求规格说明、
软件验收测试计划和准则、初步的用户手册等。其
中 , 软 件 需 求 规 格 说 明 ( Software Requirements
Specification,即SRS),是一个关键性的文档。多
数场合,面向开发者的软件需求用需求规格说明语
言来描述,它是软件开发人员进行软件设计的依据;
另一方面,从某种意义上讲,SRS又起到与用户签定
合同的合同书的作用。因此,在SRS中应包括软件系
统的全部功能需求、性能需求、接口需求、设计需
求、基本结构、开发标准和验收准则等等。
软 件 工 程
1.3.2 软件开发
 软件开发过程由概要设计、详细设计、实现(即编
码与单元测试)、组装测试、验收测试共5个阶段组
成。
 其中,概要设计和详细设计统称为设计;编码即编
程;单元测试、组装测试和验收测试统称为测试。
 开发者通常可提出多种设计方案,并对各种方案在
功能、性能、成本、进度等方面进行比较和折衷,
从中选出一种“最佳方案”。
 下面将简单地介绍软件开发过程中各阶段的任务,
实现的途径和阶段成果。
软 件 工 程
1.3.2 软件开发
1.概要设计——总体设计
任务:
是对需求规格说明中提供的软件系统逻辑模型进行
进一步的分解,从而建立软件系统的总体结构和各
子系统之间、各模块之间的关系,定义各子系统接
口界面和各功能模块的接口,设计全局数据库或数
据结构,规定设计约束,制定组装测试计划,进而
给出每个功能模块的功能描述、全局数据定义和外
部文件定义等。
软 件 工 程
1.概要设计
实现的途径:
选择某种方法和工具。设计的软件系统应具有
良好的总体结构、尽量降低模块接口的复杂度,
并力争做到各功能模块之间的低耦合度、而功
能模块内部具有较高的内聚度。
阶段性成果:
概要设计说明书、
数据库或数据结构说明书、
组装测试计划等文档。
软 件 工 程
2.详细设计
 任务:是将概要设计产生的功能模块进一步细化,形成可
编程的程序模块,然后设计程序模块的内部细节,包括算
法、数据结构以及各程序模块间的接口信息,并设计模块
的单元测试计划。
 途径:可以采用结构化的设计方法,采用结构化的程序流
程图、N-S图、过程设计语言(PDL,Procedure Design
Language)等工具进行描述,也可以采用面向对象的设计
方法等等。
 阶段成果:应提供“详细设计规格说明”(或称“模块开
发卷宗”)和单元测试计划等详细设计文档。
软 件 工 程
3.实现——编码和单元测试。
 编码的主要任务是根据详细设计规格说明,用某种选
定的程序设计语言把详细设计的结果转化为机器可运
行的源程序模块,这是一个编程和调试程序的过程。
 一般来说,对软件系统所采用的分析方法、设计方法、
编程方法以及所选用的程序设计语言应尽可能保持一
致。
 编码阶段应注意遵循编程标准、养成良好的编程风格,
以便编写出正确的便于理解、调试和维护的程序模块。
软 件 工 程
3.实现——编码和单元测试。
单元测试:每编写出一个程序模块的源程序,
调试通过后,即对该模块进行测试,这称为单
元测试。
实现阶段的成果:
按一定规则存在盘上的通过单元测试的各功能
模块的集合
详细的单元测试报告等文档。
软 件 工 程
4.组装测试
组装测试:根据概要设计提供的软件结构、各功能
模块的说明和组装测试计划,把经过单元测试检验
的模块按照某种选定的策略逐步进行组装和测试。
主要任务:测试系统各模块间的连接是否正确,系
统或子系统的正确处理能力、容错能力、输入/输
出处理是否达到要求。
阶段成果:
①应是满足概要设计要求、可运行的软件系统
和源程序清单;
② 组装测试报告等文档。
软 件 工 程
5.验收测试——确认测试
 任务:按照验收测试计划和准则对软件系统进行测
试,看其是否达到了需求规格说明中定义的全部功
能和性能等方面的需求。
 确认测试结束时,应生成验收测试报告、项目开发
总结报告,并向用户提交源程序清单、最终用户手
册、操作手册等文档资料。
 最后,由专家、用户负责人、软件开发和管理人员
组成的软件评审小组要对软件验收测试报告、测试
结果和软件进行评审,通过后,软件产品正式通过
验收(即完成了开发合同),可以交付用户使用了。
软 件 工 程
1.3.3 软件的使用与维护
1.软件使用与维护阶段
任务: 通过各种维护活动使软件系统持久地
满足用户的需求。
每项维护活动实质上都是一次压缩和简化
了的软件定义和软件开发过程。都要经历
提出维护要求、分析维护要求、提出维护
方案、审批维护方案、确定维护计划、修
改软件设计、修改程序、测试程序、评审、
验收等步骤。
软 件 工 程
1.软件使用与维护阶段
 应当指出,软件在使用的过程中,应及时收集被发现
的软件错误,并定期撰写“软件问题报告”;而每一
项维护活动都应该准确地记录下来,并作为正式的文
档资料保存。
 据统计,软件维护人员为了分析和理解原软件系统所
花费的工作量约占整个维护工作量的60%以上。在软
件开发的过程中应重视对软件可维护性的支持
2 .退役
运行与维护
可行性研究
需求分析
验收测试
(验收测试计划)
概要设计
组装测试
(组装测试计划)
详细设计
单元测试
(单元测试计划)
编码与调试
图1-3-2 软件研制与软件测试的层次对应关系
软 件 工 程
1.4 软件开发模型
 软件开发模型(又称为软件生存周期模型)
—软件项目开发和维护的总体过程思路的框架。
 它指出了软件开发过程各阶段之间的关系和顺序,是
软件开发过程的概括。它为软件开发过程提供原则和
方法,并为软件工程管理提供里程碑和进度表。因此,
软件开发模型也是软件工程的重要内容。
软 件 工 程
1.4 软件开发模型
 软件开发模型的几种类型:
以软件需求完全确定为基础的瀑布模型;
在开发初期仅给出基本需求的渐进式模型,如原型模型、
螺旋模型、喷泉模型等;
以形式化开发方法为基础的变换模型、基于四代技术的
模型;
基于知识的智能模型等等。
在实际开发时,应根据项目的特点和现有的条件选取合
适的模型,也可以把几种模型组合起来使用以便充分利
用各模型的优点。
软 件 工 程
1.4.1 瀑布模型
瀑布模型(waterfall model)是由W. Royce于
1970年提出来的。又称为软件生存周期模型。
瀑布模型严格按照软件生存周期各个阶段来进
行开发,上一阶段的输出即是下一阶段的输入,
并强调每一阶段的严格性。它规定了各阶段的
任务和应提交的成果及文档,每一阶段的任务
完成后,都必须对其阶段性产品(主要是文档)
进行评审,通过后才能开始下一阶段的工作。
因此,它是一种以文档作为驱动的模型。
可行性研究
需求分析
概要设计
详细设计
实现
组装测试
验收测试
使用与维护
图1-4-1 带反馈的瀑布模型
退役
软 件 工 程
瀑布模型优点
提供了软件开发的基本框架,有利于大型软件开
发过程中人员的组织、管理,有利于软件开发
方法和工具的研究与使用,因此,在软件工程
中占有重要的地位。
软 件 工 程
瀑布模型缺点
1)在软件开发的初期阶段就要求做出正确、全面、完
整的需求分析对许多应用软件来说是极其困难的。
2)在需求分析阶段,当需求确定后,无法及时验证需
求是否正确、完整。
3)作为整体开发的瀑布模型,由于不支持产品的演化,
缺乏灵活性,对开发过程中很难发现的错误,只有
在最终产品运行时才能暴露出来,从而使软件产品
难以维护。
软 件 工 程
瀑布模型适应场合
瀑布模型一般适用于功能、性能明确、完
整、无重大变化的软件系统的开发。例如操
作系统、编译系统、数据库管理系统等系统
软件的开发。应用有一定的局限性。
软 件 工 程
1.4.2 原型模型
 原型模型(prototyping model)的基本框架是软件
开发人员根据用户提出的软件基本需求快速开发一
个原型,以便向用户展示软件系统应有的部分或全
部功能和性能,在征求用户对原型的评价意见后,
进一步使需求精确化、完全化,并据此改进、完善
原型,如此迭代,直到软件开发人员和用户都确认
软件系统的需求并达成一致的理解为止。软件需求
确定后,便可进行设计,编码、测试等以后的各个
开发步骤。
开始
停止
需求的采集和细化
快速设计
产品样品
(需求确认)
对原型加工
(需求精确化)
建造原型
用户评价原型
图1-4-2 使用原型确定需求的过程
软 件 工 程
快速原型的开发途径有三种:
1)仅模拟软件系统的人机界面和人机交互方式。
2)开发一个工作模型,实现软件系统中重要的或容易产生
误解的功能。
3)利用一个或几个类似的正在运行的软件向用户展示软件
需求中的部分或全部功能。
总之,建造原型应尽量采用相应的软件工具和环境,
并尽量采用软件重用技术,在运行效率方面可做出让步,
以便尽快提供。同时,原型应充分展示软件系统的可见
部分,如人机界面、数据的输入方式和输出格式等。
软 件 工 程
原型模型的适应场合
原型模型比瀑布模型更符合人们认识事物的
过程和规律,是一种较实用的开发框架。
它适合于那些不能预先确切定义需求的软件
系统的开发,更适合于那些项目组成员(包
括分析员、设计员、程序员和用户)不能很
好交流或通信有困难的情况。
软 件 工 程
1.4.3 螺旋模型
螺旋模型(spiral model)是B. Boehm于
1988年提出的。它综合了瀑布模型和原型
模型的优点,即将两者结合,并加入了风
险分析机制。螺旋模型的基本框架如图14-3所示。
成本
计划:
明确目标、约束条件
选择方案
风险分析
构造原型
顺时针为进展方向
风险分析
实现计划
风险分析
开发计划
风险分析
需求精化计划
评审
生命周期计划
需求计划
需求评价
风险分析
原型3
原型2
原型1
可操作
的原型
决策
建模
操作概念
模拟
评价
软件需求
验收测试计划
组装测试计划
用户评价;阶段评审
软件产品
设计
需求确认
设计验证与确认
实现
验收
测试
组装
测试
图1-4-3 螺旋模型
单元
测试
详细
设计
编码
工程实现
软 件 工 程
1.4.3 螺旋模型
 螺旋模型的每一个周期都包括计划(需求定义)、
风险分析、工程实现和评审4个阶段。
1.计划(需求定义)
第一周期开始利用需求分析技术理解应用领域,获取
初步用户需求,制定项目开发计划(即整个软件生
命周期计划)和需求分析计划。经过一个周期后,
根据用户和开发人员对上一周期工作成果评价和评
审,修改、完善需求,明确下一周期软件开发的目
标、约束条件,并据此制定新一轮的软件开发计划 。
软 件 工 程
1.4.3 螺旋模型
2.风险分析
根据本轮制定的开发计划,进行风险分析,评估可选
方案,并构造原型进一步分析风险,给出消除或减少
风险的途径。此时根据风险分析的结果决策项目是否
继续。所以,螺旋模型是一个风险驱动的模型。
3.工程实现
利用构造的原型进行需求建模或进行系统模拟,…,
直至实现软件系统。
软 件 工 程
1.4.3 螺旋模型
4.用户评价与阶段评审
将原型提交用户使用并征求改进意见。开发人
员应在用户的密切配合下进一步完善用户需求,
直到用户认为原型可满足需求,或对软件产品
设计进行评价或确认等。
螺旋模型从第一个周期的计划开始,一个周期、
一个周期地不断迭代,直到整个软件系统开发
完成。
软 件 工 程
螺旋模型的优点
支持用户需求的动态变化。这就要求构造的原型的总体结构、
算法、程序、测试方案应具有良好的可扩充性和可修改性。
也支持软件系统的可维护性,每次维护过程只是沿螺旋模型
继续多走一两个周期。
原型可看作形式的可执行的需求规格说明,易于为用户和开
发人员共同理解,还可作为继续开发的基础,并为用户参与
所有关键决策提供了方便。
螺旋模型特别强调原型的可扩充性和可修改性,原型的进化
贯穿整个软件生存周期,这将有助于目标软件的适应能力。
螺旋模型为项目管理人员及时调整管理决策提供了方便,进
而可降低开发风险。
软 件 工 程
螺旋模型的缺点和适应场合
缺点:
①如果每次迭代的效率不高,致使迭代次数过多,
将会增加成本并推迟提交时间;
②使用该模型需要有相当丰富的风险评估经验和
专门知识,要求开发队伍水平较高。
适应场合:支持需求不明确、特别是大型软件
系统的开发,并支持面向规格说明、面向过程、
面向对象等多种软件开发方法,是一种具有广
阔前景的模型。
演化
软 件 工 程
1.4.4 喷泉模型
维护
测试
实现
设计
分析
图1-4-4 喷泉模型
喷泉模型是近几年提
出来的软件生存周期
模型。它是以面向对
象的软件开发方法为
基础,以用户需求为
动力,以对象来驱动
的模型。
软 件 工 程
喷泉模型的特点
1.软件系统可维护性较好;
2.各阶段相互重叠,表明了面向对象开发方法各
阶段间的交叉和无缝过渡;
3.整个模型是一个迭代的过程,包括一个阶段内
部的迭代和跨阶段的迭代;
4.模型具有增量开发特性,即能做到分析一点、
设计一点、实现一点,测试一点,使相关功能随
之加入到演化的系统中。
5.模型是对象驱动的,对象是各阶段活动的主体
,也是项目管理的基本内容。
6.该模型很自然地支持软部件的重用。
软 件 工 程
1.4.5 变换模型
变换模型(transformational model)主要用于软件的形式
化开发方法。
在软件需求分析确定以后,便用形式化的规格说明语言将
其描述为“形式化软件规格说明”,然后对其进行一系列
自动或半自动的变换,最终得到软件系统的目标程序。
模型检查
需求分析
形式化软件规
格说明(M0)
形式化软件设
计说明(M1)
…
(M2)
变换
图1-4-5 变换模型
变换
目标程序(M )
变换
软 件 工 程
1.4.5 变换模型
变换模型也应引入迭代机制。即将第一次用变换模
型得来的目标程序作为“原型”,让用户评价,以
便使用户需求精确化、完全化,再把精化后的需求
作为输入,第二次用变换模型进行变换,等等。
以形式化开发方法为基础的变换模型需要逻辑、代
数等严格的数学理论和诸如形式化的需求规格说明
语言、程序变换工具、定理证明工具等一整套开发
环境的支持。
形式化开发方法提出的比较早,但到目前为止,其
在理论和实践等方面离工程实际应用还有较长一段
距离。
软 件 工 程
1.4.6 基于四代技术的模型
1981年R. Ross提出了第四代编程语言(即4GL),
它是一种面向问题而非面向过程的语言。
四代技术(4GT)是以第四代语言(4GL)为核
心的软件开发技术。基于四代技术的模型是指用
4GT工具将开发者做出的软件规格说明自动转换
成程序代码。
目前,支持4GT的软件开发工具已经有了一些,
如屏幕生成器、报表生成器、数据库查询语言、
代码生成系统等。
软 件 工 程
1.4.6 基于四代技术的模型
收集需求
设计策略
4GL实现
测试
维护
图1-4-6 基于四代技术的模型
软 件 工 程
1.4.7 基于知识的智能模型
它可综合几个模型的特点,并与支持分析、设计、测试、维护等的应用
领域的基于规则的专家系统相结合,构成了应用领域的开发系统。
用户概念
分析
专家系统
需求分析
设计
设计
专家系统
编码
测试
专家系统
测试
维护
专家系统
图1-4-7 基于知识的智能模型
维护
软 件 工 程
1.5 软件开发方法、工具及环境
1.5.1 软件开发方法
软件开发方法是一种使用早已定义好的技术集及符号表示
组织软件生产过程的方法。工程实用的软件开发方法是达
到软件工程目标和克服软件危机的主要途径。
其中,具有代表性的有结构化方法(包括面向数据流的开
发方法、面向数据的开发方法等)、面向对象的开发方法、
形式化开发方法、维也纳开发方法(VDM,Vienna
Development Method)、适于实时事务处理系统的有限状
态机方法(FSMM,Finite State Machine Method)、适于
并发软件系统的Petri网方法等等。
软 件 工 程
1.5.2 软件开发工具与环境
软件开发的工具软件:支持软件项目的开发、管理、维
护活动的软件
例如,项目管理工具、需求分析工具、设计工具、编码
工具、测试工具、维护工具等等。
随着软件开发工具数量的不断增加,为了便于使用和管
理,就将各种工具简单地组合起来构成“工具箱”。
人们将工具按照统一的数据结构、标准的程序界面集成,
从而构成了完整的软件开发环境。
这种集成的软件开发环境能够有效地支持软件生存周期
所有阶段的活动,而且不仅支持技术工作,还支持各种
管理工作,从而可高效、高质量地进行软件开发与维护。
软 件 工 程
1.5.3 计算机辅助软件工程
在软件工程活动中,人们按照软件工程的原则和方法,
利用计算机及其集成的软件开发环境,辅助软件项目的
开发、维护及管理的过程,称为计算机辅助软件工程
(即CASE,Computer-Aided Software Engineering)。
CASE工具和环境的核心是软件工程信息库。这些工具和
环境应遵循统一的标准,在操作系统、网络和数据库的
支持下工作,以便使开发者们方便地相互通信并协同工
作。
软 件 工 程
CASE工具按功能可划分为九大类
 支撑类工具(如操作系统、数据库管理工具、质量保证工具
、软件配置管理工具、文档工具等);
 事务系统规划类(如事务系统规划工具);
 项目管理类(如项目计划工具、需求追踪工具、度量和管理
工具等);
 分析和设计类(如结构化分析/结构化设计即SA/SD工具、界
面设计工具、原型/模拟即PRO/SIM工具等);
 程序设计与编码类(如各种编辑器、调试器、编译器、四代
语言、面向对象语言工具等);
软 件 工 程
CASE工具按功能可划分为九大类
 原型建造类(如航空等某些领域的原型工具);
 测试类(测试数据获取工具、程序静态或动态测量工
具、测试管理工具等);
 维护类(如从程序到规格说明的逆向工程工具、代码
的重构和分析工具等);
 框架类(指支持数据库管理、配置管理和CASE工具
集成的工具等)。
 CASE工具和环境的进一步开发和使用,已经成为软
件工程的重要研究课题。
软 件 工 程
习题思考题
什么是软件工程?构成软件工程的要素是什么?
软件工程的7条原理都是什么?
软件工程的目标是什么?
软件工程的7条原则是什么?说明这些原则的作
用。
1.8 软件生存周期由哪几个过程组成?每个过程分别
包括哪几个阶段?
1.13 软件开发模型、软件开发方法、集成的CASE工
具与环境在软件工程中各有什么作用?
1.3
1.4
1.5
1.7
返回目录