系统架构设计基础知识
9.1 软件架构概念
- 定义:软件架构(Software Architecture)也叫软件体系结构,是指系统的一个或多个结构,这些结构包含软件的构件(可能是程序模块、类或者是中间件)、
构件的外部可见属性及其之间的相互关系。体系结构的设计包含数据库设计和软件结构设计,后者主要关注软件的结构、属性和交互作用,并通过多种视图全面描述。 - 软件架构设计与生命周期
阶段 作用和意义 需求分析阶段 有利于各阶段参与者的交流,也易于维护各阶段的可追踪性 设计阶段 关注最早和最多的阶段 实现阶段 有效实现从软件架构设计向实现转换 构件组装阶段 可复用构件组装的设计能够提高系统实现的效率 部署阶段 组织和展示部署阶段的软硬件架构、评估分析部署方案 后开发阶段 主要围绕维护、演化、复用进行
-
- 需求分析阶段: 需求分析阶段软件架构设计还处于起步阶段。需求关注的是问题空间,架构关注的是解空间,需要保持二者的可追踪性和转换。从软件
需求模型向软件架构模型转换需要关注两个问题:
(1) 如何根据需求模型构建软件架构模型;
(2) 如何保证模型转换的可追踪性。
- 需求分析阶段: 需求分析阶段软件架构设计还处于起步阶段。需求关注的是问题空间,架构关注的是解空间,需要保持二者的可追踪性和转换。从软件
-
- 设计阶段:这一阶段的研究主要包括:**软件架构模型的描述,软件架构模型的设计与分析方法,以及对软件架构设计经验的总结与复用等
**。其中架构
模型的描述研究包括:(1)组成SA模型(软件架构模型)的基本概念,即构件和连接子的建模。(2)体系架构描述语言(Architecture
Description Language,ADL) 是用于描述软件体系结构的语言,与其他语言最大的区别在于其更关注构件间互联机制(连接子)。(3)多视图,
反应的是一组系统不同方面,体现了关注点分散的思想,通常与ADL结合起来描述系统的体系结构。典型的模型包括:4+1
模型、Hofmesiter的4视图模型、
CMU-Sei 的 Views and Beyond 模型。
- 设计阶段:这一阶段的研究主要包括:**软件架构模型的描述,软件架构模型的设计与分析方法,以及对软件架构设计经验的总结与复用等
-
- 实现阶段。这一阶段体系结构主要研究的内容有:(1)基于SA的开发过程支持。(2)寻求从SA向实现过渡的途径。(3)研究基于SA的测试技术。
缩小软件架构设计与底层实现概念差距的手段:模型转换技术、底层实现的细节、在SA模型中引入实现阶段的概念(如用程序设计语言描述)。
- 实现阶段。这一阶段体系结构主要研究的内容有:(1)基于SA的开发过程支持。(2)寻求从SA向实现过渡的途径。(3)研究基于SA的测试技术。
-
- 构件组装阶段:研究的内容主要包括:(1)如何支持可复用构件互联,即对SA设计模型中的规约的连接子的实现提供支持。(2)组装过程中,如何检测并消除
体系结构失配的问题。这些问题主要包括:构件本身失配;连接子(互联机制)失配;部分和整体的失配。
- 构件组装阶段:研究的内容主要包括:(1)如何支持可复用构件互联,即对SA设计模型中的规约的连接子的实现提供支持。(2)组装过程中,如何检测并消除
-
- 部署阶段:作用:一是提供高层的体系结构视图的描述部署阶段的软硬件模型;二是基于软件架构模型可以分析部署方案的质量属性,从而选择合理的部署方案。
-
- 后开发阶段:该阶段系统架构研究方向包括:动态软件体系结构、体系结构恢复与重建。体系结构重建的方法有:手工体系结构重建、工具支持的手工重建、通过
查询语言来自动建立聚集、使用其他技术(如数据挖掘)
- 后开发阶段:该阶段系统架构研究方向包括:动态软件体系结构、体系结构恢复与重建。体系结构重建的方法有:手工体系结构重建、工具支持的手工重建、通过
- 软件架构的重要性
软件架构设计是降低成本、改进质量、按时和按需交付产品的关键因素。软件架构的重要性包括:
-
- 架构设计能够满足系统的品质
-
- 架构设计使受益人达成一致的目标
-
- 架构设计能够支持计划的编制过程
-
- 架构设计对系统开发的指导性
-
- 架构设计能够有效的管理复杂性
-
- 架构设计为复用奠定了基础
-
- 架构设计能够降低维护费用
-
- 架构设计能够支持冲突分析
9.2 基于架构的软件开发方法
体系结构的设计方法概述
基于体系结构(架构)的软件设计(Architecture-Based Software Design, ABSD)方法是体系结构驱动的,即指构成体系结构的商业、质量和功能需求
组合驱动的。采用视角和视图来描述软件架构,采用用例来描述功能需求,采用质量场景来描述质量需求
。ABSD有三个基础,功能的分解、通过选择体系结构
风格来实现质量和商业需求、软件模版的使用。ABSD是自顶向下、递归细化的,迭代的每一步都有清晰的定义,有助于降低体系结构设计的随意性。基于体系结构的开发模型
传统的软件开发模型效率低、ABSDM模型把整个基于体系结构的软件开发过程分为体系结构的需求、设计、文档化、复审、实现和演化六个子过程。
体系结构需求
体系结构的需求工作包括获取用户需求和标识系统中拟用构件。
-
- 需求获取。体系结构的需求一般来源于三个方面: 质量目标、系统的商业目标和系统开发人员的商业目标。
-
- 标识构件。标识构件分为三步完成。生成类图、对类进行分组、把类打包成构件。
-
- 架构需求评审的审查重点包括需求是否真实反应了用户的需求、类的分组是否合理、构件是否合理。
-
- 体系结构设计。软件的体系设计过程:提出软件体系结构模型 -> 映射构件 -> 分析构件的相互作用 -> 产生体系结构评审。设计评审必须邀请独立于系统
开发之外的人员。
- 体系结构设计。软件的体系设计过程:提出软件体系结构模型 -> 映射构件 -> 分析构件的相互作用 -> 产生体系结构评审。设计评审必须邀请独立于系统
-
- 体系结构文档化:体系结构文档化过程主要输出的结果是体系结构规格说明书和测试体系结构需求的质量设计说明书。
-
- 体系结构复审:复审的目的是标识潜在的风险,及早发现体系结构中的错误和缺陷,必要时可以搭建一个可运行最小系统用于评估和测试体系结构是否
满足需要。
- 体系结构复审:复审的目的是标识潜在的风险,及早发现体系结构中的错误和缺陷,必要时可以搭建一个可运行最小系统用于评估和测试体系结构是否
-
- 体系结构实现:体系结构实现是以复审之后的文档化体系结构说明书为基础的,具体为:分析与设计 -> 构件实现 ->
体系结构演化计划 -> 构件组装 ->
系统测试。体系结构说明书中定义了系统中构件和构件之间的关系。测试包括单个构件的功能性测试及被组装应用的整体功能和性能测试。
- 体系结构实现:体系结构实现是以复审之后的文档化体系结构说明书为基础的,具体为:分析与设计 -> 构件实现 ->
-
- 体系结构演化:体系结构演化史使用系统演化步骤去修改应用,以满足新需求。系统演化步骤:需求变化归类->
体系结构演化计划 -> 构件变动 ->
更新构件之间的相互作用 -> 构建组装与测试 -> 技术评审 -> 演化后的体系结构。
- 体系结构演化:体系结构演化史使用系统演化步骤去修改应用,以满足新需求。系统演化步骤:需求变化归类->
9.3 软件架构风格
- 软件架构风格概述!
软件体系结构设计的目的核心目标是重复的体系结构模式(软件复用/重用)。软件体系结构(架构)风格是描述某一特定应用领域中系统组织方式的惯用模式。
体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。
-
- 词汇表:包含构件和连接件
-
- 约束:约束定义构件和连接件的组合方式
体系结构风格反应了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效的组织成一个完整的系统。
- 数据流体系结构架构
-
- 批处理体系结构风格:每个处理的步骤都是一个独立的程序,每一步必须在前一步结束之后才能开始,且数据必须完整,以整体的方式进行传递。
-
- 管道过滤器风格:把系统分为几个序贯的处理步骤,每个步骤之间通过数据流连接,一个步骤的输出是另外一个步骤的输入,每个处理步骤都有输入输出。
- 管道过滤器风格:把系统分为几个序贯的处理步骤,每个步骤之间通过数据流连接,一个步骤的输出是另外一个步骤的输入,每个处理步骤都有输入输出。
- 调用和返回体系结构风格
调用-返回体系风格采用调用与返回的机制。利用调用返回实际上就是一种分而治之的策略,主要事项是将一个复杂的大系统分解为若干个小系统,降低复杂度,增加
可修改性。
-
- 主程序/子程序风格:采用单线程控制,把问题分解为若干个处理步骤,构件即为主程序和子程序。
-
- 面向对象体系机构风格: 构件是对象,即抽象数据类型的实例
- 面向对象体系机构风格: 构件是对象,即抽象数据类型的实例
-
- 层次型体系机构风格:每一层为上层服务,并且做为下层的接口。仅相邻层间具有接口。
- 层次型体系机构风格:每一层为上层服务,并且做为下层的接口。仅相邻层间具有接口。
-
- 客户端/服务器体系结构风格
-
- 二层C/S模式。主要组成部分:数据库服务器(后台:负责数据处理)、客户端应用程序(前台:完成用户交互任务)和网格
优点:客户应用和服务器构件分别运行在不同的计算机上。
缺点:开发成本高,客户端设计复杂,信息内容和形式单一,不利于推广,软件移植困难,软件维护和升级困难。
- 二层C/S模式。主要组成部分:数据库服务器(后台:负责数据处理)、客户端应用程序(前台:完成用户交互任务)和网格
-
- 三层C/S模式。瘦客户端模式。应用将功能分为表示层、功能层和数据层。
表示层: 用户接口与应用逻辑层的交互,不影响业务逻辑,通常使用图形用户界面。
功能层: 实现具体的业务处理逻辑
数据层:数据库管理系统
- 三层C/S模式。瘦客户端模式。应用将功能分为表示层、功能层和数据层。
-
- 浏览器服务器风格(B/S)
-
- B/S风格:是三层应用结构的实现方式,其三层分别为:浏览器,Web服务器,数据服务器。
-
- 相比于C/S的不足之处: 动态页面的支持能力弱、系统扩展能力差、安全性难以控制、响应速度不足、数据交互性不强。
- 以数据为中心的体系结构风格
(1)仓库体系结构风格:存储和维护数据的中心场所。由中央数据结构(说明当前数据状态)和一组独立构件(对中央数据进行操作)组成。如下图
(2)黑板体系结构风格:是一种问题求解模型,是组织推理步骤、控制状态数据和问题求解之领域知识的概念框架。可以通过选取各种黑板、知识源和控制模块的构件
来设计应用于信号处理领域,如语音识别和模式识别
虚拟机体系结构风格
虚拟机体系结构风格的基本思想是人为构件一个运行环境,可以理解为运行自定义的一些语言,增加架构灵活性。
(1)解释器体系结构风格:通常用来建立一种虚拟机以弥合程序语义和硬件语义之间的差异,缺点是执行效率较低,典型例子是专家系统。2025年简答题原图
(2)规则系统体系结构风格:包括知识库、规则解释器、规则/数据选择器及工作内存(程序运行存储区)
- 独立构件体系结构风格
独立构件体系结构风格强调系统中的每个构件都是相对独立的个体,他们之间不直接通信,以降低耦合,提高灵活度。
(1)进程通信体系结构风格:构件是独立的过程,连接件是消息传递。
(2)事件体系结构风格:构件不直接调用另外一个过程,而是触发或者广播一个或多个事件。 - C2风格
C2风格通过连接件连接构件或某个构件组,构件与构件之间无连接。
9.4 软件架构复用
- 软件架构复用定义及分类:软件复用是系统化软件开发过程:开发一组基本的软件构件模块,以覆盖不同的需求/体系结构之间的相似性,提高系统开发的效率、
质量、和性能。
软件架构复用的类型分为两种:机会复用和系统复用。机会复用在软件开发过程中,只要发现有可复用的资产就进行复用。系统复用是在开发前进行规划,决定哪些复用。 - 软件架构复用的原因:减少开发工作、减少开发时间、降低开发成本、提高生产力、提高产品质量,更好的互操作性。
- 软件架构复用的对象和形式。可复用的资产包括:需求、架构设计、元素、建模分析、测试、项目规划、过程+方法+工具、人员、样本系统、缺陷消除。一般形式的
复用包括:函数的复用、库的复用、面向对象中的类、接口和包的复用。 - 软件架构复用的基本过程。首先构件/获取可复用的软件资产(复用前提)-> 管理可复用的资产 -> 使用可复用的资产
9.5 特定领域软件体系结构
- 特定领域软件架构的定义
特定领域软件架构(Domain Specific Software Architecture,DSSA)是在一个特定的应用领域中为一组应用提供组织结构参考的标准软件体系结构,
即用于某一类特定应用领域的标准软件构件集合。DSSA的特征:领域性、普遍性、抽象性、可复用性。 - DSSA的基本活动
(1). 领域分析:通过分析领域中系统的共性需求建立领域模型。
(2). 领域设计:设计DSSA,且DSSA要具备软件需求领域需求变化的适应性
(3). 领域实现:获取可重用信息 - 参与DSSA人员:领域专家、领域分析师、领域设计人员和领域实现人员
- DSSA建立过程
DSSA建立过程是并发的、递归的、反复的螺旋模型,分为5个阶段:
(1)定义领域范围
(2)定义领域的特定元素
(3)定义领域特定的设计和实现约束
(4)产生领域模型和体系结构
(5)产生、收集可重用的单元。