软件测试
软件测试是通过选定的输入动态执行程序,以检测缺陷并确信软件按预期运行。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
软件测试是设计和执行测试用例(输入与预期输出配对)的活动,旨在揭示实际行为与所需行为之间的差异,并评估软件可靠性。
Scope
本主题涵盖测试级别(单元测试、集成测试、系统测试、验收测试);黑盒技术,如等价划分、边界值分析和组合测试;由代码覆盖标准驱动的白盒技术;回归测试、性能测试和探索性测试;测试自动化;以及测试充分性和覆盖率理论。
Core questions
- How are effective test cases selected from an intractably large input space?
- What coverage criteria measure the adequacy of a test suite?
- How do the levels of testing from unit to acceptance complement one another?
- How can testing be automated and integrated into the delivery pipeline?
Key theories
- 黑盒和白盒测试设计
- 黑盒技术通过划分和边界分析从规范中导出测试,而白盒技术则在覆盖率标准的指导下从代码结构中导出测试;两者是互补的。
- 覆盖率和测试充分性标准
- 语句覆盖、分支覆盖和条件覆盖等充分性标准,以及基于控制流图和数据流图的模型化标准,为测试套件对程序执行的彻底程度提供了可衡量的目标。
Clinical relevance
测试是发布前确保软件行为正确的应用最广泛的方法;精心设计的自动化测试能及早发现回归问题,支持重构和持续交付,并且是可靠软件的核心。
Evidence & guidelines
ISO/IEC/IEEE 29119 提供了软件测试过程、文档和技术的国际标准,SWEBOK 软件测试知识领域提供了共识性概述。
History
测试从随意的调试发展成为一门学科,始于 Myers 在 1979 年的系统性论述;覆盖率理论、基于模型的测试和测试自动化在随后的几十年中得到发展,而测试驱动开发和持续集成使自动化测试成为敏捷实践的核心。
Debates
- 多少自动化测试是值得的
- 单元测试、集成测试和端到端自动化测试之间的正确平衡存在争议;测试金字塔倾向于大量快速的单元测试而非缓慢的端到端测试,但批评者指出这种平衡取决于系统类型和风险。
Key figures
- Glenford Myers
- Paul Ammann
- Jeff Offutt
- Boris Beizer
Related topics
Seminal works
- myers2011
- ammann2016
- swebok2014
Frequently asked questions
- 为什么我们不能测试所有可能的输入?
- 对于大多数程序而言,可能的输入和执行路径空间是天文数字般巨大或无限的,因此穷尽测试是不可行的;测试通过使用系统技术选择代表性和边界情况,以最大限度地提高每次测试的缺陷检测率。
- 测试级别之间有什么区别?
- 单元测试隔离地测试单个组件,集成测试检查它们的交互,系统测试根据需求评估整个系统,验收测试确认它满足用户需求;每个级别都针对不同类型的缺陷。