当前位置: 首页 > news >正文

软件工程与计算总结(十)软件体系结构设计与构建

目录

​编辑

一.体系结构设计过程

1.分析关键需求和项目约束

2.选择体系结构风格

3.体系结构逻辑设计

4.体系结构实现

5.完善体系结构设计

6.定义构件接口

二.体系结构原型构建

1.包的创建

2.重要文件的创建

3.定义构件之间的接口

4.关键需求的实现

三.体系结构的集成与测试

1.集成的策略

2.桩、驱动与集成测试用例

四.体系结构设计文档描述

五.体系结构评审


一.体系结构设计过程

1.分析关键需求和项目约束

  • 需求规格说明:作为表述用户实际需求的制品,高速软件开发人员应该做什么,是得到用户认可的唯一条件~
  • 关键需求:很少一部分影响到整体结构设计的需求才是关键性需求~
  • 项目约束:项目本身还有很多环境约束会对体系结构设计的选择产生影响~

2.选择体系结构风格

体系结构风格封装了已经重复验证、可复用并语义内聚的一组设计机制,是成功软件设计经验的总结,所以如果能够选择到满足关键需求和项目约束的软件体系结构风格就能够充分复用前人的设计成果~

不同风格有不同的特点,选择的依据是风格的特点是否能与关键需求和项目约束相兼容~

3.体系结构逻辑设计

目的是建立能够满足概要功能需求、质量需求与项目约束的软件体系结构抽象设计方案~

  • 依据概要功能需求与体系结构风格建立初始设计
  • 使用非功能性需求与项目约束评价和改进初始设计

4.体系结构实现

逻辑视角描述的是一个概念上抽象的系统,并不是一个实实在在物理上的系统,需要将软件体系结构的逻辑设计从开发、发布、部署3个角度进行实现,建立软件体系结构的物理设计

  • 开发包设计:逻辑情况下每一个包都可以转化为一个开发包
  • 运行时的进程:进程图主要是表明运行时的进程,以及各进程间如何通信的~
  • 物理部署:UML部署图描述了一个运行时的物理硬件节点,以及在这个节点上运行的软件构件的静态视图;部署图主要表明构建在物理节点上如何分布,同时也表明节点之间的物理连接~

5.完善体系结构设计

  • 有时还需要为软件体系结构添加辅助构件以完成系统的特殊功能
  • 结构设计方案如果仅仅停留在模块的层次,不利于验证其正确性,可以适当进行软件体系结构的细化

6.定义构件接口

定义构件之间的接口,这是进行软件体系结构文档化和交流的必要手段

二.体系结构原型构建

1.包的创建

包是用于将系统组织成层次结构的机制,可以根据构件的设计来创建项目的包

2.重要文件的创建

体系结构原型和一个完整项目类似,都包含类源文件,还包含接口源文件、数据文件、项目配置文件、构建配置文件等。我们需要根据前面的设计再对应的开发包和项目文件夹中创建相应的文件,创建之后还会产生类文件和可执行文件等~

3.定义构件之间的接口

包和文件定义之后,我们可以着力开始定义构件之间的接口~

4.关键需求的实现

创建好文件之后,我们需要实现一些关键功能需求

三.体系结构的集成与测试

1.集成的策略

当体系结构中原型各个模块的代码都编写完成并经过单元测试之后,需要将所有模块组合起来形成整个软件原型系统,这就是集成——目的是逐步让各个模块合成为一个系统来工作,从而验证整个系统的功能、性能、可靠性等需求~

常见的集成策略:

  • 大爆炸集成 :将所有模块一次性组合在一起,优点是短时间内迅速完成集成测试,缺点是一般情况下一次成功的可能性不大,这就使问题的定位和修改比较困难,许多接口错误很容易躲过测试
  • 自顶向下集成:先集成测试上层的模块,下层模块使用伪装的具有相同接口的桩,然后不断地加入下层的模块,再进行测试,直到所有的模块都被集成进来
  • 自底向上集成:与前者相反,从最底层的模块集成测试起,测试的时候上层的模块使用伪装的相同接口的驱动来替换,优点是底层组件开发可以并行,缺点是驱动的开发工作量大
  • 持续集成:提倡尽早集成和频繁集成,即不需要总是等待一个模块开发完才把他集成起来,而是在开发之初就利用桩集成起来;频繁集成式之开发者每次完成一些开发任务之后,就可以用开发结果替换桩中的相应组件,进行集成与测试~

