安派尔

软考系统架构设计师(9)-软件架构的演化和维护

2025/08/02
0
0

软考系统架构设计师(9)-软件架构的演化和维护

软件架构演化和定义的关系

演化的重要性:

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

软件架构定义:
组件Components
连接件Connectors
约束Constraints
软件架构演化主要关注的是组件、连接件、约束的添加、修改和删除

面向对象软件架构演化过程
对象演化:AO、DO
AddObject(AO):系统需要添加新的对象来实现某种新的功能,或需要将现有对象的某个功能独立以增加架构灵活性的时候发生
DeleteObject(DO):系统需要移除某个功能或需要合并某些对象及其功能来降低架构的复杂度的时候发生

消息演化:AddMessage、DeleteMessage、SwapMessageOrder、OverturnMessage、ChangeMessageModule
AM:增添一条新的消息,产生在对象之间需要增加新的交互行为的时候
DM:删除当前一条消息,产生在需要移除某个交互行为的时候
SMO:交换两条消息的时间顺序,发生在需要改变两个交互行为之间的时候
OM:反转消息的发送对象与接收对象,发生在需要修改某个交互行为本身的时候
CMM:改变消息的发送或接收对象,发生在需要修改某个交互行为本身的时候

复合片段演化:Add Fragment(AF)、Delete Fragment(DF)、Fragment Type Change(FTC)、Fragment ConditionChange(FCC)
AF:在某几条消息上新增复合片段,发生在需要增添新的控制流时
DF:删除某个现有的复合片段,发生在需要移除当前某段控制流时
FTC:改变复合片段的类型,发生在需要改变某段控制流时
FCC:改变复合片段内部执行的条件,发生在改变当前控制流的执行条件时

约束演化:Add Constraint(AC)、Delete Constraint(DC)
AC:直接添加新的约束信息,需判断当前设计是否满足新添加的约束要求
DC:直接移除某条约束信息,发生在去除某些不必要条件的时候

软件架构演化方式的分类

分类方法:

  • 按照软件架构的实现方式和实施粒度分类:基于过程和函数的演化、面向对象的演化、基于组件的演化、基于架构的演化
  • 按研究方法将软件架构演化方式分:1类是对演化的支持;2类是版本和工程的管理工具;3类是架构变换的形式方法;4类是架构演化的成本收益分析
  • 针对软件架构的演化过程是否处于系统运行时期:分静态演化和动态演化

软件架构演化时期

  • 设计时演化:发生在体系结构模型与之相关代码编译之前的软件架构演化
  • 运行前演化:发生在执行之前、编译之后的软件架构演化
  • 有限制运行时演化:指系统在设计师就规定了演化的具体条件,将系统置于安全模式下,在某些特定约束满足时,可以进行规定好的演化操作
  • 运行时演化:体系结构在运行时不能满足要求是发生软件架构演化

软件架构静态演化
静态演化需求

  • 设计时演化需求:在架构开发和实现过程中对原有架构进行调整,保证软件实现与架构的一致性以及软件开发过程的顺利进行
  • 运行前演化需求:软件发布之后由于运行环境的变化,需要对软件进行修改升级,在此期间软件的架构同样要进行演化

静态演化一般过程
5个步骤
软件理解——需求变更分析——演化计划——系统重构——系统测试
img

正交软件架构过程:对于复杂的应用系统,通过对功能分层和线索化,形成正交体系结构,同一层次中的组件不允许相互调用,故每次变动仅影响一条线索

  • 需求变动归类
  • 制订架构演化计划
  • 修改、增加或删除组件
  • 更新组件之间的相互作用
  • 产生演化后的软件架构

软件架构动态演化
动态演化需求:

  • 软件内部执行所导致的体系结构改变
  • 软件系统外部的请求对软件进行的重配置

软件动态性的等级

  • 交互动态性:要求数据在固定的结构下动态交互
  • 结构动态性:允许对结构进行修改,通常是组件和连接件实例的添加和删除
  • 架构动态性:允许软件架构的基本构造的变动,即结构可以被重定义

动态演化的内容,主要包括以下4个方面
属性改名、行为变化、拓扑结构改变、风格变化

实现软件架构动态演化的技术:采用动态软件架构(DSA)、进行动态重配置(DR)
动态软件架构:指在运行时会发生变化的系统框架结构,允许在运行过程中通过框架结构的动态演化实现对架构的修改
动态重配置:从组件和连接件的配置入手,允许在运行过程中增删组件,增删连接件,修改连接关系等

动态软件架构实施演化4个步骤:

  • 捕捉并分析需求变化
  • 获取或生成体系结构演化策略
  • 根据演化策略实施演化
  • 演化后的评估和检测

3类DSA描述语言

  • 基于行为视角的Π-ADL,使用进程代数来描述具有动态性的行为
  • 基于反射视角的Pilar,利用反射理论显式地为元信息建立模型
  • 基于协调视角的LIME,注重计算和协调部分的分离,利用协调论的原理来解决动态性交互

DSA演化工具:

  • 使用反射机制
  • 基于组件操作
  • 基于Π演算
  • 利用外部的体系结构演化管理器

动态重配置
动态重配置涉及的修改有:

  • 简单任务的相关实现修改
  • 工作流实例任务的添加和删除
  • 组合任务流程中的个体修改
  • 任务输入来源的添加和删除
  • 任务输入来源的优先级修改
  • 组合任务输出目标的添加和删除
  • 组合任务输出目标的优先级修改

4中动态重配置模式
主从模式、中央控制模式、客户端/服务器模式、分布式控制模式

动态重配置难点:

  • 约束定义困难
  • 性能约束能以静态衡量
  • 某些重配置方案能够解决性能约束的某一方面,但难易管理所有方面
  • 重配置需要同时保证两个方面,即维持主键系统的完整性和重配置策略的正确和安全性

软件架构维护

软件架构维护过程一般涉及架构知识管理、架构修改管理、架构版本管理

架构知识管理
架构知识=架构设计+架构设计决策
架构知识的可获得性能够极大提升软件开发流程。

架构修改管理
做法是建立隔离区域,保障该区域中任何修改对其他部分的影响比较小,甚至没有影响。

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

软件架构可维护性度量实践
6个度量指标

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