目录
一、按测试阶段分类
1、单元测试
2、集成测试
1)增量式集成测试
2)非增量式集成测试
3、确认测试
4、系统测试
5、验收测试
二、按是否查看源代码分类
1、黑盒测试
1)黑盒测试方法
2、白盒测试
1)白盒测试方法
三、按程序是否运行分类
1、静态测试
2、动态测试
四、其他测试
软件测试的步骤:单元测试、集成测试、确认测试、系统测试、验收测试(发版测试)
完成最小的软件设计单元的验证工作,确保模块被正确的编码
(依据概要设计)(白盒测试)
手段:stub代码、mock代码、驱动代码
在单元测试的基础上,将多个模块组装起来进行测试,重点关注模块的接口部分
(依据详细设计)(黑盒白盒)
是一种逐步集成和逐步测试的方法,把可能出现的错误分散暴露出来,便于找到问题和修改(对各个模块一边组装一边测试)
优点:更早地发现模块间的接口错误,有利于错误定位
缺点:需要编写驱动模块和桩模块
自顶向下增量式测试:从程序的初始模块开始测试
优点:只需要一个驱动,减少驱动器开发的费用;支持故障隔离;较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能,功能较早证实,带来信心
缺点:桩的开发量大;底层验证被推迟;底层组件测试不充分
自底向上增量式测试:从程序的底层模块开始测试
优点:减少了桩的工作量;支持故障隔离;工作最初可以并行集成,比自顶向下效率高;对底层组件的行为较早验证。
缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能及时发现
桩模块:模拟被测模块所调用的模块,而不是软件产品的组成部分。在集成测试前,要为被测模块编制一些模拟下级功能的替身模块,以代替被测模块的接口,传递或接收被测模块的数据,这些“假”模块称为被测模块的桩模块。
驱动模块:模拟被测试模块的上一级模块,相当于被测模块的主程序。
主模块作为驱动模块,与之相连的模块用桩模块代替。
混合增量式测试(三明治测试)
优点:具有自顶向下和自底向上的优点,运用了一定的技巧,能够减少桩模块和驱动模块的开发
缺点:中间层不能尽早得到充分的测试,或者因为中间层如果选择不适当导致增加驱动模块的和桩模块工作量的设计负担
对每个单元进行充分测试后,把所有单元全部集成起来,一次性进行集成测试
优点:减少测试工作量
缺点:难以定位问题,可能会发现很多错误
1)Big-Bang集成测试
也叫一次性组装或者整体拼装。
在辅助模块的辅助下,一次性把所有系统组件集合到被测系统中(不考虑组件之间的相互依赖性或者可能存在的风险),一般一次性成功的几率不大
适用于:在原有稳定系统增加子模块或者系统较小时使用
优点:成本低,测试用例少,幸运的话,可以不需要或者只需要开发少量的辅助模块,就可以完成测试
缺点:不可避免的存在模块间接口、全局数据结构等方面的问题,一次试运行成功的可能性并不大,即使运行成功,也很可能会存在隐患。
把项目当做一个整体进行测试
(依据需求说明书)(黑盒测试)(包括:功能、性能、压力、安全、回归等)
手段:GUI手段等
是一项确认产品是否能满足合同或用户需求的测试
(依据需求说明书/用户需求)
测试粒度大小排序:单元<集成<系统<验证
只关注功能,不关注功能具体实现方法
通过检查软件内部的逻辑结构,对软件的逻辑路径进行覆盖测试
if(a&&b)
{
c=a+b;
}
else
{
c=a-b;
}
1)语句覆盖
确保每条语句在程序中执行一次
2)判定覆盖
每个判断的分支取真分支和取假分支至少经历一次
即a、b 真;a、b 一真一假
3)条件覆盖
使得判定的条件都至少满足一次
a false ,b false
a ture,b ture
4)判定条件覆盖
判定覆盖和条件覆盖必须都满足
a=T,b=T
a=T,b=F
a=F,b=T
5)条件组合覆盖
每个判定的条件的各种取值组合至少出现一次
a=T,b=T
a=T,b=F
a=F,b=T
a=F,b=F
6)路径覆盖
执行所有可能执行的路径
判定条件覆盖一定包含判定覆盖和条件覆盖
路径覆盖肯定包含判定覆盖,与条件没有直接关系。
- 如果某测试用例集实现了某软件的路径覆盖,那么一定同时实现了该软件的判定覆盖
强度排序:语句覆盖<判定覆盖<条件覆盖<判定条件覆盖<条件组合覆盖<路径覆盖
可同时用于黑盒和白盒的测试方法:边界值法(但是边界值法是黑盒测试方法)
例题:
答案:3
解析:ch= -1、3、10
不用运行程序的测试
包括代码检查、静态结构分析、代码质量度量、文档测试、编写规则检查、程序结构检查、程序复杂度检查、数据流分析、代码覆盖率等等
它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。 (Fxcop是代码分析工具)
需要执行代码,通过运行程序找到问题
包括功能确认与接口测试、覆盖率分析、性能分析、内存分析、模块功能检查、系统压力测试、内存泄漏等。
1、冒烟测试:对软件最基本的流程和工作做一个粗略的测试
2、回归测试:当开发修复一个bug后提交代码,测试将测试用例都在新代码上再次进行测试
3、探索性测试:一边学习项目,一边测试
4、压力测试:测试软件的瓶颈和极限
5、负载测试:性能在极限情况下能坚持多久 ---- 验证要检验的能力最高能达到什么程度
(负载测试的目标是确定并确保系统在超出预期工作量的情况下仍然能正常运行)