系统架构设计师-软件架构设计(2)

news2024/11/25 7:20:53

目录

一、基于架构的软件开发方法(ABSD)

        1、架构需求 

                1.1 需求获取

                1.2 标识构件

                1.3 架构需求评审

        2、架构设计

                2.1 提出架构模型

                2.2 映射构件

                2.3 分析构件的相互作用

                2.4 产生架构

                2.5 设计评审

        3、架构文档化

        4、架构复审

        5、架构实现

                5.1 分析与设计

                5.2 构件实现

                5.3 构件组装

                5.4 系统测试 

        6、架构演化

                6.1 需求变化归类

                6.2 制定架构演化计划

                6.3 构件变动

                6.4 更新构件的相互作用

                6.5 构件组装与测试

                6.6 技术评审

二、软件架构风格

        1、数据流风格

        2、调用/返回风格 

        3、独立构件风格

        4、虚拟机风格

        5、以数据为中心                


一、基于架构的软件开发方法(ABSD)

        概念:

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

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

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

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

         

        开发过程:     

                ABSD模型把整个软件开发过程划分为:架构需求、架构设计、架构文档化、架构复审、架构实现、架构演化。

                ABSD能很好的【支持软件重用】

                ABSD方法是一个自顶向下,递归细化的方法。

                软件系统的体系结构通过该方法得到细化,直到能产生软件构件和类。

        1、架构需求 

                1.1 需求获取

                        架构需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。如果以前有类似的系统架构的需求,我们可以从需求库中取出,加以利用和修改,以节省获取需求的时间,减少重复劳动,提高开发效率。

                1.2 标识构件

                        (1)生成类图

                        (2)对类进行分组

                                与其他隔离的类形成一个组,由概括关联的类组成一个附加组,由聚合或合成关联的类组成一个附加组

                        (3)把类打包成构件

                                把类簇打包成构件,这些构件可以分组合并成更大的构件

                1.3 架构需求评审

                        由分析人员,客户,设计人员,测试人员组成小组,检查需求是否真实,类的分组是否合理,构件的合并是否合理

        2、架构设计

                2.1 提出架构模型

                        选择一个合适的架构风格,该模型为将来的实现和演化建立了目标。

                2.2 映射构件

                        把已标识的构件映射到架构中,将产生一个中间结构,它只包含适合架构模型的构件。 

                2.3 分析构件的相互作用

                2.4 产生架构

                        当决定了关键构件之间的相互作用后,就可以在中间结构的基础上进行精化,得到软件架构。

                2.5 设计评审

                        邀请独立于系统开发的外部人员对架构进行评审。

        3、架构文档化

                 架构文档化过程的主要输出结果是架构规格说明测试架构需求的质量设计说明书这两个文档。

                文档的完整性质量是软件架构成功的关键因素。

                关于文档的三大注意事项:

                (1)文档要从使用者的角度进行编写。

                (2)必须分发给所有与系统有关的开发人员 。

                (3)且必须保证开发者手上的文档是最新的。

        4、架构复审

                架构复审【架构评估】的目的是标识潜在的风险,及早发现架构设计中的缺陷和错误。

        5、架构实现

                5.1 分析与设计

                        在架构说明书中,已经定义了系统中构件与构件之间的关系,构件接口约束对外唯一代表了构件,所以可以从构件库中直接查找符合接口约束的构件

                5.2 构件实现

                        必要时开发新的满足要求的构件。

                5.3 构件组装

                5.4 系统测试 

                        包括单个构件的功能性测试和被组装应用的整体功能和性能测试

        6、架构演化

                6.1 需求变化归类

                        对需求变化进行归类,使变化的需求与已有构件对应。对找不到对应构件的需求变动,在后续工作中将创建新的构件来对应。

                6.2 制定架构演化计划

                6.3 构件变动

                        修改,增加或删除构件,要对修改和增加的构件进行功能性测试。

                6.4 更新构件的相互作用

                6.5 构件组装与测试

                6.6 技术评审

                

