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

软件工程 考研复试常考知识点总结

软件工程

什么是软件工程,这门课讲的什么?

软件工程就是把软件的开发、运行、维护的各个阶段进行系统化规范化的过程,也就是把工程化的方法运用在软件技术之中,以构建和维护高质量的软件。

进一步,什么是工程化思想?

我认为工程化的思想核心就是标准化和文档化,要建立一个标准,明确把一个大项目的开发分成了哪些小阶段,确定每个阶段应该利用什么工具、完成什么任务,然后就是要产生对应的规范文档。

进一步,软件工程包含哪几个阶段?

见如下

软件生命/生存周期(SDLC)

总体上分为:软件定义、软件开发和软件运行与维护阶段

具体可分为:两分析(可行性分析和需求分析)、两设计(概要设计和详细设计)、开发(编码和测试)、运维(运行和维护)

1、可行性研究(问题定义、可行性研究)

内容:从经济、技术、人员各个方面分析项目可行性,并做风险预估

文档:可行性研究报告

图表:业务流程图、系统流程图

2、需求分析

内容:收集用户的需求,并把需求转化成对软件系统(功能、性能、操作上的)完整、准确的描述,用于确定软件规格

文档:需求分析说明书(开发依据+验收依据)

图表:数据流图+数据字典(结构化开发)或者用例图模型(面向对象)

3、软件设计(概要设计和详细设计)

1)概要设计(图最多)

内容:对系统模块的设计和模块之间接口的设计

文档:概要设计说明书

图表:功能结构图(体现模块)、系统流程图(整个系统)类图、活动图、状态图、时序图、ER图

2)详细设计

内容:对软件模块内的算法和数据结构等细节做出设计

文档:详细设计规格说明书

图表:程序流程图(各个模块内)

4、程序编码

内容:开发人员按照“详细设计说明书”把软件进行编码实现

5、软件测试

内容:对软件的各个部分进行测试,包括单元测试、集成测试、系统测试

单元测试:对软件各个模块单独进行测试

集成测试:把各个模块集成在一起测试,主要是测试模块间的接口是否正确

系统测试:集成度最高的测试,把模块集成成完整的系统,在真实的系统运行的环境下测试,包括软件硬件之间的配合

6、运行与维护

内容:运行就是正式上线的过程,然后软件上线后可能会出现各种各样的问题,需要长期维护

CMM软件能力成熟度模型是什么?

一种评价企业开发的软件开发能力的模型,他将软件成熟度分成了五个层次,分别是初始级、可重复级、定义级、管理级、优化级。

初始级:软件过程基本是无序的,进度、预算、质量都不可预测,成功不可复现,任何项目都拥有这一级别

可重复级:有了基本的项目管理过程,项目的成功可以在未来重现,能够将项目经验用于未来【可复现==可重复】

定义级:项目拥有文档化、标准化的软件过程。用于未来的成果经验经过标准化【标准化==可以作为定义了】

管理级:软件过程和产品质量得到定量的估计和控制,能够按时、保质保量的完成。【管理==项目可控】

优化级别:能将软件过程涉及到的技术、方法作为示范,加入企业标准中,达到优化企业标准的效果【好到可以优化别人了】

结构化分析和结构化设计?

在这里插入图片描述

软件开发模型?

瀑布模型——阶段性的过程模型,严格按照各个阶段顺序进行开发,向瀑布一样自上而下,不能跨越阶段开发

特点:开发规范但灵活性差

适用场景:需求稳定、编程人员有丰富经验的项目

原型模型——项目前期,快速搭建出项目的原型,用来获取用户的需求,解决了需求模糊的问题

特点:快速构建、方便修改

适用场景:用户需求不明确;对现有产品进行升级时,即有模板;开发人员对技术不够熟悉

增量模型——将软件系统按功能划分成一个个构件,分批次、按构件提交给用户,直到全部构件提交完成

特点:可以灵活安排开发顺序、功能容易拓展

适用场景:软件系统可以模块化、支持分批次交付

螺旋模型——包含分析分析和风险规避,花大量成本去做风险管理

特点:安全性高、风险管理成本高

适用场景:软件项目风险大的大型项目

喷泉模型——最主要的特点就是迭代、反复,每个阶段建立在前一个阶段之上,而且各个阶段可以相互折叠,多次反复,就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。

适用场景:适用于面向对象软件开发,因为对象的分析和设计是可以迭代的

RUP统一软件开发过程

是一种基于面向对象的软件开发过程,结合了瀑布模型和迭代思想。

四个阶段:

  • 初始阶段(Inception):分析业务风险
  • 细化阶段(Elaboration):对体系结构作出决策,包括其范围、主要功能和诸如性能等非功能需求
  • 构造阶段(Construction):把各个功能模块集成成产品,并对功能做测试
  • 交付阶段(Transition):交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。

