【系统架构设计师】软件架构设计 02

news2024/11/16 13:45:15

系统架构设计师 - 系列文章目录

01 系统工程与信息系统基础  

02 软件架构设计


文章目录

  • 系统架构设计师 - 系列文章目录

    文章目录

    前言

    一、软件架构的概念 ★★★

    二、基于架构的软件开发 ★★★★

    三、软件架构风格 ★★★★

    1.数据流风格

    2.调用/返回风格

    3.独立构件风格

    4.虚拟机风格

    5.以数据为中心

    6.闭环控制架构(过程控制)

    7.C2风格

    8.MDA(Model Driven Architecture)

    四、特定领域软件架构 ★★★

    1.基本概念

    2.参与人员

    3.建立过程

    五、软件质量属性 ★★★★★

    1.性能

    2.可用性

    3.安全性

    4.可修改性

    5.易用性

    6.可测试性

    六、软件架构评估 ★★★★

    1.架构评估方式

    2.基于场景的评估方法

    2.1 软件架构分析法(SAAM)

    2.2 架构权衡分析法(ATAM)

    2.3 成本效益分析法(CBAM)

    七、软件产品线 ★★★

    1.双生命周期模型

    2.建立方式

    3.组织结构

    八、构件与中间件技术 ★★★

    1.软件复用

    2.中间件基本概念

    3.构件的复用

    4.中间件


前言

国家软考 《系统架构设计师》第二版(即最新版本) 学习笔记


提示:以下是本篇文章正文内容,下面案例可供参考

一、软件架构的概念 ★★★

架构的本质

1.软件架构为软件系统提供了一个结构,行为和属性的高级抽象

2.软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束

架构的作用

1.软件架构是项目干系人进行交流的手段

2.软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。

3.软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础。

软件架构 = 软件体系结构

软件设计就是需求分配,即将满足需求的职责分配到组件上

架构发展历程

架构的“4+1”视图

架构的“4+1”视图

UML的“4+1”视图

视角与视图:从不同的视角来检查,所以会有不同的视图

架构描述语言ADL

ADL是这样一种形式化语言,它在底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架。如:Aesop,MetaH,C2,Rapide,SADL,Unicon等

ADL的三个基本元素

  • 构件:计算或数据存储单元
  • 连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则
  • 架构配置:描述体系结构的构件与连接件的连接图。

二、基于架构的软件开发 ★★★★

ABSD方法是架构驱动,即强调由业务【商业】,质量和功能需求的组合驱动架构设计。

ABSD方法有三个基础。第一个基础是功能的分解。在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术;第二个基础是通过选择架构风格来实现质量和业务需求;第三个基础是软件模板的使用

视角与视图:从不同的视角来检查,所以会有不同的视图。

用例用来捕获功能需求,特定场景【刺激,环境,响应】用来捕获质量需求

开发过程

三、软件架构风格 ★★★★

架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。

五大架构风格子风格

数据流风格

【Data Flow】

批处理【Batch Sequential】,管道-过滤器【Pipes and Filters】

调用/返回风格

【Call/Return】

主程序/子程序【Main Program and Subroutine】,

面向对象【Object-oriented】,分层架构【Layered System】

独立构件风格

【Independent Components】

进程通信【Communicating Processes】

事件驱动系统(隐式调用)【Event System】

虚拟机风格

【Virtual Machine】

解释器【Interpreter】,规则系统【Rule-based System】

以数据为中心

【Data-Centered】

数据库系统【Database System】,黑板系统【Blackboard System】,超文本系统【Hypertext System】

1.数据流风格

批处理

优点缺点典型实例

1.松耦合【高内聚-低耦合】

2.良好的重用性/可维护性

3.可扩展性【标准接口适配】

4.良好的隐蔽性

5.支持并行

1.交互性较差

2.复杂性较高

3.性能较差(每一个过滤器都需要解析与合成数据)

传统编译器

网络报文处理

管道-过滤器

2.调用/返回风格

分层架构风格

优点缺点特点

1.良好的重用性,只要接口不变可用在其它处

2.可维护性好

3.可扩展性好,支持递增设计

1.并不是每个系统都方便分层

2.很难照道一个合适的,正确的层次抽象方法

