第五章 白盒测试-精品文档资料整理.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第五章 白盒测试-精品文档资料整理.ppt》由会员分享,可在线阅读,更多相关《第五章 白盒测试-精品文档资料整理.ppt(121页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Copyright Tarena Technologies Inc., 2008. All rights reserved.Tarena High-End IT T中国北京中国北京电话:(010)62135687、62136369地址:北京市海淀区北三环西路甲18号 中鼎大厦B座7层中国上海中国上海电话:(021)61202630、61202603地址:上海市北京东路668号 上海科技京城B区9层 加拿大多伦多加拿大多伦多电话:(416)491-6456 地址:Suite 1208, Deerford Road, Toronto, Ontario, Canada邮编:M2J 3J3中国广州中国
2、广州电话:(020)85518868、85518898 地址:广州天河区岗顶侨鑫教育主楼三层白盒测试白盒测试Topicsl 白盒测试概述白盒测试概述l 静态白盒测试静态白盒测试l 动态白盒测试动态白盒测试l 逻辑覆盖逻辑覆盖l 基本路径测试方法基本路径测试方法2022-7-212白盒测试方法白盒测试方法l 为什么要进行白盒测试?为什么要进行白盒测试? 因为黑盒测试有一定的缺陷?因为黑盒测试有一定的缺陷?黑盒测试既不充分,而且效率也低。黑盒测试既不充分,而且效率也低。在系统完成之前,测试就无法开始,测试人员只在系统完成之前,测试就无法开始,测试人员只有软件版本发布时才能拿到版本进行测试。有软件版
3、本发布时才能拿到版本进行测试。白盒测试方法白盒测试方法l 为什么要进行白盒测试?为什么要进行白盒测试? 如果所有软件错误的根源都可以追溯到某个唯一原因如果所有软件错误的根源都可以追溯到某个唯一原因,那么问题就简单了。然而,事实上一个,那么问题就简单了。然而,事实上一个bugbug常常是由多个常常是由多个因素共同导致的,如下图所示。因素共同导致的,如下图所示。白盒测试白盒测试l 白盒测试(白盒测试(White-box testing)是通过对程序内部结构的分析、检测来寻找问题,又是通过对程序内部结构的分析、检测来寻找问题,又称透明盒测试和逻辑驱动测试称透明盒测试和逻辑驱动测试5/39白盒测试目的
4、白盒测试目的 l 保证程序中所有关键路径的测试保证程序中所有关键路径的测试,防止由于没有执防止由于没有执行的路径在实际投入运行后执行到发生意外的情行的路径在实际投入运行后执行到发生意外的情况况l 衡量测试完整性衡量测试完整性l 程序内部所有的逻辑值真、假两个分支的覆盖程序内部所有的逻辑值真、假两个分支的覆盖l 检查内存泄漏检查内存泄漏l 解决实验条件下很难搭建真实测试环境的问题解决实验条件下很难搭建真实测试环境的问题l 检查代码符合一定的编码规范,减少由于编码不检查代码符合一定的编码规范,减少由于编码不规范而引入错误规范而引入错误6/39Topicsl 白盒测试概述白盒测试概述l 静态白盒测试
5、静态白盒测试l 动态白盒测试动态白盒测试l 逻辑覆盖逻辑覆盖l 基本路径测试方法基本路径测试方法2022-7-217静态白盒测试静态白盒测试l 静态白盒测试静态白盒测试: 不运行不运行被测程序本身,仅通过被测程序本身,仅通过分析分析或或检查检查源源程序的程序的语法语法、结构结构、方法方法、接口接口等来检查程序等来检查程序的正确性,对需求文档、设计文档、源程序做的正确性,对需求文档、设计文档、源程序做结构分析、流程图分析、符号执行来找错。结构分析、流程图分析、符号执行来找错。 进行静态白盒测试的首要原因是进行静态白盒测试的首要原因是尽早发现软尽早发现软件缺陷件缺陷,以找出动态黑盒测试难以发现或隔
6、离,以找出动态黑盒测试难以发现或隔离的软件缺陷。另一个好处是给黑盒测试人员提的软件缺陷。另一个好处是给黑盒测试人员提供思路。供思路。静态白盒测试静态白盒测试l 静态测试错误类型:静态测试错误类型:不匹配的参数、不适当的循环嵌套和分支嵌套不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。的引用和可疑的计算等。2022-7-219静态白盒测试静态白盒测试l 代码走查(代码走查(walkthrough)开发组内部进行的,采用讲解、讨论和模拟运行的方式开发组内部进行的,采用讲解、讨论和模拟运行的方式进行的查找错误的
7、活动进行的查找错误的活动l 代码审查代码审查(Inspection)开发组内部进行的,采用讲解、提问并使用开发组内部进行的,采用讲解、提问并使用Checklist方方式进行的查找错误的活动。一般有正式的计划、流程和式进行的查找错误的活动。一般有正式的计划、流程和结果报告结果报告l 技术评审技术评审(Review)开发组、测试组和相关人员开发组、测试组和相关人员(QA、产品经理等、产品经理等)联合进行联合进行的,采用讲解、提问并使用的,采用讲解、提问并使用Checklist方式进行的查找错方式进行的查找错误的活动。一般有正式的计划、流程和结果报告误的活动。一般有正式的计划、流程和结果报告正式审查
8、正式审查l 正式审查正式审查(formal review)就是进行静态白盒测试的过程就是进行静态白盒测试的过程.正式审查的含义很广正式审查的含义很广,从两个程序员的交谈从两个程序员的交谈,到软件设计和代码的详细到软件设计和代码的详细,严格严格检查均属于此过程检查均属于此过程.正式审查的正式审查的4个基本要素个基本要素:正式审查正式审查1、确定问题确定问题。审查的目标是找出软件的问题,不仅是出错。审查的目标是找出软件的问题,不仅是出错的项目,还包括遗漏的项目。全部的批评应直指代码,而的项目,还包括遗漏的项目。全部的批评应直指代码,而不是其创建者。合作者不应该互相指责。个人情绪化感觉不是其创建者。
9、合作者不应该互相指责。个人情绪化感觉要保留。要保留。2、遵守规则遵守规则。 审查要遵守一套固定的规则,规则可能设定审查要遵守一套固定的规则,规则可能设定要审查的代码量、花费多少时间、哪些内容要做备注等等要审查的代码量、花费多少时间、哪些内容要做备注等等。其重要性在于合作者了解自己的作用和目标,这有助于。其重要性在于合作者了解自己的作用和目标,这有助于使审查进展的更加顺利。使审查进展的更加顺利。3、准备准备。每个合作者需要了解自己的责任和义务,并积极。每个合作者需要了解自己的责任和义务,并积极参与审查。在审查过程中找出问题大部分的缺陷是在准备参与审查。在审查过程中找出问题大部分的缺陷是在准备期间
10、发现的,而不是实际审查期间。期间发现的,而不是实际审查期间。4、编写报告编写报告。审查小组必须做出总结审查结果的书面报告。审查小组必须做出总结审查结果的书面报告,并使报告便于开发小组使用。审查结果必须尽快告诉别,并使报告便于开发小组使用。审查结果必须尽快告诉别人,比如发现多少问题,在哪发现的。人,比如发现多少问题,在哪发现的。2022-7-2112编码规范和标准编码规范和标准l 坚持标准和规范的原因坚持标准和规范的原因可靠性可靠性:l按照某种标准或规范编写的代码比不规范的按照某种标准或规范编写的代码比不规范的代码更可靠,缺陷更少代码更可靠,缺陷更少可读性可读性/可维护性可维护性l符合标准和规范
11、的代码,易于阅读、理解和符合标准和规范的代码,易于阅读、理解和维护维护移植性移植性l不同平台、不同硬件,不同编译器不同平台、不同硬件,不同编译器13/39代码审查单代码审查单l 代码审查单代码审查单 用于把代码与标准或规范进行对照补充,并确保代用于把代码与标准或规范进行对照补充,并确保代码符合项目的设计要求。码符合项目的设计要求。14/39数据引用错误数据引用错误数据声明错误数据声明错误计算错误计算错误函数参数错误函数参数错误比较错误比较错误输入输入/输出错误输出错误其它检查其它检查控制流程错误控制流程错误关于静态白盒测试在正式审查中验证软件应该查找的问题关于静态白盒测试在正式审查中验证软件应
12、该查找的问题: 1.数据引用错误数据引用错误数据引用错误是数据引用错误是指使用未经正确声明和初始化的变量、指使用未经正确声明和初始化的变量、常量、数组、字符串而导致的软件缺陷常量、数组、字符串而导致的软件缺陷。变量是否被赋予不同类型的值?例如,无意中使代码变量是否被赋予不同类型的值?例如,无意中使代码为整形变量赋予一个浮点数值?为整形变量赋予一个浮点数值?通用代码审查清单通用代码审查清单是否引用了未初始化的变量?查找遗漏之处与查找错误同等重要是否引用了未初始化的变量?查找遗漏之处与查找错误同等重要通用代码审查清单通用代码审查清单数组和字符串的下标是整数值吗?下标总是在数组和字符串长度范围之内吗
13、?数组和字符串的下标是整数值吗?下标总是在数组和字符串长度范围之内吗?通用代码审查清单通用代码审查清单数组和字符串的下标是整数值吗?下标总是在数组和字符串长度范围之内吗?数组和字符串的下标是整数值吗?下标总是在数组和字符串长度范围之内吗?通用代码审查清单通用代码审查清单在检索操作或者引用数组下标时是否包含在检索操作或者引用数组下标时是否包含“丢掉一个丢掉一个”这样的潜在错误?这样的潜在错误?通用代码审查清单通用代码审查清单变量是否被赋予不同类型的值?例如,无意中使代码为整形变量赋予一个浮点数变量是否被赋予不同类型的值?例如,无意中使代码为整形变量赋予一个浮点数值?值?通用代码审查清单通用代码审
14、查清单2. 数据声明数据声明数据声明缺陷产生的原因是数据声明缺陷产生的原因是不正确地声明不正确地声明或使用或使用变量变量和和常量常量.所有变量都赋予正常的长度、类型?例如,本应声明为所有变量都赋予正常的长度、类型?例如,本应声明为字符串的变量声明为字符数组了吗?字符串的变量声明为字符数组了吗?变量是否在声明的同时进行了初始化?是否正确初始化变量是否在声明的同时进行了初始化?是否正确初始化并与其类型一致?并与其类型一致?变量有相似的名称吗?这基本上不算软件缺陷,但有可变量有相似的名称吗?这基本上不算软件缺陷,但有可能是程序中其他地方出现名称混淆的信息。能是程序中其他地方出现名称混淆的信息。存在声
15、明过、但从未引用或者只引用过一次的变量吗?存在声明过、但从未引用或者只引用过一次的变量吗?所有变量都赋予正常的长度、类型和存储类了吗?例如所有变量都赋予正常的长度、类型和存储类了吗?例如,本应声明为字符串的变量声明为字符数组了吗?,本应声明为字符串的变量声明为字符数组了吗? 变量是否在声明的同时进行了初始化?是否正确初始化并与其类型一致?变量是否在声明的同时进行了初始化?是否正确初始化并与其类型一致? 变量有相似的名称吗?这基本上不算软件缺陷,但有可能是程序中其他地方出现名变量有相似的名称吗?这基本上不算软件缺陷,但有可能是程序中其他地方出现名称混淆的信息。称混淆的信息。3. 计算错误计算错误
16、计算或者运算错误实质上是糟糕的数学问题计算或者运算错误实质上是糟糕的数学问题.计算无法得到预计算无法得到预期结果期结果.计算时是否了解和考虑到编译器对类型或长度不一致的计算时是否了解和考虑到编译器对类型或长度不一致的变量的转换规则变量的转换规则?在数值计算过程中是否可能出现溢出在数值计算过程中是否可能出现溢出?除数除数/模是否可能为零模是否可能为零?对于算术运算对于算术运算,处理某些计算处理某些计算(特别是除法特别是除法)的代码是否会的代码是否会导致精度丢失导致精度丢失?变量的值是否超过有意义的范围变量的值是否超过有意义的范围?例如例如,可能性的计算结可能性的计算结果是否小于果是否小于0%或者
17、大于或者大于100%除数除数/模是否可能为零模是否可能为零?4. 比较错误比较错误小于小于、大于大于、等于等于、不等于不等于、真真、假假。比较和判断错误很可。比较和判断错误很可能是由于能是由于边界边界条件问题。条件问题。比较得正确吗?虽然听起来简单,但是比较应该是小比较得正确吗?虽然听起来简单,但是比较应该是小于还是小于等于常常发生混淆。于还是小于等于常常发生混淆。存在分数或者浮点值之间的比较吗?如果有,精度问存在分数或者浮点值之间的比较吗?如果有,精度问题会影响比较吗?题会影响比较吗?1.000001和和1.000002非常接近,它们非常接近,它们相等么?相等么?存在分数或者浮点值之间的比较
18、吗?如果有,精度问题会影响比较吗?存在分数或者浮点值之间的比较吗?如果有,精度问题会影响比较吗?1.000001和和1.000002非常接近,它们相等么?非常接近,它们相等么?每一个逻辑表达式都正确表达了么?逻辑计算按预计的进行了吗?求值次序有疑每一个逻辑表达式都正确表达了么?逻辑计算按预计的进行了吗?求值次序有疑问吗?问吗?每一个逻辑表达式都正确表达了么?逻辑计算按预计的进行了吗?求值次序有疑每一个逻辑表达式都正确表达了么?逻辑计算按预计的进行了吗?求值次序有疑问吗?问吗?逻辑表达式的操作数是逻辑值吗?例如,是否包含整数值的整型变量用于逻辑计逻辑表达式的操作数是逻辑值吗?例如,是否包含整数值
19、的整型变量用于逻辑计算中?算中?逻辑值逻辑值true false=(等于等于)、(小于)、(小于)、(大于)、(大于)、=(大于等于)、(大于等于)、(不(不等于)等于)NOT(非)、非)、AND(与)、与)、OR(或)或)5. 控制流程错误控制流程错误控制流程错误的原因是编程语言中控制流程错误的原因是编程语言中循环循环等等控制结构控制结构未按预未按预期方式工作期方式工作.它们通常由它们通常由计算计算或者或者比较比较错误直接或者间接错误直接或者间接造成造成.可能存在永远不停的循环吗?可能存在永远不停的循环吗?循环是否可能永不执行?如果是这样,可以接受吗?循环是否可能永不执行?如果是这样,可以接
20、受吗?如果程序包含像如果程序包含像switchcase语句这样的多个分支语句这样的多个分支,变量变量的取值能超出可能的分支数目吗的取值能超出可能的分支数目吗?如果超出如果超出,该情况能正该情况能正确处理吗确处理吗? 可能存在永远不停的循环吗?可能存在永远不停的循环吗?6. 方法参数错误方法参数错误方法参数错误的来源是软件子程序方法参数错误的来源是软件子程序不正确地传递数不正确地传递数据据.方法接收的参数类型和大小与调用代码发送的方法接收的参数类型和大小与调用代码发送的匹配吗匹配吗?次序正确吗次序正确吗?方法更改了仅作为输入值的参数吗方法更改了仅作为输入值的参数吗?每一个参数的类型是否与相应的形
21、参类型匹配每一个参数的类型是否与相应的形参类型匹配-例如例如,int对对int如果存在全局变量如果存在全局变量,在所有引用方法中是否有相在所有引用方法中是否有相同的定义和属性同的定义和属性?方法接收的参数类型和大小与调用代码发送的匹配吗方法接收的参数类型和大小与调用代码发送的匹配吗?次次序正确吗序正确吗? 如果存在全局变量如果存在全局变量,在所有引用子程序中是否有相同的定义和属性在所有引用子程序中是否有相同的定义和属性?7. 输入输入/输出错误输出错误输入输入/输出错误包括文件输出错误包括文件读取读取、接受键盘接受键盘或者或者鼠标输入鼠标输入以以及向及向打印机打印机或者或者屏幕屏幕等输出设备写
22、入错误。下列条目非常等输出设备写入错误。下列条目非常简单、通用、应该在使用时补充,以涵盖所测试的软件简单、通用、应该在使用时补充,以涵盖所测试的软件软件是否严格遵守外部设备读写数据的专用格式?软件是否严格遵守外部设备读写数据的专用格式?文件或者外设不存在或者未准备好的错误情况有处理吗文件或者外设不存在或者未准备好的错误情况有处理吗?软件是否处理外部设备未连接、不可用,或者读写过程软件是否处理外部设备未连接、不可用,或者读写过程中存贮空间占满等情况?中存贮空间占满等情况?软件以预期方式处理预计的错误吗?软件以预期方式处理预计的错误吗?检查错误提示信息的准确性、正确性、语法和拼写了吗检查错误提示信
23、息的准确性、正确性、语法和拼写了吗?8. 其他检查其他检查定义了一些不适合放在其他类别的条目。这不是为了完整定义了一些不适合放在其他类别的条目。这不是为了完整,而是提示为定制软件项目清单应该加入的内容。,而是提示为定制软件项目清单应该加入的内容。软件是否要移植到其他编译器和软件是否要移植到其他编译器和CPU,具有这样做的许,具有这样做的许可吗?如果没有计划或者测试,那么,移植性可能成为可吗?如果没有计划或者测试,那么,移植性可能成为一个大难题。一个大难题。是否考虑了兼容性,以使软件能够运行于不同数量的可是否考虑了兼容性,以使软件能够运行于不同数量的可用内存?用内存?程序编译是否产生程序编译是否
24、产生“警告警告”或者或者“提示提示”信息?信息?动态测试和静态测试动态测试和静态测试l 静态测试静态测试静态测试不实际运行软件,主要是对软件的编程格式、静态测试不实际运行软件,主要是对软件的编程格式、结构等方面进行评估结构等方面进行评估静态测试包括代码检查、程序结构分析、代码质量度量静态测试包括代码检查、程序结构分析、代码质量度量等。它可以由人工进行,也可以借助软件工具自动进行等。它可以由人工进行,也可以借助软件工具自动进行 代码检查比动态测试更有效率,能快速找到缺陷,发代码检查比动态测试更有效率,能快速找到缺陷,发 现现30%70%的逻辑设计和编码缺陷的逻辑设计和编码缺陷动态测试和静态测试动
25、态测试和静态测试l 静态分析静态分析静态分析是指在不执行的情况下进行评估的过程静态分析是指在不执行的情况下进行评估的过程包括:包括:l类型检查类型检查l风格检查风格检查l程序理解程序理解lBug查找查找l安全审查安全审查动态测试和静态测试动态测试和静态测试l 静态分析静态分析l类型检查(例子)类型检查(例子)lint main() char ch = 0; int n = 0; ch = n; Return 0;ll编辑器编译时通过,但是编辑器编译时通过,但是PCLint可以通过静态代码可以通过静态代码检查找到类型转换造成的精度丢失的问题检查找到类型转换造成的精度丢失的问题动态测试和静态测试动
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五章 白盒测试-精品文档资料整理 第五 测试 精品 文档 资料 整理
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内