【系统分析师】第12章 软件架构设计

🏛️ 一、概述:软件系统的"骨架"与"蓝图"

软件架构设计是指将软件需求转化为系统顶层设计的过程,它定义了软件的整体结构、组成元素及其相互关系,并为后续的详细设计和实现提供宏观指导。软件架构是系统的"骨架"和"蓝图",决定了系统的质量属性(如性能、安全性、可维护性)和演进能力。

对于系统分析师而言,软件架构设计是你从"需求分析"走向"技术实现"的关键转折点。在需求阶段,你关注"系统必须做什么";在架构设计阶段,你开始思考"系统应该怎么组织"。这一阶段的产出,将直接影响系统的开发效率、运行质量和长期维护成本。

软件架构的核心价值:

· 沟通媒介:为项目干系人(用户、管理者、开发人员、测试人员)提供统一的交流语言

· 设计决策:记录早期的、难以更改的重大技术决定

· 可复用资产:形成可传递和复用的模型,为后续项目提供经验

· 质量预测:通过研究架构可以预测软件的质量属性

· 复杂性管理:将大问题分解为小问题,有效控制系统复杂度

架构设计在生命周期中的位置:

```

系统规划\] → \[需求工程\] → \[软件架构设计\] → \[详细设计\] → \[编码实现\] → \[测试运维

"从做什么到怎么做"的关键过渡

```

本章的知识框架(基于常见教材目录):

· 12.1 软件架构的概念

· 12.2 软件架构风格

· 12.3 软件架构描述与表示

· 12.4 软件架构设计方法

· 12.5 软件架构评估

🏗️ 二、详细讲解:五大核心知识点

1️⃣ 12.1 软件架构的概念

(1)软件架构的定义

软件架构是有关软件整体结构与组件的抽象描述,它包含三个核心要素:

· 组件:系统的组成单元,可以是子系统、模块、应用服务等(不同粒度)

· 结构:组件之间的组织方式,形成特定的系统形态

· 关系:组件之间的连接方式,如调用、依赖、消息传递等

更正式的定义:软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见属性及它们之间的关系组成。

(2)架构设计的目标

软件架构设计要达到的目标包括:

· 可靠性:系统必须稳定可靠地运行

· 安全性:系统必须能抵御未授权访问和攻击

· 可伸缩性:系统能在用户量增加时保持合理性能

· 可扩展性:系统能方便地引入新技术和新功能

· 可维护性:系统易于修改和升级

· 可定制性:系统能根据不同客户需求进行调整

(3)架构与软件复杂度的关系

架构设计的本质是解决软件复杂度带来的问题。软件复杂度有多种表现形式:

· 业务复杂度:如何拆解复杂的业务逻辑,找到合适的组件和结构

· 性能复杂度:如何设计结构以满足高性能要求

· 可用性复杂度:如何确保系统在故障时仍能提供服务

· 可扩展性复杂度:如何使系统易于扩展

📌 速记口诀:"组结构关系,三要素定架构;可靠安全可伸缩,扩展维护可定制,六目标记心间"。

2️⃣ 12.2 软件架构风格

软件架构风格是描述特定软件系统组织方式的惯用模式,它反映了众多系统共有的结构和语义特性,强调对软件设计的重用。

五大架构风格分类:

风格大类 子风格 核心特点 典型实例

数据流风格 批处理、管道-过滤器 数据依次经过处理单元,每个单元对数据进行变换 传统编译器、网络报文处理

调用/返回风格 主程序/子程序、面向对象、层次结构 通过调用关系组织系统功能 分层C/S、MVC、三层架构

独立构件风格 进程通信、事件驱动(隐式调用) 构件独立,通过消息或事件交互 GUI系统、消息中间件

虚拟机风格 解释器、规则系统 自定义执行环境和规则 专家系统、脚本引擎

仓库风格 数据库系统、黑板系统、超文本系统 中央数据存储,独立构件在其上操作 数据库、语音识别系统

(1)数据流风格

· 管道-过滤器:每个构件(过滤器)有一组输入和输出,读入数据流,处理后输出

· 优点:松耦合、高重用性、可扩展性、支持并行

· 缺点:交互性较差、性能较差(每个过滤器都需要解析与合成数据)

(2)调用/返回风格

· 层次结构:将系统按抽象层次分为多层,每层为上一层提供服务,使用下一层的服务

· 分层架构的优点:

