ch52白盒测试课件_第1页
ch52白盒测试课件_第2页
ch52白盒测试课件_第3页
ch52白盒测试课件_第4页
ch52白盒测试课件_第5页
已阅读5页,还剩233页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

概览在本章中,我们将学习:结构性白盒测试概述

程序结构分析

逻辑覆盖

结构性测试案例

概览在本章中,我们将学习:1课程目录结构测试概述

程序结构分析

逻辑覆盖

结构测试案例分析结构测试工具课程目录结构测试概述2结构性测试(1)程序实现是已知的,是测试人员能够根据功能实际实现的方式来标识测试用例,又称“白盒测试”、“透明盒测试”。结构性测试(1)程序实现是已知的,是测试人员能够根据功能实际3结构性测试(2)规格说明规格说明程序程序测试用例(方法A)测试用例(方法B)方法A覆盖的区域比方法B覆盖的区域大,但两种方法的覆盖区域只能在程序实现部分有两种维恩图来表示功能性测试:结构性测试(2)规格说明规格说明程序程序测试用例测试用例方法4功能性测试与结构性测试比较单独使用都有其局限性;最好的方法:结合两种方法。功能性测试结构性测试只利用规格说明标识测试用例只利用程序源代码标识测试用例如果程序实现了未描述的行为,功能测试无法意识到。如果已描述的行为未能实现,结构性测试无法意识到。冗余度大,可能会有漏洞具有覆盖率指标功能性测试与结构性测试比较单独使用都有其局限性;功能性测试结5结构测试定义

把测试对象看做一个透明的盒子白盒测试是根据被测程序的内部结构设计测试用例并完成测试的一种测试方法白盒测试或逻辑驱动测试基于一个应用代码的内部逻辑知识,测试覆盖全部代码、分支、路径和条件结构测试定义把测试对象看做一个透明的盒子6结构测试特点可以构成测试数据使特定程序部分得到测试有一定的充分性度量手段可获得较多工具支持通常只用于单元测试结构测试特点可以构成测试数据使特定程序部分得到测试7结构测试的方法静态测试方法:程序结构分析代码走查代码审查控制流分析数据流分析信息流分析动态测试方法:逻辑覆盖语句覆盖分支覆盖条件覆盖分支-条件覆盖路径覆盖结构测试的方法静态测试方法:动态测试方法:8代码覆盖率采用白盒法进行测试时,考虑的是测试用例对程序内部逻辑的覆盖程度最彻底的白盒法是覆盖程序中的每一条路径,但这往往无法实现采用其它一些标准来量度覆盖的程度,并希望覆盖程度尽可能高些代码覆盖率采用白盒法进行测试时,考虑的是测试用例对程序内部逻9课程目录结构测试概述程序结构分析

逻辑覆盖

结构测试案例分析结构测试工具使用课程目录结构测试概述10静态测试静态测试包括代码审查和代码走查,此方法是软件测试的有效手段静态测试静态测试包括代码审查和代码走查,此方法是软件测试的有11静态测试技术特点是指无须执行被测代码,而是借助专用的软件测试工具评审软件文档或程序,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率。静态测试在主机上完成,不需目标系统支持,测试的主要内容有编程标准验证、数据流分析技术、质量度量信息、代码结构可视化显示、测试外壳的创建。由此看出,静态测试只是对代码进行扫描分析,检测它的语法规则复杂度等是否符合要求,主要是为软件的质量保证提供依据,以提高软件的可靠性和易维护性静态测试可以手工、自动;静态测试技术特点是指无须执行被测代码,而是借助专用的软件测试12静态测试技术特点静态测试不必动态地执行程序,也就不必要进行测试用例设计和结果判读等工作;静态测试可以由人工进行,充分发挥人的逻辑思维优势。静态测试试是不需要特别条件,容易开展。静态测试技术特点静态测试不必动态地执行程序,也就不必要进行测13桌面检查桌面检查由程序员阅读自己所编的程序。存在一下问题:心理上的原因,没有发现错误的欲望;人存在思维定势;如果对功能理解错误,不容易纠正;相当于调试程序。桌面检查桌面检查由程序员阅读自己所编的程序。14代码走查与代码审查CodeInspection&Walkthrough:是由若干程序员与测试员组成一个小组,集体阅读并讨论程序或者用“脑”执行并检查程序的过程。分两步走:预先做准备工作;举行会议并讨论;代码走查与代码审查CodeInspection&Wal15代码走查与代码审查的优点避免了桌面检查的问题;一旦发现错误,就可以定位错误的位置和性质,调试所需要化的代价低;一次能够揭示一批错误,而不是一个错误;避免了动态调试的一些问题;代码走查与代码审查的优点避免了桌面检查的问题;16代码走查与代码审查的优势能够有效地发现30%~70%的逻辑设计和编码错误;IBM统计使用代码审查的方法,错误的检测效率高达全部查处错误的80%Myers的研究发现代码审查和代码走查平均查处全部错误的38%。研究表明:使用代码走查与代码审查发现某类错误比用计算机测试更有效,而对另一类错误情况正好相反。代码走查与代码审查与计算机测试是相互补充的,缺少任何一种方法都会使错误的检测率损失。代码走查与代码审查的优势能够有效地发现30%~70%的逻辑设17代码审查代码审查测试内容包括:检查代码和设计的一致性;检查代码对标准的遵循、可读性;检查代码的逻辑表达的正确性;检查代码结构的合理性;代码审查是由一组程序和错误检查技术组成,并且以代码审查组的方式进行。代码审查代码审查测试内容包括:18代码审查组代码审查组由4个人组成,1个组长,组长的条件:称职的程序员;但不是被测程序的编写者;不需要对所检查的程序很熟悉;要有较强的组织协调能力和语言能力;组长的职责:分配资料;安排计划;主持会议;纪录并保存被发现的错误;代码审查组代码审查组由4个人组成,1个组长,组长的条件:19代码审查组其余成员:资深的程序员程序编写者;专职测试人员;代码审查组其余成员:20代码审查过程准备:组长将程序目录和设计说明书分发给小组成员。成员熟悉材料;被测试程序的设计和编码人员想审查组详细说明所准备的材料;特别是代码的功能和功能间的关系;程序阅读:审查组人员仔细阅读代码和相关资料,对照代码审查单标出明显的缺陷及错误。代码审查过程准备:21代码审查过程跟踪及报告:会后将发现的错误登记报表并交给程序开发人员;如果发现错误较多或发现重大错误,在改正后,组长要再次组织审查会议;审查会议要限制在1.5小时~2小时以内。审查过程所需要的主要技术是代码审查单,通常将程序设计及编码中可能发生的各类错误分类,对没一类尽可能多地列举出典型错误。发现新的错误及时补充道代码审查表中。代码审查过程跟踪及报告:22代码审查单的示例数据引用错误是否引用了未赋值或未初始化的变量?所有的数组引用,其下标值是否在各自的相应的维数定义界内?所有的数组引用,下标是否整数值?所有引用的指针或变量是否已经分配了内存?在检索操作或用下标引用数组时,是否存在“差1”错误?代码审查单的示例数据引用错误23代码审查单的示例数据说明错误所有变量是否都显式地说明了?是否每个变量都赋与正常的长度、类型和存储分类?变量的初始化和她的存储类是否无矛盾?计算错误:是否使用过非一致数据类型的变量进行运算?是否存在混合运算?赋值语句的目标变量是否比其右边的表达式小?代码审查单的示例数据说明错误24代码审查单的示例代码审查还包括编程风格、标准、规范的符合性方面的内容。在错误登记表中应标明所查处的错误类型、错误类别、错误的严重程度、错误的原因等。代码审查单的示例代码审查还包括编程风格、标准、规范的符合性方25Myers将错误分为8类:数据引用错误;数据说明错误;计算错误;比较错误;控制流错误;界面错误;输入/输出错误;其他错误;Myers将错误分为8类:26有效地阅读程序仔细阅读需求、设计等文档,了解软件的整体物理意义、应用背景、在大系统中的地位。阅读结构化代码:追踪通过每个子程序的主要逻辑行,然后开始跟踪第二条路径,相当于深度优先;按排列顺序跟踪代码,相当于广度优先;有效地阅读程序仔细阅读需求、设计等文档,了解软件的整体物理意27代码走查代码走查就是在项目实施的过程中,在每一个模块单元编程结束,程序员对自己编写的代码测试完毕后,由另外一位程序员(一般情况下为同一项目组)对该程序员的代码和运行程序进行代码走查和运行功能的检查。

