系统架构22 - 软件架构设计(1)

软件架构设计

  • 概述
    • 关键步骤
  • 生命周期
    • 需求分析阶段
    • 设计阶段
    • 实现阶段
    • 构件组装阶段
    • 部署阶段
    • 后开发阶段

概述

需求分析到软件设计之间的过渡过程称为软件架构(Software Architecture, SA)。只要软件架构设计好了,整个软件就不会出现坍塌性的错误,即不会崩溃。
一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系
体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够:
(1)分析设计在满足所规定的需求方面的有效性;
(2)在设计变更相对容易的阶段,考虑体系结构可能的选择方案;
(3)降低与软件构造相关联的风险。

在体系结构设计的环境中,软件构件简单到可以是程序模块或者面向对象的类,也可以扩充到包含数据库和能够完成客户与服务器网络配置的“中间件”(也可以是作为包含数据库和能够完成客户与服务器网络配置的“中间件”的扩充)。
软件体系结构的设计通常考虑到设计金字塔中的两个层次——数据设计和体系结构设计。数据设计体现传统系统中体系结构的数据构件和面向对象系统中类的定义(封装了属性和操作),体系结构设计则主要关注软件构件的结构、属性和交互作用

软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)指导构件集成的模式以及这些模式的约束组成
在软件中,架构决策包括如何组织代码、模块和组件,如何处理数据流、用户界面和业务逻辑。好的软件架构能够确保软件具有良好的性能、可扩展性、可维护性和安全性。所以,软件架构就是软件的总体设计方案,它决定了软件如何组织和工作,以满足用户需求和业务目标。好的架构是构建可靠软件的基础。

关键步骤

需求分析、软件架构设计和系统设计是软件开发过程中密切相关的三个关键步骤,它们相互连接,确保最终软件产品满足客户需求并具有良好的质量和性能。

  • 需求分析:明确定义问题,确定客户的需求和期望。这包括与客户交流,了解他们的需求,并将其转化为详细的功能和规范。
  • 软件架构设计:考虑如何将系统组织成各种模块、构件和服务,以满足需求。这包括确定系统的总体结构和构件之间的关系。
  • 系统设计:进一步详细设计每个组件和模块。这包括定义接口、数据结构、算法等。

生命周期

需求分析阶段

需求分析和SA设计面临的是不同的对象:一个是问题空间;另一个是解空间。从软件需求模型向SA模型的转换主要关注两个问题:

  1. 如何根据需求模型构建SA模型。
  2. 如何保证模型转换的可追踪性。

这两个问题的解决方案,因所采用的需求模型的不同而异。在采用Use Case 图描述需求的方法中,从Use Case 图向SA 模型(包括类图等)的转换一般经过词法分析和一些经验规则来完成,而可追踪性则可通过表格或者 Use Case Map等来维护。

软件复用的角度看, SA 影响需求工程也有其自然性和必然性,已有系统的 SA 模型对新系统的需求工程能够起到很好的借鉴作用。在需求分析阶段研究 SA,有助于将 SA 的概念贯穿于整个软件生命周期,从而保证了软件开发过程的概念完整性,有利于各阶段参与者的交流,也易于维护各阶段的可追踪性。

设计阶段

设计阶段是SA研究关注的最早和最多的阶段。这一阶段的SA研究主要包括:SA 模型的描述、SA 模型的设计与分析方法,以及对 SA 设计经验的总结与复用等。
有关SA模型描述的研究分为3个层次:SA的基本概念(构件和连接件)、体系结构描述语言ADLSA 模型的多视图表示
(1)SA 的基本概念,即S A模型由哪些元素组成,这些组成元素之间按照何种原则组织。
(2)体系结构描述语言 (Architecture Description Language,ADL),支持构件、连接子及其配置的描述语言就是如今所说的体系结构描述语言。 ADL 对连接子的重视成为区分 ADL和其他建模语言的重要特征之一。典型的 ADL 包括UniCon、Rapide、Darwin、Wright、C2 SADL、Acme、xADL、XYZ/ADL和 ABC/ADL等。
(3)SA 模型的多视图表示,从不同的视角描述特定系统的体系结构,从而得到多个视图,并将这些视图组织起来以描述整体的 SA 模型。系统的每一个不同侧面的视图反映了一组系统相关人员所关注的系统的某一特定方面,多视图体现了关注点分离的思想

