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

软件测试基础理论学习-软件测试方法论

软件测试方法论

软件测试的方法应该建立在不同的软件测试类型上,不同的测试类型会存在不同的方法。本文以软件测试中常见的黑盒测试为例,简述常见软件测试方法。

黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表驱动法、正交试验设计法、场景法、功能分解法、功能图法、错误推测法等。

等价类划分法

等价类划分法就是把需要测试的软件的输入值(输入域)划分为若干部分(子集或等价类),然后在这若干部分中取出少量的数据作为测试数据,每一类的代表性数据在测试中的作用等价于这一类中的其他值。

例如:输入值是学生成绩,范围是0~100,那么对于这个学生成绩的等价类就可以按照如下规则划分

在针对上述的方法,从这些等价类中取出部分少量数据作为测试数据,就可以设计出三个测试用例:

  1. 输入成绩60(有效等价类),期待成功

  2. 输入成绩-10(无效等价类1),期待失败

  3. 输入成绩120(无效等价类2),期待失败

采用等价类划分法设计的这三条用例的结果,就可以作为整个输入值(0~100)的测试结果。

但是实际情况中,并不会采用单一的测试方法来对测试结果进行判断,会采用许多方法,做一个综合的判断。

边界值分析法

边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。是作为对等价类划分法的补充,其测试用例来自等价类的边界。

很多错误是发生在输入或输出范围的边界上,而不是中间区域。因此针对各种边界情况设计测试用例,可以查出更多的错误。

例如针对上述学生成绩的例子,就可以得到一些特殊的边界值用例:

  1. 输入成绩-1

  2. 输入成绩0

  3. 输入成绩1

  4. 输入成绩99

  5. 输入成绩100

  6. 输入成绩101

这几个数值都属于边界条件值。

因果图法

因果图法是一种利用图解分析输入与输出的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。

等价类划分法和边界值分析法都是着重考虑输入条件,但没有考虑输入条件的组合以及制约关系。如果在测试时必须考虑输入条件的各种组合,那组合的数目可能是天文数字,所以必须考虑采用一种合适的方法对条件组合进行分析,简化。最终目的是用最少的测试用例覆盖最全面的场景。

因果图中的四个基本符号

因果图中的基本符号有四种,分别是恒等 (—) 、或 (~) 、与 (V) 、非(^)。

  • 恒等:原因和结果都只能取 2 个值,1 代表条件成立,0 代表条件不成立。恒等相当于原因成立,则结果出现;若原因不成立,则结果也不出现。恒等关系“—”来表示。

  • 非:原因和结果相反。若原因成立,则结果不出现;若原因不成立,则结果出现。非的关系用 “ ~ ” 表示。

  • 或:有多个原因。若几个原因中有一个成立,则结果出现;若几个原因都不成立,则结果不出现。或的关系用 “ V ” 来表示。

  • 与:有多个原因。只有几个原因都成立,结果才或出现;若其中一个原因不成立,则结果不出现。与的关系用 “ ^ ” 来表示。

因果图中的四种基本约束条件

因果图中四种基本约束条件分别是:互斥、包含、唯一、要求。

  • 互斥 E:a、b、c 只能有一个成立,但是可以都不成立。

  • 包含 I:a、b、c 中至少有一个成立。可以多选但不能不选。

  • 唯一 O:a、b、c 有且仅有一个为 1。也就是说多个原因中有且只有一个成立。

  • 要求 R:如果 a 成立,则要求 b 必须也成立,其他的不做约束。一个出现,另一个也一定出现

因果图法基本步骤

  1. 找出所有的原因,原因即输入条件或输入条件的等价类。

  2. 找出所有的结果,结果即输出条件。

  3. 明确所有输入条件之间的制约关系以及组合关系,判断条件是否可以组合。

  4. 明确所有输出条件之间的制约关系以及组合关系,判断结果是否可以同时输出。

  5. 找出不同输入条件组合会产生哪些输出结果。

  6. 将因果图转换成判定表或决策树。

  7. 根据判定表或决策表中每一列表示的情况设计测试用例。

实例

需求:交通一卡通自动充值软件系统。系统只接收 50 或 100 元纸币,一次只能使用一张纸币,一次的充值金额只能为 50 或 100 元。

