吕云翔 软件工程理论与实践
一,概述
概念 软件是程序,数据,相关文档的集合 程序是可执行部分,数据和文档是不可执行部分
二,软件的特点
- 是无形的不可见地的逻辑实体
- 生产与硬件不同
- 不会磨损和老化,但会退化,存在缺陷
- 依赖硬件
- .以手工开发为主
- 成本高,风险高
- 涉及社会因素
分类
软件危机
软件危机就是指人们在开发软件和维护软件过程中所遇到的一系列的问题。
在软件开发的过程中,会经常出现一些
不能按时完成任务
、
产品质量得不到保证
、
工作效率低下和开发经
费严重超支
等现象。计算机软件的开发、维护和应用
过程中普遍出现的这一些严重的问题便是软件危机。
软件危机的表现与原因
- 忽视软件开发前期的调研和需求分析工作。
- 缺乏软件开发的经验和有关软件开发数据的积累,使得开发计划很难制定。
- 开发过程缺乏统一的、规范化的方法论指导。
- 忽视与用户、开发组成员间的及时有效的沟通。
- 文档资料不规范或不准确。导致开发者失去工作的基础,管理者失去管理的依据。
- 没有完善的质量保证体系。
- 忽略测试的重要性和不重视维护
软件危机给我们的最大启示,是使我们更加深刻的认识
到软件的特性以及软件产品开发的内在规律。
软件工程
1.概念 IEEE对软件工程的定义为:
• 1
)将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件
• 2
)对
1
)中所述方法的研究
–
具体说来,软件工程是以借鉴传统工程的原则、方法,以提高质量,降低成本为目的指导计算机软件开发和
维护的工程学科。它是一种层次化的技术。
2.软件工程研究的内容主要包括以下两个部分:
–
软件开发技术。
主要研究软件开发方法、软件开发过
程、软件开发工具和环境。
–
软件开发过程管理
。主要研究软件工程经济学和软件
管理学
3.软件工程要达到的六条基本目标包括:
- • 达到要求的软件功能
- • 取得较好的软件性能
- • 开发出高质量的软件
- • 付出较低的开发成本
- • 需要较低的维护费用
- • 能按时完成开发工作,及时交付使用
4.软件工程的七条基本原则
- • 用分阶段的生命周期计划进行严格的管理
- • 坚持进行阶段评审
- • 实行严格的产品控制
- • 采用现代程序设计技术
- • 软件工程结果应能清楚地审查
- • 开发小组的人员应该少而精
- • 承认不断改进软件工程实践的必要性
三要素:工具 方法 过程
工具: 软件工程的工具对软件工程中的过程和方法提供自动的或半自动的支持。可以帮助软件开发人员方便、简捷、高效地进行软件的分析、设 计、开发、测试、维护和管理等工作。有效地利用工具软件可以提高软 件开发的质量,减少成本,缩短工期,方便软件项目的管理。
软件工程工具通常有
3
种分类标准:
- 按照功能划分:可视化建模工具、程序开发工具、自动化测试工 具、文档编辑工具、配置管理工具、项目管理工具
- 按照支持的过程划分:设计工具、编程工具、维护工具
- 按照支持的范围划分:窄支持(工具)、较宽支持(工作台)和 一般支持工具(环境)
方法 软件开发方法是一种使用定义好的技术集及符号表示组织软件生产的过程, 它的目标是在规定的时间和成本内,开发出符合用户需求的高质量的软件。
常见的软件开发方法包括:
- 结构化方法
- 面向数据结构方法
- 面向对象方法
- 形式化方法
此外,软件开发方法还有问题分析法、可视化开发方法等
过程(开发框架)为了完成软件的框架和步骤
软件过程
软件的诞生和生命周期
是一个过程,我们总体上称这个过程为软件过程。
•
软件过程
是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的
活动
,每一项活动又可以分为一系列的工程
任务
2.1
软件过程概述
•
过程定义了运用方法的顺序,应该交付的文档资料,为保证软件质量和协调变化所需要采取的管理措施,以及标志
软件开发各个阶段任务完成的里程碑。
•
通常,使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分为哪些阶段及各个阶段的执行
顺序,因此也称为
过程模型
。
2.2
软件生命周期
• 2.2.1
软件生命周期的概念
–
软件产品的生命周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用以及
产品版本的不断更新,到最终该产品被市场淘汰的全过程。
–
软件生命周期这个概念从
时间
的角度将软件的开发和维护的复杂过程分解为了若干个阶段,每个阶段都完成特定的相对独立的任
务。
2.2.2
传统软件生命周期的各个阶段
–
在传统的软件工程中,软件产品的生命周期一般可以划分为
6
个阶段,如图所示。
2.3
软件过程模型
在软件工程中,人们通过建立
抽象
的软件开发模型,把软件生命周期中的各个活动或步骤安排到
一个框架
中,将软件开发的全过程清晰且
直观地表达出来。常见的软件开发模型有很多种,这里主要介绍
瀑布模型、快速原
型模型、增量模型、螺旋模型、喷泉模型、基于组件的开发
模型、统一软件开发过程模型以及敏捷模型与极限编程
2.3.1
瀑布模型
•
瀑布模型是一种
线性
的开发模型,具有
不可回溯
性。
•
开发人员必须等前一阶段的任务完成后,才能开始进行后一阶段的工作,并
且前一阶段的输出往往就是后一阶段的
输入。
•
传统的瀑布模型是
文档
驱动的。
•
由于其不可回溯性,如果在软件生命
周期的后期发现并要改正前期的错误,
那么需要付出很高的代价。
•
进行改进,提出
带反馈
的瀑布模型。
瀑布模型的优点是过程模型简单,执行容易;缺点是无法适应变更。
瀑布模型适应于具有以下特征的软件开发项目。
–
在软件开发的过程中,需求不发生或发生很少变化,并且开发人员
可以一次性获取到全部需求
。否则,由于瀑布模型较差的可回
溯性,在后续阶段中需求经常性的变更需要付出高昂的代价。
–
软件开发人员
具有丰富的经验
,对软件应用领域很熟悉。
–
软件项目的
风险较低
。瀑布模型不具有完善的风险控制机制
2.3.2
快速原型模型
一个部分开发的产品,是客户和开发人员能够对计划开发的系统进行相关方面的检查
2.3.2
快速原型模型
•
快速原型的
本质是“快速”。
•
开发人员应该尽可能的建造出原型系统,以加速软件开发过程,节约软件
开发成本。
•
原型系统内部结构并不重要,重要的是,必须迅速的构建原型然后
根据用
户意见不断地修改原型。
•
原型还有一个重要的
用途之一就是获取用户的需求。
快速原型模型适用于具有以下特征的软件开发项目。
1.
已有产品或产品的原型(样品),只需客户化的工程项目
2.
简单而熟悉的行业或领域
3.
有快速原型开发工具
4.
进行产品移植或升级
2.3.3
增量模型
增量模型是把待开发的软件系统模块化,
将每个模块作为一个增
量组件
,从而分批次地分析、设计、
编码和测试这些增量组件
运用
增量模型的软件开发过程是
递增式
的过程。相对于瀑布模型而言,采用增量
模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次
进行提交。
举例:
文字处理软件:创建文本、组织文本、格式化文本
第一个增量:创建文本
第二个增量:组织文本
第三个增量:格式化文本
增量
第一个发布:创建文本
第二个发布:创建文本、组织文本
第三个发布:创建文本、组织文本、格式化文本
增量模型的最大特点就是将待开发的软件系统
模块化
和
组件化
。基
于这个特点,增量模型具有以下
优点
:
–
将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。
–
以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。
–
开发顺序灵活。开发人员可以对构件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。
增量模型的
缺点
是要求待开发的软件系统可以被模块化。如果待开
发的软件系统很难被模块化,那么将会给增量开发带来很多麻烦。
增量模型适用于具有以下特征的软件开发项目:
–
软件产品可以分批次地进行交付
–
待开发的软件系统能够被模块化
–
软件开发人员对应用领域不熟悉,难以一次性地进行系统开发
–
项目管理人员把握全局的水平较高
2.3.4
螺旋模型
–
螺旋模型是一种用于
风险较大
的大型软件项目开发的过程模型。该模型将
瀑布模型
与
快速原型模型
结合起
来,并且
加入
了这两种模型忽略了的
风险分析
。
–
它把开发过程分为制定计划、风险分析、实施工程和客户评估
4
种活动。
–
螺旋模型适应于
风险较大
的
大型软件项目
的开发。它的优点是将风险分析扩展到各个阶段中,大幅度降低
了软件开发的风险。
–
但是这种模型的控制和管理较为复杂,可操作性不强,对项目管理人员的要求较高
–
螺旋模型适用于:
–
支持
需求不明确
、特别是
大型软件系统
的开发,
–
支持面向过程、面向对象等多种软件开发方法,
–
是一种具有广阔前景的模型。
• 2.3.5
喷泉模型
喷泉模型是一种过程模型,体现了面向对象软件开发过程不同阶段的
相互重叠,这明确表示两个活动之间
没有明显界限,存在
交迭
。
面向对象的方法中,分析模型和设计模型采用相同的符号标
示体系,各阶段之间没有明显的
界限,而且常常重复、迭代地进
行。
喷泉模型主要适用于
面向对象
的软件项目的开发。