集成测试最全详解,看完必须懂了

news2024/11/15 21:39:36

什么是集成测试

集成测试(Integration Testing),也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。

集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它最简单的形式是:把两个已经测试过的单元组合成一个组件,测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合为程序的更大部分。方法是测试片段的组合,并最终扩展成进程,将模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。此外,如果程序由多个进程组成,应该成对测试它们,而不是同时测试所有进程。

集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。也就是说,在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元。这一点很重要,因为如果不经过单元测试,那么集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价。

所有的软件项目都不能摆脱系统集成这个阶段。不管采用什么开发模式,具体的开发工作总得从一个一个的软件单元做起,软件单元只有经过集成才能形成一个有机的整体。具体的集成过程可能是显性的也可能是隐性的。只要有集成,总是会出现一些常见问题,工程实践中,几乎不存在软件单元组装过程中不出任何问题的情况。从集成测试需要花费的时间远远超过单元测试,直接从单元测试过渡到系统测试是极不妥当的做法。

测试关注的重点

一些模块虽然能够单独工作,但并不能保证连接起来也能正常的工作,程序在某些局部反映不出来的问题,在全局上很可能暴漏出来,影响功能的实现,因此集成测试应当考虑两大(5个)问题:
1
1、模块间的接口(接口的覆盖率)
(1)在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失。
(2)全局数据结构是否有问题,会不会被异常修改。
2、集成后的功能(参数的传递)
(1)各个子功能组合起来,能否达到预期要求的父功能。
(2)一个模块的功能是否会对另一个模块的功能产生不利的影响。
(3)单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。

集成测试的三个级别

由于集成的力度不同,一般可以把集成测试划分为三个级别:
1、模块内集成测试。
2、子系统内集成测试。
3、子系统间集成测试。

集成测试的模式

1.非渐增测试:先分别测试每个模块,再把所有模块按设计要求一次全部组装起来所要的系统,然后进行整体测试。非渐增式测试时可能发现一大堆错误,为每个错误定位和纠正非常困难,并且在改正一个错误的同时又可能引入新的错误,新旧错误混杂,更难断定出错的原因和位置。非渐增式的方法如:大爆炸集成。

2.渐增测试:逐个把未经测试的模块组装到已经过测试的模块上去进行集成测试,每加入一个新模块进行一次测试,重复此过程直至程序组装完成。渐增式测试有以下组装方法:自顶向下和自底向上。

两者的区别是:
1、非渐增式方法是把单元测试和集成测试分成两个不同的阶段,前一阶段完成模块的单元测试,后一阶段完成集成测试。而渐增式测试则是把单元测试和集成测试结合在一起,同时完成。
2、非渐增式需要更多的工作量,因为每个模块都需要驱动模块和桩模块,而渐增式利用已测试过的模块作为驱动模块或桩模块,因此工作量少。
 3、渐增式可以较早地发现接口间的错误,非渐增式到最后组装的时候才发现。
4、渐增式有利于拍错,发生错误往往和最近新加入的模块有关,而非渐增式发现接口错误推迟到最后,很难判断是哪一部分接口出错。
5、渐增式比较彻底,已测试的模块和新的模块在测试。
6、非渐增式开始可并行测试所有模块,能充分利用人力,对测试大型软件很有意义。

集成测试策略

集成测试策略最主要的有三种:
1、大爆炸集成(Big Bang Integration)。
2、自顶向下集成(Top-Down Integration)。
3、自底向上集成(Bottom-up Integration)。

基于以上三种测试策略,又提出了以下五种集成测试策略,它们都是在上面的三种主要测试策略的基础上进行综合,改进而成的。

1、三明治集成(Sandwich Integration)。
2、基干集成(Backbone Integration)。
3、分层集成(Layers Integration)。
4、基于功能的集成(Function-Based Integration)。
5、基于进度的集成(Schedule-Based Integration)  

大爆炸集成(Big Bang Integration)

