12-软件架构演化与维护

12-软件架构演化与维护(基于第12小时)

软考-系统架构设计师 | 第3篇 架构设计高级知识 出题形式:单项选择题 + 下午案例分析题 分值占比:约 3-5 分(选择),案例分析 25 分


0. 考点分析

本小时专注于软件架构的演化和维护,包括基本概念、演化类型、原则、评估方法和维护手段。

考试特点

  • 选择题 3-5 分(演化原则、动态/静态演化、原子操作)
  • 案例分析题核心(大型网站架构演化路径、演化评估)
  • 论文题高频素材(架构演化、维护管理)

1. 核心知识点

1.1 软件架构演化的重要性

  1. 保障软件系统具备诸多好的特性
  2. 有效管控软件系统的整体复杂性和变化性,降低软件检修和修改成本
  3. 保证软件系统演化的一致性和正确性,增加便捷性

1.2 演化和定义的关系

  • 软件架构包括组件、连接件和约束三大要素
  • 架构演化主要关注这三大要素的添加、修改和删除

1.3 面向对象软件架构演化过程(4 类操作)

对象演化

操作含义触发场景
AO(Add Object)添加新对象系统需要添加新功能或增加架构灵活性时
DO(Delete Object)删除对象系统需要移除现有功能或降低架构复杂度时

消息演化(5 种操作)

操作含义触发场景
AM(Add Message)增添一条新消息对象之间需要增加新的交互行为
DM(Delete Message)删除当前消息需要移除某交互行为
SMO(Swap Message Order)交换两条消息的时间顺序需要改变两个交互行为之间顺序
OM(Overturn Message)反转消息的发送对象与接收对象需要修改某个交互行为本身
CMM(Change Message Module)改变消息的发送或接收对象需要修改某个交互行为本身

复合片段演化(4 种操作)

操作含义触发场景
AF(Add Fragment)新增复合片段需要增添新的控制流
DF(Delete Fragment)删除复合片段需要移除某段控制流
FTC(Fragment Type Change)改变复合片段类型需要改变某段控制流
FCC(Fragment Condition Change)改变复合片段内部执行条件改变当前控制流的执行条件

约束演化

操作含义触发场景
AC(Add Constraint)添加新约束需判断当前设计是否满足新约束
DC(Delete Constraint)移除约束去除某些不必要条件

1.4 软件架构演化方式的分类

按演化时期分(4 类)

类型时机特点
设计时演化体系结构模型与代码编译之前早期阶段
运行前演化编译之后、执行之前中间阶段
有限制运行时演化特定约束满足时受限运行
运行时演化运行时不能满足要求时动态调整

记忆口诀设计时→运行前→有限制运行时→运行时(从早到晚)

静态演化 vs 动态演化

维度静态演化动态演化
需求设计时演化、运行前演化软件内部执行导致架构改变、外部请求重配置
过程软件理解→需求变更分析→演化计划→系统重构→系统测试实时调整
动态性等级-交互动态性、结构动态性、架构动态性
演化内容-属性改名、行为变化、拓扑结构改变、风格变化

注意:动态演化不包括"格式变化"(考题陷阱)

静态演化的原子操作

与可维护性相关(7 种):

  • AMD(Add Module Dependence)— 添加模块依赖
  • RMD(Remove Module Dependence)— 移除模块依赖
  • AMI(Add Module Interface)— 添加模块接口
  • RMI(Remove Module Interface)— 移除模块接口
  • AM(Add Module)— 添加模块
  • RM(Remove Module)— 移除模块
  • SM(Split Module)— 拆分模块
  • AGM(Aggregate Modules)— 聚合模块

与可靠性相关(10 种):

  • AMS(Add Message)— 添加消息
  • RMS(Remove Message)— 移除消息
  • AO(Add Object)— 添加对象
  • RO(Remove Object)— 移除对象
  • AF(Add Fragment)— 添加片段
  • RF(Remove Fragment)— 移除片段
  • CF(Change Fragment)— 改变片段
  • AU(Add Use Case)— 添加用例
  • RU(Remove Use Case)— 移除用例
  • AA(Add Actor)— 添加参与者
  • RA(Remove Actor)— 移除参与者

1.5 动态软件架构(DSA)

实现动态演化的基本原理

  • 运行时刻体系结构相关信息的改变可用来触发、驱动系统自身的动态调整

DSA 描述语言(按视角分)

视角语言
行为视角π-ADL
反射视角Pilar
协调视角LIME

DSA 演化工具(4 种)

  1. 使用反射机制
  2. 基于组件操作
  3. 基于 π 演算
  4. 利用外部的体系结构演化管理器

动态软件架构应用实例 — PKUAS

  • 4 种类型:容器系统、公共服务、工具和微内核

