跳转至

软件测试面试题

这一页整理软件测试基础面试题。每个问题都给出回答思路和新手容易踩的坑。

软件测试的目的是什么?

不推荐回答:

测试就是找 Bug。

推荐回答:

软件测试的目的:
1. 发现问题、评估质量风险
2. 帮助团队判断软件是否满足需求、是否具备上线条件

找 Bug 是测试的一部分,但测试还包括:
- 需求分析、用例设计
- 风险评估、回归验证
- 测试报告

测试流程是什么?

可以这样回答:

一般流程:
需求分析 → 测试计划 → 用例设计 → 测试执行 → 缺陷提交 → 缺陷回归 → 测试报告

如果是敏捷项目,测试会更早参与:
- 需求评审阶段同步准备用例
- 开发过程中同步准备测试数据

面试加分点:

  • 提到需求评审阶段就要发现需求不清楚的问题。
  • 提到缺陷修复后需要回归。
  • 提到上线前要做冒烟或主流程验证。

你怎么设计测试用例?

回答思路:

第一步:理解需求和业务流程
第二步:从多个角度拆测试点:
  - 正常流程、异常流程
  - 边界值、权限
  - 兼容性、数据校验

常用方法:等价类、边界值、场景法、判定表、错误推测法

举例:

比如登录功能,我会测:
- 正确账号密码登录
- 错误密码、手机号为空、格式错误
- 账号禁用、连续输错锁定
- 登录后刷新页面是否保持登录
- 退出后是否不能访问首页

缺陷严重程度和优先级有什么区别?

可以这样回答:

严重程度:缺陷对系统或业务的影响大小
  例:是否阻塞主流程、是否导致数据错误

优先级:修复的顺序
  受版本计划、业务影响、出现频率影响

两者关系:严重程度高的缺陷通常优先级也高,但不一定完全相同。

例子:

  • 支付金额错误:严重程度高,优先级高。
  • 首页 Logo 轻微偏移:严重程度低,但如果今天要发布品牌页面,优先级可能提高。

冒烟测试和回归测试有什么区别?

冒烟测试:
  - 时机:新版本提测或部署后
  - 目的:验证核心流程是否可用
  - 作用:判断是否值得继续深入测试

回归测试:
  - 时机:缺陷修复或功能变更后
  - 目的:验证原有功能是否被影响
  - 作用:确认问题没有复现

如果需求不清楚怎么办?

推荐回答:

1. 先把不清楚的点列出来
2. 结合原型、接口文档、历史逻辑和竞品行为提出问题
3. 在需求评审或群里确认
4. 确认后的结论要记录下来,避免后续开发、测试、产品理解不一致

不要回答:

我先按自己的理解测。

测试过程中发现缺陷,怎么详细记录?

缺陷报告至少包含:
- 缺陷标题(简明扼要)
- 所属模块、测试环境
- 前置条件
- 操作步骤(可复现)
- 预期结果 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 法表达项目经验
质量意识 知道要测什么 能评估风险、推动流程改进