【系统分析师】12.1 软件架构的概念

🧩 一、概述:系统的"骨架"与"灵魂"

软件架构是有关软件整体结构与组件的抽象描述,它定义了系统的高层组织,包括组成系统的构件、构件之间的交互关系,以及指导系统设计和演化的原则。它是软件系统的"骨架",支撑起整个系统的功能实现和质量属性;同时它也是系统的"灵魂",决定了系统的质量特性、技术风险和长期演进能力。

对于系统分析师而言,理解软件架构的概念是进入架构设计领域的"第一道门"。你需要建立这样的认知:架构不是"画几张图"那么简单,而是关于重大设计决策的系统性思考,这些决策将深刻影响项目的成败。

本节的知识框架:

· 软件架构的多种定义

· 软件架构的组成要素

· 软件架构与相关概念的区别

· 软件架构的重要性和作用

· 架构关注的质量属性

· 架构设计的决策与产出

🏗️ 二、详细讲解:软件架构的核心内涵

1️⃣ 软件架构的定义

软件架构的定义有多种视角,最经典的是IEEE标准1471-2000中的定义:

软件架构是一个系统在其所处环境中的基本概念或属性,体现在它的构件、外部可见关系以及设计和演化的原则中。

更通俗的定义来自软件工程领域权威专家:

专家 定义核心 侧重点

Mary Shaw & David Garlan 软件架构是"对系统整体结构设计的描述,包括构件、连接件、约束以及它们之间的相互关系" 构件+连接件+约束

Len Bass, Paul Clements, Rick Kazman "软件架构是系统的一组结构,包含软件元素、它们的外部可见属性以及它们之间的关系" 结构+外部可见性

Martin Fowler "架构是关于重要事物的抽象,那些一旦做出就很难更改的决策" 重大决策

综合而言,软件架构包含三个核心要点:

  1. 构件:系统的组成单元(不同粒度,可以是子系统、模块、类等)

  2. 结构:构件之间的组织方式(如层次、分布、拓扑)

  3. 关系:构件之间的连接和交互(如调用、消息传递、依赖)

📌 速记口诀:"构件结构加关系,架构定义三核心;IEEE标准更全面,还有演化原则需"。

2️⃣ 软件架构的组成要素

一个完整的软件架构描述通常包含以下要素:

要素 描述 示例

构件 承担特定计算功能的单元,是系统的功能载体 Web服务器、数据库、业务模块

连接件 构件之间的交互机制,定义构件如何通信 RPC、消息队列、HTTP协议

约束 对构件和连接件的限制条件 只能通过API访问、必须异步通信

配置 构件和连接件如何组织成整体结构 三层结构、微服务拓扑

属性 构件或连接件的非功能特征 性能、可靠性、安全性要求

原理 指导架构设计和演化的原则 分层原则、松耦合原则

构件与连接件是架构的核心元素,类比硬件系统中的"芯片"和"导线":

· 构件:实现特定功能的"芯片"

· 连接件:连接芯片的"导线",定义交互协议

约束与配置描述了构件和连接件如何组装成一个有机整体,类似于"电路板布局图"。

属性反映了对质量的要求,原理则是架构决策背后的指导思想。

📌 速记口诀:"构件连接件,约束配置属性原理,六要素定架构"。

3️⃣ 软件架构与相关概念的区别

概念 定义 与架构的关系

设计模式 在特定上下文中解决常见设计问题的通用解决方案 模式是架构的"局部解决方案",架构可以包含多个模式

框架 特定领域的可复用半成品软件,定义了整体结构和交互流程 框架是实现架构的一种方式,体现了特定的架构风格

体系结构 有时与架构同义,但更强调系统的整体结构和组织 通常与软件架构混用,但在系统工程中可能更广义

模块 按功能划分的软件单元,是构件的具体表现形式 模块是构件的一种,模块化是架构的重要原则

组件 可独立部署、复用的软件单元,比构件更具体 在基于组件的开发中,组件是实现构件的技术形式

关键区别:

· 架构是"宏观设计",关注整体结构和重大决策

· 设计模式是"中观设计",关注局部问题的可重用方案

· 框架是"半成品",提供了实现架构的基础设施

· 组件是"可复用单元",架构中的构件可能由组件实现

📌 速记口诀:"架构宏观定格局,模式中观解局部,框架半成供设施,组件复用构细节"。

4️⃣ 软件架构的重要性和作用

软件架构在软件工程中扮演着多重角色,是项目成功的关键因素:

作用 说明 受益方

沟通媒介 为项目干系人提供统一的交流语言,降低沟通成本 所有干系人

设计决策的载体 记录早期重大技术决定,便于理解和维护 开发团队、维护团队

可复用资产 形成组织级架构知识库,为后续项目提供经验 组织

质量预测的基础 通过架构分析可以预测系统的性能、安全性等质量属性 测试团队、质量保障

复杂性管理工具 通过分解、抽象、分层等手段控制系统复杂度 架构师、开发人员

项目规划的输入 为任务分解、团队组织、资源配置提供依据 项目经理

演化的蓝图 指导系统的后续扩展和修改,确保演化的一致性 维护团队

沟通媒介是架构最直接的作用。用户、管理者、开发人员、测试人员可以通过架构图建立对系统的共同理解。

设计决策是架构的"记忆"。架构不仅记录"结果",还应记录"为什么"------做出这些决策的依据和权衡。

可复用资产是架构的长期价值。成熟的架构风格、参考架构可以在组织内传承,避免重复犯错。

质量预测是架构的"前瞻性"。在编码之前,通过架构评估就能发现潜在的质量风险,这是性价比最高的质量保证手段。

