系统架构设计师备考第44天——软件架构演化方式的分类和原则

一、 软件架构演化方式的分类

1 软件架构演化时期

根据演化发生的时机,分为四类:

  1. 设计时演化

    • 定义:发生在架构模型设计阶段,代码编译之前。
    • 特点:无需考虑运行状态,但需调整架构模型以保障实现一致性。
    • 典型场景:开发过程中需求变更或设计优化。
  2. 运行前演化

    • 定义:发生在编译后、系统运行前。
    • 特点:应用程序未执行,修改无需考虑状态,但需支持组件增删机制。
    • 典型场景:软件发布后因环境变化(如操作系统升级)需调整架构。
  3. 有限制运行时演化

    • 定义:系统运行时在特定约束下(如"安全模式")触发的演化。
    • 特点:仅允许预定义的演化操作(如组件替换),需满足预设条件。
    • 典型场景:金融或航天系统需避免停机的高风险场景。
  4. 运行时演化

    • 定义:系统运行中动态调整架构(如增删组件、改变拓扑)。
    • 特点:难度最高,需保证演化原子性(失败则回滚)。
    • 典型场景:服务器根据请求动态创建组件,或在线升级系统。

2 软件架构静态演化

定义 :系统停止运行时进行的架构修改(如修复、升级)。
分类

  1. 设计时演化需求:开发阶段调整架构以保障实现一致性。
  2. 运行前演化需求:发布后因环境变化修改架构(如适配新硬件)。

静态演化过程(5步骤):

  1. 软件理解:分析现有架构及组件关系。
  2. 需求变更分析:识别新旧需求差异。
  3. 演化计划:确定范围、成本及策略。
  4. 系统重构:执行组件增删、模块拆分/聚合等操作。
  5. 系统测试:验证演化后架构的正确性。

静态演化实例:正交软件架构

  • 核心思想:功能分层与线索化,同一层组件无交互。
  • 演化步骤
    ① 需求归类至对应线索;
    ② 制定演化计划;
    ③ 增/删/改组件;
    ④ 更新组件交互;
    ⑤ 生成新架构设计方案。

原子演化操作(与质量属性相关):

  • 可维护性操作:增删模块依赖(AMD/RMD)、增删接口(AMI/RMI)、模块拆分/聚合(SM/AGM)。
  • 可靠性操作:增删消息(AMS/RMS)、增删交互对象(AO/RO)、修改消息片段(CF)。

3 软件架构动态演化

定义 :系统运行时动态调整架构,无需停机。
动态性等级(Carlos E. Cuesta分类):

  1. 交互动态性:数据在固定结构下动态交互(如请求响应)。
  2. 结构动态性:支持组件/连接件增删(主流应用)。
  3. 架构动态性:允许重定义架构基本构造(如新组件类型)。

动态演化内容

  • 属性重定义(如响应时间)、行为变化(如更换加密算法)、拓扑改变(增删组件)、风格变化(如C/S转B/S)。

实现技术

  1. 动态软件架构(DSA)

    • 运行时显式表示架构状态,支持动态修改。
    • 实施步骤
      ① 捕捉需求变化;
      ② 生成演化策略;
      ③ 执行演化;
      ④ 评估效果。
    • 描述语言
      • π-ADL:基于进程代数,描述移动系统动态行为。
      • Pilar:基于反射理论,分层描述元模型与基系统。
      • LIME:分离计算与协调,支持分布式系统动态交互。
  2. 动态重配置(DR)

    • 运行时修改组件/连接件配置(如增删连接关系)。

二、 软件架构演化原则

18条核心原则及度量方案:

1. 成本与进度控制
  • 演化成本控制(ECC):CoE(演化成本)≪ CoRD(重新开发成本)。
  • 进度可控:实际耗时(Ttask)与预期(T'task)差值越小越好。
2. 风险与影响控制
  • 风险可控:时间、经济、技术等风险需可量化管理。
  • 影响可控:模块修改的影响范围需可预测(如计算影响矩阵)。
3. 结构优化与独立性
  • 主体维持:主体规模变更量/主体规模(AIG)需平稳。
  • 模块独立演化:修改局部化,降低耦合(内聚度↑,耦合度↓)。
  • 系统总体结构优化:通过可靠性、性能指标评估整体结构合理性。
4. 质量与适应性提升
  • 质量向好(QI):演化后质量(EQI)>原质量(SQ)。
  • 适应新技术(TI):TI=1-(依赖技术/总技术),值越高越好。
  • 适应新需求(NRA):适应需求数(ANR)/实际需求数(NR)趋近1。
5. 规范与重构支持
  • 标准依从性:符合国际/行业标准(需人工判定)。
  • 有利于重构:降低系统复杂度(CC<阈值)。
  • 有利于重用:模块高内聚、低耦合。

考点总结与典型考题

核心考点
  1. 演化时期分类:区分设计时、运行前、运行时演化的触发条件及特点。
  2. 静态 vs 动态演化:正交架构的应用场景 vs DSA的三级动态性。
  3. 演化原则:重点掌握ECC、模块独立演化、质量向好的度量公式。
典型考题
  1. 选择题

    有限制运行时演化的特点是( )。

    A. 允许任意组件修改

    B. 需在安全模式下触发

    C. 无需预设条件
    答案:B

  2. 简答题

    简述正交软件架构的演化步骤。
    :①需求归类至线索;②制定计划;③修改组件;④更新交互;⑤生成新架构。

  3. 案例分析

    某电商系统需支持动态扩容,应选择何种演化技术?说明原因。
    :采用DSA(动态软件架构),因其支持运行时增删组件(结构动态性),保障系统高可用。

相关推荐
p***q7820 小时前
docker离线安装及部署各类中间件(x86系统架构)
docker·中间件·系统架构
阿祥~1 天前
sqdaxiang Framework
系统架构
p***43481 天前
HarmonyOS系统架构
华为·系统架构·harmonyos
hhcccchh2 天前
学习vue第七天 从单页面应用(SPA)进化为后台管理系统架构
vue.js·学习·系统架构
Tadas-Gao3 天前
Spring Boot 4.0架构革新:构建更精简、更安全、更高效的Java应用
java·spring boot·分布式·微服务·云原生·架构·系统架构
jiayong234 天前
多子系统架构下的Nginx部署策略与最佳实践
运维·nginx·系统架构
晓风残月淡4 天前
系统架构设计基础知识:软件架构风格
系统架构·软件架构风格
坏孩子的诺亚方舟4 天前
FPGA系统架构设计实践8_复位参考设计
fpga开发·系统架构·复位
CoderIsArt6 天前
xorrisofs的系统架构与开源地址
系统架构
star _chen6 天前
【操作系统入门】文件系统
系统架构