· 支持基于可增加抽象层的设计

· 不同的层次处于不同的抽象级别

· 每层最多只影响相邻两层,便于修改和复用

· 分层架构的缺点:

· 并非每个系统都可以很容易地划分层次

· 很难找到合适的、正确的层次抽象方法

(3)独立构件风格

· 事件驱动(隐式调用):构件将过程注册到事件,事件发生时自动触发

· 优点:松耦合、良好的重用性/修改性/可扩展性

· 缺点:构件放弃了对系统计算的控制,正确性推理困难

(4)虚拟机风格

· 解释器:具有运行时系统行为自定义与改变能力

· 规则系统:包含规则集、规则解释器、工作内存等

(5)仓库风格

· 黑板系统:由全局共享数据的黑板、控制单元和多个知识源组成

· 应用:语音识别、专家问题解决系统

(6)闭环控制架构(过程控制)

· 工业中的实时控制,如数控机床、生产流水线控制

· 特点:及时采集检测数据,按最佳值自动控制和调节

📌 速记口诀:"数据流调用回,独立构件虚拟机,仓库闭环C2齐,五大风格要牢记"。

3️⃣ 12.3 软件架构描述与表示

(1)4+1视图模型

4+1视图模型是描述软件架构的经典框架,从不同角度满足不同涉众的关注:

视图 关注点 主要涉众 描述内容

逻辑视图 功能需求 最终用户 系统的功能需求,即系统提供给最终用户的服务

开发视图 模块组织 程序员 软件模块的组织和管理,关注代码库、包、层的划分

进程视图 运行特性 集成人员 系统的并发、同步、性能等非功能性需求

物理视图 硬件映射 系统工程人员 软件如何映射到硬件,考虑拓扑结构、安装、通信

场景(+1) 系统活动抽象 所有涉众 重要系统活动的抽象,使四个视图有机联系起来

视图关系:逻辑视图和开发视图描述系统的静态结构,进程视图和物理视图描述系统的动态结构,场景则是驱动这些视图的核心需求抽象。

(2)架构可视化方法

方法 描述 优势 劣势

线框图 通过线框和连线表达架构元素及关系 工具多样、学习成本低 语义一致性差

UML 统一建模语言,标准化的建模元语言 语义一致、表达丰富 学习成本高、复杂度高

草图 非正式的快速图形化 高效沟通、灵活 语义一致性低

C4模型 分层抽象表达系统静态结构 语义一致、易学习 仅覆盖静态结构

(3)C4模型

C4模型在不同抽象层级表达软件系统的静态结构:

· 上下文图:系统与外部环境的交互及边界

· 容器图:系统的组成容器(应用、数据存储)及技术选型

· 组件图:容器内部的组件组成及交互

· 代码:实现细节(可选,可用UML类图等补充)

📌 速记口诀:"4+1视图经典法,逻辑开发进程物,场景贯穿联四者;C4模型分层画,上下容器组件码"。

4️⃣ 12.4 软件架构设计方法

(1)架构设计三原则

原则 核心思想 实践要点

合适原则 一切从实际场景出发 匹配业务发展阶段,合理利用资源

简单原则 用最简单的解决方案解决问题(KISS) 复杂问题拆解为简单单元,避免过度设计

演化原则 架构随业务发展不断演进 区分变化部分与不变部分,持续迭代

(2)架构设计方法论(以TOGAF ADM为例)

ADM软件开发方法包含以下阶段:

· 预备阶段:梳理业务需求,了解真实业务目标

· 架构远景:规划最终要达成的效果

· 业务架构:理解业务场景,抽象业务模型

· 信息系统架构:包括数据架构和应用架构

· 技术架构:选择技术框架、中间件、存储方案

· 技术及解决方案:提出多套方案,做取舍决策

· 迁移规划、实施治理:后续运维事项

(3)常见架构域划分

架构域 关注问题 产出形式

业务架构 业务如何拆解、场景如何梳理 业务架构图(场景层、产品功能层、领域模型层)

数据架构 需要什么数据、如何存储、如何设计 ER图(实体、属性、关系)

应用架构 子系统如何划分、模块间关系 应用架构图、模块划分

技术架构 技术框架选择、非功能需求实现 技术方案、关键技术要点

📌 速记口诀:"合适简单演化,三原则定方向;业务数据应用技术,四架构域齐展开"。

5️⃣ 12.5 软件架构评估

