软件体系架构复习二

呃,前面复习的忘了发了。从后面开始吧

Unit 11--18
复习Tips:
重点在于对概念的理解,概念间关系的理解。
对具体的识别方法,处理方法等根据自己的兴趣做一些了解即可
如:关于 软件架构脆弱性的成因
首先要知道软件脆弱性是什么,然后知道“软件架构的脆弱 性通常与软件架构的风格和模式有关”,
至于具体不同架构模式的脆弱性表现,只要根据兴趣了解一下就可以,需要举例子时能举出来即可。 这八章均是如此要求。
 

一、Unit 11-12 软件架构度量和软件架构演化

1.1为什么需要进行软件架构度量?

(软件架构度量的意义/好处)

  软件架构作为软件开发的早中期模型,通过对软件架构进行评估分析,能够及早的发现软件开发过程中可能遇到的问题,并提出可行的解决方案,进而提高了软件质量保障,降低了软件开发的风险。

1.2软件度量与软件演化之间的关系?

通过对演化前后的软件进行度量,分析相关质量属性的变化情况,可以得到软件的内部架构与外在属性之间的联系,有利于进一步在总体上把握和控制软件演化的方向

1.3为什么要进行软件架构演化?

软件架构演化的目的为了适应用户需求、开发环境、运行环境的变化。

一是在开发过程中用户的需求以及开发环境会发生变化,需要通过改变软件架构来适应用户需求的变化以及开发环境的变化;

二是在项目开发完成后,用户的需求依然可能发生改变,软件的运行环境也可能会发生变化,需要通过架构演化来适应这一系列变化。

1.4软件架构演化的类型?

静态演化:(1)是什么、(2)必要性、(3)一般流程

(1)静态演化是指开发尚未完成过程中、或者说开发已完成但系统停止运行过程中发生的演化。

(2)在架构开发和实现过程中需要对原有架构进行调整,保证架构与需求之间的一致性

         在开发完成后,由于运行环境发生变化,需要对软件进行修改升级。

(3)架构理解——演化需求分析——演化计划设计——演化计划实现——系统测试

动态演化:(1)是什么、(2)必要性、(3)内容以及技术

(1)软件运行过程中,对系统进行更新,且不停止软件功能的运行

(2)系统内部执行导  致的系统架构的变更;二是系统外部发送请求对软件进行重部署

(3)属性变更、接口变更、拓扑结构变更、架构风格变更,

技术:动态重配置(主从模式、中央控制模式、客户端-服务端模式)

二、Unit13 软件架构重构

2.1 软件架构重构是什么,为什么要进行软件架构重构

软件架构重构是指在不改变软件功能以及软件可见部分的前提下,对软件的可维护性、可拓展性等质量属性进行优化的过程。软件从架构重构是软件质量保障的重要手段、是软件架构演化的重要方式

2.2 基于度量的软件架构重构

(1)如何通过软件架构度量获取重构需求  

(2)如何通过软件架构度量进行软件重构建议(如何重构)

(3)基于度量评估的架构重构过程

架构重构一定是在通过度量明确架构缺陷之后才进行的

基于度量对软件架构进行评估——产生重构需求——分析重构需求——设计重构计划——执行重构操作

三、Unit14-15 软件架构腐蚀与软件架构恢复

3.1什么是软件架构腐蚀

是指实际开发中的软件架构与预期的软件架构之间的差别。软件架构腐蚀是由于软件修改产生的,而非人为恶意的。

解决方法(架构腐蚀前:预防腐蚀;架构腐蚀中:减轻架构腐蚀危害;架构腐蚀后:进行腐蚀修复)

3.2什么是软件架构恢复,有什么意义

软件架构恢复是逆向工程的实践和研究的方向。软件架构恢复是指根据项目工程,完成由低层向高层的抽象过程,得到系统架构中组成元素。开发人员可以根据恢复出的系统架构,对系统的代码编写、代码测试等进一步评估优化。

3.3软件架构腐蚀和软件架构恢复之间的关系

随着软件开发的进行,难免会产生文档的缺失,代码与预期的偏差越来越大(架构腐蚀的定义),进而逐步发生软件的架构腐蚀。这时候如果人工来阅读代码来恢复架构的话,无疑很是费时费力,这个时候通过逆向工程来恢复架构对预防软件腐蚀就显得很有意义

