20世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也没有,很少使用系统化的开发方法,设计软件往往等同于编制程序,基本上是自给自足的私人化的软件生产方式。
20世纪60年代中期,大容量、高速度计算机的出现,使得计算机的应用范围迅速扩大,软件开发急剧增长。高级语言逐渐流行,操作系统开始发展,第一代数据库管理系统诞生,软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。既有自给自足软件生产方式不能满足要求,迫切需要改变,于是软件危机爆发,即落后的软件生产方式无法满足迅速增长的计算机软件需求,导致软件的开发与维护出现一系列严重的问题:
(1)软件开发费用和进度失控。
(2)软件的可靠性差。
(3)生产出来的软件难以维护。
1968年,北大西洋公约组织的计算机科学家在联邦德国召开国际会议,第一次讨论软件危机问题,并正式提出“软件工程”一词,从此一门新兴的工程学科应运而生。
软件工程发展至今,催生出了许多优秀的编程语言和编程思想,诸如汇编语言、过程化语言、面向对象和模块化思想、服务化和组件化等表达业务逻辑的过程。
(1)汇编语言表达业务逻辑。
软件发展之初,为了基于计算机构建应用,发明了汇编语言,该语言的特性是基于CPU指令集进行编程。为了编写出有效的软件,需要理解大量计算机底层的特性。这个时期的软件开发难度大,成本高。(www.xing528.com)
(2)过程性语言表达业务逻辑。
从汇编语言到C语言,出现了更高级别的抽象思维,当时抽象出了三种可以涵盖所有逻辑结构的范式:顺序结构、选择结构和循环结构。同时出现了面向过程化的编程思想。这就促成了软件开发效率的提高,但这种方式仍然不好控制软件的复杂度,不利于大型软件的开发。
(3)面向对象和模块化思想表达业务逻辑。
为了更清晰地构建软件,找到了一种更利于人类认知世界的编程方法——面向对象思维。通过构造出的一个个具有类型结构的对象协同工作,使得软件得以运行。这一时期也催生出许多程序框架和工具用以简化软件生命周期的各个流程,如Spring框架、Maven构建工具、Git版本控制工具等。可是这一时期的软件不具备弹性伸缩的能力,只能依靠升级硬件的配置来扩展服务能力。
(4)服务化和组件化表达业务逻辑。
服务化和组件化是目前主流的构建软件的方式,利用分布式的思想通过服务化和组件化,能够大大地提高软件的服务能力及复用性。随着容器化和编排技术的出现,更加促进了服务化和组件化软件的模式,也降低了构建大型应用软件的成本。
软件开发模式几经演化,从最初面向机器语言的开发模式到面向过程的开发模式,软件开发通过独立于机器的程序语言而不再依赖于不同平台的机器语言,实现了代码的重用;随后面向对象开发模式的出现使人们可以通过以更接近现实的对象来表述完整的事物,即进行对象的重用;此后随着软件开发规模的扩大,在涉及分布式、异构等复杂特征的环境中,出现了面向组件模式,软件开发的重用也上升到组件的级别;进入21世纪,当软件的开发面对更加复杂的环境和更加灵活多变的需求时,人们开始将应用程序以服务的形式公布出来供别人使用,而完全不需要去考虑这些业务服务运行在哪一个架构体系上,这就是面向服务的体系结构。相对于传统的代码重用,对象重用和组件重用,面向服务体系结构更加着重于业务级的应用,即服务的重用。软件开发最理想的过程就是开发者利用已测试和已实验的成熟稳定的可用组件来组装系统。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。