软件测试基础
看过了很多测试的书籍依然对测试的整个过程不甚了解?觉得测试理论十分复杂而毫无头脑。本文旨在整理软件测试基本的理论基础,在阅读专业基础和刷题的基础上理清基本测试流程和相关延伸概念。主要包括如下内容:
- 基础理论
- 测试流程
- 黑盒测试与白盒测试
- 静态测试与动态测试
- 测试工具
基础理论
- 目标
发现软件中隐藏的错误
- 对象
程序、数据及相关文档
关键问题
选择测试用例
测试用例是测试程序正确性与否的关键。一个覆盖完全的测试用例可以测试出程序是否正确运行,是否有bug等等,是最重要的。软件测试用例包括 输入数据和预期输出结果
测试设计员的职责
设计测试用例,设计测试过程、脚本
测试流程
在瀑布模型中
需求分析----->概要设计----->详细设计----->编码
| | |
| | 单元测试<-----
| |
| 集成测试<-----
|
系统测试<-----
----->验收测试(确认测试)
体现了
测试由小到大、由内至外、循序渐进的测试过程
单元测试
粒度最小,一般由开发小组采用白盒方式来测试。验证测试单元是否符合“设计”
集成测试
一般由开发小组采用白盒加黑盒的方法来测试,既验证“设计”,又验证“需求”
系统测试
粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合”需求规格说明书“书“
验收测试与系统测试相似,主要区别是测试人员不同,验收测试由用户执行
单元测试
(也称模块测试):针对软件设计的基本单元——程序模块,进行正确性检验的测试工作。目的在于发现各个模块内部可能存在的各种差错。单元测试需要从程序内部结构出发设计测试用例,多个模块可以平行、独立地进行测试
集成测试
(也称组装测试,联合测试):在单元测试的基础上,将所有模块按设计要求集成在一起进行测试,以检验总体设计中各模块间的接口设计问题、模块之间的相互影响、上层模块存在的各种差错及全局数据结构对系统的影响等方面
一、基本过程
1、构建的确认过程。
2、补丁的确认过程。
3、系统集成测试测试组提交过程。
4、测试用例设计过程。
5、测试代码编写过程。
6、Bug的报告过程。
7、每周/每两周的构建过程。
8、点对点的测试过程。
9、组内培训过程
按照IEEE标准,集成测试划分为4个阶段:计划阶段,设计阶段,实现阶段,执行阶段(实施阶段)
二、分类
集成测试分为渐增组装测试和非渐增组装测试
渐增组装测试,是测完一个再加上一个一起测试。
非渐增组装测试,是一个一个的测试。
采用增式测试时又有两种选择,可分自底向上集成和自顶向下集成
自底向上集成 是从最低层的模块开始集成,因测试到较高层模块时,所需求的下层模块功能均已具备,所以不再需要桩模块,测试用例的设计也相对简单,缺点是程序最后一个查勘块加入时才具有整体形象.
自底向上集成测试的步骤为:
1.把低层模块组织成实现某个子功能的模块群;
2.开发一个测试驱动模块,控制测试数据的输入和测试结果的输出;
3.对每个模块群进行测试;
4.删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的新模块群.
自底向上集成需要测试员编写驱动程序
自顶向下测试
自顶向下测试的优点在于它可以自然地做到逐步求精,一开始就可以让测试者看到系统的框架;缺点是需要提供桩模块,并且在输入/输出模块接入系统以前,在桩模块中表示测试数据有一定的困难。
桩模块在自顶向下集成中尤为有效
系统测试
将软件系统作为一个元素,放入整个实际的计算机系统中,与计算机硬件、其他软件、使用人员等系统元素结合在一起,在实际使用环境下进行综合全面的测试
系统测试的16项策略包括:
- 功能测试
- 性能测试
- 压力测试
- 容量测试
- 安全性测试
- GUI测试
- 可用性测试
- 安装测试
- 配置测试
- 异常测试
- 备份测试
- 健壮性测试
- 文档测试
- 在线帮助测试
- 网络测试
- 稳定性测试
设计系统测试计划需要参考的项目文档有:软件测试计划,软件需求工件,迭代计划
验收测试
确认测试(也称验收测试,有效性测试):主要检验软件的功能和性能是否与需求说明书中的规定一致。
可以分为正式验收测试,alpha测试,beta测试三种类型
p.s.回归测试
回归测试的目的是在程序有修改的情况下,保证原有功能正常的一种测试策略和方法,不属于测试流程
黑盒测试与白盒测试
按是否涉及软件内部逻辑分
黑盒测试
黑盒测试主要测试方法有
等价类划分法,边界值分析法,错误推测,因果图,正交试验法
使用最广的用例设计技术是等值分析测试
1、错误推测法
在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。
2、等价类划分
所谓等价类是指输入域的某个互不相交的子集合,所有等价类的并集便是整个输入域。目的在于测试用例的无冗余性。
(1)有效等价类:检验程序是否实现了规格说明预先规定的功能和性能。
(2)无效等价类:检查软件功能和性能的实现是否有不符合规格说明要求的地方。
3、边界值分析:边界值分析也是一种黑盒测试方法,是对等价类分析方法的一种补充,
由长期的测试工作经验得知,大量的错误是发生在输入或输出的边界上。因此针对各种边界情况设计测试用例,可以查出更多的错误。
p.s.其中,边界值法既可以用于黑盒测试,又可以用于白盒测试
4、因果图法:等价类划分法和边界值分析方法都是着重考虑输入条件,如果程序输入之间没有什么联系,采用等价类划分和边界值分析是一种比较有效的方法。如果输入之间有关系,例如,约束关系、组合关系,这种关系用等价类划分和边界值分析是很难描述的,测试效果难以保障,因此必须考虑使用一种适合于描述对于多种条件的组合,产生多个相应动作的测试方法,因果图正是在此背景下提出的。因果图法着重测试规格说明中的输入与输出间的依赖关系。
白盒测试
代码检查法,静态结构法,静态质量度量法,逻辑覆盖法,基本路径测试,域测试,符号测试,z路径覆盖与程序变异
逻辑覆盖法
逻辑覆盖测试是通过对程序逻辑结构的遍历实现程序的覆盖
从覆盖源代码的不同程度可以分为以下六个标准:
语句覆盖、判定覆盖(又称为分支覆盖)、条件覆盖、判定-条件覆盖(又称为分支-条件覆盖)、条件组合覆盖和路径覆盖。
1.语句覆盖:可执行语句至少被执行一次;
2.判断覆盖:每个判断的取真分支和取假分支至少经历一次;
3.条件覆盖:每个条件的取值至少满足一次;
4.判断条件覆盖:判断和条件都满足;
5.条件组合覆盖:每个条件的所有可能都至少出现一次,并且判定结果至少出现一次 ;
他与条件覆盖的区别:他不是简单要求每个条件现“真”和“假”两种结果.而是要求这些结果所有可能至少出现
一次
6.路径测试:执行所有可能的执行路径;
if(A && B)
判定逻辑覆盖:需要覆盖 A&&B 取true和取false两种情况(A=TRUE B=TRUE + A=FALSE)就够了
条件逻辑覆盖:需要覆盖 A 取true和取false B取true和取false -> (A=TRUE B=FALSE + A=FALSE B=TRUE)两个就够了
条件组合覆盖:A=TRUE B=TRUE A=TRUE B=FALSE A=FALSE B=TRUE A=FALSE B=FALSE 四个全取到才行
所以条件逻辑覆盖更强
动态测试与静态测试
按是否执行代码划分
软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试
软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。
静态测试
静态测试包括代码检查、静态结构分析、代码质量度量等。
它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。
人工测试技术主要包含三种静态测试技术,分别是走查、审查和正式评审。
代码评审一般由程序员担任
同行评审目的:发现小规模工作产品的错误,系统测试计划属于项目阶段性关键文档,同行评审必须的
软件测试计划评审会需要参加人员:SQA/项目经理/客户(可选)/配置管理员/测试经理/开发组长/系统分析员
测试工具
JUnit
一个 Java 语言的单元测试框架。它由 Kent Beck 和 Erich Gamma 建立,逐渐成为源于 Kent Beck 的 sUnit 的 xUnit 家族中最为成功的一个。 JUnit 有它自己的 JUnit 扩展生态圈。多数 Java 的开发环境都已经集成了 JUnit 作为 单元测试的工具 。
JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个 回归测试 框架( regression testing framework )。 Junit 测试是程序员测试,即所谓 白盒测试 ,因为程序员知道被测试的软件如何( How )完成功能和完成什么样( What )的功能。 Junit 是一套框架,继承 TestCase 类,就可以用 Junit 进行自动测试
针对代码测试
Load Runner
负载压力测试:预测系统性能
预测系统行为和性能的工业标准级负载测试工具。模拟上千万用户同时实施并发操作,来实时监控可能发生的问题。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题, 可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。
其测试组件有
1.VuGen Load Generator(虚拟用户生成器)用于捕获最终用户业务流程和创建自动性能测试脚本 (也称为虚拟用户脚本)。
2.Controller (控制器)用于组织、驱动、管理和监控负载测试。
3.Analysis (分析器)有助于您查看、分析和比较性能结果。
JMeter+Badboy
基于JAVA的压力测试工具,Badboy用来进行脚本的录制
测试管理工具:对测试需求、计划、用例、实施进行管理
测试辅助工具:本身不执行,可以生成测试数据,为测试提供数据准备
功能测试:QTP(quicktest professional):自动测试工具
白盒测试:C++ TEST(做C和C++的白盒测试)
缺陷管理工具:Mantis、BugFree、QC、TD
用例管理工具:TestLink、QC
测试辅助工具:SVN
四种常用的自动化测试框架
1、数据驱动测试框架
2、测试脚本模块化框架
3、测试库构架框架
4、关键字驱动或表驱动测试框架