(1)概念:大爆炸集成(Big Bang Integration)是属于非渐增式集成(Non-Incremental Integration)的一种方法,也叫一次性组装货整体拼装。该集成把所有组件一次性集合到被测系统中,不考虑组件之间的相互依赖性或者可能存在的风险。
(2)目的:在最短的时间内把系统组装起来,并且通过最少的测试来验证整个系统。
(3)策略:在大爆炸这种集成方法中,首先需要对每个模块进行单元测试,然后把所有单元组装到一起进行测试,最终得到要求的软件系统。
(4)优点:
*在有利的情况下,大爆炸集成可以迅速完成集成测试,并且只要极少数的驱动单元和桩单元(如果需要的话)。
*需要的测试用例最少。
*方法比较简单。
*可以并行开展,对人力、物力的资源利用率较高。
(5)缺点:
*这种在单元测试的基础上,将所有组件一次性进行组装,不考虑组件之间的依赖性,虽然简单,但是由于程序中不可避免的存在模块间接口、全局数据结构等方面的问题,所以一次试运行成功的可能性并不大。
*在发现错误的时候,问题定位和修改都比较困难。
*即使被测系统能够被一次性集成,但还是会有很多接口问题可以躲过集成测试而进入到系统测试。
(6)适用范围:
*一个维护性项目(或者功能增强型项目),以前的产品已经很稳定,并且新增的项目只有少数几个组件被增加或者修改。
*被测系统比较小,并且它的每个组件都进行了充分的单元测试。
自顶向下集成(Top-Down Integration)

(1)概念:自顶向下集成(Top-Down Integration)采用了和设计一样的顺序进行测试,它在第一时间内对系统的控制接口进行验证,其中顶层的组件具有控制的责任,首先测试顶层的组件,然后逐步测试处于底层的组件,这种集成方式可以采用深度优先策略和广度优先策略。
(2)目的:从顶层开始控制,采用和设计一样的思路对系统进行测试,以验证系统的接口稳定性。
(3)策略:
*以主模块为所测模块兼驱动模块,所有直属于主模块下的下属模块全部用桩单元代替,对主模块进行测试。
*采用深度优先(Depth-First)或者广度优先(Breath-First)的策略,用实际模块替换相应桩模块,再用桩模块代替它们的直接下属模块,与已经测试的模块组成新的子系统或者系统。
(4)优点:
*自顶向下这种集成方式,在测试过程中较早的验证了主要的控制和判断点,如果主要控制有问题,尽早发现它能够减少以后的返工,所以这是十分必要的。
*如果采用深度优先的策略,就可以首先实现和验证一个完整的软件功能,可以先对逻辑输入的分支进行组装和测试,检查和客服潜藏的错误和缺陷,验证功能的正确性,为之后对主要加工分支的组装和测试提供了保证。
*功能的可行性较早得到了证实。
*最多只需要一个驱动模块,减少了驱动模块的费用开支,也减轻了后期对驱动模块的维护。
*由于该方法和设计的思路是一样的,所以可以和设计并行开展,如果目标环境或者设计需要改变,这种方式也可以灵活的适应。
*支持故障隔离。例如:A模块测试正常,但是假如B模块之后,出现问题,那么可以确定,要么就是B模块有问题,要么就是A模块和B模块之间的接口有问题。
(5)缺点:
*桩在每个测试中都必须提供,所以桩的开发和维护是该策略的最大成本。
*底层组件中的一个无法预计的需要可能会导致许多顶层组件的修改,这破坏了部分先前构造的测试包。
*底层组件行为的验证被推迟了。
*随着底层模块的不断增加,系统越来越复杂,导致底层模块的测试肯那个不够充分,尤其是那些被重用的模块。
(6)适用范围:
*产品控制结构比较清晰和稳定。
*产品的高层借口比较稳定,底层变化比较频繁。
*产品的控制模块可能存在技术风险,需要较早被验证。
*希望尽早能够看到产品的系统功能行为。
自底向上集成(Bottom-up Integration)
(1)概念:自底向上集成(Bottom-up Integration)方式是从程序模块结构的最底层的模块开始组装和测试,因为模块是自底向上进行测试的,对于一个给定层次的模块,它的子模块已经组装并测试完成,所以不再需要桩模块。需要从子模块中得到的信息可以直接运行子模块得到。
(2)目的:从具有最小依赖性的底层组件开始按照依赖关系树的结构,逐层向上集成,以验证整个系统的稳定性。
(3)策略:
*起始于系统的最底层模块,也可以把多个子模块合并到一起进行测试。
*使用驱动模块对选定的模块进行测试。
*用实际模块代替驱动模块,与它已经测试过的子模块组装成为一个更大的模块组进行测试。
*重复上面的步骤,直到系统最顶层模块加入到已测系统中。
(4)优点:
*允许对底层模块行为的早期验证。
*在工作的最初可以采用并行进行集成,比自顶向下的测试效率高。
*由于驱动模块是额外编写的,而不是实际的模块,所以对实际被测模块的可测试性要求比自顶向下的测试策略要小。
*减少了桩模块的工作量。
*故障隔离。
(5)缺点:
*驱动模块的开发工作量比较大。
*对高层的验证被推迟到最后,设计上的错误不能尽早的被发现,尤其对于那些控制机构在整个体系中比较关键的产品。
*随着集成到了顶层,整个系统将变得越来越复杂,并且对于底层的一些异常很难覆盖。
(6)适用范围:
*采用契约式开发(Design by Contract)的产品。
*底层接口比较稳定的产品。
*高层接口变化比较频繁的产品。
*底层模块较早被完成的产品。

