复旦大学成都东软学院软件测试基础软工团队唐远涛Tel:15982371977Email:tangyt@neusoft.comOffice:Floor2,BuildingC7NEUSOFT•21.黑盒测试技术常用的黑盒测试技术有:1.1等价类划分法1.2边界值分析法1.3错误推测法1.4因果图和决策表1.5场景法1.6功能图法1.7判定表驱动法1.8正交试验设计法NEUSOFTtangyt@neusoft.com31.2边界值分析法(BoundaryValueAnalysis,BVA)•长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。•美国陆军对其软件进行了研究,令人吃惊地发现,大量缺陷都是边界值缺陷。NEUSOFTtangyt@neusoft.com4定义:•边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。–BVA不是选择等价类的任何元素,而是选择等价类边界的测试用例–BVA不仅注重于输入条件,而且也从输出域导出测试用例。NEUSOFTtangyt@neusoft.com5使用边界值分析方法设计测试用例•首先应确定边界情况–通常输入和输出等价类的边界,就是应着重测试的边界情况。•应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。NEUSOFTtangyt@neusoft.com6边界值分析原则(1)如果输入条件规定了一个输入值范围,则应针对范围的边界设计测试用例,针对刚刚越界的情况设计无效输入测试用例。例如果输入值的有效范围是0-100,那么应针对-1,101设计测试用例NEUSOFTtangyt@neusoft.com7边界值分析指南(2)如果输入条件规定了输入值的数量,则应针对输入数量的最小值、输入数量的最大值、以及比最小数量少一个,比最大数量多一个的情况设计测试用例。例如果某个输入文件可容纳1-255条记录,那么应根据0、1、255和256条记录的情况设计测试用例NEUSOFTtangyt@neusoft.com8边界值分析指南(3)对每个输出条件应用规则1和2。即设计测试用例使输出值达到边界值及其左右的值。例如,某程序的规格说明要求计算出每月保险金扣除额为0至1165.25元,其测试用例可取0.00及1165.24、还可取一0.01及1165.26等。再如一程序属于情报检索系统,要求每次最少显示1条、最多显示4条情报摘要,这时我们应考虑的测试用例包括1和4,还应包括0和5等。NEUSOFTtangyt@neusoft.com9边界值分析指南4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。6)分析规格说明,找出其它可能的边界条件。NEUSOFTtangyt@neusoft.com10边界值的类型及检验•数值•字符•位置•数量•速度•地点•尺寸NEUSOFTtangyt@neusoft.com11边界值检验在进行边界值检验时,要考虑这些类型的以下特征:•第一个/最后一个•开始/完成•空/满•最慢/最快•最大/最小•相邻/最远•最小值/最大值•超过/在内•最短/最长•最早/最迟•最高/最低NEUSOFTtangyt@neusoft.com12•越界检验的通常做法是简单地对于最大值加1或很小的数,以及对于最小值减1或很小的数,例如:•第一个减1/最后一个加1•开始减1/完成加1•空了再减/满了再加•慢上加慢/快上加快•最大加1/最小减1•最小值减1/最大值加1•相邻/最远•刚刚超过/刚好在内•短了再短/长了再长•早了更早/晚了更晚•最高加1/最低减1NEUSOFTtangyt@neusoft.com13边界值附近数据的几种确定方法项边界值附件数据测试用例的设计思路字符起始-1个字符/结束+1个字符假设一个文本区域要求允许输入1到255个字符,输入1个和255个字符作为有效等价类;输入字符(0个)和输入256个字符作为无效等价类数字开始位-1/结束位+1如数据的输入域为1-999,其最小值为1,而最大值为999,则0、1000则刚好在边界值附件空间小于零空间一点/大于满空间一点测试软盘的数据存储,使用比剩余磁盘空间大一点(几KB)的文件作为测试的边界条件附件值NEUSOFTtangyt@neusoft.com14技巧:•提出边界条件时,一定要测试临近边界的有效数据,测试最后一个可能有效的数据,同时测试刚超过边界的无效数据。NEUSOFTtangyt@neusoft.com15例1:•保险费率计算中,投保人年龄范围为[1,99],年龄20~39岁6点40~59岁4点60岁以上,20岁以下2点•要求采用边界值分析法设计测试用例。0,1,219,20,2139,40,4159,60,6199,100NEUSOFTtangyt@neusoft.com16int[]s=newint[10];inti;for(i=1;i=10;i++){s[i]=0;}很明显,这段代码的目的是创建包含10个元素的数组,并为数组中的每一个元素赋初值0。看看有什么问题?例2:分析以下代码段NEUSOFTtangyt@neusoft.com17例3:Office中的页面设置试一下:•幻灯片的宽度和高度的边界值是什么?•采用边界值分析法为宽度和高度设计测试用例NEUSOFTtangyt@neusoft.com18课上练习:•采用边界值分析法设计测试用例,对Taxi1_fat.jar进行测试,找出其中的缺陷。NEUSOFTtangyt@neusoft.com19课后预习以组委单位,熟悉佣金问题(见下页),要求:1.分析输入和输出参数及其取值范围2.分析并写出佣金的计算逻辑进一步思考:1.如何利用所学的方法来设计测试用例并对程序进行测试NEUSOFTtangyt@neusoft.com20软件测试经典案例:佣金问题某步枪经销商销售某制造商生产的枪枪托和枪管,枪栓45美元,枪托30美元,枪管25美元。经销商每月至少要售出一支完整的步枪,且经销商每月最多可售出枪栓70支,枪托80支,枪管90支。每月月底,经销商向制造商报告当月销售情况,制造商根据销售量计算经销商应得的佣金。销售额不超过1000美元的部分,佣金为10%,大于1000且不超过1800美元的部分为15%,超过1800美元的部分为20%。NEUSOFTtangyt@neusoft.com21上节课内容回顾•边界值测试的重要性•常用边界值分析法设计测试用例的步骤•常见的边界值类型NEUSOFTtangyt@neusoft.com22本节课内容使用边界值分析法测试用例完成以下任务:1.Commission佣金计算程序的测试2.calculate_price程序的测试NEUSOFTtangyt@neusoft.com23软件测试经典案例:佣金问题某步枪经销商销售某制造商生产的枪枪托和枪管,枪栓45美元,枪托30美元,枪管25美元。经销商每月至少要售出一支完整的步枪,且经销商每月最多可售出枪栓70支,枪托80支,枪管90支。每月月底,经销商向制造商报告当月销售情况,制造商根据销售量计算经销商应得的佣金。销售额不超过1000美元的部分,佣金为10%,大于1000且不超过1800美元的部分为15%,超过1800美元的部分为20%。NEUSOFTtangyt@neusoft.com24Acomplexproblem,right?解决问题的步骤:1.分析问题a)分析输入和输出参数及其取值范围b)分析并写出佣金的计算逻辑2.设计测试用例3.执行测试用例complexadj.复杂的NEUSOFTtangyt@neusoft.com251、问题分析:由此得到什么信息•输入域:枪栓、枪托、枪管1≤枪栓≤70、1≤枪托≤80、1≤枪管≤90•输出域:所得佣金为销售额乘以佣金比例NEUSOFTtangyt@neusoft.com26用函数表示佣金问题•设销售额为S(Sales),则:S(x,y,z)=x×45+y×30+z×25其中:x、y、z分别代表枪栓、枪托和枪管的月销售量•设佣金为C(Commission),则:S×10%ifS=1000C(S)=(1000×10%)+(S-1000)×15%ifS=1800(1000×10%)+(800×15%)+(S-1800)*20%ifS1800NEUSOFTtangyt@neusoft.com272、设计测试用例•利用所学的方法设计测试用例对佣金问题进行测试•思考:如何做?–等价类划分法–边界值分析法NEUSOFTtangyt@neusoft.com28等价类划分参数有效等价类(vEC)无效等价类(iEC)枪栓1≤x≤70x1,x70枪托1≤y≤80x1,x80枪管1≤z≤90x1,x90•思考:以上测试用例能否测试佣金问题中的计算问题?NEUSOFTtangyt@neusoft.com29提示:参数有效等价类(vEC)无效等价类(iEC)销售额销售额≤10001000<销售额≤1800销售额1800•同时考虑边界值•考虑输出域的等价类:NEUSOFTtangyt@neusoft.com30边界值分析•思考:有哪些边界值?•提示:对输入域同时对输出域采用边界值分析法进行测试。NEUSOFTtangyt@neusoft.com31Now,designyourtestcases.功能描述计算佣金用例目的测试佣金计算的正确性前提条件无编号输入(枪栓、枪托、枪管)期望的输出/响应实际情况1有效销售量,例35,40,4564021,1,110030,1,1报错4......5NEUSOFTtangyt@neusoft.com323.OK.Now,itistimetoruntestcases.Theformatofthetestcasefile:Inputvaluesofx,y,zOutput:commission运行步骤同三角形问题。NEUSOFTtangyt@neusoft.com33Tips:UseExecltogetexpectedresults.InputparametersOutput-Commission中间结果,方便理解NEUSOFTtangyt@neusoft.com34•=IF(D2100,Error,IF(D2=1000,D2*10%,IF(D2=1800,1000*10%+(D2-1000)*15%,IF((D2=7800),1000*10%+800*15%+(D2-1800)*20%,Error))))改进版•=IF(OR(A41,B41,C41,A470,B480,C490),Error,IF(D4=1000,D4*10%,IF(D4=1800,1000*10%+(D4-1000)*15%,1000*10%+800*15%+(D4-1800)*20%)))NEUSOFTtangyt@neusoft.com35实验3:•利用所学的方法设计测试用例对佣金问题进行测试提交形式:纸质版由各班收齐后一起交给我提交截至时间:NEUSOFTtangyt@neusoft.com36再看函数calculate_price()函数的功能描述和接口描述如下:功能:计算购车总价doublecalculate_price(doublebaseprice,//basepriceofthevehicledoublespecialprice,//specialmodeladditiondoubleextraprice,//priceoftheextrasintextras,//numberofextrasdoublediscount//de