六个最佳实践:

(1)迭代式开发。
(2)需求管理。
(3)使用以组件为中心的软件架构。
(4)可视化软件建模。
(5)验证软件质量。
(6)控制软件变更。

其它模型:

边做边改模型——在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户满意为止。

演化/迭代模型——用户先给出核心需求,实现后再向用户询问意见,再修改,再询问,直到演化成最终的软件

敏捷开发模型——为了适应快速变化的需求,需要频繁地更新软件版本的一种开发模型,需要团队有很好的团队协作能力

什么是软件危机?

定义:软件危机泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题(定义)。主要表现为:开发成本难以控制、开发进度难以预测、软件质量无法保证、软件产品难以维护、缺少文档等方面(特点)。

原因:软件规模越来越大、复杂度越来越高(外部原因)、用户需求不明确、缺乏正确的理论指导(内部原因)

解决方法:使用更高效的软件工具,并且开始学习软件项目管理理论,将工程化思想用于软件技术当中,规范的开发流程和标准。

什么是UML,介绍下常用UML图?

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,UML是面向对象设计的建模工具,独立于任何具体程序设计语言。

用例图:用于描述系统参与者及与系统用例之间的交互关系。它展示了参与者可以使用系统执行哪些功能

类图:描述系统中的类之间的关系,是一种静态模型类型。

对象图:与类图相似,它是类图的实例,显示类的多个对象之间的关系。

活动图:描述系统用例中涉及的活动及其顺序,有助于识别并行活动。

状态图:描述系统对象的所有可能状态及其状态间的转移条件。它帮助理解对象的行为和生命周期。

顺序图:显示参与者与系统对象之间的一系列在时间上的顺序交互

耦合级别与内聚级别

耦合是指模块与模块之间的紧密程度,内聚是指一个模块内的紧密程度。

img

最强:内容耦合,最弱:非直接耦合

非直接耦合:两个模块之间没有直接关系,只是都被主模块调用

数据耦合:指两个模块之间有调用关系,传递的是简单数值

标记耦合:是指两个模块之间有调用关系,传递的是数据结构

控制耦合:是指两个模块之间有调用关系,传递的是控制变量,比如标记值,被调模块通过该控制变量的值有选择地执行块内某个功能。

外部耦合:是指一组模块都访问同一全局简单变量,而且不通过参数表传递全局变量的信息,称之为外部耦合。

公共耦合:一组模块都访问同一全局数据结构

内容耦合:指模块之间有直接数据关系,可以直接使用另一个模块的数和代码,

img

最强:功能内聚,最弱:偶然内聚

功能内聚:指模块内所有元素共同完成一个功能,缺一不可。

顺序内聚:是指一个模块中各个元素必须顺序执行

通信内聚:是指一个模块的所有元素都在同一数据结构上操作(通信==有公共数据结构)

过程内聚:是指模块有多个需要按一定的步骤一次完成的功能。

时间内聚:是指一个模块完成的功能必须在同一时间内执行,称之为时间内聚。

逻辑内聚:是指模块内有多个逻辑相似的功能,通过参数确定该模块完成哪一个功能。

偶然内聚:是指模块中的机能只是刚好放在一起

什么是软件测试?

就是在特定的环境下,对软件的实际输出和预计输出做比较的过程,其目的是减少程序的错误,防止后期出现大量返工,减慢工作进度。软件测试从整体上可分为黑盒测试和白盒测试,从测试的阶段/范围上可分为单元测试、集成测试、系统测试、验收测试,从测试的指标上可以分为功能性测试、安全性测试、稳定性测试、性能测试、稳定性测试、压力测试等等。

测试分类有哪些?

按照测试的阶段/范围可分为:

单元测试:对软件各个模块单独进行测试

集成测试:把各个模块集成在一起测试,主要是测试模块间的接口是否正确

系统测试:集成度最高的测试,把模块集成成完整的系统,在真实的系统运行的环境下测试,包括软件硬件之间的配合

验收测试:是一种以用户为主体的测试,让用户参与测试用例设计,根据用户的参与程度,分为α测试和β测试

  • α测试:开发、测试人员和用户都在场,用户在在开发环境下进行的测试,有专业人员进行记录,测试环境可控
  • β测试:测试人员不在场,直接发布测试版本给用户体验,然后根据用户的反馈进行改进的测试,也就是我们常说的某某软件测试版

回归测试:回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。

软件测试方法有哪些?

整体来说分为黑盒测试和白盒测试。

黑盒测试:从用户的角度出发,把测试对象看出一个黑盒子,不用关心里面的结构,只需要关注程序的输入输出

