软件的定义
软件是程序和所有使程序正确运行所需要的相关文档和配置信息。
Software = Program + Data + Document
一、软件危机:
软件开发和维护过程中遇到的一系列严重问题。
二、具体表现:
1、产品不符合用户的实际需要;
2、软件开发生产率不高,不能满足客观需要;
3、软件产品质量差;
4、对软件开发成本和进度的估计不准确;
5、可维护性差;
6、软件的文档资料不完整和不合格;
7、软件成本逐年上升。
三、产生原因:
1、宏观
(1)缺乏总体考虑,没有软件工程学概念或系统工程思想。——软件
(2)对业务了解支离破碎,需求分析不准。——软件
(3)企业依赖激情指挥,企业管理标准化、规范化、科学化程度不高,导致不能成功地应用“死板”的软件,它依赖于业务的“科学化”、“条理化”、“程序化” ——企业
(4)企业信息化程度和计算机应用水平低,导致无法准确描述需求。——企业
(5)一把手对信息管理的重视程度不够。——企业
(6)缺乏相互沟通,业务描述的详尽程度不能达到具备生活常识的人能够轻易理解。—— 企业、软件
2、微观
(1)软件的规模比较庞大,其开发和维护相当困难;
(2)开发人员虽然有经验,但还存在着不少错误观点,没有实行工程化的方法;
(3)不能与用户及时沟通,不能了解用户的实际需要;
(4)没有统一的软件质量管理规范;
(5)不能根据环境的变化而随时对产品进行改正。
软件工程学的范畴
• 软件开发方法
为软件开发提供了 “如何做” 的技术
个性化方法 --〉结构化方法 --〉面向对象方法 --〉软件复用
• 软件工具
为软件开发提供了自动的或半自动的软件支撑环境
单个工具 --〉工具箱、集成工具 --〉环境
• 软件工程管理
目的:为了按进度及预算完成软件计划
内容:成本估算、进度安排、人员组织、质量保证等
软件工程是一门交叉学科,软件工程的主要研究内容
软件开发技术:
- 软件开发方法学
- 软件开发过程
- 软件工具和软件工程环境
软件工程管理:
- 软件管理学
- 软件经济学
- 软件心理学
软件工程方法学:
把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。
传统软件工程和面向对象软件工程
软件工程的发展
三种编程范型
过程式编程范型
程序由一组被动数据和一组能动过程组成
程序=数据结构+算法
着眼于程序的过程和基本控制结构,粒度最小
面向对象编程范型
数据及其操作被封装在对象中
程序=对象+消息
着眼于程序中的对象,粒度比较大
基于构件技术的编程范型
构件是通用的、可复用的标准化对象类
程序=构件+架构
着眼于适合整个领域的类对象,粒度更大
传统方法学(生命周期方法学)
仍然是使用十分广泛的软件工程方法学。
采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。
从上而下,顺序地完成软件开发的各阶段任务。
面向对象的方法学
把对象作为融合了数据及在数据上的操作行为的统一软件构件;
把所有对象都划分成类;
按照父类与子类的关系,把若干个相关类组成一个层次结构的系统;
对象彼此间仅能通过发送消息互相联系。
面向对象的方法学的特点
出发点和基本原则是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识实践解决问题的方法与过程,从而使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。
三种编程范型对应的三代软件工程
传统软件工程
• 结构化分析 →结构化设计 → 面向过程的编码 → 软件测试
面向对象软件工程
• OO分析与对象抽取 → 对象详细设计 → 面向对象的编码 和测试
基于构件的软件工程
• 领域分析和测试计划定制 → 领域设计 → 建立可复用构件库 → 查找并集成构件
软件工程的应用
软件工程指导中小型软件
软件工程指导大型软件
软件工程的成就
解决软件开发中的部分问题(非本质)
软件生产率稳步增长
软件工程发展的展望
开发伴随软件复用,开发为了软件复用
软件就是服务
思考:
1.什么是软件危机?为什么会产生软件危机?
2. 什么是软件生产工程化?工程化生产方法与早期的程序设计方法主要差别在哪里?