1. 软件测试的定义
软件测试在IEEE Std 610.12中定义如下。
1) 在指定的条件下运行系统或构件,观察或记录结果,并对系统或构件的某些方面进行评估的过程。
2) 分析某个软件项(Software Item) 以发现现有条件与应有条件之间的差异(即缺陷),并评估软件项的特征的过程。软件项是指源代码、目标代码、作业控制代码、控制数据,或以上这些项目的集合。
2. 软件测试的目标
1) 提供关于测试对象的信息,包括测试对象的质量,以及测试对象中存在着哪些与测试程度相关的剩余风险。
2) 在测试对象发布并投入使用之前发现缺陷。
3) 降低相关方由于软件质量而导致的各种风险。
关于测试对象的信息可以用于以下的目的。
1) 通过消除测试对象的缺陷来对测试对象进行改善。
2) 提供关于质量和风险的相关信息,作为决策的基础并以此来改善管理决策。
3) 通过凸显那些可以导致缺陷出现的过程,和/或那些本可以发现缺陷但却使得缺陷遗留而未被发现的过程,对软件开发组织中的过程进行改善。
3. 软件测试的基本类型
1) 依据测试所依据的信息划分
黑盒测试:指不基于系统或构件的内部实现机制的测试形式。
白盒测试:指基于系统或构件的内部实现机制的测试形式。
灰盒测试:兼具备黑盒测试和白盒测试的特性,这种测试形式既关注程序运行时的外部表现,也关注程序内部的高层逻辑结构。
2) 依据是否需要运行测试对角划分
动态测试:需要运行测试对象的测试形式。动态测试大致包含了软件测试定义中 1) 部分的内容。
静态测试:是不需要运行测试对象,依据质量或其他标准对测试对象进行检查的测试形式。静态测试大致包含了软件测试定义中 2) 部分的内容。
将上述两种分类标准进行组合,可以得到测试实践中常用的4种测试类型:静态黑盒测试、静态白盒测试、动态黑盒测试及动态白盒测试。这4种测试作用于软件的不同部分。
其中,动态黑盒测试和动态白盒测试是软件测试工作的主体。二者之间的主要区别在于测试的依据不同。
4. 软件测试的基本原则
1) 不可能对程序进行完全测试 ---> 原因:a. 完全测试所需测试的数量巨大。b. 无法保证测试环境100%满足测试要求。c. 没有足够的资源彻底完成软件测试
2) 测试无法说明软件没有缺陷 ---> 原因:a. 由于不可能对程序进行完全的测试,因此无法保证找到软件中所有的缺陷。b. 无法确信测试人员完全理解了软件,即测试也可能发生错误。c. 无法确信测试系统(或环境)的正确性。d. 无法确信测规格说明书与用户的实际需求100%吻合。
------>软件测试工作可以报告软件缺陷已存在,却不能报告软件缺陷不存在。软件测试工作只能证明在其搜索范围内没有缺陷存在。
3) 发现问题越多的地方,潜在的问题也更多 ---> 原因:a. 缺陷存在聚集效应。b. 缺陷率水平与软件的设计、复杂性等存在关联
4) 杀虫剂现象 ---> 特定的测试用例只能覆盖测试空间的特定部分,因此如果同样的测试用例被一再重复执行,会减小其有效性,先前没有发现的缺陷也不会被发现。为了克服杀虫剂现象,软件测试员必须不断编写新测试用例对程序的不同部分进行测试。
5) 并非所有软件缺陷都要修复
6) 应尽量由独立部分实施测试
5. 软件测试的基本过程
要保证软件测试过程的顺利和有效,必须遵循一定的过程模型。软件测试的过程模型是软件测试工作的框架,它规定了软件测试过程所包含的主要步骤,以及这些步骤之间的相互关系。