四、Unit16-18 技术债、坏味道、脆弱性

4.1 软件技术债的含义和分类

含义:

指软件开发人员为了保证项目进展,或因为时间的原因,或因为开发人员本身技术的原因,在该采用某些最优的设计方案时采取了某些妥协,以在短期内加速开发,进而加重自己未来的开发负担。

分类:

设计债务(没有采用最优架构)

代码债务(没有遵循标准代码格式等)

测试债务

文档债务

4.2 软件技术债的偿还

(1)发现技术债

(2)加入产品列表

(3)按照偿还的难度以及收益进行排序

(4)在将来开发周期中逐步偿还技术债

4.3 软件坏味道的含义和分类

1.代码坏味道:程序中某一段代码是不好的或是不合理的,我们将这一段代码称为代码坏味道。

(1)应用级坏味道:重复代码

(2)类级坏味道:过大的类

(3)方法级坏味道:过长的方法、参数过多

2.架构坏味道:

   连接件嫉妒

   模糊接口功能分散

4.4 软件脆弱性的成因

软件脆弱性是指在软件开发过程中(如需求分析,代码编写)等过程存在的错误,也可能是在配置过程中存在的错误。这种错误本身并没有危害,但一旦被攻击者利用,可能会导致非常严重的后果。软件脆弱性一般与软件架构风格相关,不同风格的脆弱性不同。比如管道过滤器风格,如果前面几个过滤器出现错误,经过层层过滤,可能会导致错误的放大。

最后再简单总结下:

1.软件架构度量与演进

(1)软件架构度量的意义(进行软件质量保障,降低开发风险)

(2)软件架构演进的意义(满足需求,适应环境)

(3)二者之间的联系

(4)软件架构演进的分类

2.软件架构重构

(1)什么是软件架构重构

(2)软件架构重构的步骤

3.软件架构腐蚀与恢复

(1)什么是软件架构腐蚀

(2)什么是软件架构恢复

(3)腐蚀与恢复之间的联系

4.软件架构技术债、坏味道、脆弱性

(1)什么是软件架构技术债

(2)如何偿还技术债

(3)有哪些坏味道

(4)软件脆弱性的成因及危害

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

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

相关文章

企业建设网络安全的几种“降本增效”的思考

文章目录 前言一、基于风险的安全策略,优先保护关键资产二、集中化安全管理三、加强安全意识培训,打造人肉防火墙四、安全自动化运营五、定期更新和打补丁六、安全服务外包七、跟踪关键安全运营指标并展示安全投资回报率八、打造战略情报网络总结前言 在当下的经济寒冬中,网…

【AIGC-图片生成视频系列-5】I2V-Adapter:一种用于视频扩散模型的通用图像生成视频适配器

目录 一. 项目与贡献概述 二. 方法详解 a. 整体框架图 b. 帧相似性先验 三. 一般化图像生成动画结果 四. 基于个性化 T2I 模型的动画结果 五. 结合ControlNet动画结果 六. 项目论文和代码 七. 个人思考与总结 在快速发展的数字内容生成领域,焦点已从文本到…

YOLO手部目标检测

手部目标检测原文地址如下:手部关键点检测2:YOLOv5实现手部检测(含训练代码和数据集)_yolov5 关键点检测-CSDN博客 手部检测数据集地址如下: 手部关键点检测1:手部关键点(手部姿势估计)数据集(含下载链接)_手关键点数据集-CSDN博…

Feign远程调用丢失请求头问题处理--异步任务执行远程请求线程丢失请求属性问题处理

在关于Feign远程调用丢失请求头问题处理中解决了远程调用发送请求丢失老请求中请求头的问题。A方法接收浏览器中的请求,B方法是A方法中嵌套方法用来发送Feign远程调用。如果B方法是在异步任务CompletableFuture.runAsync(()->{},Executor)中执行并启用线程池分配…

1.4 FMEA概述

FMEA适用场景 FMEA在三种基本情形下使用,每种情形都有不同的范围或重点。 情形1:新设计、新技术或新过程 FMEA的范围包括完整的设计、技术或过程。情形2:现有设计或过程的新应用 FMEA的范围包含新环境、新场地、新应用或使用概况(包括工作周期、法规要求等)下的现有设计…

94. 二叉树的中序遍历(“颜色标记法”)

我的做法:递归 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode ri…

Linux:apache优化(7)—— 日志分割|日志合并

