系统架构设计师备考第44天——软件架构演化方式的分类和原则
一、 软件架构演化方式的分类
1 软件架构演化时期
根据演化发生的时机,分为四类:
-
设计时演化
- 定义:发生在架构模型设计阶段,代码编译之前。
- 特点:无需考虑运行状态,但需调整架构模型以保障实现一致性。
- 典型场景:开发过程中需求变更或设计优化。
-
运行前演化
- 定义:发生在编译后、系统运行前。
- 特点:应用程序未执行,修改无需考虑状态,但需支持组件增删机制。
- 典型场景:软件发布后因环境变化(如操作系统升级)需调整架构。
-
有限制运行时演化
- 定义:系统运行时在特定约束下(如“安全模式”)触发的演化。
- 特点:仅允许预定义的演化操作(如组件替换),需满足预设条件。
- 典型场景:金融或航天系统需避免停机的高风险场景。
-
运行时演化
- 定义:系统运行中动态调整架构(如增删组件、改变拓扑)。
- 特点:难度最高,需保证演化原子性(失败则回滚)。
- 典型场景:服务器根据请求动态创建组件,或在线升级系统。
2 软件架构静态演化
定义:系统停止运行时进行的架构修改(如修复、升级)。
分类:
- 设计时演化需求:开发阶段调整架构以保障实现一致性。
- 运行前演化需求:发布后因环境变化修改架构(如适配新硬件)。
静态演化过程(5步骤):
- 软件理解:分析现有架构及组件关系。
- 需求变更分析:识别新旧需求差异。
- 演化计划:确定范围、成本及策略。
- 系统重构:执行组件增删、模块拆分/聚合等操作。
- 系统测试:验证演化后架构的正确性。
静态演化实例:正交软件架构
- 核心思想:功能分层与线索化,同一层组件无交互。
- 演化步骤:
① 需求归类至对应线索;
② 制定演化计划;
③ 增/删/改组件;
④ 更新组件交互;
⑤ 生成新架构设计方案。
原子演化操作(与质量属性相关):
- 可维护性操作:增删模块依赖(AMD/RMD)、增删接口(AMI/RMI)、模块拆分/聚合(SM/AGM)。
- 可靠性操作:增删消息(AMS/RMS)、增删交互对象(AO/RO)、修改消息片段(CF)。
3 软件架构动态演化
定义:系统运行时动态调整架构,无需停机。
动态性等级(Carlos E. Cuesta分类):
- 交互动态性:数据在固定结构下动态交互(如请求响应)。
- 结构动态性:支持组件/连接件增删(主流应用)。
- 架构动态性:允许重定义架构基本构造(如新组件类型)。
动态演化内容:
- 属性重定义(如响应时间)、行为变化(如更换加密算法)、拓扑改变(增删组件)、风格变化(如C/S转B/S)。
实现技术:
-
动态软件架构(DSA)
- 运行时显式表示架构状态,支持动态修改。
- 实施步骤:
① 捕捉需求变化;
② 生成演化策略;
③ 执行演化;
④ 评估效果。 - 描述语言:
- π-ADL:基于进程代数,描述移动系统动态行为。
- Pilar:基于反射理论,分层描述元模型与基系统。
- LIME:分离计算与协调,支持分布式系统动态交互。
-
动态重配置(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<阈值)。
- 有利于重用:模块高内聚、低耦合。
考点总结与典型考题
核心考点
- 演化时期分类:区分设计时、运行前、运行时演化的触发条件及特点。
- 静态 vs 动态演化:正交架构的应用场景 vs DSA的三级动态性。
- 演化原则:重点掌握ECC、模块独立演化、质量向好的度量公式。
典型考题
-
选择题:
有限制运行时演化的特点是( )。
A. 允许任意组件修改
B. 需在安全模式下触发
C. 无需预设条件
答案:B -
简答题:
简述正交软件架构的演化步骤。
答:①需求归类至线索;②制定计划;③修改组件;④更新交互;⑤生成新架构。 -
案例分析:
某电商系统需支持动态扩容,应选择何种演化技术?说明原因。
答:采用DSA(动态软件架构),因其支持运行时增删组件(结构动态性),保障系统高可用。