软件测试的目标/G.Myers的软件测试规则
- 测试是为了发现程序中的错误而执行程序的过程
- 好的测试方案是极可能发现迄今为止尚未发现错误的测试方案
- 成功的测试是发现了至今为止尚未发现的错误和测试
软件测试的方法
黑盒测试
已经知道了产品应该具有的功能,通过测试来检验每个功能。
白盒测试
知道了产品内部工作原理,检验产品内部动作是否按照规格说明书进行。
灰盒测试
黑盒测试方法和白盒测试方法综合的策略
黑白灰统称动态测试,不实际运行程序进行检查是静态分析。
软件测试的准则
- 所有测试都应该能追溯到用户需求
- 应该远在测试开始之前就制定出测试计划
- 把Pareto原理应用到软件测试中 (82法则,起名大师)
- 应该从“小规模”测试开始,并逐步进行“大规模”测试
- 穷举测试是不可能的
软件测试的步骤
所有测试过程都应采用综合测试策略;即应先作静态分析,再作动态测试,并应事先制订测试计划。测试过程通常可分4步进行:
- 单元测试
- 子系统测试
- 系统测试
- 验收测试
单元测试/模块测试
单元测试集中检测软件设计的最小单元——模块。
通常,单元测试和编码属于软件过程的同一个阶段。 在编写出源程序代码并通过了编译程序的语法检查之后,就可以用详细设计描述作指南,对重要的执行通路进行测试,以便发现模块内部的错误。 可以应用人工测试和计算机测试这样两种不同类型的测试方法,完成单元测试工作。这两种测试方法各有所长,互相补充。
通常,单元测试主要使用代码审查和白盒测试技术,而且对多个模块的测试可以并行地进行。
单元测试重点测试
- 模块接口
- 局部数据结构
- 重要的执行通路
- 出错处理通路
- 边界条件
集成测试
集成测试是测试和组装软件的系统化技术。
集成测试策略
- 大爆炸集成(非渐增式)
- 一次性组装
- 自顶向下集成
- 方法:主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来
- 优点:自顶向下的结合策略能够在测试的早期对主要的控制或关键的抉择进行检验。
- 自底向上集成
- 优点:不需要存根程序
- 三明治集成
- 自顶向下和自底向上混合
确认测试
任务是验证系统的有效性,也就是验收功能、性能等特性是否符合需求规格说明。确认测试通常使用黑盒测试法。
α测试
用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试,目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。尤其注重产品的界面和特色。
β测试
β测试是由软件的多个用户在实际使用环境下进行的测试。这些用户返回有关错误信息给开发者。着重于产品的支持性,包括文档、客户培训和支持产品生产能力。
白盒测试方法/P162
语句覆盖 | 每条语句至少执行一次 |
判定覆盖 | 每一判定的每个分支至少执行一次 |
条件覆盖 | 每一判定中的每个条件,分别按“真”、“假”至少各执行一次 |
判定/条件覆盖 | 同时满足判定覆盖和条件覆盖的要求 |
条件组合覆盖 | 求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次 |
路径覆盖 | 点覆盖、边覆盖、路径覆盖 |
路径测试 (重点)
- 画出流图
- 计算环形复杂度
- 确定线性独立的基本集合
条件测试/P170
黑盒测试方法
黑盒测试着重测试软件功能。
等价划分
等价划分法力图设计出能发现若干类程序错误的测试用例,从而减少必须设计的测试用例的数目。(书是真的啰嗦)
发现错误并减少测试用例的数目。
边界值分析
选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值。
错误推测
玄学
软件可靠性
软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
软件可用性
软件可用性是程序在给定的时间点(时刻),按照规格说明书的规定,成功地运行的概率。