测试基础与测试理论
2026/8/21大约 3 分钟
测试基础与测试理论
什么是软件测试?测试的目的是什么?
- 在规定的条件下对程序进行操作,发现软件错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
- 目的是尽早、尽可能多地发现缺陷,验证软件是否符合需求,降低上线风险,而不是"证明程序没有 bug"。
- 测试只能证明缺陷存在,不能证明缺陷不存在(Dijkstra 名言)。
软件测试的生命周期(STLC)包含哪些阶段?
需求分析 → 测试计划 → 测试设计(用例编写)→ 测试执行 → 缺陷管理 → 测试报告(评估与总结)。
强调:测试应该尽早介入(左移测试),在需求评审阶段就开始。
说说 V 模型、W 模型、敏捷测试的区别?
- V 模型:开发和测试一一对应(单元→编码、集成→设计等),但测试介入偏晚。
- W 模型:测试与开发同步进行,测试从需求阶段就开始介入,弥补 V 模型缺陷。
- 敏捷测试:测试贯穿每个迭代,全员测试、自动化程度高、快速反馈,常见实践有 TDD、测试金字塔、探索性测试。
什么是测试金字塔?如何落地?
- 底层:大量单元测试(快、便宜、定位准);中层:适度集成/接口测试;顶层:少量端到端 UI 测试(慢、脆、贵)。
- 落地要点:自动化用例数量按金字塔比例分配;单元测试覆盖核心业务逻辑;接口测试覆盖跨模块链路;E2E 只覆盖关键用户旅程。
黑盒测试和白盒测试的区别?常用方法?
- 黑盒:不关心内部实现,基于需求/规格设计用例。方法:等价类划分、边界值分析、判定表、因果图、场景法、正交试验、错误推测。
- 白盒:基于代码逻辑设计用例。方法:语句覆盖、分支(判定)覆盖、条件覆盖、路径覆盖、MC/DC 等,覆盖强度递增。
- 另外还有灰盒测试(介于两者之间,常用于接口/集成测试)。
单元测试、集成测试、系统测试、验收测试的区别?
| 层级 | 测试对象 | 关注点 |
|---|---|---|
| 单元测试 | 函数/方法/类 | 内部逻辑正确性 |
| 集成测试 | 模块间接口 | 模块交互、数据传递 |
| 系统测试 | 完整系统 | 功能、性能、安全、兼容性 |
| 验收测试 | 业务需求 | 是否满足用户需求(UAT) |
什么是回归测试?什么时候做?
- 修改代码后,重新执行相关用例,验证新改动没有破坏原有功能。
- 触发时机:bug 修复后、新增功能后、重构后、版本发布前。策略:先跑冒烟用例,再跑全量回归,或基于影响面分析做精准回归。
如何确定测试的优先级?
- 依据:需求影响范围、功能重要程度(核心链路优先)、缺陷概率、用户使用频率、风险程度。
- 常用方法:风险分析法(Risk-based Testing),高影响 × 高概率的功能优先。
兼容性测试怎么做?
- 平台兼容(Windows/macOS/Linux)、浏览器兼容(Chrome/Edge/Firefox/Safari)、移动端(iOS/Android 不同版本与机型)、分辨率、数据库版本、网络环境(弱网)。
- 手段:真机 + 云测平台(如 BrowserStack)组合;先做优先级矩阵筛选主流组合。
测试环境的组成?如何搭建和维护?
- 由数据库、缓存(Redis)、消息队列、后端服务、前端静态资源、配置中心、Mock 服务、测试数据等组成。
- 维护要点:环境隔离(dev/test/staging/prod)、自动化部署、数据初始化与造数脚本、环境监控与一键重建(Docker/K8s)。