动态重配置

4 种模式

  1. 主从模式
  2. 中央控制模式
  3. 客户端/服务器模式
  4. 分布式控制模式

应用实例:可重用、可配置的产品线架构

动态配置难点

  • 约束定义困难
  • 性能约束难以静态衡量
  • 难以管理所有方面
  • 需同时保证组件系统完整性和重配置策略的正确和安全性

1.6 软件结构演化原则(18 大原则)

#原则关键点
1演化成本控制演化成本要控制在预期范围内
2进度可控架构演化要在预期时间内完成
3风险可控经济/时间/人力/技术/环境风险在可控范围内
4主体维持软件演化的平均增量增长须保持平稳,主体行为稳定
5系统总体结构优化演化后整体结构(布局)更加合理
6平滑演化软件的演化速率趋于稳定
7目标一致阶段目标和最终目标要一致
8模块独立演化各模块自身的演化最好相互独立
9影响可控一个模块变更给其他模块带来的影响在可控范围
10复杂性可控必须控制架构的复杂性
11有利于重构演化后软件架构便于重构
12有利于重用维持或提高整体架构的可重用性
13设计原则遵循性演化不与架构设计原则冲突
14适应新技术软件独立于特定技术手段,可运行于不同平台
15环境适应性演化后软件版本容易适应新硬件/软件环境
16标准依从性演化不违背相关质量标准(国际/国家/行业)
17质量向好所关注的质量指标综合效果变更好
18适应新需求很容易适应新的需求变更

关键原则对比

原则vs
主体维持平均增量平稳
平滑演化演化速率趋于稳定
目标一致阶段目标和最终目标一致
系统总体结构优化整体结构布局合理

1.7 软件架构演化评估方法

演化过程已知的评估

  • 流程:将架构度量应用到演化过程中
  • 通过对演化前后的不同版本的架构分别进行度量
  • 得到度量结果的差值及其变化趋势
  • 计算架构间质量属性距离,对相关质量属性进行评估

演化过程未知的评估

  • 教材图 12.3 展示评估过程
  • 通过反向工程等技术恢复架构信息

1.8 大型网站系统架构演化实例(10 阶段)

阶段架构关键点
第一阶段单体架构应用程序、数据库、文件等所有资源都在一台服务器
第二阶段垂直架构应用和数据分离,3 台服务器:应用、文件、数据
第三阶段使用缓存改善性能本地缓存 + 远程分布式缓存
第四阶段使用服务集群改善并发负载均衡调度服务器,分发请求到集群
第五阶段数据库读写分离主库写、从库读,主从复制机制同步
第六阶段反向代理和 CDN 加速CDN 部署在网络提供商机房(距离最近);反向代理部署在中心机房
第七阶段分布式文件系统和分布式数据库业务分库,不同业务部署不同物理服务器
第八阶段使用 NoSQL 和搜索引擎解决海量数据检索
第九阶段业务拆分一个网站拆分成多个应用,独立部署
第十阶段分布式服务服务化、SOA/微服务

核心演化逻辑

  • 解决性能 → 缓存、集群、读写分离
  • 解决高可用 → 集群、读写分离、CDN
  • 解决扩展性 → 业务拆分、分布式服务
  • 解决海量数据 → 分布式文件系统、NoSQL

1.9 软件架构维护

维护过程(3 大内容):

  1. 软件架构知识管理
  2. 软件架构修改管理
  3. 软件架构版本管理

软件架构知识管理

  • 架构知识 = 架构设计 + 架构设计决策
  • 含义:侧重于软件开发和实现过程所涉及的架构静态演化
  • 在架构文档等信息来源中捕捉架构知识
  • 提供架构的质量属性及其设计依据进行记录和评价
  • 需求:防止关键的设计知识"沉没"在软件架构中

软件架构修改管理

  • 主要是建立一个隔离区域
  • 保障该区域中任何修改对其他部分影响最小

软件架构版本管理

  • 为软件架构演化的版本演化控制、使用和评价提供可靠依据

架构可维护性度量(6 指标)

指标缩写
圈复杂度CNN
扇入扇出度FFC
模块间耦合度CBO
模块的响应RFC
紧内聚度TCC
松内聚度LCC

2. 关键概念速查

