系统架构设计基础
1. 软件架构的概念
软件架构,即软件体系结构,为软件系统提供一个结构、行为和属性的高级抽象。
软件架构作用:
1)项目干系人进行交流的手段
2)可传递和复用的模型,通过研究软件架构可预测软件的质量
3)使推理和控制的更改更加简单,有助于循序渐进的原型设计
阶段 | 作用和意义 |
需求分析阶段 | 软件需求模型到软件架构模型转换关注的问题: 1. 如何根据需求模型构建软件架构模型(SA模型) 2. 保证模型转换的可追踪性 |
设计阶段 | 软件架构研究关注的最早和最多的阶段。 ADL、4+1视图 |
实现阶段 | |
构件组装阶段 | 可复用构建组装设计能够提高系统实现的效率 |
部署阶段 | 软件架构为部署提供高层架构指导 |
后开发阶段 | 维护、演化、复用 |
架构描述语言ADL
形式化语言,在底层语义模型的支持下,为系统软件的概念体系结构建模提供了具体语法和概念框架(如Aesop,MetaH,C2,Rapide,SADL,Unicon)
ADL的三个基本元素:
构件、连接件、架构配置
4+1视图:
视图 | 视角 | 描述 |
逻辑视图(Logical View) | 最终用户(功能需求) | 类与对象 |
实现/开发视图(Implementation View) | 程序员 | 配置、装配 |
进程视图(Process View) | 系统集成人员 | 性能、可伸缩、吞吐率、并发 |
部署/物理视图(Deployment View) | 系统工程人员 | 发布、安装、拓扑结构 |
用例视图/场景(use-case View) | 分析/测试人员 |
2. 基于架构的软件开发
基于架构的软件开发(ABSD)是架构驱动的,强调由业务【商业】、质量和功能需求的组合驱动架构设计。
ABSD基础:功能分解、通过选择架构风格来实现质量和业务需求、软件模板的使用
视角和视图(描述软件架构)
用例用来捕获功能需求、特定场景【刺激、环境、响应】用来捕获质量需求
开发过程:ABSD能很好的支持软件重用,是一个自顶向下、递归细化的方法,软件系统的体系结构通过该方法得到细化,直到能产生软件构件和类
1)体系结构需求:需求评审的重点是需求是否真实的反映了客户的要求,组的分类是否合理,构件合并是否合理等
2)体系结构设计:设计评审必须邀请独立于系统开发的外部人员
3) 体系结构文档化:主要输出是架构规格说明 和 测试架构需求的质量设计说明书 两个文档
软件架构成功的关键因素:文档的完整性和质量
文档的注意事项:文档要从使用者的角度进行编写、必须分发给所有与系统有关的开发人员、必须保证开发者手上的文档是最新的
4) 体系结构复审:标识潜在的风险,及早发现架构设计中的缺陷和错误
5)体系结构实现:体系结构说明书中定义了系统中构件与构件间的关系。测试包括单个构件的功能性测试及被组装应用的整体功能和性能测试。
6)体系结构演化
3. 软件架构风格
软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束
五大架构风格 | 子风格 |
数据流风格【Data Flow】 | 批处理【Batch Sequential】、管道-过滤器【Pipes and Filters】 |
独立/返回风格【Call/Return】 | 主程序/子程序【Main Program and Subroutine】、面向对象【Object-oriented】、分层架构【Layered System】 |
独立构件风格【Independent Components】 | 进程通信【Communicating Progress】、事件驱动系统(隐式调用)【Event System】 |
虚拟机风格【Virtual Machine】 | 解释器【interpreter】、规则系统【Rule-based System】 |
以数据为中心【Data-centered】 | 数据库系统【Database System】、黑板系统【Blackboard System】、超文本系统【Hypertext System】 |
1) 数据流风格
前一步处理的结果是后一步的输入内容【数据驱动】
优点:松耦合【高内聚-低耦合】,良好的重用性/可维护性,可扩展性【标准接口适配】,良好的隐蔽性,支持并行
缺点:交互性较差,复杂性较高,性能较差(每个过滤器都需要解析和合成数据)
典型实例:传统编译器、网络报文处理
批处理:大量整体数据,无需用户交互
管道-过滤器:流式数据、弱用户交互
2)调用/返回风格
主程序/子程序:面向过程
面向对象:对象的方法调用
分层:层与层之间的方法调用
分层架构优点:1. 良好的重用性(只要接口不变可用在其他处);2. 可维护性好;3. 可扩展性好,支持递增设计
分层架构缺点:1. 并不是每个系统都方便分层;2. 很难找到一个正确的、合适的分层方法;3. 不同层次之间耦合度高的系统很难实现
分层架构特点:1. 各个层次的组件形成不同功能级别的虚拟机;2. 多层相互协同工作,而且实现透明
3)独立构件风格
优点:1. 松耦合;2. 良好的重用性/可修改性/可扩展性
缺点:1. 构件放弃了对系统计算的控制;2. 数据交换的问题;3. 过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理存在问题
特点:系统由若干子系统构成且成为一个整体;系统有统一的目标;子系统有主从之分;每一子系统有自己的事件收集和处理机制
4)虚拟机风格
子分类 | 优点 | 缺点 | 特点 | 适合领域 |
解释器 | 可以灵活应对自定义场景 | 复杂度较高 | 适用于需要“自定义规则”的场合 | |
规则为中心 | 在解释器的基础上增加经验规则 | 使用于专家系统 |
基于规则的系统构成:规则集、规则解释器、规则/数据选择 及 工作内存,一般用在人工智能领域和DSS(决策支持系统)中。
5) 以数据为中心
以数据为中心(仓库风格)包含:数据库系统、黑板系统(语音识别、知识推理)、超文本系统。
架构风格 | 子分类 | 优点 | 缺点 | 特点 | 典型事例 |
以数据为中心 | 数据库系统 | 以数据为中心 | |||
黑板系统 | 可更改、可维护;可重用知识源;容错性和健壮性 | 测试困难;不能保证有好的解决方案;难以建立好的控制策略;低效;开发困难;缺少并行机制 | 在以数据为中心的基础上,使用中心数据触发业务逻辑部件 | 语音识别;模式识别;图像识别;知识推理 |
6)闭环架构控制(过程控制)
适合于嵌入式系统,用于解决简单闭环控制问题
经典应用:空调温控,定速巡航
7)C2风格
基本规则:
构件和连接件都有一个顶部和一个底部;
构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直接连接;
一个连接件可以和任意数目的其他构件和连接件连接;
当两个连接件进行直接连接时,必须由其中一个的底部到另一个顶部;
MDA(Model Driven Architecture)
起源于分离系统规约和平台实现的思想,使用模型完成软件的分析、设计、构建、部署和维护等开发工作。
主要目标:可移植性(Portability)、互通性(interoperability)、可重用性(Reusability)
核心模型:计算无关模型(CIM)、平台独立模型(PIM)、平台相关模型(PSM)、代码Code
软件架构复用
是一种系统化的软件开发过程,通过识别、分析、分类、获取和修改软件实体,以便在不同软件开发过程中重复使用它们。
软件开发过程中重复使用相似或相似 软件元素 的过程。
复用的历史发展线路
函数库 -> 类库 -> 构件库 -> 服务库
复用的维度:
水平复用:不分行业领域、通用
垂直复用:分行业领域、专用
软件架构复用类型:
机会复用:开发过程中,只要发现有可复用资产,就对其进行复用
系统复用:开发之前,要进行规划,以决定哪些需要复用
4. 特定领域软件架构(DSSA)
以一个特定问题领域为对象,形成由领域参考模型、参考需求、参考架构等组成的开发基础架构,支持一个特定领域中多个应用的生成。
DSSA基本活动及产出物
DSSA类型:垂直域(相同领域,深入);水平域(不同领域、平移)
参与DSSA的人员:领域专家、领域分析人员、领域设计人员、领域实现人员
DSSA建立过程:
DSSA三层次模型
5. 软件产品线
核心资源库+产品集合
6. 构件与中间件技术
构件
构件是一个独立发布的功能部分,可以通过接口访问它的服务
特性 | |
模块 | 结构化开发的产物 |
对象 | 一个实例单元,具有唯一的标志;可能具有状态,此状态外部可见;封装了自己的状态和行为 |
构件 | 独立部署单元;作为第三方的组装单元;没有(外部的)可见状态 |
构件复用
检索与提取构件 | 理解与评价构件 | 修改构件 | 组装构建 |
基于关键字的检索;刻面检索法;超文本检索法 | 构件的开发过程需遵循公共标准 | 理想状态是直接复用构件库中的构件 | 组装三种方式:基于功能的组装;基于数据的组装;面向对象的组装 |
构件的分类:
1)独立成熟的构件:数据库管理系统/操作系统
2)有限制的构件:会产生资源冲突、覆盖等影响
3)适应性构件:不兼容性、资源冲突进行了处理
4)装配的构件:目前一些软件商提供的大多数软件产品都属于这一类
5)可修改的构件:可利用重新包装或者写接口来实现构件的版本替换
中间件
中间件是一类构件和系统软件,简化结构、屏蔽差异、利于复用
优点:面向需求、业务的分隔和包容性、设计与实现隔离、隔离复杂的系统资源、符合标准的交互模型、软件复用、提供对应用构件的管理
构件标准:CORBA(解决跨平台问题)、J2EE【EJB】(会话bean: 实现业务逻辑,负责完成服务端与客户端的交互;实体bean: 实现O/R映射,简化数据库开发工作;消息驱动bean:处理并发与异步访问)、DNA 2000
CORBA