一、考点分布
- 软件架构的概念(※※※)
- 基于架构的软件开发(※※※※)
- 软件架构风格(※※※※※)
- 特定领域软件架构(※※※)
- 软件质量属性(※※※※※)
- 软件架构评估(※※※※)
- 软件产品(※※※)
- 构件与中间件技术(※※※)
二、软件架构的概念
架构的本质
- 软件架构为软件系统提供了一个结构、行为和属性的高级抽象。
- 软件架构风格是特定应用领域的惯用模式,架构定义一个词汇和一组约束
架构的作用
- 软件架构是项目干系人进行交流的手段
- 软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量
- 软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础
软件架构=软件体系结构
架构设计就是需求分配,即将满足需求的职责分配到组件上。
三、架构发展历程
架构的4+1视图
四、软件架构风格-ADL
ADL是一种形式化语言,它底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架。
ADL三个基本要素:
- 构件:计算或数据存储单元
- 连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则
- 架构配置:描述体系结构的构件与连接件的连接图
五、基于架构的软件开发方法-概念
ABSD方法是架构驱动,即强调由业务、质量和功能需求的组合驱动架构设计。
ABSD方法有三个基础:
- 功能的分解。在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术
- 通过选择架构风格来实现质量和业务需求
- 软件模块的使用
视角与视图:从不同的视角来检查,所以会有不同的视图
用例用来捕获功能需求、特定场景用来捕获质量需求。
六、软件架构风格
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。
6.1 数据流风格
基本思想:把数据分步骤处理
优点:
- 松耦合
- 良好的重用性/可维护性
- 可扩展性(标准接口适配)
- 支持并行
缺点:
- 交互性较差
- 复杂性较高
- 性能较差(每个过滤器都需要解析与合成数据)
典型实例
- 传统编译器
- 网络报文处理
数据流分格
- 批处理序列:大量整体数据、无需用户交互
- 管道-过滤器:流式数据、弱用户交互
6.2 调用/返回风格
调用返回风格
- 主程序/子程序:面向过程
- 面向对象:对象的方法调用
- 分层:层与层之间的方法调用
分层架构风格
分层风格的优缺点
优点:良好的重用性,只要接口不变可用在其他处;可维护性;可扩展性好,支持递增设计。
缺点:并不是每个系统都方便分层;很难找到一个合适的、正确的层次抽象方法;不同层次之间耦合度高的系统很难实现。
特点:各个层次的组件形成不同功能级别的虚拟机;多层相互协同工作,而且透明。
6.3 独立构件风格
保证构件相互独立:不直接交互
优点:松耦合;良好的重用性/可修改性/可扩展性
缺点:构件放弃可对系统计算的控制。一个构件触发一个事件时,不确定其他构件是否会响应它。而且即使它知道事件注册了哪些构件的过程,它也不能保证这些过程调用的顺序;数据交互问题;由于过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理就存在问题。
特点:系统由若干个子系统构成且成为一个整体;系统有统一的目标;子系统有主从之分;每一子系统有自己的事件收集和处理机制。
6.4 虚拟机风格