,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,本堂课重点,白盒测试技术把握构造测试,黑盒测试技术,调试,把握构造测试,根本路径测试,条件测试,循环测试,根本路径测试,根本路径测试是在程序把握图的根底上,通过分析把握构造的环行简洁性,导出根本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次如让循环体只执行一次。,例子,根本路径测试例子,void Sort(int iRecordNum,int iType),1,2 int x=0;,3 int y=0;,4 while(iRecordNum-0),5 ,6 if(0=iType),7x=y+2;,9 else,8 if(1=iType),10 x=y+10;,12 else,11 x=y+20;,13 ,14,环形简洁度,其次步:计算环形简洁度,环形简洁度是一种为程序规律简洁性供给定量测度的软件度量,将该度量用于计算程序的根本的独立路径数目,为确保全部语句至少执行一次的测试数量的上界。独立路径必需包含一条在定义之前不曾用到的边。,有以下三种方法计算圈简洁度:,流图中区域的数量对应于环型的简洁性;,给定流图G的圈简洁度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;,给定流图G的圈简洁度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。,第三步:确定独立路径的根本集合,依据上面的计算方法,可得出四个独立的路径:,路径1:4-14,路径2:4-6-7-14,路径3:4-6-8-10-13-4-14,路径4:4-6-8-11-13-4-14,依据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。,第四步:设计测试用例,为了确保根本路径集中的每一条路径的执行,依据推断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子根本路径集的测试用例是:,路径1:4-14,输入数据:iRecordNum0,或者取iRecordNum0的某一个值,预期结果:x0,路径2:4-6-7-14,输入数据:iRecordNum1,iType0,预期结果:x2,路径3:4-6-8-10-13-4-14,输入数据:iRecordNum1,iType1,预期结果:x10,路径4:4-6-8-11-13-4-14,输入数据:iRecordNum1,iType2,预期结果:x20,条件测试,条件测试概念,条件测试检查的工程,条件测试策略,条件测试概念,根本路径测试技术简洁而且高效,但是仅有这种技术还不够可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值,还需要使用其他把握构造测试技术,才能进一步提高白盒测试的质量。,条件测试是检查程序模块中所包含规律条件的测试用例设计方法,简洁条件是一个布尔变量或一个关系表达式,在布尔变量或关系表达式之前还可能有一个NOT算符。,关系表达式的形式如:,E1关系运算符E2,其中E1和E2是算术表达式,而关系运算符是以下之一:“”、“”、“=”、“”(“!=”)、“”、或“”。,简洁条件由简洁条件、布尔运算符和括弧组成。我们假定可用于简洁条件的布尔算符包括OR“|”,AND“”和NOT“!”。所以条件的成分类型包括布尔运算符、布尔变量、布尔括弧(括住简洁或简洁条件)、关系运算符或算术表达式。,条件测试检查的工程,假设条件不正确,则至少条件的一个成分不正确。因此,条件错误的类型如下:,布尔运算符错误(遗漏布尔运算符,布尔运算符多余或布尔运算符不正确);,布尔变量错误;,布尔括弧错误;,关系运算符错误;,算术表达式错误。,条件测试策略,1.分支测试,可能是最简洁的条件测试策略,对于复合条件C,C的真分支和假分支以及C中的每个简洁条件都需要至少执行一次。,2.域测试(Domain testing),要求从表达式中导出三个或四个测试,表达式的形式如:,E1关系操作符E2,需要三个测试分别用于计算E1的值是大于、等于或小于E2的值。假设关系操作符错误,而E1和E2正确,则这三个测试能够觉察关系算符的错误。为了觉察E1和E2的错误,计算E1小于或大于E2的测试应使两个值间的差异尽可能小。,3.BRO(branch and relational)测试,BRO(branch and relational)测试集,测试保证能觉察布尔变量和关系操作符只消逝一次而且没有公共变量的条件中的分支和条件操作符错误。,例一,例二,例一,C1B1B2,其中B1和B2是布尔变量。C1的条件约束式如(D1,D2),其中D1和D2是“T”或“F”,值(T,F)是C1的条件约束,由使B1为真、B2为假的测试所掩盖。BRO测试策略要求约束集(T,T),(F,T),(T,F)由C1的执行所掩盖,假设C1由于布尔算子的错误而不正确,至少有一个约束强制C1失败。,例二,C2B1(E3=E4),其中B1是布尔表达式,而E3和E4是算术表达式。C2的条件约束形式如(D1,D2),其中D1是“T”或“F”,D2是,=或。除了C2的其次个简洁条件是关系表达式以外,C2和C1一样,所以可以修改C1的约束集(T,T),(F,T),(T,F),得到C2的约束集,留意(E3=E4)的“T”意味着“=”,而(E3=E4)的“F”意味着“”或“”。分别用(T,=)和(F,=)替换(T,T)和(F,T),并用(T,)和(T,)替换(T,F),就得到C2的约束集(T,=),(F,=),(T,),(T,)。上述条件约束集的掩盖率将保证检测C2的布尔和关系算子的错误。,循环测试,循环测试是一种白盒测试技术,留意于循环构造的有效性,有四种循环:简洁循环,串接循环,嵌套循环和不规章循环如图。,循环测试策略:简洁循环策略,串接循环策略,嵌套循环策略,简洁循环测试策略,整个跳过循环;,只有一次通过循环;,两次通过循环;,m次通过循环,其中mn-1;,n-1,n,n+1次通过循环。,嵌套循环,假设将简洁循环的测试方法用于嵌套循环,可能的测试数就会随嵌套层数成几何级增加,这会导致不实际的测试数目,下面是一种削减测试数的方法:,从最内层循环开头,将其它循环设置为最小值;,对最内层循环使用简洁循环,而使外层循环的跌代参数即循环计数最小,并为范围外或排解的值增加其它测试;,由内向外构造下一个循环的测试,但其它的外层循环为最小值,并使其它的嵌套循环为“典型”值;,连续直到测试全部的循环。,串接循环,假设串接循环的循环都彼此独立,可是使用简洁循环的策略测试,假设两个循环串接起来,而第一个循环是其次个循环的初始值,则这两个循环并不是独立的。假设循环不独立,则推举使用的嵌套循环的方法进展测试。,黑盒测试技术,黑盒测试的概念,黑盒测试范围,与白盒测试的区分,黑盒测试答复的问题,等价划分,边界值分析法,黑盒测试的概念,黑盒测试留意于测试软件的功能需求,也即黑盒测试使软件工程师派生出执行程序全部功能需求的输入条件。黑盒测试并不是白盒测试的替代品,而是用于帮助白盒测试觉察其他类型的错误。,黑盒测试范围,黑盒测试试图觉察以下类型的错误:,(1)功能不对或遗漏,(2)界面错误,(3)数据构造或外部数据库访问错误,(4)性能错误,(5)初始化和终止错误,与白盒测试的区分,白盒测试在测试的早期执行,而黑盒测试主要用于测试的后期,黑盒测试有意不考虑把握构造,而是留意信息域,等价划分,等价划分的概念,等价划分的类别,等价划分步骤,等价划分启发式规章,等价划分例子,等价划分法概念,等价类划分法是把全部可能的输入数据,即程序的输入域划分成假设干局部子集,然后从每一个子集中选取少数具有代表性的数据作为测试用例.该方法是一种重要的,常用的黑盒测试用例设计方法,等价类划分类别,等价类划分可有两种不同的状况:有效等价类和无效等价类.,有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合.利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能.,无效等价类:与有效等价类的定义恰巧相反.,设计测试用例时,要同时考虑这两种等价类.由于,软件不仅要能接收合理的数据,也要能经受意外的考验.这样的测试才能确保软件具有更高的可*性,等价划分步骤,划分等价类,依据划分的等价类,设计测试方案,等价类划分阅历之一,在输入条件规定了取值范围或值的个数的状况下,则可以确立一个有效等价类和两个无效等价类.例如,程序的标准中提到的输入条包括“项数可以从1到999”,则可取有效等价类为“l项数999”,无效等价类为“项数l,及“项数999”。,在输入条件规定了输入值的集合或者规定了“必需如何”的条件的状况下,可确立一个有效等价类和一个无效等价类.如某程序涉及标识符,其输入条件规定“标识符应以字母开头”则“以字母开头者”作为有效等价类,“以非字母开头”作为无效等价类。,等价类划分阅历之二,在输入条件是一个布尔量的状况下,可确定一个有效等价类和一个无效等价类.,在规定了输入数据的一组值假定n个,并且程序要对每一个输入值分别处理的状况下,可确立n个有效等价类和一个无效等价类.例如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。因此可以确定四个有效等价类为教授、副教授、讲师和助教,一个无效等价类,它是全部不符合以上身份的人员的输入值的集合。,在规定了输入数据必需遵守的规章的状况下,可确立一个有效等价类符合规章和假设干个无效等价类从不同角度违反规章.例如,某程序语言规定“一个语句必需以分号;完毕”。这时,可以确定一个有效等价类“以;完毕”,假设干个无效等价类“以:完毕”、“以,完毕”、“以 完毕”等。,在确知已划分的等价类中各元素在程序处理中的方式不同的状况下,则应再将该等价类进一步的划分为更小的等价类.,设计测试用例,在确立了等价类后,可建立等价类表,列出全部划分出的等价类 如下表,设计测试用例的原则,为每一个等价类规定一个唯一的编号.,设计一个新的测试用例,使其尽可能多地掩盖尚未被掩盖地有效等价类,重复这一步.直到全部的有效等价类都被掩盖为止.,设计一个新的测试用例,使其仅掩盖一个尚未被掩盖的无效等价类,重复这一步.直到全部的无效等价类都被掩盖为止.这里强调每次只掩盖一个无效等价类。这是由于一个测试用例中假设含有多个缺陷,有可能在测试中只觉察其中的一个,另一些被无视。,等价类划分法能够全面、系统地考虑黑盒测试的测试用例设计问题,但是没有留意选用一些“高效的”、“有针对性的”测试用例。后面介绍的边值分析法可以弥补这一缺点。,边界值分析法,长期的测试工作阅历告知我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界状况设计测试用例,可以查出更多的错误。,选取用例原则,应确定边界状况.通常输入和输出等价类的边界,就是应着重测试的边界状况.典型地包括IF语句中的判别值,定义域、值域边界,空或畸形输入.应中选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.,基于边界值分析方法选择测试用例的原则 一,1假设输入条件规定了值的范围,则应取刚到达这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据.,2假设输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据.如有标准“某文件可包含l至255”个记录“,则测试用例可选1和255及0和256等。,3假设程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最终一个元素作为测试用例.,基于边界值分析方法选择测试用例的原则 二,4假设程序中使用了一个内部数据构造,则应中选择这个内部数据构造的边界上的值作为测试用例.,边值分析和等价类划分侧重不同,对等价类划分是一个补充。在每个等价类中不只选取一个掩盖用例,而是先用等价类划分法设计测试用例,然后再用边值分析法再补充一些测试用例。,调试的概念,