动态体系结构主要通过软件体系结构的动态演化来体现其动态性。其动态性指软件体系结构在运行时刻发生变化,这种变化通常源于系统需求、技术、环境、分布等因素的动态变化。
软件体系结构是对软件系统的整体组织结构以及控制结构的刻画,包括对系统中各计算单元(构件)的功能分配和各单元之间的高层交互说明(连接件)的约束。对于一些需要长期运行且具有特殊使命的系统(如航空航天、生命维持、金融、交通等),如果系统的需求或所处环境发生了变化,此时通过停止系统运行进行更新或维护将会产生高额的费用和巨大的风险,对系统的安全性也会产生很大的影响。传统的静态体系结构缺乏表示动态更新的机制,很难用它来分析、描述在运行时更新的系统,更不能用它来指导系统进行动态演化。因此,动态体系结构的研究应运而生。此外,随着网络和许多新兴软件技术的发展,人们对软件体系结构也提出了许多更高的要求,如软件体系结构的扩展性、复用性和适应性等。采用动态体系结构,不仅能够帮助一些具有特殊使命的系统在运行时根据需求进行更新,并降低更新的费用和风险,还可以增强系统的用户自定义性和可扩展性,为用户提供更新系统属性的服务。
对动态体系结构的研究主要集中在动态演化、模拟/描述软件体系结构动态演化的语言和支持软件体系结构动态演化的执行工具三个方面。首先,对于动态演化的研究主要围绕着动态演化的需求来源、动态演化时期、动态演化类型、动态演化方法等方面展开。体系结构的动态演化主要来自两类需求:软件内部执行所导致的体系结构改变;软件系统外部的请求对软件进行重配置。动态体系结构的演化一般发生在四个时期:①设计时期。演化发生在与体系结构模型相关的代码编译之前。②预执行时期。演化发生在执行之前、编译之后。③受约束的运行时期。演化只发生在某些特定约束满足时。④运行时期。系统的体系结构在运行时不能满足要求而发生的改变。动态演化类型分为三类:交互动态性;结构动态性;体系动态性。一般而言,实现软件体系结构动态演化的基本方法是将动态体系结构在可运行应用系统中以一类有状态、有行为、可操作的实体形式显式地表示出来,并且被整个运行环境共享,作为整个系统运行的依据。也就是说,体系结构相关信息的改变可用来触发、驱动系统自身的动态调整。
动态体系结构描述语言可分为形式化和非形式化两类。研究主流是形式化描述语言。形式化描述语言要求既要能够描述构件、连接件等单独的实体,体现软件体系结构关于构件、连接件的属性,如构件的抽象特点、连接件的通用性等,又要能够描述构件和连接件的交互,进行构件与连接件之间的一致性检查,更重要的是还要能够描述系统体系结构的运行时演化。用于描述动态体系结构的形式化语言主要来自对现有的一些体系结构描述语言的扩展,采用到的技术主要有:基于图论的方法;进程代数方法;基于逻辑重写的方法。
对软件体系结构动态演化的执行工具研究在国内外都比较多。根据体系结构指导软件系统演化时所采用的技术,可将动态演化的执行工具分为:①基于反射原理。反射是计算系统监控自己状态从而改变自身运行方式的一种能力。②基于构件操作。构件是软件系统的一个特定功能单位,主要由一组信息、行为和接口组成。③基于反演工作流。反演计算是一个程序在执行时对描述自身的数据进行操作的能力。④基于π演算。π演算是在通信系统演算(calculus of communicating systems; CCS)基础上提出的基于命名概念的进程代数并发通信行为演算方法。⑤基于不动点转移的矩阵变换。将软件体系结构作为一个整体来观察它在不同时刻稳态之间的迁移和波动。⑥利用一个外部的体系结构演化管理器。