ScholarGate
助手

软件测试

软件测试是通过选定的输入动态执行程序,以检测缺陷并确信软件按预期运行。

用 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

为什么我们不能测试所有可能的输入?
对于大多数程序而言,可能的输入和执行路径空间是天文数字般巨大或无限的,因此穷尽测试是不可行的;测试通过使用系统技术选择代表性和边界情况,以最大限度地提高每次测试的缺陷检测率。
测试级别之间有什么区别?
单元测试隔离地测试单个组件,集成测试检查它们的交互,系统测试根据需求评估整个系统,验收测试确认它满足用户需求;每个级别都针对不同类型的缺陷。

Methods for this concept

Related concepts