📌 速记口诀:"沟通决策可复用,质量预测管复杂,规划演化六作用,架构价值处处显"。

5️⃣ 架构关注的质量属性

软件架构设计要满足一系列质量属性,这些属性分为运行期质量和开发期质量两大类:

类别 质量属性 描述

运行期质量 性能 系统的响应时间、吞吐量、资源利用率

安全性 系统抵御未授权访问和攻击的能力

可用性 系统在故障时仍能提供服务的能力(如99.99%可用性)

可靠性 系统在指定条件下正常运行的概率

可伸缩性 系统在负载增加时保持性能的能力

可观测性 系统运行状态可监控、可诊断的程度

开发期质量 可维护性 系统易于修改和扩展的能力

可测试性 系统易于测试的程度

可部署性 系统能够方便部署到运行环境的能力

可复用性 系统的构件可在其他项目中复用的程度

可理解性 系统结构和代码易于理解的程度

质量属性之间的权衡:架构设计常常需要在不同质量属性之间做出权衡。例如:

· 性能 vs 安全性:加密解密会消耗时间,降低性能

· 可伸缩性 vs 一致性:分布式系统的高可用往往需要牺牲强一致性(CAP定理)

· 可维护性 vs 性能:高度模块化的设计可能引入额外开销

架构设计的本质就是在这些质量属性之间找到最合适的平衡点,满足项目的业务目标和约束。

📌 速记口诀:"运行期五性:性安可伸观;开发期五性:维试部解复;属性之间需权衡,架构本质求平衡"。

6️⃣ 架构设计的过程与产出

架构设计过程(简化版):

```

需求分析\] → \[架构目标定义\] → \[候选方案提出\] → \[方案评估与选择\] → \[架构文档化\] → \[架构验证

```

阶段 主要活动 产出

架构目标定义 从需求中提取关键质量属性,设定架构目标 质量属性场景

候选方案提出 基于架构风格、参考架构提出多个可选方案 架构方案草图

方案评估与选择 使用ATAM等方法评估各方案,做出决策 选型决策报告

架构文档化 使用4+1视图、C4模型等描述架构 架构文档

架构验证 通过原型、评审验证架构的可行性 验证报告

架构设计的核心产出:

· 架构视图集:从不同角度描述系统(4+1视图)

· 架构决策记录:记录重大决策的理由和权衡

· 质量属性分析:说明架构如何满足质量需求

· 技术选型清单:关键技术的选择和依据

· 架构约束和原则:指导后续开发的规则

📝 三、重点总结与速记方法

✅ 核心重点

  1. 软件架构的定义:系统的一组结构,包含构件、外部可见关系和设计演化原则(IEEE定义)。

  2. 六大组成要素:构件、连接件、约束、配置、属性、原理。

  3. 架构与相关概念的区别:架构(宏观)、设计模式(中观)、框架(半成品)、组件(可复用单元)。

  4. 架构的六大作用:沟通、决策记录、可复用、质量预测、复杂性管理、项目规划、演化蓝图。

  5. 质量属性两大类别:运行期质量(性能、安全、可用、可靠、可伸缩、可观测)和开发期质量(可维护、可测试、可部署、可复用、可理解)。

  6. 架构设计的本质:在相互冲突的质量属性之间寻找平衡,满足业务目标。

⚡ 速记口诀

1️⃣ 定义"三要素"口诀

"构件结构加关系,三要素定架构;加上演化原则,IEEE定义全"

2️⃣ 六大要素"六字诀"

"构件连接件,约束配置属性原理"

3️⃣ 相关概念"四层次"口诀

"架构宏观定格局,模式中观解局部,框架半成供设施,组件复用构细节"

4️⃣ 架构作用"六角色"口诀

"沟通决策可复用,质量预测管复杂,规划演化六作用"

5️⃣ 质量属性"十属性"口诀

"运行期:性安可伸观;开发期:维试部解复"

(性能、安全、可用、可靠、伸缩、观测;维护、测试、部署、理解、复用)

6️⃣ 一句话总纲

软件架构 = (构件+连接件+约束) 定义系统的宏观结构,承载质量属性的权衡,是重大设计决策的记录,也是项目干系人沟通的媒介和系统演化的蓝图。


掌握12.1节,意味着你对软件架构建立了正确的认知------它不仅是技术图景,更是沟通工具、决策载体和质量保障的基石。这是系统分析师迈向架构师角色的重要理论基础。

相关推荐
FC皇家慕尼黑1 小时前
Claude Code学习--从搭建Nano Claude Code学习CC机制的底层原理
学习·ai·claude code
happymaker06262 小时前
web前端学习日记——DAY01(HTML基本标签)
前端·学习·html
FC皇家慕尼黑2 小时前
Claude Code学习--从搭建Nano Claude Code学习CC机制的底层原理pt2
学习·ai·claude code
handler012 小时前
基础算法:分治
c语言·开发语言·c++·笔记·学习·算法·深度优先
码喽7号2 小时前
Springboot学习六:MybatisPlus的多表查询以及分页查询
java·spring boot·学习
艾莉丝努力练剑2 小时前
【MYSQL】MYSQL学习的一大重点:数据库基础
linux·运维·服务器·数据库·c++·学习·mysql
xdl25993 小时前
【Python学习】网络爬虫-爬取豆瓣电影评论
爬虫·python·学习
_饭团3 小时前
C语言数组全解析:从入门到精通
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
川爻3 小时前
Superstore Sales Dataset数据分析(兼数据分析步骤学习)
学习·数据挖掘·数据分析