代码走查代码走查就是在项目实施的过程中,在每一个模块单元编程28代码走查的目的规范代码的编写;提高代码的稳定性与效率;增进其他程序员对本模块的了解;提高程序员的编程水平;代码走查的目的29检查内容

程序代码是否符合公司和项目组的编程规范,程序的注释是否便于理解,命名是否清晰、合理、明确;运行代码如果有界面,其界面规格是否符合项目组制定的统一界面风格;对用户的提示信息是否简单,清晰,准确;代码走查人员必须能够看懂代码及代码编写人的思路。检查内容程序代码是否符合公司和项目组的编程规范,程序的注释30程序所判断的路径是不是永远也走不到的路径;循环中的死循环;需要预先预留空间的数据容器

(如:一般的数组在初始化时就已经分配了足够的空间,即使用不了,它所占用的空间也不能用做它用);一些需要关闭的对象

(如:文件处理中的流,数据库处理中的连接);对象编程中的类,方法和变量的保护属性

(public,protected,private);程序中的无用代码最好删除;程序所判断的路径是不是永远也走不到的路径;31进入系统实现阶段项目经理指定模块编程人员及代码走查人员编程人员模块实现编程人员模块实现编程人员单元测试编程人员测试完成后,书写《代码走查申请单》,提交项目经理。A进入系统实现阶段项目经理指定模块编程人员及代码走查人员编程人32项目经理或其委派人员书写单元测试报告项目经理委派代码走查人员开始代码走查,编程人员予以配合。代码走查完毕后,代码走查人员书写《代码走查报告单》,提交项目经理。项目经理检查项目经理对代码走查中发现的问题安排编程人员予以改正进入下一阶段A项目经理或其委派人员书写单元测试报告项目经理委派代码走查人员33代码走查步骤本模块编写人在本模块的功能测试完成并优化代码后,向项目经理提供本模块所涉及到的所有代码的清单,填写《代码走查申请单》,并向项目经理申请做本模块的代码走查;项目经理指派人员进行某模块的代码走查,走查过程中遇到问题时应该和编写人协商解决,走查结束后,代码走查人员应进一步对本模块进行功能测试,完成后提交项目经理并说明走查的情况,填写《代码走查报告单》;项目经理对代码走查和模块功能做20%的抽查;提交单元测试报告,向测试组申请功能测试或系统测试。代码走查步骤本模块编写人在本模块的功能测试完成并优化代码后,34代码走查报告单项目名称:XXXXXX模块名称:XXXXXX走查人:XXX提交日期:XXXXXX

代码列表:[编号:应该和“代码走查申请单”中的对应部分的编号相一致;走查项的通过可以用打勾来表示,如果有未通过项则需说明原因]走查项说明:ü

项1------代码是否符合编码规范ü

项2------代码是否符合项目规定的界面风格ü

项3------代码中出现的提示信息是否明了ü

项4------走查人是否清楚编写人的思路ü

项5------此部分代码测试运行是否通过

代码走查报告单

35代码走查报告单编号项1项2项3项4项5未通过项及原因

代码走查报告单编号项1项2项3项4项5未通过项及原因

36控制流分析

非结构化程序会给测试、排错、和程序的维护带来许多困难要求写出的程序结构良好检查程序的控制结构成为十分有意义的工作控制流分析非结构化程序会给测试、排错、和程序的维护带来许多37程序流程图1325程序流程图132538控制流图12435abcdef控制流图12435abcdef39控制流图节点标有编号的圆圈

程序流程图中矩形框所表示的处理

菱形表示的两个甚至多个出口判断

多条流线相交的汇合点

控制流图节点40控制流图控制流线或弧箭头

与程序流程图中的流线一致,表明了控制的顺序

控制流线通常标有名字控制流图控制流线或弧41控制流图矩阵

acbdef1234512345控制流图矩阵acbdef123451234542控制流图矩阵便于机器表示和处理控制流图

连接弧的节点的号码决定了矩阵中元素的位置注意控制流的方向(行--〉列)两个节点没有弧线,所对应的位置也就没有元素控制流图矩阵便于机器表示和处理控制流图43程序结构的基本要求写出的程序不应包含:转向并不存在的标号

没有用的语句标号

从程序入口进入后无法达到的语句

不能达到停机语句的语句

目前对这四种情况的检测主要通过编译器和程序分析工具来实现。可以利用控制流图分析出来,是否存在以上情况。例如:1-》2-》3、4-》4-》5(结束)程序结构的基本要求写出的程序不应包含:44数据流分析

查找引用未定义变量等程序错误

查找对以前未曾使用的变量再次赋值等数据流异常的情况

