首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

系统架构设计师:软件架构的演化和维护--软件架构静态演化

1.静态演化需求

软件架构静态演化的需求是广泛存在的,可以归结为两个方面。

(1)设计时演化需求。在架构开发和实现过程中对原有架构进行调整,保证软件实现与架构的一致性以及软件开发过程的顺利进行。

(2)运行前演化需求。软件发布之后由于运行环境的变化,需要对软件进行修改升级,在此期间软件的架构同样要进行演化。

下面分别介绍软件演化中的架构静态演化和适应该静态演化的应用实例一一正交软件架构,以及软件开发过程中的架构静态演化。

2.静态演化的一般过程

软件静态演化是系统停止运行期间的修改和更新,即一般意义上的软件修复和升级。与此相对应的维护方法有3类:更正性维护、适应性维护和完善性维护。软件的静态演化一般包括如下5个步骤,如图10-4所示。

软件理解:查阅软件文档,分析软件架构,识别系统组成元素及其之间的相互关系,提取系统的抽象表示形式。

需求变更分析:静态演化往往是由于用户需求变化、系统运行出错和运行环境发生改变等原因所引起的,需要找出新的软件需求与原有的差异。

演化计划:分析原系统,确定演化范围和成本,选择合适的演化计划。

系统重构:根据演化计划对系统进行重构,使之适应当前的需求。

系统测试:对演化后的系统进行测试,查找其中的错误和不足之处。

在系统未运行的情况下,软件功能的变更或环境变化可能会带来架构中组件元素的增加、替换、删除、组合和拆分操作。架构静态演化需要对这些操作给其他组件和系统本身带来的影响进行分析。通过对组件间的影响关系进行建模,按照可达矩阵的方式即可计算出每种组件变更操作所影响的范围。

3.静态演化的原子演化操作

一次完整软件架构演化过程可以看作经过一系列原子演化操作组合而成。所谓原子演化操作是指基于UM L模型表示的软件架构,在逻辑语义上粒度最小的架构修改操作。这些操作并非物理结构上不可分割。例如增加一个新的模块,该模块需要与架构其余部分相关联,必然导致模块间依赖关系的增加。然而模块的增加还涉及模块内部的类、接口以及与模块相关的规约条件,这些对架构相关质量属性的度量均有影响,因而我们认为模块的增加是单独的原子粒度不可再拆分的架构修改操作。每经过一次原子演化操作,架构会形成一个演化中间版本Ai。对于不同的质量属性度量和评估,影响该质量属性变化的原子演化操作类型不同,形成软件架构的中间版本序列A0,A1,A2,,An也不同。例如,假设我们需要度量软件架构的可维护性和可靠性,就应该讨论影响可维护性和可靠性的度量结果的各种原子演化操作。

1)与可维护性相关的架构演化操作

架构演化的可维护性度量基于组件图表示的软件架构,在较高层次上评估架构的某个原子修改操作对整个架构所产生的影响。这些原子修改操作包括增加/删除模块间的依赖、增加/删除模块间的接口、增加/删除模块、拆分/聚合模块等,如表10-1所示。

AMD/RMD:模块间的依赖关系体现了模块逻辑组织结构和控制关系,包含模块对其他模块的直接依赖和间接依赖,对模块依赖关系的修改改变了模块的控制关系以及逻辑响应,从整体上影响了架构的组织结构,可能导致架构的外部质量属性发生变化。

AMI/RMI:模块间的接口表示模块间的调用方式,模块通过接口直接提供相应可执行功能,对接口的修改可直接改变模块间的调用关系和调用方式,并可能导致具体的执行事件的顺序和方式发生更改。

AM/RM:在架构中,模块封装了一系列逻辑耦合度高或部署紧密的子模块,用来表达完整的功能。模块的增加、删除不仅仅表示软件功能的更改,该模块与其他模块的耦合方式可能使得架构整体组织结构的变化,从而引入AMD和RM D操作。过多的耦合会造成修改影响范围增大,不利于软件的维护以及持续演化。另外模块本身内部设计的正确性、合理性等问题将会影响软件潜在风险。

SM/AGM:拆分和聚合模块通常发生在软件调整过程中,对模块的拆分和聚合可直接影响软件的内聚度和耦合度,从而影响软件整体复杂性。

2)与可靠性相关的架构演化操作。

架构演化的可靠性评估基于用例图、部署图和顺序图,分析在架构模块的交互过程中某个原子演化操作对交五场景的可靠程度的影响。这些原子修改操作包括增加/删除消息、增加/删除交互对象、增加/删除/修改消息片段、增加/删除用例执行、增加/删除角色等,如表10-2所示。

AMS/RMS:模块间的消息交五体现在UML顺序图中。消息变化包含增加消息、删除消息和修改消息。消息的修改可能为顺序更改、交五对象更改等,该变化可通过删除原消息和增加新的消息等操作组合而成,因而这里只讨论原子粒度的增加消息和删除消息两种操作。消息的删减导致交互过程中时序复杂度的变化,可能引入运行时风险。

AO/RO:在顺序图中增加或删除交互对象将引入AMS/DMS操作,即与该对象相关的消息将同时被增加或删除,同时,在部署图中还须将该模块添加到相关站点或从相关站点删除该模块。由于一个执行场景的可靠性直接取决于组件和连接件的可靠性,交互对象的增减将直接影响一个或多个包含该模块的场景的交五复杂性。

AF/RF/CF:消息片段为顺序图中一组交互消息的循环调用,消息片段的增加、删除或者调用次数的修改将影响交互过程的复杂度,从而影响该场景的执行风险。

AU/RU:为参与者增加或删除可执行用例,表示参与者执行权限的变化,一般来说可执行用例越多的参与者其权限越高。用户在运行系统时以某一参与者的身份执行用例,由于其参与的执行事件的增加或者事件执行方式的多样化,将导致系统运行更为复杂,运行时风险增加。

AA/RA:增加或删除某一参与者意味着执行权限的增加或减少,该操作将引入AU/RU操作。参与者的增减虽然不会导致软件结构上的变化,然而不同的参与者有不同的执行方式,因而会导致系统动态交五上的变化,对程序运行时的风险有影响。

4.静态演化实例:正交软件架构(orthogonal Software Architecture)在静态演化中,为了高效地对修改进行分析和管理,一种应用广泛的处理方式就是使用正交软件架构。

对于复杂的应用系统,通过对功能进行分层和线索化,可以形成正交体系结构,同一层次中的组件不允许相互调用,故每个变动仅影响一条线索,如图10-5所示。

这样,正交体系的演化过程概括如下:

需求变动归类,使需求的变化和现有组件及线索相对应,判断重用情况;

制订架构演化计划;

修改、增加或删除组件;

更新组件之间的相互作用;

产生演化后的软件架构,作为系统更新的详细设计方案和实现基础。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O0EpzjuJSzmSaj6t827Sd1tQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券