三明治集成(Sandwich Integration)

由于自顶向下集成策略和自底向上集成策略都有各自的缺点,所以就出现了一种结合这两种测试策略的集成方式,即:三明治集成。

(1)概念:三明治集成(Sandwich Integration)有时也被称为混合式集成,三明治集成就是把系统划分为三层,中间一层为目标层,测试的时候,对目标层上面的一层使用自顶向下的集成策略,对目标层下面的一层使用自底向上的集成策略,最后测试在目标层会合。
(2)目的:综合自顶向下的集成测试策略和自底向上的集成测试策略的优点。
(3)策略:
*首先对目标层上面的一层采用自顶向下的测试策略,对主模块A进行测试,对A调用的子模块(目标层)用桩单元代替。
*其次对目标层下面的一层采用自底向上的测试策略。
*最后将三层集成在一起。
(4)优点:集合了自顶向下和自底向上的两种集成策略的优点。
(5)缺点:中间层在被集成前测试不充分。
(6)适用范围:大部分软件开发项目都可以使用这种集成策略。
基干集成(Backbone Integration)
(1)概念:在很多系统中,尤其在嵌入式系统中,一般可以划分成两个部分:内核部分(基干部分)和外围应用部分,这两部分经常会被不同的项目组并发开发。
(2)目的:结合自顶向下,自底向上和大爆炸集成的元素,以验证紧密耦合的子系统间的互操作性。
(3)策略:
*对基干中的每个模块进行单独的充分的测试,必要时使用驱动和桩。
*对基干中所有的模块进行大爆炸集成,形成基干子系统,并使用一个驱动模块检查经过大爆炸的基干。
*对应用的控制子系统进行自顶向下的集成。
*把基干和控制子系统进行集成,重新构造控制子系统。
*对个应用子系统采用自底向上的集成策略。
*集成基干子系统,控制子系统和各应用子系统形成整个系统。
(4)优点:具有三明治集成的优点,更适合于大型复杂项目的集成。
(5)缺点:
*必须对系统的结构和相互依存性进行仔细的分析。
*必须开发桩和驱动模块,并且由于被测系统的复杂性导致这些模块开发工作量的加大,可以通过复用技术在一定程度上降低成本。
*由于局部采用了大爆炸的策略,所以有些接口可能测试不完整。
(6)适用范围:适合大型复杂的项目
*具有多层协议的嵌入式系统。
*操作系统产品

分层集成(Layers Integration)

(1)概念:分层模型在通讯系统中很常见,分层集成就是针对这个特点使用的一种集成。
(2)目的:通过增量式集成的方法验证一个具有层次性体系结构的应用系统的稳定性和互操作性。
(3)策略:
*划分系统的层次。
*确定每个层次内部的集成策略,该策略可以使用大爆炸集成,自顶向下集成,自底向上集成和三明治集成中的任何一种策略,一般对于顶层可能还有第二层的内部采用自顶向下的集成策略;对于中间采用自底向上的集成策略,对于底层主要采用进行单独测试。
*确定层次间的集成策略,该策略可以使用大爆炸集成,自顶向下集成,自底向上集成和三明治集成中的任何一种策略。
(4)优缺点:因为每个层次间和层次内部采用的策略不同,所以优缺点也就是和它采用的测试策略相对应。
(5)适用范围:有明显线性层次关系的产品系统。

