知识卡片

软件架构演化发生的四个时期

结构图卡

内容

按”演化过程是否处于系统运行时期”,架构演化可分静态演化(发生在架构设计、实现和维护过程中,软件系统还未运行或处在停止运行状态)和动态演化(发生在软件系统运行过程中)——但更细粒度地看,演化实际发生在四个时期,难度依次递增。设计时演化:发生在架构模型和与之相关的代码编译之前,此时改动成本最低。运行前演化:发生在编译之后、执行之前,此时应用程序尚未执行,修改可以不考虑应用程序的运行状态,但需要考虑系统的体系结构,且系统需要具备添加和删除组件的机制。有限制的运行时演化:系统在设计时就预先规定了演化的具体条件,把系统置于”安全”模式下,演化只在某些特定约束满足时才发生,能进行的都是规定好的演化操作,本质上是用预先设计好的”安全阀”换取运行时的可控演化能力。运行时演化:系统体系结构在运行时不能满足要求时发生的改变,包括添加组件、删除组件、升级替换组件、改变体系结构拓扑结构,此时的演化是四种里最难实现的——因为系统必须在不停止服务的前提下,同时保证演化操作的正确性和系统状态的一致性。这四个时期的递进关系揭示了一个基本规律:越早期的演化,付出的代价越可控(可以从容验证、无须担心运行时状态);越晚期的演化,代价和风险越高,但对于必须长期不间断运行的系统(如航空航天、金融交易系统),运行时演化又恰恰是唯一现实的选择。

结构图

flowchart LR
    A["设计时演化<br/>模型/代码编译前<br/>成本最低"] --> B["运行前演化<br/>编译后/执行前<br/>不必考虑运行状态"]
    B --> C["有限制的运行时演化<br/>预设安全模式<br/>满足约束才能演化"]
    C --> D["运行时演化<br/>系统不停止运行<br/>难度最高"]

参考来源

- 位置:《软件架构理论与实践》第9章《软件架构的演化和维护》"9.2 软件架构演化方式的分类"节(源文件:_epub-src/OEBPS/text00073.html) - 结论依据:原文列出软件架构演化发生的四个时期("设计时演化(design-time evolution)……运行时演化(runtime evolution):系统的体系结构在运行时不能满足要求时发生的改变……此时的演化是最难实现的"),直接支撑本卡片的结构图与内容解释。 - 原始内容:·有限制的运行时演化(constrained runtime evolution):系统在设计时就规定了演化的具体条件,将系统置于"安全"模式下,演化只发生在某些特定约束满足时,可以进行一些规定好的演化操作。·运行时演化(runtime evolution):系统的体系结构在运行时不能满足要求时发生的改变……此时的演化是最难实现的。