- 软件体系结构
- 林荣恒 吴步丹 金芝
- 2612字
- 2025-02-22 09:45:44
1.6 软件体系结构的发展历程
软件体系结构的兴起最早可以追溯到20世纪60年代。随着20世纪60年代软件危机程度的日益加剧,使得人们开始认识到软件体系结构的重要性,尤其对于大规模复杂软件系统,软件体系结构的设计成为提高软件生产效率的有效途径。软件工程先驱Edsger Dijkstra在1968年首次提出“体系结构”概念,认为软件应注意分解和结构化,并提出层次结构的概念:一层中的程序只能与相邻层程序通讯。1969软件工程巨匠Fred Brooks年认为体系结构是:“用户接口完整详细的说明,对于计算机,是程序设计手册;对于编译器,是语言手册;对于整个系统,是用户完成整个工作所用到的所有手册”。
20世纪70年代软件体系结构概念进一步明确,并且出现了体系结构描述语言。1972年David Parnas提出了信息隐藏模块的概念,于1974年提出了软件结构的概念,于1975年提出了程序家族概念:将一些程序划分成一组,即一个程序家族。1976年F.Deremer和H.Kron设计了模块互连语言(Module Interconnection Language,MIL)用于描述结构化的基于模块的程序。1978年Tony Hoare提出CSP语言(Communicating Sequential Processes)描述并发系统各部分交互,CSP是并发数学理论,比如进程代数、进程演算等知名理论的家族的一员。1983年Butler Lampson在“Hints for Computer System Desigin”一文中总结了许多有关计算机系统设计的一些通用的注意事项。
进入20世纪90年代,软件体系结构进入迅速发展阶段,体系结构方法和语言研究大量涌现。1991年Winston W.Royce与Walker Royce首次把软件体系结构定位在技术和实现之间。1991年Philippe Kruchten在文章《An Iterative Software Development Process Centerer on Architecture》中把迭代开发与体系结构相结合并定义了使用大型命令与控制系统的多种观点。1992年D.E.Perry和A.L.Wolf在ACM SIGSOFT Software Engineering Notes表“Foundations for the Study of Software Architecture”,建立了软件结构的根基,并提出一种软件工程的模型,该模型由三部分组成:elements,forms,rationle。
20世纪90年代中期卡耐基梅隆大学在软件体系结构方法上做了很多工作。1995年卡耐基梅隆大学软件工程研究所提出SAAM(Scenarios-based Architecture Analysis Method)方法,是一种非功能质量属性的体系结构分析方法,用于评估体系结构对于特定系统需求的使用能力,也能用来比较不同的体系结构。同年,卡耐基梅隆大学的Robert J. Allen开发出Wright体系结构描述语言,该语言从组件,连接器,角色和端口等概念入手界定了一种软件架构;其主要特点是将CSP用于软件体系结构的描述,从而完成对体系结构描述的某些形式化推理(包括相容性检查和死锁检查等)。但它仅仅是一个设计规约语言,只能用于描述,无法支持系统生成。同年,David Garlan和Mary Shaw认为软件构架是设计过程的一个层次,应处理算法和数据结构之上关于整体系统结构设计和描述方面的一些问题,加大体组织结构和全局控制结构。卡耐基梅隆大学的David Garlan同年提出ACME语言,旨在各种ADL语言之间的转换:支持ADL之间的映射及工具集成的体系结构互交换语言。其目标是作为体系结构设计的一个共同的互交换格式,以便将现有的各种ADL在这个框架下统一起来;而它本身也可以看作是一种ADL。1995年,由伦敦帝国学院开发Darwin描述语言,这是一种面向对象或者面向组件的语言,Darwin语言开发的程序的一般形式是一颗树,树的根节点和中间节点是复杂组件,叶子节点是封装行为的原始组件。同年,由斯坦福大学的David Luckham开发出Rapide语言:一种事件驱动的ADL,它以体系结构定义作为开发框架,支持基于构件的开发。该语言提供了建模、分析、仿真和代码生成的能力,但是没有将连接子显式地表示为一阶实体。
1996年Rational软件公司创造的软件工程方法RUP,是一个面向对象且基于网络的程序开发方法论,描述了如何有效地利用商业的可靠的方法开发和部署软件,是一种重量级过程,因此特别适用于大型软件团队开发大型项目。它有三大特点:(1)软件开发是一个迭代过程;(2)软件开发是由Use Case驱动的;(3)软件开发是以架构设计(Architectural Design)为中心的。1996年,加利福尼亚大学欧文分校UCI开发语言C2,一种基于消息传递的体系结构描述语言,主要是应用于带有图形用户接口(GUI)的应用系统。C2风格的核心在于构件之间的“有限可见性”,即处于系统中某个层次的构件只能“看到”上层的构件,而不清楚下层到底是什么构件在与之进行通信。
1997年,OMG组织(Object Management Group,对象管理组织)发布了统一建模语言(Unified Modeling Language,UML)。UML的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。UML提出了一套IT专业人员期待多年的统一的标准建模符号。UML的主要创始人是Jim Rumbaugh、Ivar Jacobson和Grady Booch.其中,Grady Booch提出了面向对象软件工程的概念;James Rumbaugh提出了面向对象的建模技术并引入各种独立于语言的表示符;Jacobson于1994年提出了OOSE方法,其最大特点是面向用例(Use-Case),并在用例的描述中引入了外部角色的概念。UML随后不断演化产生了UML1.2、1.3和1.4版本,其中UML1.3是较为重要的修订版本。并于2003年推出UML2.0。
20世纪90年代后期之后,软件体系结构进入高级发展阶段,重视体系结构在软件开发实践中的风格、质量属性。1998年卡内基梅隆大学提出了ATAM(architecture tradeoff analysis method),该方法旨在为软件系统通过探索权衡取舍与灵敏点,选择一个合适的体系结构。该方法优点:促进精确质量要求的收集,在早期开始创建架构文档,促进在生命周期的早期风险识别等。
1999年,一种软件产品线工程方法-BAPO出现,即Business/Architecture/Process/Organisation,该方法覆盖了软件工程的四个评估维度(商业、架构、流程和组织),其中对架构维度从三个方面考虑:重用资产,参考架构,可变性管理。
2000年MCC(Micro-electronics and Computer technology Consortium)开发了ADML(The Architecture Description Markup Language),这是一种基于ACME的语言,ADML主要应用在企业体系结构一层;ADML是一个标记符号,提供体系结构描述文本符号。同年,飞利浦研究实验室为软件密集型的电子产品族开发了面向构件的平台架构COPA(Component-Oriented Platform Architecting)方法。COPA方法的目标就是在业务,架构,过程和组织中达到最佳的适应性。COPA采用多视角架构面向顾客,供应商,商务经理和工程师。
2003年,ADD方法(Attribute Driven Design)把一组质量属性场景作为输入,利用对质量属性实现与体系结构设计之间的关系的了解(如体系结构风格、质量战术等),对体系结构进行设计。ADD是一种定义软件体系结构的方法,该方法将模块分解过程建立在软件必须满足的质量属性之上。它是一个递归的分解过程,其中在每个阶段都选择体系结构模式和战术来满足一组质量属性场景,然后对功能进行分配,以实例化由该模式所提供的模块类型。
纵观软件体系结构的发展历程,从最初的“无结构”设计到现行的基于体系结构的软件开发,经历了研究兴起、概念明确、迅速发展、高级发展四个阶段。软件体系结构发展到现在,还有很长的路要走,软件本身也在发生变化。从为大型机设计程序,到为移动终端设计APP应用,从为PC机安装软件,到云计算的软件及服务,从固定的程序代码,到柔性适变的软件应用,新的软件形态给软件体系结构发展提出了许多新的尚未解决的问题。