第一步:找出所有的原因,原因即输入条件或输入条件的等价类

明确输入的条件为:

  1. 选择投币 50 元

  2. 选择投币 100 元

  3. 选择充值 50 元

  4. 选择充值 100 元

第二步:找出所有的结果,结果即输出条件

明确输出的结果为:

a.完成充值、退卡

b.提示充值成功

c.找零

d.提示错误

第三步:明确所有输入条件之间的制约关系以及组合关系,判断条件是否可以组合。

上文的输入条件:

  1. 选择投币 50 元

  2. 选择投币 100 元

  3. 选择充值 50 元

  4. 选择充值 100 元

分析得到的输入条件的因果图:

其中,输入条件的1和2因为每次只能使用一张纸币的限制,所以是互斥关系。3和4同理。

可以组合的输入条件:

  1. 条件 1 和 3 可以同时成立

  2. 条件 1 和 4 可以同时成立

  3. 条件 2 和 3 可以同时成立

  4. 条件 2 和 4 可以同时成立

  5. 条件 1 2 3 4 可以单独出现

第四步:明确所有输出条件之间的制约关系以及组合关系,判断结果是否可以同时输出

上文输出的结果:

a.完成充值、退卡

b.提示充值成功

c.找零

d.提示错误

分析得到输出条件的因果图:

可以组合的输出结果:

  1. 输出 a 和 b 一定会同时出现(要求)

  2. 输出 a、b、c可以同时出现

  3. 输出 c、d可以同时出现

  4. 输出 d 单独存在。

第五步:找出不同输入条件组合会产生哪些输出结果。

首先,从上文中的可以组合的输入条件进行判断:

  • 条件 1 和 3 可以同时成立,也就是选择投币50和选择充值50,那么就会得到两个结果,也就是完成充值,退卡以及提示充值成功:

  • 条件 1 和 4 可以同时成立,也就是选择投币50和选择充值100,也会得到两个结果,也就是找零以及提示错误,因为投币50不能充值100

  • 条件 2 和 3 可以同时成立,也就是选择投币100和选择充值50,会得到三个结果,完成充值,退卡、提示充值成功以及找零

  • 条件 2 和 4 可以同时成立,也就是选择投币100和选择充值100,会得到两个结果,完成充值退卡以及提示充值成功。

  • 条件 1 2 3 4 可以单独出现

条件1:只投入50,未选择充值金额,会导致退币,充值失败

条件2:只投入100,未选择充值金额,会导致退币,充值失败

条件3:只选择充值50,不投币,会导致充值失败

条件4:只选择充值100,不投币,会导致充值失败

第六步:将因果图转换成判定表或决策树

本图为简略版,具体关于判定表的使用见下文。

第七步:根据判定表或决策表中每一列表示的情况设计测试用例

根据上述表格内容编写测试用例,判定表和因果图已经十分明确了,这里就不过多赘述。

判定表驱动法

在因果图分析法中最后会得出一个判定表,可以看出因果图和判定表是有联系的,一般需要结合起来使用。

因果图是一种分析工具,通过分析最终得到判定表,再通过判定表编写测试用例。在一定情况下也可以直接书写判定表,省略因果图,进而编写测试用例。

判定表的组成

判定表是由条件桩、动作桩、条件项和动作项组成的。条件桩表示可能出现这个问题的所有条件,动作桩表示这个问题的所有输出结果,条件项为条件桩的取值,动作项为条件项的各个取值情况下的输出结果。

判定表设计步骤

设计判定表首先需要列出所有的条件桩和动作桩,确定规则数量,规则数由条件桩确定,规则数 = 条件取值数 ^ 条件数。

依次填入条件项和动作项得到初始判定表。初始判定表会包含冗余的内容,这些内容一般不适合设计测试用例,进一步的简化判定表,合并相似的规则或动作得到一个完整并且简洁的判定表便于最终设计用例。

实例

需求:输入三个正整数a、b、c,分别作为三角形的三条边,判断三条边是否能构成三角形,如果能构成三角形,判断三角形的类型。

确定条件桩

C1:a,b,c 构成三角形?a<b+c、b<a+c、c<a+b

C2:a = b?

C3:a = c?

C4:b = c?


确定动作桩

A1:非三角形

A2:不等边三角形

A3:等腰三角形

A4:等边三角形