作用:随着网站访问量的增加,访问日志中的信息会越来越多, Apache 默认访问日志access_log单个文件会越来越大,日志文件体积越大,信息都在一个文件中,查看及分析信息会及不方便。 分割 实现方式&#xff1a…

2024.1.1 hive_sql 题目练习,开窗,行列转换

重点知识: 在使用group by时,select之后的字段要么包含在聚合函数里,要么在group by 之后 进行行转列,行转列的核心就是使用concat_ws函数拼接(分隔符,内容), -- 以及collect_list函数进行收集,list不去重, set去重无序 列转行,核心就是使用炸裂函数把东…

怎么设计一个简单又直观的接口?

文章目录 问题的开端为什么从问题开始?自然而来的接口 一个接口一件事情减少依赖关系使用方式要“傻” 小结 开放的接口规范是使用者和实现者之间的合约。既然是合约,就要成文、清楚、稳定。合约是好东西,它可以让代码之间的组合有规可依。但…

微服务(11)

目录 51.pod的重启策略是什么? 52.描述一下pod的生命周期有哪些状态? 53.创建一个pod的流程是什么? 54.删除一个Pod会发生什么事情? 55.k8s的Service是什么? 51.pod的重启策略是什么? 可以通过命令kub…

【Spring Boot配置文件简介】

Spring Boot配置文件简介 简单介绍一下spring boot的配置文件吧,主要介绍一下配置文件的优先级以及配置文件的使用,后面我会写一篇关于配置文件的源码分析文章,今天就先给大家热一下身,自己今天也摸一下鱼,嘿嘿!!! 自动…

SpringIOC之support模块ContextTypeMatchClassLoader

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

chromium通信系统-ipcz系统(八)-ipcz系统代码实现-跨Node通信-Broker和Broker通信

前面我们分析了Broker和NonBroker通信&#xff0c;也分析了NonBroker和NonBroker通信&#xff0c;这里我们分析一下Broker和Broker通信过程。 我们直接一步到位&#xff0c;看NodeConnector的创建。 std::pair<Ref<NodeConnector>, IpczResult> CreateConnector(R…

代码随想录刷题笔记(DAY 6)

今日总结&#xff1a;今天是关于哈希表的题目&#xff0c;总体难度不算太大&#xff0c;今天准备再写一篇关于 Vuex 的博客。 Day 6 01. 有效的字母异位词&#xff08;No. 242&#xff09; 题目链接 代码随想录题解 1.1 题目 给定两个字符串 s 和 t &#xff0c;编写一个函…

疯狂程序员之重头暴学英语语法宝典!!!

学习英语语法真的很重要&#xff01;虽然也许不会与外国人交流&#xff0c;但是你可能会因为编程学习或者阅读英语资料苦恼&#xff0c;既然看到了不如就从现在开始好好学英语吧&#xff01;Nothing is impossible to a willing heart&#xff08;有志者事竟成&#xff09;! 第…

【二叉树】【BFS】【DFS】111. 二叉树的最小深度

题目 法1&#xff1a;BFS class Solution {public int minDepth(TreeNode root) {if (root null) {return 0;}int depth 1;Queue<TreeNode> queue new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {int curSize queue.size();for (int i 0;…

作业--day39

定义一个Person类&#xff0c;私有成员int age&#xff0c;string &name&#xff0c;定义一个Stu类&#xff0c;包含私有成员double *score&#xff0c;写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数&#xff0c;完成对Person的运算符重载(算术运算符、条件运算…

编程语言未来发展趋势探析:简化与标准化、并发与分布式、智能应用新篇章

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

PyTorch 节省显存技巧:Activation Checkpointing

参考资料 官方文档&#xff1a; https://pytorch.org/docs/2.0/checkpoint.html官方博客&#xff1a;https://medium.com/pytorch/how-activation-checkpointing-enables-scaling-up-training-deep-learning-models-7a93ae01ff2d Activation Checkpointing 介绍 激活检查点 …

【致远OA】按人员编码获取所有待办事项

接口说明 按人员编码获取所有待办事项 兼容版本 since V7.0 请求方式 http请求方式&#xff1a;GET http://ip:port/seeyon/rest/affairs/pending/code/{memberCode} 如 http://127.0.0.1/seeyon/rest/affairs/pending/code/9981 效果参考 响应结果 参考对象实例&#x…