为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

02、白盒测试

2011-12-30 50页 ppt 854KB 126阅读

用户头像

is_408391

暂无简介

举报
02、白盒测试null第 2 章 白盒测试第 2 章 白盒测试罗 东 俊 ZSUJONE@126.COM主要内容主要内容2.1静态白盒测试和动态白盒测试 2.2白盒测试的重点及其对策 2.3白盒测试的测试用例设计方法 2.4白盒测试的覆盖准则 2.5白盒测试的工具 2.6代码的持续集成及其对测试的影响2.1静态白盒测试和动态白盒测试2.1静态白盒测试和动态白盒测试白盒测试关心软件内部设计和程序实现,主要测试依据是设计文档。 根据测试方法分为静态白盒测试和动态白盒测试。 静态白盒测试是指在不执行的条件下有条理地仔细审查软件设...
02、白盒测试
null第 2 章 白盒测试第 2 章 白盒测试罗 东 俊 ZSUJONE@126.COM主要内容主要内容2.1静态白盒测试和动态白盒测试 2.2白盒测试的重点及其对策 2.3白盒测试的测试用例设计方法 2.4白盒测试的覆盖 2.5白盒测试的工具 2.6代码的持续集成及其对测试的影响2.1静态白盒测试和动态白盒测试2.1静态白盒测试和动态白盒测试白盒测试关心软件内部设计和程序实现,主要测试依据是设计文档。 根据测试方法分为静态白盒测试和动态白盒测试。 静态白盒测试是指在不执行的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程。 动态白盒测试是指测试运行中的程序,并利用查看代码功能和实现方式得到的信息来确定哪些需要测试、哪些不需要测试、如何开展测试,从而设计和执行测试,找出软件缺陷的过程。 静态白盒测试 静态白盒测试 进行静态白盒测试的首要原因是尽早发现软件缺陷,以找出动态黑盒测试难以揭示或遇到的软件缺陷。 独立审查代码的人越多越好,特别是在开发过程初期从底层进行。 代码静态质量代码静态质量分析进行代码静态质量分析所依据的度量理论 McCabe度量法 HalStead度量法McCabe度量法McCabe度量法McCabe度量法是由Thomas McCabe提出的一种基于程序控制流的复杂性度量方法。 基于图论,进行程序复杂度度量 V(G)=E-n+2p E为图G中的边数,n为节点数,p为连通分量个数 V(G)值过大(≥10),程序不易理解与维护McCabe度量法示例McCabe度量法示例HalStead度量法HalStead度量法Halstead度量法以程序中出现的操作符和操作数为计算对象, 给出源程序后,根据程序中的这些参数,按公式可求得程序功耗的估值。程序的简明性 程序的简明性 程序的词汇量 程序的词汇量 (2) 程序的词汇量像汉语中的字、英语中的单词一样,反映了程序员需要学习多少术语才能理解、编程和维护一个程序。采用下式度量: 程序的体积 程序的体积 程序的功耗 程序的功耗 动态白盒测试动态白盒测试动态白盒测试不仅仅是查看代码,还包括直接测试和控制软件。 主要包括四个部分,分别为: 直接测试底层功能、过程、子程序和库。在Microsoft Windows中这称为应用程序编程接口(API)。 以完整程序的方式从顶层测试软件,但是根据对软件运行的了解调整测试案例。 从软件获得读取变量和状态信息的访问权,以便确定测试与预期结果是否相符,同时,强制软件以正常测试难以实现的方式运行。 估算执行测试时覆盖的代码量和具体代码,然后调整测试,去掉多余的,补充遗漏的。 动态白盒测试 vs. 调试技术 动态白盒测试 vs. 调试技术 它们的目标不同: 动态白盒测试的目标是寻找软件缺陷,调试的目标是修复它们。 软件测试人员要把问题缩减为能够演示软件缺陷的最简化的测试案例,测试时甚至包括那些值得怀疑的代码行信息;进行调试的程序员从这里继续,判断到底是什么导致软件缺陷,并设法修复。 2.2白盒测试的重点及其对策 2.2白盒测试的重点及其对策 白盒测试的重点主要体现在五个方面: 模块接口测试 模块局部数据结构测试 模块边界条件测试 模块执行路径测试 模块出错处理测试。 白盒测试的重点白盒测试的重点模块接口测试模块接口测试模块接口测试重点检查进出模块的数据是否正确。 主要检查的内容包括以下几个方面: 模块的实际输入与定义的输入是否一致,包括检查参数个数、类型、顺序等。 模块中对于非内部/局部变量是否合理使用。 使用其他模块时,是否检查该模块的可用性和处理结果。 使用外部资源时,是否检查了可用性并及时释放资源,这些资源包括内存、文件、硬盘、端口等。 模块局部数据结构测试模块局部数据结构测试模块局部数据结构测试重点检查局部数据结构能否保持完整性。 主要检查的内容包括以几个方面: 变量从来没有被使用,这时可能别的地方使用了错误的变量名。 变量没有初始化。 程序中包含了错误的类型转换。 程序中是否存在数组越界。 程序中是否存在非法指针。 程序中是否存在变量或函数名称拼写错误,以及使用了外部变量或函数。 模块边界条件测试 模块边界条件测试 模块边界条件测试重点检查临界数据是否正确处理。 主要检查的内容包括以下几个方面: 普通合法数据是否正确处理。 普通非法数据是否正确处理。 边界内最接近边界的(合法)数据是否正确处理。 边界外最接近边界的(非法)数据是否正确处理。 模块独立执行路径测试 模块独立执行路径测试 模块独立执行路径测试重点检查由于计算错误、判定错误、控制流错误导致的程序错误。 主要检查的内容包括以下几个方面: 程序中是否存在死代码。 程序中是否存在错误的计算优先级。 程序中是否存在精度错误,例如:比较运算错误、赋值错误。 表达式使用不正确符号,例如:应该使用“>”,却用了“>=”或者“<”。 循环变量的使用错误,例如:错误赋值。 模块内部错误处理测试模块内部错误处理测试模块内部错误处理测试检查内部错误处理设施是否有效。 主要检查的内容包括以下几个方面: 是否检查错误出现,尤其是在资源使用前后或者使用其他模块前后。 如果出现错误,是否进行错误处理,包括抛出错误、通知用户并进行。 错误处理是否有效,是否在系统干预前处理,和记录的错误是否真实详细。 2.3白盒测试的测试用例设计方法 2.3白盒测试的测试用例设计方法 2.3.1逻辑覆盖方法 2.3.2路径测试 2.3.3数据流测试2.3.1逻辑覆盖方法2.3.1逻辑覆盖方法逻辑覆盖包括: 语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 条件组合覆盖 路径覆盖。例题2-1例题2-1If(a>1) and (b=0) then x = x/a If(a=2) or (x>1) then x=x+1语句覆盖语句覆盖语句覆盖是指设计若干测试用例,使程序中的每个可执行语句至少执行一次; 针对上例,如果选择a=2,b=0,x=3,则程序按照路径ace执行,这样,程序段中的四个语句均得到执行,从而达到了语句覆盖。如果a=2,b=1,x=3,则程序按照路径abe执行,便未能达到语句覆盖。 语句覆盖优缺点语句覆盖优缺点语句覆盖虽然使得程序中的每个语句都得到执行,但并不能全面地检验每一条语句。这种覆盖测试不充分,无法发现程序中某些逻辑运算符和逻辑条件的错误。 例如例2-1的第一个逻辑运算符写成了“or”,第二个逻辑运算符写成了"and",使用测试用例a=2,b=0,x=3,程序仍将按照路径ace执行,虽然达到了语句覆盖,但是并没有发现程序中的错误。 判定覆盖判定覆盖判定覆盖是指设计若干测试用例,使程序中的每个判断真假的分支至少遍历一次;判定覆盖的优缺点判定覆盖的优缺点上边两组测试用例不仅满足了判定覆盖,而且还达到了语句覆盖,判定覆盖比语句覆盖更强一些。 但是,上例若把x>1错写为x<1,则使用第一组测试用例仍然按照路径ace执行,而不影响结果。因此,判定覆盖仍然无法确定判断内部条件的错误,无法测试程序中存在的一些缺陷。 条件覆盖条件覆盖条件覆盖是指设计若干测试用例,使程序中的每个条件的可能取值至少满足一次;条件覆盖优缺点条件覆盖优缺点上边两组测试用例第一组测试用例既判定覆盖,又条件覆盖;第二组测试用例条件覆盖,但没有判定覆盖。为解决这一矛盾,需要对条件和分支兼顾。 判定/条件覆盖 判定/条件覆盖 判定/条件覆盖是指选择足够的测试用例,使得同时满足判定覆盖和条件覆盖; 判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)至少出现一次。条件组合覆盖 条件组合覆盖 例子中的条件组合: 1)a>1,b=0记为t1,t2 2)a>1,b<>0记为t1,-t2 3)a<=1,b=0记为-t1,t2 4)a<=1,b<>0记为-t1,-t2 5)a=2,x>1记为t3,t4 6)a=2,x<=1记为t3,-t4 7)a<>2,x>1记为-t3,t4 8)a<>2,x<=1记为-t3,-t4条件组合覆盖是指选择足够的测试用例,使得程序中每一个分支判断中的每一个条件的每一种可能组合结果都至少被执行一次;条件组合覆盖测试用例 条件组合覆盖测试用例 上边四个测试用例虽然覆盖了条件组合和分支,但是仅覆盖了三条路径,漏掉了路径acd。 路径覆盖 路径覆盖 路径覆盖是指选择足够的测试用例,使得程序中所有的可能路径都至少被执行一次。 路径覆盖的优缺点路径覆盖的优缺点路径覆盖是覆盖测试级别最高的测试,但在实际问题中,一个不太复杂的程序,其路径数都是一个庞大的数字。要在测试中覆盖这样多的路径是无法实现的。 为解决这一难题,需要进行路径分析,了解路径数目和基本路径(任意有向边都在路径中最多出现一次 )数目。同时,要对循环进行考虑。 各种覆盖准则间的关系各种覆盖准则间的关系2.3.2路径测试 2.3.2路径测试 执行路径测试时,需要进行路径分析,了解路径数目和基本路径数目。同时,要对循环进行考虑。 一般来说,循环测试的目标是检查循环结构的有效性。 循环分为简单循环和嵌套循环。 对于简单循环(循环最大次数n),测试时可以考虑跳过整个循环;只循环一次;循环两次;循环m次,m最大值 (k==<各成立一次。这个规则主要检查中间运算符号的错误。 规则2 对于A>c时,应适当地选择A的值,使A=c+M (M是距c最小的机器容许正数,若A和c为整型时,M=1)。 规则3 对外部输入变量赋值,使其在每个测试用例中均有不同的值和符号,并与同一组测试用例中其他变量的值与符号不一致。即变量在不同测试用例中使用不同的值,避免变量名写错,避免应该使用变量的地方却使用了常量。ESTCA规则优缺点ESTCA规则优缺点围绕发生问题的区域进行测试,提高了错误的发现率 如:i>=0→i>0这个故障利用覆盖测试技术往往难以检测 寻找错误的广度不够LCSAJ覆盖准则 LCSAJ覆盖准则 Woodward等人提出了一种层次LCSAJ覆盖准则。 LCSAJ (Linear Code Sequence And Jump)是指线性代码序列与跳转。 一个LCSAJ是一组顺序执行的代码,以控制流跳转为其结束点。LCSAJ的起点是程序的第一行或者转移语句的入口点,或者是控制流可以跳达的点。 LCSAJ路径:首尾相连,从程序头到尾的一连串LCSAJ。LCSAJ准则内容 LCSAJ准则内容 第1层:语句覆盖。 第2层:分支覆盖。 第3层:LCSAJ覆盖。即程序中每个LCSAJ在测试中至少经历一次。 第4层:两两LCSAJ覆盖。即程序中每个首尾相连LCSAJ在测试中至少经历一次。 ...... 第n+2层(n为自然数):每n个首尾相连的LCSAJ组合都要在测试中至少经历一次。2.5白盒测试的工具2.5白盒测试的工具白盒测试工具分类 开放源码的Junit的使用 白盒测试工具分类白盒测试工具分类白盒测试工具一般是针对代码进行测试,测试中发现的缺陷可以定位到代码级。 根据测试工具原理的不同,又可以分为静态测试工具和动态测试工具。 静态测试工具静态测试工具静态测试工具直接对代码进行分析,不需要运行代码,也不需要对代码编译链接,生成可执行文件。 静态测试工具一般是对代码进行语法扫描,找出不符合编码的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等。 静态测试工具的代表有Telelogic公司的Logiscope软件、PR公司的PRQA软件。动态测试工具动态测试工具动态测试工具与静态测试工具不同,动态测试工具一般采用“插桩”的方式,向代码生成的可执行文件中插入一些监测代码,用来统计程序运行时的数据。 其与静态测试工具最大的不同就是动态测试工具要求被测系统实际运行。 动态测试工具的代表有Compuware公司的DevPartner软件、Rational公司的Purify系列。开放源码的Junit的使用开放源码的Junit的使用Junit是回归测试框架(Regression Testing Framework Written),由Erich Gamma and Kent Beck提出。 支持的语言包括Smalltalk,Java,C++,Perl和Python等。 支持的集成开发环境包括JBuilder和VisualAge等。 JUnit安装JUnit安装获取JUnit的软件包,从Junit(http://www.junit.org/index.htm下载最新的软件包。 将其在适当的目录下解包(安装在D:\junit2)。这样在安装目录(也就是你所选择的解包的目录)下你找到一个名为junit.jar的文件。将这个jar文件加入你的CLASSPATH系统变量。(IDE的设置会有所不同,参看所用的IDE的配置指南)JUnit就安装完了。Junit的框架 Junit的框架 Junit的包结构 Junit的包结构 一个例子:将要被测试的类一个例子:将要被测试的类public class Car{ public int getWheels(){ return 4;} }执行测试的类(Junit版) 执行测试的类(Junit版) 运行 运行 [Windows]d:>java junit.textui.TestRunner TestCar [Unix]% java junit.textui.TestRunner TestCar Time:0 OK(1 tests) 如果我们将Car.getWheels()中返回的的值修改为3,模拟出错的情形,则会得到如下结果: .F Time:0 There was 1 failure: 1)testGetWheels(TestCar))junit.framework.AssertionFailedError:expected:<4>but was:<3> at TestCar.testGetWheels(testCar.java:37) FAILURES!!! Tests run:1,Failures:1,Errors:02.6代码的持续集成及其对测试的影响2.6代码的持续集成及其对测试的影响持续集成主张进行频繁的集成和及时的反馈,包括以下几大要点: 访问单一源码库,将所有的源代码保存在单一的地点(源码控制系统),让所有人都能从这里获取最新的源代码(以及以前的版本)。 支持自动化创建脚本,使创建过程完全自动化,让任何人都可以只输入一条命令就完成系统的创建。 测试完全自动化,要求开发人员提供自测试的代码,让任何人都可以只输入一条命令就运行一套完整的系统测试。 提供主创建,让任何人都可以只输入一条命令就可以开始主创建。 提倡开发人员频繁地提交(Check In)修改过的代码。 本章总结本章总结讨论了: 2.1静态白盒测试和动态白盒测试 2.2白盒测试的重点及其对策 2.3白盒测试的测试用例设计方法 2.4白盒测试的覆盖准则 2.5白盒测试的工具 2.6代码的持续集成及其对测试的影响习题习题1.什么是静态白盒测试和动态白盒测试? 2.白盒测试的重点及相应的对策是什么? 4.白盒测试的覆盖准则是什么? 5.白盒测试的工具有哪些? 6.持续集成对白盒测试有怎样的影响?作业题作业题3.针对下面一段程序,设计其路径覆盖测试用例。
/
本文档为【02、白盒测试】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索