A5:不可能


填写表格,确定条件项和动作项 确定规则数 共有四个条件,每个条件的取值为 “ 是 ” 或 “ 否 ”,因此有 2 ^ 4 = 16 条规则。

设计判定表

C1:8 个 0,8 个 1;

C2:4 个 0,4 个 1,4 个 0,4 个 1;

C3:2 个 0,2 个 1,2 个 0,2 个 1,2 个 0,2 个 1,2 个 0,2个1;

C4:0,1,0,1,0,1,0,1,0,1...

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

条件桩

是否三角形?

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

a = b?

0

0

0

0

1

1

1

1

0

0

0

0

1

1

1

1

a = c?

0

0

1

1

0

0

1

1

0

0

1

1

0

0

1

1

b = c?

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

动作桩

非三角形

0

0

0

0

0

0

0

0

不等边三角形

1

等腰三角形

1

1

1

等边三角形

1

1

不可能

1

1

简化判定表

构成三角形的条件如果不满足的话,结果都是非三角形,和下面三个条件无关,这种情况下可以对判定表进行简化。

条件桩

是否三角形?

0

1

1

1

1

1

a = b?

0

0

0

1

1

a = c?

0

0

1

0

1

b = c?

0

1

0

0

1

动作桩

非三角形

1

不等边三角形

1

等腰三角形

1

1

1

等边三角形

1

不可能

设计测试用例时不可能的情况可以排除,非三角形的情况需要考虑每个值取值的不同情况。得出最后的测试用例如下表所示:

正交试验设计法

一般用于在有限的试验次数内尽可能全面地测试系统的不同因素和参数组合情况。个人认为,叫做控制变量法比较通俗易懂。

例:我们正在测试一款电子产品的显示屏参数。我们想要测试不同的因素,如亮度、对比度和色彩饱和度。则:

对于亮度、对比度和色彩饱和度这三个因素,我们可以通过正交试验设计法生成以下试验表:

试验1:亮度高、对比度低、色彩饱和度低 试验2:亮度低、对比度高、色彩饱和度低 试验3:亮度低、对比度低、色彩饱和度高

场景法

其实,对于最正规(教学标准)来讲,场景法应该有如下步骤:

  1. 识别关键业务流程。需要确定系统的主要功能模块或业务流程,例如:在线购物中的商品浏览、加入购物车、结算支付、订单确认等。

  2. 构建基本流与备选流:

    • 基本流(Basic Flow)是指按照正常预期顺序执行的一系列步骤,即最理想且常见的操作路径。

    • 备选流(Alternative Flow)则涵盖了各种异常处理和分支逻辑,如登录失败、商品库存不足、支付过程中取消交易等。

  3. 创建详细场景:

    • 对于每个关键流程,设计详细的场景描述,包括输入数据、触发事件、系统响应以及预期结果。

    • 场景通常包含一系列动作序列,这些动作代表了从开始到结束的一个完整操作过程。

  4. 编写测试用例:

    • 根据场景设计出具体的测试用例,确保覆盖基本流和所有重要的备选流。

    • 测试用例应明确指出测试目标、前置条件、操作步骤、预期结果以及可能出现的边界条件或异常处理。

  5. 执行与验证。执行设计好的测试用例,与预期结果进行比较。

实例

需求:使用场景法对在线银行系统“转账”功能进行测试

按照上述给的标准步骤,则:

步骤1:识别关键业务流程

转账流程有以下业务:

  • 用户登录(在线银行需要登录)

  • 输入转账金额和收款人信息

  • 确认转账信息并提交

  • 完成转账操作,显示转账结果

步骤2:构建基本流与备选流
  • 基本流

    • 用户成功登录后选择转账功能

    • 输入正确的转账金额(满足最小转账额度且不超过账户余额)和有效正确的收款人账号信息

    • 系统验证转账信息无误,扣款成功,向收款人账号转入资金,完成转账并展示转账成功的提示

  • 备选流

    • 用户未登录或登录失败(账密错误 / 验证码错误 / 手机号错误等情况)

    • 转账金额低于最低限额或超过账户余额

    • 收款人账号信息无效或不存在

    • 在线交易时网络连接中断或服务器故障

    • 转账过程中账户余额被其他交易占用导致转账失败

    • 用户在最后确认前取消转账操作

