《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-07-软件架构维护

文章目录

  • 1. 软件架构知识管理
    • 1.1 概念
    • 1.2 架构知识的获取
    • 1.3 作用
    • 1.4 架构知识管理的现状
  • 2 软件架构修改管理
  • 3 软件架构版本管理
  • 4. 示例
    • 4.1 背景
    • 4.2 数据获取
    • 4.3 数据计算
    • 4.4 结果分析
      • 4.4.1 圈复杂度 (CCN)
      • 4.4.2 扇入扇出度 (FFC)
      • 4.4.3 模块间耦合度 (CBO)
      • 4.4.4 模块的响应 (RFC)
      • 4.4.5 模块间内聚度TCC和 LCC

软件架构维护过程设计以下内容:架构知识管理、架构修改管理、架构版本管理

1. 软件架构知识管理

1.1 概念

  • 架构知识 = 架构设计 + 架构设计决策

即,需要说明在进行架构设计时采用此种架构的原因

  • 涵盖内容:
    • 架构的解决方案
    • 产生该方案的架构设计决策、设计依据

1.2 架构知识的获取

  • 侧重于架构静态演化
  • 从架构文档等信息来源中捕捉架构知识

1.3 作用

  • 有助于架构进一步的演化
  • 为其他软件架构的相关活动提供参考

1.4 架构知识管理的现状

  • 架构相关利益者因为动机不足,不会使用文档记录架构知识
    • 相对成本高
    • 利益相关者对工程短期兴趣大于架构知识重用的兴趣
    • 开发者对创造性工作的兴趣大于反思设计决策长远影响的兴趣。
  • 即使实现了文档化,通常架构知识也不能在整个组织中得到充分的分享

如果不进行管理,关键的设计知识就会“沉没”在软件架构之中,人员发生变动,将会使“沉没”的架构知识“腐蚀”

2 软件架构修改管理

  • 思路:
    • 是建立一个隔离区域 (Rcgion of Quiescence)
    • 保障该区域中任何修改对其他部分的影响比较小,甚至没有影响
  • 做法:
    • 为此,需要明确修改规则、修改类型,可能的影响范围、副作用等

3 软件架构版本管理

  • 作用:
    • 为版本演化的控制、使用、评价等提供了可靠的依据
    • 为架构演化量化度量奠定了基础

4. 示例

4.1 背景

  • 待评估的 Web读写系统的组件图如下:
    在这里插入图片描述

4.2 数据获取

  • 操作:
    • 将组件图转换为XML文件
    • 将XML文件输入架构评估系统
    • 解析出可维护度量所需的数据,如下:

在这里插入图片描述

在这里插入图片描述

上表说明:

  • L:组件图数目
  • totalN :外部组件数目
  • totalE :与外部组件相连的边的数据
  • S:组件内部组件数目
  • E:依赖出边数目
  • X:依赖入边数目
  • R:使用接口数目
  • W:提供接口数目

4.3 数据计算

根据可维护性的6个子度量指标的度量公式,利用解析得到的架构评估数据分别进行度量

  • 圈复杂度 (CCN)
    度量整个架构的独立执行路径的条数,直接得出最终度量结果
  • 扇入扇出度 (FFC)、 模块间耦合度 (CBO)、 模块的响应 (RFC)、 紧内聚度 (TCC)、 松内聚度 (LCC)
    针对每个组件进行度量,最终度量结果取所有组件的平均值
  • 组件Client Application为各个子度量指标的计算方法:
    在这里插入图片描述
  • 其他组件的度量方法:
    • 与Client Application相同
    • 由于均没有子组件,P(S) 的果为0, 无法计算该组件模块的内聚度,以 “not applied” 表示(即,没有子组件,内聚度最小)
  • 度量结果如图所示:
    在这里插入图片描述

4.4 结果分析

4.4.1 圈复杂度 (CCN)

  • 目的:
    • 对整个系统的复杂程度做出初步评估
    • 并预测待评估系统的测试复杂度
    • 及早规避风险,提高软件质量
  • 标准: CCN≤10 为宜。

