软件体系结构概念 —— Lecture-1 第三部分

北京大学软件与微电子学院 周立新《软件体系结构》课程 Part 1:软件体系结构概念(03讲)


一、软件体系结构的定义

1.1 背景:SA技术的四个发展阶段

阶段时期核心特征体系结构形态
无体系结构设计阶段60年代以前汇编语言为主,冯诺依曼体系冯诺依曼结构
程序结构设计阶段70年代中后期结构化开发方法出现,概要设计与详细设计分离基于功能模块的软件结构
模块结构阶段80年代中-90年代初面向对象语言与方法快速发展,从多侧面支持软件结构设计类/对象结构
构件结构阶段90年代以后基于构件的软件开发,以软件过程为中心,强调构件化+体系结构技术基于构件的软件体系结构

关键转变:

  • 软件体系结构成为明确的文档和中间产品
  • SA作为一门学科逐渐得到重视,成为软件工程研究热点
  • 软件复用从代码复用发展到设计复用和过程复用
  • 计算机语言变迁:机器语言 → 汇编语言 → 过程式高级语言 → OO语言 → SA描述语言,每一代都蕴含着体系结构研究的提升

D. E. Perry:软件体系结构是软件开发中第一类重要的设计对象。

Barry Boehm:在没有设计出体系结构及其规则时,整个项目不能继续下去;体系结构应看作软件开发中可交付的中间产品。

SA的三大作用:

  1. 为不同人员提供共同交流的语言
  2. 体现并尝试了系统早期的设计决策
  3. 系统设计的抽象:为框架和构件的共享与复用提供支持

1.2 六种经典定义对比

[1] Garlan & Shaw —— 构造三元组

SA = {components, connectors, constrains}

  • 构件(component):一组代码(如程序模块)或独立程序(如数据库服务器)
  • 连接件(connector):关系的抽象,表示构件之间的相互作用,如过程调用、管道、RPC等
  • 限制(constrain):对构件和连接件的语义说明

[2] CFRP —— 接口四元组

SA = {elements, interfaces, connections, connection-semantics}

  • 元素(elements):构成系统的实体,包括处理元素和数据元素
  • 接口(interface):每个元素有一个接口
  • 连接(connection):元素之间关系的模型,生成系统拓扑结构
  • 连接语义(connection-semantics):连接的语义描述,包括静态(实例连接)和动态(消息/过程调用/管道协议)

[3] Perry & Wolf —— 形式与准则三元组

SA = {elements, form, rational}

  • 元素(elements):处理元素、数据元素、连接元素三类
  • 形式(form):一组特性(限制元素选择)和关系(限制拓扑结构)
  • 准则(rational):元素组合的”生成”规则

[4] Vestal —— 风格与模式三元组

SA = {components, idioms/styles, common patterns of interaction}

  • 构件(components):构成软件系统的实体
  • 固定术语/风格(idioms/style):特定元素按特定方式组成特定结构,有利于特定系列问题的解决
  • 通用互操作模式(common patterns of interaction):关系的模型化,生成系统拓扑结构

[5] IEEE 610.12-1990 —— 环境与原理四元组

SA = {component, connector, environment, principle}

软件体系结构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构,以及指导上述内容设计与演化的原理。

[6] Boehm —— 涉众需求五元组

SA = {components, connections, constraints, stakeholders’ needs, rationale}

五要素:

  1. 构件
  2. 连接件
  3. 约束
  4. 涉众(风险承担者)需求
  5. 原理:展示系统如何满足不同人员需求

1.3 定义的三大视角

视角定义侧重点
构造角度Garlan & Shaw、CFRP构件 + 连接件 + 约束/连接语义
可用性角度Perry & Wolf、Vestal强调体系结构风格和规则,精化构造定义
质量角度IEEE 610.12、Boehm不仅强调基本构成,还强调环境(需求/设计决策)对设计与演化的影响

1.4 核心四要素

软件体系结构的要素主要涉及:

  1. 构成成分:构件、连接件
  2. 拓扑结构:构件和连接件构成的系统结构
  3. 限制:约束条件
  4. 设计原则与指导方针:设计原理与演化规则

二、SA的七大研究领域

2.1 软件体系结构描述语言(ADL)

ADL特点适用场景
Darwinπ演算为数学基础分布式、并发体系结构
WrightCSP为数学基础分布式、并发体系结构
C2基于构件和消息大型频繁交互的层次型GUI系统
ACME体系结构互换语言不同ADL之间规格说明转换

其他有影响的ADL:Aesop、Unicon、Rapide、SADL、MetaH、Weaves等。

判断ADL的关键:能否表达体系结构应该表达的概念与抽象;如果需要转化,其复杂性如何。

2.2 体系结构构造

体系结构概念 → 体系结构描述语言 → 体系结构表示 这一过程称为体系结构构造。