3.不同层次之间耦合度高的系统很难实现

各个层次的组件形成不同功能级别的虚拟机;

多层相互协同工作,而且实现透明。

3.独立构件风格

4.虚拟机风格

子分类优点缺点特点适合领域
解释器可以灵活应对自定义场景复杂度较高适用于需要“自定义规则”的场合
规则为中心再解释器的基础上增加经验规则适用于专家系统

基于规则的系统构成:规则集,规则解释器,规则/数据选择,工作内存,一般用在人工智能领域何DSS(决策支持系统)中。

5.以数据为中心

黑板系统:

架构风格子分类优点缺点特点典型案例
以数据为中心数据库系统以数据为中心
黑板系统可更改性何可维护性;可重用的知识源;容错性何健壮性测试困难;不能保证有好的解决方案;难以建立好的控制策略;低效;开发困难;缺少并行机制;在以数据为中心的基础上,使用忠新数据触发业务逻辑部件

语音识别

模式识别

图像处理

知识推理

6.闭环控制架构(过程控制)

  • 适合于嵌入式系统,用于解决简单闭环控制问题
  • 经典应用:空调温控,定速巡航

7.C2风格

C2架构的基本规则:

  • 构件和连接件都有一个顶部和一个底部
  • 构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直连
  • 一个连接件可以和任意数目的其他构件和连接件连接。
  • 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部

8.MDA(Model Driven Architecture)

Model -> 客观事物的抽象表示

Architecture -> 构成系统的部件,连接件及其约束的规约

Model-Driven -> 使用模型完成软件的分析,设计,构件,部署,维护等各个开发活动

MDA -> 起源于分离系统规约和平台实现的思想

MDA的主要目标:

  • Portability (可移植性)
  • Interoperability (互通性)
  • Reusability (可重用性)

MDA的核心模型:

  • 计算无关模型(CIM):对某具体行业内一个项目的业务需求及其系统功能需求进行分析
  • 平台独立模型(PIM):具有高抽象层次,独立于任何实现技术的模型
  • 平台相关模型(PSM):为某种特定实现技术量身定做,让你用这种技术中可用的实现构造来描述系统的模型。PIM会被变换成一个或多个PSM
  • 代码Code:用源代码对系统的描述(规约)。每个PSM都将被变换成代码。

四、特定领域软件架构 ★★★

1.基本概念

定义:特定领域软件架构以一个特定问题领域为都一项,形成由领域参考模型,参考需求,参考架构等组成的开发基础架构,支持一个特定领域中多个应用的生成

DSSA类型:

  • 垂直域:相同领域,深入
  • 水平域:不同领域,平移

2.参与人员

参与DSSA的人员:

1.领域专家:有经验的用户,从事该领域中系统的需求分析,设计,实现以及项目管理的有经验的软件工程师等。

领域专家的主要任务包括提供关于领域中系统的需求规约和实现的知识。

2.领域分析人员:领域分析人员应由具有知识工程背景背景的有经验的系统分析员来担任

3.领域设计人员:领域设计人员应由有经验的软件设计人员来担任

4.领域实现人员:领域实现人员应由有经验的程序设计人员来担任

3.建立过程

五、软件质量属性 ★★★★★

1.性能

