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

下载本文档

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

文档简介

白盒测试

White-boxtesting

任课老师:黄武2024/3/31白盒测试

White-boxtesting

任课老师:黄武1提纲白盒测试概述静态白盒测试动态白盒测试2024/3/31提纲白盒测试概述2024/3/3121.白盒测试概述白盒测试概念白盒测试过程白盒测试的应用范围白盒测试的优点白盒测试的缺点白盒测试的发展历程2024/3/311.白盒测试概述白盒测试概念2024/3/3131.1白盒测试概念白盒测试是一种基于软件内部路径,结构和代码实现基础上的软件测试策略,该测试方法通常需要详细的编程技巧例:请找出下面代码的错误

voidmain() { intx;

if(x<0) x=-x; ///翻转负数 }2024/3/311.1白盒测试概念白盒测试是一种基于软件内部路径,结构和代41.2白盒测试过程通用的白盒测试过程如下:分析测试软件的内部实现识别被测软件的工作路径选择输入,执行被测路径,并确定期望的测试结果运行测试比较真实输出和期望输出的异同作出被测软件功能正确性的判断2024/3/311.2白盒测试过程通用的白盒测试过程如下:2024/3/351.3白盒测试的应用范围白盒测试能够应用到所有的系统开发阶段,包括单元测试,集成测试和系统测试白盒测试通常进行路径测试,我们可以通过这种方法测试单元内部,单元之间,子系统之间以及系统内部的各种执行路径路径(测试路径):从开始到结束执行之间运行的语句序列UnitIntegrationSystem白盒测试的应用xx()y()x()y()main()…2024/3/311.3白盒测试的应用范围白盒测试能够应用到所有的系统开发阶61.4白盒测试的优点迫使测试人员去思考软件的实现可以识别和测试代码中的每条分支路径,对代码的测试比较彻底揭示隐藏在代码中的错误或缺陷根据内部结果进行最优化测试2024/3/311.4白盒测试的优点迫使测试人员去思考软件的实现2024/71.5白盒测试的缺点执行路径可能非常多造成无法进行完全测试白盒测试假设控制流是正确的,因此测试人员只基于存在的路径进行测试,而对于不存在的路径则无法测试测试员必须具备编程知识,可能有很多测试员不具备这种知识,将无法进行白盒测试,比如财会人员无法对财务软件进行白盒测试2024/3/311.5白盒测试的缺点执行路径可能非常多造成无法进行完全测试81.6白盒测试的发展历程项目代数是否评估测试效果是否自动测试是否持续测试是否调测一体第一代否否否否第二代是是否否第三代是是是否第四代是是是是第1代到第4代白盒测试方法的主要差别2024/3/311.6白盒测试的发展历程项目是否评估测试效果91.6.1白盒测试的发展历程说明第1代白盒测试方法属于无组织、无约束的测试方法,典型情况是拿调试当测试,或者简单的在被测代码中加入print、assert等语句第2代白盒测试方法主要克服第1代方法的两大缺陷:一是没有测试评估(比如覆盖率),二是未对测试操作进行重用,重用测试操作必然以某种形式化语言描述测试过程。常见的第2代白盒测试工具有:Rational的RTRT、Parasoft的CppTest、IPL的Cantata++等2024/3/311.6.1白盒测试的发展历程说明第1代白盒测试方法属于无组101.6.1几代白盒测试的差异说明第3代白盒测试方法区别第2代方法最主要特点是:它支持持续集成的操作模式,这在理念上有了一次飞跃。第3代白盒方法主要代表是xUnit系列测试工具,如JUnit、NUnit、DUnit等第4代白盒测试方法相对第3代方法,主要是引入了调测一体的理念。遵循第4代白盒测试方法的测试工具主要以VcTester为代表2024/3/311.6.1几代白盒测试的差异说明第3代白盒测试方法区别第2112静态白盒测试静态白盒测试概述正式审查编码标准和规范通用代码审查清单2024/3/312静态白盒测试静态白盒测试概述2024/3/31122.1静态白盒测试概述静态白盒测试是指在不执行软件的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程,有时又称为结构分析对于要求严格的代码,比如军队,金融,工业控制,医药类软件,通常会自觉组织静态白盒测试2024/3/312.1静态白盒测试概述静态白盒测试是指在不执行软件的条件下132.1.1静态白盒测试的原因静态白盒测试可以从整体上把握软件代码的质量,比如可以轻易找到代码不合规范的地方进行静态白盒测试可以尽早发现软件缺陷,便于及时改进静态白盒测试为动态测试准备的案例提供思路2024/3/312.1.1静态白盒测试的原因静态白盒测试可以从整体上把握软14静态白盒测试的原因2024/3/31静态白盒测试的原因2024/3/31152.1.2静态白盒测试的困难由于静态白盒测试投入高,耗时多,而且没有直接的产出,很多公司难于接受,往往不能善始善终静态白盒测试要求公司具有对编程标准和规范了解深刻的程序员,但很多公司不具备这种程序员,造成执行困难静态白盒测试可能会减缓软件开发的进度2024/3/312.1.2静态白盒测试的困难由于静态白盒测试投入高,耗时多162.2正式审查正式审查是进行静态白盒测试的过程,其含义广泛,从两个程序员之间的交谈,到代码的严格检查均属于此正式审查是一个逐步建立的过程。如果正确进行正式审查,这将是早期发现软件缺陷的好方法2024/3/312.2正式审查正式审查是进行静态白盒测试的过程,其含义广泛172.2.1正式审查的4个要素审查准备 每一个合作者都要精心准备,他们在审查中扮演不同角色,比如程序员,测试员,管理员等,明确自己的责任和义务。很多问题是在准备阶段发现的遵守规则 审查要遵守一套固定的规则,比如设定要评审的代码量,花费的时间,审查的形式,哪些需要备注等2024/3/312.2.1正式审查的4个要素审查准备2024/3/31182.2.1正式审查的4个要素确定问题 审查的目标是找出软件的问题,包括错误和遗漏。在审查时,只针对代码而不要针对程序员,避免相互指责编写审查报告 审查小组必须做出总结审查结果的书面报告,并使报告便于开发小组的成员使用2024/3/312.2.1正式审查的4个要素确定问题2024/3/31192.2.2正式审查的间接效果交流——审查成员之间加强了交流,从而相互理解,相互学习质量——程序员的代码通过逐行审查,不仅提高审查代码的质量,同时也对程序员起到促进作用2024/3/312.2.2正式审查的间接效果交流——审查成员之间加强了交流202.2.3同事审查同事审查是指在编写代码的程序员和充当审查员的程序员或测试员之间进行的小范围正式审查,这是最简单的正式审查,又被称为伙伴审查为了避免同事审查流于形式,同事审查也要保证正式审查的4个关键要素:审查准备,遵守规则,确定问题以及编写审查报告2024/3/312.2.3同事审查同事审查是指在编写代码的程序员和充当审查212.2.4公开陈述公开陈述是使同事审查正规化的下一步。编程人员需要向专门组成的审查小组公开陈述代码,包括逐行的解释代码,说明代码的工作原理等,审查人员则需要提出问题在进行公开陈述之前,程序员要向审查人员提供代码,以便审查人员事先检查和提出问题在审查人员中至少有一位资深的程序员2024/3/312.2.4公开陈述公开陈述是使同事审查正规化的下一步。编程222.2.5检验检验是最正式的审查类型,具有高度的组织化,要求每一个参与者都接受训练检验与公开陈述的不同之处在于表述代码的人员不是代码的编写者,这要求他学习和了解表述的材料,从而有可能在检验会议上提出不同的看法和解释另外的参与者称为检验员,其职责是从不同角度,例如用户、测试人员或者产品支持人员的角度去审查代码检验经证实是在所有软件交付内容中,特别是设计文档和代码中发现软件缺陷的最有效方法2024/3/312.2.5检验检验是最正式的审查类型,具有高度的组织化,要232.3编码标准和规范标准(Standard)——1986年国际标准化组织发布的ISO第2号指南中提出的标准定义(草案)是:“得到一致(绝大多数)同意,并经公认的标准化团体批准,作为工作或工作成果的衡量准则、规则或特性要求,供(有关各方)共同重复使用的文件,目的是在给定范围内达到最佳有序化程度。”标准比较严格,有些标准带有强制性规范(Specification)——某一范畴内以明文规定或约定俗成的形式规定的规则规范相对标准而言比较放松一些,不具有强制性2024/3/312.3编码标准和规范标准(Standard)——1986年242.3.1坚持编码标准和规范的原因坚持符合标准和规范编码的三个重要原因:可靠性——严格按照某种标准或规范编写的代码比不这样做的代码更加可靠,缺陷更少可读性/维护性——符合标准和规范的代码易于阅读、理解和维护可移植性——代码经常在不同的硬件上运行,或者使用不同的编译器,如果代码遵循设备标准,将更容易使软件具有移植性软件审查小组在开始审查前需要了解相应的标准和规范2024/3/312.3.1坚持编码标准和规范的原因坚持符合标准和规范编码的252.3.2标准或规范的格式软件标准通常由4个部分组成标题:描述标准包含的主题内容:描述标准或规范内容解释说明:给出标准背后的原因,以使程序员理解采用标准的原因示例:给出如何使用标准的简单程序示例,这是可选择的2024/3/312.3.2标准或规范的格式软件标准通常由4个部分组成202262.3.3标准或规范的示例TOPIC:3.05Control-RestrictiononcontrolstructuresSTANDARD Thegotostatement(andhencelabelsaswell)shouldnotbeused. Thewhileloopshouldbeusedinsteadofthedo-whileloop,exceptwherethelogicoftheproblemexplicitrequiresdoingthebodyatleastonceregardlessofloopcondition. Ifasingleif-elsecanreplaceacontinue,andif-elseshouldbeusedJUSTIFICATION Thegotostatementisprohibitedfortheempiricalreasonthatitsuseishighlycorrelatedwitherrorsandhare-to-readcode,andfortheabstractreasonthatalgorithmsshouldbeexpressedinstructuresthatfacilitatecheckingtheprogramagainstthe…2024/3/312.3.3标准或规范的示例TOPIC:3.05Cont27

标准或规范的示例1TOPIC:7.02 C_problems–problemareasfromCGUIDELINE TrytoavoidClanguagefeaturesifaconflictwithprogramminginC++DonotmixC-styleFILEI/O(usingstdio.h)withC++styleI/O(usingiostream.horstream.h)onthesamefile.AvoidusingCfunctionslikememcpyormemcmpforcopyingorcomparingobjectsofatypeotherthanarray-of-charorjust-a-struct.AvoidtheCmacroNULL;use0instead.JUSTIFICATION EachofthesefeaturesconcernsanareaoftraditionalCusagewhichcreatessomeprobleminC++.2024/3/31标准或规范的示例1TOPIC:7.02 28

公司内部的规范示例TOPIC:sentence每行一个语句每行最多包含一个语句。如 a++; //推荐

b--; //推荐 a++;b--; //不推荐2024/3/31公司内部的规范示例TOPIC:senten292.3.4标准或规范的资源2024/3/312.3.4标准或规范的资源2024/3/3130

标准或规范的资源网站1全国信息技术标准化网/2024/3/31标准或规范的资源网站1全国信息技术标准化网31

标准或规范的资源网站2电气电子工程师协会2024/3/31标准或规范的资源网站2电气电子工程师协会322.3.5程序风格遵循不同的标准、规范(包括自己的)就形成了程序员的编程风格比如在函数前进入注释,每行代码不超过100列宽,遵循严格的缩进格式良好的代码风格是代码维护的基础,比如/************************************************************** FUNCTION:voidFill_Scan_Disp_Data(DWORDdwStart,intiNum,short*p) PURPOSE: Thisfunctionfillpdatatodisplayingbuffer. PARAMETERS:dwStart ->displaybufferstartposition. iNum ->thedatanumbertofilldisplayingbuf. *p ->Temporarydatabufferpointer.

RETURN: None.*************************************************************/voidCTM_WAVEDoc::Fill_Scan_Disp_Data(DWORDdwStart,intiNum,short*p){ …}2024/3/312.3.5程序风格遵循不同的标准、规范(包括自己的)就形成332.4通用代码审查清单数据引用错误数据声明错误计算错误比较错误控制流错误子程序参数错误输入/输出错误其他错误2024/3/312.4通用代码审查清单数据引用错误2024/3/31342.4.1数据引用错误数据引用错误是指使用未经正确初始化和引用方式的变量、常量、数据、字符串等导致的软件缺陷,包括:是否引用了未初始化的变量数组和字符串的下标是否为整数,是否未访问边界或越界是否在使用常量的地方使用了变量变量是否被赋予不同类型的值使用了未分配内存指针吗等2024/3/312.4.1数据引用错误数据引用错误是指使用未经正确初始化和35

数据引用错误举例变量被赋于不同数据类型的值2024/3/31数据引用错误举例变量被赋于不同数据类型的值2362.4.2数据声明错误数据声明错误的原因是不正确地声明或使用变量和常量,包括:所有变量都赋予了正确的长度、类型吗?变量是否在声明的同时进行了初始化存在声明过但从未引用过的变量吗在特定模块中所有变量都显示声明了吗?如果没有,是否可以理解为该变量与更高级别的模块共享(全局变量)2024/3/312.4.2数据声明错误数据声明错误的原因是不正确地声明或使37

数据声明错误举例intGet_Max_Value(intstart,intiNum,short*p){

short max,min; max=*(p+start); //Thefirstvalueevaluatetomax

for(inti=start+1;i<start+iNum;i++)

if(max<*(p+i)) max=*(p+i);

return(max);}min变量申明后从未使用过2024/3/31数据声明错误举例intGet_Max_Va382.4.3计算错误计算错误是基本的数据逻辑问题,即不能得到正确的计算结果,包括:计算中是否使用了不同数据类型的变量赋值的目的变量是否小于赋值的源变量在数值计算中是否可能出现溢出除数/模是否可能为0对于整形运算,是否会丢失精度变量的值是否超过有意义的范围对于包含多个操作数据求值表达式是否不清晰2024/3/312.4.3计算错误计算错误是基本的数据逻辑问题,即不能得到39

计算错误举例intGet_Ave_Value(intstart,intiNum,short*p){

int ave =0;

int sum=*(p+start);

for(inti=start+1;i<start+iNum;i++) sum+=*(p+i); ave=sum/iNum; //ifiNum=0,It’serror

return(ave);}2024/3/31计算错误举例intGet_Ave_Valu402.4.4比较错误小于、大于、等于、不等于、真、假等比较和判断逻辑错误,可能造成边界条件问题,包括:比较正确吗,应该使用小于还是小于等于精度会影响浮点数之间的比较结果吗?1.00000001和1.00000002是否相等每一个逻辑表达式都正确计算吗,次序正确吗逻辑表达式的值都是逻辑值吗,是否包含整数的整形变量2024/3/312.4.4比较错误小于、大于、等于、不等于、真、假等比较和41

比较错误举例intRead_Queue_Data(intiNum,long*buf){

//1.------------------setreverseflag.-------------------------------- if(rp+iNum>iQueue_Size) bReverse_Flag=false;

//2.------------------Readactualdatafromqueue.--------------

for(inti=0;i<iNum;i++) *(buf+i)=*(lpData+(rp+i)%iQueue_Size); rp=(rp+iNum)%iQueue_Size;//Modifythereadpointer

return(iNum);}>和>=混淆引发错误2024/3/31比较错误举例intRead_Queue_D422.4.5控制流错误控制流程错误的原因是编程语言中循环等控制结构未按预期方式工作,他们通常由计算或比较错误直接或间接引起,包括:复合语句是否配对程序、模块、子程序和循环能否终止可能存在死循环吗循环可能从不执行吗在switch…case语句中超出分支范围是否处理2024/3/312.4.5控制流错误控制流程错误的原因是编程语言中循环等控43

控制流错误举例switch(iType){

case LABEL_TYPE_GENERAL: Draw_A_Label(i,pDC,label,rect);

break;

case LABEL_TYPE_STIMULATE: Draw_A_Sti_Label(i,pDC,label,rect);

break;

case LABEL_TYPE_DROP: Draw_A_Drop_Label(i,pDC,label,rect);

break;}如果不出现上面三种情况,程序如何处理?2024/3/31控制流错误举例switch(iType442.4.6子程序参数错误子程序参数错误的来源是软件子程序不正确地传递参数,包括:子程序接收的参数类型和大小与调用代码发送的实参匹配吗如果子程序有多个入口点,引用的参数是否与当前入口点没有关联常量是否当作形参传递,意外在子程序中改动子程序是否更改了仅作为输入值的参数每一个参数的单位与相应的形参匹配吗——比如ms和s,ml和l等2024/3/312.4.6子程序参数错误子程序参数错误的来源是软件子程序不452.4.7输入/输出错误输入/输出错误包括文件读取、键盘或鼠标输入以及打印机输出等设备写入错误,包括:软件是否遵守外部设备读写数据的专用格式文件或者外设不存在或未准备好如何处理外设未连接、不可用或者读写过程中存贮器满如何处理检查错误提示信息的准确性,正确性以及语法和拼写等2024/3/312.4.7输入/输出错误输入/输出错误包括文件读取、键盘或462.4.8其他错误其他错误包括:软件是否存在国际化问题软件是否要运行在不同的操作系统下是否考虑了软件的硬件兼容性,比如内存、图形捕获卡等程序编译是否产生了警告或提示信息,这些信息通常指示进行了有疑问的处理2024/3/312.4.8其他错误其他错误包括:2024/3/31472.4.9通用代码审查清单总结上面的通用代码审查清单在我们进行静态白盒测试时起到指南的作用由于上面的错误具有通用性,目前很多系统的编译器都能够对这些错误进行检查,如果我们提高编译器检查错误的等级,那么它会列举出很多这样的错误供我们参考2024/3/312.4.9通用代码审查清单总结上面的通用代码审查清单在我们48在VC6.0中设置编译警告级别选择“Project”菜单下的“Settings”命令进入2024/3/31在VC6.0中设置编译警告级别选择“Project”菜单493动态白盒测试动态白盒测试概述动态白盒测试和调试分段测试数据范围控制流测试2024/3/313动态白盒测试动态白盒测试概述2024/3/31503.1动态白盒测试概述动态白盒测试是指利用查看代码功能和实现方式得到的信息来确定哪些要测试,哪些不测试,如何开展测试,又称为结构测试2024/3/313.1动态白盒测试概述动态白盒测试是指利用查看代码功能和实513.1.1动态白盒测试的内容直接测试底层功能、过程、子程序和库以完整程序的方式从顶层测试软件,但是根据对软件运行的了解调整测试案例从软件获得读取变量和状态信息的访问权,以便确定测试与预期结果是否相符,同时,强制软件以正常测试难以实现的方式运行估算执行测试时覆盖的代码量,然后调整测试,去掉多余的,补充遗漏的2024/3/313.1.1动态白盒测试的内容直接测试底层功能、过程、子程序523.2动态白盒测试和调试动态白盒测试的目标是寻找软件缺陷,调试的目标是修复软件缺陷进行动态白盒测试,需要使用与程序员相同的工具,了解程序的运行状态动态白盒子分离软件缺陷调试调试编程测试动态白盒测试和调试的关系2024/3/313.2动态白盒测试和调试动态白盒测试的目标是寻找软件缺陷,533.3分段测试一开始就对程序进行整体测试,可能会造成两个缺陷:难以找到导致问题的原因,因为受到众多因素的影响某些缺陷掩盖了其他缺陷,导致一个缺陷解决马上又引起新的缺陷2024/3/313.3分段测试一开始就对程序进行整体测试,可能会造成两个缺543.3.1单元和集成测试我们应该采取代码分段建立和测试的策略,这样容易形成稳定的代码主程序模块1模块2模块11模块111模块112模块113模块21模块22模块12独立建立代码模块并分别测试,然后再集成测试2024/3/313.3.1单元和集成测试我们应该采取代码分段建立和测试的策553.3.2单元测试在底层进行的测试被称为单元测试或模块测试采取这种测试策略很容易隔离软件缺陷在单元级发现问题时,问题肯定在单元中在多个单元集成时发现软件缺陷,那么它通常与模块之间的交互相关2024/3/313.3.2单元测试在底层进行的测试被称为单元测试或模块测试56

自底向上的单元测试自底向上的测试中,需要编写称为测试驱动的模块以进行单元测试测试驱动模块以将来真正模块同样的方式挂接,向处于测试的模块发送测试案例数据,接受返回结果,并验证正确性实际软件华式到摄氏度转换模块温度数据结果测试驱动模块华式到摄氏度转换模块测试案例数据结果模拟2024/3/31自底向上的单元测试自底向上的测试中,需要编写57

自顶向下的单元测试自顶向下的测试中,是对完成的高层软件进行测试,而下层软件则使用存根代码来模拟这样做的目的是测试在实际中不宜出现的数据,因为存根软件可以按要求产生各种数据温度显示模块温度计接口模块测试过的温度显示模块测试员书写的存根模块模拟测试文件实际配置测试配置2024/3/31自顶向下的单元测试自顶向下的测试中,是对完成583.4数据范围由于软件可以分为数据和状态,白盒测试也包含数据测试和状态测试数据包括常量、变量、数组、结构,键盘和鼠标输入、文件、屏幕输出,网络输入\输出等数据流范围主要是指在整个软件中跟踪一批数据如果在底层测试函数,就会使用调试器观察变量在运行期间值的变化2024/3/313.4数据范围由于软件可以分为数据和状态,白盒测试也包含数593.4.1次边界在白盒测试中,我们通过查看代码,找到程序内部的次边界,然后建立他们的测试案例下面是程序内部的一些次边界的例子:计算时从采用数据表转换为使用公式为了获得更高的精度,复杂的数值分析程序根据数字大小切换不同的处理方式2024/3/313.4.1次边界在白盒测试中,我们通过查看代码,找到程序内603.4.2公式和等式查看公式中存在的数据隐患,例如计算银行复利的公式如下: A=P(1+r/n)nt其中:P=本金 r=年利率 t=年数 n=每年复加的利率次数 A=若干年的本息总和

在上面的代码中,如果设定n=0,就会造成代码崩溃2024/3/313.4.2公式和等式查看公式中存在的数据隐患,例如计算银行613.4.4错误强制有些数据在实际系统中很难出现,我们难于测试,比如连接超过10个的USB设备,屏幕的分辨率为3000像素,为了对这些情况进行测试,我们需要在调试器中强制设定相关变量的值,以便调试在这些情况下的程序运行2024/3/313.4.4错误强制有些数据在实际系统中很难出现,我们难于测62

错误强制举例在VC6中强制修改变量的值2024/3/31错误强制举例在VC6中强制修改变量的值202633.5控制流测试我们除了测试数据之外,还需要对程序的控制流进行测试我们需要测试程序的状态以及其中的程序流程,必须设法进入和退出每一个模块,执行每一行代码,追踪每一条逻辑和决策分支,这些测试称为控制流测试,即代码范围分析我们通常会使用代码范围分析工具作这样的工作2024/3/313.5控制流测试我们除了测试数据之外,还需要对程序的控制流643.5.1控制流测试概述控制流测试通过识别程序代码中的执行路径建立覆盖那些路径的测试案例不幸的是,试图对任何适当的模块进行彻底地控制流路径测试都是不现实的。测试路径的数量太多造成无法在合理的时间内测试完成测试中每增加一个判定条件就会加倍测试路径并且任何一个循环将被乘增量测试路径(2n)2024/3/313.5.1控制流测试概述控制流测试通过识别程序代码中的执行65

控制流测试的缺陷路径太多使控制流无法完全测试 for(i=0;i<1000;i++) for(j=0;j<1000;j++) for(k=0;k<1000;k++) doSomethingWith(i,j,k); doSomethingWith()函数将执行10亿次(1000

1000

1000),相当于10亿条路径2024/3/31控制流测试的缺陷路径太多使控制流无法完全测试66

控制流测试的缺陷2程序执行路径可能在模块中被遗失,任何基于实现路径的测试方法都不能测试没有实现的路径,例如:

if(a>0) doIsGreater();

if(a==0) doIsEqual();

//遗失语句:if(a<0)doIsLess();2024/3/31控制流测试的缺陷2程序执行路径可能在模块中被67

控制流测试的缺陷3软件本身的逻辑错误无法通过测试找到,例如:

//actual(butincorrect)code a=a+1;

//correctcode a=a-1;2024/3/31控制流测试的缺陷3软件本身的逻辑错误无法通过683.5.2控制流图尽管控制流测试存在缺陷,但它仍然是白盒测试的重要工具控制流图是控制流测试的基础,控制流图包含3个部分:进程块(ProcessBlock)判定点(DecisionPoint)连接点(JunctionPoint

)2024/3/313.5.2控制流图尽管控制流测试存在缺陷,但它仍然是白盒测69

控制流图的进程块进程块是从头至尾顺序执行的程序语句序列,只有起始块可以没有进入点,只有结束块可以没有退出点一旦进程块启动,其内部的每一条语句都会被顺序执行进程块使用圆型泡泡+入口点+出口点构成Processblock2024/3/31控制流图的进程块进程块是从头至尾顺序执行的程70

控制流图的判定点判定点是模块中某一点,在这一点控制流能够改变方向。很多判定点是二值化的并且使用if-then-else语句实现;多路判定点通常使用case语句实现。判定点使用包含一个输入和多个输出的泡泡表示ifcase判定点2024/3/31控制流图的判定点判定点是模块中某一点,在这一71

控制流图的连接点连接点是将控制流结合起来的点连接点使用包含多个输入和1个输出的泡泡表示连接点2024/3/31控制流图的连接点连接点是将控制流结合起来的点72

控制流图的举例下面代码的控制流图如右所示: q=1; b=2;

if(a==2) {x=x+2;}

else {x=x/2;} p=q/r;

if(b/c>3) {z=x+y;}q=1b=2if(a==2)x=x+2x=x/2p=q/rif(b/c>3)z=x+y2024/3/31控制流图的举例下面代码的控制流图如右所示:q733.5.3代码测试的覆盖范围在控制流测试中,定义了8种级别测试覆盖范围(coverage)覆盖范围(coverage)的意思是已经被测试的代码百分比2024/3/313.5.3代码测试的覆盖范围在控制流测试中,定义了8种级别74

小于100%语句覆盖范围0级:测试与调试之间没有区别,除了支持调试,测试本身没有目的缺陷可能会偶尔被发现,但是没有正式的努力去找到它们2024/3/31小于100%语句覆盖范围0级:2024/375100%语句覆盖范围1级:最低覆盖范围是指100%语句覆盖,可以简称为语句覆盖语句覆盖意味着测试模块中的每一条语句都至少被执行一次。这好像是合理的目标,但这种测试会导致很多缺陷遗失,例如:

1.if(a>0) 2. {x=x+1;} 3.if(b==3) 4.

{y=0;}if(b=3)y=0if(a>0)x=x+1左边程序段的状态图用例a=6,b=3就可以完成100%语句覆盖2024/3/31100%语句覆盖范围1级:if(b=3)y76

语句(statement)覆盖范围上例中有4条独立的路径,但却只执行了一条,由于测试路径的遗漏,可能会导致缺陷的发生。语句测试只是入门测试if(b=3)y=0if(a>0)x=x+1if(b=3)y=0if(a>0)x=x+11234falsefalsetruefalsefalsetruetruetrue2024/3/31语句(statement)覆盖范围上例中有77

判定(decision)覆盖范围2级:下一级的控制流测试是100%判定测试,这又被称为分支测试在分支测试下,要求测试用例至少保证每个判定条件为真、假的情况至少出现一次分支测试不能保证路径覆盖,但是可以保证语句覆盖2024/3/31判定(decision)覆盖范围2级:2078

判定(decision)覆盖范围比如针对上一个案例,我们需要使用两个案例:a=-2,b=2和a=4,b=3进行判定覆盖if(b=3)y=0if(a>0)x=x+1if(b=3)y=0if(a>0)x=x+1test1test2falsefalsetruetrue2024/3/31判定(decision)覆盖范围比如针对上79

条件(condition)覆盖范围并不是所有的条件语句都是简单的判定,有些条件包含多个逻辑或表达式的组合,例如:

1.

if(a>0&&c==1)

2. {x=x+1;}

温馨提示

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

评论

0/150

提交评论