软件体系结构概念 — 软件架构课程 Lecture-1
来源:周立新《软件体系结构》课程 Lecture-1 第3部分 原文件:
/田浩然上传的资料/0B105-SoftwareArchitecture/Lecture-1/03:软件体系结构概念.pdf类型:PPT 导出 PDF(文字版),39 页
一、软件体系结构的定义
1. 背景:SA 技术发展的四个阶段
| 阶段 | 时期 | 核心特征 | 代表 |
|---|---|---|---|
| 无体系结构设计阶段 | 60年代以前 | 聚焦计算模型与高级语言,遵循冯诺依曼体系结构 | 汇编语言、Algol 60 |
| 程序结构设计阶段 | 70年代中后期 | 结构化程序设计,概要设计与详细设计分离 | 结构化开发方法、基于功能模块的软件结构 |
| 模块结构阶段 | 80年代中期—90年代初 | 多种模块结构,控制流图/数据流图支持 | 面向对象语言、多侧面支持软件结构设计 |
| 构件结构阶段 | 90年代以后 | 高层抽象结构为中心,基于构件的软件开发 | 构件化技术、体系结构技术、自适应性/互操作性/可扩展性/可重用性 |
关键洞见:新一代计算语言的出现,均蕴涵着软件体系结构的研究。 体系结构技术使软件复用从代码复用发展到设计复用和过程复用。
语言变迁:机器语言 → 汇编语言 → 过程式高级语言 → OO语言 → SA描述语言 抽象层级:二进制位 → 基本指令 → 过程代码 → 类代码 → 系统构造子
2. 权威观点
- D.E.Perry:软件体系结构是软件开发中第一类重要的设计对象。
- Barry Boehm:“在没有设计出体系结构及其规则时,整个项目不能继续下去;体系结构应看作软件开发中可交付的中间产品。“
3. 体系结构的三大作用
- 共同语言:为软件开发中不同人员提供了共同交流的语言
- 早期决策:体现并尝试了系统早期的设计决策
- 抽象与复用:系统设计的抽象,为实现框架和构件的共享与复用提供支持
4. 六种经典定义对比
| 定义来源 | 元组 | 核心要素 | 视角 |
|---|---|---|---|
| Garlan & Shaw | 三元组 | {components, connectors, constrains} 构件/连接件/限制 | 构造角度 |
| CFRP | 四元组 | {elements, interfaces, connections, connection-semantics} 元素/接口/连接/连接语义 | 构造角度 |
| Perry & Wolf | 三元组 | {elements, form, rational} 元素/形式/准则 | 可用性/风格角度 |
| Vestal | 三元组 | {components, idioms/styles, common patterns of interaction} 构件/风格/通用互操作模式 | 可用性/风格角度 |
| IEEE 610.12-1990 | 四元组 | {component, connector, environment, principle} 构件/连接件/环境/原理 | 质量角度 |
| Boehm | 五元组 | {components, connections, constraints, stakeholders’needs, rationale} 构件/连接件/约束/涉众需求/原理 | 质量角度 |
三大阵营归纳:
- 构造视角(Garlan & Shaw、CFRP):强调构件、连接件、约束
- 风格视角(Perry & Wolf、Vestal):强调体系结构风格和规则
- 质量视角(IEEE、Boehm):强调环境、涉众需求、设计原理
5. SA 四要素
- 构成成分:构件、连接件
- 拓扑结构:构件和连接件构成的系统结构
- 限制:约束条件
- 设计原则与指导方针:设计原理与演化原则
二、七大研究领域
1. 软件体系结构描述语言(ADL)
| ADL | 特点 | 适用场景 |
|---|---|---|
| Darwin | 以 π 演算为数学基础 | 分布式、并发体系结构 |
| Wright | 以 CSP 为数学基础 | 并发系统描述 |
| C2 | 基于构件和消息 | 大型频繁交互的层次型 GUI 系统 |
| ACME | 体系结构互换语言 | ADL 之间规格说明转换 |
| 其他 | Aesop, UniCon, Rapide, SADL, MetaH, Weaves | 各有侧重 |
2. 体系结构构造
从”体系结构概念”到”体系结构描述”到”体系结构表示”的过程。
三种描述模型
- Kruchten “4+1” 模型:逻辑视图、开发视图、过程视图、物理视图 + 场景(用例)
- Booch UML 描述观:设计视图、过程视图、实现视图、布署视图 + 用例视图 + 体系结构元模型
- IEEE P1471 标准:强调视点(Viewpoint)概念,从多个视点描述体系结构
UML 描述 SA 的三种途径
- 不改变 UML 用法,直接对体系结构建模
- 利用 UML 三种扩充机制(Stereotype、Tagged Value、Constraints)扩展元模型
- 对 UML 进行扩充,增加体系结构建模元素
判断语言是否适合用作 ADL 的关键:能否表达体系结构描述语言应该表达的概念与抽象。如果需要转化,其复杂性如何。
3. SA 分析、设计、验证
分析方法
- SAAM(Kazman 等):基于场景的结构分析方法
- ATAM(Mario R. Barbacci 等):多质量属性情况下的体系结构质量模型、分析与权衡方法
三类分析:结构分析、功能分析、性能分析
设计方法
- 过程驱动方法:
- 面向对象方法(更侧重接口与交互)
- “4+1”模型方法
- 基于 USE CASE 的迭代方法
- 问题列表驱动法:
- 枚举设计空间(功能维 + 结构维)
- 考虑设计维的相关性
- 适用于特定领域,静态的,可实现量化体系结构设计空间
设计本质:将系统分解成组成成份(构件、连接件),再重新组装成系统。
测试验证
- 分层测试策略:单元/子系统/集成/验收
- 霍尔公理的构件正确性验证
- 基于 CHAM 的体系结构动态语义验证
普遍缺点:可操作性差,难于实用化,实践效果有限。
4. SA 发现、演化与复用
| 方向 | 定义 | 范畴 |
|---|---|---|
| 体系结构发现 | 从已有系统中提取软件的体系结构 | 逆向工程 |
| 体系结构演化 | 需求/技术/环境/分布变化导致的体系结构变动 | 正向演化 |
| 体系结构复用 | 设计复用,比代码复用更抽象 | 产品线体系结构相似性高,复用价值大 |
SA 作为系统高层抽象,反映主要组成元素及其交互关系,较算法更稳定,更适合复用。
5. 基于体系结构的软件开发方法
开发过程演变为:
问题定义 → 软件需求 → 软件体系结构(桥梁) → 软件设计 → 软件实现
基于构件和 SA 的软件开发逐渐成为主流,出现了基于构件的软件工程(CBSE)。
遗憾的是,体系结构的描述、表示、设计和分析、验证等研究还相对不足。或许会出现基于 SA 的软件工程。
6. 特定领域的体系结构(DSSA)
| 学者 | 侧重点 | 核心观点 |
|---|---|---|
| Rick Hayes-Roth | DSSA 的构成 | 系统由构件组成;适用于特定领域;有利于开发应用程序的标准结构 |
| Will Tracz | DSSA 的组成要素 | 包括领域模型、参考需求、参考体系结构、支持环境、实例化/细化/评估方法 |
两种定义都强调基准体系结构的重要性。
7. 软件体系结构支持工具
- ADL 原型工具:UniCon、Aesop、ArchStudio(C2)、Tracer(主动连接件)
- 分析工具:静态分析、类型检查、依赖分析、动态特性仿真、性能仿真
与成熟的软件工程环境(如 Visual Studio)相比,SA 设计支持工具还不成熟,难于实用化。
三、待解决的八大问题
- 统一概念:概念不统一导致研究范畴模糊、交流困难、工具研制受阻
- 统一 ADL 框架:ADL 繁多,不同语言的规格说明难以互换
- 理论模型:缺乏统一的理论模型支持,难以系统有效地解释 SA 中的重要概念
- 体系结构描述:必要的视图/视点集、视图之间的映射关系尚未完全解决
- SA 性质:没有给出良好体系结构的属性或判定标准,缺乏设计指导原则
- 支持环境:缺乏有效的 SA 分析、设计、仿真和验证工具
- SA 复用:如何说明 SA、复用已有 SA 的过程、SA 演化等问题尚未很好解决
- SA 发现方法:从遗留系统中逆向提取体系结构的研究很不成熟
四、未来方向预测
P. Clements 预测(未来 5-10 年五大方向)
- 体系结构创建与选择
- 体系结构表示
- 体系结构分析
- 基于体系结构开发
- 体系结构演化
D.E. Perry 预测(IFIP 2000 三大方向)
- 体系结构风格
- 体系结构连接件
- 动态体系结构