性能(Performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。

例如:

  • 同时指出2000并发
  • 响应时间小于1秒;
  • 显示分辨率达到4K

2.可用性

可用性(availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或出现故障时系统能够恢复正常的速度来表示。

例如:

  • 主服务器故障,1分钟内切换到备用服务器
  • 系统故障,1小时内修复
  • 系统支持7*24小时工作

3.安全性

安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性又可划分为机密性【信息不泄露给未授权的用户】,完整性【防止信息被篡改】,不可否认性【不可抵赖】,可控性【对信息的传播及内容具有控制的能力】等特性。

例如:

  • 可抵御SQL注入攻击
  • 对计算机的操作都有完整记录
  • 用户信息数据库授权必须保证99.99%可用

4.可修改性

可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。

例如:

  • 更改系统报表模块,必须在2人月内完成
  • 对web界面风格进行修改,修改必须在4人月内完成

5.易用性

易用性关注的是对用户来说完成某个期望任务的容易程度和系统所提供的用户支持的种类。

例如:

  • 界面友好
  • 新用户学习使用系统时间不超过2小时

6.可测试性

软件可测试性是指通过测试揭示软件缺陷的容易程度

例如:提供远程调试接口,支持远程调试

六、软件架构评估 ★★★★

敏感点是一个或多个构件(和/或构件之间的关系)的特征,它能影响系统的某个质量属性。(容易考概念

权衡点是影响多个质量属性的特性,是多个质量属性的敏感点。(容易考概念

风险点是指架构设计中潜在的,存在问题的架构决策所带来的隐患。(容易考概念

非风险点是指不会带来隐患,一般以“XXX要求是可以实现(或接受)的”方式表达。(容易考概念

例如:

  • 对交易请求处理时间的要求将影响系统的数据传输协议和处理过程的设计; 敏感点
  • 假设每秒中用户交易请求的数量是10个,处理请求的时间为30毫秒,则“在1秒内完成用户的交易请求”这一要求是可以实现的;非风险点
  • 目前对系统信用卡支付业务逻辑的描述尚未达成共识,这可能导致部分业务功能模块的重复,影响系统的可修改性;风险点
  • 修改加密的级别将对安全性和性能产生影响。权衡点

1.架构评估方式

  • 基于调查问卷(检查表)的方式
  • 基于度量的方式
  • 基于场景的方式
评估方式调查问卷或检查表场景度量
调查问卷检查表
通用性通用特定领域特定系统通用或特定领域
评估者对架构的了解程度粗略了解无限制中等了解精确了解
实施阶段
客观性主观主观较主观较客观

场景】是从风险承担者的角度对系统交互的简短描述。

场景可从6个方面进行描述:刺激源,刺激,制品,环境响应,响应度量

2.基于场景的评估方法

2.1 软件架构分析法(SAAM)

最初用于分析架构可修改性,后扩展到其他质量属性

2.2 架构权衡分析法(ATAM)

SAAM的基础上发展起来的,主要针对性能,实用性,安全性,可修改性在系统开发之前,对这些主要属性进行评价和折中。

2.3 成本效益分析法(CBAM)

在ATAM基础上建立的,软件的“经济”模型。

七、软件产品线 ★★★

1.双生命周期模型

2.建立方式

演化方式革命方式
基于现有产品基于现有产品架构设计产品线的架构,经过演化现有构件,开发产品线构件。核心资源的开发基于现有产品集的需求和可预测的,将来需求的超集。
全新产品线产品线核心资源随产品新成员的需求而演化开发满足所有预期产品线成员的需求的核心资源
  • 将现有产品演化为产品线
  • 用软件产品线替代现有产品集
  • 全新软件产品线的演化
  • 权限软件产品线的开发

3.组织结构

组织结构类型:

  • 设立独立的核心资源小组
  • 不设立独立的核心资源小组
  • 动态的组织结构

要成功实施产品线,主要取决于以下因素:

  • 对该领域具备长期和深厚的经验
  • 一个用于构件产品的好的核心资源库
  • 好的产品线架构
  • 好的管理(软件资源,人员组织,过程)支持

八、构件与中间件技术 ★★★

1.软件复用

软件复用【重用】是多次不同的软件开发过程中重复使用相同或相似【软件元素】的过程。

【软件元素】 => 需求分析文档,设计过程,设计文档,程序代码,测试用例,领域知识

复用的历史发展路线:

复用的维度:

  • 水平复用:不分行业领域,通用
  • 垂直复用:分行业领域,专用

2.中间件基本概念

构件的定义:

定义1:软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖。软件构件可以被独立地部署并由第三方任意地组装。

定义2:构件是某系统中有价值的,几乎独立的并可以替换的一个部分,它在良好定义的体系结构语境内满足某清晰的功能。

定义3:构件是一个独立发布的功能部分,可以通过其接口访问它的服务。(可能考概念)

3.构件的复用

4.中间件

中间件是一类构件

中间件是一类系统软件

简化结构,屏蔽差异,利于复用

采用中间件技术的有点:

  1. 面向需求。即设计师集中精力于业务逻辑本身。
  2. 业务的分隔和包容性。应用开发人员可以按照不同的业务进行功能的划分,体现为不同的接口或交互模式
  3. 设计与实现隔离。构件对外发生作用或者构件间的交互,都是通过接口进行的,构件使用者只需要知道构件的接口,而不必关心其内部实现,这是设计与实现分离的关键。
  4. 隔离复杂的系统资源。架构很重要的一个功能就是将系统资源与应用构建隔离,这是保证构件可复用甚至“即插即用”的基础,与中间件的意图也是一致的。
  5. 符合标准的交互模型。中间件则实现了架构的模型,实现了标准的协议
  6. 软件复用。中间件提供了构件封装,交互规则,与环境的隔离等机制,这些都为软件复用提供了方便的解决方案。
  7. 提供对应用构件的管理。基于中间件的软件可以方便地进行管理,因为构件总可以通过标识机制进行划分。
中间件分类特点
通信处理(消息)中间件可靠,高效,实时跨平台通信;
事务处理(交易)中间件事务分发,负载均衡
数据存取管理中间件为虚拟缓冲存取,格式转换,解压等带来方便
Web服务器中间件有负载均衡,缓存,安全性等功能
安全中间件如:加密,认证等
跨平台和架构的中间件解决跨平台问题
专用平台中间件为特定应用领域设计,领域参考模式,建立相应架构
网络中间件功能包括网管,接入,网络测试,虚拟社区和虚拟缓冲等

您的赞赏将是我继续更新的动力,欢迎赞赏!!!

                  

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

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

相关文章

PlantUML Integration 编写短信服务类图

PlantUML Integration 写一个类图,主要功能为 1、编写一个serviceSms短信服务类; 2、需要用到短信的地方统一调用基建层的服务即可; 3、可以随意切换、增加短信厂商,不需要更改场景代码,只需要更改application.yml 里面…

搜索二叉树迭代和递归的两种*简单*实现方式

判断搜索二叉树 概念 一棵树所有结点的左节点小于父节点,右节点大于父节点,则为搜索二叉树。 迭代方法 中序遍历二叉树,如果总是升序则是搜索二叉树。如果存在降序,那肯定不是搜索二叉树。 Coding checkTreeOrder()方法 boo…

【Godot4自学手册】第二十六节用GPUParticles2D节点实现地宫入口的奇异光芒

我们的主人公与NPC对话完成后,夜晚来临,在城北有一处乱石岗,出现了奇异光芒,这是地宫的入口,但是有一妖怪把守,我们必须消灭妖怪后才可发现地宫入口。这一节,主要记录利用粒子系统GPUParticles2…

YOLOv9目标识别——环境配置与训练自己的数据集

前言 YOLOv9引入了一种全新的计算机视觉模型架构,相比目前流行的YOLO模型(如YOLOv8、YOLOv7和YOLOv5),在MS COCO数据集上取得了更高的mAP(平均精度均值)。 YOLOv9是由Chien-Yao Wang、I-Hau Yeh和Hong-Yua…

Elasticsearch:调整近似 kNN 搜索

在我之前的文章 “Elasticsearch:调整搜索速度”,我详细地描述了如何调整正常的 BM25 的搜索速度。在今天的文章里,我们来进一步探讨如何提高近似 kNN 的搜索速度。希望对广大的向量搜索开发者有一些启示。 Elasticsearch 支持近似 k 最近邻…

做好外贸网站SEO优化,拓展海外市场

随着全球贸易的发展和互联网的普及,越来越多的外贸企业将目光投向了网络,希望通过建立网站来拓展海外市场。然而,在竞争激烈的外贸市场中,要让自己的网站脱颖而出,吸引更多的目标客户,就需要进行有效的SEO优…

【C语言进阶篇】C语言内存函数

目录 1.memcpy函数及其模拟实现 1.1 memcpy函数的使用 1.2 memcpy函数的模拟实现 2.memmove函数及其模拟实现 2.1 memmove函数的使用 2.2 memmove函数的模拟实现 3.memset函数 4.memcmp函数 1.memcpy函数及其模拟实现 1.1 memcpy函数的使用 memcpy函数是用来拷贝内存的函数&…

【力扣精选算法100道】——带你了解(数组模拟栈)算法

目录 💻比较含退格的字符串 🎈了解题意 🎈分析题意 🚩栈 🚩数组模拟栈 🎈实现代码 844. 比较含退格的字符串 - 力扣(LeetCode) 💻比较含退格的字符串 &#x1f3…

代码学习记录22--回溯算法第三天

随想录日记part22 t i m e : time: time: 2024.03.17 主要内容:今天主要是结合类型的题目加深对回溯算法的理解:1.组合总和;2.组合总和 ;3.分割回文串。 39. 组合总和 40.组合总和II131.分割回文串 Topic1组合总和 题…

Error response from daemon Get server gave HTTP response to HTTPS client

使用docker compose拉起docker镜像时,若出现如下报错 Error response from daemon: Get "https://devops.test.cn:5000/v2/": http: server gave HTTP response to HTTPS client表示Docker守护进程无法从指定url获取响应, 可能原因有以下&…

深入理解jsp技术

目录: JSPJSP介绍JSP运行原理JSP标签的使用JSP原始标签的使用JSP的指令标签JSP的内置对象请求转发请求转发案例JSP中的四大作用域对象JSTL标签库EL表达式JSTL标签库与EL表达式的使用 JSP JSP介绍 JSP(全称Java Server Pages)Java服务端页面技术,是JavaEE…

结构体中的内存对齐是什么?一起搞懂它

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

LeetCode刷题记录:(11)组合(初识回溯算法)

leetcode传送通道 暂时记录&#xff0c;这篇没啥营养&#xff0c;不用看了 class Solution {List<List<Integer>> result new ArrayList<>(); // 存所有组合List<Integer> path new LinkedList<>(); //存每一个组合public List<List<Int…

聚信产服:引领多元化产业服务迈向新纪元

聚信产服成立于2014年&#xff0c;一家在产业服务领域拥有深厚积淀的综合性服务机构&#xff0c;专注于政府招商、园区运营、企业选址咨询及产业链服务等多元化业务。我们致力于通过高效、专业的服务&#xff0c;为政府、企业及投资者提供全方位的产业支持&#xff0c;推动区域…

【鸿蒙HarmonyOS开发笔记】动画过渡效果之布局更新动画

概述 动画的原理是在一个时间段内&#xff0c;多次改变UI外观&#xff0c;由于人眼会产生视觉暂留&#xff0c;所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧&#xff0c;对应一次屏幕刷新&#xff0c;而决定动画流畅度的一个重要指标就是帧率FPS&#x…

计算机二级(Python)真题讲解每日一题:《十字叉》

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬ ‪‬‪‬‪‬‪‬‪‬‮‬‪…

React Hooks全部总结

Hooks 概念理解 学习目标&#xff1a; 理解 Hooks 的概念及解决的问题 什么是 hooks hooks 的本质&#xff1a; 一套能够使函数组件更强大、更灵活的&#xff08;钩子&#xff09; React 体系里组件分为类组件和函数组件 多年使用发现&#xff0c;函数组件是一个更加匹配 Rea…

解决:visio导出公式为pdf图片乱码问题

今天需要将Visio编辑好的以后的图输出pdf&#xff0c;但是点击保存后公式部分一直乱码&#xff0c;如下图所示 保存为pdf后会变成&#xff1a; 解决方案&#xff1a;保存时点击文件下方的快速打印&#xff0c;存到桌面&#xff0c;不要直接点击保存

Vue3学习日记 Day1

一、简介 1、简介 Vue3是新的默认版本&#xff0c;拥有更快的速度&#xff0c;更好的语法 二、使用create-vue搭建Vue3项目 1、创建项目 1、介绍 create-vue是Vue官方新的脚手架工具&#xff0c;底层切换为了vite&#xff0c;为开发提供极速响应 2、使用 2.1、确定环境条件 2…

关于 闰年 的小知识,为什么这样判断闰年

闰年的规定&#xff1a; 知道了由来&#xff0c;我们就可以写程序来判断&#xff1a; #include <stdio.h> int main() {int year, leap;scanf("%d",&year);if((year%4 0 && year%100 ! 0) || year%400 0)leap 1;else leap 0;if(leap) printf(…