|
|
@ -0,0 +1,478 @@
|
|
|
|
|
|
|
|
## 体系结构描述
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 体系结构描述方式标准
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 语义丰富性
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 语义精确性
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 形式化程度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 主要描述方式
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 非标准的图形符号
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- UML
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 模块接口语言MIL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- ADL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 非标准化图形符号描述
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
用由矩形框和有向线段组合而成的图形表达工具。其中,矩形框代表抽象构件,有向线段代表辅助各构件进行通讯、控制或关联的连接件。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 特点:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 语义丰富
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 语义极不精确
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 没有形式化基础
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 用途:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 商业展示
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 设计草图
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 优点:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 直观形象
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 简单易用
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 缺点:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 由于其术语和表达语义上存在着一些不规范和不精确,从而使得以矩形为基础的传统图形表达方法在不同系统和不同文档之间存在着许多不一致甚至矛盾。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 示例图:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Enterprise Java Beans Architecture
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Microsoft .Net Framework Architecture
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DC-LMP – Link Management Protocol Software用于光纤网物理介质连接器的软件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### UML
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
本质上UML是侧重于面向对象(OO, Object Oriented)软件系统设计的语言
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 特点:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 语义极其丰富
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 语义相对精确
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 有少量的形式化基础
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 用途:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 需求分析
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- OO类设计
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 行为设计和分析
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 代码自动生成
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 模块接口语言MIL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
是将一种或多种传统程序设计语言模块连接起来描述软件的体系结构的方法。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 特点:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 语义比较丰富,但局限在实现级别,层次较低
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 语义精确,有编译器作保证
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 没有或极少有形式化基础
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 实例:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Microsoft COM IDL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- OMG CORBA IDL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 优点:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 具有严格的语义基础,能够支持对较大的软件单元进行诸如:定义/使用(Definition/Use)、接口定义(Interface Definition)和导入/导出(Import/Export)等操作。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 一般来讲,MIL与实际的实现语言无关,只关注构件的对外表现协议以及构件之间的通讯关系
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 缺点:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 这些语言处理和描述的软件设计开发层次过于依赖程序设计语言,限制了它们处理和描述比程序设计语言元素更为抽象的高层次软件构架元素的能力。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### ADL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 基本元素
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 组件—— 计算或数据存储单元;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 连接件—— 用于模型化构件间的交互,以及指导这些交互的规则
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 配置—— 描述体系结构的构件与连接件的连接图。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 典型的ADL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 目前,广泛使用的体系结构描述语言有:ACME、Unicon、Wright、Darwin、Aesop、SADL、MetaH、Rapide和C2。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 由于这些语言大都是研究者在某些特殊应用中的设计产物,因此,它们都有各自的侧重点。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 不同的ADL对软件的理解不同
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- WRIGHT将软件理解为构件、连接器、端口、角色,以及这些元素之间的联系和约束。CSP的描述使其有利分析复杂行为。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- C2将软件理解为构件、端口和连接器。不过构件有且只有Top和Bottom两个端口。同时构件和构件之间仅通过Request和Notification两种信息进行通讯。适合描述交互式系统。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- ACME将软件理解为具有属性的构件和连接器。具有大多数ADL的共性元素。善于在不同ADL之间进行转换。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## SA的核心概念
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### SA的定义
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 软件体系结构(SA):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 提供了一个结构、行为和属性的高级抽象
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 从一个较高的层次来考虑组成系统的构件、构件之间的连接,以及由构件与构件交互形成的拓扑结构
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 这些要素应该满足一定的限制,遵循一定的设计规则,能够在一定的环境下进行演化。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 反映系统开发中具有重要影响的设计决策,便于各种人员的交流,反映多种关注,据此开发的系统能完成系统既定的功能和性能需求。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**体系结构** **=** **构件** **+** **连接件** **+** **拓扑结构** **+** **约束** **+** **质量**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Architecture = Components + Connectors + Topology + Constraints + Performance
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 图例
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 构件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 构件是**具有某种功能的可复用的软件结构单元,是为组装服务的,**表示了系统中主要的计算元素和数据存储。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 逻辑上,任何在系统运行中承担一定功能、发挥一定作用的软件体都可看作是构件
|
|
|
|
|
|
|
|
- 程序函数、模块
|
|
|
|
|
|
|
|
- 对象、类
|
|
|
|
|
|
|
|
- 数据库
|
|
|
|
|
|
|
|
- 文件
|
|
|
|
|
|
|
|
- ….
|
|
|
|
|
|
|
|
- 严格意义上讲,**构件是一种可部署单元,它具有规范的接口规约和显式的语境依赖。**更严格地讲,构件可以被独立部署,并由第三方组装。
|
|
|
|
|
|
|
|
- 由构件组装出的软件称为构件化软件。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 构件的粒度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 构件的粒度:构件的相对大小、规模、细节程度或关注程度的一个属性
|
|
|
|
|
|
|
|
- 原子构件(Atomic component):不可再分解。
|
|
|
|
|
|
|
|
- 集成电路、芯片
|
|
|
|
|
|
|
|
- 数据结构、函数
|
|
|
|
|
|
|
|
- 复合构件composite component):由其他原子构件与复合构件通过连接而成。
|
|
|
|
|
|
|
|
- 存储器、运算器、控制器
|
|
|
|
|
|
|
|
- 对象、模块、子系统
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 粒度对构件的影响
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 恰当的粒度是很重要的
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 小粒度构件:灵活性高,复用度高,但交互复杂,使用效率低下
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 大粒度构件正好相反
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 接口(Interface)与服务(Service)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 构件作为一个封装的实体,只能通过其**接口(Interface)**与外部环境交互,表示了构件和外部环境的**交互点**;
|
|
|
|
|
|
|
|
- **内部结构则被隐藏起来**(Black-box);
|
|
|
|
|
|
|
|
- 一个构件至少有一个接口
|
|
|
|
|
|
|
|
- 一个构件可以提供**多重接口**
|
|
|
|
|
|
|
|
- **构件接口与其内部实现应严格分开**
|
|
|
|
|
|
|
|
- 构件内部所实现的功能以**服务(Service)**的形式体现出来,并通过接口向外发布,进而产生与其它构件之间的关联
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 连接(Connection)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 连接(Connection):构件间建立和维护行为关联与信息传递的途径;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 连接需要两方面的支持:
|
|
|
|
|
|
|
|
- 连接发生和维持的机制——实现连接的物质基础(**连接的机制**);
|
|
|
|
|
|
|
|
- 连接能够正确、无二义、无冲突进行的保证——连接正确有效的进行信息交换的规则(**连接的协议**)。
|
|
|
|
|
|
|
|
- 简称**“机制”(mechanism)和“协议”(protocol)**。
|
|
|
|
|
|
|
|
- 计算机硬件提供了一切连接的物理基础:
|
|
|
|
|
|
|
|
- 过程调用、中断、存储、堆栈、串行I/O、并行I/O等;
|
|
|
|
|
|
|
|
- 基础控制描述层:
|
|
|
|
|
|
|
|
- 过程调用、动态约束、中断/事件、流、文件、网络等;
|
|
|
|
|
|
|
|
- 资源及管理调度层:
|
|
|
|
|
|
|
|
- 进程、线程、共享、同步、并行、分时并发、事件、消息、异常、远程调用、注册表、剪贴板、动态连接、API等;
|
|
|
|
|
|
|
|
- 系统结构模式层:
|
|
|
|
|
|
|
|
- 管道、解释器、编译器、转换器、浏览器、中间件、ODBC等。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 连接的协议
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **协议(Protocol)是连接的规约(Specification);**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 连接的规约是建立在物理层之上的有意义信息形式的表达规定
|
|
|
|
|
|
|
|
- 对过程调用来说:参数的个数和类型、参数排列次序;
|
|
|
|
|
|
|
|
- 对消息传送来说:消息的格式;
|
|
|
|
|
|
|
|
- 对ODBC数据库连接来说:SQL语言;
|
|
|
|
|
|
|
|
- 对Web Service连接而言:SOAP或REST协议;
|
|
|
|
|
|
|
|
- 目的:使双方能够互相理解对方所发来的信息的语义。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 连接的种类
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 从连接目的看:
|
|
|
|
|
|
|
|
- 操作/过程调用;
|
|
|
|
|
|
|
|
- 控制/事件/消息发送;
|
|
|
|
|
|
|
|
- 数据传输;
|
|
|
|
|
|
|
|
- …其他目的?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 除了连接机制/协议的实现难易之外,影响连接实现复杂性的因素之一是“**有无连接的返回信息和返回的时间**”,分为:
|
|
|
|
|
|
|
|
- 同步 (Synchronous)
|
|
|
|
|
|
|
|
- 异步 (Asynchronous)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 连接的特性
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 方向性
|
|
|
|
|
|
|
|
- 角色:连接的双方所处的不同地位的表达
|
|
|
|
|
|
|
|
- 激发性:定义为“引起连接行为的方式”,分为主动方和被动方的激发性:
|
|
|
|
|
|
|
|
- 响应特性:包括连接的被动方对连接请求的处理实时性、时间、方式、并发处理能力等
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 连接件(Connector)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 连接件(Connector):表示构件之间的交互并实现构件之间的连接,如:
|
|
|
|
|
|
|
|
- 管道(pipe)
|
|
|
|
|
|
|
|
- 中间件(Middleware)
|
|
|
|
|
|
|
|
- 数据库连接
|
|
|
|
|
|
|
|
- 应用服务器
|
|
|
|
|
|
|
|
- WEB服务器
|
|
|
|
|
|
|
|
- 消息中间件
|
|
|
|
|
|
|
|
- ......
|
|
|
|
|
|
|
|
- 连接件也可看作一类**特殊的构件**,区别在于:
|
|
|
|
|
|
|
|
- 一般构件是软件功能设计和实现的承载体;
|
|
|
|
|
|
|
|
- 连接件是负责完成构件之间信息交换和行为联系的专用构件。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 软件体系结构模型
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>建立模型的目的
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
提供一个理想的论证框架,应用逻辑和数学工具,评估性能,并在多个类似的场景下进行推理。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 建立SA模型
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 为什么要建立SA模型
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 针对某一具体的软件系统研发项目,需要以某种**可视化/形式化**的形式将SA的设计结果加以显式的表达出来,进而支持:
|
|
|
|
|
|
|
|
- 用户、软件架构师、开发者等各方人员之间的交流;
|
|
|
|
|
|
|
|
- 分析、验证SA设计的优劣;
|
|
|
|
|
|
|
|
- 指导软件开发组进行系统研发;
|
|
|
|
|
|
|
|
- 为日后的软件维护提供基本文档。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>SA建模的三个层次
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **图形化模型:SA模型的多视图表示 (Multi-view graphical model)**
|
|
|
|
|
|
|
|
- 从不同的视角描述特定系统的体系结构,从而得到多个视图,并将这些视图组织起来以描述整体的SA模型;
|
|
|
|
|
|
|
|
- **形式化模型:SA描述语言(Formal architecture description language, ADL)**
|
|
|
|
|
|
|
|
- 在SA基本概念的基础上,选取适当的形式化或半形式化的方法来描述一个特定的体系结构;
|
|
|
|
|
|
|
|
- **文档化模型:SA文档化(Documentation)**
|
|
|
|
|
|
|
|
- 记录和整理软件体系结构设计方案的各类细节。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 使用“多视图模型”进行SA建模的原因
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 考虑建筑体系结构的描述:
|
|
|
|
|
|
|
|
- 房间布局图、电路图、管道图、等等;
|
|
|
|
|
|
|
|
- **软件体系结构非常复杂,无法用简单的一维模型加以描述**
|
|
|
|
|
|
|
|
- 多视图SA模型:**从多个不同角度建立SA的模型,分别刻画SA某一方面的性质。**
|
|
|
|
|
|
|
|
- 系统的每一个不同的视图反映了一组系统相关人员所关注的系统的特定方面;
|
|
|
|
|
|
|
|
- 多视图体现了“关注点分离”(separation of concerns)的思想,使系统更易于理解,方便系统相关人员之间进行交流,并且有利于系统的一致性检测以及系统质量属性的评估。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### (Kruchten)4+1视图模型
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 一个架构视图是对于从某一视角或某一点上看到的系统所做的简化描述,描述中涵盖了系统的某一特定方面,而省略了与此方面无关的实体。
|
|
|
|
|
|
|
|
- “4+1”视图模型从5个不同的视角**(逻辑视图、进程视图、物理视图、开发视图和用例视图)**来描述软件体系结构。
|
|
|
|
|
|
|
|
- 每一个视图只关心系统的一个侧面,5个视图结合在一起才能反映系统的软件体系结构的全部内容。
|
|
|
|
|
|
|
|
- 该模型已被广泛应用于UML(Unified Modeling Language)和RUP(Rational Unified Process)中。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 4+1视图模型结构
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 用例视图(Use Case View)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **用例视图用来捕获最终用户所需求的功能性,即“系统应该做什么”;**
|
|
|
|
|
|
|
|
- 用例视图使其他四个视图有机的联系起来。
|
|
|
|
|
|
|
|
- 用例视图也称为场景(Scenario)。
|
|
|
|
|
|
|
|
- **在UML中,用例视图主要包括用例图,然后使用若干个交互图来展示每个用例内部的细节**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> UML图表示
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 逻辑视图(Logical View)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **逻辑视图主要支持系统的功能性需求,即系统提供给最终用户的服务。**
|
|
|
|
|
|
|
|
- 形成了问题及对问题解决方案的术语词汇
|
|
|
|
|
|
|
|
- 在逻辑视图中,系统分解成一系列的功能抽象(classes, interfaces, and patterns),这些抽象主要来自用户需求所在的问题领域,同时也表达了软件领域的相应概念。
|
|
|
|
|
|
|
|
- 这种分解不但可以用来进行功能分析,而且可用作标识在整个系统的各个不同部分的通用机制和设计元素。
|
|
|
|
|
|
|
|
- **逻辑视图通常并不描述软件系统是如何被实现或执行**
|
|
|
|
|
|
|
|
- **在UML中,逻辑视图通常使用以下的图形表达形式**
|
|
|
|
|
|
|
|
- Class diagrams (类图)
|
|
|
|
|
|
|
|
- Activity diagrams (活动图)
|
|
|
|
|
|
|
|
- Sequence diagrams (顺序图)
|
|
|
|
|
|
|
|
- Composite structure diagrams (组合结构图)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> UML图表示
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 开发视图(Module View)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 开发视图也称模块视图(Module View),**主要侧重于软件模块的组织和管理。**
|
|
|
|
|
|
|
|
- 系统-子系统-模块(构件、文件、资源等),并组织成层次结构
|
|
|
|
|
|
|
|
- 开发视图的另一个焦点在于:**描述各模块之间的依存关系。**
|
|
|
|
|
|
|
|
- 例如:一个构件的实现依赖于哪些其他构件、哪些源文件实现了哪些类,等等。
|
|
|
|
|
|
|
|
- 开发视图要**考虑软件内部的实现需求**,如软件开发的容易性、软件的复用和软件的通用性,要充分考虑由于具体开发工具的不同而带来的局限性。
|
|
|
|
|
|
|
|
- **在UML中,开发视图通常使用Component diagrams (构件图)**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> UML图表示
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 进程视图(Process View)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 进程视图侧重于系统的**运行特性**,主要关注一些**非功能性的需求。**
|
|
|
|
|
|
|
|
- 并发性、分布性、系统集成性和容错能力;
|
|
|
|
|
|
|
|
- 逻辑视图中的各个抽象概念如何在进程中被执行;
|
|
|
|
|
|
|
|
- 逻辑视图中的各个类的操作具体是在进程中的哪一个线程中被执行的。
|
|
|
|
|
|
|
|
- **在UML中,进程视图通常使用以下UML图来描述一个系统的运行时行为**
|
|
|
|
|
|
|
|
- Activity diagrams (活动图)
|
|
|
|
|
|
|
|
- Interaction diagrams (交互图)
|
|
|
|
|
|
|
|
- Sequence diagrams (次序图)
|
|
|
|
|
|
|
|
- Communication diagrams (通讯图)
|
|
|
|
|
|
|
|
- Interaction overview diagrams (交互预览图)
|
|
|
|
|
|
|
|
- Timing diagrams (时间图)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> UML图表示
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 物理视图(Physical View)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
物理视图主要考虑如何把软件部署到硬件上;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 它通常要考虑系统性能、规模、可靠性等;
|
|
|
|
|
|
|
|
- 解决软件系统配置、安装、系统部署后的物理拓扑结构、系统执行过程中的通讯问题等。
|
|
|
|
|
|
|
|
- 在UML中,物理视图通常包括
|
|
|
|
|
|
|
|
- Deployment diagrams (部署图)
|
|
|
|
|
|
|
|
- Package diagrams (包图)
|
|
|
|
|
|
|
|
- Interaction diagrams (交互图)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> UML图表示
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 总结
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **用例视图**:描述系统的典型场景与功能,主要图形包括use case diagram等。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **逻辑视图**:描述系统的抽象概念与功能(类、对象、接口、模式等),主要图形包括class diagrams, sequence diagrams, and collaboration diagrams等;
|
|
|
|
|
|
|
|
- **开发视图**:描述系统中的子系统、模块、文件、资源及其之间的关系,主要图形包括component diagrams等;
|
|
|
|
|
|
|
|
- **进程视图**:描述系统的进程及其之间的通信协作关系,主要图形包括activity diagram,interaction diagram等;
|
|
|
|
|
|
|
|
- **物理视图**:描述系统如何被安装、部署与配置在分布式的物理环境下,主要图形包括deployment diagram等。
|
|
|
|
|
|
|
|
- **4+1视图模型是一种已经被标准化(UML, RUP)的方法,用来描述和文档化软件系统的体系结构。**
|
|
|
|
|
|
|
|
- **每个视图从不同的角度刻画了系统的结构属性,将它们综合在一起就形成了系统的整体架构。**
|
|
|
|
|
|
|
|
- 逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构。
|
|
|
|
|
|
|
|
- 对于不同类型的软件系统来说,侧重的角度也有所不同。
|
|
|
|
|
|
|
|
- 例如,对于管理信息系统来说,比较侧重于从逻辑视图和开发视图来描述系统,而对于实时控制系统来说,则比较注重于从进程视图和物理视图来描述系统。
|
|
|
|
|
|
|
|
- 不是所有的软件体系结构都需要完整的“4十1”视图。没有用的视图在体系结构描述中可以被省略。例如对于非常小的系统,逻辑视图和开发视图有可能非常相似以至于没有必要把它们分开描述。场景视图在各种环境下都是有用的。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 软件体系结构的生命周期
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 软件研发过程
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 软件体系结构的生命周期
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 非形式化描述
|
|
|
|
|
|
|
|
- 规范描述
|
|
|
|
|
|
|
|
- 求精及验证
|
|
|
|
|
|
|
|
- 实施
|
|
|
|
|
|
|
|
- 演化和扩展(修改体系结构)
|
|
|
|
|
|
|
|
- 评价和度量(重用体系结构)
|
|
|
|
|
|
|
|
- 总结
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 讨论题
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>软件体系结构的描述有哪几种方式?各有何特点?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (1)非标准图形符号描述:语义丰富、不精确、没有形式化基础;
|
|
|
|
|
|
|
|
- (2)统一建模语言UML:语义丰富、相对精确、有少量的形式化基础;
|
|
|
|
|
|
|
|
- (3)模块接口语言:语义比较丰富,但局限在实现级别,层次较低,语义精确,有编译器作保证,没有或极少有形式化基础;
|
|
|
|
|
|
|
|
- (4)体系结构描述语言ADL:语义不够丰富,语义精确,有形式化基础。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>建立软件体系结构模型的作用是什么?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (1)用户、软件架构师、开发者等各方人员之间的交流;
|
|
|
|
|
|
|
|
- (2)分析、验证SA设计的优劣;
|
|
|
|
|
|
|
|
- (3)指导软件开发组进行软件开发;
|
|
|
|
|
|
|
|
- (4)为日后的软件维护提供基本文档。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>请简述SA建模的三个层次。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (1)图形化模型:
|
|
|
|
|
|
|
|
- 从不同的视角描述特定系统的体系结构,从而得到多个视图,并将这些视图组织起来以描述整体的SA模型;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (2)形式化模型:
|
|
|
|
|
|
|
|
- 在SA基本概念的基础上,选取适当的形式化或半形式化的方法来描述一个特定的体系结构;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (3)文档化模型:
|
|
|
|
|
|
|
|
- 记录和整理软件体系结构设计方案的各类细节。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 请简述使用“多视图模型”进行SA建模的原因。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 软件体系结构非常复杂,无法用简单的一维模型加以描述。
|
|
|
|
|
|
|
|
- 从多个不同角度建立SA的模型,分别刻画SA某一方面的性质,系统的每一个不同的视图反映一组系统相关人员所关注的系统的特定方面;
|
|
|
|
|
|
|
|
- 多视图体现了“关注点分离”的思想,使系统更易于理解,方便系统相关人员之间进行交流,并且有利于系统的一致性检测以及系统质量属性的评估。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 软件体系结构生命周期主要包括哪些阶段?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 非形式化描述
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 规范描述
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 求精及验证
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 实施
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 演化和扩展(修改体系结构)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 评价和度量(重用体系结构)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 终结
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>软件体系结构建模的“4+1视图模型”中包括哪些视图,各视图分别关注软件的哪些特征,常采用UML的何种图形描述?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(1)**逻辑视图**:着重考虑功能需求,主要关注行为或指责的划分,并将不同的职责分配给逻辑层、功能模块或类等不同粒度的逻辑单元。可以用**包图、类图、对象图(静态部分)或序列图、协作图、状态图和活动图(动态内容)来描述**。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(2)**开发视图**:主要考虑开发期质量属性,如可扩展性、可重用性、可移植性、易理解性、易测试性等等,其关注点是软件模块的实际组织方式。可以用**包图、类图、构件图表述**。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(3)**进程视图**:着重考虑运行期质量属性,如性能、可伸缩性、持续可用性等,主要关注进程、线程、对象等运行期概念,以及相应的并发、同步、通信等问题,可以**用包图、类图、对象图(静态部分)或序列图、协作图(动态部分)表述**。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(4)**物理视图**:主要考虑安装和部署需求,描述运行环境的计算机、网络、硬件设施等情况。同时,物理视图还必须关注如何配置硬件环境来配合软件的特殊质量属性。一般**用部署图和构件图描述**。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(5)**用例视图:是系统重要活动的抽象,描述系统的需求。一般用用例图、活动图、顺序图描述。**
|
|
|
|
|
|
|
|
|