软件测试概要
定义
- 软件测试是对程序能够按预期运行建立起一种信心 ——Bill Hetzel,1973
- 测试是为发现错误而执行程序的过程 ——Myers,1979
- 使用人工或自动的手段来运行或测量软件系统的过程,以检测软件系统是否满足规定的要求,并找出与预期定义之间的差异。 ——IOS/IEC/IEEE 29119
对象
软件测试覆盖整个软件研发过程
- 软件需求
- 概要设计
- 详细设计
- 源代码
- 可运行程序
- 可运行环境
历史
五大要素及两大目标
要素:
- 质量(最为核心)
- 人员(决定因素)
- 技术(实现手段)【测试技术,方法,测试工具】
- 资源【测试所需的硬件,网络环境,测试生命周期,测试时间】
- 流程(测试标准)【测试计划,测试执行,报告】
目标
- 提升测试覆盖率
- 测试效率
遵循原则
- 测试显示软件的存在,但不能证明系统不存在缺陷
- 穷极测试是不可能的,应设定及时终止的条件(无穷无尽的测试是不可能的,需很大代价;无论怎样测试,我们不可能发现软件的所有缺陷)
- 测试应该尽早进行
- 缺陷具备群集特性(发现越多错误的模块,越应该集中关注,可能该模块的编程人员的水平较低)
- 测试的杀虫剂悖论(用相同的用例多次测试时发现不了bug的,应该更新测试方法和用例)
- 测试的二八原则(80%的时间测试20%的重要模块)
- 测试活动依赖于测试背景(针对不同的软件的测试方法是不同的,比如电信软件看中性能、大批量;银行看中安全性)
术语杀虫剂悖论(The Pesticide Paradox)用来描述这样一种现象,即你对软件进行越多的测试,那么该软件对你的测试就越具有免疫力。同样的事情发生在对昆虫使用杀虫剂上。如果你持续使用同样的杀虫剂,这些昆虫最终将建立起抵抗力,杀虫剂将不再发挥作用。
为了克服“杀虫剂悖论”,软件测试人员必须不断地编写新的不同的测试来检验程序的不同部分从而找出更多的bug。
让其他的人来测试你的程序将有助于打破“杀虫剂悖论”。