深入探索系统架构设计

目录

前言

软件的体系结构

软件架构定义

软件架构设计与生命周期

1、需求分析阶段

2、设计阶段

3、实现阶段

4、构件组装阶段

5、部署阶段

6、后开发阶段

软件架构的重要性

1、架构设计能够满足系统的品质

2、架构设计使受益人达成一致的目标

3、架构设计能够支持计划编制过程

4、架构设计对系统开发的指导性

5、架构设计能够有效地管理复杂性

6、架构设计为复用奠定了基础

7、架构设计能够降低维护费用

8、架构设计能够支持冲突分析

最后


前言

快速变化的技术环境中,设计出既能满足当前需求又能适应未来发展的系统架构变得日益重要。随着企业对灵活性、可伸缩性和成本效率的需求不断增加,传统的单体应用已难以满足这些要求。

因此,现代系统架构师面临着前所未有的挑战:如何在保证性能的同时,还能确保系统的可维护性和可扩展性?

软件的体系结构

从第一个程序被划分成模块开始,软件系统就有了体系结构。现在,有效的软件体系结构及其明确的描述和设计,已经成为软件工程领域中重要的主题。

由于历史原因,研究者和工程人员对 Software Architecture (简称S A ) 的翻译不尽相同,本文中软件“体系结构”和“架构”具有相同的含义。

软件架构定义

一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。体系结构并非可运行软件。

确切地说,它是一种表达,使软件工程师能够:

1、分析设计在满足所规定的需求方面的有效性;

2、在设计变更相对容易的阶段,考虑体系结构可能的选择方案;

3、降低与软件构造相关联的风险。

上面的定义强调在任意体系结构的表述中“软件构件”的角色。在体系结构设计的环境中,软件构件简单到可以是程序模块或者面向对象的类,也可以扩充到包含数据库和能够完成客户与服务器网络配置的“中间件”(也可以是作为包含数据库和能够完成客户与服务器网络配置的“中间件”的扩充)。

软件体系结构的设计通常考虑到设计金字塔中的两个层次——数据设计和体系结构设计。数据设计体现传统系统中体系结构的数据构件和面向对象系统中类的定义(封装了属性和操作),体系结构设计则主要关注软件构件的结构、属性和交互作用。

建立体系结构层“内聚的、良好设计的表示”所需的方法,其日标是提供一种导出体系结构设计的系统化方法,而体系结构设计是构建软件的初始蓝图。

软件架构设计与生命周期

1、需求分析阶段

需求分析阶段的 S A研究还处于起步阶段。在本质上,需求分析和 S A 设计面临的是不同的对象:一个是问题空间;另一个是解空间。保持二者的可追踪性和可转换性,一直是软件工程领域追求的目标。

2、设计阶段

设计阶段是 S A研究关注的最早和最多的阶段,这一阶段的S A 研究主要包括: S A 模型的描述、 S A 模型的设计与分析方法,以及对 S A 设计经验的总结与复用等。

3、实现阶段

实现阶段最初的 S A研究往往只关注较高层次的系统设计、描述和验证。为了有效实现从S A设计向实现的转换,实现阶段的体系结构研究表现在以下几个方面。

(1)研究基于 S A 的开发过程支持,如项目组织结构、配置管理等。

(2)寻求从 S A 向实现过渡的途径,如将程序设计语言元素引入 S A阶段、模型映射、构件组装、复用中间件平台等。

(3)研究基于 S A 的测试技术。S A提供了待生成系统的蓝图,根据该蓝图较好地实现系统需要的开发组织结构和过程管理技术。

以体系结构为中心的软件项目管理方法,开发团队的组织结构应该和体系结构模型有一定的对应关系,从而提高软件开发的效率和质量。对于大型软件系统而言,由于参与实现的人员较多,所以需要提供适当的配置管理手段。

