面试官:我用10个问题,淘汰了80%的 “ 软件测试 ” 面试者......

Posted test_二黑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试官:我用10个问题,淘汰了80%的 “ 软件测试 ” 面试者......相关的知识,希望对你有一定的参考价值。

  • 想在面试、工作中脱颖而出?
  • 想在最短的时间内快速掌握 软件测试 的核心基础知识点?
  • 想要成为一位优秀的 软件测试工程师?

本篇文章能助你一臂之力!

正所谓万丈高楼平地起,只有把基础掌握的牢固,才能走的更远,面对不断更新的技术才能快速掌握,同时在面试、工作中也更能脱颖而出!

说明:以下所有答案均为个人的理解和网上的一些资料的整合

另外本人整理了20年面试题大全,包含功能、接口、自动化、测开等方面总结,需要的话可以关注公众号:程序员二黑,免费获取!

1、如果给你一个网站,你该如何测试?

(PS:关于这个问题,相信在很多技术面试时,大家都碰到过。但,还是有很多小伙伴留言说自己描述不清楚,或者一紧张就忘了其中的步骤。今天就给大家再梳理一次。)

第一步,我们要查找需求说明书、产品说明、设计文档等,逐一分析测试需求点;

第二步,通过需求分析,制定合理的测试范围、测试策略及实施方案。

第三步,设计测试用例。我们可以通过分解测试内容,针对性设计用例。举个例子。如果我们要做功能测试,就需要测试链接、媒体元素、界面、页面布局、插件、文字等内容。包括但不限于:

  • 链接是否正确跳转;
  • 是否存在空页面和无效页面;
  • 是否有不正确的出错信息返回;
  • 页面是否风格统一、美观;
  • 多媒体元素是否可以正常加载;
  • 控件是否正常使用;
  • 页面布局是否合理,重点内容和热点内容是否突出;等等。

2、在测试某个项目时,你发现了一个系统bug,但开发工程师不认为这是个bug。对于这种情况,你应该怎么解决?

答:首先本着解决问题的态度,再次跟开发组的成员沟通。如果对方依然认为这个问题可以忽略,而自己仍觉得有必要深究,那么,我将做出以下处理。

首先,将问题备案。填好bug清单,并提交到缺陷管理库中;

其次,通过软件需求说明书、产品说明、设计文档等,甄别缺陷判断依据。这里面,主要有这几项需要注意:

  • 1、是否存在实际结果与预期效果不一致的地方;
  • 2、如果以上说明书没有判断bug的依据,我们可以考虑根据以往经验,按照同类产品的一般特性,来判断是否为缺陷。或站在用户角度来判断;
  • 3、是否可以通过设计人员、或者使用方,充分探讨,得出结论;
  • 4、如果上述3种方法均不奏效,可以向测试经理客观、合理地论述自己对此问题的看法,让测试经理来衡量这个问题的严重性。如果测试经理也无法判断,还可以向公司决策层反应,让他们来决定如何处理这个问题。

3、如果要给APP做安全测试,应从哪几个方面去测?

关于这个问题,首先我们要明确,系统不同,安全性指标也不同。我们应该根据系统安全指标去调整测试策略。软件安全性测试主要包括程序、数据库两部分。由此,我们的测试方案,大致如下:

1)在处理用户认证安全性问题时,我们要考虑的问题主要有:

  • 是否可以明确区分系统内不同用户的权限;
  • 系统内是否会出现用户间的冲突;
  • 用户登陆密码是否存在漏洞,是否可见、可复制,是否会因特殊字符串,出现“万能密码”的情况;
  • 是否可以通过绝对途径登陆系统(简单说就是,是否可以通过拷贝用户登陆页面的链接,直接进入系统);
  • 用户是否可以使用后退键,而不通过输入口令进入系统;
  • 用户退出系统后,是否可以删除足迹(包括账号密码、浏览痕迹、缓存等);

2)在处理系统网络安全问题时,要考虑问题:

  • 当受到非授权用户攻击时,防护系统是否坚固;
  • 采用成熟的网络漏洞检查工具(即:专业的黑客攻击工具,例如NBSI系列和 IPhacker IP 等)检查,系统是否存在相关漏洞;
  • 确认系统补丁是否已就绪,系统防护措施是否已装配;
  • 采用各类木马,确认系统木马情况是否良好;
  • 采用各种防外挂工具,确认系统各组程序是否存在外挂漏洞,等。

3)数据库安全考虑问题:

  • 确认系统数据是否独立,是否可管理;
  • 确认系统数据是否完整;
  • 确认类似银行的软件系统,机密性是否良好;
  • 确认数据是否可备份,是否可恢复等。

4、什么是测试用例?什么是测试脚本?两者的关系是什么?

1)测试用例

简单来说,测试用例就是一组条件或变量,它是为实施测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的集合。测试者用它来确定软件或系统是否正常工作。

对于不同的测试项目而言,我们需要不一样的测试用例,来确保项目的顺利推进。

