软件测试面试题¶
这一页整理软件测试基础面试题。每个问题都给出回答思路和新手容易踩的坑。
软件测试的目的是什么?¶
不推荐回答:
推荐回答:
软件测试的目的:
1. 发现问题、评估质量风险
2. 帮助团队判断软件是否满足需求、是否具备上线条件
找 Bug 是测试的一部分,但测试还包括:
- 需求分析、用例设计
- 风险评估、回归验证
- 测试报告
测试流程是什么?¶
可以这样回答:
一般流程:
需求分析 → 测试计划 → 用例设计 → 测试执行 → 缺陷提交 → 缺陷回归 → 测试报告
如果是敏捷项目,测试会更早参与:
- 需求评审阶段同步准备用例
- 开发过程中同步准备测试数据
面试加分点:
- 提到需求评审阶段就要发现需求不清楚的问题。
- 提到缺陷修复后需要回归。
- 提到上线前要做冒烟或主流程验证。
你怎么设计测试用例?¶
回答思路:
举例:
缺陷严重程度和优先级有什么区别?¶
可以这样回答:
例子:
- 支付金额错误:严重程度高,优先级高。
- 首页 Logo 轻微偏移:严重程度低,但如果今天要发布品牌页面,优先级可能提高。
冒烟测试和回归测试有什么区别?¶
冒烟测试:
- 时机:新版本提测或部署后
- 目的:验证核心流程是否可用
- 作用:判断是否值得继续深入测试
回归测试:
- 时机:缺陷修复或功能变更后
- 目的:验证原有功能是否被影响
- 作用:确认问题没有复现
如果需求不清楚怎么办?¶
推荐回答:
不要回答:
测试过程中发现缺陷,怎么详细记录?¶
缺陷报告至少包含:
- 缺陷标题(简明扼要)
- 所属模块、测试环境
- 前置条件
- 操作步骤(可复现)
- 预期结果 vs 实际结果
- 严重程度、优先级
- 截图/录屏、接口请求参数和响应、日志信息、数据库查询结果
举例:
标题:销售出库后库存未减少
模块:库存管理
步骤:用测试账号登录 → 选择商品A → 销售20件 → 提交
预期:库存从100变成80
实际:库存仍显示100
附件:页面截图 + 接口响应截图 + 数据库查询截图
开发不认可你提出的缺陷怎么办?¶
1. 先沟通:提供复现步骤、截图、日志、数据库数据等证据
2. 对照需求文档、原型图、接口文档确认
3. 如果是需求不明确,拉产品/项目负责人一起确认
4. 以需求和用户体验为依据,不争论个人观点
原则:用事实和证据推动问题解决,不是和开发"吵架"。
测试生命周期包括哪些阶段?¶
需求分析 → 测试计划 → 测试用例设计 → 测试环境搭建
→ 测试执行 → 缺陷提交与跟踪 → 回归测试 → 测试总结/报告
实际工作中:
- 需求评审阶段就开始理解需求、梳理测试点
- 用例评审阶段和开发、产品对齐预期
- 执行阶段边测边提 Bug
- 回归阶段确认修复且无新问题
- 最后输出测试报告,总结质量风险
面试中如何应对压力类问题?¶
"项目紧急、任务重怎么办?"
回答思路:
1. 按优先级划分:核心功能 > 高风险模块 > 一般功能
2. 时间紧先做冒烟测试,保证主流程
3. 及时沟通进度和风险,不隐瞒问题
4. 保持冷静,有重点、有记录、有反馈
不要回答:"加班硬扛"或"随便测一下"。
面试中如何回答软技能类问题?¶
"你的性格优势是什么?"
- 细心、耐心、责任心 → 测试需要关注细节
- 遇到问题不只看表面 → 会通过日志、数据库、接口分析原因
- 愿意沟通 → 用清楚的证据和开发沟通
"学习能力怎么样?"
- 举例说明:从不会到会的过程
- 强调方法:先自己分析(看报错、查日志、搜索),再带着具体问题请教
- 联系岗位:测试工作本身就需要不断学习新业务、新工具
"了解我们公司吗?"
- 面试前看官网、产品介绍
- 说明公司主要业务和目标用户
- 表达对产品质量的理解
- 不要只说"不太了解"
面试自查¶
- 回答是否有具体例子。
- 是否能把概念和项目流程联系起来。
- 是否避免只背书本定义。
- 是否能说明风险和判断标准。
等价类和边界值怎么用?¶
回答思路:
等价类:把输入分成有效和无效的组,每组取一个代表值测试。
边界值:重点测边界附近的值(最小值、最大值、刚好超出)。
两者配合使用。比如年龄字段要求 1-150:
等价类 → 有效值(25)、无效值(-1、200)
边界值 → 0、1、2、149、150、151
什么是测试左移?¶
推荐回答:
面试加分点:能举出一个实际需求评审中发现的问题例子。
上线后出了 Bug 怎么处理?¶
推荐回答:
第一步:评估影响范围和严重程度
- 阻塞性 Bug(支付失败、数据丢失)→ 立刻通知开发和运维
- 评估是否需要回滚
第二步:记录 Bug 信息
- 复现步骤、影响用户数、日志信息
第三步:修复后回归验证
- 确认问题解决且没有引入新问题
第四步:复盘
- 为什么测试阶段没发现?
- 是用例遗漏、环境差异还是数据问题?
- 补充用例防止再次发生
不要回答:"那是开发的问题,我只负责测试。"
敏捷测试和传统测试有什么区别?¶
传统测试(瀑布模型):
需求 → 开发 → 测试 → 上线
测试在开发之后,阶段式进行
敏捷测试:
每个 Sprint 都有测试活动:需求评审、用例设计、执行、回归
更强调:
- 测试左移
- 自动化回归
- 持续集成
- 团队协作(测试和开发不是对立关系)
兼容性测试怎么做?¶
1. 确定兼容性矩阵:浏览器、操作系统、设备、分辨率
2. 优先覆盖用户量最大的组合(看埋点数据或产品确认)
3. 核心功能在每个组合上验证,非核心功能抽查
4. 常用工具:BrowserStack、Sauce Labs、真机实验室
如何判断一个 Bug 是前端还是后端?¶
排查步骤:
1. 用 Fiddler/浏览器 DevTools 抓包,看请求参数是否正确
2. 请求参数错误 → 前端问题
3. 请求参数正确但响应错误 → 后端问题
4. 响应数据正确但页面显示错误 → 前端渲染问题
5. 不确定时,用 Postman 直接调接口排除前端干扰
面试评分参考¶
| 维度 | 初级(1-2年) | 中级(3-5年) |
|---|---|---|
| 测试基础 | 能说清流程和用例设计方法 | 能结合项目说明策略和权衡 |
| 缺陷管理 | 能写清楚缺陷报告 | 能分析缺陷趋势和根因 |
| 工具使用 | 会用 Postman、Fiddler | 能选型和搭建测试框架 |
| 沟通表达 | 能描述测试过程 | 能用 STAR 法表达项目经验 |
| 质量意识 | 知道要测什么 | 能评估风险、推动流程改进 |