系统架构设计师备考第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(动态软件架构),因其支持运行时增删组件(结构动态性),保障系统高可用。

相关推荐
自燃人~14 小时前
消息积压治理与自我保护设计方案
系统架构
星瞰物联2 天前
融合北斗与天通卫星通信技术的堤坝水文监测卫星图传系统
网络·物联网·安全·系统架构
郝学胜-神的一滴2 天前
使用Qt OpenGL开发俄罗斯方块:从零到一实现经典游戏
c++·qt·程序人生·游戏·设计模式·系统架构·图形渲染
武子康2 天前
Java-200 RabbitMQ 架构与 Exchange 路由:fanout/direct/topic/headers
java·架构·消息队列·系统架构·rabbitmq·java-rabbitmq·mq
[J] 一坚2 天前
Shell 脚本解锁 curl/iptables/Nginx 日志分析等实战用法
linux·服务器·正则表达式·系统架构·自动化
Tadas-Gao3 天前
存储技术革命:SSD、PCIe与NVMe的创新架构设计与性能优化
java·性能优化·架构·系统架构·存储
粟悟饭&龟波功3 天前
【软考系统架构设计师】七、系统架构设计基础
系统架构·软件工程
坏孩子的诺亚方舟3 天前
FPGA系统架构设计实践13_FPGA系统功能安全
fpga开发·系统架构·功能安全概念
坏孩子的诺亚方舟3 天前
FPGA系统架构设计实践12_FPGA系统ECM0
fpga开发·系统架构·ecm·功能安全
pccai-vip3 天前
【系统架构师】2025年下半年软考高级真题分析
系统架构