步骤3:创建详细场景
  • 场景一(基本流):用户A有足够的资金从其账户向用户B成功转账

  • 场景二(备选流):用户A尝试转账但输入的金额低于银行规定的最低转账额度,系统应给出错误提示

  • 场景三(备选流):用户A的账户余额不足进行转账操作,系统提示账户余额不足以完成转账

  • 场景四(备选流):用户A填写的收款人账号不存在,系统需验证并反馈错误信息

  • 场景五(备选流):在转账过程中由于网络问题,交易未能及时完成,系统需要处理该异常情况,并在恢复连接后提供重新发起交易的选项

步骤4:编写测试用例

上述详细场景已经很明确了,关于具体的测试用例编写方法,会在后文详细讲解。

步骤5:执行与验证

执行上述测试用例,将实际结果和预期比较,若发现问题则需上报。

功能分解法

功能分解法在软件测试中,通常用来将一个复杂的系统或功能模块拆分成一系列更小、更易于理解和处理的子功能。

例:现在需要测试一个简单的用户登录系统的功能,按照功能分解的思维对这个功能进行细分。

一级功能分解:

  1. 用户身份验证功能:

    • 输入验证(检查用户名是否存在、密码格式是否正确等)

    • 数据库查询(根据用户名查找对应的用户记录 / 检查后台的SQL是否有误)

    • 密码匹配(比较输入的密码与数据库存储的密码是否一致)

    • 会话管理(成功登录后创建用户会话 / 用户欢迎页,更新最后登录时间等信息)

  2. 用户界面展示与交互:

    • 登录页面布局设计(包含用户名和密码输入框、登录按钮等)

    • 错误提示反馈(如用户名不存在、密码错误等)

  3. 权限控制:

    • 不同角色权限分配(管理员、普通用户等拥有不同的访问权限)

    • 登录后的权限加载(登录成功后加载相应角色的权限设置)

二级功能分解(这里以一级功能分解中的“用户身份验证功能”为例):

  • 输入验证:

    • 用户名有效性验证(长度、字符类型等)

    • 密码有效性验证(长度、复杂度要求等)

  • 数据库操作:

    • 连接数据库服务,最大连接数?一直占用不释放会如何处理连接池?

    • 执行SQL查询语句

    • 处理查询结果

    • SQL优化是否需要考虑?例如查询数据时间过长是否使用了让索引失效的SQL写法等

  • 密码安全性处理:

    • 密码加密算法应用

    • 加密后的密码比对,是否容易被破解,泄漏?

    • 对称加密、非对称加密、哈希加密等是否需要验证?

通过这样的逐级分解,每个小的功能块都可以独立进行测试,从而提高测试覆盖率,也能够对这个软件进行一个整体的把握。

功能图法

功能图法是一种利用图形化工具来描述和分析系统的功能结构以及状态转换。

这种方法通过创建功能模型和状态迁移图,能够更好的理解系统的动态行为,并据此生成全面且有效的测试用例。

具体步骤

  1. 分析需求文档:了解系统的所有功能和业务规则

  2. 构建功能模型:将系统分解为多个功能模块并绘制功能关系图

  3. 绘制状态迁移图:对于具有多种状态和复杂交互逻辑的功能,定义所有可能的状态及状态间的迁移条件

  4. 生成测试用例:

    • 对于功能模型,针对每个功能模块设计不同的输入和预期输出,确保覆盖所有重要的功能路径。

    • 对于状态迁移图,依据每个状态及其变迁,确定需要测试的初始状态、中间状态和最终状态组合,包括正常情况下的状态迁移以及异常或边界条件下的状态变化

  5. 评审与优化:检查生成的测试用例是否覆盖了所有关键功能和状态迁移路径,对遗漏或冗余的部分进行补充或删除

错误推断法

