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

软件测试详解

文章目录

  • 一、软件危机
    • (一)概念
    • (二)产生软件危机的原因
    • (三)消除软件危机的途径
  • 二、软件过程模型
    • (一)软件生命周期概念
    • (二)软件开发模型
      • 1. 瀑布模型
      • 2. 螺旋模型
      • 3. 增量模型和迭代模型
      • 4. 敏捷模型
        • scrum
  • 三、测试的一些基本概念
    • (一)什么是软件测试
    • (二)软件测试和调试的区别
    • (三)需求概述
    • (四)bug概述
      • 1. 概念
      • 2. 如何描述一个bug
      • 3. bug的级别
      • 4. bug的生命周期
    • (五)测试用例
      • 1. 设计测试用例的万能思路
      • 2. 设计测试用例的方法
    • (六)软件测试生命周期
    • (七)测试模型
      • 1. V模型
      • 2. W模型(双V模型)
    • (八)测试分类
      • 1. 按照测试对象划分
      • 2. 按是否查看代码划分
      • 3. 按开发阶段划分
      • 4. 按测试实施组织划分
        • α测试和β测试的区别
      • 5. 按是否运行划分
      • 6. 按是否手工划分
      • 7. 按测试地域划分

一、软件危机

(一)概念

**  软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题**。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件
  具体的说,软件危机主要有以下一些典型表现:

  1. 对软件开发成本和进度的估计常常很不准确
  2. 用户对“已完成的”软件系统不满意的现象经常发生
  3. 软件产品的质量往往靠不住
  4. 软件常常是不可维护的
  5. 软件通常没有适当的文档资料
  6. 软件成本在计算机系统总成本中所占的比例逐年上升
  7. 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势

(二)产生软件危机的原因

在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关
  软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。由于软件缺乏“可见性”,在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量,软件的质量也较难评价,因此,管理和控制软件开发过程相当困难。此外,软件在运行过程中不会因为使用时间过长而被“用坏”,如果运行中发现了错误,很可能是遇到了一个在开发时期引入的在测试阶段没能检测出来的错误。因此,软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护
  目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。而与软件开发和维护有关的许多错误认识和作法的形成,可以归因于在计算机系统发展的早期阶段软件开发的个体化特点。错误的认识和作法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等

(三)消除软件危机的途径

为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科

二、软件过程模型

(一)软件生命周期概念

一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期。这就如同一个人要经过胎儿、儿童、青年、中年和老年,直到最终死亡的漫长时期一样。我们通常把软件经历的这个漫长的时期称为软件生命周期,如图:
软件生命周期

软件有生命周期,那么就会有针对生命周期设计的执行模型,模型中规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此也称为过程模型/开发模型

(二)软件开发模型

1. 瀑布模型

瀑布模型的设计其实就是按照软件生命周期一步一步进行的,一步一文档。它是所有其他模型的基础框架

  • 特点:线性的开发流程,不能够应对需求的变化
  • 缺陷:测试后置
  1. 风险往往在后期的测试阶段才显露,失去了及早纠正的机会
  2. 要有足够的时间预留给测试活动,否则将导致测试不充分,从而把缺陷遗留给用户
最大的缺陷在于可以运行的产品很迟才能看到
  • 适用场景:需求固定的小项目

传统的瀑布模型

2. 螺旋模型

螺旋模型是在瀑布模型的基础上在每一步都引入了风险分析,每次分析完成之后会生成一个新的原型

  • 优点:风险分析能力和产品遗留的风险是成反比的,因此使 用这种模型会极大降低产品遗留的风险
  • 缺陷:时间拉长,人力、资金会存在更多的消耗
  • 适用场景:规模庞大、复杂度高、风险大的项目

螺旋模型

3. 增量模型和迭代模型

这两个模型对比非常明显,因此放在一起介绍
**  增量模型是将一整个项目分成多个部分,同时进行开发,一个部分开发完成,就能让客户使用,以后每完成一部分,就在原有的基础上进行集成。这种方式听起来很好,既能及早的看到项目,也能针对一个模块及早发现问题。但是构建如何集成在一起,对于开发人员是个极大的挑战,一旦出问题,很可能整个项目都毁于一旦
**  迭代模型
:与增量模型不同的是,迭代模型就是把项目看作一个整体,由开发人员先开发一个基础版本,但是功能比较简陋,之后多次进行版本迭代优化

增量模型
增量模型

4. 敏捷模型

敏捷宣言

  1. 个体与交互重于过程和工具
  2. 可用的软件重于完备的文档
  3. 客户协作重于合同谈判
  4. 响应变化重于遵循计划