(1)架构评估的重要性

软件系统的质量属性主要由系统的软件体系结构决定。在大型系统中,性能、可用性和可修改性等质量的实现更多地取决于整体软件架构,而非代码级实践。因此,在建造之前就分析和确定系统是否能满足其期望的品质至关重要。

(2)ATAM(架构权衡分析方法)

ATAM是一种系统架构评估方法,主要在系统开发之前,针对性能、可用性、安全性和可修改性等质量属性进行评价和折中。

ATAM的四个主要活动阶段:

  1. 需求收集:明确质量属性需求

  2. 架构视图描述:了解架构设计

  3. 属性模型构造和分析:分析各质量属性的实现情况

  4. 架构决策与折中:识别权衡点并做出决策

(3)核心概念

概念 定义 示例

敏感点 实现质量目标时应注意的点,是一个或多个构件(或构件之间的关系)的特性 查询请求处理时间要求影响系统的数据传输协议设计

权衡点 影响多个质量特征,并对多个质量特征都是敏感点的质量特征 改变业务数据编码方式对系统性能和安全都产生影响

风险 某些做法有一些隐患可能导致问题 业务逻辑描述未达成共识,导致功能模块重复

非风险 可行的做法 业务响应小于30ms,请求响应超时设定为1秒可接受

(4)ATAM评估步骤(九步)

  1. 描述ATAM方法

  2. 描述业务动机

  3. 描述架构

  4. 确定架构方法

  5. 生成质量效应树

  6. 分析架构方法

  7. 讨论场景和对场景分级

  8. 分析架构方法

  9. 描述评估结果

📌 速记口诀:"ATAM评估法,性能可用安全可修改;敏感权衡点,风险非风险,九步走完得结论"。

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

✅ 核心重点

  1. 软件架构的本质:组件+结构+关系,是系统的"骨架"和"蓝图"。

  2. 五大架构风格:数据流、调用/返回、独立构件、虚拟机、仓库------必须能根据描述识别风格类型。

  3. 4+1视图模型:逻辑、开发、进程、物理、场景------从不同角度描述架构。

  4. 架构设计三原则:合适、简单、演化------指导架构决策的基本法则。

  5. ATAM评估方法:识别敏感点、权衡点、风险、非风险,对质量属性进行权衡分析。

  6. 架构域划分:业务、数据、应用、技术四层架构,层层递进。

⚡ 速记口诀大全

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

"组件结构加关系,三要素定架构"

2️⃣ 五大风格"五字诀"

"数、调、独、虚、仓"(数据流、调用/返回、独立构件、虚拟机、仓库)

3️⃣ 4+1视图"五视图"口诀

"逻辑开发进程物,场景贯穿联四者"

4️⃣ 设计原则"三字诀"

"合适简单演化,三原则定方向"

5️⃣ ATAM"四概念"口诀

"敏感权衡点,风险非风险"

6️⃣ 架构域"四层"口诀

"业务数据应用技术,层层递进设计全"

7️⃣ 一句话总纲

软件架构设计 = (五大风格 + 4+1视图 + 三原则 + ATAM评估),是从需求到实现的"骨架搭建",决定了系统的质量、成本和演进能力。


掌握第12章《软件架构设计》,意味着你具备了从宏观视角规划系统结构的核心能力。这是系统分析师从"需求分析师"迈向"系统架构师"的关键一步。

相关推荐
北岛寒沫2 小时前
北京大学国家发展研究员 中国经济专题 课程笔记(第二课 农村土地改革)
经验分享·笔记·学习
Piccab0o2 小时前
【学习笔记】——电磁相关
笔记·学习
boy快快长大3 小时前
【PyTorch】2.0 入门学习
人工智能·pytorch·学习
愚者游世3 小时前
Qt 基础认知
c++·学习·程序人生·职场和发展·visual studio
youyoulg3 小时前
监督学习-回归
学习·数据挖掘·回归
早睡早起好好code4 小时前
Qwen2.5-VL研究_待完善...
图像处理·人工智能·笔记·深度学习·学习
AI成长日志4 小时前
【datawhale】hello agents开源课程第1章学习记录:初识智能体
学习·开源·github
cjy0001114 小时前
Spring学习——新建module模块
java·学习·spring
-Springer-4 小时前
STM32 学习 —— 个人学习笔记9-1(USART串口协议 & 串口发送及接收数据)
笔记·stm32·学习