软件体系结构概念 — 软件架构课程 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. 体系结构的三大作用

  1. 共同语言:为软件开发中不同人员提供了共同交流的语言
  2. 早期决策:体现并尝试了系统早期的设计决策
  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} 构件/连接件/约束/涉众需求/原理质量角度

三大阵营归纳:

  1. 构造视角(Garlan & Shaw、CFRP):强调构件、连接件、约束
  2. 风格视角(Perry & Wolf、Vestal):强调体系结构风格和规则
  3. 质量视角(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 的三种途径

  1. 不改变 UML 用法,直接对体系结构建模
  2. 利用 UML 三种扩充机制(Stereotype、Tagged Value、Constraints)扩展元模型
  3. 对 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-RothDSSA 的构成系统由构件组成;适用于特定领域;有利于开发应用程序的标准结构
Will TraczDSSA 的组成要素包括领域模型、参考需求、参考体系结构、支持环境、实例化/细化/评估方法

两种定义都强调基准体系结构的重要性。

7. 软件体系结构支持工具

  • ADL 原型工具:UniCon、Aesop、ArchStudio(C2)、Tracer(主动连接件)
  • 分析工具:静态分析、类型检查、依赖分析、动态特性仿真、性能仿真

与成熟的软件工程环境(如 Visual Studio)相比,SA 设计支持工具还不成熟,难于实用化。


三、待解决的八大问题

  1. 统一概念:概念不统一导致研究范畴模糊、交流困难、工具研制受阻
  2. 统一 ADL 框架:ADL 繁多,不同语言的规格说明难以互换
  3. 理论模型:缺乏统一的理论模型支持,难以系统有效地解释 SA 中的重要概念
  4. 体系结构描述:必要的视图/视点集、视图之间的映射关系尚未完全解决
  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. 动态体系结构

关联笔记