基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。

  1. 特殊值测试:为了检查程序是否能够正确处理特殊值,可以选择一些边界值、极大值、极小值、空值等来进行测试。例如,对于一个计算器功能的程序,可以输入0作为入参,检查程序是否能够正确处理零作为除数的错误。

  2. 非法输入测试:故意输入一些非法的数据类型或格式,以检查程序是否能够正确处理并给出相应的错误提示。例如,对于一个要求输入数字的文本框,可以尝试输入字母、特殊字符等非法字符,检查程序是否能够正确处理错误。

  3. 历史数据测试:使用曾经出现过问题的数据来进行测试,以检查程序是否已经修复了之前的错误。例如,对于一个用户登录系统,可以使用曾经导致登录失败的用户名和密码进行测试,观察是否能够正常登录。

  4. 极端条件测试:模拟极端条件下的输入,如极大或极小的数值、极端的操作等,以检查程序是否能够正确处理并给出正确的结果。例如,对于一个计算运动轨迹的程序,可以输入极大或极小的速度和加速度进行测试,观察程序的计算结果是否合理。

这些都是容易发生错误的情况,可选择这些情况下的例子作为测试用例。

相关文章:

软件测试基础理论学习-软件测试方法论

软件测试方法论 软件测试的方法应该建立在不同的软件测试类型上&#xff0c;不同的测试类型会存在不同的方法。本文以软件测试中常见的黑盒测试为例&#xff0c;简述常见软件测试方法。 黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表驱动法、正交试…...

Unity 关于点击不同物品移动并触发不同事件

关于点击不同物品触发不同事件 可以实现在界面中点击不同的物体&#xff0c;移动到物品附近位置&#xff0c;然后触发对应的事件。 首先建立一个公共管理的类&#xff1a; public class InteractionObject : MonoBehaviour {private NavMeshAgent PlayerAgent;private bool …...

c++IO库详细介绍

文章目录 前言c IO 类简介1. iostream库iostream 类标准IO对象 2. fstream库fstream 类 3. stringstream库stringstream 类 格式化和控制错误处理 IO对象无拷贝或赋值IO条件状态主要的状态标志检查流状态控制流状态示例 管理输出缓冲主要操作示例 文件输入输出使用文件流对象示…...

海外静态IP和动态IP有什么区别?推荐哪种?

什么是静态ip、动态ip&#xff0c;二者有什么区别&#xff1f;哪种好&#xff1f;关于这个问题&#xff0c;不难发现&#xff0c;在知道、知乎上面的解释有很多&#xff0c;但据小编的发现&#xff0c;这些回答都是关于静态ip和动态ip的专业术语解释&#xff0c;普通非专业人事…...

OpenHarmony从入门到放弃(一)

OpenHarmony从入门到放弃&#xff08;二&#xff09; 一、OpenHarmony的基本概念和特性 OpenHarmony是由开放原子开源基金会孵化及运营的开源项目&#xff0c;其目标是构建一个面向全场景、全连接、全智能的时代的智能终端设备操作系统。 分布式架构 OpenHarmony采用分布式…...

Unity3D UGUI图集打包与动态使用(TexturePacker)

制作图集的好处&#xff1a; 众所周知CPU是用来处理游戏的逻辑运算的&#xff0c;而GPU是用来处理游戏中图像的。在GPU中&#xff0c;我们要绘制一个图像需要提交图片&#xff08;纹理&#xff09;到显存&#xff0c;然后再进行绘制&#xff08;在这个过程中会产生一次DrawCall…...

java maven项目添加oracle jdbc的依赖

一般添加依赖是直接在pom.xml中添加配置即可&#xff0c;Maven会自动获取对应的jar包&#xff0c;但是oracle驱动依赖添加后会显示红色&#xff0c;代表找不到依赖项&#xff0c;是因为Oracle授权问题&#xff0c;Maven3不提供Oracle JDBC driver&#xff0c;为了在Maven项目中…...

【UEFI基础】EDK网络框架(环境配置)

环境配置 为了能够让使用测试BIOS的QEMU与主机&#xff08;就是指普通的Windows系统&#xff0c;我们使用它来编译BIOS和启动QEMU虚拟机&#xff09;通过网络连接&#xff0c;需要额外的配置。 首先是下载和安装OpenVPN&#xff08;这里安装的是OpenVPN-2.5.5-I601-amd64.msi…...

K8S学习指南(60)-K8S源代码走读之API-Server

文章目录 API Server 的代码结构API Server 的核心逻辑1. 请求处理流程1.1 HTTP 请求处理1.2 认证和授权1.3 API 版本处理1.4 资源路由1.5 资源处理1.6 响应生成 2. 存储层2.1 存储接口定义2.2 存储实现 二次开发扩展点1. 插件机制1.1 插件注册1.2 插件实现 2. 自定义资源定义&…...