常见的错误表现形式错拼名字名字混淆语句丢失数据流分析查找引用未定义变量等程序错误45数据流如果程序中某一语句执行时能改变某程序变量V的值,则称V被该语句定义如果一语句的执行引用了内存中变量V的值,则称V被该语句引用例如:X=Y+Z;---------X被定义,Y和Z被引用ifY>Zthenreturn;----Y和Z被引用数据流如果程序中某一语句执行时能改变某程序变量V的值,则称V46控制流图与数据流表1234106758911节点被定义变量被引用变量1X,Y,Z2XW,X3X,Y4Y,Z5YV,Y6ZV,Z7VX8WY9ZV10ZZ11ZZ的值被送给外部环境例如:假定某个变量的值在使用以前被错误的改写了(对输出没有任何作用),这个语句就会被发现控制流图与数据流表1234106758911节点被定义变量被47信息流分析通过对输入数据、输出数据、语句之间的关系的分析来检查程序错误信息流分析用来分析,是否存在无用的语句。整除算法例子输入:in_m是被除数,in_n是除数输出:out_q是商,out_r是余数信息流分析通过对输入数据、输出数据、语句之间的关系的分析来检48整除算法例子out_q=0;out_r=in_m;While(out_r>=in_n){out_q++;out_r=out_r–in_n;}整除算法例子out_q=0;49信息流关系图√√√√√√√in_min_n12345√√√√√√√√out_qout_r12345√√√√out_qout_rin_mIn_n(1)输入变量影响语句(2)语句影响到输出变量(3)输入影响到输出信息流关系图√√√√√√√in_min_n12345√√√√50信息流分析能够列出对输入变量的所有可能的引用在程序的任何指定点检查其执行可能影响某一输出变量值的语句输入输出关系提供一种检查,看每个输出值是否由相关的输入值,而不是其他值导出信息流分析能够列出对输入变量的所有可能的引用51课程目录白盒测试概述程序结构分析

逻辑覆盖

结构测试案例分析结构测试工具使用课程目录白盒测试概述52覆盖准则

测试到什么地步可以结束测试?覆盖准则覆盖准则测试到什么地步可以结束测试?53被测小程序

if(A>1&&B==0)X=X/A;if(A==2||X>1)X=X+1;被测小程序if(A>1&&B==0)54被测程序段流程图A>1&&B==0aA==2||X>1X=X/AFTbcX=X+1TeFd被测程序段流程图A>1&&B==0aA==255逻辑覆盖测试方法

语句覆盖

分支覆盖

条件覆盖

分支-条件覆盖

路径覆盖

逻辑覆盖测试方法语句覆盖56语句覆盖

原理:如果语句中有错误,仅靠观察不执行可能发现不了在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次若干个->尽量少

语句覆盖、程序段覆盖、程序块覆盖语句覆盖原理:如果语句中有错误,仅靠观察不执行可能发现不了57语句覆盖率语句覆盖率已执行的可执行语句占程序中可执行语句总数的百分比复杂的程序不可能达到语句的完全覆盖语句覆盖率越高越好语句覆盖率语句覆盖率58语句覆盖测试用例达到语句覆盖100%的测试用例(路径ace)A=2B=0X=3未达到语句覆盖100%的测试用例(路径abe)A=2B=1X=3语句覆盖测试用例达到语句覆盖100%的测试用例(路径ace59语句覆盖的优点检查所有语句结构简单的代码的测试效果较好容易实现自动测试代码覆盖率高

如果是程序块覆盖,则不涉及程序块中的源代码

语句覆盖的优点检查所有语句60语句覆盖不能检查出的错误条件语句错误“A>1&&B==0”->“A>0&&B==0”逻辑运算(&&、||)错误“A>1&&B==0”->“A>1||B==0”“U=A<1||B>2”->“U=A<1”语句覆盖不能检查出的错误条件语句错误61语句覆盖不能检查出的错误循环语句错误循环次数错误跳出循环条件错误语句覆盖不能检查出的错误循环语句错误62语句覆盖不能检查出的错误循环语句例子for(i=0;i<10;i++){statement;}While(x>3){statement;}for(i=0;i<=10;i++){statement;}While(x>3&&x<7){statement;}语句覆盖不能检查出的错误循环语句例子63语句覆盖率的问题能达到很高的语句覆盖率语句覆盖率看似很高,却有严重缺陷

if(x!=1){statements;……;}else{statement;}}99句}1句测试用例x=2语句覆盖率99%50%的分支没有达到语句覆盖率的问题能达到很高的语句覆盖率}99句}1句测试用例64分支覆盖设计若干测试用例,运行被测程序,使得程序中每个判断的真假分支至少经历一次又称判定覆盖while语句、switch语句、异常处理、跳转语句等等同样可以使用分支覆盖来测试分支覆盖率已取过“真”和“假”两个值的判定占程序中所有条件判定个数的百分比分支覆盖设计若干测试用例,运行被测程序,使得程序中每个判断的65分支覆盖测试用例

路径aceA=2B=0X=3

路径abdA=1B=0X=1路径acdA=3B=0X=3

路径abeA=2B=1X=2或分支覆盖测试用例路径ace路径acd或66分支覆盖的利弊分支覆盖要比语句覆盖查错能力强一些:执行了分支覆盖,实际也就执行了语句覆盖分支覆盖与语句覆盖存在同样的缺点不能查出条件语句错误不能查出逻辑运算错误不能查出循环次数错误不能查出循环条件错误分支覆盖的利弊分支覆盖要比语句覆盖查错能力强一些:执行了分支67条件覆盖设计若干测试用例,执行被测程序以后,要使每个判断中的每个条件的可能取值至少满足一次条件覆盖设计若干测试用例,执行被测程序以后,要使每个判断中的68条件覆盖分析第1个判断应考虑

A>1,记为T1A<=1,即记为F1B==0,记为T2B!=0,记为F2第2个判断应考虑

