软件和软件危机
· 软件的概念
· 什么是软件
软件 = 程序 + 数据 + 文档
- 软件:计算机系统中与硬件相互依存的另一部分,它包括程序、数据及其相关文档 的完整集合
- 程序:按实现设计的功能和性能要求执行的指令序列
- 数据:是程序能正常操纵信息的数据结构
- 文档:与程序开发、维护和使用有关的图文材料
· 软件的特点(与硬件的不同)
1、软件开发不同于硬件设计
- 更依赖开发人员自身素质等社会因素
- 开发成本占比重、难预估
2、软件开发不同于硬件制造
- 没有明显的制造过程,制造就是简单的复制
3、软件维护不同于硬件维修
- 运行时不会出现机械磨损、老化等问题
- 运行初期会有较高的故障率,维护过程中容易产生新错误
· 软件危机
· 什么是软件危机
- 对软件的需求日益增长;数量不断膨胀的已有软件的维护
· 软件危机的主要表现
- 软件开发成本和进度估计不准
- 用户对已交付软件不满意
- 软件产品质量靠不住
- 软件可维护性差
- 软件没有适当文档资料
- 软件成本在计算机系统总成本中所占的比例逐年上升
- 软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势
· 产生软件危机的原因
- 软件维护费用急剧上身,直接威胁计算机应用的扩大
- 软件生产技术进步缓慢,是家具软件危机的
重要原因
· 消除软件危机的途径
1、方法
- 1968年提出的软件工程概念和思想
- 20世纪70年代-结构化软件开发
- 20世纪80年代-面向对象软件开发
2、技术
- 软件重用
- 快速原型
- 需求工程
3、支撑工具
- Jbuilder
- Visual Studio
- ……
软件工程学的范畴
·软件工程
· 软件工程定义
- NATO定义:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”
1993年IEEE定义:软件工程是开发、运行、维护和修复软件的系统方法
- Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料
- Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法.
· 软件工程方法学
· 概念
- 软件工程学包括软件开发技术和软件工程管理
软件开发技术 | 软件工程管理 |
---|---|
软件方法 | 软件管理学 |
软件工具 | 软件经济学 |
软件工程环境 | 软件产权保护 |
· 软件工程三要素
软件工程三要素:方法、工具和过程
- 方法:完成软件开发的各项任务的技术方法
- 工具:为运用方法而提供的自动的或半自动的软件工程支撑环境
- 过程:为了获得高质量的软件所需要完成的一系列任务的框架
软件工程的发展和应用
· 三种编程范型
· 过程式编程范型(程序 = 数据结构 + 算法
)
- 程序由一组被动数据和一组能动过程组成
- 着眼于程序的过程和基本控制结构,粒度最小
· 面向对象编程范型(程序 = 对象 + 消息
)
- 数据及其操作被封装在对象中
- 着眼于程序中的对象,粒度比较大
· 基于构件技术的编程范型(程序 = 构件 + 架构
)
- 构件是通用的、可复用的标准化对象类
- 着眼于适合整个领域的类对象,粒度更大
· 三代软件工程
· 传统软件工程
- 结构化分析 →结构化设计 → 面向过程的编码 → 软件测试
· 面向对象软件工程
- OO分析与对象抽取 → 对象详细设计 → 面向对象的编码和测试
· 基于构件的软件工程
- 领域分析和测试计划定制 → 领域设计 → 建立可复用构件库→ 查找并集成构件
· 软件工程的应用
· 软件工程指导中小型软件
· 软件工程指导大型软件
· 软件工程的成就
- 解决软件开发中的部分问题(非本质)
- 软件生产率稳步增长
· 软件工程发展的展望
- 开发伴随软件复用,开发为了软件复用
- 软件就是服务
课后复习题
1、什么是软件危机,为什么会产生软件危机?
- 软件危机就是对软件的需求日益增长;对数量不断膨胀的已有软件的维护
- 产生软件危机的原因是是软件维护费用急剧上升、软件生产技术进步缓慢
2、我们从哪些方面,做了哪些工作去缓解软件危机?
- 技术措施:软件开发技术与方法、软件工具
组织管理:工程项目管理方法
3、面向对象与软件工程的差别和联系?
-
过程不同
传统软件过程:软件分析→总体设计→详细设计→面向过程编码→测试
面向对象软件工程的过程:软件分析与对象提取→对象详细设计→面向对象编码→测试 -
面对不同
传统的软件工程是面向过程的,即结构化编程方法;
面向对象的软件工程是面向对象的,面对问题域中问题的客观存在; -
开发效率不同
4、工程化方法对软件开发管理的启示与意义?
5、什么是软件生产工程化?工程化生产方法与早期的程序设计方法主要差别在哪里?
6、分别说明软件开发与开发工具、软件技术与软件管理的关系。
7、试根据你的亲身实践,谈谈软件工具在软件开发中的作用
8、什么是软件工程环境?谈谈你对环境重要性的认识。
9、何谓面向对象软件工程?简述它与传统软件工程的差别和联系。
10、软件按规模可分成哪几类?简述软件工程在各种规模的软件开发中的作用。
11、什么是形式化软件开发方法?实现这类开发的困难和出路在哪里?