1
系统架构设计基础知识
一. 系统架构概述
系统架构的定义
系统架构(System Architecture)是系统的一种整体的高层次的结构表示,是系统的骨架和根基,支撑和链接各个部分,包括构件、连接件、约束规范以及指导这些内容设计与演化的原理,是刻画系统整体抽象结构的一种手段。
软件架构的定义
软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述、元素的外部可见属性、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策和演化的基本原理,是构建于软件系统之上的系统级复用。
信息系统架构的定义
信息系统架构 ISA 是关于软件系统的结构、行为和属性的高级抽象,结构中包括软件的构件、构件的外部可见属性、这些构件之间的相互关系。
在描述阶段,其对象是直接构成系统的抽象组件以及各个组件之间的连接规则,特别是相对细致的描述组件之间的通信。
在实现阶段,这些抽象组件被细化为实际的组件,比如具体的类、对象。
二. 软件架构的生命周期
1. 需求分析阶段
从软件需求模型向SA模型的转换,主要关注两个问题:
(1) 根据需求模型构建架构模型:用例图经过词法分析转换为SA模型(类图)。
(2) 保证模型转换的可追踪性:表格或用例映射。
2. 设计阶段
这个阶段的研究主要包括3个方面:
(1) SA模型的描述
(2) SA模型的设计与分析方法
(3) 对SA设计经验的总结与复用
SA模型描述的三个层次
(1) SA的基本概念:SA描述方法是构件和连接子的建模。
(2) 体系结构描述语言ADL:支持构件、连接子及其配置的描述语言。
(3) SA模型的多视图表示:体现了关注点分离的思想。“4+1”视图模型。
用例:描述功能需求。
质量场景:描述质量需求。
3. 实现阶段
这个阶段的研究主要包括3个方面:
(1) 研究基于SA的开发过程支持:项目组织结构、配置管理。
(2) 寻求从SA模型向实现过渡的途径:模型映射、构件组装、复用中间件平台。
(3) 研究基于SA的测试技术。
填补高层SA模型和底层实现的鸿沟的典型方法
(1) 在SA模型中引入实现阶段的概念,如引入程序设计语言元素。
(2) 通过模型转换技术,将高层的SA模型逐步精化成能够支持实现的模型。
(3) 封装底层的实现细节,使之成为较大粒度构件,在SA指导下通过构件组装的方式实现系统,通常需要底层中间件平台的支持。
4. 构件组装阶段
这个阶段的研究主要包括2个方面:
(1) 支持可复用构件的互联,即对SA设计模型中规约的连接子的实现提供支持。
(2) 在组装过程中,检测并消除体系结构失配问题。
对设计阶段连接子的支持:
将连接子转换为具体的程序代码,在工具的支持下,生成连接子的代码。
中间件的基本功能:
提供了构件之间跨平台交互的能力。
提供强大的公共服务能力。
体系结构失配:待复用构件对最终系统的体系结构和环境的假设,与实际状况不同而导致的冲突。
5. 部署阶段
SA对软件部署的作用:
(1) 描述部署阶段的软硬件模型:基于SA提供的高层的体系结构视图。
(2) 分析部署方案的质量属性:基于SA模型分析,选择合理的部署方案。
6. 后开发阶段
这个阶段的研究主要围绕维护、演化、复用来进行,有2个典型的研究方向:
(1) 动态软件体系结构
体系结构设计阶段的支持
变化的描述、修改策略、描述修改过程、修改的可行性、修改所带来的影响。
运行时刻基础设施的支持
体系结构的维护、保证修改在约束范围内、运行时刻信息、分析修改后的体系结构符合指定的属性、正确映射构造元素的变化到实现模块。
(2) 体系结构恢复与重建
从已实现的系统中获取体系结构的过程,输出一组体系结构视图。
重建的方法分为4类:手工重建、工具支持的手工重建、通过查询语言来自动建立聚集、使用其它技术(数据挖掘)。
三. 基于架构的软件设计ABSD
基于体系结构的软件设计 Architecture-Based Software Design
ABSD方法是体系结构驱动的,指由构成体系结构的商业、质量、功能需求的组合驱动的架构设计。
ABSD方法是一个自顶向下、递归细化的方法,软件系统的体系结构通过该方法得到细化,直到能产生软件构件和类。
ABSD设计活动从项目总体框架明确就开始,此时需求抽取和分析还没完成。
ABSD方法的3个基础
1. 功能的分解。
2. 通过选择体系结构风格来实现质量和商业需求。
3. 软件模板的使用。
视角与视图 — 描述软件架构
用例 — 描述功能需求
质量场景 — 描述质量需求
静态视角:展示功能组织,判断质量特性。
动态视角:展示并发行为,判断行为特性。
描述软件架构:视角 + 视图
描述需求:用例(功能需求) + 质量属性场景(质量需求)
要点2:基于架构的开发模型
需求获取 -> 生成类图 -> 对类进行分组 -> 把类打包成构件 -> 需求评审
2. 把已标识的构件映射到架构中
3. 分析构件之间的相互作用
4. 产生软件体系结构
5. 设计评审