第7章-软件架构设计基础知识

262 阅读16分钟

第一节 软件架构概念*

第一条 软件架构的定义*

软件架构并非可运行的软件,只是一种表达

架构设计是在需求捕获并进行分析后展开的活动,不能捕获需求,与系统功能性需求没有直接的对应关系

结构中包括软件的构件、构件的外部可见属性以及他们之间的相互关系

软件构件:可以是程序模块、面向对象的类,也可以扩充到包含数据库和能够完成客户与服务器配置的”中间件“

软件架构能够在设计变更相对容易的阶段,考虑系统结构的可选方案,便于技术人员与非技术人员就软件设计进行交互,能够展现软件的结构、属性与内部交互关系。但是软件架构与用户对系统的功能性需求没有直接的对应关系。

第二条 软件架构设计与生命周期

(一)需求分析阶段
1.两个不同的对象

(1)问题空间

(2)解空间

2.2个问题

(1)如何根据需求模型构建SA模型

(2)如何保证模型转换的可追踪性

① 采用表格或Use case map 等维护可追踪性。

(二)设计阶段
1.这一阶段SA研究主要包括:

(1)SA模型的描述,有3个层次

① SA的基本概念。由构件和连接子组成

② 体系结构描述语言(ADL,Architecture Description Language):支持构件、连接子及其配置的描述语言。对连接子格外重视。

③ SA模型的多视图表示,从不同的视角描述特定系统的体系结构,从而得到多个视图,并将这些视图组织起来以描述整体的SA模型。

(2)SA模型的设计与分析方法

(3)对SA设计经验的总结与复用

(三)实现阶段
1.研究方向
  • (1)研究基于 SA 的开发过程支持,如项目组织结构、配置管理等。
  • (2)寻求从 SA 向实现过渡的途径,如将程序设计语言元素引入 SA 阶段、模型映射、构件组装、复用中间件平台等。
  • (3)研究基于 SA 的测试技术。
(四)构件组装阶段
1.研究方向
  • (1)如何支持可复用构件的互联,即对 SA 设计模型中规约的连接子的实现提供支持。
  • (2)在组装过程中,如何检测并消除体系结构失配问题。
2.中间件支持的连接子实现有如下2个优势

(1)提供了构件之间跨平台的交互能力,且遵循特定的工业标准,如CORBA、J2EE、COM等,可以有效的保证构件之间的通信完整性。

(2)提供公共服务

  • 分布式系统中中间件的两种不同类型支持:交互支持和提供公共服务。
  • 交互支持指协调不同组件之间的交互,而提供公共服务则指提供对服务可复用的实现,被不同组件需求的服务。公共服务可以在中间件容器中提供,被部署在容器中的组件可以访问和使用这些公共服务。
3.构件组装阶段的失配问题主要包括3个方面
  • (1)由构件引起的失配,包括由于系统对构件基础设施、构件控制模型和构件数据模型的假设存在冲突引起的失配。
  • (2)由连接子引起的失配,包括由于系统对构件交互协议、连接子数据模型的假设存在冲突引起的失配。
  • (3)由于系统成分对全局体系结构的假设存在冲突引起的失配等。要解决失配问题,首先需要能够检测出失配问题,并在此基础上通过适当的手段消除检测出的失配问题。
(五)部署阶段
1.SA对软件部署作用如下
  • (1)提供高层的体系结构视图来描述部署阶段的软硬件模型。
  • (2)基于 SA 模型可以分析部署方案的质量属性,从而选择合理的部署方案。
(六)后开发阶段
1.研究方向

维护、演化、复用等方面

(1)动态软件体系结构

  • 体系结构设计阶段的支持:主要包括变化的描述、如何根据变化生成修改策略、描述修改过程、在高抽象层次保证修改的可行性以及分析、推理修改所带来的影响等。
  • 运行时刻基础设施的支持:主要包括系统体系结构的维护、保证体系结构修改在约束范围内、提供系统的运行时刻信息、分析修改后的体系结构符合指定的属性、正确映射体系结构构造元素的变化到实现模块、保证系统的重要子系统的连续执行并保持状态、分析和测试运行系统等。

(2)体系结构恢复与重建

