1、A Free sample background from,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Slide,*,第三章 黑盒测试及其用例的设计,第,3,章 黑盒测试及其用例的设计,3.1,测试用例设计概述,3.2,黑盒测试法的概念,3.3,三角形问题与,NextDate,函数,3.4,等价类划分法,3.5,边界值分析法,3.6,因果图法,3.7,决策表法,3.8,错误推测法,3.9,测试方法的选择,本章教学目标,理论环节,学习理解黑盒测试方法的基本概
2、念,学习理解黑盒测试的两个典型问题,学习掌握黑盒测试的等价类划分法,学习掌握黑盒测试的边界值分析法,学习掌握黑盒测试的因果图测试法和决策表法,实践环节,通过案例运用学习掌握运用方法解决实际问题的能力,运用等价类划分法与边界值分析法进行实际程序测试,运用因果图测试法与决策表法进行实际程序测试,3.,1,测试用例设计概述,3.1.1,测试用例的定义和特征,3.1.2,测试用例的基本准则,3.1.3,设计测试用例的着眼点,3.1.4,测试用例设计书写标准,Return,3.1.1,测试用例的定义和特征,测试用例的定义:,(1)测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。,(2)
3、测试用例是执行的最小实体。,测试用例的特征:,(1)最有可能抓住错误的;,(2)不是重复的、多余的;,(3)一组相似测试用例中最有效的;,(4)既不是太简单,也不是太复杂。,3.1.2,设计测试用例的基本准则,测试用例的代表性,能够代表并覆盖各种合理的和不合理的、合法的和非法的、边界的和越界的以及极限的输入数据、操作和环境设置等。,测试结果的可判定性,即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果。,测试结果的可再现性,即对同样的测试用例,系统的执行结果应当是相同的。,3.1.3,设计测试用例的着眼点,根据产品规格,测试基本功能;,考虑设计一般用户(非专业人员)的使用方案
4、考虑设计稀有或特殊的使用方案;,与系统其他组成部分的配合(如,FAX,和上网可能要用到,MODEM,,测试中考虑对设备的共享);,考虑特殊情况(如内存和硬件的冲突等);,设计极端情况(如内存泄漏、破坏性测试等);,好的测试用例集能花费最小的代价(人力、物力、财力、时间)做最好的测试。,3.1.4,测试用例设计书写标准,在,ANSI/IEEE829-1983,标准中列出了和测试设计相关的测试用例编写规范和模板。标准模板中主要元素如下:,标识符,惟一标识每一个测试用例,测试项,准确的描述所需要测试的项及其特征,测试环境要求,表征执行该测试用例需要的测试环境,输入标准,执行测试用例的输入需求(这
5、些输入可能包括数据、文件或者操作),输出标准,按照指定的环境和输入标准得到的期望输出结果,测试用例之间的关联,标识该测试用例与其它的测试(或其它测试用例)之间的依赖关系,范例,1,范例,2,3.,2,黑盒测试法的概念,Return,黑盒测试被称为功能测试或数据驱动测试。在测试时,把被测程序视为一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下进行。,采用黑盒测试的目的主要是在已知软件产品所应具有的功能的基础上,进行:,(,1,)检查程序功能能否按需求规格说明书的规定正常使用,测试各个功能是否有遗漏,检测性能等特性要求是否满足。,(,2,)检测人机交互是否错误,检测数据结构或外部数
6、据库访问是否错误,程序是否能适当地接收输入数据而产生正确的输出结果,并保持外部信息(如数据库或文件)的完整性。,(,3,)检测程序初始化和终止方面的错误。,3.3,三角形问题与,NextDate,函数,1,、三角形问题,输入三个整数,a,、,b,、,c,,分别作为三角形的三条边,现通过程序判断由三条边构成的三角形的类型为等边三角形、等腰三角形、一般三角形(特殊的还有直角三角形),以及构不成三角形。,现在要求输入三个整数,a,、,b,、,c,,必须满足以下条件:,条件,1 1a100,条件,4 ab+c,条件,2 1b100,条件,5 ba+c,条件,3 1c100,条件,6 ca+b,Retu
7、rn,三角形问题与,NextDate,函数,(续),如果输入值,a,、,b,、,c,不满足条件,1,、条件,2,和条件,3,,程序给出“边的取值超出允许范围,”,的信息。,如果输入值,a,、,b,、,c,满足条件,1,、条件,2,和条件,3,,则输出下列四种情况之一:,(,1,)如果不满足条件,4,、条件,5,和条件,6,中的一个,则程序输出为“非三角形”。,(,2,)如果三条边相等,则程序输出为“等边三角形”。,(,3,)如果恰好有两条边相等,则程序输出为“等腰三角形”。,(,4,)如果三条边都不相等,则程序输出为“一般三角形”。,结论,:三角形问题的复杂之处在于输入与输出之间的关系比较复杂
8、三角形问题与,NextDate,函数,(续),2,、,NextDate,函数,NextDate,函数说明另一种复杂的关系,即输入变量之间逻辑关系的复杂性。,NextDate,函数包含三个变量,month、day,和,year,,函数的输出为输入日期后一天的日期。要求输入变量,month、day,和,year,均为整数值,并且满足下列条件:,条件,1 1 month 12,条件,2 1 day 31,条件,3 1912 year 2050,结论:,在,NextDate,函数中有两种复杂性的输入来源,一是输入域的复杂性,二是确定闰年的规则并要增加“额外天”。,3.4,等价类划分法,3.4.1,
9、等价类的划分原则,3.4.2,等价类划分法的测试用例设计,3.4.3,常见等价类划分测试形式,3.4.4,使用等价类划分法测试的实例,Return,等价类划分法,等价类划分法是一种重要的、常用的黑盒测试方法,它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。,举例:设计这样的测试用例,来实现一个对所有实数进行开平方运算(,y=,sqrt(x,),)的程序的测试。,思考方向:,由于开平方运算只对非负实数有效,这时需要将所有的实数(输入域,x,)进行划分,可以分成:正实数、,0,和 负实数。假设我们选定,+1.4444,代表正实数,,-2.345,代表负实数,则为该
10、程序设计的测试用例的输入为,+1.4444,、,0,和,-2.345,。,等价类划分法,(续),等价类划分法是把所有可能的输入数据,即程序的输入域划分为若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。,所谓等价类是指某个输入域的子集合。,在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,它们具有等价特性,即每一类的代表性数据在测试中的作用都等价于这一类中的其它数据。这样,对于表征该类的数据输入将能代表整个子集合的输入。因此,可以合理的假定:,测试某等价类的代表值就是等效于对于这一类其它值的测试。,3.4.1,等价类的划分原则,等价类是输入域的某个子集合,而所有
11、等价类的并集就是整个输入域。因此,等价类对于测试有两个重要的意义:,完备性,整个输入域提供一种形式的完备性,无冗余性,若互不相交则可保证一种形式的无冗余性,如何划分?,先从程序的规格说明书中找出各个输入条件,再为每个输入条件划分两个或多个等价类,形成若干的互不相交的子集。,采用等价类划分法设计测试用例通常分两步进行:,(,1,),确定等价类,列出等价类表。,(,2,)确定测试用例。,等价类的划分原则,(续),划分等价类可分为两种情况:,(,1,)有效等价类,是指对软件规格说明而言,是有意义的、合理的输入数据所组成的集合。利用有效等价类,能够检验程序是否实现了规格说明中预先规定的功能和性能。,(
12、2,)无效等价类,是指对软件规格说明而言,是无意义的、不合理的输入数据所构成的集合。利用无效等价类,可以鉴别程序异常处理的情况,检查被测对象的功能和性能的实现是否有不符合规格说明要求的地方。,等价类的划分原则,(续),进行等价类划分的依据:,(1)按照区间划分 在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。,例:,程序输入条件为小于,100,大于,10,的整数,x,,则有效等价类为,10,x,100,,两个无效等价类为,x10,和,x100,。,例:,程序输入,x,取值于一个固定的枚举类型,1,3,7,15,,且程序,中对这,4,个数值分别进行了处理,则
13、有效等价类为,x=1,、,x=3,、,x=7,、,x=15,,无效等价类为,x1,3,7,15,的值的集合。,(2)按照数值划分 在规定了一组输入数据(假设包括,n,个 输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定,n,个有效等价类(每个值确定一个有效等价类)和一个无效等价类(所有不允许的输入值的集合)。,等价类的划分原则,(续),(,3,)按照数值集合划分 在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。,例:,程序输入条件为取值为奇数的整数,x,,则有效等价类为,x,的值为奇数的整数,无效等价类为,x,
14、的值不为奇数的整数。,例:,程序输入条件为以字符,a,开头、长度为,8,的字符串,并且字符串不包含,a,z,之外的其它字符,则有效等价类为满足了上述所有条件的字符串,无效等价类为不以,a,开头的字符串、长度不为,8,的字符串和包含了,a,z,之外其它字符的字符串。,(,5,)细分等价类 在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。,(,4,)按照限制条件或规则划分 在规定了输入数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。,3.4.2,等价类划分法的测试用
15、例设计,在设计测试用例时,应同时考虑有效等价类和无效等价类测试用例的设计。,根据已列出的等价类表可确定测试用例,具体过程如下:,(1)首先为等价类表中的每一个等价类分别规定一个唯一的编号。,(2)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。,(3)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。,3.4.3,常见等价类划分测试形式,针对是否对无效数据进行测试,可以将等价类测试分为 标准等价类测试和健壮等价类测试。,标准等价类测试,不考虑无效数据值,测试用例使用
16、每个等价类中的一个值。,健壮等价类测试,主要的出发点是考虑了无效等价类。对有效输入,测试用例从每个有效等价类中取一个值;对无效输入,一个测试用例有一个无效值,其他值均取 有效值。,健壮等价类测试存在两个问题:,(1),需要花费精力定义无效测试用例的期望输出,(2)对,强类型的语言没有必要考虑无效的输入,3.4.4,使用等价类划分法测试的实例,实例,1,三角形问题,分析:,在多数情况下,是从输入域划分等价类的,但并非不能从被测程序的输出域反过来定义等价类,事实上,这对于三角形问题却是最简单的划分方法。在三角形问题中,有四种可能的输出:等边三角形、等腰三角形、一般三角形和非三角形。利用这些信息能够
17、确定下列输出(值域)等价类。,R1=:,边为,a,b,c,的等边三角形,R2=:,边为,a,b,c,的等腰三角形,R3=:,边为,a,b,c,的一般三角形,R4=:,边为,a,b,c,不能组成三角形,标准等价类测试用例,健壮等价类测试用例,三角形问题,测试用例,a,b,c,预期输出,Test1,10,10,10,等边三角形,Test2,10,10,5,等腰三角形,Test3,3,4,5,一般三角形,Test4,4,1,2,非三角形,三角形问题的,4,个标准等价类测试用例,三角形问题,测试用例,a,b,c,预期输出,Test1,5,6,7,一般三角形,Test2,-1,5,5,a,值超出输入值定
18、义域,Test3,5,-1,5,b,值超出输入值定义域,Test4,5,5,-1,c,值超出输入值定义域,Test5,101,5,5,a,值超出输入值定义域,Test6,5,101,5,b,值超出输入值定义域,Test7,5,5,101,c,值超出输入值定义域,三角形问题的,7,个健壮等价类测试用例,使用等价类划分法测试的实例,(续),实例,2,保险公司计算保费费率的程序,某保险公司的人寿保险的保费计算方式为:,投保额,保险费率,其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由 投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规
19、则如下:,年龄,性别,婚姻,抚养人数,2039,4059,其它,M,F,已婚,未婚,1,人扣,0.5,点,最多扣,3,点,(四舍五入取整),6,点,4,点,2,点,5,点,3,点,3,点,5,点,计算保费费率的程序,(1)分析程序规格说明中给出和隐含的对输入条件的要求,列出等价类表(包括有效等价类和无效等价类)。,年龄:一位或两位非零整数,值的有效范围为199,性别:一位英文字符,只能取值,M,或,F,婚姻:字符,只能取值已婚或未婚,抚养人数:空白或一位非零整数(19),点数:一位或两位非零整数,值的范围为199,(,2,)根据(,1,)中的等价类表,设计能覆盖所有等价类的 测试用例。,等价类
20、表,测试用例,输入条件,有效等价类,编号,无效等价类,编号,年龄,2039,岁,1,4059,岁,2,119,岁,6099,岁,3,小于,1,12,大于,99,13,性别,单个英文字符,4,非英文字符,14,非单个英文字符,15,M,5,除,M,和,F,之外的,其它单个字符,16,F,6,婚姻,已婚,7,除已婚和未婚之外的其它字符,17,未婚,8,抚养人数,空白,9,除空白和数字之外,的其它字符,18,16,人,10,小于,1,19,69,人,11,大于,9,20,测试用例,编号,输入数据,预期输出,年龄,性别,婚姻,抚养人数,保险费率,1,27,F,未婚,空白,0.6%,2,50,M,已婚,
21、2,0.6%,3,70,F,已婚,7,0.1%,4,0,M,未婚,空白,无法推算,5,100,F,已婚,3,无法推算,6,99,男,已婚,4,无法推算,7,1,Child,未婚,空白,无法推算,8,45,N,已婚,5,无法推算,9,38,F,离婚,1,无法推算,10,62,M,已婚,没有,无法推算,11,18,F,未婚,0,无法推算,12,40,M,未婚,10,无法推算,习题,NextDate,函数,请使用等价类划分法为,NextDate,函数列出输入域等价类表,并设计相应的测试用例。,3.5,边界值分析法,3.5.1,边界值分析法概要,3.5.2,边界值分析法测试用例,3.5.3,边界值分析
22、法测试举例,3.5.1,边界值分析法概要,边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。,为什么使用边界值分析法?,无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部。因此,针对各种边界情况设计测试用例,通常会取得很好的测试效果。,怎样用边界值分析法设计测试用例?,(,1,)首先确定边界情况。通常输入或输出等价类的边界就是应该着重测试的边界情况。,(,2,)选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值。,举例,常见的
23、边界值,对,16-bit,的整数而言,32767,和,-32768,是边界,屏幕上光标在最左上、最右下位置,报表的第一行和最后一行,数组元素的第一个和最后一个,循环的第,0,次、第,1,次和倒数第,2,次、最后一次,边界值分析,边界值分析使用与等价类划分法相同的划分,,只是边界值分析假定错误更多地存在于划分的边界上,因此在,等价类的,边界上以及两侧的情况设计测试用例。,例,:测试计算平方根的函数,输入:实数,输出:实数,规格说明:当输入一个,0,或比,0,大的数的时候,返回其正平方根;当输入一个小于,0,的数时,显示错误信息“平方根非法,-,输入值小于,0”,并返回,0,;库函数,Print-
24、Line,可以用来输出错误信息。,实例分析,等价类划分:,可以考虑作出如下划分:,输入,(,i)=0,输出(,a)=0,和(,b)Error,测试用例有两个:,输入4,输出2。对应于(,ii),和(,a),。,输入-10,输出0和错误提示。对应于(,i),和(,b)。,边界值分析:,划分(,ii),的边界为0和最大正实数;划分(,i),的边界为最小负实数和0。由此得到以下测试用例:,输入 最小负实数,输入 绝对值很小的负数,输入 0,输入 绝对值很小的正数,输入 最大正实数,边界值分析,(续),通常情况下,软件测试所包含的边界检验有几种类型:,数字、字符、位置、质量、大小、速度、方位、尺寸、空
25、间等,相应地,以上类型的边界值应该在:,最大,/,最小、首位,/,末位、上,/,下、最快,/,最慢、最高,/,最低、最短,/,最长、空,/,满等情况下,实例分析,举例,利用边界值作为测试数据,项,边界值,测试用例的设计思路,字符,起始,-1,个字符,/,结束,+1,个字符,假设一个文本输入区域允许输入,1,个到,255,个 字符,输入,1,个和,255,个字符作为有效等价类;输入,0,个和,256,个字符作为无效等价类,这几个数值都属于边界条件值。,数值,最小值,-1/,最大值,+1,假设某软件的数据输入域要求输入,5,位的数据值,可以使用,10000,作为最小值、,99999,作为最大值;然
26、后使用刚好小于,5,位和大于,5,位的 数值来作为边界条件。,空间,小于空余空间一点,/,大于满空间一点,例如在用,U,盘存储数据时,使用比剩余磁盘空间大一点(几,KB,)的文件作为边界条件。,内部边界值分析,在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户可以很容易发现问题的。然而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子边界值条件。,内部边界值条件主要有下面几种:,数值的边界值检验,字符的边界值检验,其它边界值检验,小结:,在
27、实际的测试用例设计中,需要将基本的软件设计要求和程序定义的要求结合起来,即结合基本边界值条件和内部边界值条件来设计有效的测试用例。,数值的边界值检验,计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。,项,范围或值,位(,bit,),0,或,1,字节(,byte,),0 255,字(,word,),065535,(单字)或,04294967295,(双字),千(,K,),1024,兆(,M,),1048576,吉(,G,),1073741824,计算机数值运算的范围,字符的边界值检验,在计算机软件中,字符也是很重要的表示元素,其中,ASCII,和,Unicode,是常见
28、的编码方式。下表中列出了一些常用字符对应的,ASCII,码值。,字符,ASCII,码值,字符,ASCII,码值,空,(null),0,A,65,空格,(space),32,a,97,斜杠,(/),47,Z,90,0,48,z,122,冒号,(:),58,单引号,(),96,64,选择测试用例的原则,(1),如果输入条件规定了值的范围,则应取刚达到这个范围的边界值以及刚刚超过这个范围边界的值作为测试输入数据。,(2),如果输入条件规定了值的个数,则用最大个数、最小个数和比最大个数多,1,个、比最小个数少,1,个的数作为测试数据。,(3),根据程序规格说明的每个输出条件,使用原则,(1),。,(4
29、),根据程序规格说明的每个输出条件,使用原则,(2),。,(5),如果程序的规格说明给出的输入域或输出域是有序集合 (如有序表、顺序文件等),则应选取集合中的第一个和 最后一个元素作为测试用例。,(6),如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。,(7),分析程序规格说明,找出其它可能的边界条件。,3.5.2,边界值分析法测试用例,采用边界值分析测试的基本思想是:故障往往出现在输入变量的边界值附近。,因此,边界值分析法利用输入变量的最小值,(,min,)、,略大于最小值,(min+)、,输入值域内的任意值,(nom)、,略小于最大值,(max-),和
30、最大值,(max),来设计测试用例。,边界值分析法是基于可靠性理论中称为“单故障”的假设,即有两个或两个以上故障同时出现而导致软件失效的情况很少,也就是说,软件失效基本上是由单故障引起的。,因此,在边界值分析法中获取测试用例的方法是:,(1),每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取,min、min+、nom、max-,和,max,。,(2),对程序中的每个变量重复,(1),。,边界值分析法测试用例,(续),例,1,:,有两个输入变量,x1(ax1b),和,x2(cx2d),的程序,F,的边界值分析测试用例如下:,x1,x2,a,b,c,d,边界值分析法测试用例,(续)
31、例,2,:,有二元函数,f(x,y),,其中,x1,12,,,y1,31,。则采用边界值分析法设计的测试用例是:,推论:对于一个含有,n,个变量的程序,采用边界值分析法测试程序会产生,4n+1,个测试用例。,练习:,有函数,f(x,y,x),,其中,x1900,2100,,,y1,12,,,z1,31,的。请写出该函数采用边界值分析法设计的测试用例。,健壮性测试,健壮性测试是作为边界值分析的一个简单的扩充,它除了对变量的,5,个边界值分析取值外,还需要增加一个略大于最大值,(max+),以及略小于最小值,(min-),的取值,检查超过极限值时系统的情况。因此,对于有,n,个变量的函数采用健壮
32、性测试需要,6n+1,个测试用例。,前面例,1,中的程序,F,的健壮性测试如下图所示:,x1,x2,a,b,c,d,练习:,请为例,2,中的函数,f(x,y),写出相应的健壮性测试用例。,实例,1,三角形问题的边界值分析测试用例,在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。在此,我们将三角形每边边长的取范围值设值为,1,100,。,说明:如果程序规格说明中没有显式地给出边界值,则可以在设计测试用例前先设定取值的下限值和上限值。,实例,2 NextDate,函数的边界值分析测试用例,在,NextDate,函数中,隐含规定了变量,mouth,和变量,day,的取值范围为,1m
33、outh12,和,1day31,,并设定变量,year,的取值范围为,1912year2050,。,3.5.3,边界值分析法测试举例,测试用例,测试用例,测试用例,a,b,c,预期输出,Test 1,Test2,Test3,Test4,Test5,60,60,60,50,50,60,60,60,50,50,1,2,60,99,100,等腰三角形,等腰三角形,等边三角形,等腰三角形,非三角形,Test6,Test7,Test8,Test9,60,60,50,50,1,2,99,100,60,60,50,50,等腰三角形,等腰三角形,等腰三角形,非三角形,Test10,Test11,Test12,
34、Test13,1,2,99,100,60,60,50,50,60,60,50,50,等腰三角形,等腰三角形,等腰三角形,非三角形,测试用例,mouth,day,year,预期输出,Test 1,Test2,Test3,Test4,Test5,Test6,Test7,6,6,6,6,6,6,6,15,15,15,15,15,15,15,1911,1912,1913,1975,2049,2050,2051,1911.6.16,1912.6.16,1913.6.16,1975.6.16,2049.6.16,2050.6.16,2051.6.16,Test8,Test9,Test10,Test11,T
35、est12,Test13,6,6,6,6,6,6,-1,1,2,30,31,32,2001,2001,2001,2001,2001,2001,day,超出,131,2001.6.2,2001.6.3,2001.7.1,输入日期超界,day,超出,131,Test14,Test15,Test16,Test17,Test18,Test19,-1,1,2,11,12,13,15,15,15,15,15,15,2001,2001,2001,2001,2001,2001,Mouth,超出,112,2001.1.16,2001.2.16,2001.11.16,2001.12.16,Mouth,超出,112
36、习题,找零钱最佳组合,假设商店货品价格,(R),都不大于,100,元(且为整数),若顾客付款,(P),在,100,元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。假定此商店的货币面值只包括:,50,元,(N50),、,10,元,(N10),、,5,元,(N5),、,1,元,(N1),四种。,请结合等价类划分法和边界值分析法为上述程序设计 出相应的测试用例。,3.6,因果图法,3.6.1,因果图法的简介,3.6.2,因果图,3.6.3,因果图法测试举例,3.6.1,因果图法的简介,因果图法产生的背景:,等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考
37、虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。,如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。,因果图法的简介,(续),因果图法是基于这样的一种思想:一些程序的功能可以用判定表(或称决策表)的形式来表示,并根据输入条件的组合情况规定相应的操作。,因果图法的定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各
38、种组合情况。,采用因果图法设计测试用例的步骤:,(,1,)根据程序规格说明书描述,分析并确定因(输入条件)和果(输出结果或程序状态的改变),画出因果图。,(,2,)将得到的因果图转换为判定表。,(,3,)为判定表中每一列所表示的情况设计一个测试用例。,因果图法的简介,(续),使用因果图法的优点:,(,1,)考虑到了输入情况的各种组合以及各个输入情况之间的相互制约关系。,(,2,)能够帮助测试人员按照一定的步骤,高效率的开发测试用例。,(,3,)因果图法是将自然语言规格说明转化成形式语言规格说明的一种严格的方法,可以指出规格说明存在的不完整性和二义性。,3.6.2,因果图,因果图中用来表示,4,
39、种因果关系的基本符号:,c,1,e,1,恒等,c,1,e,1,非,c,1,e,1,或,c,2,c,3,c,1,e,1,与,c,2,因果图,(续),因果图中的4种基本关系,在因果图的基本符号中,图中的左结点,c,i,表示输入状态(或称原因),右结点,e,i,表示输出状态(或称结果)。,c,i,与,e,i,取值0或1,0表示某状态不出现,1则表示某状态出现。,恒等:若,c,1,是1,则,e,1,也为,1,,否则,e,1,为,0。,非:若,c,1,是1,则,e,1,为,0,,否则,e,1,为,1。,或:若,c,1,或,c,2,或,c,3,是1,则,e,1,为,1,,否则,e,1,为,0。,与:若,c
40、1,和,c,2,都是1,则,e,1,为,1,,否则,e,1,为,0。,因果图,(续),因果图中的约束,在实际问题中输入状态相互之间、输出状态相互之间可能存在某些依赖关系,称为“约束”。对于输入条件的约束有,E,、,I,、,O,、,R,四种约束,对于输出条件的约束只有,M,约束。,E,约束(异):,a,和,b,中最多有一个可能为1,即,a,和,b,不能同时 为1。,I,约束(或):,a、b、c,中至少有一个必须为1,即,a、b、c,不能同时为0。,O,约束(唯一):,a,和,b,必须有一个且仅有一个为1。,R,约束(要求):,a,是1时,,b,必须是1,即,a,为1时,,b,不能为0。,M,约
41、束(强制):若结果,a,为1,则结果,b,强制为0。,因果图,(续),a,b,异,E,a,b,或,I,c,a,b,唯一,O,R,a,b,要求,M,a,b,强制,因果图中用来表示约束关系的约束符号:,因果图,(续),因果图法最终生成的是决策表。利用因果图生成测试用例的基本步骤如下:,(,1,)分析软件规格说明中哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。,(,2,)分析软件规格说明中的语义,找出原因与结果之间、原因与原因之间对应的关系,根据这些关系画出因果图。,(,3,)由于语法或环境的限制,有些原因与原因之间、原因与结果之间的组合情况
42、不可能出现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。,(,4,)把因果图转换为决策表。,(,5,)根据决策表中的每一列设计测试用例。,3.6.3,因果图法测试举例,实例,用因果图法测试以下程序。,程序的规格说明要求:输入的第一个字符必须是,#,或*,第二个字符必须是一个数字,此情况下进行文件的修改;如果第一个字符不是,#,或*,则给出信息,N,,如果第二个字符不是数字,则给出信息,M,。,解题步骤:,(,1,)分析程序的规格说明,列出原因和结果。,(,2,)找出原因与结果之间的因果关系、原因与原因之间的约束关系,画出因果图。,(,3,)将因果图转换成决策表。,(,4,)根据
43、3,)中的决策表,设计测试用例的输入数据和预期输出。,因果图法测试举例,(续),(,1,)分析程序规格说明中的原因和结果:,(,2,)画出因果图(编号为,10,的中间结点是导出结果的进一步原因):,原因,结果,c1,:第一个字符是,#,e1,:给出信息,N,c2,:第一个字符是,*,e2,:修改文件,c3,:第二个字符是一个数字,e3,:给出信息,M,c,1,c,2,c,3,e,1,10,e,2,e,3,E,因果图法测试举例,(续),(,3,)将因果图转换成如下所示的决策表:,1,2,3,4,5,6,7,8,条件:,C1,C2,C3,10,1,1,1,1,1,0,1,0,1,1,1,0,0
44、1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,动作:,e1,e2,e3,不可能,测试用例,#3,#A,*,6,*,B,A1,GT,规则,选项,因果图法测试举例,(续),(,4,)根据决策表中的每一列设计测试用例:,测试用例编号,输入数据,预期输出,1,#,3,修改文件,2,#,A,给出信息,M,3,*,6,修改文件,4,*,B,给出信息,M,5,A1,给出信息,N,6,GT,给出信息,N,和信息,M,习题,1,、使用因果图法为三角形问题设计测试用例。,2,、某软件的一个模块的需求规格说明书中描述:,(,1,)年薪制员工:严重过失,扣年终风险金的,4%,;过失,扣年终风险
45、金的,2%,。,(,2,)非年薪制员工:严重过失,扣当月薪资的,8%,;过失,扣当月薪资的,4%,。,请绘制出因果图和判定表,并给出相应的测试用例。,3.7,决策表法,3.7.1,决策表,3.7.2,决策表应用,3.7.3,决策表测试应用案例,3.7.1,决策表,在所有的黑盒测试方法中,基于决策表(也称判定表)的测试是最为严格、最具有逻辑性的测试方法。,决策表的概念:决策表是分析和表达多逻辑条件下执行不同操作的情况的工具。,决策表的优点:能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用决策表能够设计出完整的测试用例集合。,在一些数据处理问题当中,某些操作的实施依赖于多
46、个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。决策表很适合于处理这类问题。,决策表实例,规则,选项,1,2,3,4,5,6,7,8,问题,觉得疲倦?,Y,Y,Y,Y,N,N,N,N,感兴趣吗?,Y,Y,N,N,Y,Y,N,N,糊涂吗?,Y,N,Y,N,Y,N,Y,N,建议,重读,继续,跳下一章,休息,“阅读指南,”,决策表,决策表的组成,决策表通常由以下,4,部分组成:,条件桩列出问题的所有条件,条件项针对条件桩给出的条件列出所有可能的取值,动作桩列出问题规定的可能采取的操作,动作项指出在条件项的各组取值情况下应采取的动作,条件桩,动作桩,条件项,动作项,规则,将任何一个
47、条件组合的特定取值及相应要执行的动作称为一条规则。在决策表中贯穿条件项和动作项的一列就是一条规则。,决策表的生成,构造决策表的,5,个步骤:,(,1,),确定规则的个数。,有,n,个条件的决策表有2,n,个规则(每个条件取真、假值)。,(,2,),列出所有的条件桩和动作桩。,(,3,),填入条件项。,(,4,),填入动作项,得到初始决策表。,(,5,),简化决策表,合并相似规则。,若表中有两条以上规则具有相同的动作,并且在条件项之间存在极为相似的关系,便可以合并。,合并后的条件项用符号“-”表示,说明执行的动作与该条件的取值无关,称为无关条件。,三角形问题的决策表,三角形问题的决策表,规则,选
48、项,规则,1-8,规则,9,规则,10,规则,11,规则,12,规则,13,规则,14,规则,15,规则,16,条件:,c1:a,b,c,构成,三角形?,c2:a=b?,c3:a=c?,c4:b=c?,N,-,-,-,Y,Y,Y,Y,Y,Y,Y,N,Y,Y,N,Y,Y,Y,N,N,Y,N,Y,Y,Y,N,Y,N,Y,N,N,Y,Y,N,N,N,动作:,a1:,非三角形,a2:,一般三角形,a3:,等腰三角形,a4:,等边三角形,a5:,不可能,3.7.2,决策表应用,NextDate,函数的决策表测试用例设计,问题分析:,NextDate,函数的三个变量之间在输入定义域中存在一定的逻辑依赖关系
49、由于等价类划分和边界值分析测试都假设了变量是独立的,如果采用上述两种方法设计测试用例,那么这些依赖关系在机械的选取输入值时可能会丢失。而采用决策表法则可以通过使用“不可能动作”的概念表示条件的不可能组合,来强调这种依赖关系。,说明:当决策表规模(指规则的数目,,n,个条件的决策表有2,n,个规则)较大时,可以通过扩展条目决策表(条件使用等价类)、代数简化表、将大表“分解”为小表等方法。,实例分析,NextDate,函数,为了获得下一个日期,,NextDate,函数执行如下操作:,如果输入日期不是当月最后一天,则把,day,变量的值加,1,;,如果输入日期是,111,月份中某月的最后一天,则把
50、day,变量的值复位为,1,,,month,变量的值加,1,;,如果输入日期是,12,月的最后一天,则,day,变量和,month,变量的值都复位为,1,,,year,变量的值加,1,。,关于最后一天的判断:,如果是有,31,天的月份,(1,3,5,7,8,10,12),,,day,变量值为,31,;,如果是有,30,天的月份,(4,6,9,11),,,day,变量值为,30,;,如果是有,29,天的月份,(,闰年的,2,月,),,,day,变量值为,29,;,如果是有,28,天的月份,(,非闰年的,2,月,),,,day,变量值为,28,。,NextDate,函数的动作桩和条件桩,根据所执