黑盒测试技术包括:边界值法、等价类划分、错误推断

白盒测试:也叫结构化测试,把测试对象看成一个透明的盒子,要知道它的内部细节和逻辑结构,然后根据内部逻辑设置测试方法

按覆盖程度可以分为:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、

如何选用两者:

  • 模块较小,内聚程度高,适合使用白盒测试,减少错误。

  • 模块较大,逻辑复杂,测试代价较大的,适合使用黑盒测试,提高效率。

什么是测试用例?由于什么组成,举例说明?

测试用例:就是用于测试的一组输入信息,主要包括测试环境输入值以及预期输出,体现了一组测试方案

组成:测试目标、测试环境、输入数据、预期结果、测试脚本

等价类划分和边界值法?

等价类划分:思想就是就是用少量的有代表性的数据进行测试,尽量减少测试用例的次数。

基本步骤:

  1. 根据输入数据的各个规则,划分有效等价类和无效等价类。比如规定输入的是-99到900之间的数字,有效等价类就是这个范围内的数字,无效等价类就有很多,比如范围之上/范围之下的数字、输入为空、输入带有其它字符等等。
  2. 细分有效等价类和无效等价类,对每个等价类编号,形成表格。
  3. **设计测试用例,**在测试有效等价类的时候,可以尽量覆盖多的测试用例。但是对于无效等价类,每一测试数据只能覆盖一个无效等价类,否则分辨不了错误的原因。

边界值法::因为程序错误一般都是在边界上出现的,所以边界值法就是对输入**【边界】、【边界内】以及【边界周围】**进行测试。

比如说要求输入的数字范围是0-20,那不仅要测试0和20,0周围的1和-1,20周围的19和21都要测试,在0到20内也要测试一个值。边界值法是对等价类划分的一种补充,可以和等价类划分一起使用。

白盒测试的覆盖率要求有哪些?

语句覆盖:程序中每个语句至少都能被执行一次

判定覆盖:每个判定结果取各种值

条件覆盖:判定中的每个条件取各种值

判定/条件:判定中每个条件取各种值+每个判定结果取各种值

条件组合覆盖:每个条件的各种可能排列组合可能的取值。

路径覆盖:程序中每条路劲都需要覆盖,不一定覆盖条件组合

相关文章:

软件工程 考研复试常考知识点总结

软件工程 什么是软件工程,这门课讲的什么? 软件工程就是把软件的开发、运行、维护的各个阶段进行系统化和规范化的过程,也就是把工程化的方法运用在软件技术之中,以构建和维护高质量的软件。 进一步,什么是工程化思想…...

Docker+Uwsgi+Nginx部署Django项目保姆式教程

之前,我和大家分享了在docker中使用uwsgi部署django项目的教程。这次,为大家带来的是使用DockerUwsgiNginx部署Django项目。废话不多说,我们开干。 步骤1:使用命令创建一个django项目 我这里python版本使用的是3.9.x 首先&#…...

[openGL] 高级光照-Gamma矫正

目录 一 Gamma是什么? 二 感知光度和物理光度 2.1 与Gamma的关系 2.3 存在问题和弊端? 三 Gamma矫正(逆Gamma) 3.1 Gamma矫正的两种方法 3.2 sRGB空间 3.3 重复校正 3.3.1 在着色器中处理重复校正 3.3.2 在加载纹理时就重复校正 3.3.3 校正前后效果 本章节Qt源码点…...

Prometheus+Grafana监控K8S集群(基于K8S环境部署)

目录 一.环境信息二.部署提前工作三.部署Prometheus监控系统四.部署Node_exporter组件五.部署Kube_state_metrics组件六.部署Grafana可视化平台七.Grafana接入Prometheus数据八.Grafana添加监控模板九.拓展 一.环境信息 1.服务器及k8s版本信息 IP地址主机名称角色版本192.168…...

[opencv]VideoWriter写出fourcc格式

fourcc支持的格式 fourcc全名Four-Character Codes,四字符代码,该编码由四个字符组成 cv2.VideoWriter_fourcc(O,O,O,O) cv2.VideoWriter_fourcc(*OOOO) 通常写法有上述两种形式,O代表一个字符,通常有 支持avi格式的有&#…...

软考中级网络工程师-网络技术

下列命令片段含义是( )。 system-view [HUAWEI] observe-port 1 interface gigabitethernet 0/0/1 [HUAWEI] interface gigabitethernet 0/0/2 [HUAWEI-GigabitEthernet0/0/2] port-mirroring to observe-port 1 inbound A 配置端口镜像 B 配置链路聚合 C 配置逻辑接口 D 配置访…...

cmake基础教程(12)函数和宏用法