S A 引入能够有效扩充现有配置管理的能力,通过在 S A 描述中引入版本、可选择项 (Options)等信息,可以分析和记录不同版本构件和连接子之间的演化,从而可用来组织配置管理的相关活动。典型的例子包括支持给构件指定多种实现的 UniCon、 支持给构件和连接子定义版本信息和可选信息的xA D L等。为了填补高层 S A模型和底层实现之间的鸿沟,可通过封装底层的实现细节、模型转换、精化等手段缩小概念之间的差距。

典型的方法如下。

( 1 ) 在 S A 模型中引入实现阶段的概念,如引入程序设计语言元素等。

(2)通过模型转换技术,将高层的S A模型逐步精化成能够支持实现的模型。

(3)封装底层的实现细节,使之成为较大粒度构件,在 S A 指导下通过构件组装的方式实现系统,这往往需要底层中间件平台的支持

4、构件组装阶段

在S A设计模型的指导下,可复用构件的组装可以在较高层次上实现系统,并能够提高系统实现的效率。在构件组装的过程中, S A 设计模型起到了系统蓝图的作用。研究内容包括如下两个方面。

5、部署阶段

随着网络与分布式软件的发展,软件部署逐渐从软件开发过程中独立出来,成为软件生命周期中一个独立的阶段。

为了使分布式软件满足一定的质量属性要求,如性能、可靠性等,部署需要考虑多方面的信息,如待部署软件构件的互联性、硬件的拓扑结构、硬件资源占用(如CPU、 内存)等。

S A 对软件部署作用如下。

1、提供高层的体系结构视图来描述部署阶段的软硬件模型。

2、基于 S A 模型可以分析部署方案的质量属性,从而选择合理的部署方案。现阶段,基于 S A 的软件部署研究更多地集中在组织和展示部署阶段的 SA、 评估分析部署方案等方面,部署方案的分析往往停留在定性的层面,并需要部署人员的参与。

6、后开发阶段

后开发阶段是指软件部署安装之后的阶段。这一阶段的 S A 研究主要围绕维护、演化、复用等方面来进行。典型的研究方向包括动态软件体系结构、体系结构恢复与重建等。

软件架构的重要性

软件架构设计是降低成本、改进质量、按时和按需交付产品的关键因素。

1、架构设计能够满足系统的品质

系统的功能性是软件架构设计师通过组成体系架构的多种元素之间的交互作用来支持的。架构设计用于实现系统的品质,如性能、安全性和可维护性等。通过架构设计文档化,可以尽早地评估项目的这些品质。

2、架构设计使受益人达成一致的目标

架构设计的过程使得不同的受益人达成一致的目标,体系架构的设计过程需要确保架构设计被清楚地传达与理解。一个被有效传达的体系架构使得涉众们可以辩论、决议和权衡,反复讨论,最终达成共识。文档化体系架构是非常重要的,这是软件架构设计师的主要职责。

3、架构设计能够支持计划编制过程

架构设计将确定组件之间的依赖关系,直接支持项目计划和项目管理的活动,例如,细节划分、日程安排、工作分配、成本分析、风险管理和技能开发等;架构设计师还能协助估算项目成本,例如,体系架构决定使用第三方组件的成本,以及支持开发的所有工具的成本;架构设计师支持技术风险的管理,包括制订每一个风险的优先次序,以及确定一个恰当的风险缓解策略。

4、架构设计对系统开发的指导性

架构设计的主要目标就是确保体系架构能够为设计人员和实现人员所承担的工作提供可靠的框架。很明显,这比简单的传送一个体系架构视图要复杂得多。为了确保最终体系架构的完整性,架构设计师必须明确地定义体系架构,因为它确定了体系架构的重要元素,例如系统的组件,组件之间的接口以及组件之间的通信。架构设计师同时还必须定义恰当的标准和指导方针,它们将会引导设计人员和实现人员的工作。对开发过程活动采取恰当的架构回顾和评估,能够确保体系架构的完整性。这些质量保障 (Quality Assurance,QA) 活动的任务是确定体系架构的标准和指导方针的有效性。

