系统架构设计师教程 第7章 7.1 软件架构概念 笔记
7.1 软件架构概念 ★★★☆☆
Software Architecture (简称SA)
7.1.1 软件架构的定义
一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。
两个层次——数据设计和体系结构设计。
数据设计体现传统系统中体系结构的数据构件和面向对象系统中类的定义(封装了属性和操 作),
体系结构设计则主要关注软件构件的结构、属性和交互作用。
建立体系结构层“内聚的、良好设计的表示”所需的方法,其目标是提供一种导出体系结构设计的系统化方法,而体系结构设计是构建软件的初始蓝图。
7.1.2 软件架构设计与生命周期 ★★★☆☆
1.需求分析阶段
可转换性:一般使用词法分析和经验规则来完成UseCase图向SA模型的转换
可追踪性:通过表格或Use Case Map来维护
2.设计阶段
主要包括:SA 模型的描述、 SA模型的设计与分析方法,以及对 SA 设计经验的总结与复用等。
3个层次。
(1)SA 的基本概念,即SA模型的元素组成,以及元素之间的组织原则。现阶段的SA描述方法是构件和连接子(构件间的互联机制)的建模。近年来,也有学者认为应当把Aspect等引入SA模型。
(2)体系结构描述语言 (Architecture Description Language,ADL), 支持构件、连接子及其 配置的描述语言就是如今所说的体系结构描述语言。ADL对连接子的重视成为区分ADL和其他建模语言的重要特征之一。典型的ADL包括UniCon、Rapide、Darwin、Wright、C2SADL、Acme、xADL、XYZ/ADL和ABC/ADL等。
(3)SA模型的多视图表示,从不同的视角描述特定系统的体系结构,从而得到多个视图, 并将这些视图组织起来以描述整体的 SA模型。系统的每一个不同侧面的视图反映了一组系统相关人员所关注的系统的某一特定方面,多视图体现了关注点分离的思想。典型的包括4+1模型(逻辑视图、进程视图、开发视图、物理视图, 加上统一的场景)、Hofmesiter的4视图模型(概念视图、模块视图、执行视图和代码视图)、 CMU-SEI的ViewsandBeyond模型(模块视图、构件和连接子视图、分配视图)等。
3.实现阶段
具体表现:
(1)研究基于SA 的开发过程支持,如项目组织结构、配置管理等。
(2)寻求从 SA 向实现过渡的途径,如将程序设计语言元素引入SA阶段、模型映射、构件组装、复用中间件平台等。
(3)研究基于 SA 的测试技术。
SA提供了待生成系统的蓝图,根据该蓝图较好地实现系统需要的开发组织结构和过程管理技术。通过在S A描述中引入版本、可选择项 (Options) 等信息,可以分析和记录不同版本构件和连接子之间的演化,从而可用来组织配置管理的相关活动。典型的例子包括支持给构件指定多种实现的 UniCon、 支持给构件和连接子定义版本信息 和可选信息的xADL等。
为了填补高层 SA模型和底层实现之间的鸿沟,可通过封装底层的实现细节、模型转换、 精化等手段缩小概念之间的差距。典型的方法如下。
(1)在 SA 模型中引入实现阶段的概念,如引入程序设计语言元素等。
(2)通过模型转换技术,将高层的SA模型逐步精化成能够支持实现的模型。
(3)封装底层的实现细节,使之成为较大粒度构件,在SA指导下通过构件组装的方式实现系统,这需要底层中间件平台的支持。
4.构件组装阶段
两个方面:
1.对设计阶段连接子的支持
(1)不少 ADL支持在实现阶段将连接子转换为具体的程序代码或系统实现
(2)中间件遵循特定的构件标准,为构件互联提供支持,并提供相应的公共服务,如安全服务、命名服务等。中间件支持的连接子实现有如下优势。
(1)中间件提供了构件之间跨平台交互的能力,且遵循特定的工业标准,如CORBA、 J2EE 、COM等,可以有效地保证构件之间的通信完整性。
(2)产品化的中间件可以提供强大的公共服务能力,能够更好地保证最终系统的质量属性。
2.检测并消除体系结构失配
失配是指在软件复用的过程中,由于待复用构件对最终系统的体系结构和环境的假设 (Assumption) 与实际状况不同而导致的冲突。在构件组装阶段的失配问题主要包括3个方面。
(1)由构件引起的失配,包括由于系统对构件基础设施、构件控制模型和构件数据模型的 假设存在冲突引起的失配。
(2)由连接子引起的失配,包括由于系统对构件交互协议、连接子数据模型的假设存在冲突引起的失配。
(3)由于系统成分对全局体系结构的假设存在冲突引起的失配等。需要能够检测出失配问题,并在此基础上通过适当的手段消除检测出的失配问题。
5.部署阶段
(1)提供高层的体系结构视图来描述部署阶段的软硬件模型。
(2)基于 SA模型可以分析部署方案的质量属性,从而选择合理的部署方案。
6.后开发阶段
主要围绕维护、演化、复用等方面来进行。典型的研究方向包括动态软件体系结构、体系结构恢复与重建等。
1)动态软件体系结构
两个部分。
(1)体系结构设计阶段的支持:主要包括变化的描述、如何根据变化生成修改策略、描述 修改过程、在高抽象层次保证修改的可行性以及分析、推理修改所带来的影响等。
(2)运行时刻基础设施的支持:主要包括系统体系结构的维护、保证体系结构修改在约束 范围内、提供系统的运行时刻信息、分析修改后的体系结构符合指定的属性、正确映射体系结 构构造元素的变化到实现模块、保证系统的重要子系统的连续执行并保持状态、分析和测试运 行系统等。
2)体系结构恢复与重建
A重建是指从已实现的系统中获取体系结构的过程。一般地, SA 重建的输出是一组体系结构视图。体系结构重建方法可以分为4类。
(1)手工体系结构重建。
(2)工具支持的手工重建。通过工具对手工重建提供辅助支持,包括获得基本体系结构单元、提供图形界面允许用户操作 SA模型、支持分析SA模型等。
(3)通过查询语言来自动建立聚集。这类方法适用于较大规模的系统,基本思路是:在逆向工程工具的支持下分析程序源代码,然后将得到的体系结构信息存入数据库,并通过适当的查询语言得到有效的体系结构显示。
(4)使用其他技术,比如数据挖掘等。
7.1.3 软件架构的重要性
软件架构设计是降低成本、改进质量、按时和按需交付产品的关键因素。
1.架构设计能够满足系统的品质
2.架构设计使受益人达成一致的目标
3.架构设计能够支持计划编制过程
4.架构设计对系统开发的指导性
5.架构设计能够有效地管理复杂性
6.架构设计为复用奠定了基础
7.架构设计能够降低维护费用
8.架构设计能够支持冲突分析