【愚公系列】软考高级-架构设计师 108-软件架构演化方式的分类
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
软件架构演化方式可以根据演化的方式和原因进行分类。以下是一些常见的软件架构演化分类方式:
-
按照演化方式分类:
- 逐步演化:通过逐步迭代的方式对软件架构进行调整和优化,每次演化都是渐进式的。
- 革命性演化:突然性的、全面的架构变革,通常在需要彻底重构或重建时发生。
- 增量式演化:通过不断添加新功能或组件来演化软件架构,保持现有架构的基本结构不变。
- 转换性演化:将软件架构从一种形式转变为另一种形式,通常会涉及到技术栈、架构风格等的转变。
-
按照演化原因分类:
- 需求演化:由于需求变化,需要对软件架构进行调整或改进。
- 技术演化:随着新技术的出现或发展,需要对软件架构进行更新或升级。
- 性能演化:为了提高系统性能或可扩展性,需要对软件架构进行调整或优化。
- 质量演化:为了提高软件的可靠性、安全性或可维护性,需要对软件架构进行改进。
- 扩展演化:为了适应新的业务需求或用户规模增长,需要对软件架构进行扩展或升级。
-
按照演化的影响范围分类:
- 局部演化:仅对软件架构的某个局部或模块进行调整或优化。
- 全局演化:对整个软件架构进行全面性的调整或重构。
-
按照演化的频率分类:
- 持续演化:软件架构在持续不断地演化和迭代中不断优化和调整。
- 间歇演化:软件架构在一定时间间隔内进行一次较大规模的演化或改进。
通过对软件架构演化方式进行分类,可以更好地理解软件架构变化的原因和方式,有助于制定合适的架构演化策略,保证软件系统的持续健康发展。
🚀一、软件架构演化方式的分类
🔎1.软件架构演化的3种分类方法
-
按照软件架构的实现方式和实施粒度分类:
- 基于过程和函数的演化
- 面向对象的演化
- 基于组件的演化
- 基于架构的演化
-
按照研究方法分类:
- 第一类:对演化的支持,如代码模块化的准则、可维护性的指示(如内聚和耦合)、代码重构等
- 第二类:版本和工程的管理工具
- 第三类:架构变换的形式方法,包括系统结构和行为变换的模型,以及架构演化的重现风格等
- 第四类:架构演化的成本收益分析,决定如何增加系统的弹性
-
按照软件架构演化过程是否处于系统运行时期分类:
- 静态演化
- 动态演化
🔎2.软件架构的演化时期
-
设计时演化:发生在体系结构模型和相关代码编译之前的软件架构演化阶段。
-
运行前演化:发生在代码编译后、但应用程序执行之前的软件架构演化。在这个阶段,可以不考虑应用程序的状态,但需要考虑系统的体系结构,并且系统需要具备添加和删除组件的机制。
-
有限制运行时演化:系统在设计时规定了演化的具体条件,将系统置于“安全”模式下。演化只能在特定约束满足时进行,限制了可以执行的演化操作。
-
运行时演化:系统的体系结构在运行时无法满足需求时发生的软件架构演化。这包括添加组件、删除组件、升级替换组件、改变体系结构的拓扑结构等操作。这种演化通常是最具挑战性的,因为必须在系统运行时维持其正常操作。
🦋2.1 静态演化
软件架构的静态演化主要发生在设计时演化和运行前演化阶段。与之对应的维护方法有三类:
- 更正性维护:修复系统中的错误。
- 适应性维护:调整系统以适应新的需求或环境。
- 完善性维护:增强系统的功能和性能。
软件的静态演化通常包括以下五个步骤:
- 软件理解:查阅软件文档,分析软件架构,识别系统组成元素及其相互关系,提取系统的抽象表示形式。
- 需求变更分析:分析用户需求变化、系统运行出错和运行环境改变等原因,找出新的软件需求与原有需求的差异。
- 演化计划:分析原系统,确定演化范围和成本,选择合适的演化计划。
- 系统重构:根据演化计划对系统进行重构,使其适应当前的需求。
- 系统测试:对演化后的系统进行测试,查找错误和不足之处。
一个完整的软件架构演化过程可以看作由一系列原子演化操作组合而成。原子演化操作是指基于UML模型表示的软件架构,在逻辑语义上粒度最小的架构修改操作。每次原子演化操作后,架构会形成一个演化中间版本。
架构演化的可维护性度量基于组件图表示的软件架构,在较高层次上评估架构的某个原子修改操作对整个架构的影响。这些原子修改操作包括增加/删除模块间的依赖、增加/删除模块间的接口、增加/删除模块、拆分/聚合模块等。
架构演化的可靠性评估基于用例图、部署图和顺序图,分析在架构模块交互过程中某个原子演化操作对交互场景可靠性的影响。这些原子修改操作包括增加/删除消息、增加/删除交互对象、增加/删除/修改消息片段、增加/删除用例执行、增加/删除角色等。
🦋2.2 动态演化
☀️2.1.1 动态演化两类需求
动态演化是在系统运行期间进行的演化,需要在不停止系统功能的情况下完成,这使得它较之静态演化更加困难。动态演化具体发生在有限制的运行时演化和运行时演化阶段。架构的动态演化主要来自两类需求:
-
软件内部执行所导致的体系结构改变:
- 例如,许多服务器端软件会在客户请求到达时创建新的组件来响应用户需求。假设有一个在线游戏服务器,它需要动态地创建新游戏房间以响应不同的玩家请求。当玩家请求加入一个新的游戏房间时,服务器会根据请求创建一个新的游戏房间。
-
软件系统外部的请求对软件进行的重配置:
- 例如,操作系统在升级时无须重新启动,在运行过程中就完成对体系结构的修改。在操作系统中,内核负责管理硬件资源和执行系统级任务。当需要进行内核更新时,通常不需要重新启动整个计算机。
☀️2.1.2 动态演化的必要性
动态演化的必要性:对于一些需要长期运行且具有特殊使命的系统(如航空航天、生命维持、金融、交通等),如果系统需求或环境发生变化,停止系统运行进行更新或维护将产生高额费用和巨大风险,并对系统的安全性产生很大影响。
☀️2.1.3 软件的动态演化等级
软件的动态演化等级分为三个级别:
- 交互动态性:要求数据在固定的结构下动态交互。
- 结构动态性:允许对结构进行修改,通常形式是组件和连接件实例的添加和删除,这种动态性是研究和应用的主流。
- 架构动态性:允许软件架构的基本构造的变动,即结构可以被重定义,如新的组件类型的定义。
☀️2.1.3 软件的动态演化四个方面
根据所修改的内容不同,软件的动态演化主要包括以下四个方面:
-
属性改名:目前所有的ADL(架构描述语言)都支持对非功能属性的分析和规约,而在运行过程中,用户可能会对这些指标进行重新定义,比如将服务响应时间改为响应时间。
-
行为变化:在运行过程中,用户需求变化或系统自身服务质量的调节都将引发软件行为的变化。例如,一个在线社交媒体平台,最初允许用户发布文字和图片。然后,用户需求发生变化,要求支持视频发布;又或者为了提高安全级别而更换加密算法,将HTTP协议改为HTTPS协议。
-
拓扑结构改变:如增删组件,增删连接件,改变组件与连接件之间的关联关系等。例如,一个分布式系统中有多个服务节点,它们相互连接以共同处理请求。随着系统的扩展,需要增加新的服务节点,同时删除一些不再需要的旧节点。
-
风格变化:一般软件演化后其架构风格应当保持不变,如果必须改变软件的架构风格,也只能将架构风格变为其衍生风格。例如,一个企业级应用程序最初采用了两层客户端/服务器(C/S)架构,其中客户端直接与数据库交互。后来,由于需求的变化或性能问题,决定将架构改变为三层C/S架构,其中增加了应用服务器层来处理业务逻辑。
☀️2.1.4 软件架构动态演化的技术
目前,实现软件架构动态演化的技术主要有两种:采用动态软件架构(DSA)和进行动态重配置(DR)。
-
动态软件架构(DSA):
- DSA是指在运行时刻会发生变化的系统框架结构,允许在运行过程中通过框架结构的动态演化实现对架构的修改。
-
动态重配置(DR):
- DR从组件和连接件的配置入手,允许在运行过程中增删组件,增删连接件,修改连接关系等操作。
实现软件架构动态演化的基本原理是使DSA在可运行应用系统中以一类有状态、有行为、可操作的实体显式地表示出来,并且被整个运行环境共享,作为整个系统运行的依据。也就是说,实现软件架构动态演化的关键是将DSA作为一个有状态、有行为、可操作的实体显式地表示出来,并将其共享给整个运行环境,使系统能够根据DSA进行运行和调整。
假设一个电商网站的软件架构需要进行动态演化,以支持新的促销活动。传统的做法是重新设计和开发整个软件系统,这需要大量的时间和成本。而使用DSA,则可以将新的促销活动规则作为DSA的一部分进行添加,而无需修改现有的软件代码。这样,系统能够快速地适应新的需求,而无需进行大规模的改造。
DSA实施动态演化的大体步骤:
- 捕捉并分析需求变化。
- 获取或生成体系结构演化策略。
- 根据步骤2得到的演化策略,选择适当的演化策略并实施演化。
- 演化后的评估与检测。
基于软件动态重配置的软件架构动态演化主要是指在软件部署之后对配置信息的修改,常常被用于系统动态升级时需要进行的配置信息修改。
动态重配置可能涉及的修改:
- 简单任务的相关实现修改。
- 工作流实例任务的添加和删除。
- 组合任务流程中的个体修改。
- 任务输入来源的添加和删除。
- 任务输入来源的优先级修改。
- 组合任务输出目标的添加和删除。
- 组合任务输出目标的优先级修改等。
动态重配置模式:
- 主从模式
- 中央控制模式
- 客户端/服务器模式
- 分布式控制模式
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)