软件架构设计
- 软件架构概述
- 架构定义:架构是对系统的抽象、架构由多个结构组成、任何软件都存在架构、元素及其行为的集合构成架构的内容、架构具有"基础性"、架构隐含有"决策"
- 软件架构的重要性:项目关系人之间的交流平台、早期设计决策中架构明确了系统实现的约束条件、架构影响这系统的质量属性、架构为维护的决策提供根据、在较高层面上实现了软件复用、架构对开发的指导与规范意义不容忽略
- 架构的模型:结构模型、动态模型、框架模型、过程模型、功能模型
- 4+1视图模型:最终用户->逻辑视图、编程人员->开发视图、系统集成人员->进程视图、系统工程人员->物理视图 、 场景视图
- 架构需求和质量属性
- 软件的质量属性:运行期质量属性、开发期质量属性
- 一般质量属性:可用性、可修改性、性能、安全性、可测试性、易用性
- 质量属性场景:刺激源、刺激、环境、制品、响应、响应度量
- 可用性:错误检测、错误恢复、错误预防
- 可修改性:局部化修改、防止连锁反应、推迟绑定时间
- 性能:资源需求、资源管理、资源仲裁
- 安全性:抵抗攻击、检测攻击、从攻击中恢复
- 可测试性:输入/输出、内部监控
- 易用性:运行时战术、设计时战术、用户主动操作
- 软件架构风格
- 一个架构定义了一个词汇表和一组约束
- 词汇表:一些构件和连接件类型,约束:将构件和连接件组合起来
- 软件架构风格分类:数据流风格、调用/返回风格、独立构件风格、虚拟机风格、仓库风格
- 数据流风格:批处理序列、管道-过滤器
- 调用返回风格:主程序/子程序、面向对象风格、层次结构风格
- 独立构件风格:进程通信架构风格、事件系统风格
- 虚拟机风格:解释器、规则为中心
- 仓库风格:数据库系统、超文本系统、黑板系统
- 层次系统架构风格
- 二层三层C/S架构风格
- B/S架构风格
- MVC架构风格
- MVP架构风格
- 面向服务的架构
- SOA技术:UDDI、WSDL、SOAP、REST
- SOA实现方法:WebService、服务注册表SR、企业服务总线ESB
- 微服务:技术异构性、弹性、扩展、简化部署、与组织结构匹配、可组合性、对可替代性的优化
- 架构设计
- 演变交互生命周期
- 属性驱动设计法
- 按架构组织开发团队
- 开发骨架系统
- 利用商用构件进行开发
- 软件架构文档化
- 架构文档使用者:系统开发人员、测试和集成人员、项目经理
- 编写文档的规则:从读者角度进行编写、避免出现不必要的重复、避免歧义、使用标准结构、记录基本原理、使文档保持更新(但更新频率不能太高)、针对目标进行评审
- 视图编档:视图目录、上下文图、可变性指南、架构背景、术语表、其他信息
- 跨视图文档
- 使用UML
- 软件架构重构:系统已经存在但不知其架构
- 软件架构评估
- 软件架构评估方法:基于调查问卷或检查表的方式、基于场景的方式、基于度量的方式
- 架构的权衡分析法ATAM(风险点和敏感点进行权衡):方法表述、商业动机、架构表述、对架构方法进行分类、生成质量效用树、分析架构方法、集体讨论场景优先级、分析架构方法、结果表述
- 成本效益分析法(从投资报酬进行权衡):整理场景、对场景进行求精、确定场景优先级、分配效用、质量属性、响应级别、总收益、ROI投资回报率
- 构件及其复用:组件重用,可理解文档,方案,计划,测试用例,代码等,构件开发部门,复用资产部门
- 产品线及系统演化:复用产品核心资产可以提升产品生产效率、降低生产成本和缩短上市时间
- 复用与产品线:需求、元素、建模与分析、测试、项目规划、过程方法和工具、人员、样本系统、缺陷消除
- 基于产品线的架构:产品线架构必须考虑一系列明确许可的变化、产品线架构文档化、产品线架构用户指南
- 产品线的开发模型:前瞻性产品线、反应性模型
- 特定领域软件架构(DSSA):领域分析、领域设计、领域实现
- 架构及系统演化:需求变化归类、架构演化计划、构建变动、更新构件的相互作用、构件组装与测试、技术评审、演化后的架构
- 软件架构视图
- 软件视图分类:模块视图类型、构件连接件视图类型、分配视图类型
- 模块视图风格:分解风格、模块互相依赖、分层风格、泛化风格
- C&C视图风格:管道过滤器风格、共享数据风格、发布订阅风格、客户机-服务器风格、对等连接系统
- 分配视图风格:部署风格、实现风格、工作任务风格