基于功能的集成(Function-Based Integration)

(1)概念:在开发过程中,尽早的看到系统主要功能的实现,对于谈对来说也是很有必要的,基于功能的集成是从功能角度出发,按照功能的关键程度对模块的集成顺序进行组织。
(2)目的:采用增值的方法,尽早的验证系统关键功能。
(3)策略:
*1.确定功能的优先级别。
*2.分析优先级别最高的功能路径,把该路径上的所有模块集成到一起,必要时使用桩模块和单元模块。
3.*增加一个关键功能,继续上面一个步骤,直到所有模块都被集成到被测系统中。
(4)优点:
*采用该方法,可以尽快的看到关键功能的实现,并验证关键功能的正确性。
*由于该方法在验证某个功能的时候,可能会加入多个模块,因此在进度上,比自顶向下和自底向上还有三明治的集成策略要快一点。
*接口的覆盖使用的测试用例比较少。
*可以减少驱动模块的开发
(5)缺点:
*对于复杂的系统,功能之间的相互关联性可能是错综复杂并难以分析的。
*对有些接口的测试不充分,会丢失许多接口错误。
*一些初始的集成需要使用桩模块。
*可能会有比较大的冗余测试。
(6)适用范围:
*关键功能具有较大风险的产品。
*技术探索性的项目,其功能的实现远比质量更关键。
*对于功能的实现没有把握的产品。

基于进度的集成(Schedule-Based Integration)

(1)概念:进度压力在我们实际的工作中,每个软件开发项目都会遇到,。
为了完成进度,有可能会牺牲质量,基于进度的集成就是在兼顾质量和进度两者之间寻找了一个均衡点。
(2)目的:尽可能早的进行集成测试,提高开发与集成的并行性,有效的缩短进度。
(3)策略:这个集成的策略就是把最早可获得的代码拿来激励进行集成,必要的时候开发桩模块和驱动模块,子啊最大程度上保持与开发的并行性,从而缩短了项目集成的时间。
(4)优点:
*具有比较高的并行度。
*有效缩短项目开发的进度。
(5)缺点:
*可能最早拿到的模块之间缺乏整体性,只能进行独立的集成,导致许多接口必须等到后期才能验证,但此时系统可能已经很复杂,往往无法发现有效的接口问题。
*桩模块和驱动模块的工作量可能会变得很庞大。
*由于进度的原因,模块可能很不稳定且会不断变动,导致测试的重复和浪费。
(6)适用范围:进度优先级高于质量的项目。

集成测试策略

集成测试是一种正规测试过程,必须精心计划,并与单元测试的完成时间协调起来。在制定测试计划时,应考虑如下因素:
1、是采用何种系统组装方法来进行组装测试;
2、组装测试过程中连接各个模块的顺序;
3、模块代码编制和测试进度是否与组装测试的顺序一致
4、测试过程中是否需要专门的硬件设备;
解决了上述问题之后,就可以列出各个模块的编制、测试计划表,标明每个模块单元测试完成的日期、首次集成测试的日期、集成测试全部完成的日期、以及需要的测试用例和所期望的测试结果。
在缺少软件测试所需要的硬件设备时,应检查该硬件的交付日期是否与集成测试计划一致。例如,若测试需要数字化仪和绘图仪,则相应测试应安排在这些设备能够投入使用之时,并需要为硬件的安装和交付使用保留一段时间,以留下时间余量。此外,在测试计划中需要考虑测试所需软件(驱动模块、桩模块、测试用例生成程序等)的准备情况。
单元测试后,有必要进行集成测试,发现并排除在模块连接中可能发生的上述问题,最终构成要求的软件子系统或系统。对子系统,集成测试也叫部件测试。
任何合理地组织集成测试,即选择什么方式把模块组装起来形成一个可运行的系统,直接影响到模块测试用例的形式、所用测试工具的类型、模块编号和测试的次序、生成测试用例和调试的费用。通常,有两种不同的组装方式:一次性组装方式和增值式组装方式。

集成测试完成标准