参考: https://cmake.org/cmake/help/latest/command/function.html https://cmake.org/cmake/help/latest/command/macro.html#command:macro 文章目录 函数宏在CMake中,宏(macro)和函数(function)命令用于封装重复的任务,这些任务可能分散在你的CMakeLists文件中。一…...

SQLite的PRAGMA 声明(二十三)

返回:SQLite—系列文章目录 上一篇:SQLite从出生到现在(发布历史记录)(二十二) 下一篇:用于 SQLite 的异步 I/O 模块(二十四) PRAGMA 语句是特定于 SQLite 的 SQL 扩…...

Qt 实战(1)Qt 概述

一、Qt概述 1、什么是Qt? Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,也可以开发不带界面的…...

【练习】二分查找

1、704 &#xff08;1&#xff09;题目描述 &#xff08;2&#xff09;代码实现 package com.hh.practice.leetcode.array.demo_02;public class BinarySearch_704 {public int search(int[] nums, int target) {int i 0,j nums.length -1;while (i < j){int mid (ij) &…...

FactoryTalk View 上位机画面版本升级,还原和备份

FactoryTalk View 上位机画面版本升级,还原和备份 1 归档文件(尾缀.apa)升级2 画面文件(尾缀.sed)升级3 提示“目标工程中包含旧的HMI标签报警,FT View 10.0是最后一个......” 解决方法1 归档文件(尾缀.apa)升级 案例是FTVIEW5.0升级到FT VIEW12,需要用FT VIEW 6过渡升…...

【微信小程序】分包

整个小程序所有分包大小不超过 20M&#xff08;开通虚拟支付后的小游戏不超过30M&#xff09; 单个分包/主包大小不能超过 2M在小程序启动时&#xff0c;默认会下载主包并启动主包内页面&#xff0c;当用户进入分包内某个页面时&#xff0c;客户端会把对应分包下载下来&#xf…...

Golang教程六(单元测试,反射,网络编程,部署)

目录 一、单元测试 单元测试 子测试 TestMain 二、反射 类型判断 通过反射获取值 通过反射修改值 结构体反射 利用tag修改结构体的某些值 调用结构体方法 orm的一个小案例 对反射的一些建议 三、网络编程 socket编程 websocket编程 四、部署 打包命令 交叉编译…...

mybatis进阶篇-执行CRUD操作-typeAliases别名-接口绑定

目录结构 1.创建数据表&#xff08;book&#xff09; # 创建book表 create table book(id int auto_increment primary key,name varchar(255) ,price double ,num int );2.mybatis.xml配置文件 <?xml version"1.0" encoding"UTF-8" ?> <!DOC…...

C#面:泛型的主要约束和次要约束是什么

在 C# 中&#xff0c;泛型的约束是用来限制泛型类型参数的行为和能力的。 主要约束和次要约束是两种不同的约束方式。 主要约束&#xff08;Primary Constraint&#xff09;&#xff1a; 主要约束指定了泛型类型参数必须满足的最基本的条件&#xff0c;它可以是一个类、一个接…...

Java使用documents4j将word和excel转pdf

pom.xml添加documents4j依赖 <!-- documents4j --> <dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.0.3</version> </dependency> <!-- documents4j 转 wor…...

使用策略模式实现 Spring 分布式和单机限流

我们可以使用策略模式来统一单机限流和分布式限流的实现,提高代码的可扩展性和可维护性。 思路是定义一个 RateLimitStrategy 接口,并分别实现单机限流策略 LocalRateLimitStrategy 和分布式限流策略 DistributedRateLimitStrategy。在 AOP 切面中,根据配置决定使用哪种限流策…...

@CrossOrigin注解解决跨域问题

文章目录 一、什么是跨域二、CrossOrigin注解是干什么用的三、用法 一、什么是跨域 跨域&#xff0c;指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的&#xff0c;是浏览器对JavaScript施加的安全限制。 所谓同源是指&#xff0c;域名&#xff0c;协议&…...

【力扣】45. 跳跃游戏 II

Problem: 45. 跳跃游戏 II 文章目录 问题思路复杂度Code 问题 思路 核心思路&#xff0c;例如nums[i]5&#xff0c;那么最远能跳五步&#xff1b; //那么在这接下来1-5范围内&#xff0c;哪个能让我跳的最远&#xff0c;这个最远指的是 -------------------------------------…...

【Python基础】19.eval函数的使用

eval函数 eval()将字符串转变为有效的表达式来求值并返回对应的结果 基础数据计算 In [1]: eval("1 1") Out[1]: 2字符串重复 In [2]: eval (" * * 10") Out[2]: **********字符串转为列表 In [3]: type(eval("[1,2,3,4,5]")) Out[3]: lis…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...