面试——测试基础理论

2023-05-16

测试先导性知识

测试是什么?

在规定的条件下对程序进行操作去发现错误,然后对软件质量进行评估的一个过程。

需要注意的是,软件是由文档、数据以及程序组成的,所以对软件测试应该包括:软件形成过程的文档、数据以及程序,而不仅仅是对程序进行的测试。

测试的目的、作用

通过测试工作发现问题并及时报告给开发,让开发修复软件当中潜在的各种错误和缺陷,提高软件质量,进而提高用户对产品的使用信心,避免软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。

测试可以记录软件运行过程中产生的一些数据,从而为决策提供数据支持
(比如抢火车票,你模拟用户测试,最终测出的流量上限是1个亿。那高层拿到你的测试数据后就可以去决策这个上限能否让软件投放市场)

测试可以降低同类型产品开发遇到问题的风险。(参考同一公司的微信和qq,都是社交软件,qq踩过的坑可以让微信规避掉)

测试的原则

不能执行穷尽测试:有些功能是没有办法将所有的测试情况都逻列出来

缺陷存在群集现象:对于软件功能说,核心功能占20%,非核心是80%。在实际工作中我们会集中测试20%的核心功能,所以这个部分发现缺陷的几率就会高于80%。因此我们就会遇到缺陷都集中在20%功能模块里的现象。

某些测试需要依赖特殊的环境:像有些手机不考虑冬天的情况,温度低的时候电量掉的快

测试应尽早介入:为了更多的发现和更好的解决软件中的缺陷,我们追求测试工作尽早的开展

杀虫剂现象:同样的一个测试用例不能重的执行多次,因为软件会对它产生免疫( 开发会根据你 的用例去修改,你再测同样的用例肯定能过关的或是被开发蒙混过关)

不存在缺陷谬论:任何软件不可能是完美的。

测试测什么?(测试对象是什么)

1.需求分析阶段:各种需求规格说明书
2.软件架构设计:API接口文档(接口测试)
3.编码实现阶段:源代码(白盒测试、单元测试)
4.系统功能使用:软件功能主体(当前行业做的最多的一种测试)

测试计划工作的关键是什么?

明确测试的目标,增强测试计划的实用性,明确内容与过程
采用评审和更新机制,保证测试计划满足实际需求
需要分别创建测试计划与测试详细规格、测试用例

测试基础理论

软件测试模型有哪些?

瀑布流

项目计划—>需求分析—>软件设计—>编码—>测试—>运行维护

优点:
软件开发的各项活动严格按照线性方式进行
前一阶段完成后,只需关注后续阶段

缺点:
难以适应需求的频繁变化
早期的错误可能要等到开发后期的阶段才能发现

V模型
在这里插入图片描述
W模型
在这里插入图片描述
还有X模型、H模型

软件的生命周期(软件开发的流程)

需求分析
软件设计(概要设计、详细设计)
软件编码
软件测试(单元测试、集成测试、系统测试、验证测试)
运行维护

详细介绍

软件产品质量特性是什么?

功能性、可靠性、效率、易用性、可维护、可移植

功能性

定义:软件在指定的使用环境下,满足用户显性或隐性需求的能力
适合性:软件为指定的任务和用户目标提供一组合适功能的能力
准确性:软件提供具有所需精确度的正确或相符的結果或效果的能力
互操作性:软件与一个或更多个的规定系统进行交互的能力

可靠性

定义:软件在指定的条件下使用,维持规定的性能级别的能力
成熟性:软件为避免由软件中错误而导致失控的能力,
容错性:在软件出现故障或违反指定接口的情况下,软件维持规定性能级别的能力,
易恢复性:在失效发生的情况下软件里重建规定的件能级别并恢复受直接影响的数据的能力
可靠性依从性:软件遵循与可靠件相关的标准,约定以及法律法规的能力

效率

定义:在规定的条件下,相对于所用资源的数量,软件提供适当性能的能力
时间特性:在规定的条件下软件执行其功能时,提供适当的响应和处理时间以及吞吐率的能力
资源利用性:在规定的条件下软件执行其能力时,使用合适的资源数量和类别的能力
效率依从件:软件遵循与效率相关的标准和约定的能力

易用性

定义:在指定的条件下使用时,软件被学习,理解,使用和吸引用户的能力
易理解性:软件的使用,用户能理解软件是否合适,以及如何将软件用于特定的任务和使用环境的能力
易学习:软件使用户能学习其应用的能力易操作性:软件使用用户操作和控制它的能力
吸引性:软件吸引用户的能力
易用性依从性:遭循与易用性相关的标准、约定风格指南或法规的能力

可维护

定义:软件可被修改的能力,修改可能包括修正、改进或软件对环境、需求和功能规格说明变化的适应性
易分析性:软件诊断软件的缺陷,失效原因或识别待修改部分的能力,
易改变性:软件指定的修改可以被实现的能力
稳定性:软件避免由于软件修改而造成意外结果的能力,
易测试性:软件使已修改软件能被确认的能力
可维护依从性:遵循与维护相关标准和约定的能力,

可移植

定义:软件从一种环境迁移到另一种环境的能力
适用性:软件能适用于不同的环境的能力
易安装性:软件在指定环境中被安装的能力
共存性:软件在公共环境中同与其分享公共资源的其他独立软件共存的能力
易替换性:软件在同样的环境下,替代另一个相同用途的指定软件产品的能力
可移植性依从性:软件遵循可移植性相关的标准和约定的能力

如何判断是Bug(Bug的定义,缺陷的定义)

