《系统架构设计师教程(第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.hqwc.cn/news/696440.html

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

相关文章

深入探讨黑盒测试:等价类划分与边界值分析

文章目录 概要黑盒测试等价类划分边界值分析 设计测试用例小结 概要 在软件开发领域,测试是确保产品质量的关键步骤之一。而黑盒测试方法作为其中的一种,通过关注输入与输出之间的关系,而不考虑内部实现的细节,被广泛应用于各种软…

Python爬虫入门:网络世界的宝藏猎人

今天阿佑将带你踏上Python的肩膀,成为一名网络世界的宝藏猎人! 文章目录 1. 引言1.1 简述Python在爬虫领域的地位1.2 阐明学习网络基础对爬虫的重要性 2. 背景介绍2.1 Python语言的流行与适用场景2.2 网络通信基础概念及其在数据抓取中的角色 3. Python基…

SpringSecurity6实现动态权限,rememberMe、OAuth2.0授权登录,退出登录等功能

本文章对应视频可在B站查看SpringSecurity6对应视频教程,记得三连哦,这对我很重要呢! 温馨提示:视频与文章相辅相成,结合学习效果更强哦! 系列文章链接 1、初识SpringSecurity,认识主流Java权限…

代码大师的工具箱:现代软件开发利器

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

深入理解与应用C++ Vector

1. C Vector 简介与基本使用 C 的 vector 是一个序列容器,用于表示可变大小的数组。它结合了数组的高效元素访问和动态大小调整的灵活性。与静态数组相比,vector 的大小可以根据需要自动调整,这是通过在底层使用动态数组来实现的。当新元素被…

SpringSecurity6集成数据库

本文章对应视频可在B站查看SpringSecurity6对应视频教程,记得三连哦,这对我很重要呢! 温馨提示:视频与文章相辅相成,结合学习效果更强哦! 系列文章链接 1、初识SpringSecurity,认识主流Java权限…

对比学习笔记

这里写目录标题 什么是对比学习计算机视觉中的对比学习对比学习在NLP中的应用 什么是对比学习 对比学习是在没有标签的前提下学习样本之间的是否相似,其实和二分类比较相似,判断两个图像是不是属于同一个类别。换句话来说就是把相近的分布推得更近&…

PyQt5中的QGraphicsView()

文章目录 1. 简介2. 一个简单的示例2. 加载一幅图片3. 常用方法示例 1. 简介 QGraphicsView是PyQt5中用于显示图形场景的小部件,它提供了许多常用的方法来控制视图的行为和属性。下面是一些常用的QGraphicsView方法: setScene(scene): 设置要显示的场景…

工程师工具箱系列(3)Arthas

文章目录 工程师工具箱系列(3)Arthas安装与准备Arthas插件使用场景查看某个变量值ognl方式调用Bean方法tt(TimeTunel)方式调用Bean的方法ognl调用带参数方法 资源总览 工程师工具箱系列(3)Arthas Java诊断利器 安装与准备 window…

数据库面试总结

数据库相关 mysql使用的函数 字符相关: concant() 连接字符 trim()去除字符的首尾空格 space(n) 返回n个空格 char_length() 返回字符的个数 ucase()/upper()将字符串 s 的所有字母变成大写字母 lcase()/lower() 将字符串 s 的所有字母变成小写字母 substr/substring/mid(s, …

做私域,朋友圈到底该怎么发?

说到做私域,很多人都会问:朋友圈该怎么发?相信大家的朋友圈早已经被各种广告攻占了,很多也都被大家屏蔽了。但如果要做私域,单纯发广告是行不通的,可是现在依然有很多人,认为做私域就是狂发朋友…

python内置类bytearray()详解

bytearray 是 Python 的一个内置类,它提供了一个可变序列的字节数组。 bytearray 数组的元素必须是0-255之间的整数,这些整数对应于ASCII字符集中的数字。下面着张图是部分ASCII字符: bytearray 是可变的,可修改其内容&#xff0c…