A==2,记为T3A!=2,记为F3X>1,记为T4X<=1,记为F4条件覆盖分析第1个判断应考虑69条件覆盖测试用例用例编号ABX路径覆盖条件1203aceT1,T2,T3,T42101abdF1,T2,F3,F43211abeT1,F2,T3,F4似乎执行了条件覆盖必然实现了分支覆盖?条件覆盖测试用例用例编号ABX路径覆盖条件1203aceT170条件覆盖测试用例用例编号ABX路径覆盖条件1103abeF1,T2,F3,T42211abeT1,F2,T3,F4执行条件覆盖并不能实现分支覆盖条件覆盖测试用例用例编号ABX路径覆盖条件1103abeF171条件覆盖的利弊能够检查所有的条件错误不能实现对每个分支的检查用例数量的增加a&&b&&(c||(d&&e))((a||b)&&(c||d))&&e条件覆盖的利弊能够检查所有的条件错误72分支-条件覆盖设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次分支-条件覆盖设计足够的测试用例,使得判断中每个条件的所有可73分支-条件覆盖分析(1)A>1,B==0,记为T1,T2(2)A>1,B!=0,记为T1,F2(3)A<=1,B==0,记为F1,T2(4)A<=1,B!=0,记为F1,F2(5)A==2,X>1,记为T3,T4(6)A==2,X<=1,记为T3,F4(7)A!=2,X>1,记为F3,T4(8)A!=2,X<=1,记为F3,F4分支-条件覆盖分析(1)A>1,B==0,记为T74分支-条件覆盖测试用例用例编号ABX覆盖组合号路径覆盖条件1203(1)(5)aceT1,T2,T3,T42211(2)(6)abeT1,F2,T3,F43103(3)(7)abeF1,T2,F3,T44111(4)(8)abdF1,F2,F3,F4覆盖了3条路径,漏掉了路径acd分支-条件覆盖测试用例用例编号ABX覆盖组合号路径覆盖条件175分支-条件覆盖的利弊既考虑了每一个条件,又考虑了每一个分支,发现错误能力强于分支覆盖和条件覆盖并不能全面覆盖所有路径用例数量的增加分支-条件覆盖的利弊既考虑了每一个条件,又考虑了每一个分支,76路径覆盖设计足够多的测试用例,要求覆盖程序中所有可能的路径路径ace记为L1abd记为L2abe记为L3acd记为L4路径覆盖设计足够多的测试用例,要求覆盖程序中所有可能的路径77路径覆盖测试用例用例编号ABX覆盖路径1203ace(L1)2101abd(L2)3211abe(L3)4301acd(L4)路径覆盖测试用例用例编号ABX覆盖路径1203ace(L1)78基本路径测试方法路径测试就是从一个程序的入口开始,执行所经历的各个语句的完整过程。从广义的角度讲,任何有关路径分析的测试都可以被称为路径测试。完成路径测试的理想情况是做到路径覆盖,但对于复杂性大的程序要做到所有路径覆盖(测试所有可执行路径)是不可能的。在不能做到所有路径覆盖的前提下,如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。这种测试方法就是通常所说的基本路径测试方法。

基本路径测试方法路径测试就是从一个程序的入口开始,执行所经历79基本路径测试方法(续)基本路径测试方法是在控制流图的基础上,通过分析控制结构的环形复杂度,导出执行路径的基本集,再从该基本集设计测试用例。基本路径测试方法包括以下4个步骤:(1)画出程序的控制流图。(2)计算程序的环形复杂度,导出程序基本路径集中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。(3)导出基本路径集,确定程序的独立路径。(4)根据(3)中的独立路径,设计测试用例的输入数据和预期输出。基本路径测试方法(续)基本路径测试方法是在控制流图的基础上,80环形复杂度环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度的软件度量。环形复杂度的应用——可以将环形复杂度用于基本路径方法,它可以提供:程序基本集的独立路径数量;确保所有语句至少执行一次的测试数量的上界。独立路径是指程序中至少引入了一个新的处理语句集合或一个新条件的程序通路。采用流图的术语,即独立路径必须至少包含一条在本次定义路径之前不曾用过的边。测试可以被设计为基本路径集的执行过程,但基本路径集通常并不唯一。

环形复杂度环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度81计算环形复杂度的方法环形复杂度以图论为基础,为我们提供了非常有用的软件度量。可用如下三种方法之一来计算环形复杂度:控制流图中区域的数量对应于环形复杂度。给定控制流图G的环形复杂度—V(G),定义为V(G)=E-N+2

其中,E是控制流图中边的数量,N是控制流图中的节点数量。给定控制流图G的环形复杂度—V(G),也可定义为V(G)=P+1