只要满足下列5个规则之一则称为发生了一个软件缺陷
软件未实现产品说明书要求的功能
软件未实现产品说明书虽未明确提及但应该实现的功能
软件出现了产品说明书指明不应该出现的错误
软件实现了产品说明书未提到的功能
软件难以理解、不易使用、运行缓慢,或者从测试员的角度看,最终用户会认为不好

Bug严重程度(Bug级别定义)

致命:系统崩溃、异常退出、严重计算错误、严重资源不足
严重:系统无法满足主要的业务要求,像业务流程错误
一般:系统可以满足业务要求但有性能缺陷或界面缺陷,像提示信息不准确
轻微:易用性及建议性问题,不影响执行工作功能,像出现错别字

Bug的生命周期

添加链接描述

Bug状态的处理(处理一个缺陷的流程)

在这里插入图片描述

请描述你对测试的了解

内容可以涉及测试流程,测试分类,测试方法,测试工具

测试流程(测试工作流程)

需求分析,梳理清楚我们需要设计的点是什么
编写测试计划,做什么类型的测试,需要什么样的工具
编写测试用例,用例是为了测试软件的某个功能而执行的操作过程
评审用例,对当前的用例进行添加或者删除
配置环境
执行用例,执行用例前先做冒烟测试,通过才开始正式测试
回归测试,缺陷被开发修复后进行复测
缺陷跟踪
输出测试报告,方便其它人去查看
测试结束,将整个测试过程产生的文档进行整理归档,方便后续版本使用。

社招:
1.首先要进行需求分析。软件开发完成以后,由项目经理拿到需求文档后,召开会议,开发、测试一同参与,评审需求文档中的内容。
(需求的来源(拿到软件不知道要测什么的时候参考的渠道):需求规格说明书(产品经理提供)、看行业标准和政策法规、竟品分析、个人经验)
2.项目经理根据评审后的需求文档,制定测试计划。
(包含内容:人员、任务划分、时间规划(开发的 30%-40%)、项目结束需要出具的文档(测试用例文档或 bug 文档)、做什么类型的测试?需要什么样的工具……)
3.测试人员根据测试计划,编写测试用例。
4.测试用例编写完后后,需要召开会议,开发、测试一同参与,评审测试用例。
5.搭建测试环境,在开发提交第一版本后,开始进行测试,对测试发现的问题提交到bug管理平台。
6.开发人员修改bug后,对bug进行复测,确保bug修改后,关闭bug。
7.每次开发提交新版本后,重复5、6的操作,直到上线前的最后一个版本。
8.版本上线前,需要对系统进行一次全面的系统测试,测试不再发现bug后,进行上线的工作。

测试分类

在这里插入图片描述
----测试级别(测试有哪几个阶段)

1.单元测试[ UT unit test](白盒):在软件测试中单元指的就是组成软件最小的底层代码结构一般就是类、函数、组件(当下的软件测试行业,不会刻意要求测试人员对源代码进行测试)

2.集成测试(IT system ingertaion test)(灰盒):将多个单元模块组合在一起,然后验证它们之间沟通的”桥梁"是否能正常工作(接口测试)

3系统测试( ST system test)(黑盒)这是当前行业做的最多的一种测试。由测试人员充当用户然后对软件的功能主体进行测试

4.验收测试
(1)α测试一内测,在软件开发环境下进行的测试,开发和测试在一起,把用户请到公司内部进行测试使用,或者说是公司内部的用户在模拟实际操作环境下进行的测试
(2)β测试-公测,用户的应用环境下,开发和测试不再一起,还要由玩家把bug发邮箱然后获得奖励的那种
(3)UAT( user acceptance test)测试一由客户派出对于业务非常精通的人员来使用该软件,从而对功能进行测试。
(4)验收测试的核心就是让用户为当前软件“买单

--------系统测试分类

1.功能测试:验证当前的软件主体功能是否可用。
2.兼容性测试:验证当前软件在不同的环境下是否还可以使用
3.安全测试:验证软件是否只是能授权用户提供功能使用。
4.性能测试:相对于当前软件消耗的资源它的产出能力。

--------常见的系统测试方法

按测试对象进行分类
1.白盒测试:这种测试的主体就是软件的底层代码,不会在意外在的界面是否OK,只要求底层功能实现,同时逻辑正确(把盒子打开,去研究里面的源代码和程序结构。)
2.黑盒测试:这種测试就是指测试软件外在主体功能是否可用,完全不考虑程序内部结构和内部特性,注重于测试软件的功能需求,只关心软件的输入数据和输出数据
3.灰盒测试:介于二者之间(接口测试)
4.上述三种方法当中的“盒”指的就是被测对象。

----静态测试和动态测试

白盒测试、黑盒测试、灰盒测试,在实现测试方法上既包括了动态测试,也包括了静态测试。

按测试对象是否执行分类
1.静态测试:指的就是测试不执行。(开发出来的html和美工预期的html直接用肉眼看看是否相同即可)(指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误过程)
2.动态测试:将软件运行在真实的使用环境中进行测试。是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。)

----手动测试和自动化测试

按测试手段进行分类
1.手工测试:由测试人员手动的对被测对象进行验证,优点就是可以灵活的改变测试操作及环境。
2.自动化测试:所谓自动化主要有二种形,一种是自已写测试脚本,另外一种就是通过第三方的工具对被测对象进行测试。优点就是可以高效率的去执行一些人工无法实现的操作。

测试方法

黑盒测试(功能测试):边界值。等价类划分,因果图,决策表,错误推测法
白盒测试:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖

