软件工程复习记录
基本概念
软件工程三要素:方法、工具、过程
软件开发方法:软件开发所遵循的办法和步骤,以保证所得到的运行系统和支持的文档满足质量要求。
软件开发过程管理
软件生命周期:可行性研究、需求分析、概要设计、详细设计、编码、测试、运行维护七个阶段。
软件开发模型
瀑布模型
将软件生命周期划分为制订计划、需求分析、软件设计、程序编写、软件测试和运行维护等6个基本活动,并且规定了它们自上而下、相互衔接的固定次序,比如同瀑布流水,逐级下落。
优点是可以规范化过程,有利于评审。
缺点在于给出软件生存周期各阶段的固定顺序,上一阶段完成后才能进入下一阶段,所以过于理想,缺乏灵活性,容易产生需求偏差,导致软件开发完成才发现并非用户所需要的。
快速原型模型
第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么。第二步则在第一步的基础上开发客户满意的软件产品。
优点:减少由于软件需求不明确带来的开发风险,具有显著的效果。
演化模型
快速原型模型在获取真实需求后,将抛弃原型。而演化模型将在快速开发一个原型的基础上,逐步演化成最终的软件。
增量模型
软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。
优点:可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。也就是说增量模型有利于快速开发软件。
螺旋模型
综合了瀑布模型和演化模型的优点,还增加了风险分析,特别适合于大型复杂的系统。
喷泉模型
对软件复用和生存期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。
软件开发方法
结构化开发方法
强调系统结构的合理性以及所开发的软件结构的合理性,主要是面向数据流的,
因此也被称为面向功能的软件开发方法或面向数据流的软件开发方法。
模块化开发方法
把一个待开发的软件系统分解成若干可单独命名和编址的较为简单的部分(即模块),每个模块分别独立地开发、测试,最后再组装出整个软件系统。
面向对象开发方法
核心思想是利用面向对象的概念和方法为软件需求建立模型,进行系统设计,采用面向对象程序设计语言进行系统实现,对建成的系统进行面向对象的测试和维护。
结构化分析
系统分析是指把要解决的问题作为一个系统,对系统要素进行综合分析,找出解决问题的可行方案的方法。
结构化分析方法(StructuredAnalysis,SA)是面向数据流的需求分析方法,适用于分析大型数据处理。釆用自顶向下、逐层分解,建立系统的处理流程,以数据流图(Data Flow Diagram,DFD)和数据字典为主要工具,建立系统的逻辑模型。SA方法的分析结果由以下几部分组成:
- 一套分层的数据流图
- 一本数据词典
- 一组小说明
- 补充材料
数据流图
结构化分析是面向数据流进行需求分析的方法,用来描述数据流从输入到输出的变换流程。它以图形的方式描绘数据在系统中流动和处理的过程,它只反映系统必须完成的逻辑功能,所以是一种功能模型。
数据字典
数据流图仅描述了系统的“分解”,但没有对图中各成分进行说明。数据字典就是用来定义数据流图中的各个成分的含义的。数据字典有4类条目,包括数据流、数据项、数据存储和基本加工。
系统设计
结构化设计(Structured Design,简称SD)是将结构化分析得到的数据流图映射成软件体系结构的一种设计方法。强调抽象化、模块化、信息隐蔽、模块独立、逐步求精、高内聚低耦合等设计准则。分为概要设计和详细设计两大步骤。
独立性由强到弱:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。
概要设计
- 设计软件系统总体结构
- 数据结构的设计
- 数据库的设计
- 编写概要设计文档
- 评审
详细设计
- 对每个模块进行详细的算法设计
- 对模块内的数据结构进行设计
- 对数据库进行物理设计
- 其他设计。比如代码设计、用户界面设计、输入输出格式设计。
- 编写详细设计说明书
- 评审
系统开发
敏捷开发
以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。核心理念就是以最简单有效的方式快速地达成目标,并在这个过程中及时地响应外界的变化,做出迅速的调整。
在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
软件测试
从是否关心软件内部结构和具体实现的角度划分:
- 白盒测试:常见的方法是逻辑覆盖法。
- 黑盒测试:常用的方法包括:等价类划分、边界值分析、错误推测法、因果图、功能图。
从是否执行代码角度:
- 静态测试:仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
- 动态测试:动态测试是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
从软件开发的过程按阶段划分:
- 单元测试:又称模块测试,
- 集成测试:又叫组装测试或联合测试,是单元测试的多级扩展,
- 确认测试:又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。
- 系统测试:为判断系统是否符合要求而对集成的软、硬件系统进行的测试活动
- 验收测试:以用户为主的测试,软件开发人员和质量保证人员参加,由用户设计测试用例。
- 回归测试:改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。
系统维护
软件维护是指因修正错误、提升性能或其他属性而进行的软件修改。分为纠错性维护、适应性维护、增强型维护、预防性维护。
软件管理
软件项目管理:
软件项目管理是软件生存周期中软件管理者所进行的一系列的活动,其目的是在一定的时间和预设的范围内有效地利用人力、资源、技术和工具,使软件系统或产品按照原定的计划和质量要求比如期完成。
有效的软件项目管理集中在4个P上,即人员(Person)、产品(Product)、过程(Procedure)和项目(Project)。
软件评审
软件评审是在软件的生命周期内所实施的对软件本身的评审,是对软件元素或者项目状态的一种评估手段,以确定其是否与计划的结果保持一致,并使其得到改进。
三层架构与MVC
三层架构:表现层、业务逻辑层和数据访问层,区分层次的目的即为了“高内聚低耦合”的思想。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
- M即Model(模型层),主要负责处理业务逻辑以及数据库的交互。
- V即View(视图层),主要负责显示数据和提交数据。
- C即Controller(控制层),主要是用作辅助捕获请求并控制请求转发。
相关文章:
软件工程复习记录
基本概念 软件工程三要素:方法、工具、过程 软件开发方法:软件开发所遵循的办法和步骤,以保证所得到的运行系统和支持的文档满足质量要求。 软件开发过程管理 软件生命周期:可行性研究、需求分析、概要设计、详细设计、编码、测…...
爬虫运行后数据如何存储?
爬虫运行后获取的数据可以存储在多种不同的存储系统中,具体选择取决于数据的规模、查询需求以及应用场景。以下是一些常见的数据存储方法: 1. 文件系统 对于小型项目或临时数据存储,可以直接将数据保存到本地文件中。常见的文件格式包括&…...
【C语言】C语言的潜规则:运行环境对C程序执行特性的影响
C语言的潜规则:C语言的执行会因为它的运行环境被赋予不同的特性 C语言是一种非常底层、高效、灵活的编程语言,但这种灵活性也带来了很多不确定性。C语言的行为在很大程度上依赖于其运行环境(编译器、操作系统、硬件架构等)。这也…...
Win11 24h2 不能正常ensp
Win11 24h2 不能正常ensp 因为Win11 24h2的内核大小更改,目前virtualbox在7.1.4中更新解决了。而ensp不支持5.2.44之后的virtualbox并已停止维护,不再进行5.2.44修复,virtualbox 5.2.24的ntdll文件sizeofimage问题,此问题导致ens…...
【认证法规】安全隔离变压器
文章目录 定义反激电源变压器 定义 安全隔离变压器(safety isolating transformer),通过至少相当于双重绝缘或加强绝缘的绝缘使输入绕组与输出绕组在电气上分开的变压器。这种变压器是为以安全特低电压向配电电路、电器或其它设备供电而设计…...
【北京迅为】iTOP-4412全能版使用手册-第六十七章 USB鼠标驱动详解
iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…...
MFEM源码分析:代数库
数值计算引擎通常需要将表征物理模型的数学模型转化为线性/非线性方程组,进而求解这些线性/非线性方程组来获取数值解。因此,代数库自然成为数值计算引擎不可或取的模块。 而且,普遍认为,代数库的性能在很大程度上决定数值计算引…...
全景图相关算法学习笔记
目录 ldm3d CVPR 2024 Highlight 文本生360全景!PanFusion 全景图光流学习 一张2D全景图可合成高质量的360度3D场景 全景图生成3d ldm3d https://huggingface.co/Intel/ldm3d-pano CVPR 2024 Highlight 文本生360全景!PanFusion 文生图࿰…...
3D 目标检测:从萌芽到前沿的技术演进之路
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
泷羽sec:shell编程(9)不同脚本的互相调用和重定向操作
声明: 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
Java Web 3 Axios Vue组件库
一 Ajax 1 同步 异步 2 原生Ajax 比较繁琐 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…...
探索未来驾驶:全面解析现代汽车高级辅助驾驶系统功能(APA 、SDA 、TBA、RPA、HPA、PEB)
随着科技的不断进步,汽车行业正在经历一场革命,自动驾驶技术逐渐成为现实。从自适应巡航控制到完全自动驾驶,各种高级驾驶辅助系统(ADAS)正在改变我们的驾驶方式。今天,我们将深入探讨几种关键的高级驾驶辅…...
MYSQL - 索引详解
一 什么是索引? 实际上在上一篇介绍MYSQL的体系结构当中我们稍微提及了一点,在引擎层,我们提到不同的引擎对应的索引的实现方式,选择是不一样的。 简单理解,索引(index)其实就是一种帮助MYSQL高…...
AI智能体Prompt预设词指令大全+GPTs应用使用
AI智能体使用指南 直接复制在AI工具助手中使用(提问前) 可前往SparkAi系统用户官网进行直接使用 SparkAI系统介绍文档:Docs 常见AI智能体GPTs应用大全在线使用 自定义添加制作AI智能体进行使用: 文章润色器 你是一位具有敏锐洞察…...
美团一面,有点难度
前几天分享过一篇训练营的朋友在阿里的一面面经,挺简单的她也是很轻松的过了,感兴趣的可以看一下我之前发的文章。 今天要分享的还是她的面经,美团的一面,感觉比阿里的难一些,各位观众老爷你怎么看? 自我介…...
axios取消请求
Axios 使用 cancel token 取消请求 1、先在axios请求中加上cancelToken import request from ../utils/request // 配置过的Axios 对象 import axios from axios export function getDetail(params, that) { return request({url: /api/indexlineage/detail, method: get,par…...
Spark简介
Spark简介 菜鸟弹性分布式数据集 (RDDs)参考 Spark通过两种方式使用Hadoop:一种是存储,另一种是处理。由于Spark具有自己的集群管理计算,因此仅将Hadoop用于存储目的。 Spark 的关键思想是- [Resilient Distributed Datasets(RDD…...
visual studio2017版本的安装下载
绝绝子,官网找了半天都不知道在哪里下载的,和当初下载旧版本的qt一样难受,还是用百度云吧!!!!!!!!!! 参考文章࿱…...
【Linux】ubuntu下一键配置vim
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:Linux权限(超详细彻底搞懂Linux的权限) 🔖流水不争,争的是滔滔…...
[光源控制] UI调节光源亮度参数失效
📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览: 一. 前言二. 串口调试助手辅助排查接线问题二. …...
C语言学习:速通指针(2)
这里要学习的有以下内容 1. const修饰指针 2. 野指针 3. assert断⾔ 4. 指针的使⽤和传址调⽤ 那么从这里开始 1. const 修饰指针 const修饰变量 首先我们知道变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变…...
方案拆解 | 打击矩阵新规频出!2025矩阵营销该怎么玩?
社媒平台的矩阵营销又要“变天”了?! 11月18日,小红书官方发表了被安全薯 称为“小红书史上最严打击黑灰产专项”新规,其中就包括黑灰产矩阵号的公告。 ▲ 图源:小红书 实际上,不包括这次,今年…...
Ubuntu22.04深度学习环境安装【cuda+cudnn】
为了复现一篇深度学习论文,特意安装了Linux系统。前一天已经安装Linux显卡驱动,现在需要安装cuda、cudnn等。 论文代码 论文PDF 确定包版本: 根据论文提供的代码。在requirements.txt中发现cuda版本为11.7,cudnn为8.5.0,python没…...
etcd分布式存储系统快速入门指南
在分布式系统的复杂世界中,确保有效的数据管理至关重要。分布式可靠的键值存储在维护跨分布式环境的数据一致性和可伸缩性方面起着关键作用。 在这个全面的教程中,我们将深入研究etcd,这是一个开源的分布式键值存储。我们将探索其基本概念、特…...
dataTable
在 C# 中,DataTable 是 .NET Framework 中用于处理数据表格的一个类,属于 System.Data 命名空间。它是一种内存中表示数据表的结构,通常用于临时存储和操作数据,类似于数据库中的表。DataTable 的主要特点是行列结构,其…...
Flink学习连载文章11--双流Join
双流 Join 和两个流合并是不一样的 两个流合并:两个流变为 1 个流 union connect 双流 join: 两个流 join,其实这两个流还是原来的,只是满足条件的数据会变为一个新的流。 可以结合 sql 语句中的 union 和 join 的区别。 在离线 Hive 中&…...
RayLink远程控制技术助力教育领域的创新应用研究
远程控制技术在教育领域的应用确实改变了传统教学模式。想象一下,无论身处何地,只要有网络连接,就能通过远程软件加入课堂,这种体验是不是很吸引人?虽然远程控制听起来很技术化,但别担心,小编今…...
【Qt移植LVGL】QWidget手搓LVGL软件仿真模拟器(非直接运行图形库)
【Qt移植LVGL】QWidget手搓LVGL软件仿真模拟器(非直接运行图形库) 打包开源地址: Qt函数库gitee地址 更新以gitee为准 移植后的demo工程: gitee 有些没实现的 后续我会继续优化 文章目录 别碰瓷看清楚:是移植&#…...
PostgreSQL UNION 操作符
PostgreSQL UNION 操作符 引言 PostgreSQL 是一种功能强大的开源对象关系型数据库管理系统,它以其稳定性、可靠性和先进的特性而闻名。在处理数据库查询时,我们经常需要合并来自不同表的数据,或者合并同一表的不同查询结果。这时,UNION 操作符就变得非常有用。本文将详细…...
spring boot 测试 mybatis mapper类
spring boot 测试 mybatis mapper类 针对 mybatis plus不启动 webserver指定加载 xml 【过滤 “classpath*:/mapper/**/*.xml” 下的xml】, mapper xml文件名和mapper java文件名称要一样,是根据文件名称过滤的。默认情况加载和解析所有mapper.xml 自定义 MapperT…...
Python发kafka消息
要在Python中向Kafka发送消息,你可以使用kafka-python库。首先,你需要安装这个库。如果你还没有安装它,可以通过pip来安装: bash pip install kafka-python 接下来是一个简单的例子,展示如何创建一个生产者࿰…...
zipkin 引申一:如何遍历jar目录下的exec.jar并选择对应序号的jar启动
文章目录 一、Zipin概述二、如何下载三、需求描述四、代码实现1. pom设置2. 相关工具类3. 核心代码 五、打包部署1. 打包,在项目目录执行mvn clean package2. 部署3. 运行以及停止 六、源码放送 一、Zipin概述 Zipkin是Twitter开源的分布式跟踪系统,基于…...
使用 httputils + protostuff 实现高性能 rpc
1、先讲讲 protobuf protobuf 一直是高性能序列化的代表之一(google 出品)。但是用起来,可难受了,你得先申明 “.proto” 配置文件,并且要把这个配置文件编译转成类。所以必然要学习新语法、新工具。 可能真的太难受…...
Facebook广告文案流量秘诀
Facebook 广告文案是制作有效 Facebook 广告的关键方面。它侧重于伴随广告视觉元素的文本内容。今天我们的博客将深入探讨成功的 Facebook 广告文案的秘密! 一、广告文案怎么写? 正文:这是帖子的正文,出现在您姓名的正下方。它可…...
在Vue.js中生成二维码(将指定的url+参数 生成二维码)
在Vue.js中生成二维码,你可以使用JavaScript库如qrcode或qr.js。以下是一个简单的例子,展示如何在Vue组件中使用qrcode库将指定的URL加上参数生成二维码。 首先,你需要安装qrcode库。如果你使用的是npm或yarn,可以通过命令行安装…...
Face2QR:可根据人脸图像生成二维码,还可以扫描,以后个人名片就这样用了!
今天给大家介绍的是一种专为生成个性化二维码而设计的新方法Face2QR,可以将美观、人脸识别和可扫描性完美地融合在一起。 下图展示为Face2QR 生成的面部图像(第一行)和二维码图像(第二行)。生成的二维码不仅忠实地保留…...
【Linux网络编程】第六弹---构建TCP服务器:从基础到线程池版本的实现与测试详解
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、TcpServerMain.cc 2、TcpServer.hpp 2.1、TcpServer类基本结构 2.2、构造析构函数 2.3、InitServer(…...
XML 语言随笔
XML的含义 XML(eXtensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言。XML与HTML(HyperText Markup Language,超文本标记语言)类似,但XML的设计目的是描述数据&…...
flex: 1 display:flex 导致的宽度失效问题
flex: 1 & display:flex 导致的宽度失效问题 问题复现 有这样的一个业务场景,详情项每行三项分别占33%宽度,每项有label字数不固定所以宽度不固定,还有content 占满标签剩余宽度,文字过多显示省略号, 鼠标划入展示…...
65页PDF | 企业IT信息化战略规划(限免下载)
一、前言 这份报告是企业IT信息化战略规划,报告详细阐述了企业在面对新兴技术成熟和行业竞争加剧的背景下,如何通过三个阶段的IT战略规划(IT 1.0基础建设、IT 2.0运营效率、IT 3.0持续发展),系统地构建IT管理架构、应…...
15.三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1&am…...
【Notepad++】---设置背景为护眼色(豆沙绿)最新最详细
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 【Notepad】---设置背景为护眼色…...
项目代码第2讲:从0实现LoginController.cs,UsersController.cs、User相关的后端接口对应的前端界面
一、User 1、使用数据注解设置主键和外键 设置主键:在User类的U_uid属性上使用[Key]注解。 设置外键:在Order类中,创建一个表示外键的属性(例如UserU_uid),并使用[ForeignKey]注解指定它引用User类的哪个…...
电子商务人工智能指南 3/6 - 聊天机器人和客户服务
介绍 81% 的零售业高管表示, AI 至少在其组织中发挥了中等至完全的作用。然而,78% 的受访零售业高管表示,很难跟上不断发展的 AI 格局。 近年来,电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…...
vue.js组件开发的所有流程
1. 设计组件架构 首先,你需要考虑应用的结构,决定哪些部分应该成为独立的组件。这包括: 提取重复的UI元素:如按钮、输入框、卡片等。 功能模块:例如登录框、导航栏、数据表格等。 2. 设置开发环境 安装Node.js…...
从零开始学TiDB(1) 核心组件架构概述
首先TiDB深度兼容MySQL 5.7 1. TiDB Server SQL语句的解析与编译:首先一条SQL语句最先到达的地方是TiDB Server集群,TiDB Server是无状态的,不存储数据,SQL 发过来之后TiDB Server 负责 解析,优化,编译 这…...
VsCode运行Ts文件
1. 生成package.json文件 npm init 2. 生成tsconfig.json文件 tsc --init 3. Vscode运行ts文件 在ts文件点击右键执行Run Code,执行ts文件...
初始化webpack应用示例
1、初始化npm mkdir webpack_test cd webpack_test npm init 2、安装webpack依赖 npm install webpack webpack-cli -D 3、添加文件夹,入口文件 mkdir src touch index.js touch add-content.js 文件夹结构 index.js import addContent from "./add-cont…...
liunx docker 部署 nacos seata sentinel
部署nacos 1.按要求创建好数据库 2.创建docker 容器 docker run -d --name nacos-server -p 8848:8848 -e MODEstandalone -e SPRING_DATASOURCE_PLATFORMmysql -e MYSQL_SERVICE_HOST172.17.251.166 -e MYSQL_SERVICE_DB_NAMEry-config -e MYSQL_SERVICE_PORT3306 -e MYSQL…...
MySQL面试
文章目录 事务隔离级别需要解决的问题事务隔离级别 MySQL 中是如何实现事务隔离的实现可重复读 什么是存储引擎如何定位慢查询分析慢查询原因MySQL超大分页怎么处理索引失效什么时候建立唯一索引、前缀索引、联合索引?redolog与binlog是如何保证一致的redolog刷盘时…...