二、软件架构风格

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

        1、数据流风格

                前一步的处理结果是后一步的输入内容【数据驱动】。

                优点:

                (1)松耦合【高内聚-低耦合】(2)良好的重用性/可维护性

                (3)可扩展性【标准接口适配】(4)良好的隐蔽性(5)支持并行

                缺点:

                (1)交互性差(2)复杂性较高(3)性能较差【每个过滤器都需要解析与合成数据】 

                典型实例:

                (1)传统编译器(2)网络报纹处理

                 数据流风格分两种:

                (1)批处理序列

                        大量整体数据、无需用户交互

                (2)管道-过滤器

                        流式数据、弱用户交互。

                        

        2、调用/返回风格

                调用/返回风格分三种: 

                (1)主程序/子程序:面向过程。

                        主程序/子程序风格是结构化开发时期的经典架构风格。

                (2)面向对象:对象的方法调用。

                (3)分层架构风格:层与层之间的方法调用。                

                        优点:

                        (1)良好的重用性,只要接口不变可用在其它处(2)可维护性好

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

                        缺点:

                        (1)并不是每个系统都方便分层(2)很难找到一个合适的、正确的层次抽象方法 

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

                        特点:

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

                        (2)多层相互协同工作,并且实现透明

        3、独立构件风格

                独立构件风格主要强调系统中的每个构件都是相对独立的个体 ,他们之间不直接通信,以降低耦合度,提升灵活性。

                独立构件风格分两种:

                (1)进程通信

                        构件是独立的过程,连接件是消息传递。这种风格的特点是构件通常是命名过程 ,消息传递的方式可以是点到点、异步和同步方式及远过程调用等。

                        例:A服务 调用 B服务

                (2)事件驱动系统(隐式调用) 

                        构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程调用。 

                 与调用返回风格区别:事件管理机制

                优点:

                (1)松耦合(2)良好的重用性/可修改性/可扩展性 

                缺点:

                (1)构件放弃了对系统计算的控制。一个构件触发一个事件时,不能确定其他构件是否会响应它。而且即使它知道事件注册了哪些构件的过程,它也不能保证这些过程被调用的顺序。

                (2)数据交换问题

                (3)既然过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理就存在问题。

                特点:

                 系统由若干子系统构成且成为一个整体;系统有统一的目标;子系统有主从之分;每一子系统有自己的事件收集和处理机制。

        4、虚拟机风格

                 虚拟机风格分两种:

                (1)解释器

                         

                (2)规则为中心

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

                        

        5、以数据为中心(仓库风格)

         以数据为中心风格分三种:

        (1)数据库系统

                特点:以数据为中心

        (2)黑板系统

                例:语音识别、知识推理。一般基于数据库系统

        (3)超文本系统

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

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

相关文章

JVM运行时区域——对象创建内存分配过程

新创建的对象,都存放在伊甸园区域,当垃圾回收时,将伊甸园区域的垃圾数据销毁,然后将存活的对象转移到幸存者0区域,之后创建的新的对象还是存放在伊甸园区域,等到再次垃圾回收后,将伊甸园区域和幸…

《Docker资源限制和调度策略:性能优化与资源管理,打造高效稳定的容器环境》

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

Python 集合 pop()函数使用详解,pop随机删除原理

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 pop函数使用详解 1、随机删除并不完全随机1.1、纯数字1.2、纯字符1.3、混合情况 …

【软件测试】Git 详细实战-远程分支(超细总结)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 远程分支 远程引…

2023云曦期中复现

目录 SIGNIN 新猫和老鼠 baby_sql SIGNIN 签到抓包 新猫和老鼠 看到反序列化 来分析一下 <?php //flag is in flag.php highlight_file(__FILE__); error_reporting(0);class mouse { public $v;public function __toString(){echo "Good. You caught the mouse:&…

使用Selenium与Chrome DevTools交互

目录 为什么我们应该自动化Chrome开发工具&#xff1f; 如何打开Chrome DevTools 元素 控制台 源代码 网络 应用 安全 性能 如何使用Selenium使用chrome Devtools实现自动化&#xff1f; 收集性能指标 使用Selenium DevTols捕获控制台日志 模拟位置 网络节流 捕…

论文精读之Transformer论文

目录 Abstract Conclusion Introduction Background Training Abstract 在一个序列转录模型中&#xff0c;在编码器与译码器之间使用一个“注意力机制”的东西&#xff0c;做了两个机器翻译的实验&#xff0c;效果较其他模型效果更好。 Conclusion Transformer是第一个用于…

全志F1C200S嵌入式驱动开发(调整cpu频率和dram频率)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 f1c200s默认的cpu频率是408M,默认的dram频率是156M。这两个数值,坦白说,都算不上特别高的频率。因为我们的晶振是24M输入,所以408/24=17,相当于整个cpu的频率只是晶振倍频了17…