----黑盒测试(测试用例设计方法)(测试用例是怎么设计的)

1、等价类划分法:把程序的输入域划分为若干部分,从每个部分中选取少数、有代表性的数据作为程序输入的测试用例。

2、边界值分析法:配合等价类使用的,对范围的边界数据进行专门测试。一般情况下,需要对边界值(O和100)以及边界值两边的数(-1和1以及101和99)分别进行测试。

3、错误推测法:利用直觉和经验猜测出出错的可能类型,有针对性列举出程序中所有可能的错误和容易发生错误的情况,
像输入一些非法、错误、不正确和垃圾输入,输入空格、输入为空等等

因果图法:等价类和边界值没有考虑到输入的组合关系,因果图考虑的就是这个问题
用法:根据题目列出可能的输入和输出情况,然后对输入和输出各自进行条件的组合,把各自的组合关系列出来,然后就可以制成判定表了。

判定表驱动法:因果图只是一种辅助工具,通过分析最终得到判定表,再
通过判定表编写测试用例。但有时画因果图非常麻烦,影响测试效率,可以直接写判定表,进而编写测试用例。

判定表的组成
条件桩:问题的所有条件
动作桩:问题的所有输出
条件项:针对条件桩的取值
动作项:条件项的各种取值情况下的输出结果:
在这里插入图片描述
正交表法
使用最小的测试过程集合获得最大的测试覆盖率,不可能为每个输入组合
都创建测试用例时,可以采用这种方法。
特点:均匀分散
使用:它有正交表模板,根据你题目中的控件和取值个数去选取合适的模板,然后把数据映射到模板上就可以得到测试用例表了。如果说是混合正交表不能使用模板的话就要用正交表生成工具了。
在这里插入图片描述
场景法
模拟用户操作软件时的场景,主要用于测试系统的业务流程
当业务流程测试没有问题,也就是该软件的主要功能没有问题时,我们再重点从边界值、等价类等方面对控件进行测试
冒烟测试时也主要采用场景法进行测试
使用:
产品经理提供的业务需求就当成场景法的测试用例去测就行了,结果不一样的话提bug就可以了

--------测试方法的选择

通常在确定测试方法时,有以下几条参考原则:
(1)拿到一个测试任务时,先关注它的主要功能和业务流程、业务逻辑是否正确实现,考虑使用场景法。
(2)需要输入数据的地方,考虑采用等价类划分法,包括输入条件和输出条件的等价划分,将无限测试变成有限测试。
(3)在任何情况下都必须采用边界值分析法。这种方法设计出的测试用例发现程序错误的能力最强
(4)如果程序的功能说明中含有输入条件的组合情况,则一开始就应考虑选用因果图和判定表法。
(5)对于参数配置类的软件,需要考虑参数之间的组合情况,考虑使用正交排列法选择较少的组合方式(最少的测试南例获得最大的的测试覆盖率).
(6)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,则应当再补充更多的测试用例。
(7)采用错误推断法再追加测试用例—依靠测试工程师的经验和智慧

--------功能测试和性能测试的区别是什么?

1)测试目的:

功能测试:检测实际软件的功能是否符合用户需求,测功能是不是全部实现,某个实现是不是有BUG。主要为了发现以下几类错误:A、是否有不正确或遗漏的功能?B、功能实现是否满足用户需求和系统设计的隐藏需求?C、能否正确接收输入?能否正确输出结果?

性能测试:验证软件质量的三个质量特性,可靠性,正确性和效率。主要是测试产品的健壮性

2)测试方式:

功能测试按照系用例,按照系统需求说明书和测试用例,对产品的功能一步步进行测试。找出产品功能是否全部实现

性能测试:一般都使用性能工具对产品的健壮性进行评估。通过创建场景和虚拟用户模拟真实环境,进行压力测试和负载测试。

--------负载测试和压力测试?

性能测试包括压力测试和负载测试,测试的是不同负载条件下系统的各项性能指标,如吞吐量、响应时间、点击率等。

负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题。负载测试更多地体现了一种方法或一种技术。

压力测试可以被看作是负载测试的一种,即高负载下的负载测试。查看应用系统在峰值使用情况下操作行为,从而有效地发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。压力测试分为高负载下的长时间(如24小时以上)的稳定性压力测试和极限负载情况下导致系统崩溃的破坏性压力测试。

通过压力测试可以更快地发现影响系统稳定性的问题。例如,在正常负载情况下,某些功能不能正常使用或系统出错的概率比较低,可能一个月只出现一次,但在高负载(压力测试)下,可能一天就出现,从而发现有缺陷的功能或其它系统问题。通过负载测试,可以证明这一点,某个电子商务网站的订单提交功能,在10个并发用户时错误率是零,在50个并发用户时错误率是1%,而在200个并发用户时错误率是20%。
负载测试是为了发现系统的性能问题,负载测试需要通过系统性能特性或行为来发现问题,从而为性能改进提供帮助,从这个意义看,负载测试可以看作性能测试的一部分。但它们两者的目的是不一样的,负载测试是为了发现缺陷,而性能测试是为了获取性能指标。因为性能测试过程中,也可以不调整负载,而是在同样负载情况下改变系统的结构、改变算法、改变硬件配置等等来得到性能指标数据,从这个意义看,负载测试可以看作是性能测试所c的一种技术,即性能测试使用负载测试的技术、使用负载测试的工具。性能测试要获得在不同的负载情况下的性能指标数据。