怎样判定集成测试过程完成了,可按以下几个方面检查:
1、成功地执行了测试计划中规定的所有集成测试;
2、修正了所发现的错误;
3、测试结果通过了专门小组的评审。
集成测试应由专门的测试小组来进行,测试小组由有经验的系统设计人员和程序员组成。整个测试活动要在评审人员出席的情况下进行。
在完成预定的组装测试工作之后,测试小组应负责对测试结果进行整理、分析,形成测试报告。测试报告中要记录实际的测试结果、在测试中发现的问题、解决这些问题的方法以及解决之后再次测试的结果。此外还应提出不能解决、还需要管理人员和开发人员注意的一些问题,提供测试评审和最终决策,以提出处理意见。

写在最后

现在很多软件测试人员,都会陷入到一个怪圈:看到别人升职加薪,又觉得为啥别人运气总是那么好,我和他差不多时间进公司的啊!然后去跳槽,发现,现在的面试这么难的嘛,动不动就自动化测试,动不动就测试框架,软件测试不好做了,做 软件测试 的人太多了,我还是转行吧。

归总到一点,就是没从自己思考,从身上找原因。无论对于程序员来说,还是对于其他岗位,想要涨薪升职,自己的能力肯定要跟得上,而唯一的办法就是通过学习来提升自己。

废话也不多说,我自己分享一下我自己的一套学习资料库,大伙看看有没有需要的:

在这里插入图片描述

​这些资料,对于想学习【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助,需要的朋友可以点击下方插件进群免费领取:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt的一些思考

结论国内同行对chatgpt的认识是不够的,太轻视这个模式的颠覆性认知chatgpt是对思维过程的仿真,rlhf过程就是通过强化学习方式在利用人思维过程训练模型chatgpt比搜索更通用化,搜索是对单个点信息的匹配,chatgpt是对思维链一个序列…

【python】多任务编程之线程、进程知识点详细总结

目录 多任务的执行方式 进程 概念 python多进程 线程 概念 python多线程 线程同步方式 线程等待 互斥锁 死锁 线程和进程对比 多任务的执行方式 进程 概念 python多进程 Windows下的main判断process进程类import multiprocessing import time def sing():for i i…

Unix环境高级编程_进程环境_启动代码,环境变量表,进程内存结构,库

这是《UNIX环境高级编程》第7章内容,这篇文章记录进程所需要的环境。 4 进程环境 程序加载到内存,运行起来后就成为了进程。就像人活着需要生活环境(衣食住行的环境)一样,进程也需要运行环境,进程所需要的…

Vue组件生命周期与钩子函数

组件生命周期 ​ 组件(组件是可复用的 Vue 实例)从创建到销毁的过程就是组件的生命周期,是一个时间段。 组件生命周期钩子函数 (vue3与vue2生命周期钩子函数略有不同,本文以vue2为主) ​ VUE 提供的生命…

科研快报 | 三代测序技术-海水微生物态,助力海水微生态及微生物基因组研究

PacBio研究专题二代测序读长偏短,环境宏基因组样品研究受到了很大限制。作者通过三代测序对来自地中海的冬季混合海水样本进行宏基因组测序。利用PacBio Sequel II平台的超长读长明显可以提升宏基因组的组装质量,又能显著提升MAGs质量。研究人员通过比较…

使用和登录Linux云服务器

目录 云服务器的购买 SSH登录云服务器 云服务器的购买 我们以腾讯云为例, 其他的服务器厂商也是类似。 1. 进入腾讯云官方网站:学生云服务器_云校园特惠套餐 - 腾讯云 (tencent.com) 2. 登陆网站(可以使用微信登陆) 3.购买云服务器 购买最低级即可,对于…

python - 科研文献作图复现1

记录阅读文献过程中,通过python复现原文的一些脚本 想要复现的文章原图如下所示 原文链接: https://file.scirp.org/Html/4-2430166_82999.htm 首先,对于原图进行简要观察。 这是一张折线图,绘制了6条不同颜色的折线来表示不同…

舆情监控软件免费下载,TOOM网络舆情监控软件服务流程?

舆情监测可以帮助个人和企业了解自己的网络形象,提高自我评价和评价能力,提升自我定位和竞争力。接下来简单了解舆情监控软件免费下载,TOOM网络舆情监控软件服务流程? 一、舆情监控软件免费下载 请登录TOOM舆情官网获取链接 1.企业客户&a…

