软件体系结构概念
软件体系结构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件体系结构包括软件组件、组件之间的关系,组件特性以及组件间关系的特性。软件体系结构可以和建筑物的架构相比拟。软件体系结构是构建计算机软件,开发系统以及计划进行的基础,可以列出开发团队需要完成的任务。
软件体系结构是在软件的基础架构上进行决策,决定后再做修改的代价很大。软件体系结构中的决策包括在软件设计时的一些特殊结构性选项,例如要控制太空船登陆艇的系统需要快速而且可靠,因此需要选择适合实时计算的语言,而且为了满足可靠度的需求,程序需要有数个冗余的复本,各复本运作在不同的硬件上,以便比对各程序的结果。
将软件体系结构文档化有助于和项目关系人之间的沟通,在高层设计时就可以提早进行决策,也可以在各项目之间复用设计组件
软件体系结构的发展历史
软件系统的规模在迅速增大的同时,软件开发方法也经历了一系列的变革。在此过程中,软件体系结构也由最初模糊的概念发展到一个渐趋成熟的技术。
20 世纪 70 年代以前,尤其是在以 ALGOL 68 为代表的高级语言出现以前,软件开发基本上都是汇编程序设计。此阶段系统规模较小,很少明确考虑系统结构,一般不存在系统建模工作。70 年代中后期,由于结构化开发方法的出现与广泛应用,软件开发中出现了概要设计与详细设计,而且主要任务是数据流设计与控制流设计。因此,此时软件结构已作为一个明确的概念出现在系统的开发中。
20 世纪 80 年代初到 90 年代中期,是面向对象开发方法兴起与成熟阶段。由于对象是数据与基于数据之上操作的封装,因而在面向对象开发方法下,数据流设计与控制流设计则统一为对象建模,同时,面向对象方法还提出了一些其他的结构视图。如在 OMT 方法中提出了功能视图、对象视图与动态视图(包括状态图和事件追踪图);而 BOOCH 方法中则提出了类视图、对象视图、状态迁移图、交互作用图、模块图、进程图;而 1997 年出现的统一建模语言 UML 则从功能模型(用例视图)、静态模型(包括类图、对象图、构件图、包图)、动态模型(协作图、顺序图、状态图和活动图)、配置模型(配置图)描述应用系统的结构。
90 年代以后则是基于构件的软件开发阶段,该阶段以过程为中心,强调软件开发采用构件化技术和体系结构技术,要求开发出的软件具备很强的自适应性、互操作性、可扩展性和可重用性。此阶段中,软件体系结构已经作为一个明确的文档和中间产品存在于软件开发过程中,同时,软件体系结构作为一门学科逐渐得到人们的重视,并成为软件工程领域的研究热点,因而 Perry和 Wolf 认为,“未来的年代将是研究软件体系结构的时代!”。
纵观软件体系结构技术发展过程,从最初的“无结构”设计到现行的基于体系结构软件开发,可以认为经历了 4 个阶段:(1) “无体系结构”设计阶段:以汇编语言进行小规模应用程序开发为特征;(2) 萌芽阶段:出现了程序结构设计主题,以控制流图和数据流图构成软件结构为特征;(3) 初期阶段:出现了从不同侧面描述系统的结构模型,以 UML 为典型代表;(4) 高级阶段:以描述系统的高层抽象结构为中心,不关心具体的建模细节,划分了体系结构模型与传统的软件结构的界限,该阶段以Kruchten 提出的“4+1”模型为标志。由于概念尚不统一、描述规范也不能达成一致认识、在软件开发实践中软件体系结构尚不能发挥重要作用,因此,软件体系结构技术达到成熟还需一段时日。
软件体系结构的意义
自 NATO 于 1968 年提出软件工程概念以来,软件工程界已经提出了一系列的理论、方法、语言和工具,解决了软件开发过程中的若干问题。但是,软件固有的复杂性、易变性和不可见性,使得软件开发周期长、代价高和质量低的问题依然存在。大量实践统计表明:大系统软件开发中 70%的错误是由需求和软件设计阶段引入的;而且错误在系统中存在的时间愈长则愈难发现,解决这些错误的代价也愈高。
为了提高软件需求和软件设计的质量,软件工程界提出了需求分析工程技术和各种软件建模技术。但是在需求与设计之间仍存在一条很难逾越的鸿沟,即缺乏能够反映做决策的中间过程,从而很难有效地将需求转换为相应的设计。为此,软件体系结构概念应运而生,并试图在软件需求与软件设计之间架起一座桥梁,着重解决软件系统的结构和需求向实现平坦地过渡的问题。
从机器语言、汇编语言、过程式程序设计语言、面向对象程序设计语言、形式化(半形式化)规格说明语言(如体系结构描述语言)发展过程中,可以发现:计算机语言越来越适合于开发人员的思维活动模型,代码复用的级别也在不断地提升。体系结构技术的研究,使软件复用从代码复用发展到设计复用和过程复用。
鉴于软件体系结构的重要性,D.E.Perry 将软件体系结构视为软件开发中第 1 类重要的设计对象,而 Barry Boehm 明确指出:“在没有设计出体系结构及其规则时,那么整个项目不能继续下去,而且体系结构应该看做是软件开发中可交付的中间产品”。由此可见,体系结构在软件开发中为不同的人员提供了共同交流的语言,体现并尝试了系统早期的设计决策,并作为系统设计的抽象,为实现框架和构件的共享与复用、基于体系结构的软件开发提供了有力的支持。