vue引入自定义字体并使用

结构 font.scss引入字体 charset "UTF-8";font-face{font-family: "caoshu";src: url("caoshu.ttf");font-weight: normal;font-style: normal; }font-face{font-family: "Xingkai";src: url("XingKai.ttf");font-weight: …

leetcode 144.二叉树的前序遍历 145.二叉树的后序遍历 94.二叉树的中序遍历

⭐️ 题目描述 &#x1f31f; 链接1&#xff1a;leetcode 144.二叉树的前序遍历 &#x1f31f; 链接2&#xff1a;leetcode 145.二叉树的后序遍历 &#x1f31f; 链接3&#xff1a;leetcode 94.二叉树的中序遍历 思路&#xff1a; leetcode的遍历和普通的遍历还略有一些不同&a…

【Spring篇】初识 Spring IoC 与 DI

目录 一. Spring 是什么 ? 二. 何为 IoC ? 三. 如何理解 Spring IoC ? 四. IoC 与 DI 五 . 总结 一. Spring 是什么 ? 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽ 庞⼤…

SAP 执行失败JOB及dump日志监控

背景 系统使用时间较长&#xff0c;存在大量的后台作业&#xff0c;用户量较大&#xff0c;需要及时监控后台作业状况及系统dump情况&#xff0c;以便及时处理。 功能 1. 查询屏幕填写日期前n秒状态为错误及未知的后台作业 2. 查询屏幕填写日期前n秒系统中的dump记录--客制化程…

有关动态内存管理的笔试题

题目一&#xff1a; void GetMemory(char* p) {p (char*)malloc(100); }void test(void) {char* str NULL;GetMemory(str);strcpy(str, "hello world");printf(str); }int main() {test();return 0; } 请问上述代码输出结果是什么&#xff0c;理由是什么&#xf…

leetcode 90. 子集 II

2023.7.23 这道题是上一题子集的升级版&#xff0c;即数组nums包含了相同的元素&#xff0c;这时候需要对集合之间进行去重&#xff0c;可以参考这一题组合总和II的去重方法。 下面直接上代码&#xff1a; class Solution { public:vector<vector<int>> ans;vecto…

Qt QToolBar 添加 换行 添加到底部 左侧 右侧

1. 常用添加&#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);QToolBar *toolBar addToolBar(t…

查找和二叉树(基础知识和基本操作)

查找&#xff1a; 1.二分查找&#xff1a;先定一个大范围&#xff0c;想一个数&#xff0c;看是在起始范围到中间范围还是中间范围到结束范围&#xff0c;依次循环直到确定值&#xff08;相当于一直把范围折半&#xff0c;直到找到&#xff09; while(low<high) {int mid(…

一元多项式的表示及相加

实现思路&#xff1a; 通过链表实现&#xff0c;会更为简单直观。用链表中的每个结点表示多项式中的每一项&#xff0c;多项式每一项都是由数据域&#xff08;包含系数和指数&#xff09;和指针域构成的&#xff0c;所以在定义表示结点的结构体时&#xff0c;可如下所示进行定义…

【Ansible 自动化配置管理实践】01、Ansible 快速入门

目录 一、Ansible 快速入门 1.1 什么是 Ansible ​1.2 Ansible 主要功能 1.3 Ansible 的特点 1.4 Ansible 基础架构 二、Ansible 安装与配置 2.1 Ansible 安装 2.2 确认安装 三、Ansible 配置解读 3.1 Ansible 配置路径 3.2 Ansible 主配置文件 3.3 Ansi…

PHP后台登录功能单账号登录限制

PHP后台登录功能单账号登录限制 单账号登陆是什么第一步创建数据表第二步创建登录页面test2.html第三步创建登录提交test2.php第四步访问后台首页第五步演示 单账号登陆是什么 一个用户只能登录一个账号通常被称为单账号登录限制或单用户单账号限制。这意味着每个用户只能使用…

TCP通信 -- 接收并反馈(全)

TCP通信整体过程&#xff1a; 1.【服务端】启动,创建ServerSocket对象&#xff0c;等待连接。2.【客户端】启动,创建Socket对象&#xff0c;请求连接。3.【服务端】接收连接,调用accept方法&#xff0c;并返回一个Socket对象。4.【客户端】Socket对象&#xff0c;获取OutputStr…