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

目录

一、基于架构的软件开发方法(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)超文本系统

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探寻智能化未来:AI与Web3共创金融领域巨大潜力

人工智能(AI)和Web3技术的迅猛发展为我们带来了许多新的机遇和影响。在数字经济和社会的浪潮中,结合了AI的智能化能力和Web3的去中心化与区块链技术,我们将进入一个智能化的Web3时代。人工智能和Web3技术是开拓生产力极限和重新定…

LabVIEW使用支持向量机对脑磁共振成像进行图像分类

LabVIEW使用支持向量机对脑磁共振成像进行图像分类 医学成像是用于创建人体解剖学图像以进行临床研究、诊断和治疗的技术和过程。它现在是医疗技术发展最快的领域之一。通常用于获得医学图像的方式是X射线,计算机断层扫描(CT),磁…

记录安装stable diffusion webui时,出现的gfpgan安装卡住的问题

参考链接:(145条消息) 使用stable diffusion webui时,安装gfpgan失败的解决方案(windows下的操作)_新时代原始人的博客-CSDN博客

【Seata】微服务集成seata

文章目录 1、Seata介绍2、Seata架构3、部署TC服务4、微服务集成seata 1、Seata介绍 Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。 官网http://seata.io/ 2、Seata架构 Seata事务管理有三个角色: TC (Transaction Coordinator) - 事务…

UI 自动化的 PageObject 设计模式

目录 前言: 什么是 PageObject 模型? 为什么使用 PageObject 模型? PO 模式优点 PageObject 实践 前言: UI 自动化是一种软件测试方法,它主要用于检查应用程序的用户界面是否符合预期。PageObject 是 UI 自动化中…

信息安全与网络空间安全 - 保障您的在线安全

数据参考:CISP官方 目录: 信息与信息安全 信息安全属性 网络安全发展阶段 网络空间安全保障 一、信息与信息安全 1、什么是信息? 定义:信息是通过传递和处理的方式,用于传达知识、事实、数据或观点的内容。形…

华为盘古大模型:能源领域的颠覆性突破

近日,华为盘古大模型在能源领域横空出世,引发了广泛关注和期待。作为一项具有颠覆性影响的技术创新,华为盘古大模型在能源行业中展现出巨大的潜力和前景。其优质的计算能力和智能优化算法,将为能源产业带来翻天覆地的变革。 盘古大…

List集合类详解(附加思维导图)

目录 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 2.2、LinkedList集合常用方法 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中…

Flink CEP (一)原理及概念

目录 1.Flink CEP 原理 2.Flink API开发 2.1 模式 pattern 2.2 模式 pattern属性 2.3 模式间的关系 1.Flink CEP 原理 Flink CEP内部是用NFA(非确定有限自动机)来实现的,由点和边组成的一个状态图,以一个初始状态作为起点&am…

PHP注册/登录/发邮件--【强撸项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图phpStudy 设置导数据库程序基本流程项目目录如图:注册zhuce.html配套资源作业: 本系列校训 用免费公开视频,卷飞培训班哈人&…

C# Modbus通信从入门到精通(21)——Modbus TCP协议原理

Modbus TCP是走网口的,也可以在同一时间内有多个从站访问主站,并且通过Modbus事务处理标识来区分同一时刻的不同Modbus事务,这是区别于Modbus ASCII和Modbus RTU的地方。 1、访问模式: Modbus客户端通常输入Modbus服务器的IP地址…

两个小封装电机驱动芯片:MLX813XX、A4950

一.MLX813XX MELEXIS的微型电机驱动MLX813XX系列芯片集成MCU、预驱动以及功率模块等能够满足10W以下的电机驱动。 相对于普通分离器件的解决方案,MLX813XX系列电机驱动芯片是一款高集成度的驱动控制芯片,可以满足汽车系统高品质和低成本的要…

flutter开发实战-Stagger Animation实现水波纹动画

flutter开发实战-实现水波纹动画,使用到了交织动画,实现三个圆逐渐放大与渐变的过程。 一、效果图 二、实现水波纹效果 实现水波纹动画,使用到了交织动画,实现三个圆逐渐放大与渐变的过程。 交织动画 有些时候我们可能会需要一些…

珠海市黄杨山之旅游

西湾村 早上6点半出门,买点五人份的早餐 A点 第一个点,冲 C点 D岛 到d点休息 B点 高度:229米 到这里有人吐了,建议早餐不要吃超过三个包子(他吃了四个包子,1个鸡蛋,1个火腿) 记…

pytest 第三方插件

目录 前言: 顺序执行:pytest-ordering 失败重试:pytest-rerunfailures 并行执行:pytest-xdist 前言: pytest 是一个广泛使用的 Python 测试框架。它具有强大的测试运行器、测试驱动开发和测试结果可视化等功能。除…

什么是神经网络?

我们常常使用深度学习来指训练神经网络的过程。 在这里举一个房屋价格预测的例子:假设有一个数据集,它包含了六栋房子的信息。所以,你知道房屋的面积是多少平方米,并且知道这个房屋的价格。这是,你想要拟合一个根据房屋…

vue3项目,vite和vue-cli,开发和生产环境。index.html里面设置项目图标

可以在vite的根文件夹中创建public文件夹,vite默认把这个文件夹当作静态资源文件夹,会把里面的文件复制到根文件夹里面,所以你在index.html文件中导入public文件夹里面的文件时,可以直接写/xxx。在根文件夹中找复制的文件 注意&a…

Visual Studio 2022 cmake配置opencv开发环境

1. 环境与说明 这里我用的是 widnows 10 64位,Visual Studio 用的 Visual Studio Community 2022 (社区版) 对于Android开发工程师来说,为什么要使用Visual Studio 呢 ? 因为在Visual Studio中开发调试OpenCV方便,可以开发调试好后&#xf…

微服务Day4——Docker

一、什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致,会…

springboot快速整合腾讯云COS对象存储

1、导入相关依赖 <!--腾讯云COS--><dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>3.0.1</version></dependency><dependency><groupId>com…