易禹2020/2/9软件测试技术第四讲:动态测试-白盒测试最基本的白盒测试–插桩法2•printf•log•System.out.println•在被测程序中插入操作(探测器),实现探查和监控的功能。•功能:检查程序的走向、计数、中间变量、…基本概念3•通过运行被测试程序,检查运行结果,分析其性能。•组成部分;1.构造测试用例;2.运行程序;3.分析结果。动态测试分类4•单元测试:对软件的各个模块进行测试;•集成测试:检查各单元之间的接口是否正确,非渐增和渐增式测试;•组装测试:单元测试的扩展,若干个单元间数据传输测试;•确认测试:对组装测试结果的检验,用户参与或主导的测试过程;•系统测试:测试系统在真实条件下的运行情况(负载、安全、疲劳等等)。•验收测试:购买者对软件的测试。验收测试系统测试确认测试单元/集成测试手动测试“白盒”测试5•与“黑盒”测试对应,在熟悉程序内部逻辑和结构设计的基础上进行的测试。•测试内容:对程序所有独立执行路径进行一次测试;对所有逻辑判定的两种情形至少测试一次;在循环的边界和运行的边界限内执行循环体;测试内部数据结构的有效性。“白盒”测试的目标6•如果要测试下面的函数,需要构造哪些测试用例?•范例程序:行1publicintfunc(inta,intb,intx){行2if((a1)&&(b==0))行3x=x/a;行4if((a==2)||(x1))行5x=x+1;行6returnx;行7}范例程序的流程图7逻辑覆盖的原则8•是指在熟悉程序内部的逻辑结构基础上的测试方法,又可以细分为:•语句覆盖•保证每一条语句都至少执行一次;•路径为ACE的测试用例(例如:a=2,b=0,x=3);逻辑覆盖的原则9•缺点:覆盖不完整,•忽略了IF语句为假的情况;•没有测试IF语句的每一个逻辑表达式。•“白盒”测试之判断覆盖•保证每一个分支至少执行一次;•如两个测试用例(ACD和ABE)判断覆盖的缺点:覆盖程度不高。“白盒”测试之条件覆盖10•每个条件组合获得各种可能的结果;“白盒”测试之条件覆盖11•如果选用两个测试用例来覆盖:•a=2,b=0,x=4,路径:ACE;•a=1,b=1,x=1,路径:ABD;判断覆盖vs.条件覆盖12•判断覆盖关心判定表达式的结果,而条件覆盖关心每个表达式的取值,不关心整个判定表达式的最终值;•判断覆盖不能涵盖条件覆盖,反之亦然。•例如,下面的用例仅满足条件覆盖,不满足判断覆盖:•a=2,b=0,x=1,路径:ACE;•a=1,b=1,x=2,路径:ABE;“白盒”测试之其他覆盖13•判断/条件覆盖:•判断中每个条件的所有取值至少执行一次,同时每个判断的所有结果至少执行一次。例如:路径:ACE和ABD就满足判断/条件覆盖。•条件组合覆盖:•各种条件组合至少出现一次,如判断(a1)&&(b==0)共有4种组合。•路径覆盖:•所有可能的路径至少执行一次,范例程序共4条路径。“白盒”测试练习14•请说出下面的程序最少需要几个测试用例以满足判断覆盖和条件组合覆盖?行1publicintfunc(inta,intb,intc){行2if((ab)&&(ac))行3a=b+c;行4if(bc)行5b=a-c;行6returnc;行7}参考答案15•判断覆盖2•条件组合覆盖6动态测试之路径测试16•是根据程序逻辑所产生的路径设计测试用例的方法,常用的有:•DD(Decision-To-Decision)路径测试:基于路径覆盖的思想,考虑各分支的覆盖情况,压缩串行部分;•DD路径测试压缩图:用来反映程序的分支情况,方便进行测试用例设计;•DD路径据称可以发现约85%的缺陷!DD路径测试压缩图实例17•其中:数字表示行号,字母表示压缩合并的节点。基本路径测试18•现实程序中可能的路径一般是天文数字!•解决办法:压缩覆盖的路径数到一定限度内,如语句覆盖。•McCabe提出了基本路径测试,保证每条语句至少执行一次,而且判断能取真、假两种值。•McCabe圈复杂度V(G)•V(G)=m−n+2,其中•m:弧数•n:节点数McCabe圈复杂度示例19•右图的圈复杂度是多少?•V(G)=17−13+2=6,•表示有6条独立的路径。独立路径与判定节点20•独立路径:一条完整的路径,至少包含一条前面路径未包含的边;•圈复杂度决定了独立路径的条数;•决定独立路径的关键:判定节点。独立路径示例21测试用例设计22•为每一条独立路径设计可强制执行的测试用例;•这些测试用例可以保证:•语句覆盖:每一条语句都被执行了一次;•每个判断条件都分别去过真和假两个值。23•请画出下面程序的流程图,计算圈复杂度和独立路径,并设计测试范例。publicintfunc(inta,intb){行1intm=1;行2if(ab){//交换a,b的值,保证b=a行3m=a;行4a=b;行5b=m;}行6while(m!=0){行7m=a%b;行8a=b;行9b=m;}行10returna;}“白盒”测试练习参考答案241.圈复杂度3,独立路径和测试用例为:①1−2−6−10,[无];②1−2−3−4−5−6−7−8−9−10,[a=8,b=24];③1−2−6−7−8−9−10,[a=3,b=2];白盒测试应用策略25•一般策略:①先静态后动态:②覆盖率测试一般使用基本路径测试,重点模块可应用多种覆盖率标准;③单元测试以代码检查、逻辑覆盖为主;集成测试再增加静态结构分析;系统测试中黑盒和白盒测试相结合。覆盖测试工具EclEmma26•Eclipsecommunityawards2008;•免费、开源的Eclipse插件;•EclEmma工作模式:通过颜色标记代码在运行代码中的语句的覆盖情况,•绿色表示该行代码被完整的执行;•红色表示该行代码根本没有被执行;•黄色表示该行代码部分被执行。•运行Sudoku查看代码覆盖情况。EclEmma演示