实现阶段

最初SA研究往往只关注较高层次的系统设计、描述和验证。为了有效实现SA设计向实现的转换,实现阶段的体系结构研究表现在以下几个方面。
(1)研究基于 SA 的开发过程支持,如项目组织结构、配置管理等。
(2)寻求从 SA 向实现过渡的途径,如将程序设计语言元素引入S A阶段、模型映射、构件组装、复用中间件平台等。
(3)研究基于 SA 的测试技术
对于大型软件系统而言,由于参与实现的人员较多,所以需要提供适当的配置管理手段。SA 引入能够有效扩充现有配置管理的能力,通过在S A描述中引入版本、可选择项 (Options)等信息,可以分析和记录不同版本构件和连接子之间的演化,从而可用来组织配置管理的相关活动。典型的例子包括支持给构件指定多种实现的 UniCon、 支持给构件和连接子定义版本信息和可选信息的XADL等。
为了填补高层 SA 模型和底层实现之间的鸿沟,可通过封装底层的实现细节、模型转换、精化等手段缩小概念之间的差距。典型的方法如下。
(1)在 SA 模型中引入实现阶段的概念,如引入程序设计语言元素等。
(2)通过模型转换技术,将高层的 SA 模型逐步精化成能够支持实现的模型
(3)封装底层的实现细节,使之成为较大粒度构件,在 SA 指导下通过构件组装的方式实现系统,这往往需要底层中间件平台的支持。

构件组装阶段

在 SA 设计模型的指导下,可复用构件的组装可以在较高层次上实现系统,并能够提高系统实现的效率。在构件组装的过程中, SA设计模型起到了系统蓝图的作用。研究内容包括如下两个方面。
(1)如何支持可复用构件的互联,即对 SA 设计模型中规约的连接子的实现提供支持。
(2)在组装过程中,如何检测并消除体系结构失配问题
在构件组装阶段的失配问题主要包括三个方面:

  • 由构件引起的失配,包括由于系统对构件基础设施、构件控制模型和构件数据模型的假设存在冲突引起的失配。
  • 由连接子引起的失配,包括由于系统对构件交互协议、连接子数据模型的假设存在冲突引起的失配。
  • 由于系统成分对全局体系结构的假设存在冲突引起的失配等。要解决失配问题,首先需要能够检测出失配问题,并在此基础上通过适当的手段消除检测出的失配问题。

部署阶段

SA 对软件部署作用如下:
(1)提供高层的体系结构视图来描述部署阶段的软硬件模型。
(2)基于 SA 模型可以分析部署方案的质量属性,从而选择合理的部署方案。
现阶段,基于 SA 的软件部署研究更多地集中在组织和展示部署阶段的 SA评估分析部署方案等方面,部署方案的分析往往停留在定性的层面,并需要部署人员的参与

后开发阶段

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

  • 动态软件体系结构。现实中的软件具有动态性,体系结构会在运行时发生改变。现阶段,动态软件体系结构研究可分为以下两个部分:体系结构设计阶段的支持、运行时刻基础设施的支持
  • 体系结构恢复与重建对于现有系统在开发时候没有考虑 SA 的情况,从这些系统中恢复或重购体系结构。从已有的系统中获取体系结构的重建方法分为4类:手工体系结构重建、工具支持的手工重建、通过查询语言来自动建立聚集、使用其他技术(如数据挖掘等)

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

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

相关文章