5、架构设计能够有效地管理复杂性

如今的系统越来越复杂,这种复杂性需要我们去管理。体系架构通过构件及构件之间关系,描述了一个抽象的系统,因而提供了高层次的复杂的管理的方法。同样,架构设计过程考虑组件地递归分解。这是处理一个大问题很好的方法,它可以把这个大问题分解成很多小问题,再逐个解决。

6、架构设计为复用奠定了基础

架构设计过程可以同时支持使用和建立复用资源。复用资源可以降低一个系统的成本,并且可以改进系统的质量,这些好处已经被证明。一个体系架构的建立,能够支持大粒度的资源复用。例如,体系架构的重要组件和它们之间的接口和质量,能够支持现货供应的组件,存在的系统和封装的应用程序等的选择,从而可以用来实现这些组件。

7、架构设计能够降低维护费用

架构设计过程可以在很多方面帮助我们降低维护费用。首先最重要的是架构设计过程要确保系统的维护人员是一个主要的涉众,并且他们的需求被作为首要的任务满足。一个被恰当文档化的体系架构不应该仅仅为了减轻系统的可维护性,架构设计师还应该确保结合了恰当的系统维护机制,并且在建立体系架构的时候还要考虑系统的适应性和可扩充性。

8、架构设计能够支持冲突分析

架构设计的一个重要的好处是,它可以允许人们在采取改变之前推断它所产生的影响。一个软件构架确定了主要的组件和它们之间的交互作用,两个组件之间的依赖性以及这些组件对于需求的可追溯性。有了这个信息,例如需求的改变等可以通过组件的影响来分析。同样的,改变一个组件的影响可以在依靠它的其他组件上分析出来。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

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

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

相关文章

UDS 诊断 - RequestTransferExit(请求传输终止)(0x37)服务

UDS 诊断服务系列文章目录 诊断和通信管理功能单元 UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务 UDS 诊断 - ECUReset(ECU重置)(0x11)服务 UDS 诊断 - SecurityA…

【北京迅为】《STM32MP157开发板使用手册》- 第二十六章Cortex-M4 GPIO_蜂鸣器实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

matlab 基于选权迭代法的空间平面拟合

目录 一、算法原理1、参数平差2、选权迭代法3、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、算法原理 1、参数平差 由空间几何学知,空间平面方程可以表述为: A x…

【C++】——string类的模拟实现

目录 一、string模拟实现 1.1构造析构 1.2迭代器 1.3修改 1.4查找 1.5substr 深浅拷贝的区别 1.6比较函数与流插入流提取 二、string类的拷贝 2.1浅拷贝与深拷贝 2.2传统版与现代版区别 2.3写时拷贝(了解) 三、vs和g下string结构的说明 3.1v…

零信任沙箱让源代码防泄漏“如虎添翼”

"数据泄露事件频发,给企业带来了巨大的经济损失和声誉损害。SDC沙盒,一款基于零信任模型构建的数据防泄密解决方案,正成为企业数据安全的新防线。 🔐 零信任模型的核心:SDC沙盒遵循“永不信任,始终验…

Python爬虫案例七:抓取南京公交信息数据并将其保存成excel多表形式

测试链接: https://nanjing.8684.cn/line4 思路:先抓取某个类型下的某一条线路所有数据,然后实现批量,,列举出三个类型代表既可 源码: from lxml import etree from xlutils.copy import copy import requests, os, xlrd, xlwtd…

串口输出时:英文正常输出、中文乱码输出

一、问题:英文正常输出,英文乱码输出 二、解决方法 1、查看自己使用的串口助手的编码格式 2、查看自己使用输出的文件编码格式 以记事本的格式查看,原则上这两种应该保持相同,如果不相同,就需要把这个文件去另保存一…

UE5 阴影通道

Shadow Pass Switch节点中 Default代表模型遮罩的效果 Shadow代表阴影的生成遮罩效果

Android Studio报错中文乱码