SA 重建是指从已实现的系统中获取体系结构的过程。一般地,SA 重建的输出是一组体系结构视图。现有的体系结构重建方法可以分为4类。

  1. 手工体系结构重建。
  2. 工具文持的手工重建。通过工具对手工重建提供辅助支持,包括获得基本体系结构单元、提供图形界面允许用户操作 SA 模型、支持分析 SA 模型等。如 KLOCwork inSight 工具使用代码分析算法直接从源代码获得 SA 构件视图,用户可以通过操作图形化的 SA 来设定体系结构规则,并可在工具的支持下实现对体系结构的理解、自动控制和管理。
  3. 通过查询语言来自动建立聚集。这类方法适用于较大规模的系统,基本思路是:在逆向工程工具的支持下分析程序源代码,然后将得到的体系结构信息存入数据库,并通过适当的查询语言得到有效的体系结构显示。
  4. 使用其他技术,比如数据挖掘等

第三条 软件架构的重要性

软件架构设计师降低成本、改进质量、按时和按需交付产品的关键因素

(一)架构设计能够满足系统的品质

(二)架构设计使受益人达成一致的目标

(三)架构设计能够支持计划编制过程

确定组件之间的依赖关系,直接支持项目计划和项目管理活动。例如:细节划分、日程安排、工作分配、成本分析、风险管理和技能开发。

(四)架构设计对系统的开发的指导性

(五)架构设计能够有效的管理复杂性

(六)架构设计为复用奠定了基础

(七)架构设计能够降低维护费用

(八)架构设计能够支持冲突分析

 

 

第二节 基于架构的软件开发方法(ABSD)

第一条 设计方法概述

(一)定义:由商业、质量和功能需求的组合驱动的
(二)设计活动

使用ABSD,设计活动可以从项目总体功能框架明确就开始,此时需求抽取和分析还没有完成。设计活动与需求抽取和分析并行。

(三)3个基础

1.功能分解。在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术

2.通过选择体系结构风格来实现质量和商业需求

3.软件模板的使用,软件模板利用了一些软件系统的结构。

第二条 概念和术语

(一)设计元素

ABSD 方法是一个自顶向下,递归细化的方法,软件系统的体系结构通过该方法得到细化,直到能产生软件构件和类。

在最顶层,系统被分解为若干概念子系统和一个或若干个软件模板。在第2层,概念子系统又被分解成概念构件和一个或若干个附加软件模板。

体系结构需求一般来自3个方面,分别是系统的质量目标、系统的商业目标和系统开发人员的商业目标

image.png

(二)视图与视角

描述软件架构

1.视角

(1)静态视角:展示功能组织的静态视角能判断质量特性

(2)动态视角:展示并发行为的动态视角能判断系统行为特性

2.视图

(1)逻辑视图:记录设计元素的功能和概念接口,设计元素定义了它本身在系统中的角色,这些角色包括功能、性能等。

(2)进程视图

(3)实现视图

(4)配置视图

(三)用例和质量场景

1.用例

(1)捕获功能需求

2.场景

(1)捕获质量需求,并称这些场景为质量场景,并且必须包括预期和非预期的场景。分别为:

① 变更

② 性能

③ 可靠性

④ 交互

 

第三条 基于体系结构的开发模型(ABSDM)

(一)软件过程划分为6个子过程

image.png

1.体系结构需求

(1)定义:

指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。

(2)主要任务:

① 获取用户需求:系统的质量目标、系统的商业目标和系统开发人员的商业目标

② 标识系统中所用到的构件

image.png

③ 架构需求评审

组织一个由不同代表(如分析人员、客户、设计人员和测试人员)组成的小组,对体系结构需求及相关构件进行仔细地审查。

审查的主要内容包括所获取的需求是否真实地反映了用户的要求,类的分组是否合理,构件合并是否合理等。必要时,可以在“需求获取一标识构件一需求评审”之间进行迭代。

2.设计

image.png 3.文档化

输出两个文档:

(1)体系结构规格说明

(2)测试体系结构需求的质量说明书

4.复审

安排一次由外部人员(用户代表和领域专家)参加的复审。

复审的目的是标识潜在的风险,及早发现体系结构设计中的缺陷和错误,包括体系结构能否满足需求、质量需求是否在设计中得到体现、层次是否清晰、构件的划分是否合理、文档表达是否明确、构件的设计是否满足功能与性能的要求等。

5.实现

image.png

6.演化

image.png

第三节 架构风格

第一条 软件架构风格概述

  • 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。
  • 体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。
    • 词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
  • 体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。对软件体系结构风格的研究和实践促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。例如,如果某人把系统描述为“客户/服务器”模式,则不必给出设计细节,人们立刻就会明白系统是如何组织和工作的。

第二条 数据流体系结构风格

(一)批处理体系结构风格

关键点:串行、整体

image.png

(二)管道过滤器体系结构风格