其中,P是控制流图G中判定节点的数量。判定节点是输出边至少2条以上的节点。计算环形复杂度的方法环形复杂度以图论为基础,为我们提供了非常82基本路径测试方法(续)voidSort(intiRecordNum,intiType)1{2intx=0;3inty=0;4while(iRecordNum-->0)5{6 If(iType==0)7 x=y+2;8else9 If(iType==1)10x=y+10;11else12x=y+20;13}14}基本路径测试方法(续)voidSort(inti83基本路径测试方法(续)画出控制流图:如右图所示计算环形复杂度:

10(条边)-8(个节点)+2=4导出独立路径(用语句编号表示)路径1:4→14路径2:4→6→7→14路径3:4→6→9→10→13→4→14路径4:4→6→9→12→13→4→14467910121314基本路径测试方法(续)画出控制流图:46791012131484路径覆盖的利弊实现了所有路径的测试,发现错误能力强某些条件错误可能无法发现路径数庞大,不可能覆盖所有路径用例数量的增加路径覆盖的利弊实现了所有路径的测试,发现错误能力强85循环测试路径覆盖0次循环检查跳出循环

1次循环检查循环初始值

2次循环检查多次循环

m次循环检查某次循环

最大次数循环、比最大次数多一次、少一次循环检查循环次数边界

循环测试路径覆盖0次循环86简化循环路径循环使路径数量急剧增长简化无论循环的形式和实际执行循环体的次数多少,只考虑循环一次和0次两种情况进入循环体一次跳出循环体简化循环路径循环使路径数量急剧增长87循环程序流程图CBCB(1)(2)循环程序流程图CBCB(1)(2)88简化循环路径图(1)和(2)都可简化为(3)CB简化循环路径图(1)和(2)都可简化为(3)CB89最少测试用例数计算对于具体的程序,至少要设计多少测试用例?估算最少测试用例数帮助执行测试有助于估算测试的时间最少测试用例数计算对于具体的程序,至少要设计多少测试用例?90结构化程序与N-S图结构化程序是由3种基本控制结构组成顺序型选择型(条件分支)重复型(循环)测试时考虑的结构顺序型选择型(条件分支)结构化程序与N-S图结构化程序是由3种基本控制结构组成91程序结构与测试用例数并行串行程序结构与测试用例数并行串行92程序结构与测试用例数当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例对于连锁型分支结构,若有n个判定语句,需要有2n个测试用例,覆盖它的2n条路径程序结构与测试用例数当程序中判定多于一个时,形成的分支结构可93最少测试用例数计算实例计算最少测试用例数最少测试用例数计算实例计算最少测试用例数94最少测试用例数计算实例最少测试用例数计算实例95最少测试用例数计算实例最少测试用例数计算实例96测试覆盖准则Foster的ESTCA覆盖准则错误敏感测试用例分析(ErrorSensitiveTestCasesAnalysis)问题测试覆盖准则Foster的ESTCA覆盖准则97ESTCA覆盖准则对于分支A(>,=,<,>=,<=)B,测试时应选择A<B,A=B,A>B的情况分别测试一次对于分支A(>,<)C,A是变量,C是常量当A>C时,选择A=C+小正数当A<C时,选择A=C-小正数对于测试用例取值,在每个测试用例中尽量不同的值或符号ESTCA覆盖准则对于分支A(>,=,<,>=,<98覆盖率要求对单元测试来说,语句覆盖和分支覆盖是最基本的要求由于程序中错误(异常)处理工作的重要性以及其结构相对简单,要求错误处理要做到路径覆盖对质量要求高的软件单元,可根据情况提出条件覆盖、分支-条件覆盖以及路径覆盖要求覆盖率要求对单元测试来说,语句覆盖和分支覆盖是最基本的要求99课程目录结构测试概述程序结构分析

逻辑覆盖

结构测试案例分析结构测试工具使用课程目录结构测试概述100结构测试案例求最小值

求数组中的最小值

k=i;for(j=i+1;j<=n;j++){if(A[j]<A[k])k=j;}结构测试案例求最小值101程序流程图

k=i;j=i+1j<=n?A[j]<A[k]?k=jj++acbdef程序流程图k=i;j=i+1j<=n?A[j102最少测试用例数3最少测试用例数3103测试用例(最少)用例编号输入输出循环inA[i]A[i+1]路径k10111ac1211212abefc1311221abdfc2测试用例(最少)用例编号输入输出循环inA[i]A[i+1]104疑问测试用例是否足够?循环测试是否足够?在结构复杂,测试用例数非常多的情况下,这些测试用例已经可以满足测试,但并不具有充分性如何达到充分性?

测试2次循环疑问测试用例是否足够?循环测试是否足够?105测试用例(充分)用例编号输入输出循环inA[i]A[i+1]A[i+2]路径k10111ac1211212abefc1311221abdfc24213123abefbefc15213213abdfbefc26213231abefbdfc37213321abdfbdfc3测试用例(充分)用例编号输入输出循环inA[i]A[i+1]106课程目录结构测试概述程序结构分析

逻辑覆盖

结构测试案例分析结构测试工具使用课程目录结构测试概述107目前的白盒测试工具DevPartner(Compuware)(C++、VC++、、java)IBMRationalPurify(C,C++)NUnit()JUnit(java)CppUnit(C++)目前的白盒测试工具DevPartner(Compuware)108Devpartner的使用Compuware的DevPartner家族可以帮助您快速提高Microsoft、Java及64位应用程序的质量和性能。分为(C/VC/)和java两个系列DevPartner可以精确报告程序使用内存的情况,识别效率低下的慢速代码,并将性能瓶颈确定到问题所在的源代码行。DevPartner还可以让您跟踪多个服务器之间的事务,让您获得大量的信息,并且对性能问题进行深入的分析。Devpartner的使用Compuware的DevPa109Devpartner的使用

DevPartner8.0ProfessionalEditionDevpartner的使用DevPartner8.0P110Devpartner的使用

DevPartner8.0ProfessionalEditionDevpartner的使用DevPartner8.0P111NUnit的使用NUnit是一个单元测试框架,专门针对于.NET来写的.其实在前面有JUnit(Java),CPPUnit(C++),他们都是xUnit的一员.最初,它是从JUnit而来.现在的版本是2.2.

NUnit最初是由JamesW.Newkirk,AlexeiA.Vorontsov和PhilipA.Craig,后来开发团队逐渐庞大起来.在开发过程中,KentBeck和ErichGamma2位牛人也提供了许多帮助.NUnit是xUnit家族种的第4个主打产品,完全由C#语言来编写,并且编写时充分利用了许多.NET的特性,比如反射,客户属性等等.NUnit的使用NUnit是一个单元测试框架,专门针对于.N112NUnit的使用NUnit的使用113本课总结结构性测试包含程序结构分析和代码覆盖测试衡量结构性测试的优劣的标准是代码覆盖率使用工具将提高结构性测试的质量和加快测试的时间本课总结结构性测试包含程序结构分析和代码覆盖测试114课后习题第一题:总结各种白盒测试方法的应用场景及其优缺点。第二题:使用逻辑覆盖测试方法测试以下程序段:VoidDo(intX,intA,intB){if(A>1)&&(B==0))X=X/A;if(A==2)||(X>1)X=X+1;}课后习题第一题:115课后习题第三题:计算下列程序片段的环形复杂度,使用逻辑覆盖测试方法测试。VoidDoWork(intx,inty,intz){intk=0,j=0;if((x>3)&&(z<10)){k=x*y-1;j=sqrt(k);}if((x==4)||(y>5))j=x*y+10;j=j%3;}课后习题第三题:116Thanks!Thanks!117谢谢!供娄浪颓蓝辣袄驹靴锯澜互慌仲写绎衰斡染圾明将呆则孰盆瘸砒腥悉漠堑脊髓灰质炎(讲课2019)脊髓灰质炎(讲课2019)谢谢!供娄浪颓蓝辣袄驹靴锯澜互慌仲写绎衰斡染圾明将呆则孰盆瘸118供娄浪颓蓝辣袄驹靴锯澜互慌仲写绎衰斡染圾明将呆则孰盆瘸砒腥悉漠堑脊髓灰质炎(讲课2019)脊髓灰质炎(讲课2019)供娄浪颓蓝辣袄驹靴锯澜互慌仲写绎衰斡染圾明将呆则孰盆瘸砒腥悉119概览在本章中,我们将学习:结构性白盒测试概述

程序结构分析

逻辑覆盖

结构性测试案例

概览在本章中,我们将学习:120课程目录结构测试概述

程序结构分析

逻辑覆盖

结构测试案例分析结构测试工具课程目录结构测试概述121结构性测试(1)程序实现是已知的,是测试人员能够根据功能实际实现的方式来标识测试用例,又称“白盒测试”、“透明盒测试”。结构性测试(1)程序实现是已知的,是测试人员能够根据功能实际122结构性测试(2)规格说明规格说明程序程序测试用例(方法A)测试用例(方法B)方法A覆盖的区域比方法B覆盖的区域大,但两种方法的覆盖区域只能在程序实现部分有两种维恩图来表示功能性测试:结构性测试(2)规格说明规格说明程序程序测试用例测试用例方法123功能性测试与结构性测试比较单独使用都有其局限性;最好的方法:结合两种方法。功能性测试结构性测试只利用规格说明标识测试用例只利用程序源代码标识测试用例如果程序实现了未描述的行为,功能测试无法意识到。如果已描述的行为未能实现,结构性测试无法意识到。冗余度大,可能会有漏洞具有覆盖率指标功能性测试与结构性测试比较单独使用都有其局限性;功能性测试结124结构测试定义

把测试对象看做一个透明的盒子白盒测试是根据被测程序的内部结构设计测试用例并完成测试的一种测试方法白盒测试或逻辑驱动测试基于一个应用代码的内部逻辑知识,测试覆盖全部代码、分支、路径和条件结构测试定义把测试对象看做一个透明的盒子125结构测试特点可以构成测试数据使特定程序部分得到测试有一定的充分性度量手段可获得较多工具支持通常只用于单元测试结构测试特点可以构成测试数据使特定程序部分得到测试126结构测试的方法静态测试方法:程序结构分析代码走查代码审查控制流分析数据流分析信息流分析动态测试方法:逻辑覆盖语句覆盖分支覆盖条件覆盖分支-条件覆盖路径覆盖结构测试的方法静态测试方法:动态测试方法:127代码覆盖率采用白盒法进行测试时,考虑的是测试用例对程序内部逻辑的覆盖程度最彻底的白盒法是覆盖程序中的每一条路径,但这往往无法实现采用其它一些标准来量度覆盖的程度,并希望覆盖程度尽可能高些代码覆盖率采用白盒法进行测试时,考虑的是测试用例对程序内部逻128课程目录结构测试概述程序结构分析

逻辑覆盖

结构测试案例分析结构测试工具使用课程目录结构测试概述129静态测试静态测试包括代码审查和代码走查,此方法是软件测试的有效手段静态测试静态测试包括代码审查和代码走查,此方法是软件测试的有130静态测试技术特点是指无须执行被测代码,而是借助专用的软件测试工具评审软件文档或程序,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率。静态测试在主机上完成,不需目标系统支持,测试的主要内容有编程标准验证、数据流分析技术、质量度量信息、代码结构可视化显示、测试外壳的创建。由此看出,静态测试只是对代码进行扫描分析,检测它的语法规则复杂度等是否符合要求,主要是为软件的质量保证提供依据,以提高软件的可靠性和易维护性静态测试可以手工、自动;静态测试技术特点是指无须执行被测代码,而是借助专用的软件测试131静态测试技术特点静态测试不必动态地执行程序,也就不必要进行测试用例设计和结果判读等工作;静态测试可以由人工进行,充分发挥人的逻辑思维优势。静态测试试是不需要特别条件,容易开展。静态测试技术特点静态测试不必动态地执行程序,也就不必要进行测132桌面检查桌面检查由程序员阅读自己所编的程序。存在一下问题:心理上的原因,没有发现错误的欲望;人存在思维定势;如果对功能理解错误,不容易纠正;相当于调试程序。桌面检查桌面检查由程序员阅读自己所编的程序。133代码走查与代码审查CodeInspection&Walkthrough:是由若干程序员与测试员组成一个小组,集体阅读并讨论程序或者用“脑”执行并检查程序的过程。分两步走:预先做准备工作;举行会议并讨论;代码走查与代码审查CodeInspection&Wal134代码走查与代码审查的优点避免了桌面检查的问题;一旦发现错误,就可以定位错误的位置和性质,调试所需要化的代价低;一次能够揭示一批错误,而不是一个错误;避免了动态调试的一些问题;代码走查与代码审查的优点避免了桌面检查的问题;135代码走查与代码审查的优势能够有效地发现30%~70%的逻辑设计和编码错误;IBM统计使用代码审查的方法,错误的检测效率高达全部查处错误的80%Myers的研究发现代码审查和代码走查平均查处全部错误的38%。研究表明:使用代码走查与代码审查发现某类错误比用计算机测试更有效,而对另一类错误情况正好相反。代码走查与代码审查与计算机测试是相互补充的,缺少任何一种方法都会使错误的检测率损失。代码走查与代码审查的优势能够有效地发现30%~70%的逻辑设136代码审查代码审查测试内容包括:检查代码和设计的一致性;检查代码对标准的遵循、可读性;检查代码的逻辑表达的正确性;检查代码结构的合理性;代码审查是由一组程序和错误检查技术组成,并且以代码审查组的方式进行。代码审查代码审查测试内容包括:137代码审查组代码审查组由4个人组成,1个组长,组长的条件:称职的程序员;但不是被测程序的编写者;不需要对所检查的程序很熟悉;要有较强的组织协调能力和语言能力;组长的职责:分配资料;安排计划;主持会议;纪录并保存被发现的错误;代码审查组代码审查组由4个人组成,1个组长,组长的条件:138代码审查组其余成员:资深的程序员程序编写者;专职测试人员;代码审查组其余成员:139代码审查过程准备:组长将程序目录和设计说明书分发给小组成员。成员熟悉材料;被测试程序的设计和编码人员想审查组详细说明所准备的材料;特别是代码的功能和功能间的关系;程序阅读:审查组人员仔细阅读代码和相关资料,对照代码审查单标出明显的缺陷及错误。代码审查过程准备:140代码审查过程跟踪及报告:会后将发现的错误登记报表并交给程序开发人员;如果发现错误较多或发现重大错误,在改正后,组长要再次组织审查会议;审查会议要限制在1.5小时~2小时以内。审查过程所需要的主要技术是代码审查单,通常将程序设计及编码中可能发生的各类错误分类,对没一类尽可能多地列举出典型错误。发现新的错误及时补充道代码审查表中。代码审查过程跟踪及报告:141代码审查单的示例数据引用错误是否引用了未赋值或未初始化的变量?所有的数组引用,其下标值是否在各自的相应的维数定义界内?所有的数组引用,下标是否整数值?所有引用的指针或变量是否已经分配了内存?在检索操作或用下标引用数组时,是否存在“差1”错误?代码审查单的示例数据引用错误142代码审查单的示例数据说明错误所有变量是否都显式地说明了?是否每个变量都赋与正常的长度、类型和存储分类?变量的初始化和她的存储类是否无矛盾?计算错误:是否使用过非一致数据类型的变量进行运算?是否存在混合运算?赋值语句的目标变量是否比其右边的表达式小?代码审查单的示例数据说明错误143代码审查单的示例代码审查还包括编程风格、标准、规范的符合性方面的内容。在错误登记表中应标明所查处的错误类型、错误类别、错误的严重程度、错误的原因等。代码审查单的示例代码审查还包括编程风格、标准、规范的符合性方144Myers将错误分为8类:数据引用错误;数据说明错误;计算错误;比较错误;控制流错误;界面错误;输入/输出错误;其他错误;Myers将错误分为8类:145有效地阅读程序仔细阅读需求、设计等文档,了解软件的整体物理意义、应用背景、在大系统中的地位。阅读结构化代码:追踪通过每个子程序的主要逻辑行,然后开始跟踪第二条路径,相当于深度优先;按排列顺序跟踪代码,相当于广度优先;有效地阅读程序仔细阅读需求、设计等文档,了解软件的整体物理意146代码走查代码走查就是在项目实施的过程中,在每一个模块单元编程结束,程序员对自己编写的代码测试完毕后,由另外一位程序员(一般情况下为同一项目组)对该程序员的代码和运行程序进行代码走查和运行功能的检查。

代码走查代码走查就是在项目实施的过程中,在每一个模块单元编程147代码走查的目的规范代码的编写;提高代码的稳定性与效率;增进其他程序员对本模块的了解;提高程序员的编程水平;代码走查的目的148检查内容

程序代码是否符合公司和项目组的编程规范,程序的注释是否便于理解,命名是否清晰、合理、明确;运行代码如果有界面,其界面规格是否符合项目组制定的统一界面风格;对用户的提示信息是否简单,清晰,准确;代码走查人员必须能够看懂代码及代码编写人的思路。检查内容程序代码是否符合公司和项目组的编程规范,程序的注释149程序所判断的路径是不是永远也走不到的路径;循环中的死循环;需要预先预留空间的数据容器

(如:一般的数组在初始化时就已经分配了足够的空间,即使用不了,它所占用的空间也不能用做它用);一些需要关闭的对象

(如:文件处理中的流,数据库处理中的连接);对象编程中的类,方法和变量的保护属性

(public,protected,private);程序中的无用代码最好删除;程序所判断的路径是不是永远也走不到的路径;150进入系统实现阶段项目经理指定模块编程人员及代码走查人员编程人员模块实现编程人员模块实现编程人员单元测试编程人员测试完成后,书写《代码走查申请单》,提交项目经理。A进入系统实现阶段项目经理指定模块编程人员及代码走查人员编程人151项目经理或其委派人员书写单元测试报告项目经理委派代码走查人员开始代码走查,编程人员予以配合。代码走查完毕后,代码走查人员书写《代码走查报告单》,提交项目经理。项目经理检查项目经理对代码走查中发现的问题安排编程人员予以改正进入下一阶段A项目经理或其委派人员书写单元测试报告项目经理委派代码走查人员152代码走查步骤本模块编写人在本模块的功能测试完成并优化代码后,向项目经理提供本模块所涉及到的所有代码的清单,填写《代码走查申请单》,并向项目经理申请做本模块的代码走查;项目经理指派人员进行某模块的代码走查,走查过程中遇到问题时应该和编写人协商解决,走查结束后,代码走查人员应进一步对本模块进行功能测试,完成后提交项目经理并说明走查的情况,填写《代码走查报告单》;项目经理对代码走查和模块功能做20%的抽查;提交单元测试报告,向测试组申请功能测试或系统测试。代码走查步骤本模块编写人在本模块的功能测试完成并优化代码后,153代码走查报告单项目名称:XXXXXX模块名称:XXXXXX走查人:XXX提交日期:XXXXXX

代码列表:[编号:应该和“代码走查申请单”中的对应部分的编号相一致;走查项的通过可以用打勾来表示,如果有未通过项则需说明原因]走查项说明:ü

项1------代码是否符合编码规范ü

项2------代码是否符合项目规定的界面风格ü

项3------代码中出现的提示信息是否明了ü

项4------走查人是否清楚编写人的思路ü

项5------此部分代码测试运行是否通过

代码走查报告单

154代码走查报告单编号项1项2项3项4项5未通过项及原因

代码走查报告单编号项1项2项3项4项5未通过项及原因

155控制流分析

非结构化程序会给测试、排错、和程序的维护带来许多困难要求写出的程序结构良好检查程序的控制结构成为十分有意义的工作控制流分析非结构化程序会给测试、排错、和程序的维护带来许多156程序流程图1325程序流程图1325157控制流图12435abcdef控制流图12435abcdef158控制流图节点标有编号的圆圈

程序流程图中矩形框所表示的处理

菱形表示的两个甚至多个出口判断

多条流线相交的汇合点

控制流图节点159控制流图控制流线或弧箭头

与程序流程图中的流线一致,表明了控制的顺序

控制流线通常标有名字控制流图控制流线或弧160控制流图矩阵

acbdef1234512345控制流图矩阵acbdef1234512345161控制流图矩阵便于机器表示和处理控制流图

连接弧的节点的号码决定了矩阵中元素的位置注意控制流的方向(行--〉列)两个节点没有弧线,所对应的位置也就没有元素控制流图矩阵便于机器表示和处理控制流图162程序结构的基本要求写出的程序不应包含:转向并不存在的标号

没有用的语句标号

从程序入口进入后无法达到的语句

不能达到停机语句的语句

目前对这四种情况的检测主要通过编译器和程序分析工具来实现。可以利用控制流图分析出来,是否存在以上情况。例如:1-》2-》3、4-》4-》5(结束)程序结构的基本要求写出的程序不应包含:163数据流分析

查找引用未定义变量等程序错误

查找对以前未曾使用的变量再次赋值等数据流异常的情况

常见的错误表现形式错拼名字名字混淆语句丢失数据流分析查找引用未定义变量等程序错误164数据流如果程序中某一语句执行时能改变某程序变量V的值,则称V被该语句定义如果一语句的执行引用了内存中变量V的值,则称V被该语句引用例如:X=Y+Z;---------X被定义,Y和Z被引用ifY>Zthenreturn;----Y和Z被引用数据流如果程序中某一语句执行时能改变某程序变量V的值,则称V165控制流图与数据流表1234106758911节点被定义变量被引用变量1X,Y,Z2XW,X3X,Y4Y,Z5YV,Y6ZV,Z7VX8WY9ZV10ZZ11ZZ的值被送给外部环境例如:假定某个变量的值在使用以前被错误的改写了(对输出没有任何作用),这个语句就会被发现控制流图与数据流表1234106758911节点被定义变量被166信息流分析通过对输入数据、输出数据、语句之间的关系的分析来检查程序错误信息流分析用来分析,是否存在无用的语句。整除算法例子输入:in_m是被除数,in_n是除数输出:out_q是商,out_r是余数信息流分析通过对输入数据、输出数据、语句之间的关系的分析来检167整除算法例子out_q=0;out_r=in_m;While(out_r>=in_n){out_q++;out_r=out_r–in_n;}整除算法例子out_q=0;168信息流关系图√√√√√√√in_min_n12345√√√√√√√√out_qout_r12345√√√√out_qout_rin_mIn_n(1)输入变量影响语句(2)语句影响到输出变量(3)输入影响到输出信息流关系图√√√√√√√in_min_n12345√√√√169信息流分析能够列出对输入变量的所有可能的引用在程序的任何指定点检查其执行可能影响某一输出变量值的语句输入输出关系提供一种检查,看每个输出值是否由相关的输入值,而不是其他值导出信息流分析能够列出对输入变量的所有可能的引用170课程目录白盒测试概述程序结构分析

逻辑覆盖

结构测试案例分析结构测试工具使用课程目录白盒测试概述171覆盖准则

测试到什么地步可以结束测试?覆盖准则覆盖准则测试到什么地步可以结束测试?172被测小程序

if(A>1&&B==0)X=X/A;if(A==2||X>1)X=X+1;被测小程序if(A>1&&B==0)173被测程序段流程图A>1&&B==0aA==2||X>1X=X/AFTbcX=X+1TeFd被测程序段流程图A>1&&B==0aA==2174逻辑覆盖测试方法

语句覆盖

分支覆盖

条件覆盖

分支-条件覆盖

路径覆盖

逻辑覆盖测试方法语句覆盖175语句覆盖

原理:如果语句中有错误,仅靠观察不执行可能发现不了在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次若干个->尽量少

语句覆盖、程序段覆盖、程序块覆盖语句覆盖原理:如果语句中有错误,仅靠观察不执行可能发现不了176语句覆盖率语句覆盖率已执行的可执行语句占程序中可执行语句总数的百分比复杂的程序不可能达到语句的完全覆盖语句覆盖率越高越好语句覆盖率语句覆盖率177语句覆盖测试用例达到语句覆盖100%的测试用例(路径ace)A=2B=0X=3未达到语句覆盖100%的测试用例(路径abe)A=2B=1X=3语句覆盖测试用例达到语句覆盖100%的测试用例(路径ace178语句覆盖的优点检查所有语句结构简单的代码的测试效果较好容易实现自动测试代码覆盖率高

如果是程序块覆盖,则不涉及程序块中的源代码

语句覆盖的优点检查所有语句179语句覆盖不能检查出的错误条件语句错误“A>1&&B==0”->“A>0&&B==0”逻辑运算(&&、||)错误“A>1&&B==0”->“A>1||B==0”“U=A<1||B>2”->“U=A<1”语句覆盖不能检查出的错误条件语句错误180语句覆盖不能检查出的错误循环语句错误循环次数错误跳出循环条件错误语句覆盖不能检查出的错误循环语句错误181语句覆盖不能检查出的错误循环语句例子for(i=0;i<10;i++){statement;}While(x>3){statement;}for(i=0;i<=10;i++){statement;}While(x>3&&x<7){statement;}语句覆盖不能检查出的错误循环语句例子182语句覆盖率的问题能达到很高的语句覆盖率语句覆盖率看似很高,却有严重缺陷

if(x!=1){statements;……;}else{statement;}}99句}1句测试用例x=2语句覆盖率99%50%的分支没有达到语句覆盖率的问题能达到很高的语句覆盖率}99句}1句测试用例183分支覆盖设计若干测试用例,运行被测程序,使得程序中每个判断的真假分支至少经历一次又称判定覆盖while语句、switch语句、异常处理、跳转语句等等同样可以使用分支覆盖来测试分支覆盖率已取过“真”和“假”两个值的判定占程序中所有条件判定个数的百分比分支覆盖设计若干测试用例,运行被测程序,使得程序中每个判断的184分支覆盖测试用例