在每对比对中,后者并非全无价值,但我们更看重前者

四句宣言表达了敏捷模型的一个特点:轻流程、轻文档、重目标、重产出,而这种方式,感觉更适合互联网公司
  敏捷开发有很多种,其中scrum是比较流行的一种

scrum

三个角色

  1. 产品经理:收集用户的需求,编写需求文档,对产品负责的人
  2. 项目经理:负责召开各种会议,协调项目,为研发团队服务,也就是在研发团队后面催着赶工期的人
  3. 研发团队:开发人员、测试人员等

五个会议
  首先,项目组里会有一个需求待办列表,即需求池,里面专门放没有实现的用户需求,由产品负责人进行整理

  1. 发布计划会议:产品经理从需求池里选取几个需求,开展发布计划会议,介绍需求内容,具体要实现哪些功能
  2. 迭代计划会议:将发布计划会议中的所有需求进行分配,并明确负责人,初步估计完成工时
  3. 每日例会(每天,持续2~4周):时间很短,就是让团队成员说明一下自己昨天做了什么,今天计划做什么,有什么问题。做到及时了解项目进度、预知风险并规避
  4. 演示会议:需求完成,这个时候只有项目组的成员会使用,因此需要负责人进行演示,期间把大家的反馈记录下来,进行总结,形成新的需求,进入需求池
  5. 回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,以达到持续改进的效果

三、测试的一些基本概念

(一)什么是软件测试

测试在我们日常生活中是很常见的一个现象,而对软件而言,最常见的理解就是:软件测试就是找bug,发现缺陷。就是验证软件产品特性是否满足用户的需求

特点:软件测试只是一个样本试验,具有不可穷尽性

(二)软件测试和调试的区别

  1. 目的不同
    • 调试:找出并解决bug
    • 测试:找出bug
  2. 参与角色不同
    • 调试:开发人员
    • 测试:测试人员和开发人员(开发人员会进行单元测试等)
  3. 执行阶段不同
    • 调试:一般在开发阶段
    • 测试:贯穿整个软件开发生命周期

(三)需求概述

在多数软件公司里,会有两部分需求,一部分是用户需求,一部分是软件需求

  • 用户需求:甲方的需求,往往比较简略
  • 软件需求:具体描述开发人员必须要实现的功能。要将用户需求转变为软件需求需要进行技术可行性研究和市场可行性分析等等

(四)bug概述

1. 概念

**  当且仅当规格说明是存在的并且正确,程序与规格说明之间的不匹配才是错误**,当需求规格说明书没有提到的功能,判断标准以最终用户为准:当程序没有实现其最终用户合理预期的功能要求时,就是软件错误

2. 如何描述一个bug

一个合格的 bug 描述应该包括以下几个部分:

  1. 标题
    标题要用尽量短的话说明bug出现环境和bug的表现
  2. 问题出现的环境。
    环境分为硬件环境和软件环境。web项目需要告知操作系统、浏览器类型与版本等;app项目则需要描述机型、分辨率、操作系统版本等
  3. 发现问题的项目版本。
    开发人员需要知道出现问题的版本,才能获取对应版本的代码来重现故障
  4. 错误重现的步骤
    描述问题重现的最短步骤。某些bug如果操作步骤不同,可能bug不一定会出现,因此需要说清每一步的操作步骤
  5. 用户或软件需求中期望看到的结果
    要让开发人员知道正确的结果应该是什么样的,尤其要以用户的角度来描述程序的行为是怎样的。如果是依据软件需求报告提出的问题,最好写明需求来源
  6. 错误结果展示
    描述错误的现象。比如登录界面登录按钮消失可以截图
  7. 其他
    包括bug类型、bug等级等等

3. bug的级别