负载测试是通过改变系统负载方式、增加负载等来发现系统中所存在的性能问题。负载测试是一种测试方法,可以为性能测试、压力测试所采用。负载测试的加载方式也有很多种,可以根据测试需要来选择。
性能测试是为获取或验证系统性能指标而进行测试。多数情况下,性能测试会在不同负载情况下进行。
压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。

----白盒测试

黑盒主要是根据业务需求来设计的输入,白盒则根据系统的内部实现设计的输入,它的主要目标是覆盖更多的代码

只适用于单元测试阶段

优点:代码覆盖率高
缺点:覆盖所有代码路径难度大、业务功能可能覆盖不全、测试开销大(手工测,费人力;自动测,代码量大)

测试设计方法:
在这里插入图片描述

静态:测试过程中不执行程序,即不执行代码进行测试

  • 手工方法:
    桌面检查(交叉检查)(a写的代码给b检查,b写的代码给a检查)、
    代码审查(相对正式,以会议的形式进行检查,由开发讲解自己的代码,下面的开发和测试听,然后提意见)、
    代码走查(也要开会,形式是测试人员提前准备好测试用例看看程序的走向如何,人工来计算查看数据的走向)

  • 自动化方法:
    自动化工具,进行代码的扫描

动态:执行代码进行测试

方法有:
逻辑覆盖法:是通过对程序逻辑结构的遍历实现程序约覆盖。
基本路径测试法:在程序控制流图的基础上,通过分析程序的环路复杂性,导出基本可执行路径集合,从而设计测试用例


逻辑覆盖法具体有:

语句覆盖:设计浏试用例,使得程序中每条语句至少被执行一次
缺点:语句覆盖不能准确的判断运算中的逻辑关系错误。
在这里插入图片描述

判定覆盖:也叫分支覆盖,设计测试用例,使得程序中的每个判断的“真”和假"都至少被执行一次。即:程序中的每个分支至执行一次。
缺点:判定覆盖会忽略条件中取或(or)的情况。
在这里插入图片描述

条件覆盖:设计测试用例,使得判定中的每个条件至少有一次取真值,有一次取假值。
缺点:条件覆盖并不能保证判定覆盖。
在这里插入图片描述

判定条件覆盖:满足100%判定覆盖和100%条件覆盖的标准
缺点:会忽略条件中取或(or)的情况。
在这里插入图片描述

条件组合覆盖:设计测试用例,使得被测试程序中的每个判定中条件结果的所有可能组合至少执行一次。
缺点:条件组合覆盖不能保证所有路径被执行
在这里插入图片描述

路径覆盖:设计测试用例,覆盖程序中所有可能的路径
缺点:满足路径覆盖,并不一定能满足条件覆盖,也就不能满足条件组合覆盖。并且实际过程中的循环是无法用这个方法的,工作量巨大。
在这里插入图片描述


在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设计用例一般使用基本路径测试,重点模块使用多种覆羕率标准

请简述黑盒测试和白盒测试的优缺点

黑盒测试优缺点

优点
・对测试人员要求不高
・执行起来较简单,不需要了解程序内部的代码及实现
・能够谝历说明书中全部的功能;
・可以方便的测试复杂逻辑的程序功能

缺点:
・不可能进行穷举测试
・不可能进行覆盖所有代码的测试
・测试的正确率依赖于需求文档说明书,但是该文档也是人为编写的,存在一定的风险

白盒测试优缺点

优点
・迫使测试人员去仔细思考软件的实现
・可以检测代码中的每条分支和路径
・揭示隐藏在代码中的错误
・对代码的测试比較彻底
・让软件最优化

缺点
・昂贵
・无法检测代码中遗漏的路径和数据敏感性错误
・不验证规格的正确性

----灰盒测试

介于白盒测试与黑盒测试之间的测试。灰盒测试关注输出对于输入的正确性;同时也关注内部表现,但这种关注不像白盒测试那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态。
测试者知道系统组件之间是如何相互作用的,但对组件内部程序功能和运作缺乏了解。

灰盒测试的优点
①相对于白盒测试,灰盒测试成本低;
②引入了自动化技术,提高测试效率,规范测试流程;
③能够进行基于程序路径的覆盖测试,保证软件质量。

灰盒测试的缺点
①投入的时间比黑盒测试多20%-40%;
②对测试人员的要求相对较高;
③不适用于简单的系统,成本高,性价比低。

----自动化测试

概念:让程序代替人为去验证程序功能的过程

21伪为什么要进行自动化测试?能解决哪些问题?
1.解决-回归测试
2.解决-压力测试
3.解決-兼容性测试
4.提高测试效率,保证产品质量
回归测试:项目在发新版本之后对项目之前的功能进行验证;(并不是所有项目都要回归测试,但是和金融、火箭相关的就一定要,因为很精细)
压力测试:可以理解多用户同时去操作软件,统计软件服务器处理多用户请求的能力
兼容性测试:不同浏览器(IE、 Firefox chrome)等等

自动化测试在什么阶段开始?
功能测试完毕(手工测试
手工测试:就是由人去一个一个输入用例,然后观察结果;

站在代码可见度而言
自动化测试所属分
1.黑盒测试(功能测试)
2.灰盒测试(接口测试)
白盒测试(单元测试)
提示:web自动化测试属于黑盒测试(功能测试)

优点
1.较少的时间内运行更多的则试用例
2.自动化脚本可重复云行;
3.减少人为的错误;
4.测试数据存储

缺点
1.不能取代手工测试(比如登录框本来是要验证输入是否有用的,结果因为界面打不开而自动提交bug了)
2.手工测试比自动化测试发现的缺陷更多;
3.测试人员技腰要求;
误区:
1).自动化测试完全替代手工测试
2)·自动化测试一定比手工测试厉害
3).自动化可以发掘更多的BUG