基于深度学习的交通标志图像分类识别系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的交通标志图像识别系统。采用TensorFlow和Keras框架&#xff0c;利用卷积神经网络&#xff08;CNN&#xff09;进行模型训练和预测&#xff0c;并引入VGG16迁移学习…...

使用uni-app editor富文本组件设置富文本内容及解决@Ready先于onload执行,无法获取后端接口数据的问题

开始使用富文本组件editor时&#xff0c;不知如何调用相关API设置富文本内容和获取内容&#xff0c;本文将举例详解 目录 一.了解editor组件的常用属性及相关API 1.属性常用说明 2.富文本相关API说明 1&#xff09;editorContext 2&#xff09; editorContext.setContents…...

Spring高手之路-Spring事务的传播机制(行为、特性)

目录 含义 七种事务传播机制 1.REQUIRED&#xff08;默认&#xff09; 2.REQUIRES_NEW 3.SUPPORTS 4.NOT_SUPPORTED 5.MANDATORY 6.NEVER 7.NESTED 含义 Spring事务的传播机制是指在多个事务方法相互调用时&#xff0c;如何处理这些事务的传播行为。对应七种事务传播行为…...

简易机器学习笔记(八)关于经典的图像分类问题-常见经典神经网络LeNet

前言 图像分类是根据图像的语义信息对不同类别图像进行区分&#xff0c;是计算机视觉的核心&#xff0c;是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像分类在许多领域都有着广泛的应用&#xff0c;如&#xff1a;安防领域的人脸识别和…...

pytest conftest通过fixture实现变量共享

conftest.py scope"module" 只对当前执行的python文件 作用 pytest.fixture(scope"module") def global_variable():my_dict {}yield my_dict test_case7.py import pytestlist1 []def test_case001(global_variable):data1 123global_variable.u…...

系列五、搭建Naco(集群版)

一、搭建Naco&#xff08;集群版&#xff09; 1.1、前置说明 &#xff08;1&#xff09;64位Red Hat7 Linux 系统&#xff1b; &#xff08;2&#xff09;64位JDK1.8&#xff1b;备注&#xff1a;如果没有安装JDK&#xff0c;请参考【系列二、Linux中安装JDK】 &#xff08;3&…...

JavaScript中alert、prompt 和 confirm区别及使用【通俗易懂】

✨前言✨   本篇文章主要在于&#xff0c;让我们看几个与用户交互的函数&#xff1a;alert&#xff0c;prompt 和confirm的使用及区别 &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&…...

【GoLang入门教程】Go语言几种标准库介绍(四)

编程语言的未来&#xff1f; 文章目录 编程语言的未来&#xff1f;前言几种库fmt库 (格式化操作)关键函数&#xff1a;示例 Go库标准库第三方库示例 html库(HTML 转义及模板系统)主要功能&#xff1a;示例 总结专栏集锦写在最后 前言 上一篇&#xff0c;我们介绍了debug、enco…...

面试算法:快速排序

题目 快速排序是一种非常高效的算法&#xff0c;从其名字可以看出这种排序算法最大的特点就是快。当表现良好时&#xff0c;快速排序的速度比其他主要对手&#xff08;如归并排序&#xff09;快2&#xff5e;3倍。 分析 快速排序的基本思想是分治法&#xff0c;排序过程如下…...

航空业数字化展翅高飞,开源网安专业服务保驾护航

​某知名航空公司是中国首批民营航空公司之一&#xff0c;运营国内外航线200多条&#xff0c;也是国内民航最高客座率的航空公司之一。在数字化发展中&#xff0c;该航空公司以数据驱动决策&#xff0c;通过精细化管理、数字创新和模式优化等方式&#xff0c;实现了精准营销和个…...

SpringBoot学习(三)-员工管理系统开发(重在理解)

注&#xff1a;此为笔者学习狂神说SpringBoot的笔记&#xff0c;其中包含个人的笔记和理解&#xff0c;仅做学习笔记之用&#xff0c;更多详细资讯请出门左拐B站&#xff1a;狂神说!!! 本文是基于狂神老师SpringBoot教程中的员工管理系统从0到1的实践和理解。该系统应用SpringB…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...