🏠 首页›第二梯队 · 案例选答专题 · 第 12 小时 · 软件架构演化与维护

软件架构的演化和维护

选择 3~5 分案例 25 分(偶考)论文相关
📄 教材出处 · 第 12 小时《架构演化》 (书第 112–118 页) ▸ 查看原文摘录 打开教材 PDF ↗
第 112 页 ↗1 软件架构的演化和维护 12.0 章节考点分析 学习软件架构的演化和维护问题,包括基本概念、演化类型、原则、评估方法和维 护手段,以及对大型网站系统的架构演化实例等方面进行分析等。
第 113 页 ↗软件架构的演化和维护 105 至关重要。
第 114 页 ↗ 4.约束演化 约束演化包括Add Constraint(AC)、Delete Constraint(DC)。
第 115 页 ↗软件架构的演化和维护 107 Dependence)、AMI(Add Module Interface)、RMI(Remove Module Inferface)、AM(Add Module)、 RM(Remove Module)、SM(Split Module)、AGM(Aggregate Modules)。
第 116 页 ↗(7)目标一致原则:架构演化的阶段目标和最终目标要一致。
第 117 页 ↗软件架构的演化和维护 109 12.6 大型网站系统架构演化实例 【基础知识点】 第一阶段:单体架构。

知识点目录(共 5 项)

  1. 架构演化与架构定义的关系;演化过程:组件 / 连接件 / 约束演化
  2. 静态演化(离线)vs 动态演化(在线:替换 / 扩展 / 删除)
  3. 架构演化原则与评估方法(演化过程已知 / 未知)
  4. 大型网站架构演化实例:单体 → 分层 → 缓存 → 分布式服务 → SOA → 微服务(案例高频)
  5. 软件架构维护:可修改性 / 可扩展性

知识点详解

一、架构演化与架构定义的关系

演化的重要性:① 保障软件系统具备诸多好的特性;② 有效管控软件系统的整体复杂性和变化性,降低软件检修和修改成本;③ 保证软件系统演化的一致性和正确性,增加便捷性。

演化的对象:软件架构包括组件、连接件、约束三大要素,架构演化主要关注三要素的添加、修改和删除。面向对象视角下的演化过程分四类:

演化类别包含操作(英文缩写必背)
① 对象演化AO(Add Object 添加对象——新增功能或独立现有功能)、DO(Delete Object 删除对象——移除功能或合并对象降低复杂度)
② 消息演化AM 增添消息、DM 删除消息、SMO 交换两条消息的时间顺序、OM 反转消息的发送对象与接收对象、CMM 改变消息的发送或接收对象
③ 复合片段演化AF 新增复合片段(增添新控制流)、DF 删除复合片段、FTC 改变片段类型(改变控制流)、FCC 改变片段内部执行条件
④ 约束演化AC 直接添加新约束(需判断当前设计是否满足)、DC 直接移除约束
💡 记忆:对象管"有没",消息管"传给谁何时传",复合片段管"控制流",约束管"限制条件"。消息演化五兄弟口诀:"增删换反改"(AM、DM、SMO、OM、CMM)。

二、演化方式分类(静态 vs 动态,案例高频)

1. 按演化时期分 4 类:

时期发生时点
设计时演化体系结构模型与相关代码编译之前
运行前演化执行之前、编译之后
有限制运行时演化只发生在某些特定约束满足时(系统置于"安全"模式,只做规定好的演化操作)
运行时演化发生在运行不能满足要求时

2. 静态演化(离线演化):发生在软件部署之前(设计时、运行前)。

3. 动态演化(在线演化):软件在运行期间的演化。需求来源:① 软件内部执行所导致的体系结构改变;② 软件系统外部请求对软件进行的重配置。

静态演化(离线) 设计时演化 / 运行前演化 软件理解 需求变更分析 演化计划 → 系统重构 → 系统测试 动态演化(在线) 运行时演化 / 有限制运行时演化 内容:属性改名 / 行为变化 拓扑结构改变 / 风格变化 DSA / 动态重配置(PKUAS)
图 1 静态演化与动态演化对比

