软件体系结构概念 —— Lecture-1 第三部分
北京大学软件与微电子学院 周立新《软件体系结构》课程 Part 1:软件体系结构概念(03讲)
一、软件体系结构的定义
1.1 背景:SA技术的四个发展阶段
| 阶段 | 时期 | 核心特征 | 体系结构形态 |
|---|---|---|---|
| 无体系结构设计阶段 | 60年代以前 | 汇编语言为主,冯诺依曼体系 | 冯诺依曼结构 |
| 程序结构设计阶段 | 70年代中后期 | 结构化开发方法出现,概要设计与详细设计分离 | 基于功能模块的软件结构 |
| 模块结构阶段 | 80年代中-90年代初 | 面向对象语言与方法快速发展,从多侧面支持软件结构设计 | 类/对象结构 |
| 构件结构阶段 | 90年代以后 | 基于构件的软件开发,以软件过程为中心,强调构件化+体系结构技术 | 基于构件的软件体系结构 |
关键转变:
- 软件体系结构成为明确的文档和中间产品
- SA作为一门学科逐渐得到重视,成为软件工程研究热点
- 软件复用从代码复用发展到设计复用和过程复用
- 计算机语言变迁:机器语言 → 汇编语言 → 过程式高级语言 → OO语言 → SA描述语言,每一代都蕴含着体系结构研究的提升
D. E. Perry:软件体系结构是软件开发中第一类重要的设计对象。
Barry Boehm:在没有设计出体系结构及其规则时,整个项目不能继续下去;体系结构应看作软件开发中可交付的中间产品。
SA的三大作用:
- 为不同人员提供共同交流的语言
- 体现并尝试了系统早期的设计决策
- 系统设计的抽象:为框架和构件的共享与复用提供支持
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.3 定义的三大视角
| 视角 | 定义 | 侧重点 |
|---|---|---|
| 构造角度 | Garlan & Shaw、CFRP | 构件 + 连接件 + 约束/连接语义 |
| 可用性角度 | Perry & Wolf、Vestal | 强调体系结构风格和规则,精化构造定义 |
| 质量角度 | IEEE 610.12、Boehm | 不仅强调基本构成,还强调环境(需求/设计决策)对设计与演化的影响 |
1.4 核心四要素
软件体系结构的要素主要涉及:
- 构成成分:构件、连接件
- 拓扑结构:构件和连接件构成的系统结构
- 限制:约束条件
- 设计原则与指导方针:设计原理与演化规则
二、SA的七大研究领域
2.1 软件体系结构描述语言(ADL)
| ADL | 特点 | 适用场景 |
|---|---|---|
| Darwin | π演算为数学基础 | 分布式、并发体系结构 |
| Wright | CSP为数学基础 | 分布式、并发体系结构 |
| C2 | 基于构件和消息 | 大型频繁交互的层次型GUI系统 |
| ACME | 体系结构互换语言 | 不同ADL之间规格说明转换 |
其他有影响的ADL:Aesop、Unicon、Rapide、SADL、MetaH、Weaves等。
判断ADL的关键:能否表达体系结构应该表达的概念与抽象;如果需要转化,其复杂性如何。
2.2 体系结构构造
体系结构概念 → 体系结构描述语言 → 体系结构表示 这一过程称为体系结构构造。
三种描述模型
- Kruchten “4+1”模型:逻辑视图、开发视图、过程视图、物理视图 + 场景(用例)将四个视图有机结合
- UML描述观(Booch):设计视图、过程视图、实现视图、部署视图 + 用例视图,附体系结构元模型
- IEEE P1471标准:强调体系结构视点(Viewpoint)概念,从多个视点描述体系结构
N. Medvovonic 总结的UML描述SA的三种途径:
- 不改变UML用法直接建模
- 利用UML三种扩充机制(Stereotype/Tagged Value/Constraints)扩展元模型
- 对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年五大方向)
- 体系结构创建与选择
- 体系结构表示
- 体系结构分析
- 基于体系结构开发
- 体系结构演化
D. E. Perry 认为(IFIP 2000 世界计算机大会主题演讲)
最重要的三个研究方向:
- 体系结构风格
- 体系结构连接件
- 动态体系结构
关联笔记
- 软件体系结构概述-Lecture-1第一部分
- IEEE 1471-2000-软件架构标准-Lecture-1第二部分
- 软件体系结构风格-Lecture-2
- KWIC与软件架构案例分析-Lecture-3
- Agent系统与多Agent系统-Lecture-4
- 设计空间与设计规则 — 软件架构系统研究方法
原始文件:田浩然上传的资料/0B105-SoftwareArchitecture/Lecture-1/03:软件体系结构概念.pdf(312.97KB,文字版PDF,39页) 处理方法:pdftotext 全文提取 + 结构化梳理