ONEPSOFT | 软考学习知识库
speedrun10|第10章 软件演化与维护
文件名约定:speedrun_ 第 10 章 软件演化与维护.md(教材准确章名:软件架构的演化和维护)
一、章节定位
一句话概括:本章讲 " 架构如何随业务生长、以及怎么长期维护 "——从演化与定义的关系、面向对象演化、演化分类(静态/动态、设计时/运行时)、18 条演化原则、ATAM 式演化评估,到经典的大型网站架构 10 阶段演化与架构维护(知识/修改/版本管理)。
二、本章在讲什么(系统性阐述)
楼盖好不是结束,而是开始——业务会变、环境会变,架构必须随之 " 生长 "。本章先说清 " 演化是什么 ":软件架构是演化来的,不是一次设计定的;演化本质是对组件 (components)、连接件 (connectors)、约束 (constraints) 三要素做增删改。接着给出演化的两种时间观(静态=停机改、动态=运行时不停车改;以及设计时/运行前/有限制运行时/运行时四类时期)。然后是 18 条 " 可持续演化原则 "(成本控制、风险可控、主体维持、模块独立演化等),相当于演化的 " 施工规范 "。评估部分讲如何衡量演化好坏。最后是两大部分:大型网站架构 10 阶段演化实例(单体→垂直→缓存→集群→读写分离→CDN/反向代理→分布式文件/库→NoSQL/搜索→业务拆分→分布式服务)——这是综合知识高频;以及架构维护(知识管理、修改管理、版本管理)——这正是 IT 服务/运维的 " 配置管理、变更管理、版本控制 " 在架构层的体现。
类比:架构演化就像 " 旧楼改造 "——静态演化=整体封楼翻新(停机升级),动态演化=边营业边改造(不停车施工,最难);18 条原则像改造规范(控制造价、风险可控、主体结构稳定、各房间独立改造互不影响);大型网站 10 阶段像从小平房逐步改造成综合体(加电梯、加消防分区、加备用电源、分布式供电);架构维护的 " 知识/修改/版本管理 " 就像物业的 " 竣工图存档、变更工单、各版图纸版本控制 "。
三、教材原文精摘(原封不动,逐子章节全覆盖)
下列段落直接摘自官方教材,未做任何改写,逐子章节给出最关键原文并作解析。
【10.1 演化与定义的关系 原文】" 软件架构的演化就是为了维持软件架构自身的有用性。"" 本质上讲,软件架构的演化就是软件整体结构的演化,演化过程涵盖软件架构的全生命周期……所以,人们通常说软件架构是演化来的,而不是设计来的。"(出自:第 10 章 10.1.1 节)
" 如果软件架构定义是 SA=\\{components,connectors,constraints},也就是说,软件架构包括组件、连接件和约束三大要素,这类软件架构演化主要关注的就是组件、连接件和约束的添加、修改与删除等。"(出自:第 10 章 10.1.2 节)
【10.2 面向对象软件架构演化过程 原文】" 面向对象软件架构演化主要体现为对象演化、消息演化、复合片段演化和约束演化。"(出自:第 10 章 10.2 节,含 10.2.1\~10.2.4)
【10.3 软件架构演化方式的分类 原文】" 设计时演化(Design-Time Evolution)是指发生在体系结构模型和与之相关的代码编译之前的软件架构演化。"" 运行前演化(Pre-Execution Evolution)是指发生在执行之前、编译之后的软件架构演化……系统需要具有添加和删除组件的机制。"" 有限制运行时演化(Constrained Runtime Evolution)是指系统在设计时就规定了演化的具体条件……可以进行一些规定好的演化操作。"" 运行时演化(Runtime Evolution)是指系统的体系结构在运行时不能满足要求时发生的软件架构演化……此时的演化是最难实现的。"(出自:第 10 章 10.3.1 节)
" 软件静态演化是系统停止运行期间的修改和更新,即一般意义上的软件修复和升级。"" 动态演化是在系统运行期间的演化,需要在不停止系统功能的情况下完成演化……动态软件架构(DSA)可以修改自身的架构,并在系统执行期间进行修改。"(出自:第 10 章 10.3.2/10.3.3 节)
【10.4 软件架构演化原则 原文】" 演化成本控制原则:演化成本要控制在预期的范围之内,也就是演化成本要明显小于重新开发成本。"" 进度可控原则……风险可控原则……主体维持原则……系统总体结构优化原则……平滑演化原则……目标一致原则……模块独立演化原则(修改局部化原则)……影响可控原则……有利于重构原则……有利于重用原则……设计原则遵从性原则……适应新技术原则……环境适应性原则……标准依从性原则……质量向好原则……适应新需求原则。"(教材列举 18 种原则,出自:第 10 章 10.4 节)
【10.5 软件架构演化评估方法 原文】" 演化过程已知的评估(评估流程、中间版本度量、质量属性距离)" 与 " 演化过程未知的评估 "(出自:第 10 章 10.5.1/10.5.2 节)
【10.6 大型网站系统架构演化实例(10 阶段) 原文】" 第一阶段:单体架构……应用程序、数据库、文件等所有资源都在一台服务器上。"" 第二阶段:垂直架构……应用和数据分离……使用 3 台服务器:应用服务器、文件服务器和数据库服务器。"" 第三阶段:使用缓存改善网站性能……80% 的业务访问集中在 20% 的数据上……缓存在应用服务器上的本地缓存和……远程缓存。"" 第四阶段:使用服务集群改善网站并发处理能力……应用服务器实现集群……"" 第五阶段:数据库读写分离……应用服务器写数据访问主数据库,读数据访问从数据库。"" 第六阶段:使用反向代理和 CDN 加速网站响应……"" 第七阶段:使用分布式文件系统和分布式数据库系统。"" 第八阶段:使用 NoSQL 和搜索引擎。"" 第九阶段:业务拆分……将一个网站拆分成许多不同的应用,每个应用独立部署。"" 第十阶段:分布式服务……将共用的业务提取出来,独立部署……提供共用业务服务。"(出自:第 10 章 10.6.1\~10.6.10 节)
【10.7 软件架构维护 原文】" 软件架构知识管理是对架构设计中所隐含的决策来源进行文档化表示……架构知识=架构设计 + 架构设计决策。"" 软件架构修改管理……建立一个隔离区域(Region of Quiescence),保障该区域中任何修改对其他部分的影响比较小。"" 软件架构版本管理为软件架构演化的版本演化控制、使用和评价等提供了可靠的依据。"(出自:第 10 章 10.7.1\~10.7.3 节)
逐段讲解(紧贴上面原文,一段一解):
四、核心知识树
第 10 章 架构演化与维护
├── 演化与定义
│ └── 组件/连接件/约束
├── 演化分类
│ ├── 四时期
│ └── 静/动态
├── 演化原则
│ └── 18 条
├── 演化评估
│ └── 已知/未知
├── 网站 10 阶段
│ └── 单体→分布式服务
└── 架构维护
├── 知识管理
├── 修改管理
└── 版本管理
五、知识脑图总结
思维导图(结构化呈现)
六、关键概念速解
| 概念 | 教材定义(原文关键词) | 大白话速解 | 考试怎么考 |
|---|---|---|---|
| 架构演化 | 对组件/连接件/约束增删改 | 旧楼改造 | 选择/论文 |
| 运行时演化 | 体系结构运行时不满足要求时演化,最难 | 边营业边改 | 选择 |
| 动态演化 | 不停止系统功能完成演化,DSA 可改自身 | 不停车施工 | 选择 |
| 主体维持 | AIG 平稳增长,主体行为稳定 | 主体结构别大动 | 原则选择 |
| 网站 10 阶段 | 单体→垂直→缓存→集群→读写分离→CDN→分布式→NoSQL→拆分→分布式服务 | 小楼改综合体 | 综合必背 |
| 架构知识管理 | 架构知识=设计 + 决策 | 竣工图存档 | 维护选择 |
| 隔离区域 | 修改影响小的区域 | 变更工单范围 | 维护选择 |
| 版本管理 | 演化版本控制评价依据 | 图纸版本控制 | 维护选择 |
七、记忆口诀与类比
八、易混淆点对比
| 易混项 A | 易混项 B | 核心区别 |
|---|---|---|
| 静态演化 | 动态演化 | 静态=停机期间改;动态=运行时不停车改(DSA 可改自身) |
| 设计时演化 | 运行时演化 | 设计时=编译前;运行时=运行中,最难实现 |
| 垂直架构 | 业务拆分 | 垂直=应用/文件/数据库三服务器分离;业务拆分=按产品线拆成多应用独立部署 |
| 架构知识管理 | 架构版本管理 | 知识管理记 " 为什么这么设计 ";版本管理管 " 各版演化控制 " |
九、与其他章节的关联
十、考试出题方式
专项突破提醒(运维服务 / IT 服务)
本章 " 架构维护(知识/修改/版本管理)" 与 IT 服务管理高度重合,给出 3 条可操作建议: