书签 分享 收藏 举报 版权申诉 / 60
上传文档赚钱

类型软件测试第3章-白盒测试-教学PPT课件.pptx

  • 上传人(卖家):三亚风情
  • 文档编号:3390128
  • 上传时间:2022-08-26
  • 格式:PPTX
  • 页数:60
  • 大小:2.37MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《软件测试第3章-白盒测试-教学PPT课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    软件 测试 教学 PPT 课件
    资源描述:

    1、第第3章章 白白盒测试盒测试 逻辑覆盖法 插桩法3.1 逻辑覆盖法逻辑覆盖法是最常用的白盒测试方法,它包括以下5种方法:语句覆盖 判定覆盖 条件覆盖 判定-条件覆盖 条件组合覆盖3.1.1 语句覆盖语句覆盖(Statement Coverage)又称行覆盖、段覆盖、基本块覆盖,它是最常见的覆盖方式。3.1.1 语句覆盖语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句,这里的执行语句不包括头文件、注释、空行等。3.1.1 语句覆盖语句覆盖在多分支的程序中,只能覆盖某一条路径,使得该路径中的每一个语句至少被执行一次,但不会考虑各种分支组合情况。3.1.1 语句覆盖在代码中,AN

    2、D表示逻辑运算&,OR表示逻辑运算|,第12行代码表示如果x0成立并且y2成立或者z0成立,则执行z=z+(x+y)语句。示例代码示例代码IF x0 AND y2 OR z0 /条件2 z=z+(x+y)3.1.1 语句覆盖在代码运行流程图中,a、b、c、d、e表示程序执行分支。在语句覆盖测试用例中,使程序中每个可执行语句至少被执行一次。3.1.1 语句覆盖设计测试用例:Test1:x=1 y=-1 z=2执行测试用例,程序运行路径为acd。可以看出程序中acd路径上的每个语句都能被执行。但是语句覆盖对多分支的逻辑无法全面反映,仅仅执行一次不能进行全面覆盖,因此,语句覆盖是弱覆盖方法。3.1.

    3、1 语句覆盖语句覆盖虽然可以测试执行语句是否被执行到,但却无法测试程序中存在的逻辑错误。例如,如果上述程序中的逻辑判断符号“AND”误写了“OR”,使用测试用例Test1同样可以覆盖acd路径上的全部执行语句,但却无法发现错误。同样,如果将x0误写成x=0,使用同样的测试用例Test1也可以执行acd路径上的全部执行语句,但却无法发现x=0的错误。3.1.1 语句覆盖语句覆盖无需详细考虑每个判断表达式,可以直观地从源程序中有效测试执行语句是否全部被覆盖,由于程序在设计时,语句之间存在许多内部逻辑关系,而语句覆盖不能发现其中存在的缺陷,因此语句覆盖并不能满足白盒测试的测试所有逻辑语句的基本需求。

    4、3.1.2 判定覆盖判定覆盖(Decision Coverage)又称为分支覆盖,其原则是设计足够多的测试用例,在测试过程中保证每个判定至少有一次为真值,有一次为假值。3.1.2 判定覆盖判定覆盖的作用是使真假分支均被执行,虽然判定覆盖比语句覆盖测试能力强,但仍然具有和语句覆盖一样的单一性。3.1.2 判定覆盖以3.1.1节程序为例,设计判定覆盖测试用例。测试用例测试用例x xy yz z执行语句路径执行语句路径test1test12-11acdtest2test2-31-1abdtest3test33-15acetest4test431-1abe3.1.2 判定覆盖上述4个测试用例覆盖了ac

    5、d、abd、ace、abe四条路径,使得每个判定语句的取值都满足了各有一次“真”与“假”。相比于语句覆盖,判定覆盖的覆盖范围更广泛。判定覆盖虽然保证了每个判定至少有一次为真值,有一次为假值。3.1.2 判定覆盖判定覆盖并没有考虑到程序内部取值的情况。例如,测试用例test4,没有将x2作为条件进行判断,仅仅判断了z0的条件。此外,若将判定条件z0误写成z1 OR c1、c1、c0 x0S1x2S3x0 x0-S1x2-S3y0y0S4y0y0-S2z0取真值(即x0成立)的情况,-S1标记x0取假值(即x0不成立)的情况。同理,使用S2、S3、S4标记y2、z0取真值,使用-S2、-S3、-S

    6、4标记y2、z0取假值,最后得到执行条件判断语句的8种状态3.1.3 条件覆盖设计测试用例时,要保证每种状态都至少出现一次。设计测试用例的原则是尽量以最少的测试用例达到最大的覆盖率。测试用例测试用例x xy yz z条件标记条件标记执行路径执行路径Test1Test1315S1、-S2、S3、S4abeTest2Test2-31-1-S1、-S2、-S3、-S4abdTest3Test33-11S1、S2、S3、-S4ace3.1.3 条件覆盖从条件覆盖的测试用例可知,使用3个测试用例就达到了使每个逻辑条件取真值与取假值都至少出现了一次,但从测试用例的执行路径来看,条件分支覆盖的状态下仍旧不能

    7、满足判定覆盖,即没有覆盖acd路径。相比于语句覆盖与判定覆盖,条件覆盖达到了逻辑条件的最大覆盖率,但却不能保证判定覆盖,仍旧不能满足白盒测试覆盖所有分支的需求。3.1.4 判定-条件覆盖判定-条件覆盖(Condition/Decision Coverage)要求设计足够多的测试用例,使得判定语句中所有条件的可能取值至少出现一次,同时,所有判定语句的可能结果也至少出现一次。例如,对于判定语句if(a1 AND c1、c1、c1 AND c0、y2、z0,我们依然用S1、S2、S3、S4标记这四个条件成立,而-S1、-S2、-S3、-S4标记这些条件不成立。由于这四个条件每个条件都有取“真”、“假

    8、”两个值,因此所有条件结果的组合有24=16种3.1.5 条件组合覆盖序号序号组合组合含义含义1 1S1、S2、S3、S4x0成立,y2成立,z0成立。2 2-S1、S2、S3、S4x0不成立,y2成立,z0成立。3 3S1、-S2、S3、S4x0成立,y2成立,z0成立。4 4S1、S2、-S3、S4x0成立,y2不成立,z0成立。5 5S1、S2、S3、-S4x0成立,y2成立,z0不成立。6 6-S1、-S2、S3、S4x0不成立,y2成立,z0成立。7 7-S1、S2、-S3、S4x0不成立,y2不成立,z0成立。8 8-S1、S2、S3、-S4x0不成立,y2成立,z0不成立。9 9

    9、S1、-S2、-S3、S4x0成立,y2不成立,z0成立。1010S1、S2、-S3、-S4x0成立,y2不成立,z0不成立。1111S1、-S2、S3、-S4x0成立,y2成立,z0不成立。1212-S1、-S2、-S3、S4x0不成立,y2不成立,z0成立。1313-S1、-S2、S3、-S4x0不成立,y2成立,z0不成立。1414S1、-S2、-S3、-S4x0成立,y2不成立,z0不成立。1515-S1、S2、-S3、-S4x0不成立,y2不成立,z0不成立。1616-S1、-S2、-S3、-S4x0不成立,y2不成立,z0不成立。3.1.5 条件组合覆盖经过分析可以发现,第2、6、

    10、8、13这4种情况是不存在的,这几种情况要求x0不成立,x2成立,这两种结果相悖,因此最终图3-1的所有条件组合情况有12种,根据这12种情况设计测试用例。3.1.5 条件组合覆盖条件覆盖测试用例序号序号组合组合测试用例测试用例条件条件1 1条件条件2 2覆盖路径覆盖路径xyztest1test1S1、S2、S3、S43-1511acetest2test2S1、-S2、S3、S431501abetest3test3S1、S2、-S3、S41-1311acetest4test4S1、S2、S3、-S43-1111acetest5test5-S1、S2、-S3、S4-5-2101abetest6t

    11、est6S1、-S2、-S3、S411101abetest7test7S1、S2、-S3、-S41-1110acdtest8test8S1、-S2、S3、-S461-201abetest9test9-S1、-S2、-S3、S4-11101abetest10test10S1、-S2、-S3、-S411-200abdtest11test11-S1、S2、-S3、-S4-2-1-300abdtest12test12-S1、-S2、-S3、-S4-31-100abd3.1.5 条件组合覆盖与判定-条件覆盖相比,条件组合覆盖包括了所有判定-条件覆盖,因此它的覆盖范围更广。但是当程序中条件比较多时,条件组

    12、合的数量会呈指数型增长,组合情况非常多,要设计的测试用例也会增加,这样反而会使测试效率降低。3.1.6 实例:三角形逻辑覆盖问题根据三角形三边的关系可将三角形分为4种类型:不构成三角形、一般三角形、等腰三角形、等边三角形。根据该原则实现一个判断三角形的程序。三角形逻辑覆盖3.1.6 实例:三角形逻辑覆盖问题INT A B C/三角形的三边IF(A+BC)&(A+CB)&(B+C)A)/是否满足三角形成立条件 IF(A=B)&(B=C)/等边三角形 等边三角形 ELSE IF(A=B)|(B=C)|(A=C)/等腰三角形 等腰三角形 ELSE/一般三角形 一般三角形ELSE 不是三角形 END3

    13、.1.6 实例:三角形逻辑覆盖问题三角形流程图3.1.6 实例:三角形逻辑覆盖问题对程序进行分析,程序的执行路径如右图。图中数字是代码行号,当执行程序输入数据时,程序根据条件判断沿着不同的路径执行。3.1.6 实例:三角形逻辑覆盖问题使用判定覆盖,使程序中每个判定语句至少有一次“真”值,至少有一次“假”值,根据流程图和路径图分析,可设计4个测试用例。编号编号测试用例测试用例路径路径预期输出预期输出ABCtest1test16661-2-3-4-11等边三角形test2test26681-2-5-6-11等腰三角形test3test33451-2-7-8-11一般三角形test4test4336

    14、1-9-10-11不构成三角形3.2 插桩法程序插桩就是往被测试程序中插入测试代码以达到测试目的的方法,插入的测试代码被称为探针。根据测试代码插入的时间可以将插桩法分为目标代码插桩和源代码插桩。3.2.1 目标代码插桩法目标代码插桩是指向目标代码(二进制代码)插入测试代码,获取程序运行信息的测试方法,也称为动态程序分析方法。3.2.1 目标代码插桩法1、目标代码插桩原理目标代码插桩法的原理是在程序运行平台和底层操作系统之间建立中间层,通过中间层检查执行程序、修改指令,开发人员、软件分析工程师等对运行的程序进行观察,判断程序是否被恶意攻击或者出现异常行为,从而提高程序的整体质量。3.2.1 目标

    15、代码插桩法2、目标代码插桩执行模式 即时模式(Just-In-Time):原始的二进制或可执行文件没有被修改或执行,将修改部分的二进制代码生成文件副本存储在新的内存区域中,在测试时仅执行修改部分的目标代码。3.2.1 目标代码插桩法 解释模式(Interpretation Mode):在解释模式中目标代码被视为数据,测试人员插入的测试代码作为目标代码指令的解释语言,每当执行一条目标代码指令,程序就会在测试代码中查找并执行相应的替代指令,测试通过替代指令的执行信息就可以获取程序的运行信息。探测模式(Probe Mode):探测模式使用新指令覆盖旧指令进行测试,这种模式在某些体系结构(如x86)中

    16、比较好用。PinDynamoRIO3.2.1 目标代码插桩法3、目标代码插桩工具3.2.2 源代码插桩法源代码插桩是指对源文件进行完整的词法、语法分析后,确认插桩的位置,植入探针代码。相比于目标代码插桩,源代码插桩具有针对性和精确性。3.2.2 源代码插桩法源代码码插桩模型3.2.2 源代码插桩法相比于目标代码插桩,源代码插桩实现复杂程度低。源代码插桩是源代码级别的测试技术,探针代码程序具有较好的通用性,使用同一种编程语言编写的程序可以使用一个探针代码程序来完成测试。对 比3.2.2 源代码插桩法通过一个小案例来讲解源代码插桩。该案例是一个除法运算。#include#define ASSERT

    17、(y)if(y)printf(出错文件:%sn,_FILE_);printf(在%d行:n,_LINE_);printf(提示:除数不能为0!n);/定义ASSERT(y)int main()int x,y;printf(请输入被除数:);scanf(%d,&x);printf(请输入除数:);scanf(%d,&y);ASSERT(y=0);/插入的桩(即探针代码)printf(%d,x/y);return 0;3.2.2 源代码插桩法插入宏函数ASSERT(y),当除数为0时打印错误原因、出错文件、出错行数等信息提示。根据除法运算规则设计测试用例。测试用例测试用例数据输入数据输入预期输出结

    18、果预期输出结果T1T11,11T2T21,-1-1T3T3-1,-11T4T4-1,1-1T5T51,0错误T6T6-1,0错误T7T70,0错误T8T80,10T9T90,-103.2.2 源代码插桩法程序插桩测试方法有效的提高了代码测试覆盖率,但是插桩测试方法会带来代码膨胀、执行效率低下和HeisenBugs,在一般情况下插桩后的代码膨胀率在20%40%,甚至膨胀率达到100%导致插桩测试失败。总 结 小提示:小提示:HeisenBugsHeisenBugsHeisenBugs称为海森堡bug,它是一种软件缺陷,这种缺陷的重现率很低,当人们试图研究时bug会消失或改变行为。实际开发软件测试

    19、中,这种缺陷也比较常见,测试人员测试到一个缺陷提交给开发人员,开发人员执行缺陷重现步骤却得不到报告的缺陷,缺陷已经消失或者出现了其他缺陷。多学一招多学一招:黑黑盒测试与白盒测试异同盒测试与白盒测试异同1、黑盒测试和白盒测试比较黑盒测试过程中不用考虑内部逻辑结构,仅仅需要验证软件外部功能是否符合用户实际需求。黑盒测试可发现以下缺陷:外部逻辑功能缺陷,如界面显示信息错误等 兼容性错误,如系统版本支持、运行环境等。性能问题,如运行速度、响应时间等。多学一招多学一招:黑黑盒测试与白盒测试异同盒测试与白盒测试异同1、黑盒测试和白盒测试比较白盒测试与黑盒测试不同,白盒测试可以设计测试用例尽可能覆盖程序中分

    20、支语句,分析程序内部结构。白盒测试常用于以下几种情况:源程序中含有多个分支,在设计测试用例时要尽可能覆盖所有分支,提高测试覆盖率。内存泄漏检查迅速,黑盒测试只能在程序长时间运行中发现内存泄漏问题,而白盒测试能立即发现内存泄露问题。多学一招多学一招:黑黑盒测试与白盒测试异同盒测试与白盒测试异同2、测试阶段测试名称测试名称测试对象测试对象测试方法测试方法单元测试单元测试模块功能(函数、类)白盒测试集成测试集成测试接口测试(数据传递)黑盒测试和白盒测试系统测试系统测试系统测试(软件、硬件)黑盒测试验收测试验收测试系统测试(软件、硬件、用户体验)黑盒测试#include int main()int i

    21、,mid,a3;for(i=0;i3;i+)scanf(%d,&ai);mid=a2;if(a1a2)if(a0a1)mid=a1;else if(a0a1)mid=a1;else if(a0a2)mid=a0;printf(中间值是:%dn,mid);return 0;3.2.3 实例:求三个数的中间值3.2.3 实例:求三个数的中间值上述代码是比较三个数中间值的源码,使用探针LINE()对源程序进行插桩,该探针监视程序执行过程。程序在执行后,LINE()会将程序的执行过程写入到一个名为prop.txt的文件中,若没有prop.txt文件会自动创建,若prop.txt文件已存在,则在每次执行

    22、程序之后从文件开始重新写入文件,覆盖上一次程序写文件的数据。测试人员通过写入的文件可以查看源程序执行的过程。3.2.3 实例:求三个数的中间值插桩后的代码:#include#define LINE()fprintf(_POINT_,%3d,_LINE_)FILE*_POINT_;int main()if(_POINT_=fopen(test.txt,w)=NULL)fprintf(stderr,不能打开test.txt文件);int i,mid,a3;for(LINE(),i=0;i3;LINE(),i+)LINE(),scanf(%d,&ai);LINE(),mid=a2;if(LINE()

    23、,a1a2)if(LINE(),a0a1)LINE(),mid=a1;else if(LINE(),a0a1)LINE(),mid=a1;else if(LINE(),a0a2LINE(),mid=a0;LINE(),printf(中间值是:%dn,mid);LINE(),fclose(_POINT_);return 0;3.2.3 实例:求三个数的中间值设计测试用例测试用例测试用例测试数据测试数据预期输出结果预期输出结果T1T11,1,21T2T21,2,32T3T33,2,12T4T43,3,33T5T56,4,5,5T6T66,8,46T7T78,4,983.2.3 实例:求三个数的中间

    24、值执行测试用例之后发现,T7结果与预期结果不一致。经过分析prop.txt文件和代码,发现程序中存在逻辑错误:只要输入的数据满足a0和a2大于a1且a0小于a3时,运行结果就会错误。3.2.3 实例:求三个数的中间值除了逻辑错误,源程序将程序执行的信息覆盖写入到了prop.txt文件中,这样在查看prop.txt文件时只能看到最近一次的执行过程,这违背了测试可溯源的原则。在修改代码逻辑错误时,同时修改prop.txt的写入方式为追加写入。3.2.3 实例:求三个数的中间值#include#define LINE()fprintf(_POINT_,%3d,_LINE_)FILE*_POINT_;

    25、int i,mid,a3;int main()if(_PROBE_=fopen(test.txt,a+)=NULL)fprintf(stderr,不能打开test.txt文件);for(LINE(),i=0;i3;LINE(),i+)LINE(),scanf(%d,&ai);LINE(),mid=a2;if(LINE(),a1a2)if(LINE(),a0a1)LINE(),mid=a1;else if(LINE(),a0a2)if(a0a1)LINE(),mid=a1;else if(LINE(),a0a2)LINE(),mid=a0;LINE(),printf(中间值是:%dn,mid);fprintf(_POINT_,n);fclose(_POINT_);return 0;3.3 本章小结本章讲解了白盒测试方法中的逻辑覆盖法和插桩法。逻辑覆盖法包含语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖,读者需要掌握这些方法以及它们之间的差别,在实际测试中当选择合适的方法进行测试。插桩法主要讲解了最常见的源代码插桩法,合理的探针有助于在程序开发中查找逻辑错误。希望通过本章的学习,读者能掌握白盒测试方法和基本的测试流程。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:软件测试第3章-白盒测试-教学PPT课件.pptx
    链接地址:https://www.163wenku.com/p-3390128.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库