3.自动化测试分类
1.web-(UI)自动化测试(本阶段学习)
2.接口-自动化测试
3.移动(app)-自动化测试
4.单元测试-自动化测试

测试工具

接口测试工具: Jmeter, postman, robotframework
性能测试工具: Jmeter, loadrunner
U测试: Selenium

测试用例设计

添加链接描述

开放性问题

为什么需要软件测试?

1.一款软件从无到有会经历很多的开发阶段由不同的人来参与开发,所以最终产出的软件功能可能会存在问题。因此为了保证软件的功能是可用的,我们必须要进行测试。
2.当前的软件件行业已经不在是功能为王了,用户不仅仅只盯看软件的功能是否满足需求还会对软件是否容易上手,执行效率是否OK……等一系列其它体验都有了更高的要求,所以这也需要我们对软件进行大量的测试。

测试人员需要的能力?(需要的素质?)

硬技能方面,第一计算机知识,包括操作系统,数据库,通讯协议原理,熟悉至少一门编程语言;
第二软件测试知识,包括各种测试理论,测试方法,测试用例编写,缺陥跟踪流程,软件质量评估等;
第三产品业务分析能力,熟悉所測产品的一些隐藏需求或者功能

软技能方面,像沟通能力、做事严谨耐心、富有责任心、对被测产品具有怀疑与破坏的精神、另外还要善于自我总结、自我督促。

为什么做测试不做开发?你怎么看测试?你做测试的优点是什么?

因为喜欢测试,我从来不觉得测试不如开发!
测试的过程又是一个学习和思维进一步发散的过程,一直引领人往前探索,很有吸引力。我喜欢玩解谜类的益智游戏,我感觉测试和解谜游戏是一样的,都有一个从观察到推演,到尝试,到归纳再到发现的一个过程。
我觉得其实测试需要比开发拥有更加全面的技术,好的测试不仅要会做测试,还要懂代码的内部实现,还要有产品、业务的意识;
测试和开发是两个关注点不一样的工作。开发的目标是实现功能,测试的目标是确定功能是否能够正常运作。那么它的乐趣在哪里?简单地说是两个关键词:“发现”和“分析”。
我很喜欢一句话就是:
有的人喜欢创造世界,所以他们做了开发
有的人喜欢拯救世界,所以他们做了测试

测试和测试开发的区别?为什么不做测试开发?

测试人员不需要有太强的编程技术,普通应用或是代码段能看懂就行。思考问题时要全面、细致、有原则,对产品敏感,不能跟着开发和产品走,这是测试人员的基本要求。 测试开发人员需要写测试工具,自动化测试代码,具备一定的开发编码能力,虽然不像开发那样深入地掌握一种编码语言,但对于脚本语言还是要有所掌握,比如:Java、Python

为什么开发不测还要找人测?

每个公司的的项目都有严格的开发进度,开发部门忙于实现功能的时候,我想没几个产品经理会同意频频打断开发的进度要求停下来做bug分析。

而且专人做专事质量更加有保障,开发大多数的时间都是在思考如何实现具体的软件功能,怎样把功能做对,怎样让用户去用这个功能,测试则每天想的是如何提高软件质量,我要向的是每天要以怎样的奇葩的方式去用这个软件,而我们想的是用户怎么把这个功能用错

举例,就好像生产电脑,开发想的是怎么开机关机,测试想的是要是有人把笔记本360度折叠怎么办

而且从测试力度的角度来说,对于开发来说,自己写的东西就是最好的,测起来就不会这么狠,毛病就不会挑的这么多

你发现的bug,开发人员不觉得是bug咋办?

首先确认开发环境是否跟自己的测试环境一致,排除因环境或者业务理解不一致而产生的错误bug。确认是bug后,和开发保持有效的沟通。重要程度高的bug,去找相关的需求规格说明书、概要设计文档等,确认这个功能是否与文档不一致,把bug描述清楚,尽量做到无歧义无冗余步骤,bug按照操作步骤可以复现,难以复现的截图下来和开发进行讨论。如果开发还不接受,就找项目经理或者产品沟通。
如果这个bug是个重要程度较低的,你可以优先测试其他功能,暂时不需要花大量时间去说服开发修改,有时间再进行集中跟进。

说一个印象最深的 bug?(项目中遇到什么难题?)

在我负责的这个入库模块里,有一个入库数量的文本框。
我测的时候,发现它只能接受数字,不能接受字母,也不能为空。
你按键盘下去再松开键盘按钮它会消失刚才输入的字母。然后我看了它的源码,开发写的是他给这个文本框定义了一个事件onkeyup,他用了一个replace函数对输入的字母用正则表达式替换成了空字符串。
然后如果你在这个框里不输入数据进行提交的话它会弹出一个提示让你输入,不能为空。
一开始测的时候,不能接受字母和非空测试没问题。当时就觉得说这个文本框通过测试。
到后面系统开发差不多了,我再复测一遍。那次我记得我当时一直按着一个字母a键,想着说看松开能不能通过不能接受字母的测试,后面不小心鼠标点到了文本框的外面,那一连串的a被输入到输入框里了,没有消失。我当时就很兴奋,那我这不是绕过了它的前端检验吗。我就提交,发现系统报错了。然后我就去看数据库,看了它的表的结构,它对应表的属性是整型,不能接受字母很正常。然后我觉得说可能是后端没有校验,直接接受前端的数据传给数据库导致失败。
我就突发奇想,再找一种绕过前端的方式看看是不是后端真的没有进行校验。我就打开开发者工具对表单校验进行一个http请求的抓包。在输入一个有效值提交后,找到它的请求文件里的请求头,因为它请求的方法是get,请求的参数明文显示在url里。我把刚才输入的值删掉然后直接在开发者工具里进行重发,绕过前端页面,然后看数据库果然保存了一个空值。证明了后端没有校验,不然它会给我返回错误消息什么的。
这也给了我一个思路,表单提交的时候不仅要测前端,还要测后端
(其实非空验证直接空值提交然后抓包的时候它不会产生任何请求文件,这也说明了没有进行http请求过程,也就是说这个非空校验是前端校验)