现象: 解决办法: 按两下Shift,查找Edit Custom VM Options并确认; 没有studio64.exe.vmoptions的话会弹窗,创建一个即可;原本存在的话,在最下面添加 -Dfile.encodingUTF-83. Sync Gradle 重…

开源项目chartDB体验

github地址 :https://github.com/chartdb/chartdb 在线网站体验:https://chartdb.io/ 体验后发现 chartDB的作用是可视化各个表格之间的关系,方便数据库设计者操作并且接上openai的接口生成各个数据库语言的代码;但它没法导入实际…

人工智能在鼻咽癌诊断和治疗中的应用进展、当前挑战和未来前景|文献精析·24-09-13

小罗碎碎念 这篇文章综述了人工智能在鼻咽癌诊断和治疗中的应用进展、当前挑战和未来前景。 角色姓名单位名称(中文)第一作者杨四川大学华西医院肿瘤中心生物治疗科,生物治疗国家重点实验室通讯作者陈四川大学华西医院血管外科,普…

通过TikTok创新视频广告并提高ROAS

通过使用TikTok视频购物广告,Refurbed在五个国家的广告支出回报率(ROAS)提升了5.8%。 目录 总结营销策略是什么?取得了什么成果?为什么有效?获取更多类似的策略 总结 公司: Refurbed。目标&…

Matlab对状态机建模的方法

【 线性代数 状态机 】良好的控制系统设计 (根据现有的情况总结出状态转移方程) 状态组件在设计时需要考虑的内容 AI 的逻辑 可以提供一个思路 python 库调用的路径,必须是完整的路径 python 解释器的入口

【Leetcode算法面试题】-1. 两数之和

文章目录 算法练习题目思路参考答案算法1算法2算法3 算法练习 面试经常会遇到算法题目,今天开启算法专栏,常用算法解析 题目 ** 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数&…

Metasploit 渗透测试之Metasploit快速入门

简介 Metasploit 是目前世界上领先的渗透测试工具,也是信息安全与渗透测试领域最大的开源项目之一。它彻底改变了我们执行安全测试的方式。Metasploit之所以流行,是因为它可以执行广泛的安全测试任务,从而简化渗透测试的工作。Metasploit 适…

查看TCP/UDP网络连接通信情况

绪论​ “宿命论是那些缺乏意志力的弱者的借口。 ——罗曼.罗兰” 话不多说安全带系好,发车啦(建议电脑观看)。 主要使用: nestat -nltp n 拒绝显示别名,能显示数字的全部转化成数字l 仅列出有在 Listen (…

QML学习三:qml设计器报错 Line: 0: The Design Mode requires a valid Qt kit

开发环境:Qt 6.5.3 LTS 1、Qt 6.5.3 LTS 2、Pyside6 3、Python 3.11.4 4、win11 默认不打开设计器的时候可以看到我们默认是有Python的环境,而且点击运行是可以运行的。但是当打开qml设计器时提示下面这个错误,提示需要一个可用的套件。 …

代码随想录算法day33 | 动态规划算法part06 | 322. 零钱兑换,279.完全平方数,139.单词拆分,关于多重背包

322. 零钱兑换 如果求组合数就是外层for循环遍历物品,内层for遍历背包。 如果求排列数就是外层for遍历背包,内层for循环遍历物品。 力扣题目链接(opens new window) 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需…

SAP学习笔记 - 开发03 - CDSView开发环境搭建,Eclipse中连接SAP,CDSView创建

上一章讲了BTP的账号创建,环境搭建等内容。 SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)-CSDN博客 本章继续讲SAP开发。 - CDSView 的开发环境(Eclipse)搭建…

“薅羊毛”时间到, 容声以旧换新“钜惠”升级

9月13日,由佛山市商务局、顺德区人民政府指导,海信家电集团主办的以旧换新佛山发布活动启幕。 海信家电(SZ 000921,HK 00921)旗下容声冰箱叠加国家以旧换新补贴,把“以旧换新”升级到“品质换新”&#xf…