SpringMVC(十三):SpringMVC拦截器介绍使用

文章目录 SpringMVC拦截器介绍使用 前言 一、拦截器使用 二、拦截器内容详解 1、preHandle方法 2、postHandle方法 3、afterCompletion方法 三、多个拦截器执行顺序 SpringMVC拦截器介绍使用 前言 在之前的系列文章里,我们学习了过滤器的知识。过滤器的作…

ejs模板在Express框架中的集成

在上一篇内容中已经使用了pug模板,那么本篇就来了解一下ejs模板在Express框架中的集成使用,ejs模板也是常用的模板引擎,支持在标签内直接编写javascript代码,通过javascript代码就能够生成HTML页面的,通过本期对ejs模板…

C++字符串全排列(递归法)和(迭代法)以及next_permutation底层原理详解

目录前言next_permutation的使用实现全排列的两种算法1. 递归法(全排列方便理解记忆的方法,作为备用方法)实现代码(无重复元素情况)有重复元素情况2. 迭代法(next_permutation底层原理)实现代码(有无重复不影响)前言 next_permutation/prev_permutation是C STL中的…

全国青少年软件编程(Python)等级考试一级考试真题2022年12月——持续更新.....

1.关于Python语言的注释,以下选项中描述错误的是?( ) A.Python语言有两种注释方式:单行注释和多行注释 B.Python语言的单行注释以#开头 C.Python多行注释使用###来做为标记 D.注释用于解释代码原理或者用途 正确答案:C 2.下列代码执行后最有可能绘制出的图形是?(…

网络原理(TCP/IP五层协议)(三)

目录4.滑动窗口(效率机制)5.流量控制(安全机制)6.拥塞控制(安全机制)7.延迟应答(效率机制)8.捎带应答(效率机制)9.面向字节流10.TCP的异常处理4.滑动窗口(效率机制) 滑动窗口存在的意义就是在保证可靠性的前提下,尽量提高传输效率。 在这里可以看到,由于…

JSP 学生成绩管理系统myeclipse定制开发sqlserver数据库网页模式java编程jdbc

一、源码特点 JSP 学生成绩管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为SQLServer2008&#x…

layui 富文本layedit编辑、存储和回显

一、创建一个富文本编辑框 先定义一个textarea标签&#xff0c;给定一个id值&#xff0c;向页面引入layedit&#xff0c;然后调用layedit.build(id, options)构建富文本框 //官方给出的模板 <textarea id"demo" style"display: none;"></textar…

Linux的目录相关操作

目录 前言 处理目录的常见命令 cd&#xff08;change directory&#xff0c;切换目录&#xff09; pwd&#xff08;print working directory&#xff0c;显示目前所在的目录&#xff09; mkdir&#xff08;make directory&#xff0c;建立新目录&#xff09; rmdir&#x…

代码随想录算法训练营第十三天 | 第六章二叉树-理论基础,递归遍历,迭代遍历,统一迭代

一、参考资料二叉树理论基础文章讲解&#xff1a;https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 递归遍历题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%8…

Mobilenet v1-v3

MobileNet V1 理解 MobileNetV1的关键是理解深度可分离卷积 深度可分离卷积 Depthwise Separable Conv 深度可分离卷积单通道卷积&#xff08;提取特征&#xff09;逐点卷积&#xff08;增加维度&#xff09; 普通卷积 输入一个 12123 的一个输入特征图&#xff0c;经过256…

微服务/分布式初始

1.单体服务架构的特点 当服务单一、规模小、逻辑简单时&#xff0c;用一个单体服务就挺 单体服务的缺点 复杂程度高。维护成本越来越高&#xff0c;各个模块之间边界模糊&#xff0c;一个模块的改动可能导致整个服务出现问题&#xff0c;一点内存泄漏、一处指针错误就会让整…

汉诺塔+汉诺四塔(C/C++)

目录 汉诺塔 1 简介 2 代码思路 2.1 对于次数的理解 2.2 对于移动的理解 3 代码 4 加深理解 汉诺四塔 1 思路 2 代码 汉诺塔 1 简介 汉诺塔(Tower of Hanoi)&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三…