2.桩、驱动与集成测试用例

桩是在软件测试中用来替换某些模块的,桩一般和所替代的模块有相同的接口,并且模拟地实现了模块的行为——相对于真实的实现要简单得多~

四.体系结构设计文档描述

描述软件整体结构,包含整个系统的逻辑组成等诸多内容~

五.体系结构评审

一方面是用户和所有开发人员再一次确认大家对软件功能理解是否一致,并确认一些细节分支情况的处理~

相关文章:

软件工程与计算总结(十)软件体系结构设计与构建

目录 ​编辑 一.体系结构设计过程 1.分析关键需求和项目约束 2.选择体系结构风格 3.体系结构逻辑设计 4.体系结构实现 5.完善体系结构设计 6.定义构件接口 二.体系结构原型构建 1.包的创建 2.重要文件的创建 3.定义构件之间的接口 4.关键需求的实现 三.体系结构的…...

【实操】基于ChatGPT构建知识库

前言 最近有些实践,因为后面要去研究fine-tune了,想着记录一下chatgpt向量数据库构建知识库的一些实操经验,不记我很快就忘了,哈哈。 首先,提一下为啥会出现向量数据库这个技术方案? 大家经过实践发现&…...

ribbonx编程笔记-读写注册表与使用自定义对话框

​ Windows 注册表是一个数据库,用于存储与计算机不同方面相关的设置,例如用户设置、应用程序设备、硬件设置,等等。 VBA 提供了与注册表直接交互的方式,这不仅允许我们获取其它程序和硬件的信息,而且也能够使我们选择应用程序中的重要信息并将其存储在注册表中。本文中,…...

网工记背配置命令(3)----POE配置示例

POE 供电就是通过以太网供电,这种方式仅凭借那根连接通信终端的网线就可完成为它们供电。POE提供的是-53V~0v 的直流电,供电距离最长可达 100m。PoE 款型的交换机的软件大包天然支持 POE,无需 license,通过执行 poe-enable 命令使…...

网络安全(黑客技术)—0基础学习手册

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类…...

[部署网站]01安装宝塔面板搭建WordPress

宝塔面板安装WordPress(超详细)_Wordpress主题网 参考教程 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 官网 1.首先你需要一个服务器或者主机 (Windows系统或者Linux系统都可以) 推荐Linux系统更稳定,…...

Can We Edit Multimodal Large Language Models?

本文是LLM系列文章,针对《Can We Edit Multimodal Large Language Models?》的翻译。 我们可以编辑多模态大型语言模型吗? 摘要1 引言2 相关工作3 编辑多模态LLM4 实验5 结论 摘要 本文主要研究多模态大语言模型(Multimodal Large Language Models, mllm)的编辑…...

使用jsqlparser创建MySQL建表语句

语法 create table [IF NOT EXISTS] 表名 ( 字段名 类型 [约束条件], 字段名 类型 [约束条件], 字段名 类型 [约束条件], 字段名 类型 [约束条件] ); 字段定义在括号内约束条件可以有多个多个字段定义之间用都会隔开 常见约束 NOT NULL 非空DEFAULT 0 默认值AUTO_INCREMENT…...

字符串思维题练习 DAY6 (CF 245H , CF 559B , CF 1731C , CF1109B)

字符串思维题练习 DAY6 (CF 245H , CF 559B , CF 1731C , CF1109B) CF 245 H. Queries for Number of Palindromes(字符串 dp) Problem - H - Codeforces 大意:给出一个字符串S (|S| ≤ 5000) , 给出 Q 次询问 , 每…...

Linux:Mac VMware Fusion13以及CentOS7安装包