概念定义/说明常见考点
AO/DO对象的添加/删除对象演化
AM/DM/SMO/OM/CMM消息的增/删/换序/反转/改模块消息演化 5 种
AF/DF/FTC/FCC复合片段的增/删/改类型/改条件复合片段演化
AC/DC约束的添加/删除约束演化
设计时演化编译之前4 时期最早
运行前演化编译之后、执行之前4 时期
有限制运行时演化特定约束满足时4 时期
运行时演化运行时不能要求时4 时期最晚
主体维持平均增量平稳18 原则
平滑演化演化速率趋于稳定18 原则
目标一致阶段目标和最终目标一致18 原则
系统总体结构优化整体结构布局合理18 原则
DSA 描述语言π-ADL(行为)/Pilar(反射)/LIME(协调)3 种视角
动态重配置 4 模式主从/中央控制/C-S/分布式控制4 种模式
大型网站 10 阶段单体→垂直→缓存→集群→读写分离→CDN→分布式→NoSQL→业务拆分→分布式服务演化路径
架构维护 3 内容知识/修改/版本管理必考
架构可维护性 6 指标CNN/FFC/CBO/RFC/TCC/LCC缩写含义

3. 典型例题

例题 1(演化原则辨析)

题目:在软件系统的生命周期里,软件的演化速率趋于稳定,如相邻版本的更新率相对稳定。此描述是软件架构演化的( )原则。

  • A. 主体维持
  • B. 系统总体结构优化
  • C. 平滑演化
  • D. 目标一致

答案:C

解析

  • 主体维持:平均增量增长平稳
  • 系统总体结构优化:整体结构布局合理
  • 平滑演化:演化速率趋于稳定
  • 目标一致:阶段目标和最终目标一致

例题 2(架构维护内容)

题目:软件架构维护过程不包括( )。

  • A. 架构知识管理
  • B. 架构修改管理
  • C. 架构版本管理
  • D. 架构构件管理

答案:D

解析:软件架构维护过程包括架构知识管理、架构修改管理、架构版本管理不包括架构构件管理。


例题 3(演化时期辨析)

题目:下列软件架构演化时期,( )是在系统设计时规定了演化的具体条件,将系统置于"安全"模式下,演化只发生在某些特定约束满足时,可以进行一些规定好的演化操作。

  • A. 设计时演化
  • B. 运行前演化
  • C. 有限制运行时演化
  • D. 运行时演化

答案:C

解析

  • 设计时演化:编译之前
  • 运行前演化:编译之后、执行之前
  • 有限制运行时演化:只发生在某些特定约束满足时
  • 运行时演化:运行时不能满足要求时

例题 4(动态演化内容)

题目:根据所修改的内容不同,软件的动态演化不包括( )。

  • A. 属性改名
  • B. 行为变化
  • C. 拓扑结构改变
  • D. 格式变化

答案:D

解析:动态演化的内容包括:属性改名、行为变化、拓扑结构改变、风格变化格式变化不属于动态演化内容。

4. 高频考点

4.1 必须记住的核心要点

  1. 架构 3 要素:组件、连接件、约束(演化关注这 3 要素的增删改)
  2. 对象演化 2 种:AO、DO
  3. 消息演化 5 种:AM、DM、SMO、OM、CMM
  4. 复合片段演化 4 种:AF、DF、FTC、FCC
  5. 约束演化 2 种:AC、DC
  6. 演化 4 时期(从早到晚):设计时→运行前→有限制运行时→运行时
  7. 动态演化 4 内容:属性改名、行为变化、拓扑结构改变、风格变化(不含格式变化
  8. DSA 描述语言 3 视角:行为(π-ADL)/反射(Pilar)/协调(LIME)
  9. 动态重配置 4 模式:主从/中央控制/C-S/分布式控制
  10. PKUAS 4 类型:容器系统、公共服务、工具、微内核
  11. 架构 4 大演化原则对比
    • 主体维持:平均增量平稳
    • 平滑演化:演化速率稳定
    • 目标一致:阶段目标和最终目标一致
    • 系统总体结构优化:整体结构合理
  12. 大型网站 10 阶段演化路径(必考)
  13. 架构维护 3 内容:知识/修改/版本管理(不含构件管理
  14. 可维护性 6 指标:CNN/FFC/CBO/RFC/TCC/LCC
  15. 架构知识 = 架构设计 + 架构设计决策

4.2 易混淆对比

对比项区别
AO vs AMAO 是对象的添加,AM 是消息的添加
AC vs AFAC 是约束的添加,AF 是复合片段的添加
主体维持 vs 平滑演化主体维持强调增量稳定,平滑演化强调速率稳定
目标一致 vs 系统总体结构优化目标一致是目标,结构优化是布局
静态演化 vs 动态演化静态是预先规划的演化,动态是运行时刻的演化
设计时 vs 运行前设计时是编译之前,运行前是编译之后
双机热备 vs 服务集群热备是2 台服务器,集群是多节点通过 LAN 互连
架构知识管理 vs 修改管理知识管理是捕捉记录,修改管理是隔离变更
使用 Hugo 构建
主题 StackJimmy 设计