三、软件结构演化 18 条原则

重点掌握常考的几条,其余理解即可:

原则含义
演化成本控制演化成本控制在预期范围之内
进度可控架构演化要在预期时间内完成
风险可控经济/时间/人力/技术/环境风险可控
主体维持演化平均增量增长平稳,保证主体行为稳定
系统总体结构优化演化后系统整体结构(布局)更合理
平滑演化软件的演化速率趋于稳定(如相邻版本更新率相对稳定)
目标一致阶段目标和最终目标一致
模块独立演化各模块自身演化最好相互独立
影响可控模块变更给其他模块带来的影响可控
复杂性可控保障架构复杂性在可控范围内
有利于重构 / 有利于重用演化后便于重构;维持甚至提高可重用性
设计原则遵循性演化不与架构设计原则冲突
适应新技术 / 环境适应性独立于特定技术手段;易适应新的软硬件环境
标准依从性不违背国际/国家/行业质量标准
质量向好关注的质量指标变更好
适应新需求容易适应新的需求变更
⚠️ 真题辨析:"演化速率趋于稳定,相邻版本更新率相对稳定" = 平滑演化原则(不是主体维持——主体维持说的是"平均增量平稳、主体行为稳定")。

演化评估方法:① 演化过程已知:对演化前后不同版本的架构分别进行度量,得到度量结果的差值及变化趋势,计算架构间质量属性距离进而评估;② 演化过程未知:先对演化前后的架构进行 CMG 度量(度量获取),再采用共享度量元比较,分析偏差,评估演化影响。

四、大型网站架构演化实例(案例必背)

① 单体架构:应用/数据库/文件全在一台服务器 ② 垂直架构:应用与数据分离(应用/文件/数据三台) ③ 使用缓存:本地缓存 + 远程分布式缓存 ④ 服务集群:负载均衡分发请求,解决高并发 ⑤ 数据库读写分离:主从复制,写主读从 ⑥ 反向代理 + CDN 加速(原理都是缓存) ⑦ 分布式文件系统 + 分布式数据库(业务分库) ⑧ NoSQL + 搜索引擎 ⑨ 业务拆分:拆成多个应用独立部署 ⑩ 分布式服务(公共服务独立部署统一管理) 演化主线:单点 → 分离 → 缓存 → 集群 → 分库 → CDN → 分布式存储 → NoSQL/搜索 → 业务拆分 → 分布式服务
图 2 大型网站架构演化十阶段
💡 案例答题要点:每阶段解决一个瓶颈——①②解决"资源集中",③解决"读性能",④解决"并发处理",⑤解决"数据库读写压力",⑥解决"跨地域访问速度",⑦解决"存储海量数据",⑧解决"多样化数据与搜索",⑨⑩解决"业务耦合与开发效率"。回答"为什么这样演化"时按此逻辑展开。

五、软件架构维护

架构维护过程 3 项(不含"架构构件管理"——真题陷阱):

过程要点
① 架构知识管理架构知识 = 架构设计 + 架构设计决策;侧重开发和实现过程涉及的架构静态演化,在架构文档等信息来源中捕捉架构知识,对质量属性及其设计依据进行记录和评价;需求:防止关键设计知识"沉没"在软件架构中
② 架构修改管理建立一个隔离区域,保障该区域中任何修改对其他部分影响最小
③ 架构版本管理为软件架构演化的版本演化控制、使用和评价提供可靠依据

架构可维护性 6 个度量指标(必背缩写):圈复杂度(CNN)、扇入扇出度(FFC)、模块间耦合度(CBO)、模块的响应(RFC)、紧内聚度(TCC)、松内聚度(LCC)。

💡 本节框架:"演化对象三要素 → 四类演化操作 → 静态五步/动态四内容 → 十八原则 → 两评估 → 网站十阶段 → 维护三过程六指标"。案例最爱考:网站演化阶段判断 + 静态/动态演化区分 + 平滑演化原则辨析。