Linux:Mac VMware Fusion13以及CentOS7安装包 1. Mac VMware Fusion132. CentOS7安装包3. 安装 1. Mac VMware Fusion13 下载官网地址:https:www.vmware.com/products/fusion/fusion-evaluation.html 2. CentOS7安装包 注意是m芯片需要使用arm架构的i…...

【微服务部署】十、使用Docker Compose搭建高可用Redis集群

现如今,业务系统对于缓存Redis的依赖似乎是必不可少的,我们可以在各种各样的系统中看到Redis的身影。考虑到系统运行的稳定性,Redis的应用和MySQL数据库一样需要做到高可用部署。 一、Redis 的多种高可用方案 常见的Redis的高可用方案有以下…...

【数据结构】树状数组C++详解

文章目录 引入树状数组定义什么是单点修改和区间查询工作原理区间查询代码实现单点修改实现代码242. 一个简单的整数问题AC代码如下:练习:AC代码如下:引入 242. 一个简单的整数问题 给定长度为 N的数列 A A A<...

机器人制作开源方案 | 扫地机器人

1. 功能描述 扫地机器人是现代家庭清洁的得力助手&#xff0c;能够自主规划清扫路径&#xff0c;避开障碍物&#xff0c;有效覆盖整个清洁区域。扫地机器人的出现极大地减轻了家庭清洁的负担&#xff0c;节省了时间和精力&#xff0c;它可以定期清理地面&#xff0c;确保家居环…...

10.2手动推导linux中file, cdev, inode之间的关系

是时候可以手动推导一下linux里面基类父类和子类的关系了 代码放最后把 简单说明版 详细流程 第一步注册驱动 cdev结构体能看做是一个基类,那么链表里面都是字符设备驱动的cdev连载一起,啥串口,lcd的,通过cdev->list_head连接 那cdev结构体里有主次设备号 第一步 使用r…...

JavaScript基础知识13——运算符:一元运算符,二元运算符

哈喽&#xff0c;大家好&#xff0c;我是雷工。 JavaScript的运算符可以根据所需表达式的个数&#xff0c;分为一元运算符、二元运算符、三元运算符。 一、一元运算符 1、一元运算符&#xff1a;只需要一个表达式就可以运算的运算符。 示例&#xff1a;正负号 一元运算符有两…...

异步使用langchain

文章目录 一.先利用langchain官方文档的AI功能问问二.langchain async api三.串行&#xff0c;异步速度比较 一.先利用langchain官方文档的AI功能问问 然后看他给的 Verified Sources 这个页面里面虽然有些函数是异步函数&#xff0c;但是并非专门讲解异步的 二.langchain asy…...

抖音开放平台第三方代小程序开发,授权事件、消息与事件通知总结

大家好&#xff0c;我是小悟 关于抖音开放平台第三方代小程序开发的两个事件接收推送通知&#xff0c;是开放平台代小程序实现业务的重要功能。 授权事件推送和消息与事件推送类型都以Event的值判断。 授权事件推送通知 授权事件推送包括&#xff1a;推送票据、授权成功、授…...

华为9.20笔试 复现

第一题 丢失报文的位置 思路&#xff1a;从数组最小索引开始遍历 #include <iostream> #include <vector> using namespace std; // 求最小索引值 int getMinIdx(vector<int> &arr) {int minidx 0;for (int i 0; i < arr.size(); i){if (arr[i] …...

二十五、【色调调整基础】

文章目录 1、亮度/对比度a、亮度b、对比度 2、曝光度3、阈值4、色阶5、反相6、黑白7、渐变映射 1、亮度/对比度 a、亮度 亮度是指画面的明亮程度 b、对比度 对比度指的是一幅图像中&#xff0c;明暗区域最亮和最暗之间不同亮度层级的测量&#xff0c;如下图所示&#xff0…...

Android Studio SDK manager加载packages不全

打开Android Studio里的SDK manager&#xff0c;发现除了已安装的&#xff0c;其他的都不显示。 解决方法&#xff1a; 设置代理&#xff1a; 方便复制> http://mirrors.neusoft.edu.cn/ 重启Android Studio...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...