4.4.2 扇入扇出度 (FFC)

  • 概念:
    • 扇入:指直接调用该模块的上级模块的个数
    • 扇出:指该模块直接调用的下级模块的个数
  • 目的:综合评估组件主动调用以及被调用的频率
    • 扇入扇出度越大,表明该组件与其他组件间的接口关联或依赖关联越多

在这里插入图片描述

4.4.3 模块间耦合度 (CBO)

  • 目的:度量模块与其他模块交互的频繁程度

CBO越大可维护性越差,风险越高

在这里插入图片描述

4.4.4 模块的响应 (RFC)

  • 目的:度量组件执行所需的功能的数量
    • 包括:接口提供的功能、依赖的其他模块提供的功能、子模块提供的功能
      在这里插入图片描述

DB、RemoteDB、LocalDB等没有对其他模块的依赖和调用,且不包含子模块,因而其 RFC度量值为0

4.4.5 模块间内聚度TCC和 LCC

只有组件ClientApplication 具有子模块,因而对该组件进行度量,并将该组件的度量值作为待评估系统的最终结果


在这里插入图片描述

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

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

相关文章

mysql group by 细节介绍

mysql中group by的用法是配合聚合函数,利用分组信息进行统计,语句如“select name,sum(id) from test group by name,number”。 先来看下表1,表名为test: 执行如下SQL语句: SELECT name FROM test GROUP BY name 你…

OFDM802.11a的FPGA实现(十四)data域的设计优化,挤掉axi协议传输中的气泡

原文链接(相关文章合集):OFDM 802.11a的xilinx FPGA实现 目录 1.前言 2.data域的时序要求 3.Debug 1.前言 前面12篇文章详细讲述了,OFDM 802.11a发射部分data域的FPGA实现和验证,今天对data域的设计做一个总结。在…

springboot306基于Java的民宿管理系统(源码+包运行+配套LW+技术指导)

项目描述 临近学期结束,开始毕业设计制作,你还在做java程序网络编程,期末作业,老师的作业要求觉的困难吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于Java的民宿管理…

CoSeg: Cognitively Inspired Unsupervised Generic Event Segmentation