一个简单的2024龙年倒计时页面html源码

预览如下 复制粘贴下面的代码&#xff0c;另存为html文件即可打开&#xff0c;文字链接都可以更改&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>2024新年倒计时</title> <style>::-webki…

C语言--------数据在内存中的存储

1.整数在内存中的存储 整数在内存是以补码的形式存在的&#xff1b; 整型家族包括char,int ,long long,short类型&#xff1b; 因为char类型是以ASCII值形式存在&#xff0c;所以也是整形家族&#xff1b; 这四种都包括signed,unsigned两种&#xff0c;即有符号和无符号&am…

【安装记录】安装 netperf 和 perf

这是一篇发疯随笔X.X 我的环境是虚拟机debian12&#xff0c;出于种种原因&#xff0c;之前直接使用apt-get install netperf apt-get install perf指令直接安装&#xff0c;报错找不到包 然后上网搜了一堆教程&#xff0c;有说下载netperf源码编译的&#xff0c;那些教程里面有…

sklearn中一些简单机器学习算法的使用

目录 前言 KNN算法 决策树算法 朴素贝叶斯算法 岭回归算法 线性优化算法 前言 本篇文章会介绍一些sklearn库中简单的机器学习算法如何使用&#xff0c;一些注释已经写在代码中&#xff0c;帮助一些小伙伴入门sklearn库的使用。 注意&#xff1a;本篇文章只涉及到如何使用…

React - 分页插件默认是英文怎么办

英文组件的通用解决方案 这里以分页插件为例&#xff1a; 大家可以看到&#xff0c;最后的这个页面跳转提示文字为Go to&#xff0c;不是中文&#xff0c;而官网里面的案例则是&#xff1a; 解决方案&#xff1a; import { ConfigProvider } from antd; import zhCN from an…

3D高斯溅射:面向三维场景的实时渲染技术

1. 前言 高斯溅射技术【1】一经推出&#xff0c;立刻引起学术界和工业界的广泛关注。相比传统的隐式神经散射场渲染技术&#xff0c;高斯溅射依托椭球空间&#xff0c;显性地表示多目图像的三维空间关系&#xff0c;其计算效率和综合性能均有较大的提升&#xff0c;且更容易理…

装箱问题+宠物小精灵之收服+数字组合——01背包

一、装箱问题 (裸题) 有一个箱子容量为 V&#xff0c;同时有 n 个物品&#xff0c;每个物品有一个体积&#xff08;正整数&#xff09;。 要求 n 个物品中&#xff0c;任取若干个装入箱内&#xff0c;使箱子的剩余空间为最小。 输入 第一行是一个整数 V (0 < V ≤ 20000)&…

微服务OAuth 2.1认证授权可行性方案(Spring Security 6)

文章目录 一、背景二、微服务架构介绍三、认证服务器1. 数据库创建2. 新建模块3. 导入依赖和配置4. 安全认证配置类 四、认证服务器测试1. AUTHORIZATION_CODE&#xff08;授权码模式&#xff09;1. 获取授权码2. 获取JWT 2. CLIENT_CREDENTIALS(客户端凭证模式) 五、Gateway1.…

什么是MVVM模型

MVVM&#xff08;Model-View-ViewModel&#xff09;是一种用于构建 Web 前端应用程序的架构模式。它是从传统的 MVC&#xff08;Model-View-Controller&#xff09;模型演变而来&#xff0c;旨在解决界面逻辑与业务逻辑之间的耦合问题。 在传统的 MVC 架构中&#xff0c;View …

【笔记】Helm-5 Chart模板指南-11 子chart和全局值

子chart和全局值 到目前为止&#xff0c;我们只使用了一个chart。但chart可以使用依赖&#xff0c;称为子chart&#xff0c;且有自己的值和模板。该章节我们会创建一个子chart并能看到访问模板中的值的不同方式。 在深入研究代码之前&#xff0c;需要了解一些应用的子chart的重…