软件测试用例的基本要素,包括:用例编号、测试标题、重要级别、测试输入、操作步骤、预期结果。这其中:

  • 用例编号:对于测试用例的编号来说,它是有一定规则的。因为,它存在的主要目的是便于查找,以及便于跟踪。
  • 测试标题:它是对测试用例的描述,用于明确测试用例的用途。例如,测试用户登录时输入错误密码时,软件的响应情况。
  • 重要级别:定义测试用例的优先级别,可以笼统的分为 “ 高 ” 和 “ 低 ” 两个级别。而在实际工作中,我们一般将它划分为5级。
  • 测试输入:提供测试执行中的各种输入条件。这里需要注意的是,测试用例的输入,对软件需求当中的输入有很大的依赖性。如果软件需求中,没有很好的定义需求的输入,那么测试用例设计中会遇到很大的障碍。
  • 操作步骤:提供测试执行过程的步骤。
  • 预期结果:提供测试执行的预期结果。预期结果应该根据软件需求中的输出,得出结论。

2)测试脚本

测试脚本一般是指,一个特定测试的一系列指令。这些指令可以被自动化测试工具执行。测试脚本是自动执行测试过程(或部分测试过程)的计算机可读指令。测试脚本可以被创建(记录)或使用测试自动化工具自动生成,或用编程语言编程来完成,也可综合前三种方法来完成。

3)两者关系

简单来说,测试脚本是测试用例中,自动化测试的部分。脚本的编写,必须对应相应的测试用例。

5、你对测试最大的兴趣在哪里?为什么?

关于这个问题,几乎所有的测试面试都会问到。而这个问题的回答,也没有固定的答案,大家可以根据自己的理解和代入感,去进行表述。但值得注意的是,回答一定要诚恳,要符合自身的性格特点,不要让别人觉得你虚伪或者自以为是。

下面给大家整理了一些回答的方向,大家可以参考着进行自我描述。

  • 1)测试工作是个严谨的工作。对于个人而言,可以提升个人逻辑思维及归纳总结问题的能力,等。
  • 2)表明你做测试的目的是为了提升能力,也是为了将来成为更好的测试工作者,或者为将来转测试开发工程师做准备等;
  • 3)表示你对数据库方向的测试非常感兴趣,并且希望通过目前的工作,提升自己的数据库掌握能力。

切忌过多表达自己对企业的某一业务感兴趣,比如,你对企业的某一游戏软件感兴趣。一旦你过多的表达,很可能面试官会认为你只想在企业工作一阵子,或是觉得你还很“嫩”,对你的薪资待遇还可以压缩。

6、说下python的内存管理和垃圾回收机制

python的内存管理机制有三种:引用计数、垃圾回收、内存池。

引用计数:引用计数是一种非常高效的内存管理手段,当一个pyhton对象被引用时其引用计数增加1,当其不再被引用时引用计数减1,当引用计数等于0的时候,对象就被删除了

垃圾回收:引用计数、标记清除、分代回收
内存池:Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。

另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。

也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

7、请讲一下协程的原理

运用协程机制最典型的场景就是异步IO。所谓异步,是指一段程序在执行完成前有能力“暂停”,让其他程序段执行。

从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数,所以总体上在协程中把yield看做是控制流程的方式。

协程是一个特殊的生成器,yield有返回值>生成器,yield没有>协程(没返回值就是协程)

8、说一下hash算法与哈希冲突

哈希算法:根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上的算法。也称为散列算法、杂凑算法。

哈希表:数据经过哈希算法之后得到的集合。这样关键字和数据在集合中的位置存在一定的关系,可以根据这种关系快速查询。
非哈希表:与哈希表相对应,集合中的 数据和其存放位置没任何关联关系的集合。
由此可见,哈希算法是一种特殊的算法,能将任意数据散列后映射到有限的空间上,通常计算机软件中用作快速查找或加密使用。

哈希冲突:由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。

9、字典的原理

python中的字典底层依靠哈希表(hash table)实现, 使用开放寻址法解决冲突。
哈希表是key-value类型的数据结构, 可以理解为一个键值需要按照一定规则存放的数组, 而哈希函数就是这个规则。

字典本质上是一个散列表(总有空白元素的数组, python至少保证1/3的数组是空的), 字典中的每个键都占用一个单元。

一个单元分为两部分, 分别是对键的引用和对值的引用, 使用hash函数获得键的散列值, 散列值对数组长度取余, 取得的值就是存放位置的索引。

哈希冲突(数组的索引相同), 使用开放寻址法解决。

这也是python中要求字典的key必须可hash的原因。
数组中1/3的位置为空, 增加元素可能会导致扩容, 引发新的散列冲突, 导致新的散列表中键的次序发生变化, 这也是字典遍历时不能添加和删除的原因
字典在内存中开销很大, 实际上是以空间换时间。

10、数据库的存储过程与事务的异同

答:事务是保证多个SQL语句的原子型的,也就是要么一起完成,要么一起不完成
存储过程是把一批SQL语句预编译后放在服务器上,然后可以远程调用。

最后我也收集和整理了一份大厂面试真题,有需要的小伙伴可以关注微信公众号:程序员二黑,自行获取!

以上是关于面试官:我用10个问题,淘汰了80%的 “ 软件测试 ” 面试者......的主要内容,如果未能解决你的问题,请参考以下文章

Java面试中80%的人都会遇到的问题

Java面试80%的人都会踩的坑,你知道几种?

Java 面试 80% 的人都会踩这些坑,你知道几种?

我用 10 张脑图,征服了一系列大厂面试官。

211程序员面试快手,3个面试官都是清华毕业,看到面试题懵了

Android面试:80%的面试官关于Glide都会问这几个问题!建议收藏