对自己的职业规划?

如果有幸入职咱们公司
1年内先做好本职工作、积累业务知识;
2-3年时间希望能完成公司项目的自动化架构,实现自动化测试;
目前我已经开始在研究学习 Python编程及编写自动化测试脚本;
3-5年的时间,希望能在技术上面上升到测试开发,能自己独立开发测试平台及工具,为公司带来更大价值。

加班的看法?

加班我觉得主要是两种情況。
第一种,工作效率低不得不通过加班来完成工作任务,像这种加班我会尽可能提高自己的工作效率,不做无意义的加班。
另外一种,像发版日、紧急任务需要加斑这种情況的加班会义不容辞。

如果开发比较闲,公司只有你一个测试,怎么支配开发帮忙?

首先,单元测试开发来做,另外开发结束后,进行冒烟测试,冒烟覆盖了一部分测试用例,如果冒烟通过,那很多测试也就解决了。

平时都是怎么学习测试的?

看视频入门,对原理有不懂的地方看书

你平时看什么书?

《软件测试的艺术 (原书第 3 版) 》
《高性能 MySQL》
《Java编程的逻辑》

如果没网,可能是什么原因造成的?

一、使用的是有线网线
1、路由器数据堵塞,一般重启路由可以解决;如果重启仍不能解决,可能是运营商的问题了,及时电话咨询;
2、自身电脑问题,连接有线网的情况,这种情况很少见;

二、连接的是无线网
1、路由器问题,重启路由试试;也不排除线路问题;
2、无线接收器问题,看灯闪烁是否正常,可以尝试拔队,重新插上;
3、也可以尝试把无线禁用,然后重新开无线网络;
4、重新安装无线网驱动试试;

如果输入一个url,没有访问到你预期的网站,原因可能是什么

(我答的是 1.DNS坏掉了,修改自己的ip为8.8.8.8试试 2.网断了 3.服务器拒绝访问 4.请求/响应在网络传输中途被劫走)

软件测试问题定位分析

(即不要一有什么事就提bug,像网页打不开你也提bug,至少你要问题定位分析过后,要提一个具体是什么原因导致的bug)

软件问题分析的两个方向(软件缺陷的方向,并不一定软件错误就说bug,软件配置方向也是bug)
业务方向:用户需求(显性+隐形):使用用户场景
技术方向:软件架构(系统设计+环境部署):运用IT技术

实战案例分析

问题描述:通过 Windows上的浏览器,访问部署在 Linux系统的Web网站,发现网站无法访问?
・实战操作:该如何分析与定位问题?

步骤:
网络(客户端+服务端):先看看浏览器端有没有连上网,能不能打开其他的网站
是否设置代理(浏览器有没有代理上网)
査看DNS解析正确?(开其他的网站看一下,或是直接打ip上去看看)
网址是否正确,有没有urI重定向、换其他浏览器
数据库
能不能ping通服务器lP
【以上鉴别完客户端没有问题】
web文件是否存在(cd /var/www/html,进到文件夹里看看有没有你的html)
服务器本机能不能打开(用服务端的浏览器打开网页看一下)
看看能不能ping通外面(ping一下百度看一下)
【以上鉴别完基本的服务端没有问题】

在这个过程中会不会有东西丢失了?抓个包看一下,可以用tcpdump -v port 80:看大于小于号就行,左边是客户端windows,右边是服务端linux,看到抓到的消息全都是>号,说明只有win给linux,没有linux给win,即只有请求,没有响应
在这里插入图片描述
现在可说明,是操作系统(进阶的服务端)阻碍了数据的出去,即防火墙

看看防火墙有没有运行:service iptables status,把防火墙关了试一下看看

确定是防火墙问题后不能直接粗暴地关闭它,因为会有安全问题

你改一下防火墙的规则即可。但又不能直接在命令行敲,因为服务器重启你这条规则就没有了。加到防火墙的配置文件里即可

现在你可以提bug了,运维或开发人员没有把防火墙设置好,导致服务器在外面访问不了

参考:添加链接描述