三种描述模型

  1. Kruchten “4+1”模型:逻辑视图、开发视图、过程视图、物理视图 + 场景(用例)将四个视图有机结合
  2. UML描述观(Booch):设计视图、过程视图、实现视图、部署视图 + 用例视图,附体系结构元模型
  3. IEEE P1471标准:强调体系结构视点(Viewpoint)概念,从多个视点描述体系结构

N. Medvovonic 总结的UML描述SA的三种途径:

  1. 不改变UML用法直接建模
  2. 利用UML三种扩充机制(Stereotype/Tagged Value/Constraints)扩展元模型
  3. 对UML进行扩充,增加体系结构建模元素

2.3 SA分析、设计、验证

体系结构分析

  • 结构分析、功能分析、性能分析
  • SAAM(Kazman等):基于场景的结构分析方法
  • ATAM(Mario R. Barbacci等):多质量属性情况下的体系结构质量模型、分析与权衡方法

体系结构设计

本质:将系统分解成组成成分(构件、连接件),再重新组装成系统。

两类方法:

  • 过程驱动方法:面向对象方法、“4+1”模型方法、基于USE CASE的迭代方法
  • 问题列表驱动方法:枚举设计空间(功能维+结构维),考虑设计维相关性,选择体系结构风格。适用于特定领域,静态,可实现量化(量化体系结构设计空间)

体系结构测试

按抽象层次分为:单元/子系统/集成/验收测试策略。

  • 云晓春/方滨兴:基于霍尔公理的构件设计正确性验证
  • Paola Inveradi:基于CHAM的体系结构动态语义验证

问题:分析设计验证方法可操作性差,难于实用化,实践效果不佳。

2.4 SA发现、演化与复用

  • 体系结构发现:从已有系统中提取体系结构,属于逆向工程范畴
  • 体系结构演化:需求、技术、环境、分布等因素变化导致的体系结构变动
  • 体系结构复用:设计复用,比代码复用更抽象。SA是系统高层抽象,较算法更稳定,更适合复用。产品线中复用价值更大

2.5 基于SA的软件开发方法

新开发过程:问题定义 → 软件需求 → 软件体系结构(桥梁) → 软件设计 → 软件实现

基于构件和SA的开发逐渐成为主流,出现了基于构件的软件工程。体系结构的描述、设计、分析、验证研究还相对不足,未来可能出现基于SA的软件工程。

2.6 特定领域的体系结构(DSSA)

两种定义视角:

  • Rick Hayes-Roth:侧重构成,强调系统由构件组成,适用于特定领域的标准结构
  • Will Tracz:侧重组成要素,包括领域模型、参考需求、参考体系结构、支持环境、实例化/细化/评估方法

共同点:都强调基准体系结构的重要性。

2.7 软件体系结构支持工具

  • ADL原型工具:UniCon、Aesop、ArchStudio(C2)、Tracer(主动连接件)
  • 分析工具:静态分析、类型检查、依赖分析、动态仿真、性能仿真
  • 问题:与成熟软件工程环境(如Visual Studio)相比还不成熟,难于实用化

三、需要研究的八大问题

(1) 统一软件体系结构概念

  • 概念不统一导致研究范畴模糊(学院派vs实用派)
  • 影响交流、工具研制和应用推广

(2) 统一ADL框架

  • ADL繁多,缺乏统一框架
  • 不同语言描述的规格说明难以互换

(3) SA理论模型

  • 缺乏统一的理论模型支持
  • 现有理论还不能系统有效地解释SA中的重要概念

(4) SA的描述

  • 多种标准规范但仍难操作
  • 视图/视点集、视图间映射关系未完全解决

(5) SA性质

  • 没有良好体系结构的属性或判定标准
  • 缺乏设计指导原则,对实践促进不足

(6) SA环境

  • 缺乏有效的分析、设计、仿真、验证工具
  • 理论研究与环境支持不同步

(7) SA复用

  • 如何说明SA
  • 复用已有SA的过程
  • SA演化

(8) SA的发现方法

  • 从无规格说明的系统中逆向提取体系结构
  • 该领域研究很不成熟,基本只有研究,缺乏可行方法

四、未来研究方向

P. Clements 预测(未来5-10年五大方向)

  1. 体系结构创建与选择
  2. 体系结构表示
  3. 体系结构分析
  4. 基于体系结构开发
  5. 体系结构演化

D. E. Perry 认为(IFIP 2000 世界计算机大会主题演讲)

最重要的三个研究方向:

  1. 体系结构风格
  2. 体系结构连接件
  3. 动态体系结构

关联笔记


原始文件:田浩然上传的资料/0B105-SoftwareArchitecture/Lecture-1/03:软件体系结构概念.pdf(312.97KB,文字版PDF,39页) 处理方法:pdftotext 全文提取 + 结构化梳理