目录
编辑
一.引言
1.验证与确认
2.目标
3.测试用例
4.桩与驱动
5.缺陷、错误与失败
二.测试层次
1.测试层次的划分
2.单元测试
3.集成测试
4.系统测试
三.测试技术
1.测试用例的选择
2.随机测试
3.基于规格的技术(黑盒测试)
4.基于代码的技术(白盒测试)
5.特定测试技术
四.测试活动
五.测试度量
编辑
一.引言
软件设计的顺序是自顶向下,软件测试的顺序是自底向上~
1.验证与确认
软件测试是软件质量保障的方法之一:
- 验证:检查开发者是否正确地使用技术建立系统,确保系统能够在预期的环境中按照技术要求正确地运行~
- 确认:检查开发者是否反建立了正确的系统,确保最终产品符合规格
软件开发的验证与确认主要有两种手段:静态测试与动态设计~
- 评审是最为常用的静态分析手段
- 动态测试就是软件测试,它在软件能够运行时,考察软件运行时的表现,完成验证与确认任务的方法
2.目标
- 向开发者和用户展示软件满足了需求,表明软件产品是一个合格的产品
- 找出软件中的缺陷和不足
一个关于软测的定义:为评价与改进产品质量、标识产品缺陷和问题而进行的活动
- 为目标1进行的测试是有效性测试,它使用用户希望的方式来测试软件系统,发现系统的缺陷并进行改进
- 为目标2进行的测试是缺陷测试,它在软件测试中具有更大的重要性,目标是发现缺陷,只有发现了缺陷的测试才是成功的测试~
发现尽可能多的缺陷的测试才是成功的,这一点是毋庸置疑的~
3.测试用例
测试用例是一组输入数据与预期结果的组合。
- 输入数据:外界接受的数据or系统内部的状态数据
- 输出结果:数据输出or运行表现
4.桩与驱动
- 桩程序:被测试部件的交互环境,它扮演被测试部件需要调用的其他系统部件~(只是规格上与其他部件相同,内部实现代码要简单的多)
- 驱动程序:负责创建被测试部件的执行环境,并驱动和监控被测试部件执行测试用例的过程,判定测试用例的执行结果~
5.缺陷、错误与失败
- 缺陷:系统代码中存在的不正确的地方
- 错误:如果系统执行到缺陷,就可能使得执行结果不符合预期且无法预测,表现出来的不稳定状态就称为错误。
- 失败:错误的发生会使得软件的功能失效
(软件测试的目标是发现缺陷,但实际上发现的是失败~只有对失败进行分析调试才能发现错误并加以修复)
二.测试层次
1.测试层次的划分
通过测试对象和测试目标两个维度来划分测试的层次~
2.单元测试
又称为模块测试,是对程序单元(软件设计的最小单位)进行正确性检验的测试工作
- 在过程化编程中,一个单元就是一个函数与过程
- 在面向对象编程中,一个单元就是类的一个方法
测试一个程序单元时,需要构建桩程序和驱动程序,将其与其他程序单元隔离~
3.集成测试
(主要采用白盒+黑盒,是为了检验系统功能)
又被称为组装测试,即对程序模块一次性或采用增量方式组织起来,对系统的接口进行正确性检验的测试工作——通常在单元测试之后,系统测试之前进行~
集成测试非常依赖桩程序和驱动程序,常见的集成策略包括大爆炸集成和增量集成,增量集成有自顶向下、自底向上、持续集成等多种方式~
4.系统测试
前两者更加关注技术上的正确性,重在发现设计缺陷和代码缺陷,系统测试更关注不符合需求的缺陷和需求自身的内在缺陷~
系统测试关注整个系统的行为,所以不依赖于桩程序and驱动程序~
三.测试技术
1.测试用例的选择
测试是有代价的(人力、时间、金钱成本),目标是发现尽可能多的缺陷,并不绝对要求发现所有缺陷~
软件测试人员要仔细选择测试用例,在代价尽可能小的情况下发现足够多的缺陷~
2.随机测试
基于软件工程师直觉和经验的技术,也是实践中最为广泛使用的测试技术~
但并不是最优的测试技术,有时可以发现其他技术不能发现的缺陷,但其测试到缺陷的几率却比其他技术要小的多~
3.基于规格的技术(黑盒测试)
把测试对象看做一个黑盒子,完全基于输入和输出数据来判定测试对象的正确性——使用测试对象的规格说明来设计输入和输出数据~
等价类划分:
把程序的输入域划分为若干部分,然后从每一个部分选取少数代表性的个体作为测试用例
- 有效等价类:对于程序的规格说明来说是合理的、有意义的数据输入构成的集合
- 无效等价类:与有效等价类的定义正好相反
边界值分析:对前者划分方法的补充——因为错误往往发生在边界而非内部~
决策表:为复杂逻辑判断设计测试用例的技术,决策表由条件声明、行动声明、规划选项和行动选项四个象限组成的表格
状态转换:专门针对复杂测试对象的测试技术,该类复杂测试对象输入数据反应是多样的,还需要依赖自身的状态才能决定,如果测试对象的状态不同,那么即使输入数据是一样的,输出也会有所不同~
4.基于代码的技术(白盒测试)
与黑盒不同,将测试对象看做透明的,不关心测试对象的规格,而根据对象内部的程序结构来设计测试用例进行测试工作~
语句覆盖:保证每一行代码都至少执行一次
(较弱的代码覆盖)
条件覆盖:每个判断结果至少都满足一次
(仍不能保证所有路径的覆盖)
路径覆盖:每条独立路径都至少执行一次
5.特定测试技术
- 面向对象的测试
- GUI测试
- 基于web的测试
- 基于组件的测试
- 并发程序的测试
- 协议遵从性测试
- 实时系统测试
四.测试活动
- 测试计划:按照工程的做法,在开始具体的软件测试活动之前,必须明确工作范围等计划
- 测试设计:进一步明确需要被测试的对象,为被测对象设计用例集合
- 测试执行:要严格按照测试用例来完成,并记录相应的测试结果
- 测试评价:执行结束后,必须评价测试结果,以确定测试是否成功