不同公司对bug等级的描述是不同的,我们这里只是列举一种描述bug等级的方式,这也就要求我们如果作为测试人员进入公司,就要先阅读公司关于bug等级的说明。具体bug等级包括以下四类:

  1. 1级bug(致命错误)
    阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环、导致数据库数据丢失、与数据库连接错误、主要功能丧失、基本模块缺失等非常严重的问题
  2. 2级bug(严重错误)
    系统主要功能丢失;错误的波及面很广、数据保存后数据库数据信息错误、密码明文显示、页面空白等等
  3. 3级bug(一般错误,该问题实际测试中出现最多
    功能没有完全实现但不影响使用,功能菜单存在缺陷但不会影响系统稳定性。如:操作等待时间长、查询时间长、格式错误、数据库中字段过多等问题
  4. 4级bug(次要错误)
    一般是页面排版显示的问题,不影响操作功能的执行,可以优化性能的方案等。如:错别字、界面格式不规范、页面显示重叠、文字排版不整齐等等

4. bug的生命周期

与bug的级别一样,不同公司对bug生命周期的定义都是不一致的,这里只是说一种常见的例子。测试人员应该跟踪一个bug的整个生命周期,从Open到Close的所有状态。我们先介绍一下各个状态的定义

  • New:测试人员新发现了一个bug
  • Open:开发人员拿到bug的说明文档后,经过评审认定它就是一个bug
  • Rejected:经过评审认定它不是一个bug,拒绝修改
  • Delay:虽然认定是一个bug了,但是认为暂时不需要修改或者暂时不能修改,即选择延后修改
  • Fixed:开发人员进行修改后标识这个bug为修改状态,表示已修改,让测试人员进行回归测试验证
  • Reopen:测试人员经过验证发现bug仍然存在,则需要重新打开bug,让开发人员进行修改
  • Closed:修改状态的bug经测试人员的回归测试验证通过,则关闭bug

bug生命周期

(五)测试用例

**  测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合。这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素**。主要是为了解决两大问题:测什么和怎么测

设计测试用例的要素:测试环境,测试步骤、测试数据、预期结果等

1. 设计测试用例的万能思路

* 功能测试
* 界面测试
* 性能测试
* 兼容性测试
* 易用性测试
* 安全测试

例如设计水杯的测试用例

2. 设计测试用例的方法

  1. 基于有需求的案例来设计测试用例
      大概的设计就是根据需求进行分析有哪些功能,确定测试哪些点,设计测试用例,比如可以通过穷举法

  2. 等价类法
    概念:针对需求输入范围划分成若干个等价类,从每个等价类中随机选取一个用例,若该用例通过,则认为它所代表的那个等价类也是通过的
      等价类的理解参考图书馆的图书摆放,一类的书一定是放在一块儿的,因此我们如果要找某一类的书,我们只需要随便拿起一本看这片地方的书是什么类型的来判断这块儿地方是不是我们要找的那一类的书籍,而不需要一本一本一个一个进行查找

  3. 边界值法
      边界值法是对等价类法的补充,我们如果只通过等价类法进行测试,势必会易漏很多需要重点关注的点
      比如:2月14日活动截止,那么我们设定正确标准的写法应该是"time <= 2.14 23:59:59"或"time < 2.15 00:00:00",因此2.14 23:59:59就是我们的边界值,而2.14 23:59:58 和 2.15 00:00:00就是我们的次边界值

  4. 判定表法
      判定表是一种表达逻辑判断的工具,适用场景:需要考虑输入之间的组合关系,不同的组合关系对应的输出结果不同
    判定表设计测试用例的步骤:

    • 确认输入条件和输出条件
    • 找出输入条件和输出条件之间的关系
    • 画判定表
    • 根据判定表编写测试用例
  5. 正交法
    特点

    1. 每一列中,不同的数字出现的次数相同
    2. 任意两列之间数字的排列方式齐全且均衡

    正交表我们要寻找到两个参数,因素数水平数;因素数是指输入的条件,水平数是指每个输入条件能选择的值或行为(例如注册时选择电话是否填写
      设计正交表很麻烦,我们可以利用allparis工具进行自动生成
    通过正交法设计测试用例的步骤(L4(23)),其中L是指正交表,4是试验次数,3是因果数,2是水平数

    1. 找到因果数和水平数
    2. 用allparis工具来生成正交表
    3. 根据正交表来编写测试用例
    4. 补充测试用例(allparis工具生成的测试用例可能不完整,一些特殊测试用例需要我们手动添加)
  6. 场景设计法
    分为基本事件流和多个备用事件流,正常情况下我们应该按照哪个流程进行活动称为基本事件流,其他可能遇到的意外情况就是备用事件流。编写测试用例时要求我们根据基本事件流和备用事件流的数量进行逐个设计

  7. 错误猜测法
    这个方法纯靠测试人员的个人工作经验和积累

(六)软件测试生命周期

软件测试生命周期

  1. 可行性研究
      站在用户的角度:查看需求逻辑是否正确,是否符合用户的需求和行为习惯;站在开发人员的角度:思考需求是否可以实现,或者实现起来难度大小
  2. 需求分析
      制定测试计划(包括但不限于测试的工时,人力的安排等等)
  3. 测试设计与测试开发
      设计测试用例,经验丰富的测试人员可以进行白盒测试
  4. 测试执行
      参考测试用例来执行测试
  5. 测试评估
      测试人员需要记录测试,做好缺陷管理,然后进行测试的评估

因此我们说,软件测试贯穿于软件的整个生命周期!

(七)测试模型

1. V模型

V模型的过程和软件生命周期几乎一样
  概要设计阶段是指设计整体架构和框架,详细设计模块与模块之间的详细设计
  单元测试阶段和集成测试阶段通常由开发人员来执行

  1. 特点
    1. 明确标注了测试的类型
    2. 明确标注了测试阶段和开发阶段之间的关系
  2. 缺点:测试后置

软件测试V模型

2. W模型(双V模型)

**  最重要的也是最大的优点就是测试从获取用户需求阶段就开始介入了**

缺点

  1. 上一个阶段完成下一个阶段才能开始
  2. 开发模型和测试模型也保持着一种前后的线性关系
也因为这种模型重文档,重过程,因此不支持敏捷开发

软件测试W模型

(八)测试分类

1. 按照测试对象划分

  1. 界面测试
      界面测试(简称UI测试),指按照界面的需求(一般是UI设计稿)和界面的设计规则,对我们软件界面所展示的全部内容进行测试和检查,一般包括如下内容:

    • 验证界面内容显示的完整性,一致性,准确性,友好性。比如界面内容对屏幕大小的自适应,换行,内容是否全部清晰展示;
    • 验证整个界面布局和排版是否合理,不同板块字体的设计,图片的展示是否符合需求
    • 对界面不同控件的测试,比如,对话框,文本框,滚动条,选项按钮等是否可以正常使用,有效和无效的状态是否设计合理;
    • 界面的布局和色调符合当下时事的发展

    **  常见的界面错误包括:重叠,截断,文字不合理自动换行等**

  2. 可靠性测试
      可靠性即可用性,是指系统正常运行的能力或者程度
      可靠性 = 正常运行时间/(正常运行时间 + 非正常运行时间)* 100%
      系统非正常运行的时间可能是由于硬件,软件,网络故障或任何其他因素(如断电)造成的,这些因素能让系统停止工作,或者连接中断不能被访问,或者性能急剧降低导致不能使用软件现有的服务
    **  可用性指标一般要求达到4个或者5个9,即99.99%或者99.999%**

  3. 容错性测试
      容错性测试是指系统能够处理异常,用户的错误操作而不至于系统崩溃,从而能够提高系统的可用性
    容错性测试包括下面几个方面:

    • 输入异常数据或进行异常操作,以检验系统的保护性。如果系统容错性好,系统只给出提示或内部消化掉,而不会导致系统出错甚至崩溃。比如数据级测试、校验测试、环境容错性测试、界面容错性测试
    • 灾难恢复性测试。通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失,系统和数据是否能尽快恢复
  4. 文档测试
      文档包括开发文件,用户文件,管理文件等。

    • 开发文件:可行性研究报告,软件需求、数据要求、概要设计、详细设计、数据库设计说明书,模块开发卷宗等。
    • 用户文件:用户手册、操作手册、用户文档的使用
    • 管理文件:项目开发计划、测试计划、测试分析报告、开发进度月报、项目开发总结报告
      文档测试的关注点:
    • 文旦的术语
    • 文档的正确性
    • 文档的完整性
    • 文档的一致性
    • 文档的易用性
  5. 兼容性测试
    明确要测试的兼容环境,考虑软硬件的兼容

  6. 易用性测试

    • 标准型和规范性
    • 直观性
    • 灵活性
    • 舒适性
  7. 安装卸载测试

    • 软件不同的安装和卸载方式
    • 应用是否可以在不同的系统、版本下安装
    • 安装或者卸载过程中是否可以手动暂停,或者取消
    • 安装空间不足时系统是否会有提示
    • 是否可以正常的卸载、以及应用软件的各种卸载方式
    • 卸载和安装过程中出现环境问题,软件是否可以正常并且合理的应对。比如死机、断电、断网等
  8. 安全测试
    系统常见的安全漏洞和威胁如下:

    • 输入域,如输入恶行或者带有病毒的脚本或长字符串
    • 代码中的安全性问题,比如:SQL/XML注入
    • 不安全的数据存储或者传递
    • 数据文件、邮件文件、系统配置文件等里面有危害系统的信息或者数据
    • 有问题的访问控制,权限分配等
    • 假冒ID:身份欺骗
    • 对数据的恶意修改,破坏数据的完整性
      常用的安全测试方法包括代码评审、渗透测试、安全运维等
  9. 性能测试
    常见的性能问题:

    • 资源泄露
    • 资源瓶颈
    • 线程死锁,线程阻塞
    • 查询速度慢或效率低
    • 受外部系统影响越来越大
      衡量一个系统性能好坏的关键性指标有:用户响应时间,事务平均响应时间(TPS),吞吐率,每秒点击次数,内存和CPU使用率等等
  10. 内存泄漏测试
    常见内存泄漏问题:

    • 分配完内存忘记回收
    • 程序写法有问题,造成没办法回收(如死循环造成无法执行到回收步骤)
    • 某些API函数的使用不正确,造成内存泄漏
      内存泄露的检测方法:
    • 人工静态法:代码走读,人工查找未被回收的内存
    • 自动工具法:借助相应测试内存泄漏的工具,如Visual Leak Detector,记录每次内存分配,清楚告诉用户内存是如何泄漏的

2. 按是否查看代码划分

  1. 黑盒测试
    **  黑盒测试就是在完全不考虑程序逻辑和内部结构的情况下,检查系统功能是否按照需求规格说明书的规定正常使用、是否能适当的接收输入数据而输出正确的结果,满足规范需求**,因此黑盒测试又称之为数据驱动测试,只注重软件的功能
    优点:
    • 不需要了解程序内部的代码以及实现,不关注软件内部的实现
    • 从用户角度出发设计测试用例,很容易的知道用户会用到哪些功能,会遇到哪些问题,锻炼测试人员的产品思维
    • 测试用例是基于软件需求开发文档,不容易遗漏软件需求文档中需要测试的功能

**  缺点就是不可能覆盖所有代码**
**  黑盒测试的测试方法包括:等价类,边界值,判定表,正交法,场景法,错误猜测法等等**

  1. 白盒测试
    **  白盒测试又称为结构测试或逻辑测试,它一般用来分析程序的内部结构,针对程序的逻辑结构来设计测试用例进行测试**
    **  白盒测试的测试目的是,通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致**
    **  白盒测试主要包含六种测试方法:语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,条件组合覆盖,路径覆盖**
  2. 灰盒测试
    灰盒测试就是介于黑盒和白盒之间的测试,多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况

3. 按开发阶段划分

  1. 单元测试
      针对系统最小单元(人为规定)进行测试,一般是由开发人员来测试
  2. 集成测试
      完成单元测试之后,将模块和模块之间进行集成,按照功能来进行测试,一般也是由开发人员来负责
  3. 冒烟测试
      集成测试完成之后,需要交给软件测试人员,由测试人员来检查系统主要功能和主要的流程是否正常,评估软件/系统是否具备可测试的条件/可测试的标准,如果不具备,则直接打回
  4. 系统测试
      这一步是测试人员真正进行测试的阶段,测试人员需要准备项目环境,将软件看作一个整体,对程序/系统进行系统测试,保证系统功能符合产品规格说明书的要求
  5. 回归测试
      对历史版本、历史功能进行测试,保证功能符合要求。随着功能迭代越来越多,版本越来越多,回归测试的难度相对大一些,需要借助自动化测试来进行回归测试
  6. 验收测试
      通常指的是用户来进行验证测试,目的就是为了验证产品/程序符合用户的需求。实际上主要是由产品/运营人员来进行验收

4. 按测试实施组织划分

  1. α测试
      α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。α测试的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)
      注意:α测试不能由程序猿或测试员完成

  2. β测试
      β测试是一种验收测试,由软件的最终用户们在一个或多个场所进行

α测试和β测试的区别

  1. 测试的场所不同:Alpha测试是指把用户请到开发方的场所来测试;beta测试是指在一个或多个用户的场所进行的测试
  2. Alpha测试的环境是受开发方控制的,用户的数量相对比较少,时间比较集中;beta测试的环境是不受开发方控制的,用户数量相对比较多,时间不集中
  3. Alpha测试先于beta测试执行。通用的软件产品需要较大规模的beta测试,测试周期比较长

5. 按是否运行划分

  1. 静态测试
    不运行被测软件,只是静态地检查程序代码、界面或文档可能存在的错误的过程
  2. 动态测试
    实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符

6. 按是否手工划分

  1. 手工测试
    由人来一个一个的输入用例,然后观察结果
    优点:自动化无法替代探索性测试,发散思维结果的测试
    缺点:执行效率慢,量大易错
  2. 自动化测试
    在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。比如功能测试自动化、性能测试自动化、安全测试自动化

7. 按测试地域划分

  1. 国际化测试
  2. 本地化测试

相关文章:

软件测试详解

文章目录一、软件危机&#xff08;一&#xff09;概念&#xff08;二&#xff09;产生软件危机的原因&#xff08;三&#xff09;消除软件危机的途径二、软件过程模型&#xff08;一&#xff09;软件生命周期概念&#xff08;二&#xff09;软件开发模型1. 瀑布模型2. 螺旋模型…...

YOLOS学习记录

在前面&#xff0c;博主已经完成了YOLOS项目的部署与调试任务&#xff0c;并在博主自己构造的数据集上进行了实验&#xff0c;实验结果表明效果并不显著&#xff0c;其实这一点并不意外&#xff0c;反而是在情理之中。众所周知&#xff0c;Transformer一直以来作为NLP领域的带头…...

数组边遍历(for循环)边删除为什么删不干净 及三种实现删除的方法

文章目录1、为什么删不干净倒序删迭代器lambda表达式删除为什么说数组边for循环遍历边删除会出现删不干净的情况1、为什么删不干净 先写一个例子&#xff1a;可以先猜一下控制台会打印出什么内容&#xff1f; public class removeIterator {public static void main(String[]…...

环境配置之Keepass

前言很久以前&#xff0c;就有了想要一个自己密码管理器的念头。毕竟&#xff0c;即使浏览器能记住各个网站的账号密码&#xff0c;但是在登录单独客户端的时候&#xff0c;仍然要翻找密码。为了省事&#xff0c;也曾经是一个密码走天下。然后被劫持了QQ给同学发黄色小网站&…...

Java 电话号码的组合

电话号码的字母组合中等给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。示例 1&#xff1a;输入&#xff1a;digits "23…...

MATLAB——将直接型转化为并联型和级联型

题目1(IIR)&#xff1a; 已知一个系统的传递函数为&#xff1a; H&#xff08;z&#xff09;8−4z−111z−2−2z−31−1.25z−10.75z−2−0.125z−3H&#xff08;z&#xff09;\frac{8-4z^{-1}11z^{-2}-2z^{-3}}{1-1.25z^{-1}0.75z^{-2}-0.125z^{-3}}H&#xff08;z&#xff09…...

.NET Framework .NET Core与 .NET 的区别

我们在创建C#程序时,经常会看到目标框架以下的选项,那么究竟有什么区别? 首先 .NET是一种用于构建多种应用的免费开源开发平台,可以使用多种语言,编辑器和库开发Web应用、Web API和微服务、云中的无服务器函数、云原生应用、移动应用、桌面应用、Windows WPF、Windows窗体…...

carla与ros2的自动驾驶算法-planning与control算法开发与仿真

欢迎仪式 carla与ros2的自动驾驶算法-planning与control算法开发与仿真欢迎大家来到自动驾驶Player(L5Player)的自动驾驶算法与仿真空间&#xff0c;在这个空间我们将一起完成这些事情&#xff1a; 控制算法构建基础模块并仿真调试&#xff1a;PID、LQR、Stanley 、MPC、滑膜控…...

corn表达式

简单理解corn表达式&#xff1a;在使用定时调度任务的时候&#xff0c;我们最常用的&#xff0c;就是cron表达式了。通过cron表达式来指定任务在某个时间点或者周期性的执行。cron表达式配置起来简洁方便&#xff0c;无论是Spring的Scheduled还是用Quartz框架&#xff0c;都支持…...

推荐系统中对抗性机器学习-文献综述与未来发展整理分享

对抗学习是一种机器学习技术&#xff0c;旨在通过提供欺骗性输入来欺骗模型。最常见的原因是导致机器学习模型出现故障。大多数机器学习技术旨在处理特定的问题集&#xff0c;其中从相同的统计分布&#xff08;IID&#xff09;生成训练和测试数据。当这些模型应用于现实世界时&…...

Proteus8.15安装教程

1、解压Proteus8.15 安装包&#xff0c;然后双击进去&#xff0c;找到setup文件&#xff0c;右键&#xff0c;以管理员身份运行。 2、需要安装一些插件&#xff0c;点击“next”。把插件安装完成。 点击“finfish” 点击“install” 点击“Cancel” 3、如果没有上面步骤&…...

Shell 基本运算符

Shell 和其他编程语言一样&#xff0c;支持多种运算符&#xff0c;包括&#xff1a; 算数运算符关系运算符布尔运算符字符串运算符文件测试运算符 原生bash不支持简单的数学运算&#xff0c;但是可以通过其他命令来实现&#xff0c;例如 awk 和 expr&#xff0c;expr 最常用。…...

Linux基础命令-sed流编辑器

Linux三剑客-grep命令 Sed 一. 命令介绍 先到帮助文档中查看命令的描述信息 NAME sed - stream editor for filtering and transforming text sed命令是操作、过滤和转换文本内容的强大工具&#xff0c;常用功能包括结合正则表达式对文件实现快速增删改查&#xff0c;其中查询…...

C语言笔试题(1)

#include <stdio.h> #include <stdlib.h> #include <string.h> void getmemory(char *p) { p(char *) malloc(100); strcpy(p,“hello world”); } int main(void) { char *strNULL; getmemory(str); printf(“%s/n”,str); free(str); return 0; } 上述程序…...

网络连接的三种模式

文章目录前言一、三种连接模式介绍二、三种网络连接模式的区别前言 在进行虚拟机配置时&#xff0c;网络连接分为三种模式&#xff1a;桥接模式&#xff0c;NAT模式&#xff0c;主机模式 一、三种连接模式介绍 张三、李四、王五在同一个网段&#xff0c;所以他们之间可以相互…...

大学模拟电路期末考试模拟题详解

&#xff08;一&#xff09;选择题 3.4.5.6.7.8.9.10. &#xff08;二&#xff09;填空题 1.漂流电流是温度电流&#xff0c;它由少数、载流子形成、其大小与温度有关&#xff0c;而与外加电压无关。 反向电流是由少数载流子形成、其大小与温度有关&#xff0c;而与外加电压无…...

C/C++内存管理讲解

c/C内存管理讲解 C/C内存分布 首先通过一些题目的引入讲解带大家走进C/C的内存分布。 eg1&#xff1a; 根据上述变量的定义&#xff0c;来判断它们所在的内存位置。 从接下来的4个选项中选出最佳答案填入&#xff08;注&#xff1a;可重复选&#xff09;。 A、栈 B、堆 C、数…...

【Linux】网络原理

本篇博客让我们一起来了解一下网络的基本原理 1.网络发展背景 关于网络发展的历史背景这种东西就不多bb了&#xff0c;网上很容易就能找到参考资料&#xff0c;我的专业性欠缺&#xff0c;文章参考意义也不大。这里只做简单说明。 网络发展经过了如下几个模式 独立模式&…...

list模拟实现

list模拟实现list原理讲解节点结构list类设计push_backIterators:begin与endconst对象的迭代器重载->运算符反向迭代器迭代器所有代码迭代器总结constructor:clear~listfront与backinsert与erasesize与empty与swappop_back()总代码:节点类正向迭代器类反向迭代器类list类lis…...

CSS看这一篇就够啦,CSS基础大全,可用于快速回顾知识,面试首选

1 CSS简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称。 CSS 是也是一种标记语言&#xff0c;主要用于设置 HTML 页面中的文本内容&#xff08;字体、大小、对齐方式等&#xff09;、图片的外形&#xff08;宽高、边框样式、 边距等&#xff09;以及版面的布局和外观…...

Canvas详细使用方法(一)

Canvas Canvas的注意事项 < canvas > 和 < img > 元素很相像&#xff0c;唯一的不同就是它并没有 src 和 alt 属性。 -< canvas > 标签只有两个属性——width和height( 单位默认为px )。当没有设置宽度和高度时&#xff0c;canvas 会初始化宽为 300px 和高…...

CentOS定时任务——crontab

crontab Linux crontab 是用来定期执行程序的命令。 crond 命令每分钟会定期检查是否有要执行的工作&#xff0c;如果有要执行的工作便会自动执行该工作。 注意&#xff1a;新创建的 cron 任务&#xff0c;不会马上执行&#xff0c;至少要过 2 分钟后才可以&#xff0c;当然你…...

C51---蓝牙模块---连接软件---控制LED灯

1.器件&#xff1a;C51、HC-08蓝牙模块、Ty-C数据线、杜邦线 2.软件&#xff1a;HC蓝牙助手 3.接线&#xff1a;VCC-VCC、GND-GND、RXD-TXD、TXD-RXD 4.烧写&#xff1a;STC-ISP串口助手 5.代码&#xff1a; #include "reg52.h" #include "intrins.h" …...

Linux 学习笔记——二、主机规划与磁盘分区

一、Linux 与硬件的搭配 Linux 中所有设备均被视为文件&#xff0c;其命名规则如下&#xff1a; 设备文件名SCSI/SATA/USB 硬盘机/dev/sd[a-p]USB 闪存盘/dev/sd[a-p]&#xff08;与 SATA 相同&#xff09;Virtl/O 界面/dev/vd[a-p]&#xff08;用于虚拟机内&#xff09;软盘…...

麒麟服务器V10 版本 安装 Anaconda教程,也就是安装Python环境的教程(亲测有效)

目录1 Anaconda 是什么2 安装1 Anaconda 是什么 你可以理解为一个软件&#xff0c;和QQ一样的软件&#xff0c;你安装之后&#xff0c;里面就有naconda包括Conda、Python以及一大堆安装好的工具包&#xff0c;比如&#xff1a;numpy、pandas等 1&#xff09;包含conda&#x…...

【3维视觉】网格细分Mesh Subdivision算法介绍(Loop, Catmull-Clark, Doo-Sabin)

引言 介绍了Loop, Catmull-Clark, Doo-Sabin细分。 算法介绍 1. Loop细分 Loop细分是Charles Loop在1987年在硕士论文中提出的一种对三角网格的细分算法。 Loop细分是递归定义的&#xff0c;每一个三角形一分为四&#xff0c;对于新生成的点和旧点以不同的规则更新。 点的…...

自学大数据第六天~HDFS命令

HDFS常用命令 查看hadoop版本 version hadoop version注意,没有 ‘-’ [hadoopmaster ~]$ hadoop version Hadoop 3.3.4 Source code repository https://github.com/apache/hadoop.git -r a585a73c3e02ac62350c136643a5e7f6095a3dbb Compiled by stevel on 2022-07-29T12:3…...

maven仓库的配置

下载 官网下载&#xff1a;https://maven.apache.org/download.cgi 2. 配置maven环境 右键电脑 ->属性 -> 高级系统设置 -> 环境变量 -> 系统变量-新建 变量名&#xff1a;MAVEN_HOME 变量值为maven的文件安装地址 编辑Path系统变量 新建&#xff1a;%MAVE…...

医院信息管理云平台源码 云HIS系统源码 4级电子病历系统

基层医院云HIS系统源码 高端商业his源码 有演示&#xff0c;可直接项目运营。 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规…...

JS学习第9天——ES6中面向对象(类class、constructor构造函数、类的继承extends、super关键字、面向对象tab栏切换案例)

目录一、面向对象1、面向过程2、面向对象3、两者对比二、ES6中的类和对象1、面向对象的思维特点2、对象3、类class4、类constructor构造函数三、类的继承1、继承2、super()关键字3、注意点四、面向对象案例一、面向对象 两大编程思想&#xff1a;① 面向过程 ② 面向对象 1、…...

网站制作苏州/政府免费培训 面点班

Darnassus 题意&#xff1a; 就是给你一个数组全排列&#xff0c;任意两点间的距离是abs(i-j)*abs(p[i]-p[j])。现在问你所有点联通起来的最小花费。n<40000。 思考&#xff1a; 既然题目就是说让所有点连通的最小花费&#xff0c;那么很容易想到最小生成树&#xff0c;但…...

如何做淘宝cms导购网站/百度网址链接是多少

前些天在学习linux下的驱动编写&#xff0c;找到了一块之前淘到的液晶屏&#xff0c;主控芯片是ili9341&#xff0c;分辨率为240*320的屏幕&#xff0c;接口方式是SPI的&#xff0c;心血来潮想搞一下。不过奈何驱动水平不到家&#xff0c;只是开发出了一种杂交方法&#xff0c;…...

购物系统顺序图/北京谷歌seo公司

如果觉得我的算法分享对你有帮助,欢迎关注我的微信公众号“圆圆的算法笔记”,更多算法笔记、算法交流,以及世间万物的学习记录~ NLP中,预训练大模型Finetune是一种非常常见的解决问题的范式。利用在海量文本上预训练得到的Bert、GPT等模型,在下游不同任务上分别进行finet…...

做彩票网站的方案/服务推广软文范例

如何面对“算法”的困惑&#xff1f;收到一封面对“算法”问题困惑的来信&#xff1a;我是网络专业 自然 不回接触 软件方向 ,但是 我对JAVA 感兴趣 我想做开发 开发当中用到的 好像和 算法(和那些数学相关的) 没有什么直接关系,都被包装好了... 我还需要 去学习一下 <算法…...

WordPress如何添加cnzz/辽阳网站seo

winform 仪表盘相关下载链接&#xff1a;//download.csdn.net/download/floweroflvoe/10432601?utm_sourcebbsseo 控件首次拖拽上来是这样的&#xff1a;        Demo中美化之后是这样的&#xff1a;      这是修改demo后的成果&#xff1a; 其中颜色是一点一点…...

重庆网红打卡点有哪些地方/seo网址超级外链工具

lftp是linux中一款ftp服务器相比windows中的ftp显得要复杂不少了&#xff0c;下面我来总结一下lftp文件上传&#xff0c;文件下载&#xff0c;及文件查找等等相关命令吧。 lftp连接的几种方法&#xff0c;最常用的是lftp namesite&#xff0c;这样可以不用明文输入密码。 1、lf…...