软件测试概述
一、软件测试的定义
软件测试是为了发现错误而针对某个程序或系统的执行过程,其目的在于检验它是否满足规定的需求。
二、软件测试的原则
1、穷举测试是不可能的
2、测试用例的设计是关键
3、缺陷具有免疫性→测试用例要不断更新
4、对发现错误较多的程序段,应进行更深入的测试
三、测试的生命周期
1、计划:标志测试条件(确定测试什么)和测试的优先级
(1)安排进度
(2)分配资源、人员
(3)确定测试的起始点和结束点
2、设计:设计测试用例(确定怎么测试)
(1)设计测试流程
1)测试过程
2)测试类型
(2)设计测试用例
测试用例由输入数据 和预期结果组成
1)数据
2)文件
3)操作序列
4)预期结果
测试用例的特性:有效性、经济性、可修改性
测试用例的基本要素:
(1)用例编号
(2)用例名称
(3)测试背景
(4)前置条件
(5)优先级
(6)重要级
(7)测试数据
(8)测试步骤
(9)预期结果
(10)实际结果
(11)备注
3、开发:测试开发(设计脚本、数据等)
4、执行:执行测试用例
5、评估:将测试结果与期望结果进行比较
测试结果的评估:
(1)错误数据统计
(2)缺陷报告单:缺陷的编号、被测软件版本、优先级、严重程度、缺陷描述、测试步骤、修复缺陷人员等
软件缺陷的级别:
(1)致命的
(2)严重的
(3)一般的
(4)微小的
(5)建议
四、软件测试的分类
1、方法
(1) 白盒测试
(2)黑盒测试
2、测试阶段或层次
(1)单元测试
(2)集成测试
(3)系统测试
(4)验收测试
3、目标或特性
(1)功能测试
(2)强壮性测试
(3)性能测试
(4)适用性测试
(5)可靠性测试
4、是否执行被测试软件
是:动态测试
否:静态测试
5、执行时是否需要人工干预
手工测试
自动化测试
6、测试实施组织
开发方测试(α测试)
用户测试
第三方测试
7、其他
回归测试
随机测试
变异测试
蜕变测试
组合测试
8、非功能性测试
安装测试
兼容性测试
性能测试
文档和帮助测试
保密性测试
压力测试
故障恢复测试
静态测试
静态测试:通过检查和评审对软件进行测试的方法。
评审的目的:在项目早期发现缺陷;降低项目失败风险;分享知识
评审分类:培训评审;预备评审;同行评审;状态评审
一、同行评审
1、类型
审查
小组评审
走读
桌面评审
临时评审
白盒测试
基本路径测试
基于控制流的测试
针对循环的测试
基于数据流的测试
变异测试
白盒测试又称为结构测试或逻辑驱动测试,是针对被测试程序单元内部如何工作的测试,特点是基于被测试程序的源代码,而不是软件的需求规格说明
一、基本/独立路径测试法
1、流图
流图又称程序图或控制流图,流图只有两种图形符号:结点和控制流线。结点用带标号的圆圈表示,可以代表一个或多个语句、一个处理框或一个判断框。控制流线用带箭头的弧线表示,代表程序中控制流。流图是一个可表示为G=<N,E>的有向图,其中,N表示图中的结点,而E表示图中的有向边
2、圈复杂度
计算公式:
① V(G)=m-n+2 其中:m表示有向图G中有向边的个数;n表示有向图中的结点数
② V(G)=强连通的流图在平面上围成的区域数
③ V(G)=二值判定结点数+1
3、基本(独立)路径法
一条路径是独立路径,那么其应满足:
(1)是一条从入口节点到出口节点的路径;
(2)该路径至少包含一条其它基本路径没有包含的边
圈复杂度 = 独立路径数的上限
二、基于控制流的测试
1、基于控制流的测试充分性准则
2、基于控制流的覆盖准则
语句覆盖
判定覆盖(分支覆盖)
条件覆盖
判定/条件覆盖
修正的判定/条件覆盖
条件组合覆盖
路径覆盖
覆盖率=(被覆盖的测试项数)/被测试项总数
(1)语句覆盖和块覆盖
语句覆盖又称为代码行覆盖,指选择足够多的测试用例,使得程序中的每一条可执行语句至少被执行一次
(2)判定覆盖
判定覆盖又叫分支覆盖,即设计若干测试用例,使得程序中的每个判定表达式的每种可能的结果值都应该至少执行一次,也就是说每个判定的“真”值分支和“假”值分支都至少执行一次
(3)条件覆盖
即设计足够多的测试用例,不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。也就是说,每个判定中的条件取“真”值和“假”值都需执行一次
(4)判定/条件覆盖
设计足够多的测试用例,使得判定表达式中的每一个条件都取到各种可能的值,同时每个判定表达式也都取到各种可能的结果
(5)条件组合覆盖
设计足够多的测试用例,使得每个判定表达式中的条件的各种组合可能都至少被执行一次
(6)改进的判定/条件覆盖
一个基于改进的条件/判定覆盖概念的充分性准则又> 称为MC/DC覆盖,满足MC/DC覆盖的测试用例要求> 如下:
1)每一个基本块都被覆盖了。
2)每一个简单条件都取过真值和假值。
3)每一个判定都得出过所有可能的输出结果。
4)每一个简单条件对表达式的输出结果的影响是独立的→对n个条件取值的组合,其中只有一个条件(假设名为A)取值不同,其他n-1个条件的取值完全相同,最后表达式的结果一真一假(也就是A的取值独立影响了最终的结果)
(7)路径覆盖
设计足够多的测试用例,使得程序中的所有可能的路径都至少被执行一次
三、关于循环语句的测试
1、基本的循环结构
(1)先判断再循环
(2)先循环再判断
2、循环测试
(1)Z路径覆盖测试
只考虑执行零次循环体和执行一次循环体这两种情况
(2)循环边界条件测试
对循环次数变量进行边界值测试,一般覆盖 7 个边界值点(假设最大循环次数为n):
1)直接跳过循环体
2)只执行一遍循环体
3)执行两遍循环体
4)执行m遍循环体(2<m<n-1)
5)执行n-1遍循环体
6)正好执行n遍循环体
7)超出最大循环次数
3、嵌套循环的测试
① 对最内层循环做简单循环的全部测试。所有其它层的循环变量置为最小值;
② 逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。
③ 反复进行,直到所有各层循环测试完毕。
④ 对全部各层循环同时取最小循环次数,或者同时取最大循环次数。
4、串接循环的测试
① 如果相连接的循环体互相独立,按照简单循环测试每一个循环体;
② 如果相连接的循环体1的循环变量的最终结果是循环体2循环变量的初始值,那么采用嵌套循环的方法来测试(靠前认为是内层循环)
三、数据流测试
1、c-use 和p-use
(1)如果一个变量被用在赋值语句的表达式、输出语句中,或者被当作参数传递给调用函数,或者被用在下标表达式中,都称为该变量的c-use
(2)如果一个变量被用在条件表达式中(比如if和while语句),则称为变量的p-use
2、数据流图
黑盒测试
一、黑盒测试的基本概念
黑盒测试又称为功能测试或数据驱动测试。此方法不需要了解程序的内部逻辑结构和内部特性,而是注重于程序的外部结构,主要对软件功能要求、软件界面、外部数据库访问及软件初始化等方面进行测试。测试者只要从程序接口处进行测试,以程序需求说明为测试依据,测试程序是否满足用户的需求,因此是从用户观点出发的测试
二、黑盒测试方法
等价类划分法 ;边界值分析法 ;决策表法 ;因果图法 ;正交测试法
1、等价类划分法
(1)有效等价类
(2)无效等价类
设计测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步直到所有有效等价类均被测试用例所覆盖
设计测试用例,使其只覆盖一个无效等价类,重复这一步,直到所有无效等价类均被覆盖
划分等价类的原则:
(1)按区间划分
(2)按数值划分
(3)按集合划分
(4)按限制条件或者限制规则划分
(5)按处理方式划分
2、边界值分析法
测试时输入变量取值:
(1)最小值(min)
(2)略高于最小值(min+)
(3)正常值(nom)
(4)略低于最大值(max-)
(5)最大值(max)
n个变量将产生4n+1个测试用例
健壮性测试:边界分析测试的一种扩展
测试时输入变量取值:
(6)比最小值要小(min-)
(1)最小值(min)
(2)略高于最小值(min+)
(3)正常值(nom)
(4)略低于最大值(max-)
(5)最大值(max)
(7)比最大值要大(max+)
n个变量将产生6n+1个测试用例
3、决策表法
决策表又称为判定表,是分析和表达多逻辑条件下执行不同操作的情况的工具。能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏,设计出完整的测试用例集合
决策表的组成:
由条件桩、动作桩、条件项和动作项四个部分组成
条件桩:列出了问题得所有条件。
动作桩:列出了问题规定可能采取的操作。
条件项:列出针对它左列条件的取值。
动作项:列出在条件项的各种取值情况下应该采取的动作。
规则:任何一个条件组合的特定取值及其相应要执行的操作。
决策表分类:
有限项(条目)决策表:每个条件只有两个值
扩展项(条目)决策表:条件项的取值有多个
一条规则对应一个测试用例, 条件项构成了测试用例的输入,相应的动作项则是预期结果
决策表中的不相关项:
条件桩中其中一个条件取不同值,其余条件取相同值,此时动作桩中的结果相同,则称为不相关项,可以将这两项进行合并。
不相关项(条件中桩中的那个条件)用“-”表示
4、因果图法
因果图,也称作依赖关系模型。主要用于描述软件输入条件(原因)与软件输出结果(结果)之间的依赖关系。
因果图的基本符号和约束:
(1)因果关系符号有:对应关系、否定关系、选择关系和并列关系
(2)约束关系符号有:互斥关系、包含关系、唯一关系、要求关系和屏蔽关系
一半先画出因果图,然后转化为决策表
简单问题直接使用决策表,复杂问题再利用因果图转化
5、正交测试法
正交实验法用在软件测试上,就是从大量的测试数据中挑选适量的,有代表性的进行实际测试,从而合理地安排测试的一种设计方法
正交表的组成因素:
(1)因素 (Factors)。欲考察的变量称为因素(变量)。在软件测试中,是指有多少个输入参数、变量或者配置。
(2)水平 (Levels)。任何单个因素能够取得的值的个数。在软件测试中,是指一个参数、变量或者配置允许取值的个数。
(3)强度(Strength)。变量间的相互关系。当强度为2时,只考虑变量两两之间(前面例子中的2组合测试)的影响,如果强度为3,同考虑3个变量对结果的影响;当强度增加时,用例的个数会急剧增加。
(4)行数(Runs)。实验次数的多少,在测试中就是指多少个用例
6、总结
黑盒测试主要检查下面几个方面的内容:
(1)正确性:计算结果,命名方面
(2)可用性:是否可以满足软件的需求说明
(3)边界条件:输入部分的边界值
(4)性能:程序的性能取决于两个因素:运行速度的快慢和需要消耗的系统资源
(5)压力测试
(6)错误恢复:错误处理,页面数据验证,包括突然间断点,输入错误数据等
(7)安全性测试:对系统的安全进入、安全操作及相关权限进行测试。特别是一些商务网站,或者跟钱有关,或者和公司秘密有关的web更是需要这方面的测试
(8)兼容性:不同浏览器,不同应用程序版本在实现功能时的表现
黑盒测试的流程:
1、测试计划
2、测试设计
3、测试开发
4、测试执行
5、测试评估
软件测试过程
1、单元测试
单元测试的考虑点:
(1)算法和逻辑
(2)模块接口
(3)数据结构
(4)边界条件
(5)独立的路径
(6)错误处理
(7)输入数据
(8)常量或局部变量
(9)标识符定义
(10)程序风格
(11)注释
驱动模块:驱动模块用来模拟被测单元的上层模块的程序模块
桩模块:桩模块又称为存根模块,它用来模拟被测单元的子模块
模块接口:
(1)对模块自身的接口做正确性检查:确定形式参数个数、数据类型、顺序是否正确;确定返回值类型,检查返回值的正确性。
(2)检查调用其他模块的代码的正确性;调用其他模块时给定的参数类型正确与否、参数个数正确与否、参数顺序正确与否。检查返回值正确与否,有没有误解返回值所表示的意思
2、集成测试
集成测试的必要性
①一个模块可能对另一个模块产生不利的影响
②将子功能合成时不一定产生所期望的主功能
③独立可接受的误差,在多个模块组装后可能会被放大,超过可接受的误差限度
④可能会有单元测试中未发现的接口方面的错误
⑤在单元测试中无法发现时序问题
⑥在单元测试中无法发现资源竞争问题
⑦共享数据或全局数据的问题
⑧数据单位、环境参数不统一的问题
集成测试的方法:
(1)非增式测试(非增量式一次性集成)
(2)增式测试(增量式集成)
实施方法:
1)自顶向下结合
2)自底向上结合
3、系统测试
系统测试的分类:
(1)功能测试(首要)
(2)性能测试
(3)兼容性测试
(4)安装卸载测试
(5)安全测试
(6)可靠性稳定性测试
……
4、验收测试(交付测试)
验收测试应当由最终用户或者扮演、模拟最终用户来执行测试过程
验收测试的分类
(1)通用软件:α测试(内测) 和 β测试(公测)
(2)专用软件:最终用户正式验收
回归测试
回归测试是指,在对软件代码进行修改之后,重新对其进行测试,以确认修改是正确的,没有引入新的错误,并且不会导致其他未修改的代码产生错误
回归测试的两种情况:
(1)纠正型回归测试
(2)增量型回归测试
回归测试需要测试的对象不仅仅是软件中发生了修改的部分,还需要对整个软件重新进行测试
自动化测试
分类:
(1)根据测试方法不同:白盒测试工具、黑盒测试工具
(2)根据测试的对象和类型不同:单元测试工具、功能测试工具、负载测试工具、性能测试工具、Web测试工具、数据库测试工具、回归测试工具、嵌入式测试工具、页面链接测试工具、测试设计与开发工具、测试执行和评估工具、测试管理工具