其他:
错误代码(网页显示什么错误代码)
端口号检査(80号端口)
服务器日志信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试——测试基础理论 的相关文章

  • Windows有CUDA但是没有nvcc命令

    明明有CUDA xff0c 但是cmd中输入nvcc V无效 但是如果打开anaconda prompt xff0c 输入nvcc V就有效 这可能是因为直接用的pytorch官网命令conda下载安装的 xff0c 然后又没有把anaco
  • win下配置pytorch3d

    一 配置好的环境 xff1a py 3 9 43 pytorch 1 8 0 43 cuda 11 1 cudnn 8 0 43 pytorch3d 0 6 0 43 CUB 1 11 0 你可能觉得pytorch3d 0 6 0版本有点低
  • 【pytorch3d】running build_ext error: [WinError 2] 系统找不到指定的文件

    在win10上安装pytorch3d时 xff0c 遇到如下错误 xff1a running build ext error span class token punctuation span WinError span class tok
  • windows下安装jax

    一 首先下载jaxlib 需要去这个非官方网站去找到适合自己的版本 xff0c 下载到本地 然后使用对应的虚拟环境pip install 该文件名即可 二 然后下载对应的jax 一行命令即可 pip span class token fun
  • STM32 HAL库串口收发数据

    STM32 HAL库串口收发数据 许多传感器的使用方法是 xff1a 单片机给传感器发送一帧数据 xff0c 然后传感器返回单片机一帧有用数据 xff0c 所以串口的收发功能十分重要 STM32cubeMX的配置 时钟和下载方式就不讲了 串
  • W7,显卡型号nvidia geforce 840M,安装tensorflow-gpu

    记录一下 xff0c 以防忘记 1 首先我拿驱动精灵把显卡驱动升到最新 xff0c 然后在NVIDIA 控制面板里查看支持CUDA9 1 xff0c 但是我下载了CUDA9 0 43 cudnn7 0 xff0c 先不用安装 注意 xff0
  • IP和MAC的作用

    IP地址的作用以及MAC地址的作用 MAC地址是一个硬件地址 xff0c 用来定义网络设备的位置 xff0c 主要是数据链路层负责 IP地址是IP协议提供的统一的地址格式 xff0c 为互联网上的每一个网络和每一台主机分配一个逻辑地址 xf
  • SPI简介

    SPI全称是Serial Perripheral Interface xff0c 也就是串行外围设备接口 SPI是Motorola公司推出的一种同步串行接口技术 xff0c 是一种高速 xff0c 全双工的同步通信总线 SPI时钟频率相比I
  • npm 错误码 EMISSINGARG

    EMISSINGARG Error npm ERR node v6 6 0 npm ERR npm v3 10 3 npm ERR code EMISSINGARG npm ERR typeerror Error Missing requi
  • axios.response返回数据格式

    axios response接口中存储的是如下内容 xff1a 96 data 96 是服务器的提供的回复 xff08 相对于请求 xff09 data 96 status 96 是服务器返回的http状态码 status 200 96 s
  • flask实现下载文件、前后端

    采用前后端分离的过程中 xff0c 前端只能下载静态文件中的文件或者url下载文件 但是 xff0c 一般情况下文件要么是远程或者存在于其他文件夹 这种情况就需要采用后端预先下载文件 xff0c 传递给前端 flask有几种文件传输方式 x
  • python+flask 简单并发,使用gevent库

    pip install geventfrom gevent wsgi import WSGIServer 关键这个WSGIServer 127 0 0 1 5000 app serve forever
  • java中Array.remove()方法,源码中不对负索引进行检查

    public E remove int index 检查remove源码是 xff0c 发现 其中对index 的检查仅限于上溢出检查 没有显示的对下溢出进行检查 xff1f rangeCheck index modCount 43 43
  • java- 类名.this.成员 和 this.成员 的区别

    this 成员 xff1a this用于本类中 xff0c 自身的引用 xff0c 调用自身对象属性 类名 this 成员 用于内部内 xff0c 调用外部类的成员 用 外部类 this 表示外部类的引用 xff0c 用以 和 自身类进行区
  • java异常 Exception in thread “main“ java.lang.IllegalArgumentException: Comparison method violates its

    Exception in thread 34 main 34 java lang IllegalArgumentException Comparison method violates its general contract at jav
  • 速查matplotlib-python中画图曲线的形状和颜色

    速查matplotlib python中画图曲线的形状和颜色 在属性值先写颜色 xff0c 后写形状如 xff1a r 红色曲线 b 蓝色短横线 等 字符描述 39 39 实线样式 39 39 短横线样式 39 39 点划线样式 39 39
  • python-pyplot直方图,标注直方图数据

    话不多说 由于自己一直忘记直方图的一些细节 xff0c 经常不用 xff0c 老得百度 xff0c 干脆自己记下来好了 这是直方图的写法与标注直方图的数据写法 如下 from matplotlib import pyplot as plt
  • 从零开始学JetsonTX2----can bus开发

    step by step implementation 搞硬件开发 xff0c 先把技术手册搞到手 这个网页把几乎Jetson tx2的开发资料都汇总了一下 找教程开始配置can所需要系统环境 NIVIDA社区的教程 xff1a https
  • CAN总线详解

    目录 CAN 协议简介1 xff0c 何为CAN 1 1 CAN的应用实例1 2 总线拓扑图1 3 CAN的特点 2 xff0c CAN 电气属性3 xff0c CAN 协议3 1 数据帧3 2 遥控帧3 3 错误帧3 4 过载帧3 5 间

