软件测试
alpha 版本和 beta 版本的区别¶
- 阶段与目的:
- Alpha 版:开发早期的内部测试版本,重点验证核心功能的可用性,允许存在较多已知缺陷。
- Beta 版:接近正式发布的外部测试版本,主要测试稳定性、兼容性和用户体验,缺陷密度较低。
- 测试主体:
- Alpha 由开发团队内部执行,Beta 则开放给部分真实用户(如受邀用户、公开测试群体)。
- 交付状态:
- Alpha 不对外正式发布,Beta 可能作为公开测试版提供下载(如 Windows 10 Insider Preview)。
白盒测试、黑盒测试¶
- 白盒测试(结构测试):
- 视角:基于代码逻辑结构(如函数、类、接口)设计用例,关注内部实现。
- 方法:语句覆盖、分支覆盖、路径覆盖等,典型工具如 Junit、Coverage.py。
- 场景:单元测试、集成测试早期,验证代码逻辑正确性。
- 黑盒测试(功能测试):
- 视角:仅关注系统功能输出,不关心内部代码实现。
- 方法:等价类划分、边界值分析、场景法等,典型工具如 Selenium、Postman。
- 场景:系统测试、验收测试,验证需求是否被满足。
软件测试的原则¶
- 尽早测试:测试应贯穿开发全周期,而非仅在代码完成后(如需求阶段即开始测试用例设计)。
- 追溯需求:每个测试用例必须对应明确的需求,避免无目标测试。
- 缺陷集群:80% 的缺陷常集中在 20% 的模块中,需重点关注高频问题模块。
- 避免自测:开发人员不宜完全自测代码,需独立测试团队确保客观性。
- 全面测试:测试用例需覆盖功能、性能、安全等多维度,而非仅功能验证。
- 缺陷记录:所有缺陷需详细记录复现步骤、环境和优先级,便于追踪修复。
什么是测试驱动开发 TDD?¶
核心流程:
- 先写测试:在编码前根据需求编写失败的测试用例(如 Junit 测试方法)。
- 再写代码:实现最小化功能使测试通过。
- 重构优化:在保证测试通过的前提下,优化代码结构(如解耦、性能优化)。
优势:
- 确保代码可测试性,减少后期返工;
- 强制遵循 “小步迭代”,提升代码质量;
- 天然生成可维护的测试套件(如单元测试集)。
测试用例设计的常用方法有哪些?¶
- 功能测试:等价类划分、边界值分析、错误推测法、因果图法;
- 结构测试:语句覆盖、分支覆盖、循环覆盖;
- 场景测试:基于用户操作流程的场景法(如电商下单流程)。
软件测试的阶段如何划分¶
- 单元测试:验证单个模块 / 函数的逻辑正确性;
- 集成测试:验证模块间接口和数据交互;
- 系统测试:验证完整系统是否满足需求(功能、性能、兼容性等);
- 验收测试:用户主导的 UAT 测试,确认系统符合业务预期。
自动化测试的优势和局限性?¶
- 优势:重复测试效率高、减少人力成本、支持夜间 / 批量执行;
- 局限:初期脚本开发成本高、难以覆盖复杂 UI 场景、无法完全替代手工测试。
如何估算测试工作量?¶
- 用例数 × 单用例执行时间(如 100 个用例 ×10 分钟 / 用例);
- 参照历史项目类比(如类似项目测试耗时 20 人 / 天);
- 分阶段估算(单元测试 30%、集成测试 40%、系统测试 30%)。