基本概念
广义上讲软件测试是对软件需求分析,设计说明和编码进行复审的软件质量保证工作
狭义上讲软件测试是为了发现错误而执行程序的过程。换言之,软件测试是根据软件开发各个阶段的规格说明和程序内部结构精心设计的测试用例,并利用这些测试用例运行程序发现错误的过程。
**测试(testing)**的目的与任务:
目的:发现程序潜在的错误
任务:通过执行程序,暴露潜在的错误
**排错(debugging)**的目的和任务:
目的:定位于纠正错误
任务:消除软件故障,保证程序稳定运行
测试用例:
为测试程序而专门设计的数据
测试的对象
源程序/目标代码
各个开发阶段的资料
- 需求规格说明
- 概要设计说明
- 详细设计说明
- 其它相关文档
测试的特性
挑剔性:
抱着为证明程序有错误的目的去测试
复杂性:
需要设计测试用例
不彻底性:
有一句名言"程序测试只能证明错误的存在,不能证明错误的不存在"
经济性:
在测试时考虑测试所需的人力成本
测试的分类
静态测试(不执行程序)
- 静态分析器
- 代码复审(code review)
动态测试(执行程序)
黑盒测试:
测试程序功能
白盒测试:
测试程序结构
测试的文档
测试计划
- 测试项目的名称
- 各项测试的目的、进度、步骤
- 测试用例的设计
测试报告
- 测试项目的名称
- 测试结果与预期结果的比较
- 发现的问题
- 测试达到的效果
白盒测试
对软件的过程性细节做细致的检查,允许测试人员根据程序的内部结构和相关信息,设计测试用例,对程序所有路径进行测试。
逻辑覆盖法
用流程图来设计测试用例
5条标准(排序按发现错误的能力由弱到强):
- 语句覆盖:每条语句至少执行一次
- 判定覆盖:每一个判定的分支至少执行一次
- 条件覆盖:每一个判定中的每一个条件按"真"和"假"各至少执行一次
- 判定/条件覆盖:同时满足判定覆盖和条件覆盖的要求
- 条件组合覆盖:求出判定中所有条件可能的组合值,每一种条件组合至少执行一次
基本路径法
根据软件过程中的控制流程导出一组测试用例,确保每个路径都至少被执行一次
流程图------》流图
环路复杂性度量V(G)
流图
把流程图中的结构化构件用一般有向图表示
其中代表条件判断的分支结点成为谓词结点
环路复杂性度量V(G)
等于程序中独立路径的条数
三个计算公式:
- V(G)= 流图中区域的个数
- V(G)=E-N+2,E是流图中的边数,N是流图中的结点数
- V(G)=P+1,P是流图中谓词结点的个数
文章内图片均来自于网络
黑盒测试
把测试对象看作黑盒,不考虑程序内部的逻辑结构和内部特性,只依据程序的规格需求说明,在特定的条件下输入,输入相应的数据,检查程序的输出是否符合它的规格说明。
等价分类法
把输入数据的可能值划分为若干个等价类,大致分为有效等价类和无效等价类。每一个无效等价类至少需要一个测试用例
边界值测试法
使被测程序在边界值及其附近运行,从而更有效地暴露程序中潜在的错误
错误猜测法
猜测被测程序在哪些地方容易出错
针对可能的薄弱环节设计测试用例
对比测试法
多模块程序的测试策略
测试的阶段性
单元(模块)测试
综合(集成)测试
自顶向下的测试
深度优先
宽度优先
能比较块地发现错误
自底向上的测试
能比较全面地测试模块
混合方式测试
对上层利用自顶向下的测试
对底层模块或者子模块使用自底向上的测试
确认测试
α测试:公司内部测试版本
β测试:对外测试版本
系统测试
程序错误的类型
语法错误
结构性错误
功能性错误
接口错误