随机推荐

  • 内存对齐规则总结

    由于某些硬件平台不能任意访问地址数据 xff0c 只能在某些地址处取某些特定类型的数据 xff1b 并且处理器访问未对齐的内存时 xff0c 需要多次读取并对多余数据进行剔除 xff0c 相较于对齐内存访问 xff0c 耗费了更多的时间 x
  • 一些常用库的使用(CMAKE部分)

    opencv span class token function find package span span class token punctuation span OpenCV span class token number 3 1
  • 将RTKLIB编译成静态库

    rtklib编译 在写自己的程序时 xff0c 想要调用rtklib h xff0c 和它的一些文件来进行运行 xff0c 想要将rtklib编译成静态库安装在系统的目录下 xff0c 这样基于rtklib的二次开发就不用再使用源码了 xf
  • TIM_SetCompare2()

    对于 void TIM SetCompare2 TIM TypeDef TIMx uint16 t Compare2 的理解 void TIM SetCompare2 TIM TypeDef TIMx uint16 t Compare2 C
  • C语言语句YPR[0]=(BUF[1]<<8|BUF[2]),以及 >> 8 &0xFF如何理解?

    C语言语句 YPR 0 61 BUF 1 lt lt 8 BUF 2 如何理解 这是一个赋值语句 xff0c 把等式右边的值赋给左边 xff1b 先来看右边是怎么运算的 xff0c 由于移位运算符 lt lt 的优先级大于位运算符 xff0
  • word文档编辑时字体突然发生变化解决方法

    word文档在编辑时字体突然发生变化 xff0c 第1步 点击 开始 xff0c 图片中右下角 箭头 第2步 选择需要的字体 xff0c 第3步 设置默认字体 xff0c 确定
  • AD(Altium Designer)如何铺铜

    在PCB PcbDoc文件中 xff1a 在软件下方选择 34 Top Layer 顶层 34 xff08 1 xff09 执行 34 放置 34 gt 铺铜 xff1b 或者快捷键 34 PG 34 会弹出 34 Properties 属
  • 嵌入式硬件-读懂原理图

    学习硬件的第一节课 学习读懂原理图 读懂原理图对嵌入式软件工程师和程序员尤为重要 在深入细节之前请注意 对所有的嵌入式设计人员来说 能懂得硬件工程师创建和使用的来描述其硬件设计的原理图和符号是非常重要的 无论硬件设计得多么复杂 不管有多少设
  • 校招行测笔试-图形推理

    校招行测笔试 图形推理 面对校招笔试的行政能力测试 xff08 简称 行测 xff09 环节 xff0c 刚开始接触有些束手无策 摸不到头脑 xff0c 其实是有技可循的 xff0c 本文就帮助大家总结一下行测的相关技巧 如果对你有所帮助
  • 统一建模语言UML详解附思维导图

    UML图 概述 构成 事物 Things xff1a UML模型中最基本的构成元素 xff0c 是具有代表性的成分的抽象 构件事物 xff1a UML模型的静态部分 xff0c 描述概念或物理元素 类 xff1a 具有相同属性相同操作 相同
  • 比特率与波特率

    比特率 xff1a 单位 Bps bit per second xff0c 即每秒传输的 bit 数 波特率 xff1a 单位 Baud xff0c 即每秒传输的 码元 数 这里涉及到码元 码元 xff1a 持续一段固定时间的通信信道有效状
  • 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了 xff0c 本贴精心汇总了一些嵌入式相关资源 xff0c 包括但不限于编程语言 单片机 开源项目 物联网 操作系统 Linux 计算机等资源 xff0c 并且在不断地更新中 xff0c 致力于打造全网最全的
  • 嵌入式系统QNX概述-微内核架构进程管理安全性

    一 微内核架构 QNX操作系统由微内核以及一组协作的系统服务进程组成服务进程与操作系统内核是相互隔离开的 当服务进程出问题时并不会影响内核微内核提供软件总线供各个软件模块进行通信和协作内核只提供最小化的基础 公共服务高度模块化设计带来良好的
  • 三万字长文总结C语言规范

    1 头文件 若包含了头文件aa h xff0c 则就引入了新的依赖 xff1a 一旦aa h被修改 xff0c 任何直接和间接包含aa h代码都会被重新编译 如果aa h又包含了其他头文件如bb h xff0c 那么bb h的任何改变都将导
  • 操作系统概述

    Overview Q1 xff08 Why xff09 为什么要学操作系统 xff1f Q2 xff08 What xff09 xff1a 到底什么是操作系统 xff1f Q3 xff08 How xff09 xff1a 怎么学操作系统 x
  • 小白自学PIX飞控学习笔记

    小白自学PIX飞控学习笔记 xff08 二 xff09 接触飞控什么是MCU xff1f PIX飞控与MCU xff1f 无人机飞控的作用飞控内部如何实现其功能 xff1f 接触飞控 作为未入门 小白 一枚 xff0c 也只是简单地接触过C
  • Nestjs 返回req报错

    返回req存在循环引用 报错 ERROR ExceptionsHandler Converting circular structure to JSON gt starting at object with constructor Sock
  • 设计方法的选用

    六大原则 创建好了之后算法不常变的 xff0c 比如计算器的加减乘除逻辑 xff0c 就可以用简单工厂模式 要是像商场收银机对打折等促销的处理 xff0c 若用简单工厂模式也可以 xff0c 不过要在工厂内创建多个具体的打折方案 xff0c
  • XXX测试用例设计?XXX怎么测试?(行李箱、电梯、水杯、笔、椅子)

    首先要知道 xff0c 答案要从下面6个方向考虑 xff1a 功能测试 界面测试 易用性测试 兼容性测试 安全性测试 性能测试 其次 xff0c 在回答问题前要向面试官表明 xff1a 我不知道XXX的具体需求 xff0c 所以会以我认知的
  • 面试——测试基础理论

    测试先导性知识 测试是什么 xff1f 在规定的条件下对程序进行操作去发现错误 xff0c 然后对软件质量进行评估的一个过程 需要注意的是 xff0c 软件是由文档 数据以及程序组成的 xff0c 所以对软件测试应该包括 xff1a 软件形