系统架构设计师-1.1-系统架构概述
转载于 https://zhuanlan.zhihu.com/p/657466672,学习笔记。
1.1 系统架构概述
系统架构(System Architecture)是系统的一种整体的高层次的结构表示,是系统的骨架和根基,支撑和链接各个部分,包括组件、连接件、约束规范以及指导这些内容设计与演化的原理。它是刻画系统整体抽象结构的一种手段,也决定了系统的健壮性和生命周期的长短。
1.1.1 系统架构的定义及发展历程
1. 系统架构的定义
系统架构设计的目的是对需要开发的系统进行一系列相关的抽象,用于指导系统各个方面的设计与实现。
架构设计的作用主要包括以下几点:
- 解决相对复杂的需求分析问题;
- 解决非功能属性在系统占据重要位置的设计问题;
- 解决生命周期长、扩展性需求高的系统整体结构问题;
- 解决系统基于组件需要的集成问题;
- 解决业务流程再造难的问题。
系统架构设计是成熟系统开发过程中的一个重要环节,它不仅是连接用户需求和系统进一步设计与实现的桥梁,也是系统早期阶段质量保证的关键步骤。
软件架构(也可称为体系结构)是用来刻画软件系统整体抽象结构的一种手段。
2. 发展历程
(1)架构设计师
系统架构师是承担系统架构设计的核心角色,他不仅连接用户需求和系统进一步设计与实现的桥梁,也是系统开发早期阶段质量保证的关键角色。
系统架构师的职责:掌控整体、洞悉局部瓶颈、依据具体业务场景给出解决方案、确认和评估需求、给出开发规范、搭建系统实现的核心架构、澄清技术细节、扫除技术难点、给出项目管理方法、采用合适的生命周期模型、预防项目风险。
(2)系统架构的定义
- 系统是组织起来完成某一特定功能或一组功能的组件集。
- 环境或者上下文决定了对这个系统的开发、运作、政策以及会对系统造成其他影响的环境和设置。
- 任务是由一个或多个利益相关者通过系统达到一些目标的系统的一个用途或操作。
通过避免软件开发中重复劳动的方式提升软件开发效率并保障软件质量,软件重用与组件化成为解决此次危机行之有效的方案。(软件逐步走向组件化、模块化,提高软件组织和复用的效率)
(3)四个发展阶段
软件架构概念自诞生以来,大致经历了四个发展阶段:
- 基础研究阶段(1968-1994年):模块化开发方法
- 概念体系和核心技术形成阶段(1999-2000年):软件组件化技术
- 理论体系完善与发展阶段(1996-至今):软件架构描述与表示、软件架构分析、设计与测试;软件架构发现、演化与重用;基于软件架构开发方法;软件架构风格;动态软件架构等
- 普及应用阶段(2000-至今)
1)基础研究阶段(1968-1994年)
模块化开发方法是指把一个待开发的软件分解成若干个小的而简单的部分,采用对复杂事物分而治之的经典原则。模块化开发方法涉及的主要问题是模块设计的原则,即系统如何分解成模块。而每一模块都可独立开发与测试,最后再组装成一个完整软件。
▲ 系统分解成模块时应遵循的规则:
- 最高模块内聚。也就是在一个模块内部的元素最大限度地关联,只实现一种功能的模块是高内聚的,具有三种以上功能的模块则是低内聚的。
- 最低耦合。也就是不同模块之间的关系尽可能弱,以利于软件的升级和扩展。
- 模块大小适度。颗粒过大会造成模块内部维护困难,而颗粒过小又会导致模块间的耦合增加。
- 模块调用链的深度(嵌套层次)不可过多。
- 接口简单、精炼(扇入扇出数不宜太大),具有信息隐蔽能力。
- 尽可能地复用已有模块。
面向对象服务架构(Service-Oriented Architecture,SOA):提供一组基于标准的方法和技术,通过有效整合和重用现有的应用系统和各种资源实现服务组件化,并基于服务组件实现各种新业务应用的快速组装,帮助企业更好地应对业务的灵活性。
软件组件化技术
- 组件具有可组装性和可插拔性,每个组件的运行仅依赖于平台或容器。
- 组件化:仅依赖于平台或者容器,即可理解为可单独提供服务的应用。物理(代码)上的隔离,内聚化或功能化高于模块化;集成化低于应用集成。
- 应用集成是将一些基于不同平台或不同方案的应用软件有机地集成到一个无缝的、并列的、易于访问的单一系统中,以建立一个统一的综合应用。
软件架构描述与表示
- C2SADL:基于组件和消息的
- Wright:分布、并发类型的
- ACME:架构互换语言
- UniCon:基于组件和连接的
Rapide:基于事件的
软件架构分析、设计和测试
分析内容:结构分析、功能分析和非功能分析
分析目的:系统被实际构造之前预测其质量属性
常用分析方法: ▲
- 软件架构分析方法SAAM
- 架构权衡分析法ATAM
- 成本效益分析法CBAM
- 基于场景的架构再工程SBAR
- 架构层次的软件可维护性预测ALPSM
- 软件架构评估模型SAEM
架构设计是指生成一个满足用户需求的软件架构过程。
常用架构设计方法: ▲
- 工件驱动(artifact-driven):从工件描述中提取架构描述;
- 用例驱动(use-case-driven):从用例导出架构抽象;
- 模式驱动(pattern-driven):从模式导出架构抽象;
- 域驱动(domain-driven):从领域模型导出架构抽象;
- 属性驱动设计(attribute-driven design):从设计过程中获得架构质量属性需求。
软件风格(架构模式)
是针对给定场景中经常出现的问题提供一般性可重用方案,它反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组成一个完整的系统。
软件架构风格分成主要五类:数据流风格、调用/返回风格、独立组件风格、虚拟机风格和仓库风格。▲▲▲
软件架构是软件生命周期中的重要产物,它影响软件开发的各个阶段。
- 需求阶段:有助于保证需求规约和系统设计之间的可追踪性和一致性;
- 设计阶段:包括软件架构描述、软件架构模型的设计与分析以及对软件架构设计经验的总结与复用等;
- 实现阶段:将设计阶段设计的算法及数据类型用程序设计语言进行表示,满足设计、架构和需求分析的要求,从而得到满足设计需求的目标系统;
- 维护阶段:在软件架构中针对维护性目标进行分析时,需要对一些有关维护性的属性(如可扩展性、可替换性)进行规定。