软件架构演化和定义
- 对架构进行修改和完善,进行纠错性修改和完善性修改的过程,不断迭代
- 软件整体结构的演化,涵盖软件架构的全生命周期,包括以下阶段
- 软件架构需求的获取
- 软件架构建模
- 软件架构文档
- 软件架构实现
- 软件架构维护
- 重要性
- 架构是整个系统的骨架
- 软件架构作为软件蓝图为人们宏观管控软件系统的整体复杂性和变化性提供了一条有效途径
- 软件架构的演化能降低软件演化的成本
- 软件架构的定义包含组件、连接件、约束三要素,软件架构演化主要关注这三者之间的添加、修改和删除
面向对象软件架构演化
- 对象演化:组件的实体是对象,演化包括 AddObject(AO)和 DeleteObject(DO)
- AO:系统需要添加信的对象,或将现有对象的某个功能独立
- DO:移除某个对象的功能,或需要合并某些对象及其功能
- 消息演化:AddMessage(AM)、DeleteMessage(DM)、SwapMessageOrder(SMO)、OverturnMessage(OM)、ChangeMessageModule(CMM)
- AM 添加一条新消息
- DM 删除当前的一条消息
- SMO 交换两条消息的时间顺序
- OM 反转消息的发送对象和接收对象
- CMM:改变消息的发送和接收对象
- 复合片段演化:复合片段是对象交互关系的控制流描述,属于连接件。包含 AddFragment(AF)、DeleteFragment(DF)、FragmentTypeChange(FTC)、FragmentConditionChange(FCC)
- FCC 改变复合片段内部执行的条件
- AF 在某几条消息上新增复合片段
- DF 删除某个现有的复合片段
- FTC 改变复合片段的类型
- 约束演化:直接对约束信息进行添加和删除
- AC Add Constraint 直接添加新的约束信息
- DC Delete Constraint 直接移除某条约束信息
软件架构演化方式的分类
- 三种分类方法
- 按照软件架构的实现方式和实施粒度分类
- 按照研究方法
- 针对软件架构的演化过程是否处于系统运行时期,分为静态演化和动态演化
- 演化时期包括:设计时演化、运行前演化、有限制运行时演化、运行时演化
- 静态演化:维护方法由三类,更正性维护、适应性维护和完善性维护
- 静态演化一般包含五个步骤
- 软件理解
- 需求变更分析
- 演化计划
- 系统重构
- 系统测试
- 一次完整软件架构演化过程可以看作一系列原子演化操作组合而成,逻辑语义上粒度最小的架构修改操作
- 架构演化的可维护性度量基于组件图表示的软件架构,在较高层次上评估架构的某个原子修改操作对整个架构所产生的影响
- 可靠性评估基于用例图、部署图和顺序图
- 动态演化是在系统运行期间的演化
- 动态演化来自两类需求
- 内部执行所导致的体系结构改变
- 外部请求对软件进行的重配置
- 动态性分为三个级别
- 交互动态性
- 结构动态性
- 架构动态性
- 根据所修改内容不同,动态演化包括以下方面
- 属性改名,对指标进行重新定义
- 行为变化,用户需求变化或系统自身服务质量的调节都将引发软件行为的变化
- 拓扑结构改变:增删组件
- 风格变化:只能将架构风格变为其衍生风格
- 实现软件架构动态演化的技术主要有两种
- 动态软件架构(DSA):在运行过程中通过框架架构的动态演化实现对架构的修改
- 动态重配置(DR):在运行过程中增删组件,增删连接件,修改连接关系
- DSA 基本原理:运行时刻体系结构相关信息的改变可用来触发、驱动系统自身的动态调整
- 系统必须提供 SA 动态演化的一些相关功能:保存当前软件架构信息的功能、设置监控机制监视系统有无需求变化、保证演化操作原子性
- 大体遵循以下步骤一:捕捉分析需求变化、生成体系结构演化策略、选择适当的演化策略并实施演化、评估与检测
- 基于软件动态重配置 DR 的软件架构动态演化主要指在软件部署后对配置信息的修改
软件架构演化评估方法
- 根据演化过程是否已知可将评估过程分为演化过程已知/未知的评估
- 已知的评估目的在于通过对架构演化过程进行度量,对该演化过程中相关质量属性进行评估
- 基本思路在于通过对演化前后的软件架构进行度量
- 具体包括架构修改影响分析、监控演化过程、分析关键演化过程
- 演化过程未知时,根据演化前后的度量结果逆向推测出架构发生了哪些改变,并分析这些改变和架构相关质量属性的关联关系
软件架构维护
- 涉及架构知识管理、架构修改管理和架构版本管理
- 知识管理:对架构设计中所隐含的决策来源进行文档化表示。架构知识 = 架构设计 + 架构设计决策。侧重于软件开发和实现过程所设计的架构静态演化,从架构文档等信息来源
- 软件架构修改管理中一个主要的做法就是建立一个隔离区域保障该区域的任何修改对其他部分的影响较小、甚至没有影响
- 版本管理为软件架构演化的版本演化控制、使用和评价等提供了可靠的依据