关键点:并行、上一个步骤的输出是下一个步骤的输入

image.png

第三条 调用/返回体系结构风格

(一)思想:

分而治之。将主要思想是将一个复杂系统分解为若干子系统,以便降低复杂度,并且增加了可修改性

(二)面向对象体系结构风格

image.png

(三)层次型体系结构风格****

image.png

(四)C/S体系结构风格****

第四条 以数据为中心的体系结构风格****

(一)仓库体系结构风格****

image.png

1.两个构件

(1)中央数据结构:说明当前数据的状态

(2)独立构件:在中央数据存储上进行

(二)黑板体系结构风格****

image.png

第五条 虚拟机体系结构风格

(一)解释器体系结构风格

image.png

(二)规则系统体系结构风格****

image.png

第六条 独立构件体系结构风格****

(一)进程通信体系结构风格****

在进程通信结构体系结构风格中,构件是独立的过程,连接件是消息传递。这种风格的特点是构件通常是命名过程,消息传递的方式可以是点到点、异步或同步方式及远程过程调用等。

(二)事件系统体系结构****

事件系统风格(见图 7-17)基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。

image.png

 

第七条 C2

C2 是一种并行构件网络,通过连接件按照一组规则绑定在一起。系统中的构件和连接件都有一个顶部和一个底部,构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部直接连接两个构件是不允许的,一个连接件可以连接任意数目的其他构件和连接件。当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。

image.png  

第四节 软件架构复用****

第一条 软件架构复用的定义及分类****

软件架构复用的类型包括机会复用和系统复用。机会复用是指开发过程中,只要发现有可复用的资产,就对其进行复用。系统复用是指在开发之前,就要进行规划,以决定哪些需要复用。

第二条 软件架构复用的原因****

软件架构复用可以减少开发工作、减少开发时间以及降低开发成本,提高生产力。不仅如此,它还可以提高产品质量使其具有更好的互操作性。同时,软件架构复用会使产品维护变得更加简单。

第三条 软件架构复用的对象及形式

(一)可复用性资产非常广,包括以下几个方面

1.需求

2.架构设计

3.元素

4.建模与分析

5.测试

6.项目规划

7.过程、方法和工具

8.人员

9.样本系统

10.缺陷消除

第四条 软件架构复用的基本过程

image.png

1.构造可复用资产

2.可复用资产库

(1)构件库

  • 构件库由于对可复用构件进行存储和管理,它是支持软件复用的必要设施。
  • 构件库中必须有足量的可复用构件才有意义。
  • 构件库应提供的主要功能包括构件的存储、管理、检索以及库的浏览与维护等,以及支持使用者有效地、准确地发现所需的可复用构件。
  • 在这个过程中,存在两个关键问题:
    • (1)构件分类,构件分类是指将数量众多的构件按照某种特定方式组织起来;
    • (2)构件检索,构件检索是指给定几个查询需求,能够快速准确地找到相关构件

3.复用这些资产  

第五节 特殊领域软件体系结构(DSSA)

第一条 定义

Tracz 的定义为:“DSSA 就是一个特定的问题领域中支持一组应用的领域模型、参考需求、参考体系结构等组成的开发基础,其目标就是支持在一个特定领域中多个应用的生成。”

(1)垂直域:定义了一个特定的系统族,包含整个系统族内的多个系统,结果是在该领域中可作为系统的可行解决方案的一个通用软件体系结构。
(2)水平域:定义了在多个系统和多个系统族中功能区城的共有部分。在子系统级上涵盖多个系统族的特定部分功能。

第二条 DSSA的基本活动-3个

这些活动是一个反复地、逐步求精的过程

1.领域分析:目标是获得领域模型

2.领域设计:目标是获得DSSA

3.领域实现:目标是依据模型和DSSA开发和组织可重用信息

第三条 参与DSSA的人员- 4类

1.领域专家:主要任务是提供有关领域中系统需求规格和实现知识,维护领域字典和复审领域模型和 DSSA 等。

2.领域分析人员:负责整个领域分析过程控制以及将从领域专家处获得的知识组织到领域模型中

3.领域设计人员:需要根据领域模型和现有系统开发出 DSSA 以及建立领域模型和 DSSA 之间的联系

4.领域实现人员:根据领域模型和DSSA进行软件实现以及对可重用构件进行验证

第四条 DSSA的建立过程

(一)三层次系统模型

1.领域开发环境:领域构架师

2.领域特定的应用开发环境:应用工程师

3.应用执行环境:操作员

image.png