软件测试面试answer
# 软件测试面试answer
收录软件测试面试过程中常见的面试题,根据网络和自身经历
# 常见问题
- 软件测试的目的是什么?
1.为了发现程序中的缺陷,保证软件质量。 2.满足用户需要
- 软件测试的一般流程是怎么样的?
1.项目立项后,参加需求评审 2.根据需求文档制定测试用例,然后进行用例评审 3.项目提测后,执行用例,问题记录cp4,及时有效的跟进问题的解决情况 4.测试环境测试通过后,产品进行验收测试
- 常见的测试类型有哪些?分别说明一下?
1.黑盒测试,即常说的功能测试
2.白盒测试,(测试者了解软件的内部结构和实现细节,测试代码的逻辑和路径)即单元测试,通常由开发来完成,对程序类和方法的测试
3.兼容性测试,比如:不同的浏览器的兼容测试 ,不同的手机品牌
4.集成测试,即各个模块的测试
5.系统测试,各模块测试完成后,对整个系统的完整性测试
6.回归测试 7.验收测试
- 测试用例设计常用的方法有哪些?详细说明一下?
最常用的3种
等价类划分、边界值、场景法
1.等价类划分 分为有效等价类和无效等价类,将测试的范围划分成几个互不相交的子集,从每个子集选出若干个有代表性的值作为测试用例
2.边界值:选取正好等于、刚刚大于、刚刚小于边界的
3.场景法:划分不同的场景,然后逐一进行验证
4.因果图法:通过因果图来表示输入条件和输出结果之间的关系,然后转换为决策表。
5.错误推测法:基于经验和直觉,预测可能出现的错误,并设计相应的测试用例。
- 解释下单元测试,集成测试,系统测试以及验收测试?
1.单元测试,通常由开发来完成,对程序类和方法的测试
2.集成测试,即各个模块的测试
3.系统测试,各模块测试完成后,对整个系统的完整性测试
4.验收测试,测试环境测试通过后,由产品或者用户进行验收测试,看看产品的实现,是不是满足了他们当初设计的需求
- 探索性测试是什么?应该怎么做?
在需求文档不完善或者压根没有需求文档的情况下,或者完成一轮测试后,根据经验进行摸索尝试性进行的测试。
这种方法强调测试者的主动性和创造力,而不是依赖预先编写的测试用例。测试者在测试过程中不断学习系统的特性,并根据新发现的问题动态调整测试策略。
往往有经验的测试者进行探索测试效果会更好,进行探索测试时,还可以组合交叉测试一起进行。
比如:测试认为这个地方会出错,去测试,这种就称为探索性测试
- 什么是冒烟测试,如何有效的开展冒烟测试?
1.软件最基本的功能测试,通常由开发完成,只有冒烟点都通过的产品,交由测试,才会比较有意义
2.冒烟测试贯穿于测试的各个阶段,比如集成测试,系统测试等
- 一条高质量的缺陷记录(Bug)应该具有哪些内容?
1.记录bug产生的前提条件 2.产生bug的详细操作步骤 3.截图,直观的展示问题,有效帮助开发快速定位问题
- 缺陷的生命周期是怎样的?
1新建--提交--分配--修复--验证--验证通过关闭--验证不通过reopen
- Alpha测试与Beta测试的区别?
Alpha测试
- 定义:Alpha测试是在软件产品开发接近完成时进行的一种内部测试。这个阶段的测试通常是在开发团队或一个专门的质量保证(QA)团队中进行的。
- 目标:主要目的是找出并修复软件中的错误或缺陷,确保软件的功能性和稳定性达到预期标准。
- 环境:Alpha测试通常在一个受控的环境中执行,即使用的是开发环境或模拟生产环境。
- 测试者:测试者通常是内部员工,包括开发者、测试工程师等。
Beta测试
- 定义:Beta测试是指软件在正式发布前,在真实的使用环境下进行的外部测试。在这个阶段,软件已经经过了Alpha测试,大部分已知的问题已经被解决。
- 目标:主要是验证软件在实际使用条件下的性能、兼容性及用户体验,同时收集用户反馈以进一步改进产品。
- 环境:Beta测试是在用户的实际工作环境中进行的,可以是客户的现场或者通过互联网让广泛的用户群体试用。
- 测试者:测试者一般是软件的目标用户群体,他们可能不是专业的测试人员,但他们的反馈对于发现潜在的问题和改善用户体验非常有价值。
- 你认为做好软件测试应该具备哪些素质?
1.较好的技术能力 2.对业务逻辑的理解 3.良好的沟通能力 4.解决和分析事情的能力
好的测试就是能够提高软件的质量,或者能更快的发现问题,能即使反馈给开发,配合开发进行修复。跟开发配合那就要有一定的技术能力跟良好的沟通能力。
如何发现问题则是需要对业务逻辑的理解跟分析能力。
- 作为测试人员,在与开发人员沟通过程中,如何有效的提高沟通效率和效果?
1.耐心的跟开发沟通,跟他阐述问题的重要性 说服他解决问题 2.充分尊重对方,哪怕再低级的bug都不要小看他 3.宽以待人,设身处地为他人着想 即使开发因为压力或者其他原因不肯合作 也要心平气和的跟他沟通 讨论bug的优先级 4.平时多跟开发沟通 无论是工作还是生活上的问题,但是测试一定要有自己的原则 对测试的产品质量负责 5.自己先定位问题 帮助开发缩小排查范围
- 你觉得软件测试工程师在一个团队中,都需要做什么?有什么价值?
除了做好日常工作外
1.在产品需求会上 可以站在用户的角度
提一些贴合用户需求的建议
2.测试阶段,根据自己对项目的了解和专业的测试技能尽可能在项目上线前测出更多问题
保证产品质量 3.对测试过程中出现的问题 合理有效的进行风险评估
。 4.对质量严格把关 测试不通过的 一定不能发布生产最终目的都是提高软件质量,减少项目发布后,出现的问题。
- 你对软件测试最大的兴趣是什么?
1.行业前景比较好,而且近些年 越来越多企业更注重测试 2.测试时间越久 面临的困难和挑战也越多,解决问题的同时 也提高了自身的能力 3.自己的性格比较外向开朗 很容易跟产品和开发沟通 做起事情可以事半功倍
- 你对自己的职业规划是什么?
先做高级测试 有机会的话,想往管理方向发展,目前在携程做测试组长,也为以后管理做储备
- 在你以往的工作中,发现的影响大或印象深刻的Bug是什么?为什么?
图片 改名 报错
- 在你以往的经历中,解决过的最困难的问题是什么?
- 在你以往的工作或学习中,你最大的收获是什么?学到了什么?
- 你认为做好软件测试应该具备哪些素质?
1.发现问题后,联系开发进行处理,需要具备良好的
沟通能力
2.分析能力,换位思考能力,实现站在用户的角度看问题
3.冷静跟细致,因为时间有时不会如人愿,但你不能因时间少就丢了重心,对于时间少的仍要抓住核心,然后给出风险提示
- 在没有任何文档的情况下,你如何开展测试?测试用例设计问题
1.尽量的去获取其他的文档吧,比如开发的一 些设计文档---概要设计、功能设计、详细设计
2.尝试从网上找类似的项目文档,如果幸运,可以从公司的资料库找到类似的文档
3.按照开发的接口或者设计文档,按照功能模块划分,大致写一些用例,然后进行摸索测试,在测试过程中逐渐完善自己的用例
文档都是人写的,还可以去询问对应的人
- 什么是接口测试?
接口测试(API Testing)是一种测试方法,用于验证系统之间通信的接口是否按预期工作。接口测试的主要目的是确保数据在客户端和服务器之间正确传输,并且接口能够正确处理各种输入和输出。接口测试通常不涉及用户界面,而是直接调用API并验证返回的结果。
接口测试的检查点涵盖了多个方面,确保接口的功能、性能、安全性和可靠性。我们应该有这样的思路,首先要确保接口的正确性,也就是输入一些正确的数据,是否能返回预期的数据。再有输入错误的数据,返回的数据是否也是错误,还是仍是正确。
正确性保证后,就要考虑它的性能跟安全性了。
所谓性能,就是从接受指令到响应给客户端要多少时间。
以及在高并发情况下——即多个请求同时请求接口,它是否运行正常。
最后还可以测试下在网络不好的情况下,它的响应情况如何。
安全性则是,它发送的数据,是否进行加密,因为请求是容易被捕获的。
当然安全还有一个点就是——权限。
不同人员发送同样的数据,有权限控制的接口,返回的情况应该不同。例如OAuth、JWT等。
总结下就是,功能,先正确测试在错误测试,再安全和性能测试。
- 如何测试一部电梯
那么如何测试电梯呢? 电梯测试可以从几个方面来进行,功能测试,性能测试,[压力测试],可用性测试(Usability),兼容性测试,本地化/国际化测试,可维护性测试; 1、功能测试:最基本的上下功能,开关功能,还有里面的各个按键; 2、性能测试:(很多人忽略的),比如电梯的调度算法,用户的等待时间,平均等待时间,上下的速度,耗电量等等; 3、压力测试:比如承重量(你实际承受力是20,那么当进入19个人的时候就应该报警,或者是实际上用户有可能一股脑的全部冲进电梯,所以在静止的时候电梯需要考虑到这种情况),突然断电,门打不开等等; 4、可用性测试:按钮是否方便,按键的感觉是否好,视觉效果,现在很多人诟病的事情是,开和关两个按钮的图示很不友好,在紧急的时候很容易搞错(是否有可取消功能); 5、兼容性测试:比如每个国家的电压不一样,是否考虑到这个情况; 6、本地化/国际化测试:电梯的使用手册翻; 7、可维护性:电梯如果坏了怎么去维修; 8、可用性availabity测试,如果一部坏了,另外一部是否可以正常的运行等等。
- 如何测试一个杯子?
首先从功能,杯子,那就要考虑是否能装水,是否不漏。
考虑现实生活,杯子现在还可能用于装其他液体,比如饮料,牛奶,咖啡,茶,装这些是否ok。
功能实现了接着考虑易用,它的外形是否ok,是否容易拿起,或者握住,保证不容易脱落。用来喝水是否方便,如果带盖子的话,盖住把他倒置是否会漏水。
是否便于携带。
接着考虑性能,跟安全。
- 能否装100度的开水 (泡茶)
- 能否装0度冰水
- 是否易碎,
- 永久了是否有异味
最后还可以考虑下界面:
- 外观好不好看。
- 什么颜色
- 杯子的形状是怎么样的。
- 如何测试文件上传功能?
功能性测试
- 正常文件上传
选择一个符合指定类型、大小和格式的文件进行上传,确保文件能够成功上传且内容保持完整。
检查上传后文件的名称、大小、格式等信息是否显示正确,确保无乱码、多余路径等问题。
上传成功后,是否可以下载,下载下来后的文件是否正常。
2.文件替换与删除
验证已上传的文件是否可以被新的文件替换。
验证已上传的文件是否可以被正确删除,且删除后页面显示和数据库记录均得到更新。
3.文件打开状态测试(易用性)
根据需求,测试正在打开的文件是否可以上传,并验证系统响应。
4.支持的文件类型
验证系统是否支持指定的文件类型,如文本文件、图像文件、音频文件、视频文件等。
对于不支持的文件类型,系统应给出明确的错误提示。
5.文件格式验证
验证系统是否能够正确识别文件的格式,如.jpg、.png、.doc、.pdf等。
对于不符合要求的文件格式,系统应拒绝上传并给出错误提示。
6.文件大小限制
- 验证系统是否对上传文件的大小有限制,如最大不超过5MB。
7.上传时间
- 对于不同大小和格式的文件,测试上传所需的时间,确保在可接受范围内。
8.系统资源占用
- 监控上传过程中服务器的CPU、内存等资源占用情况,确保系统性能稳定。
# 测试用例设计问题
- 测试用例是什么?如何设计有效的测试用例?
- 输入三个整数,判断是否构成有效的三角形,针对这个设计测试用例
- 针对文件上传功能,设计下测试用例
- 针对网上购物中订单提交的过程,设计测试用例
# 测试管理问题
- 你认为测试经理的工作职责和内容是什么?
- 如果你作为测试Leader,你应该怎么建立公司的测试体系并实施它?
- 说明你作为测试团队的负责人,如何提高测试团队的技术能力?
- 列举你以往项目测试中遇到的风险以及你如何处理的?
- 如果当时间不充裕时,该如何安排测试?
- 列举你曾经做过的测试(你认为有技术含量的或者提高了测试管理能力的),并说下你从中如何受益?
- 在开发和测试存在不合作甚至对立的情况下,你如何平衡和协调工作?
# 自动化测试问题
- 你认为适合做自动化测试的标准是什么?
自动化在于提高效率,
1.已经验证过的功能,在回归时可以进行验证
2.每次代码变更后都需要重新运行的测试用例
3.每天或每个迭代周期内多次执行的测试,比如日常巡检
4.涉及大量边界值和异常情况的测试,适合自动化以减少人为错误。容易出错的测试
...
自动化测试的场景通常具有
重复性高、频繁执行、耗时长、容易出错、高风险、需要多环境测试、需要长期维护、数据驱动
和需要频繁更新
等特点。通过选择合适的测试场景进行自动化,可以显著提高测试效率和覆盖率,确保软件的质量和可靠性。
- 你认为什么类型的测试不适合做自动化测试?
需要测试者的主动性和创造力、依赖真实用户的反馈、只需要执行一次、需要复杂的主观判断、快速原型频繁变化、涉及安全性的某些部分、需要人类的审美判断、动态内容经常变化、测试环境多变、需要大量人工干预。通过选择合适的测试场景进行自动化,可以避免不必要的资源浪费,确保测试的效率和质量。
- UI自动化测试的优点和缺点分别是什么?
- 在一个项目中目前还没有进行自动化,如果我想开展自动化测试,我应该怎么做(一般步骤)?
- 你认为该如何选择最适合的自动化测试工具?
- 什么是自动化测试框架?一个好的自动化测试框架应该具备什么元素?
- 说一下你写过的测试框架的代码目录结构是怎么样的?
- 自动化测试框架的类型有哪些?
- 说一下你在实施自动化测试过程中好的代码实践?
- 自动化测试是否仅仅可以是实施在UI层?为什么?
- 你是否熟悉Selenium工具?说一下它是什么?
- 你是否还熟悉其它的自动化测试工具?各自简单的介绍一下?
# 性能测试问题
- 什么是性能测试?为什么要进行性能测试?
- 性能测试的类型有哪些?
- 列举下用户会面对的性能问题和性能瓶颈?
- 列举下性能测试中常涉及的性能计数?
- 性能测试中并发用户点击量是什么?如何实现?
- 性能测试进入和结束的标准是什么?
- 说一下在选择性能测试工具之前需要考虑哪些东西?
- 在性能测试中,如何识别性能瓶颈?
- 在对应用程序进行性能测试期间一般会执行哪些活动?
- 性能测试中吞吐量是什么?
- 解释下什么是耐力测试和尖峰测试?
# 数据库问题
# Mysql
- 一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15
# 操作系统问题
- 列出超过10个Linux常用的命令以及其作用?
- 进程和线程是什么?它们有什么区别和联系?