1 软件视图的分类
现代软件系统非常复杂,通常在某个具体的时间内只需将注意力集中在某几个结构上(就像看病时,医生只是将注意力集中在某方面的人体结构上,骨科医生与心血管科医生关心不同的结构),结构是元素本身的集合,而视图则是捕获和表达结构(文档描述),虽然它们有区别,但在实际使用时则不严格区分,即从系统体系的角度说是结构,从文档角度说是视图。
软件架构是一种无法以简单的一维方式进行说明的复杂实体,从不同侧面的描述就是视图。架构的优势也在于使用视图:每个视图强调系统的某一个方面,同时忽视系统的其他方面,以便有助于处理或理解当前问题,描述完整的系统架构必须具备完整的视图集, “4+1” 方法就是一类完备视图集。
软件视图通常分为三种类型:
(1)模块视图类型:为系统的主要模块实现单元编档。
(2)构件和连接件视图类型:为系统的构件和连接件执行单元编档。
(3)分配视图类型:为软件的开发和执行环境之间的关系编档。
每一视图类型中,又有一些常用的形态,可以把这些形态归纳成架构风格(简称风格),大量的架构风格供架构设计师选用,例如客户机 / 服务器是一种常见的架构风格,它是构件和连接件视图类型中的一员。架构风格是对元素和关系类型的特化,它还包括如何使用这些元素和关系类型的一组限制条件。架构结构 / 视图分类如下所示。
(1)模块视图分类
架构风格
说明
应用
分解
大模块分解为小模块,小到容易理解
资源分配、项目结构化与规划;信息隐蔽、封装;配置控制
使用
一个单元的正确性依赖于另一个单元的正确性
设计子集;设计扩展(增量开发)
分层
上层使用下层服务;实现隐藏细节抽象
增量式开发;基于“虚拟机”上的可移植性
类或泛化
“继承自”或“是一个实例”;共享访问方法
面向对象设计(使用公共模板)
(2)构件-连接器视图类型
架构风格
说明
应用
客户机-服务器
构件是客户机和服务器,连接件是协议及共享消息
分布式操作;关注点分离(支持可修改性);负载均衡
进程或通信进程
通过通信、同步或排除操作形成进程或线程之间的关联
调度分析;性能分析
并发
在相同“逻辑线程”上运行
确定资源争用;分析线程
共享数据
运行时产生数据、使用数据(共享数据存储库)
性能;数据完整性;可修改性
(3)分配视图类型
架构风格
说明
应用
部署
功能分配给软件(进程)、硬件(处理器)和通信路径
性能、可用性、安全性说明
实现
模块映射到开发活动中
配置控制、集成、测试活动
工作分配
将责任分配到适当的开发小组,特别是公共部分不是每个人去实现
项目管理、管理通用性,最好的专业技术安排
2 模块视图类型及其风格
模块将遵循某种方式将软件系统分解成可管理的功能单元。架构模块视图是通过文档来枚举系统的主要实现单元或模块,及这些单元之间的关系。
任务完整的架构文档必须包含有模块视图,它为源代码提供蓝图。该类型如下表所示。
类型
说明
元素
元素就是模块,它是一种能够提供内聚功能单元的软件实现单元。
关系
1. 部分关系:模块间部分-整体关系,如分解关系;2. 依赖关系:如共享数据、调用;3. 特化关系:定义了较为特殊的模块和一般模块之间的关系,如面向对象中的继承。
元素特征
1. 必须遵守命名空间规则的名称;2. 模块责任:应该使用责任特性定义模块功能;3. 实现信息。
关系特征
1. 部分关系:拥有相关的可见性特征,这种特征确定了子模块在聚集模块之外是否可见;2. 依赖关系:拥有分配的约束条件,以便详细规定两个模块之间的依赖性关系;3. 特化关系:拥有实现特性,如特殊模块继承一般模块的实现方案。
下面对模块视图的四种风格进行总结。
(1)分解风格
分解风格能展示向模块分配责任的方式。
类型
说明
元素
模块,有时将具有独立完整功能的模块称为子系统。
关系
分解关系,它是部分关系的精化形式,文档必须定义分解的标准。
关系特征
可见性,模块被其父模块之外的模块了解的程度及其功能对于这些外部模块的可用程度。
其他
1. 分解视图中不允许出现循环;2. 在一个视图中,一个模块不能同时属于多个模块。
(2)使用风格
使用风格能展示模块相互依赖的方式。
类型
说明
元素
模块
关系
使用关系,它是“依赖关系”的精化形式,如果模块 A 依赖于功能正常的模块 B 的存在来满足自己的需求,那么模块 A 就是在使用模块 B。
关系特征
描述一个模块会以哪种方式使用另一个模块。
(3)分层风格
分层风格能将系统分割成一组虚拟机,通过 “ 允许使用 ” 关系相互关联,分层风格能帮助实现可移植性和可修改性。
类型
说明
元素
层
关系
它是模块视图类型一般的“依赖关系”的特化。如果 P1 的正确性依赖于当前 P2 的正确实现,就说 P1 使用 P2。
关系特征
1. 层的名称;2. 层包容的软件单元;3. 允许层使用的软件。【1】层间和层内的使用规则,如高层可以使用较底层的软件和不允许软件使用同一层的其它软件;【2】这些规则可以容许的例外情况。
其他
每一部分软件只能分配给一个层。
(4)泛化风格
泛化风格能展示一个模块如何成为另一个模块的泛化或特化,从而使模块之间产生关联。它广泛应用于面向对象的系统,能展示继承性,并能用来使用模块之间的共性。
类型
说明
元素
模块
关系
泛化关系,即模块视图类型中的特化关系。
元素特征
除了模块视图类型中为模块定义的特性外,模块还能拥有抽象特性,抽象特性能定义拥有的接口但没有实现方案的模块。
关系特征
泛化关系能拥有一种区别接口和实现继承的特性。
其他
1. 不允许出现循环,子模块不能是父模块的泛化;2. 模块能拥有多个父模块,但不提倡这种多重继承。
3 C&C 视图类型及其风格
C&C 视图能定义由具有某种运行时存在的元素模型,这些元素包括进程 、 对象 、 客户机 、 服务器及数据存储器等。此外,它还包含作为元素的交互路径,如通信链路和协议 、 信息流及共享存储器访问。通常,可利用复杂的基础结构(如中间件框架 、 分布式通信信道和进程调度)来执行这些交互操作。
类型
说明
元素
1. 构件类型:主要处理单元和数据存储器;2.连接件类型:交互机制;
关系
1. 构件且有接口,这种接口被称为端口。连接件具有接口,这种接口被称为角色;2.连接:构件端口与特定的连接件角色相关联。
元素特征
1. 构件。【1】名称应反映构件功能;【2】类型用于定义一般功能、端口数量、类型及所需特征;【3】其他包括性能和可靠性值等(取决于构件类型)。2. 连接件。【1】名称应反映连接件的交互功能;【2】类型定义交互性质、角色数量、类型及所需特征;【3】其他包括交互协议和性能值等(取决于连接件类型)。
C&C 视图风格是 C&C 视图类型的特化, C&C 视图风格为数不少,下面对 C&C 视图的几种风格进行总结。
(1)管道和过滤器风格
管道和过滤器风格中的交互模式表现出数据流连续变换的特征。数据抵达过滤器并经过转换后由管理传送给下一个过滤器。
类型
说明
元素
1.构件为过滤器。过滤器端口必须是输入端口与输出端口。2. 连接件为管道。管道扮演数据输入与数据输出角色。
关系
连接关系能使过滤器输出端口与某个管道的数据输入角色相关联,使过滤器输入端口与多个管道的数据输出角色相关联,并能确定交互过滤器的图形。
计算模型
1.过滤器是从其输入端口读取数据并将数据流写入其输出端口的数据转换器;2. 管道能将数据流从一个过滤器传送到另一个过滤器。
(2)共享数据风格
共享数据风格通过保留持久数据来支配交互模式,持久数据由多个数据存取器和至少一个储存库保留。
类型
说明
元素
1.构件为共享数据储存库和数据存取器;2.连接件为数据读写。
关系
连接关系能确定哪些数据存储器将连接到哪些数据储存库。
计算模型
数据存取器之间的通信经由共享数据存储库来完成,控制过程由数据存取器或数据储存库来启动。
特征
可精化为:存储数据的类型、面向性能的数据特征和数据分配。
(3)发布-订阅风格
发布 - 订阅风格用于向一组未知接受者发送事件和消息。可在不修改生产者的情况下添加新的接受者(订阅者)。在发布 - 订阅风格中,构件通过事件发布进行交互。构件可订阅一组事件。
类型
说明
元素
1.构件为任何具有能发布和订阅事件的接口 C&C 构件;2.连接件为发布订阅。
关系
连接关系能将构件与发布-订阅连接件关联起来。
计算模型
宣布事件并能对其他已宣布事件做出反应的独立构件系统。
特征
可精化为:哪些事件由哪些构件宣布,哪些事件由哪些构件订阅,什么时候允许构件订阅事件。
其他
所有构件连接到一个事件分配器,可将该分配器视为总线(连接件)或构件。
(4)客户机-服务器风格
客户机 - 服务器风格能展示构件通过请求其他构件的服务进行交互的过程,将功能划分成客户机和服务器后即可基于运行时准则把它们单独分配给各个级。
类型
说明
元素
1.构件为请求其他构件服务的客户机和向其他构件提供服务的服务器;2.连接件为请求/应答,即客户机对服务器的非对称调用。
关系
连接关系使客户机与连接件的请求角色相关联,使服务器与连接件的应答角色相关联,并确定哪些服务能由哪些客户机请求。
计算模型
客户机能启动各项活动,向服务器请求所需服务,并等待这些请求的结果。
特征
可精化为:可连接的客户机数量和类型及性能特性。
其他
可施加以下限制:1. 与给定端口或角色的连接数量;2.服务器之间允许存在的关系;3.层级。
(5)对等连接
对等连接系统能通过构件之间的直接交换支持服务交换。它是一种调用/返回风格。
(6)通信-进程风格
通信 - 进程风格的特征表现在通过各种连接件机制并发执行构件的交互,如通过同步 、 消息传递 、 数据交换 、 启动和停止等进行交互。
类型
说明
元素
1.构件为并发单元,如任务、进程和线程;2.连接件为数据交换、消息传递、同步、控制和其他类型的通信。
计算模型
通过特定连接件机制进行交互的并发执行构件。
特征
1. 并发单元:可抢占性,它表示并发单元的执行可被另一个并发单元抢占,或并发单元将继续执行,直到它自愿中止自己的执行;优先性影响调度;时间参数定义周期和最后期限等。2. 数据交换:缓冲表示如果不能立即处理消息就会把消息先保存起来;协议用于通信。
4 分配视图类型及其风格
硬件、文件系统和团队结构都会与软件架构进行交互,将软件架构映射到其环境的一般形式称为“分配视图类型”。
类型
说明
元素
软件元素和环境元素。
关系
软件元素被分配到环境元素。
元素特征
软件元素拥有要求的特征,环境元素拥有提供的特征,前者必须与后者匹配。
关系特征
取决于特定风格。
分配视图类型的三种常见风格为:
部置风格:能描述构件和连接件对硬件的映射,硬件是软件执行的场所。
实现风格:能描述模块对包含它们的文件系统的映射。
工作任务风格:能描述模块对承担模块开发任务的人员、团队或小组的映射。
(1)部置风格
部置风格体现为 C&C 风格(如通信-进程风格)的元素被分配到执行平台。
类型
说明
元素
软件元素通常是 C&C 视图类型中的进程;环境元素计算硬件,如处理器、内存、磁盘和网络等。
关系
软件元素驻留在哪些物理单元上,分配是动态的。
元素特征
软件元素要求的特征:重要的硬件特征,如处理器、内存、容量需求和容错性;环境元素提供的特征:影响分配决策的重要硬件特征。
关系特征
分配到……
(2)实现风格
实现风格能将模块视图类型中的模块映射到开发基础结构。实现一个模块总会产生许多独立文件,必须对这些文件进行组织,以免失去对系统的控制及系统的完整性。通常利用配置管理技术进行文件管理。
类型
说明
元素
软件元素通常是模块;环境元素配置条目,如文件或目录。
关系
包含关系,规定一个配置条目由另一个配置条目所包容;“分配到……”关系,描述将模块分配到配置条目。
元素特征
软件元素要求的特征:如对数据库等开发环境的需求;环境元素提供的特征:对开发环境提供的特征的指示。
其他
分层配置条目:“包容在……”
(3)工作任务风格
软件项目的时间和预算估计取决于工作分解结构( WBS ),而工作分解结构则取决于软件架构。工作任务风格将软件架构映射到由人组成的团队之中,实现这一项目管理的目的。
类型
说明
元素
软件元素通常是模块;环境元素:组织单元,如人员、团队、部门和分包商。
关系
“分配到……”关系,描述将模块分配到配置条目。
元素特征
技能集:所需技能和提供的技能。
其他
分层配置条目:“包容在……”
工作任务风格与模块分解风格关系密切,它能将模块分解风格用作其分配映射的基础。这种风格能通过添加与开发工具 、 测试工具和配置管理系统等对应的模块分解进行扩展。工作任务风格还通常与其他风格联合使用,例如,团队工作任务可以是模块分解风格中的模块,可以是分层图中的层,也可以是多进程系统中的任务或进程。
5 各视图类型间的映射关系
为了完整地描述一个架构,必须使用多个视图,这些视图必须遵守一定的映射关系。
(1)模块视图类型中的视图通常会映射到构件和连接件视图类型中的视图。模块实现单元将映射到运行时构件。
(2)系统的构件和连接件视图和模块视图之间的关系可能会非常复杂。同样的代码模块可由 C&C 视图的许多元素执行。反之, C&C 视图的单一构件可执行由许多模块定义的代码。同样, C&C 构件可能会拥有许多与环境进行交互的点,每个交互点由同一模块接口定义。
(3)分配视图类型是为有效地实现软件架构的辅助性视图,它将其他视图类型中的软件元素映射到软件环境中,即反映其他视图与软件环境之间的关系。