01测试方法-引入
测试方法
学习目标
能区分黑盒测试、灰盒测试和白盒测试
能区分静态测试和动态测试
能区分人工测试和自动化测试
初步掌握黑盒测试类型和质量模型间关系
初步了解逻辑覆盖测试
初步了解同行评审
初步了解常用动态测试工具
初步了解什么情况下适合引入自动化测试
大致了解控制流分析、数据流分析、信息流分析
-----------------------------------------------
测试活动从不同的角度出发,可以有不同的分类,用对照比较的方式讲解一些测试分类:
黑盒测试和白盒测试
看不看代码进行划分,如果看内部结构代码相关的叫做白盒测试方法,不看内部结构看
整体的叫做黑盒测试方法
静态测试和动态测试
运不运行软件,运行叫做动态测试,不运行叫做静态测试
人工测试和自动化测试
人工参与不参与测试
还有其他一些分类方式,要把握的是高清每一种分类的具体含义
单元测试 系统测试
02测试方法-白盒测试引入
黑盒测试和白盒测试
静态测试和动态测试
人工测试和自动化测试
内部结构进行测试
回顾
测试用例包含预期结果
单元测试参照LLD
集成测试参照HLD
系统测试参照SRS
要做测试必须先搞清被测的对象本来是要做成什么样子的,然后将实际做出来的和预期的进行比较,
这样才能发现实际做出来的是不是有缺陷。根据利用的被测对象信息的不同,会采用不同的方法进行测试。
软件测试的两种极端情况
任何软件产品都可以使用以下的两种方法之一进行测试:
已知产品的需求规格,但不知道其内部实现,可以进行测试证明每个需求是否实现。
已知产品的 内部实现过程 ,可以通过测试证明每种内部操作是否符合设计规格的要求,所有内部成是否已经过检查。
计算器例子
参照SRS直接测试计算器的加法功能。这就是黑盒测试。
参照LLD根据加法主函数的伪码或者流程图测试该主函数的结构。
这就是白盒测试。
什么是白盒测试
白盒测试是依据被测试软件分析程序内部构造,并根据内部构造设计用例,来对内部控制流程进行测试,可完全
不顾程序的整体功能实现情况。
白盒测试是基于程序结构的逻辑驱动测试。
白盒测试又可以被称为玻璃盒、透明盒测试、开发盒测试、结构化测试、逻辑驱动测试。
为什么进行白盒测试
我们只要保证需求得到实现就行了,为什么要花费时间和精力来测试内部的逻辑细节呢?
白盒测试一般在测试前期进行,通过达到一定的逻辑覆盖率指标,使得软件内部逻辑控制结构上的问题能够基本得到消除
白盒测试能保证内部逻辑结构达到一定的覆盖程度,能够给予软件代码质量更大的保证
白盒测试 发现问题后解决问题 的成本较低
白盒测试的常用技术
白盒测试一般会用到静态分析和动态分析两类技术。常用的有:
静态分析:控制流分析、数据流分析、信息流分析等
动态分析: 逻辑覆盖测试 (分支测试、路径测试等)、程序插装等
03测试方法-白盒测试覆盖率插桩
逻辑覆盖测试(再看一次)
根据覆盖的对象不同,存在多种逻辑覆盖测试
语句覆盖
判定覆盖
条件覆盖
判定-条件覆盖
路径覆盖
...
逻辑覆盖率的统计通过程序插装来实现
程序插装
我们在调试程序时,常常要在程序中插入一些打印语句。其目的在于,希望执行程序时,
打印出我们最为关心的信息。进一步通过这些信息了解执行过程中程序的一些动态特性。
比如,程序的实际执行路径,或是特定变量在特定时刻的取值。
从这一思想发展处的程序插装技术能够按用户的要求,获取程序的各种信息,称为测试工作的
有效手段。程序插装方法简单地说是借助往被测程序中插入操作来实现测试目的地方法。
System.out.println(df.format(new Date()));
for(int i=0;i<300;i++)
{
for(int j=0; j<10000000; j++)
{
****
}
}
System.out.println(df.format(new Date()));
----------------------------------------------------------------
System.out.println(df.format(new Date()));
for(int i=0; i<100000000; i++)
{
for(int j=0; j<300; j++)
{
****
}
}
System.out.println(df.format(new Date()));
通过插装的手段得出两段代码运行的时间差,看看哪个效果会最好
白盒测试的特点(对代码要求高点)
测试人员需要了解软件的实现;
可以检测代码中的每条分支和路径;
揭示隐藏在代码中的错误;
对代码的测试比较彻底;
实现代码结构上的优化;
白盒测试投入较大,成本高;
白盒测试不验证规格的正确性。
04测试方法-黑盒测试引入测试类型
什么是黑盒测试
黑盒测试把被测对象看成一个黑盒,只考虑其整体特性,不考虑其内部具体实现。
黑盒测试针对的被测对象可以是 一个系统 、一个子系统、一个模块、一个子模块、一个函数等。
黑盒测试又可以被称为基于规格的测试。
常见的黑盒测试类型
功能性测试,一种是顺序测试每个程序特性或功能,另一种途径是一个模块一个模块的测试,即每个功能在
其最先调用的地方被测试;
容量测试,检测软件在处理海量数据时的局限性,能发现系统效率方面的问题;
负载测试,检测系统在一个很短时间内处理一个巨大的数据量或执行许多功能调用上的能力;
恢复性测试,主要保证系统在崩溃后能否恢复外部数据的能力;
黑盒测试类型和质量模型
黑盒测试类型都来源于质量模型
将软件的特性和质量特性结合起来就得到了测试类型
一个软件特性可以和一个质量特性结合得到一个测试类型
一个软件特性可以和多个不同的质量特性结合得到多个不同的测试类型
功能性测试所测试的软件质量特性
外部和内部质量
功能性 合适性 准确性 互操作性 保密安全性 功能性的依从性
可靠性 成熟性 容错性 易恢复性 可靠性的依从性
易用性 易理解性 易学性 易操作性 吸引性 易用性的依从性
效率 时间特性 资源利用性 效率依从性
维护性 易分析性 易改变性 稳定性 易测试性 维护性的依从性
可移植性 适应性 易安装性 共存性 易替换性 可移植的依从性
05测试方法-黑盒测试的方法和灰盒测试
常用的黑盒测试方法
等价类划分法?
边界值分析法?
因果图分析法?
判断表法?
状态迁移法?
...
不管是什么测试方法,都是为了减少测试时的测试用例数,都是为了用尽量少的测试用例
去完成测试,去发现更多的问题。
黑盒测试的特点
对于更大的代码单元来说(子系统甚至系统级)比白盒测试效率要高;
测试人员不需要了解实现的细节,包括特定的编程语言;
从用户的视角进行测试,很容易被大家理解和接受;
有助于暴露任何规格不一致或有歧义的问题;
------------------------------------------------------------
没有清晰的和简明的规格,测试用例是很难设计的;
不能控制内部执行路径,会有很多内部程序路径没有被测试到;
不能直接针对特定的程序段,这些程序可能非常复杂(因此可能隐藏更多的问题)。
灰盒测试
根据利用的被测对象信息的不同,会采用不同的方法进行测试。
利用被测对象的整体的特性信息,采用黑盒测试方法
利用被测对象的内部具体实现信息,采用白盒测试方法
如果既利用北侧对象的整体特性信息,又利用被测对象的内部具体实现信息,采用的就是
灰盒测试方法。两种信息占的比例不同,相应的灰度就不同。完全是整体特性信息,就是黑盒测试,
完全是内部具体实现信息,就是白盒测试(6:00重要,再看一次)
06测试方法-白盒黑盒灰盒总结
区分
测试阶段不同 白盒单元测试 灰盒集合测试 黑盒系统测试
测试依据不一样 白盒LLD 黑盒SRS 灰盒HLD
测试方法不一样 (2:10)重点
评估基准不一样 白盒--逻辑覆盖率 黑盒--需求覆盖率 灰盒--接口
特点不一样 白盒--及早的发现问题(缺点程序设计、调用用户感受不是很好) 黑盒--解决问题代价大,很难发现模块内部的问题
07测试方法-静态动态引入
软件产品的概念
软件研发可以看成一个生产过程,在这个过程中会有产品输出,或者叫做工件输出
输出的产品分为两类:
最终产品,如编译后的软件、用户手册等
中间产品,如SRS、HLD、LLD、代码等
无论是最终产品还是中间产品,都可以分成代码和文档
、文档进一步细分可以分成:
开发文档,如SRS、HLD、LLD等
测试文档,如测试计划,测试方案,测试用例等
只要是软件产品,都是测试的对象
静态测试和动态测试
静态测试:不运行被测试的软件系统,而是采用其他手段和技术对被测试软件
进行检测的一种测试技术。例如:代码走读、文档评审、程序分析等都是静态测试的范畴。
常用技术静态分析技术。
动态测试:按照预先设计的数据和步骤去运行被测软件系统,从而对被测软件系统进行检测的一种测试技术。
常用技术有动态分析技术。
08测试方法-静态测试
静态分析技术
定义:静态分析是一种不通过执行程序而分析程序执行的技术
功能:检查软件的表示和描述是否一致,没有冲突或者没有歧义,
它瞄准的是纠正软件系统在描述、表示和规格上的错误,因此是任何进一步测试执行的前提。
主要有三种不同的程序测试可能性:
规则考虑程序是否满足编码,语法上是否具有一致性和完整性;
考虑文档描述是否规范、准确、便于查阅;
考虑程序和文档之间的一致性。
文档说明书(2:00)
静态分析技术结构
手工静态分析-同行评审
静态分析技术中的一个最重要的手工技术是同行评审,根据形式正规的程度分为:
正规检视
技术评审
走查
同行评审的对象可以是计划、需求文档、设计图、代码等。
贯穿开发过程中的评审
自动化静态分析
静态验证 检测规格到程序实现之间转换上的问题,验证器徐媛媛有形式化的规格
和规格的形式化定义,静态验证比较程序提供的实际值和在规格文档中被预定义的目标值。
语法分析器 是一个基本的自动化静态分析工具,它把程序/文档文本分解成独立的语句。当在
内部检查程序/文本的时候,语句的一致性被进行了检查。
符号执行器 在符号短语中分析一个程序在给定的路径上做了些什么事情。
它模拟程序的执行,计算在程序不同位置上变量的值。符号执行器非常适合
用于数学算法的分析。
09测试方法-动态测试
动态分析技术
定义:对软件系统运行行为进行分析,包含程序在受控的环境下使用特定的输入进行正式
的运行,和期望的结果比较以检查系统运行是正确还是不正确。
常用的动态分析技术
路径测试
分支测试
性能测试
...
-----------------------------------------------------
常用动态分析工具功能
动态分析类 工具的功能
监测覆盖率分析 测试对代码的检测范围
跟踪(打断点) 跟踪程序执行期间的所有路径,例如所有变量的值等
调整 度量程序执行过程中使用的资源
模拟 模拟系统的一部分,例如,无法获得的代码或硬件
断言检查 测试在复杂逻辑结构中是否某个条件已经被给出
问题:利用这些功能进行的测试那些是白盒测试?哪些是黑盒测试?
-------------------------------------------------------
常用黑盒动态测试工具(2:00)
10测试方法-人工和自动化测试
人工测试和自动化测试
人工测试:测试活动(如评审、测试设计、测试执行等)由人来完成,狭义上是指测试执行由人工完成,这是最基本的测试形式
自动化测试:一般是指通过计算机模拟人的测试行为,替代人的测试活动,狭义上是指测试执行由计算机来完成
适合自动化测试的活动
自动化测试的意义
对程序新版本运行前一版本执行的测试,提高回归测试效率 例子:路由器.增加路由
可以运行更多更频繁的测试,比如冒烟测试 增加路由
可以执行手工测试困难或不可能做的测试,比如大量的重复操作或者集成测试 删除路由
更好地利用资源,比如测试仪器或者被测对象 查看路由
-----------------------------------------------------------------------------------------------
测试具有一致性和可重复性,即自动化测试的步骤和结果是完全一样的
测试的复用性,即自动化测试脚本可以拆分开给其它测试脚本使用
可以更快地将软件推向市场,软件发布前进行高效的回归测试,减少软件发布的时间
增加软件信任度,通过自动化测试提高了测试效率,可把节约的时间拿出来做更多的测试
11测试方法-自动化测试限制误区因素
自动化测试的限制 例子:用户登录
不能取代手工测试,自动化测试只能提高测试效率, 例子: 路由器
不能提高测试有效性,即不可能发现更多缺陷 *增加路由
手工测试比自动测试发现的缺陷更多 *删除路由
对测试设计依赖性极大,测试设计的不好会遗漏问题 *查看路由
自动化测试对软件开发具有很大的依赖性,开发上出现变更可能
导致前面的自动化测试完全失效
工具本身并不具备想象力,工具不具有智能
自动化测试的误区
不现实的期望,希望自动化能取代手工测试
缺乏测试实践经验,手工测试都做不好,或者经验积累不够,就尝试自动化,很难成功
期望自动化测试发现大量新缺陷,自动化只能保证测试执行效率,确保已有
的问题不会再发生,发现新缺陷的不是其目的
安全性错觉,认为进行了自动化测试的软件就是安全的,质量有保证的
只有手工测试做好了,明确了测试观察点,才能把自动化测试做好,所以手工测试
是自动化测试的一个基础
自动化测试因素
1.测试进度(准备时间)
2.人力要求(自动化人员)
3.版本的稳定(自动化维护)
4.版本引用情况
5.自动化率>20% 才进行
6.版本规模 100<