软件工程基础
本博客地址:https://security.blog.csdn.net/article/details/136446772
一. 软件工程
1、软件危机。具体表现为:软件开发进度难以预测、软件开发成本难以控制、软件功能难以满足用户期望、软件质量无法保证、软件难以维护和软件缺少适当的文档资料。
2、常见的软件过程模型主要包括:瀑布模型、原型模型、螺旋模型、敏捷模型、软件统一过程(RUP)模型、软件能力成熟度模型(CMM)、软件能力成熟度模型集成(CMMI)
3、瀑布模型是结构化开发方法使用的软件过程模型。其包括:需求分析、系统设计、程序设计、编码实现、单元测试、集成测试、系统测试、运行维护。瀑布模型的特点是:因果关系紧密相连,前一个阶段工作的输出结果是后一个阶段工作的输入。缺点是:需求难以一次确定、变更的代价高、结果难以预见、各阶段工作不能并行。
4、原型模型又称快速原型,是原型方法使用的生命周期模型。原型模型解决了瀑布模型需求难以一次确定、结果难以预见的缺点。原型模型有原型开发和目标软件开发两个阶段。
5、抛弃型原型将原型作为需求确认的手段,在需求确认结束后就被抛弃不用,继续用瀑布模型。演化性原型在需求确认结束后,不断补充和完善原型,直至形成一个完整的产品。
6、螺旋模型是在快速原型的基础上结合瀑布模型扩展而成。其将整个软件开发流程分成多个阶段,每一个阶段都由目标设定、风险分析、开发和有效性验证、评审 4 部分组成。支持大型软件开发,适用于面向规格说明、面向过程和面向对象的软件开发方法,强调其他模型忽视的风险分析。
7、敏捷模型属于敏捷方法使用的模型。主要有:极限编程(XP)、水晶系列方法、并列争球法、特征驱动开发方法(FDD)等。这些方法的特征如下:
● 极限编程(XP):高效、低风险、测试先行(先写测试代码,再编写程序)。
● 水晶系列方法:不同的项目,采用不同的策略。
● 并列争球法:该方法侧重于项目管理。
● 特征驱动开发方法:该方法会将开发人员分类,分为指挥者(首席程序员)、类程序员等。
8、软件统一过程(RUP)模型中有 9 个核心工作流:业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境。RUP 的特点是:用例驱动的、以架构为中心的、迭代和增量的软件开发过程。
9、软件统一过程(RUP)模型用4+1视图模型来描述架构,4包括:逻辑视图、实现视图、进程视图、部署视图。1包括:用例视图。
● 逻辑视图:对应最终用户,常用类图、对象图、状态图、协作图表示。
● 实现视图:又称为开发视图,对应程序员,通常包含包图和组件图。
● 进程视图:又叫过程视图,对应系统集成人员,常用活动图表示。
● 部署视图:又叫物理视图,对应系统工程师,常用部署图表示。
● 用例视图:所有其他视图都依靠用例视图(场景)来指导它们,这就是将模型称为4+1的原因。
10、软件能力成熟度模型(CMM)是一个概念模型,模型框架和表示是刚性的,不能随意改变,但模型的解释和实现有一定弹性。
11、软件能力成熟度模型集成(CMMI)是在 CMM 的基础上发展而来的。它将软件过程改进的步骤组织成 5 个成熟度等级:初始级、已管理级、已定义级、量化管理级、优化级。量化管理级与已定义级的区别是对过程性能的可预测。
二. 需求工程
1、软件需求包括 3 个不同的层次:业务需求、用户需求、功能需求
2.需求工程(RE)是指应用已证实有效的原理、方法,通过合适的工具和记号,系统地描述待开发系统及其行为特征和相关约束。需求工程由需求获取、需求分析、形成需求规格(或称为需求文档化)、需求确认与验证、需求管理 5 个阶段组成。
3、软件需求规格说明书(SRS)具体包括功能需求、非功能需求和约束。约束包括设计约束和过程约束。批准的 SRS 是需求开发和需求管理之间的桥梁。
4、需求管理是一个对系统需求变更、了解和控制的过程,包括变更控制、版本控制、需求跟踪等活动。
5、需求获取是获得系统必要的特征,或者是获得用户能接受的、系统必须满足的约束。需求获取的方法包括用户面谈、需求专题讨论会、问卷调查、现场观察、原型化方法和头脑风暴法等。需求获取的基本步骤:
● 开发高层的业务模型。
● 定义项目范围和高层需求。
● 识别用户角色和用户代表。
● 获取具体的需求。
● 确定目标系统的业务工作流。
● 需求整理与总结。
6、需求变更管理过程为:识别出问题、问题分析和变更描述、变更分析和成本计算、变更实现、修改后的需求。
7、变更控制委员会(Change Control Board,CCB)
CCB 是决策机构,不是作业机构,通常 CCB 的工作是通过评审手段来决定项目是否能变更,但不提出变更方案。过程及操作步骤为:制定决策、交流情况、重新协商约定。
8、需求跟踪的目的是建立与维护需求-设计-编程-测试之间的一致性,确保所有的工作成果符合用户需求。需求跟踪有正向跟踪和逆向跟踪两种方式,合称为双向跟踪。不论采用何种跟踪方式,都要建立与维护需求跟踪矩阵。
三. 系统分析与设计
1、结构化方法又称为面向功能的软件开发方法或面向数据流的软件开发方法。针对软件生存周期各个不同的阶段,有结构化分析、结构化设计和结构化编程等方法。
2、结构化分析(SA)是利用图形表达用户需求中的功能需求,使用的手段主要有数据流图(DFD)、数据字典、结构化语言、判定表和判定树等。
● 数据流图(DFD)由 4 种基本元素组成:数据流、处理/加工、数据存储和外部项。
● 数据字典是一种标记用户可以访问的数据项和元数据的目录,是对系统中使用的所有数据元素定义的集合,包括数据项、数据结构、数据流、数据存储和处理过程。
● 结构化分析具体的建模过程及步骤为:明确目标、确定系统范围、建立顶层 DFD 图、构建第一层 DFD 分解图、开发 DFD 层次结构图、检查确认 DFD 图。DFD 图需要满足规则:父图数据流必须在子图中出现;一个处理至少有一个输入流和一个输出流;一个存储必定有流入和流出;一个数据流至少有一端是处理端;模型表达的信息是全面的、完整的、正确的和一致的。
3、结构化设计(SD)是一种面向数据流的设计方法,SD 分为概要设计和详细设计两个阶段,其中概要设计的主要任务是:确定软件系统的结构,对系统进行模块划分,确定每个模块的功能、接口和模块之间的调用关系;详细设计的主要任务是:为每个模块设计实现的细节。在 SD 中,模块是实现功能的基本单位,一般具有功能、逻辑和状态 3 个基本属性。
4、耦合度从低到高:
| 耦合类型 | 描述 |
|---|---|
| 非直接耦合 | 两个模块之间没有直接关系,互相不依赖对方 |
| 数据耦合 | 一组模块借助参数表传递简单数据 |
| 标记耦合 | 一组模块通过参数表传递记录等复杂信息(数据结构) |
| 控制耦合 | 模块之间传递的信息中包含用于直接控制模块内部逻辑的信息 |
| 通信耦合 | 一组模块共享了输入或输出 |
| 公共耦合 | 多个模块都访问同一个公共数据环境,公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等 |
| 内容耦合 | 一个模块直接访问另一个模块的内部数据、一个模块不通过正常入口跳转到另一个模块的内部、两个模块有一部分程序代码重叠、一个模块有多个入口等 |
5、内聚度从高到低:
| 内聚类型 | 描述 |
|---|---|
| 功能内聚 | 各个部分协同完成一个单一功能,缺一不可 |
| 顺序内聚 | 处理元素相关,而且必须顺序执行,通常前一任务的输出是后一任务的输入 |
| 通信内聚 | 所有处理元素集中在一个数据结构的区域上 |
| 过程内聚 | 处理元素相关,而且必须按特定的次序执行 |
| 时间内聚 | 所包含的任务必须在同一时间间隔内执行 |
| 逻辑内聚 | 完成逻辑上相关的一组任务,互相存在调用关系 |
| 偶然内聚 | 完成一组没有关系或松散关系的任务,或者仅仅代码相似 |
6、概要设计使用系统结构图(SC)又称为模块结构图,反映了系统的总体结构。详细设计的主要任务是:设计每个模块的实现算法、所需的局部数据结构。详细设计的表示工具有:图形工具、表格工具和语言工具。图形有:业务流图、程序流程图、问题分析图(PAD)、NS 流程图等。
7、结构化编程(SP)通过顺序、分支和循环三种基本的控制结构可以构造出任何单入口单出口的程序。SP 强调:自顶向下,逐步细化;清晰第一,效率第二;书写规范,缩进格式;基本结构,组合而成。P 原则:程序=(算法)+(数据结构)。两者分开设计,以算法(函数或过程)为主。
8、数据库设计(概念结构设计部分)建立抽象的概念数据模型,通常采用实体-联系图(E-R 图)来表示。
9、面向对象的方法可以分为:面向对象的分析方法(OOA)、面向对象设计方法(OOD)、面向对象程序设计(OOP)、数据持久化与数据库。
10、面向对象的分析方法(OOA)模型由 5 个层次(主题层、对象类层、结构层、属性层和服务层)和 5 个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。OOA 的基本原则有:抽象、封装、继承、分类、聚合、关联、消息通信、粒度控制和行为分析。OOA 的 5 个基本步骤:确定对象和类、确定结构、确定主题、确定属性、确定方法。
11、面向对象设计方法(OOD)中,数据结构和在数据结构上定义的操作算法封装在一个对象之中。类封装了信息和行为,是具有相同属性、方法和关系的对象集合的总称。类可以分为 3 种类型:实体类、控制类、边界类
12、面向对象程序设计(OOP)以对象为核心,该方法认为程序由一系列对象组成。OOP 的基本特点有封装、继承和多态。
13、在多层软件设计和开发中采用持久层专注于实现数据持久化,将对象持久化到关系数据库中,需要进行对象/关系的映射(ORM),目前主流的持久化技术框架包括Mybatis等
14、软件重用是使用已有软件产品来开发新的软件系统的过程,分为水平式重用和垂直式重用两种类型
15、逆向工程。抽象级别与逆向难度递增:
| 级别 | 内容 |
|---|---|
| 实现级 | 语法树、符号表 |
| 结构级 | 程序分量间的关系,如调用图 |
| 功能级 | 功能和程序段之间的关系 |
| 领域级 | 实体与应用域之间的关系 |
四. 软件测试分类
1、根据程序执行状态可分为:静态测试(ST)和动态测试(DT)。
2、根据是否关注具体实现和内部结构可分为:黑盒测试、白盒测试和灰盒测试。
3、根据程序执行的方式来分类可分为:人工测试(MT)和自动化测试(AT)。
4、从阶段上划分,软件测试可以分为:单元测试、集成测试、系统测试和验收测试。
5、其他测试还有AB 测试、Web 测试、链接测试和表单测试等。
五. 基于构件的软件工程
1、基于构件的软件工程(CBSE)是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。用于 CBSE 的构件应该具备以下特征:
● 可组装型:所有外部交互必须通过公开定义的接口进行。
● 可部署性:必须能作为一个独立实体在提供其构件模型实现的构件平台上运行。
● 文档化:构件必须是完全文档化的。
● 独立性:构件应该是独立的,如确实需要其他构件提供服务,则应显示声明。
● 标准化:必须符合某种标准化的构件模型。
2、构件模型定义了构件实现、文档化以及开发标准。目前主流的构件模型是 Web Services 模型、Sun 公司的 EJB 模型和微软的.NET 模型。构件模型包含了一些模型要素如接口、使用信息和部署信息。构件模型提供了一组被构件使用的通用服务,包括平台服务和支持服务。
3、支持基于构件组装的软件开发过程主要包括:
● 系统需求概览。
● 识别候选构件。
● 根据发现的构件修改需求。
● 体系结构设计。
● 构件定制与适配。
● 组装构件,创建系统。
4、CBSE 过程与传统的软件开发过程的不同点:
● 早期需要完整的需求,以便尽可能多地识别出可复用的构件。
● 早期阶段根据可利用的构件来细化和修改需求以匹配 CBSE。
● 架构设计完成后,可能需要修改构件以适合功能和架构的需求。
● 开发过程就是组装构件的过程,有时需要开发适配器。
● CBSE 中的架构设计阶段特别重要,决定和限制了可选构件的范围。
5、常见的构件组装有顺序组装、层次组装和叠加组装 3 种组装方式。构件组装可能面临接口不兼容的问题,常见的有参数不兼容、操作不兼容和操作不完备 3 种。这时需要编写适配器构件来解决不兼容的问题。
六、软件项目管理
1、软件进度管理一般包括活动定义、活动排序、活动资源估计、活动历时估计、制定进度计划和进度控制 6 个过程。
2、工作分解结构(WBS)是把一个项目,按一定的原则分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的活动中,直到分解不下去为止。
3、活动定义是指确定完成项目的各个可交付成果所必须进行的各项具体活动,还需要明确每个活动的前驱、持续时间、必须完成日期、里程碑或可交付成果。
4、任务活动图是项目进度管理、项目成本管理等一系列项目管理活动的基础,通常采用甘特图等方式来展示和管理项目活动。
5、软件配置管理(SCM)是一种标识、组织和控制修改的技术。SCM 的目的是:使错误降为最小并最有效地提高生产效率。SCM 的核心内容包括版本控制和变更控制。
6、软件质量保证(SQA)的目的是:使软件过程对于管理人员来说是可见的。SQA 的主要任务是:
● SQA 审计与评审,包括对软件工作产品、软件工具和设备的审计,评审开发组的行为符合预定的过程。
● SQA 报告。
● 处理不符合问题。
7、软件质量认证,国内软件企业主要采用的是 ISO 9001 和 CMM。
8、软件风险管理的主要目标是预防风险和应对发生的风险。风险管理活动可以分为:
● Bochm 把风险管理活动分成风险估计(风险辨识、风险分析、风险排序)和风险控制(风险管理计划、风险处理、风险监督)两大阶段。
● Charette 把风险分成分析(辨识、估计、评价)和管理(计划、控制、监督)两大阶段。
相关文章:
软件工程基础
本博客地址:https://security.blog.csdn.net/article/details/136446772 一. 软件工程 1、软件危机。具体表现为:软件开发进度难以预测、软件开发成本难以控制、软件功能难以满足用户期望、软件质量无法保证、软件难以维护和软件缺少适当的文档资料。 …...
alzet供应商你值得拥有
在20世纪70年代,ALZE公司研发出来一款巧妙的药物输送装置——Alzet osmotic pump。这款产品如胶囊般精致小巧,它既有胶囊的外表,也具有胶囊的作用。在Alzet osmotic pump中藏有可以装配药物溶液的空间。此款胶囊泵如同一个小投递员࿰…...
x86中的TSS与任务切换
前言 今天在学习《深入理解Linux内核》的时候,发现出现了一个新的名词TSS(Task-State Segment),这还是我第一次了解到原来x86提供了硬件级别的任务切换功能,之前以为任务切换都是操作系统实现的来着,这里也…...
打造去中心化透明储蓄罐:Solidity智能合约的又一实践
一、案例背景 传统的储蓄罐通常是由个人或家庭使用,用于存放硬币或小额纸币。然而,这样的储蓄罐缺乏透明性,用户无法实时了解储蓄情况,也无法确保资金的安全性。 通过Solidity智能合约,我们可以构建一个去中心化…...
Java Mybatis数据库面试题
Java Mybatis数据库面试题 前言1、什么是 Mybatis?2、Mybaits 的优缺点:3、SQL 注入如何防止?4、MyBatis 框架适用场合:5、MyBatis 与 Hibernate 有哪些不同?6、#{}和${}的区别是什么?7、当表中的字段名和实…...
LeetCode-第14题-最长公共前缀
1.题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 2.样例描述 3.思路描述 按字符串数组每个数组的长度,将字符串数组从小到大排序;他们的公共前缀一定小于或等于最长元素长度…...
TCP/UDP模型:2024/2/29
作业1:TCP模型 服务器端: #include <myhead.h> #define SER_IP "192.168.199.129" #define SER_PORT 8899int main(int argc, const char *argv[]) {//1.创建用于连接的套接字文件int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd-1){per…...
微信如何设置自动回复消息,提升沟通效率的?
在日常微信聊天过程中,我们可能会频繁遇到相同问题的客户提问,特别是对于从事销售工作的朋友们而言,客户添加好友后的第一句话常常为“在吗”或“你好”。当我们拥有大量好友,手动逐一回复可能会耗费大量时间。因此,自…...
PCIE的BAR空间
1.PCIe 简介 PCIe(Peripheral Component Interconnect Express)是一种高速 串行计算机扩展总线标准,主要用于连接主板上的中央处理器(CPU)和 各种外部设备,如显卡、声卡、硬盘等。PCIe 总线取代了传统的 PC…...
11.互信息-机器学习模型性能的常用的评估指标
互信息(Mutual Information)是机器学习中常用的一种评估指标,特别是在无监督学习和聚类分析中。它用于衡量两个随机变量之间的相关性或相似性。 定义 给定两个随机变量X和Y,它们的互信息I(X;Y)定义如下: 其中&…...
SpringCloud(18)之Sleuth +Zipkin链路追踪
一、Zipkin介绍 Zipkin是一个开放源代码分布式的跟踪系统,它可以帮助收集服务的时间数据,以解决微服务架构中的延迟问 题,包括数据的收集、存储、查找和展现。每个服务向zipkin报告计时数据,zipkin会根据调用关系通 过Zipkin UI…...
GVA快速使用
1. clone 代码, 使用goland打开Server目录, 使用vsc打开前端web目录,运行后端,前端 gin-vue-admin后台管理系统 - 知乎 (zhihu.com) 2.了解端口配置 参考, 基于Go的后台管理框架Gin-vue-admin_go vue admin-CSDN博客…...
Linux文本处理三剑客:awk(内置函数详解笔记)
Linux系统中,AWK 是一个非常强大的文本处理工具,它的内置函数使得对文本数据进行处理更加高效和便捷。 本文将介绍 AWK 内置函数的几种主要类型: 算数函数字符串函数时间函数位操作函数其他常用函数 我们将使用一个示例文本文件来演示这些函…...
C++调用lua函数
C 调用Lua全局变量(普通) lua_getglobal(lua, "width");int width lua_tointeger(lua,-1);lua_pop(lua,1);std::cout << width << std::endl;lua_close(lua); 这几行代码要放到lua_pcall(lua, 0,0,0);之后才可以. C给lua传递变量 lua_pushstring(lua, …...
java找工作之Mybatis(入门及xml配置相关)
Mybatis 学习Mybatis就要学会查看官网,官网地址如下:<MyBatis中文网 > 1、简介 1.1什么是Mybatis MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取…...
如何保证 HTTPS 证书的有效性?
随着互联网的蓬勃发展,保障用户在网络上的隐私和安全成为至关重要的任务。HTTPS证书,作为一种安全套接字层协议,扮演着网站安全的守护者。 1. 什么是HTTPS 证书? HTTPS(HyperText Transfer Protocol Secureÿ…...
Qt 简约美观的动画 摆钟风格 第十季
😊 今天给大家分享一个摆钟风格的加载动画 😊 效果如下: 最近工作忙起来了 , 后续再分享其他有趣的加载动画吧. 一共三个文件 , 可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <Q…...
Vue 3 中的 Composition API 详解
Vue.js,作为前端领域流行的框架之一,以其响应式数据绑定和组件化开发赢得了广大开发者的喜爱。随着前端技术的不断发展和项目复杂度的增加,Vue 团队推出了 Vue 3,并引入了 Composition API,以更好地满足复杂应用的需求…...
利用Python爬取高德地图全国地铁站点信息
利用Python中的requests库进行地铁站点信息的获取,同时将数据保存在本机excel中 # 首先引入所需要的包 import requests from bs4 import BeautifulSoup import pandas as pd import json# 发送 GET 请求获取网页内容 url http://map.amap.com/subway/index.html response r…...
Vue 3 中的 Teleport 特性详解
引言 在 Vue 3 中,引入了一个名为 Teleport 的新特性。这个特性允许开发者将组件的子组件“传送”到 DOM 中的任意位置,而不仅仅是它们的直接父级内部。这一功能在处理如模态框、弹出菜单、提示框等需要从其原始位置在视觉上移动到其他地方的用户界面元…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
