软件架构静态演化

news2024/12/28 19:30:59

1.静态演化需求

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

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

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

2.静态演化的一般过程

         软件静态演化是系统停止运行期间的修改和更新,即一般意义上的软件修复和升级。与此相对应的维护方法有3类:更正性维护、适应性维护和完善性维护

        软件的静态化一般包括如下5个步骤,如图1所示。

 图1 静态演化过程模型

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

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

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

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

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

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

         一次完整软件架构演化过程可以看作经过一系列原子演化操作组合而成。所谓原子演化操作指基于UML模型表示的软件架构,在逻辑语义上粒度最小的架构修改操作。这些操作并非物理结构上不可分割。例如增加一个新的模块,该模块需要与架构其余部分相关联,必然导致模块间依赖关系的增加。然而模块的增加还涉及模块内部的类、接口以及与模块相关的规约条件,这些对架构相关质量属性的度量均有影响,因而我们认为模块的增加是单独的原子粒度不可再拆分的架构修改操作。

4.静态演化实例:正交软件架构(Orthogonal Software Architecture)

         再静态演化中,为了高效地对修改进行分析和管理,一种应用广泛的处理方式是使用正交软件架构。

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

图2 正交软件体系结构的演化 

        这样,正交体系的演化过程概括如下: ①需求变动归类,是需求的变化和现有组件及线索相对应,判断重用情况;②制订架构演化计划;③修改、增加或删除组件;④更新组件之间的相互作用;⑤产生演化后的软件架构,作为系统更新的详细设计方案和实现基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1596868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二期 1.3 Spring Cloud Alibaba微服务组件Nacos注册中心介绍

文章目录 一、注册中心有什么用?二、注册中心对比三、Nacos是什么?3.1 Nacos 基本概念3.2 Nacos 主要功能3.3 Nacos 优势一、注册中心有什么用? 谈起微服务架构,总会提到注册中心,它是微服务架构必不可少的组件之一,那么注册中心作用到底是什么? 话说微服务架构下 服务…

Qt---控件的基本属性

文章目录 enabled(控件可用状态)geometry(位置和尺寸)简单恶搞程序 windowIcon(顶层 widget 窗口图标)使用 qrc 机制 windowOpacity(窗口的不透明值)cursor(当鼠标悬停空间上的形状)自定义鼠标图标 toolTip(鼠标悬停时的提示)focusPolicy(控件获取焦点的策略)styleSheet(通过CS…

Navicat连接SQL server出现:[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序(0)

问题 解决方法 一 找到Navicat的安装路径,然后找到sqlncli_x64.msi文件并安装,安装成功后重启Navicat重新进行连接,看是否成功。 解决方法 二 如果方法一没有找到找到sqlncli_x64.msi 还是Navicat的安装路径,然后找到msodbcsql_64…

【网络编程】Linux网络内核结构以及分布剖析

hello !大家好呀! 欢迎大家来到我的网络编程系列之Linux网络内核结构以及分布剖析,在这篇文章中,你将会学习到在Linux内核中如何实现网络数据的输入和输出的,并且我会给出源码进行剖析,以及手绘UML图来帮助…

实现iOS App代码混淆

简介 在开发iOS应用程序时,保护代码安全是至关重要的。代码混淆是一种常用的技术,可以增加逆向工程的难度,防止他人对代码的篡改和盗用。本文将介绍如何实现iOS App代码混淆的步骤和操作方法。 整体流程 下面是实现iOS App代码混淆的整体流…

Cosmopolitan Libc 工作原理与多平台使用方法教程(x64 Linux / WSL2 / Windows)

⚠️阅读前请注意 本博客适用于Cosmopolitan Libc 3.X版本,不适用于Cosmopolitan Libc 2.X版本。Cosmopolitan Libc 是一个非常年轻的项目,可能存在各种问题。Cosmopolitan Libc 仍处于快速迭代开发之中,本文内容在一定时期内会持续更新。 Co…

xhci 数据结构

xhci 数据结构 xhci 数据结构主要在手册上有详细的定义,本文根据手册进行归纳总结: 重点关注的包括: device contexttrb ringtrb device context设备上下文 设备上下文数据结构由xHC管理,用于向系统软件报告设备配置和状态信息。…

Java反序列化基础-类的动态加载

类加载器&双亲委派 什么是类加载器 类加载器是一个负责加载器类的对象,用于实现类加载的过程中的加载这一步。每个Java类都有一个引用指向加载它的ClassLoader。而数组类是由JVM直接生成的(数组类没有对应的二进制字节流) 类加载器有哪…

Qt 3 QVariant类的使用和实例

QVariant, 类本质为 C联合(Union)数据类型,它可以保存很多Qt 类型的值,包括 QBrush、QColor、QString 等等。也能够存放Qt的容器类型的值。QVariant::StringList 是 Qt定义的一个 QVariant::type 枚举类型的变量,其他常用的枚举类型变量如下表…

《QT实用小工具·二十五》日志重定向输出

1、概述 源码放在文章末尾 日志重定向输出,包含如下功能: 支持动态启动和停止。支持日志存储的目录。支持网络发出打印日志。支持输出日志上下文信息比如所在代码文件、行号、函数名等。支持设置日志文件大小限制,超过则自动分文件&#xf…

FreeBuf 全球网络安全产业投融资观察(3月)

综述 据不完全统计,2024年3月,全球网络安全市场共发生投融资事件53起,其中国内4起,国外49起。 3月全球络安全产业投融资统计表(数据来源:航行资本、36氪) 整体而言,国内4起投融资事…

强化学习-Reinforcement learning | RL

目录 什么是强化学习? 强化学习的应用场景 强化学习的主流算法 强化学习是机器学习的一种学习方式,它跟监督学习、无监督学习是对应的。本文将详细介绍强化学习的基本概念、应用场景和主流的强化学习算法及分类。 什么是强化学习? 强化学习并不是某一种特定的算法,而是…

Python数据容器(一)

一.数据容器入门 1.Python中的数据容器:一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素,每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。 2.数据容器根据特点的不同,如&#…

boot https ssl

生成命令: keytool -importkeystore -srckeystore D:\sslTest.keystore -destkeystore D:\sslTest.keystore -deststoretype pkcs12keytool -genkeypair -alias "sslTestKey" -keyalg "RSA" -keystore "D:\sslTest.keystore"yml: s…

Shiro配置类中的各个配置项浅谈

背景: 上文中在落地实践时,对Shiro进行了相关的配置,并未对其含义作用进行详细学习,本章将进一步详解其作用含义。 Shiro配置类中的各个配置项的作用: Bean public SecurityManager securityManager() { Default…

初识集合框架

前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&#x1f…

分享2024 golang学习路线

写在前面 Go语言(也称为Golang)是Google开发的一种静态强类型、编译型语言,它具有简洁、快速、安全、并发等特点,尤其适合构建大型软件、微服务架构和云平台服务。Go的学习曲线相对平缓,社区活跃,是现代编…

吴恩达llama课程笔记:第四课提示词技术

羊驼Llama是当前最流行的开源大模型,其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型,Llama拥有7B、13B和70B(700亿)三种版本,满足不同场景和需求。 吴恩…

在Windows上配置VS Code GO语言开发环境

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

上岸必看:C++ 24校招/25实习求职指南

校招和实习是应届生步入职场的重要途径,是职业生涯的起点。 通过实习和校招进入的岗位,C应届生能够更好地了解行业现状,明确自己的职业兴趣和发展方向。有的时候,实际工作中的体验甚至会引导你重新考虑和规划自己的职业道路。 并…