架构设计的历史背景
第一次软件危机与结构化程序设计(20 世纪 60 年代~20 世纪 70 年代)
第一次软件危机的根源在于软件的“逻辑”变得非常复杂
- 原因
高级语言的出现,解放了程序员。随着软件的规模和复杂度的大大增加,20 世纪 60 年代中期开始爆发了第一次软件危机,典型表现有软件质量低下、项目无法如期完成、项目严重超支等,因为软件而导致的重大事故时有发生。
例如,1963 年美国的水手一号火箭发射失败事故,就是因为一行 FORTRAN 代码错误导致的。
最典型的例子IBM 的 System/360 的操作系统开发,佛瑞德·布鲁克斯(Frederick P. Brooks, Jr.)作为项目主管,率领 2000 多个程序员夜以继日地工作,共计花费了 5000 人一年的工作量,写出将近 100 万行的源码,总共投入 5 亿美元,尽管投入如此巨大,但项目进度却一再延迟,软件质量也得不到保障。布鲁克斯后来基于这个项目经验而总结的《人月神话》一书,成了畅销的软件工程书籍。
- 解决方案
“结构化程序设计”作为另外一种解决软件危机的方案被提了出来。由此产生了结构化程序设计方法
结构化程序设计的主要特点是抛弃 goto 语句,采取“自顶向下、逐步细化、模块化”的指导思想。将软件的复杂度控制在一定范围内,从而从整体上降低了软件开发的复杂度。
第二次软件危机与面向对象(20 世纪 80 年代)
第二次软件危机的根本原因在于软件生产力远远跟不上硬件和业务的发展。
-
原因
随着硬件的快速发展,业务需求越来越复杂,以及编程应用领域越来越广泛,第二次软件危机很快就到来了。 -
解决方案
结构化程序设计虽然能够解决(也许用“缓解”更合适)软件逻辑的复杂性,但是对于业务变化带来的软件扩展却无能为力,在这种背景下,面向对象的思想开始流行起来。
面向对象真正开始流行是在 20 世纪 80 年代,主要得益于 C++ 的功劳,后来的 Java、C# 把面向对象推向了新的高峰。到现在为止,面向对象已经成为了主流的开发思想。
和软件工程一样,面向对象也不是银弹,而只是一种新的软件方法而已。
软件架构的历史背景
早在 20 世纪 60 年代,戴克斯特拉这位上古大神就已经涉及软件架构这个概念了,但软件架构真正流行却是从 20 世纪 90 年代开始的,
随着软件系统规模的增加,计算相关的算法和数据结构不再构成主要的设计问题;当系统由许多部分组成时,整个系统的组织,也就是所说的“软件架构”,导致了一系列新的设计问题。
只有大公司开发的软件系统才具备较大规模,而只有规模较大的软件系统才会面临软件架构相关的问题,例如:
- 系统规模庞大,内部耦合严重,开发效率低;
- 系统耦合严重,牵一发动全身,后续修改和扩展困难;
- 系统逻辑复杂,容易出问题,出问题后很难排查和修复。
20 世纪 60 年代第一次软件危机引出了“结构化编程”,创造了“模块”概念;
20 世纪 80 年代第二次软件危机引出了“面向对象编程”,创造了“对象”概念;
到了 20 世纪 90 年代“软件架构”开始流行,创造了“组件”概念。
“模块”“对象”“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。