本章开始介绍第二节内容,主要是一些历史性的东西~
一.软件工程的发展脉络
1.基础环境因素的变化及其对软件工程的推动
抽象软件实体和虚拟计算机都是软件工程的基础环境因素,它们能从根本上影响软件工程的生产能力,而且是软件工程无法反向影响而只能适应的外界因素;不论是硬件水平的提升,还是系统软件的发展,都会要求软件工程方法和技术做出相应的调整~
2.现实问题的变化及其对软件工程的要求
软件工程的目标是解决现实问题,软件工程的进步能让问题解决的过程更顺利;反之,现实问题的变化也会给软件工程提出新的要求~
3.软件工程自身的发展
不论是实践经验的积累,还是研究上的进展,软件工程自身都会不断发展,既包括软件开发与技术上的发展,也包括软件开发过程中的发展,还包括一些影响深远的重要观念的形成。
二.20世纪50年代的软件工程
1.基础环境:
虚拟计算机:研究用大型机(出于军事和科研考虑)
主要的抽象软件实体:软件依赖于硬件,被视为硬件的零件
2.主要现实问题:科学计算
3.软件开发方法与技术:(没有普遍使用的开发技术)
4.软件开发过程:此时的理论是“制造软件和硬件是一样的”
5.重要思想:重视产品质量,进行评审和测试
6.总结:科学计算、机器为中心编程、软硬件生产方式相同
三.20世纪60年代的软件工程
1.基础环境
- 虚拟计算机:商业大型机
- 主要的抽象软件实体:第三代语言被广泛利用,促进了软件工程的问题从科学计算向业务应用转化
2.主要现实问题:商务应用
3.软件开发方法与技术:依靠程序员个人能力,是“工艺式”的开发
4.软件开发过程:“构建-修复”的过程(个人英雄主义编程)
5.重要思想:
软件不同于硬件:软件比硬件易于修改、软件没有损耗、软件不可见、软件于现实世界关系更密切
避免工艺式生产,采用工程式
(需要注意,这一阶段工艺式生产导致了“软件危机”的出现,主要现象为成本超支、质量不可靠等)
6.总结:业务应用、软硬件不同、工艺式开发
四.20世纪70年代的软件工程
1.基础环境
- 虚拟计算机:商业微型计算机
- 主要的抽象软件实体:结构化程序设计理论诞生,以高效率地开发正确、清晰和高质量的程序。结构化程序设计理论使用函数(也就是常说的面向过程)、块结构、和三种基本控制结构作为基础构建程序~
2.主要现实问题
随着商业微型计算机的销售量增加,软件产品的需求也在与日俱增,保证复杂软件系统开发的成功成为开发工作的主要指导思想~
3.软件开发方法与技术
前期采用逐步精化,自顶向下的软件开发方法,中后期采用结构化设计和结构化分析等结构化分析与设计方法。在这一年代,逐步产生了“低耦合高内聚”的模块化、抽象数据类型、信息隐藏等重要思想~
4.软件开发过程:采用瀑布模型,在开发过程中越早发现缺陷并进行修复,提高了开发效率,提高了项目成功率
5.重要思想:越早发现和修复问题,代价越低~
6.总结:结构化方法、瀑布模型、强调规则和纪律。奠定了软件工程的基础,是后续年代软件工程发展的支撑~
五.20世纪80年代的软件工程
1.基础环境
- 虚拟计算机:个人计算机PC开始出现,并迅速普及大众人群;与此同时GUI技术出现,典范是Apple和微软~
- 主要的抽象软件实体:面向对象编程方法开始被广泛使用
2.主要现实问题
业务应用仍是这一阶段软件工程面临的主要问题,同时软件开始服务消费大众的工作和生活
人们对软件产品的需求出现爆炸性增长,提高生产力成为他们的主要目标之一
此外,随着软件开发成本越来越高,人们更愿意通过维护延长一个软件产品的生存周期而不是将其废弃或重新开发~
3.软件开发方法与技术
结构化方法:该阶段的结构化方法更注重系统构建而㐊程序构建
面向对象编程:结构和关系能够为领域应用提供更加自然的支持,使得软件的复用性和可修改性更加强大~
软件复用:提高生产力的重要方法
4.软件开发过程
过程模型:软件过程的质量能够极大影响软件的质量,要保证产品质量就必须重视开发过程
过程评价:参照评估模型进行评估
使用工具支持的软件开发过程:对后续的软件工程发展尤其是过程管理的发展起到了重要的作用~
5.重要思想
没有银弹:软件该问题的银弹应该是能欧使得软件开发在生产率、可靠性和间接性上取得根本性提高的技术,由于软件有下列无法规避的内在特性,因此没有银弹:
- 复杂度
- 一致性
- 可变性
- 不可变性
重视人的作用:将个人与团队工作置于比开发过程更加重要的地位~
6.总结:追求生产力最大化、现代结构化方法/面向对象编程广泛应用、重视过程的作用
六.20世纪90年代的软件工程
1.基础环境
- 虚拟计算机:阿帕网、因特网、万维网快速发展,网络操作系统成为主流
- 主要的抽象软件实体:软件体系结构方法的出现、面向对象分析设计与方法逐渐成熟~
2.主要现实问题
- 复杂度:探索新的开发技术
- 可修改性:维护与修改来延续生存周期
- 开发周期:防止用户等待时间过长
- 用户价值:赢得市场非常关键
3.软件开发方法与技术
- 面向对象方法
- 软件体系结构
- 人机交互
- 需求工程
- 基于软件复用的大规模软件系统开发技术
- web开发技术
4.软件开发过程
- 过程模型
- 过程改进
- 开源软件
5.重要思想:重视最佳实践方法
6.总结:web应用出现、追求快速开发、可变更新和用户价值
七.21世纪00年代的软件工程
1.基础环境
- 虚拟计算机:嵌入式设备和移动终端与日增长
- 主要的抽象软件实体:面向对象的思想做了一些更严谨的规格化
2.主要现实问题
- 基于因特网的web应用日益成为主流
- 面向消费大众的软件产品需求出现了爆炸性增长
3.软件开发方法与技术
- 延续90年代的基础进展,并进一步完善
- web技术发展
- 领域特定的软件工程方法
4.软件开发过程
敏捷过程
5.总结:大规模web应用,大量面向大众的web产品,追求快速开发、可变更新、用户价值和创新