路径aceA=2B=0X=3

路径abdA=1B=0X=1路径acdA=3B=0X=3

路径abeA=2B=1X=2或分支覆盖测试用例路径ace路径acd或185分支覆盖的利弊分支覆盖要比语句覆盖查错能力强一些:执行了分支覆盖,实际也就执行了语句覆盖分支覆盖与语句覆盖存在同样的缺点不能查出条件语句错误不能查出逻辑运算错误不能查出循环次数错误不能查出循环条件错误分支覆盖的利弊分支覆盖要比语句覆盖查错能力强一些:执行了分支186条件覆盖设计若干测试用例,执行被测程序以后,要使每个判断中的每个条件的可能取值至少满足一次条件覆盖设计若干测试用例,执行被测程序以后,要使每个判断中的187条件覆盖分析第1个判断应考虑

A>1,记为T1A<=1,即记为F1B==0,记为T2B!=0,记为F2第2个判断应考虑

A==2,记为T3A!=2,记为F3X>1,记为T4X<=1,记为F4条件覆盖分析第1个判断应考虑188条件覆盖测试用例用例编号ABX路径覆盖条件1203aceT1,T2,T3,T42101abdF1,T2,F3,F43211abeT1,F2,T3,F4似乎执行了条件覆盖必然实现了分支覆盖?条件覆盖测试用例用例编号ABX路径覆盖条件1203aceT1189条件覆盖测试用例用例编号ABX路径覆盖条件1103abeF1,T2,F3,T42211abeT1,F2,T3,F4执行条件覆盖并不能实现分支覆盖条件覆盖测试用例用例编号ABX路径覆盖条件1103abeF1190条件覆盖的利弊能够检查所有的条件错误不能实现对每个分支的检查用例数量的增加a&&b&&(c||(d&&e))((a||b)&&(c||d))&&e条件覆盖的利弊能够检查所有的条件错误191分支-条件覆盖设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次分支-条件覆盖设计足够的测试用例,使得判断中每个条件的所有可192分支-条件覆盖分析(1)A>1,B==0,记为T1,T2(2)A>1,B!=0,记为T1,F2(3)A<=1,B==0,记为F1,T2(4)A<=1,B!=0,记为F1,F2(5)A==2,X>1,记为T3,T4(6)A==2,X<=1,记为T3,F4(7)A!=2,X>1,记为F3,T4(8)A!=2,X<=1,记为F3,F4分支-条件覆盖分析(1)A>1,B==0,记为T193分支-条件覆盖测试用例用例编号ABX覆盖组合号路径覆盖条件1203(1)(5)aceT1,T2,T3,T42211(2)(6)abeT1,F2,T3,F43103(3)(7)abeF1,T2,F3,T44111(4)(8)abdF1,F2,F3,F4覆盖了3条路径,漏掉了路径acd分支-条件覆盖测试用例用例编号ABX覆盖组合号路径覆盖条件1194分支-条件覆盖的利弊既考虑了每一个条件,又考虑了每一个分支,发现错误能力强于分支覆盖和条件覆盖并不能全面覆盖所有路径用例数量的增加分支-条件覆盖的利弊既考虑了每一个条件,又考虑了每一个分支,195路径覆盖设计足够多的测试用例,要求覆盖程序中所有可能的路径路径ace记为L1abd记为L2abe记为L3acd记为L4路径覆盖设计足够多的测试用例,要求覆盖程序中所有可能的路径196路径覆盖测试用例用例编号ABX覆盖路径1203ace(L1)2101abd(L2)3211abe(L3)4301acd(L4)路径覆盖测试用例用例编号ABX覆盖路径1203ace(L1)197基本路径测试方法路径测试就是从一个程序的入口开始,执行所经历的各个语句的完整过程。从广义的角度讲,任何有关路径分析的测试都可以被称为路径测试。完成路径测试的理想情况是做到路径覆盖,但对于复杂性大的程序要做到所有路径覆盖(测试所有可执行路径)是不可能的。在不能做到所有路径覆盖的前提下,如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。这种测试方法就是通常所说的基本路径测试方法。

基本路径测试方法路径测试就是从一个程序的入口开始,执行所经历198基本路径测试方法(续)基本路径测试方法是在控制流图的基础上,通过分析控制结构的环形复杂度,导出执行路径的基本集,再从该基本集设计测试用例。基本路径测试方法包括以下4个步骤:(1)画出程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论