名词解释 1.特征重建 特征重建是一种机器学习中常用的技术,通常用于自监督学习或无监督学习任务。在特征重建中,模型被要求将输入数据经过编码器(encoder)转换成某种表示,然后再经过解码器(decoder&#x…

升级Microsoft 365后,SAP GUI中无法打开Excel的解决方案

最近,我们遇到了一个棘手的问题,一位客户在升级到Microsoft 365后,无法在SAP GUI中打开Excel。这个问题不仅影响了工作效率,也给用户的日常操作带来了不便。在本文中,我们将探讨问题的成因,并提供一种解决方…

泛微E9开发 添加多个多选框,实现单选框的效果

利用多个多选框实现单选框的效果 1、功能背景2、展示效果3、实现效果 1、功能背景 如下图所示,在表单中新增四个“选择框-复选框”类型的字段,并且设置其中的选项,每个多选框都只有一个选项,通过代码块实现单选框的效果 1.显示模…

邓闲小——生存、生活、生命|真北写作

人生有三个层次∶生存、生活、生命。 生存就是做必须做的事。生存的模式是邓,是交易,是买卖。别人需要的东西,你生产出来,卖给他。哪怕这个东西没啥用,也可以卖,情绪也可以卖。你需要的东西,你花…

分布式与一致性协议之POW算法

POW算法 概述 谈起比特币,你应该并不陌生。比特币是基于区块链实现的,而区块链运行在因特网上,这就存在有人试图作恶的情况。有些读者可能已经发现了,口信消息型拜占庭问题之解、PBFT算法虽然能防止坏人作恶,但只能防…

八、e2studio VS STM32CubeIDE之内存使用情况窗口

目录 一、概述/目的 二、STM32CubeIDE Build Analyzer 三、e2studio Memory Usage 八、e2studio VS STM32CubeIDE之内存使用情况窗口 一、概述/目的 1、嵌入开发最大特点之一就是资源受限,关注芯片资源使用详情是优秀工程师的技能之一 2、Keil和IAR都不支持内存…

CTFshow 信息搜集

第一题1 进入靶场 直接看源码发现flag 第二题 1 按右键没办法看源码 按ctrlu可以查看源码 第三题 0 查看源码 发现还是什么都没有 用bp抓包发现flag 第四题1 直接进robots.txt 访问flagishere.txt获得flag 第五题 0 提示了phps源码泄露 用目录扫描工具没扫出来 看wp 发现有…

网络编程套接字详解

目录 1. 预备介绍 2.网络字节序 3.udp网络程序 4.地址转换函数 5.udp网络编程 1.预备介绍 1.1源IP地址和目标IP地址 举个例子: 从北京出发到上海旅游, 那么源IP地址就是北京, 目标IP地址就是上海. 1.2 端口号 作用: 标识一个进程, 告诉OS这个数据交给那个进程来处理; (1)…

Oracle: 一个用户多个表空间处理

1.场景描述 今天工作中,同事说建了一个用户,往里面导入数据时提示表空间不存在,建了表空间后,部分仍然导不进去。期望帮忙创建表空间,并指定默认表空间,成功将数据导入。 (1)创建好的…

K8s:二进制安装k8s(单台master)

目录 一、安装k8s 1、拓扑图 2、系统初始化配置 2.1关闭防火墙selinx以及swap 2.2设置主机名 2.3在每台主机中添加hosts,做映射 2.4调整内核参数,将桥接的ipv4流量传递到iptables,关闭ipv6 2.4时间同步 3、部署docker引擎&#xff0…

使用LangChain和Neo4j快速创建RAG应用

大家好,Neo4j 通过集成原生的向量搜索功能,增强了其对检索增强生成(RAG)应用的支持,这标志着一个重要的里程碑。这项新功能通过向量索引搜索处理非结构化文本,增强了 Neo4j 在存储和分析结构化数据方面的现…

表征和基于结构的蛋白质工程:黄芪特异性皂苷乙酰转移酶-文献精读14

Characterization and structure-based protein engineering of a regiospecific saponin acetyltransferase from Astragalus membranaceus 表征和基于结构的蛋白质工程:黄芪特异性皂苷乙酰转移酶,一篇乙酰基转移酶文章精读分享~ 摘要 乙酰化有助于许…

【C++】继承相关(基类与派生类的继承关系以及细节整理)

目录 00.引言 01.继承的定义 02.基类和派生类对象 03.继承中的作用域 04.派生类的默认成员函数 05.友元、静态成员 00.引言 继承是面向对象编程中的一个重要概念,它的作用是创建一个新的类,该类可以从一个已存在的类(父类/基类&#x…

服务攻防——数据库安全

第一步: 端口扫描:nmap 扫不到端口:端口被修改,防护软件,放在内网环境 mysql 内置端口3306 第一种官方漏洞 第一步:先扫描有什么端口开发 用这个错误密码一直访问,最终就进去了 弱口令猜解 不可以直接猜解&#x…

机器人学导论实验1—CoppeliaSim 平台介绍及初步使用BJTU

1. 实验内容分析 对实验内容的理解及关键点: 理解这个实验的关键点在于理解如何使用CoppeliaSim和MATLAB来控制和操作机器人。需要熟悉这两个工具的基本操作,例如如何加载场景、如何修改机器人参数、如何使用MATLAB客户端程序来控制机器人等。此外&#…

Docker 部署 Prometheus 实现一个极简的 QPS 监控

背景 : Prometheus 是近年来最流行的开源监控框架, 其功能强大且易于使用, 拥有各种主流后端语言(Java/Go/Python/Node.js等)与各种场景(如web handler/ k8s/Nginx/MySQL等)的客户端, 并自带图形化显示页面。分享一个快速入门Prometheus 的教程, 实现一个极简的, 后端开发需要特…

Nginx-基础-基础配置-Location

Location 参数匹配模式 参数匹配方式匹配模式说明注意事项精准匹配普通字符串匹配用于标准uri前,要求请求字符串与uri精准匹配,成功则立即处理,nginx停止搜索其他匹配。~正则匹配正则表达式匹配用于正则uri,表示uri包含正则表达…