波奇学Linux:文件重定向和虚拟文件系统

重定向 文件描述符所对应的分配规则&#xff0c;从0开始&#xff0c;寻找最小没有使用的数组位置。 如图所示&#xff0c;关闭文件描述符的0&#xff0c;新打开的文件描述符为0&#xff0c;而关闭2&#xff0c;文件描述符为2。 重定向&#xff1a;文件输出的对象发生改变 例…

【ESLint】TypeError:this.libOptions.parse is not a function

打开vue文件之后遇到如下错误&#xff1a; ESLint: TypeError: this.libOptions.parse is not a function该问题是由 ESLint 8.23 版本引起的 解决方法&#xff1a; 将 ESLint 降级到 8.22.x 或更早版本 npm install eslint8.22.0 --save-exact

C++对象继承

继承概念&#xff1a; 首先引入一个生活例子&#xff0c;普通人是一个类对象&#xff0c;学生是一个类对象&#xff0c;普通人拥有的属性学生一定会有&#xff0c;学生拥有的属性普通人不一定有。类比一下&#xff0c;把普通人抽象为A对象&#xff0c;学生抽象为B对象&#xf…

Centos7安装nginx yum报错

Centos7安装nginx yum报错&#xff0c;yum源报错解决办法&#xff1a; 1、更新epel源后&#xff0c;出现yum报错 [roothacker117 ~]# yum install epel-release&#xff08;安装成功&#xff09; [roothacker117 ~]# yum install nginx&#xff08;安装失败&#xff0c;提示如…

Java 对象字段基本类型和包装类型的选择以及 null 处理的一些思考

文章目录 版本起因解决方案方案一方案二方案三 聊聊几种方案的优劣方案一禁止使用方案二建议使用方案三依据实际情况选择 方案二 NullPointerException 的处理总结个人简介 版本 JDK 8 起因 最近合并代码中发现了一个有意思的报错&#xff1a;Lombok builder is missing non…

Windows系统特定快捷键

Windows系统特定快捷键 Windows系统提供了许多特定快捷键&#xff0c;这些快捷键用于快速访问系统设置、控制面板等功能。掌握这些快捷键可以大大提高您的工作效率。以下是一些常用的Windows系统特定快捷键&#xff1a; 1. 启动菜单和搜索&#xff1a; - WinS&#…

复习面经哦

1.函数可以变量提升 JavaScript 中的函数存在变量提升的概念&#xff0c;这意味着在执行代码之前&#xff0c;函数声明会被提升到其作用域的顶部。这使得你可以在函数声明之前调用函数。然而&#xff0c;这种行为只适用于函数声明&#xff0c;而不是函数表达式。 下面是一些关…

深度学习之线性模型

深度学习之线性模型 y w * x模型思路 y w * x b模型思路 y w * x模型 思路 这里求权重w , 求最适合的权重&#xff0c;就是求损失值最小的时候 这里用穷举法:在一个范围内&#xff0c;列出w的所有值&#xff0c;并且计算出每组数据的平均损失值,以w 为横坐标, 损失值为纵坐…

【Java】学习笔记:关于java.sql;

Connection conn null; Connection&#xff1a;这是一个 Java 接口&#xff0c;表示与数据库的连接。在这里&#xff0c;conn 是一个 Connection 类型的变量。 conn&#xff1a;这是变量的名称&#xff0c;可以根据需要进行更改。通常&#xff0c;conn 被用作表示数据库连接的…

Android 移动应用开发 创建第一个Android项目

文章目录 一、创建第一个Android项目1.1 准备好Android Studio1.2 运行程序1.3 程序结构是什么app下的结构res - 子目录&#xff08;所有图片、布局、字AndroidManifest.xml 有四大组件&#xff0c;程序添加权限声明 Project下的结构 二、开发android时&#xff0c;部分库下载异…