2 概述
- 体系结构是指整个系统构成的基本和主体形态。
- 体系结构成为建立和考察系统的总体指导或基本出发点
- 软件的复杂性打破了以往硬件与软件的平衡,SA被提出了
- 软件体系结构是软件在设计构成上的基本、可供设计选择的形态和总体结构。
- 软件设计中可供选择的结构形态
- 每个结构概念都传达了一些信息
- 有关领域愈是成熟和发展,人们对结构的认识也就愈加深刻
- SA概念的提出和应用,说明了软件设计技术在高层次上的发展并走向成熟
软件体系结构的发展
软件体系结构构成
- 软件体系结构定义了软件的局部和总体计算部件的构成,以及这些部件之间的相互作用关系。
- 体系结构是由结构和功能各异、相互作用的部件集合,按照层次构成的。
- 体系结构的各组成部分应该易于被重用以组成更大的或者新的系统
- 层次的规范性便于进行系统功能和非功能性分析
- SA的定义:
- 体系结构 = 组件 + 连接件 + 约束
- Architecture = Components + Connectors + Constrains
体系结构的类别:
- 概略型
- 需求型
- 设计型
好的软件体系结构,是好的软件的必要条件。
SE的目标:软件质量
软件质量:
- 运行时质量
- 非运行时质量
- 体系结构质量
- 通过观察可以得知的质量
- 通过观察不能得知的质量
影响软件质量的因素
Correctness/Functionality 功能正确
定义:做该做的事情,并且作得对
- 软件只能被发现有错,不能被证明无错
- 正确性与体系结构无关
Performance性能
定义:系统的响应时间,硬件资源的占用率
Architect的手段:
- 分而制之
- 监测与调节
- 简单的资源申请与释放机制
Security 安全
定义:在对合法用户提供服务的同时,阻止未授权用户的使用企图。
Architect的手段:
- 入侵监测
- 防火墙
- 加密与解密
- 提供最少的入口
- 安全核心和外壳
Robustness/Availability鲁棒性、可信性、健壮性
定义:能长时间正确运行并快速从错误状态恢复到正确状态
没有绝对的健壮
Architect的手段:
- 广泛适用的错误恢复策略
- 提防不可靠的传送
- 冗余关键部件和通讯线路
- 现场切换能力
- 监测活跃状态和错误报告
- 错误产生、捕获和传播的模板
- 快速恢复或启动策略
Usability/Ease of use易用性
定义:最终用户容易使用和学习
Don’t pretend you know the user; you don’t.
Architect的手段:
- 仿照现有的工具和环境
- 统一的界面外观和工具
- 统一风格的帮助
Modifiability适应性
定义:系统很容易被修改从而适应新的需求或采用新的算法、数据结构的能力
改一个组件比改多个组件要容易,但改变一个体系结构则难得多
组件由体系结构定义,所以体系结构对此影响很大
Architect的手段:
- 稳定的功能分解与分配
- 信息隐藏和抽象
- 分层
- 退耦
Portability移植性
定义:软件可以很简单地在平台间移植
Architect的手段:
- 为平台/网络独立分层
- 建立接口标准
Reusability 重用性
定义:在新系统中应用已有的组件
Architect的手段:
- 规则和小型的模式
- 建立应用框架
- 建立产品线体系结构
Integrability 集成性
定义:让分别开发的组件在一起正确的工作
Architect的手段:
- 最小化接口的复杂度
- 限制交互机制和协议的数量
- 建立产品线体系结构
- 统一的命名规范
Testability可测性
定义:让软件容易被证明是错的
Architect的手段:
- 自检、捕获、回放、故障注入和报告
- 一致的错误处理方式
Compatibility兼容性
定义:易于把软件元素和其他软件结合
Architect的手段:中间件
Economy 经济效益
定义:开发成本、开发时间和对市场的适应能力
Architect的手段:
- 正确的选择体系结构
- 组件重用
- Modifiability
怎样提高质量?
使体系结构:
- 易于理解
- 可度量
- 可复用
- 可文档化
- 易于交流和执行
当前的软件设计
体系结构的理论和工具是解决软件复杂性和工程设计的必由之路
软件设计的层次
- 层次划分是人们考虑并解决问题的方式方法
- 每个层次的设计可单独进行
- 低层次级为了高层次级服务
- 每个层次都包括:
- 构成系统的部件
- 部件合成系统的规则
- 软件设计的层次
- 结构级
- 代码级
- 执行级
体系结构与软件的工程设计
实现体系结构指导下的软件工程设计,关键就是要建立软件结构的分析和构造方法。
- 软件复用就是具有特定性能的模式或部件在不同应用中的多次频繁使用。
- 体系结构对于软件具有宏观的视角,但体系结构设计的问题包含了软件结构的各个层次。
- 软件体系结构风格为大粒度的软件重用提供了机会。