1、n概述n等价类划分n边界值分析n决策表测试n因果图n 场景法 黑盒测试又称正确性测试,或功能测试,是对产品的各功能进行验证,用于检查产品是否达到用户要求的功能或者说检查软件的功能是否符合规格说明。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。程序程序P P输输 入入 I I输输 出出 O OP=fP=f(I,O I,O)n三角形问题nNextDate
2、函数 三角形问题三角形问题 三角形问题:输入三个整数a、b和c分别作为三角形的三条边,程序判断由这三条边构成的三角形类型是:等边三角形、等腰三角形、一般三角形或非三角形(不能构成一个三角)。输入三个整数a、b和c分别作为三角形的三条边,要求a、b和c必须满足:Con 11a100 Con 4ab+cCon 21b100 Con 5ba+cCon 31c100 Con 6ca+b如果a、b和c满足Con1、Con2和Con3,则输出为四种情况之一:1)如果不满足条件Con 4、Con 5和Con 6中有一个,则程序输出为“非三角形”。2)如果三条边相等,则程序输出为“等边三角形”。3)如果恰好有
3、两条边相等,则程序输出为“等腰三角形”。4)如果三条边都不相等,则程序输出为“一般三角形”。NextDate是三个变量month、day和year的函数。输出为输入日期后一天的日期。例如,如果输入为:2003年10月29日,则NextDate函数的输出为:2003年10月30日。要求输入month、day和year都是整数值,满足:Con1 1month12 Con2 1day31 Con3 1912year2050 等价类划分是一种典型的黑盒测试方法,该方法完全不考虑程序的内部结构,只根据对软件的要求和说明,即需求规格说明书,把程序输入域划分成若干部分,然后从每个部分中选取少数代表性数据为作
4、测试输入。等价类划分把程序的输入域划分成若干个互不相交的子集等价类。所谓等价类是指输入域的某个集合,等价类的并便是整个输入域。这对于测试有两个非常重要的意义:(1)表示整个输入域提供了一种形式的完备性(2)互不相交则可保证一种形式的无冗余性。等价类由等价关系决定。因此等价类中的元素有一些共同的特点:如果用等价类中的一个元素作为测试数据进行测试不能发现程序中的故障,那么使用集合中的其它元素进行测试也不可能发现程序故障。对揭露程序中的故障来说,等价类中的每个元素是等效的。有效等价类无效等价类 有效等价类是指对程序规格说明,是有意义的,合理的输人数据所构成的集合。利用有效等价类,可以检验程序是否实现
5、了规格说明预先规定的功能和性能。在具体问题中,有效等价类可以是一个,也可以是多个。无效等价类是指对程序规格说明,是不合理或无意义的输入数据所构成的集合。利用无效等价类,可以检查程序功能和性能的实现是 否有不符合规格说明要求的地方。对于具体的问题,无效等价类至少应有一个,也可能有多个。根据已列出的等价类表,按以下步骤确定测试用例:1)为每个等价类规定一个唯一的编号。2)设计一个新的测试用例,尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到覆盖了所有的有效等价类。3)设计一个新的测试用例,使其覆盖并且只覆盖一个还没有被覆盖的无效等价类。重复这一步,直至测试用例覆盖了所有的无效等价类。等价类划
6、分等价类划分 为便于理解,以一个有两个输入变量x1和x2的程序F为例,说明等价类划分。变量x1和x2无效值:x1d 和 x2g 变量x1和x2有效值:ax1d,区间a,b,(b,c),c,dex2g,区间e,f,f,g其中方括号和圆括号分别表示闭区间和开区间的端点abcdefgx1x2在三角形问题中,输入条件要求:等价类划分测试举例等价类划分测试举例 整数;三个数;取值在1到100之间 三个三个整数整数有效等价类有效等价类号码号码无效等价类无效等价类号码号码整数1一边为非整数二边为非整数三边均为非整数456三个数2只有一条边只有二条边多余三条边7893一边为零二边为零三边为零101112一边
7、零二边 零三边 100二边 100三边 100161718100110011001cba a b c覆盖的等价类覆盖的等价类a b c覆盖的等价类覆盖的等价类1.5,4,540,0,0123.5,2.5,55-3,4,6132.5,4.5,5.562,-7,-51437-3,-5,-7154,58101,4,8162,3,4,593,101,101173,0,810101,101,101180,6,011 大量的故障发生在输入或输出范围的边界上,而不是在输入范围的内部。实践表明,在设计测试用例时,对边界附近的处理必须给予足够的重视,为检验边界附近的处理专门设计测试用例,常常可以取得良好的测试效
8、果。使用边界值分析方法设计测试用例,首先应确定边界情况。输入等价类与输出等价类的边界,就是应着重测试的边界情况。(1)选取正好等于(2)刚刚大于(3)刚刚小于边界的值 而不是选取等价类中 典型值 任意值 边界条件边界条件 边界条件是一些特殊情况。程序在处理大量中间数值时都是正确,但是在边界处可能出现错误。比如,在作三角形计算时,要输入三角形的三个边长:a、b和a。当满足a+bc、a+cb及b+ca才能构成三角形。但如果把三个不等式的任何一个大于号“”错写成大于等于号“”,那就无法构成三角形了。/*Initiatize each element to 1*/main()int data 10;i
9、nt i;For(i=1;i=10;i+)datai=-1;这段代码的意图是创建包含10个元素的数组,并为数组中的每一个元素赋初值-1,即数组中从第1个元素到第10个元素被赋予数值-1。data(0)=0;data(1)=-1;data(2)=-1;data(3)=-1;data(4)=-1;data(5)=-1;data(6)=-1;data(7)=-1;data(8)=-1;data(9)=-1;data(10)=-1 data(0)data(0)的值是的值是0 0,而不是,而不是-1-1。刚开始时,可能意识不到一组给定数据包含了多少边界。但是仔细分析总可以找到一些不明显的、有趣的和可能产
10、生软件故障的边界。实际上,边界条件就是软件操作界限所在的边缘条件。一些可能与边界有关的数据类型有:数值,速度,字符,地址,位置,尺寸,数量,等等。第一个/最后一个 最小值最大值 开始完成 超过/在内 空满 最短最长 最慢/最快 最早/最迟 最高最低 相邻最远 一个有两个变量x1,x2的程序F,输入变量x1和x2在下列范围内取值:ax1b cx2d 区间a,b和c,d是x1和x2的值域,强类型语言(例如Ada)允许显式地定义这种变量值域。事实上,边界值测试适非强类型语言。cabdx1x2 两个变量程序的输入域两个变量程序的输入域程序F的输入空间(定义域)如下图所示。带阴影矩形中的任何点都是程序F
11、的有效输入。边界值分析测试边界值分析测试 边界值分析的基本思想是利用输入变量值的最小值,稍大于最小值,正常值,稍小于最大值和最大值。边界值分析测试用例的获得,通过使所有变量取正常值,只使一个变量分别取最小值、略高于最小值、略低于最大值和最大值。N个变量,边界值分析产生4n+1个测试用例。x1abdx2两个变量的边界值分析测试用例两个变量的边界值分析测试用例c,4n+1=4*2+1=9个 健壮性边界值测试是边界值分析的一种扩展。变量除了取min,min+,nom,max-,max五个边界值外,还要考虑略超过最大值(max+)以及略小于最小值(min-)的取值。N个变量,健壮性边界值分析产生6n+
12、1个测试用例。abdx2两个变量程序的健壮性测试用例x1abdx2x1测试用例a b c 预期输出Test1 50 501 等腰三角形Test2 50 502 等腰三角形Test3 50 5050等边三角形Test 4 50 5099 等腰三角形Test 5 50 50100 非腰三角形Test6 50 1 50 等腰三角形Test7 50 2 50 等腰三角形Test8 50 99 50 等腰三角形Test9 50 100 50 非三角形Test10 1 50 50等腰三角形Test11 2 50 50等腰三角形Test12 99 50 50等腰三角形Test13 100 50 50非三角形
13、测试用例a b c 预期输出Test1 50 501 等腰三角形Test2 50 502 等腰三角形Test3 50 5050等边三角形Test 4 50 5099 等腰三角形Test 5 50 50100 非腰三角形Test6 50 1 50 等腰三角形Test7 50 2 50 等腰三角形Test8 50 99 50 等腰三角形Test9 50 100 50 非三角形Test10 1 50 50等腰三角形Test11 2 50 50等腰三角形Test12 99 50 50等腰三角形Test13 100 50 50非三角形测试用例a b c 预期输出Test1 50 501 等腰三角形Tes
14、t2 50 502 等腰三角形Test3 50 5050等边三角形Test 4 50 5099 等腰三角形Test 5 50 50100 非腰三角形Test6 50 1 50 等腰三角形Test7 50 2 50 等腰三角形Test8 50 99 50 等腰三角形Test9 50 100 50 非三角形Test10 1 50 50等腰三角形Test11 2 50 50等腰三角形Test12 99 50 50等腰三角形Test13 100 50 50非三角形测试用例a b c 预期输出Test1 50 501 等腰三角形Test2 50 502 等腰三角形Test3 50 5050等边三角形Te
15、st 4 50 5099 等腰三角形Test 5 50 50100 非腰三角形Test6 50 1 50 等腰三角形Test7 50 2 50 等腰三角形Test8 50 99 50 等腰三角形Test9 50 100 50 非三角形Test10 1 50 50等腰三角形Test11 2 50 50等腰三角形Test12 99 50 50等腰三角形Test13 100 50 50非三角形 NextDate函数是一个有三个变量month(月份)、day(日期)和year(年)的函数。输出为输入日期后一天的日期。要求输入变量month、day和year都是整数值,并且满足下条件:n Con1 1m
16、onth12n Con2 1day31n Con3 1912year2050 666661515-112191119121913197520491911年6月16日1911年6月16日1911年6月16日1911年6月16日1911年6月16日 测试用例 Month Day Year 预期输出151515151520502051197519751975197519751975Test1Test2Test3Test4Test5666661911年6月16日1911年6月16日 Day不在有效值域1.31中1975年6月2日1975年6月3日1975年7月1日不可能的输入日期Day不在有效值域1.
17、31中666303132 Test6 Test7 Test8 Test9 Test10 Test11 Test12 Test13 NextDate函数健壮性函数健壮性测试用例测试用例151515测试用例 Month Day Year 预期输出197519751975197519751975-112month不在有效值域1.12中1975年1月16日1975年2月16日 1975年11月16日 1975年12月16日 month不在有效值域1.12中111213151515Test14Test15Test16 Test17 Test18 Test19 NextDate函数健壮性函数健壮性测试用例
18、测试用例 基于函数(程序)输入定义域的测试方法,是所有测试方法中最基本的。这类测试方法都有一种假设,即输入变量是真正独立的。如果不能保证这种假设,则这类方法不能产生令人满意的测试用例。在所有的黑盒测试方法中,基于决策表的测试是最严格,最具有逻辑严格性的测试方法。决策表最突出的优点是,它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。决策表测试 在一些数据处理问题中,某些操作的实施在一些数据处理问题中,某些操作的实施依赖于多个逻辑条件的取值,也即针对不同逻辑依赖于多个逻辑条件的取值,也即针对不同逻辑条件组合值,分别执行不同的操作。条件组合值,分别执行不同的操作。描述不同
19、条件集合下采取行动的若干组合情况。描述不同条件集合下采取行动的若干组合情况。决策表决策表通常由决策表通常由4 4个部分组成:个部分组成:规 则动 作 项条 件 项动 作 桩条 件 桩图 4-7 决 策 表 组 成规 则动 作 项条 件 项动 作 桩条 件 桩图 4-7 决 策 表 组 成条件桩部分列出了问题的所有条件条件桩部分列出了问题的所有条件,动作桩则给出了问题规定的可能采取的操作。动作桩则给出了问题规定的可能采取的操作。在实际使用判定表时,常常先将它简化。简化是以合并相似规则为目标的。若表中有两条或多条规则具有相同的动作,并且在条件项之间存在着极为相似的关系,便可以设法将其合并。合并规则
20、的办法合并规则的办法:NYNNYYXX-NYXNYNNYYXX-NYXNNN-YYXXN-YXNNN-YYXXN-YX“不关心不关心”条目条目(dont care)条件无关或条件不适用。条件无关或条件不适用。1)确定规则的个数。每个条件可取两个取值,故应有2n种规则。2)列出所有的条件桩和动作桩。3)填入条件项。4)填入动作项,这样便可得到初始决策表。5)化简,合并相似规则后得到决策表。构造决策表的5个步骤:如果变量确实是相互独立的,那么使用等价类的笛卡儿积有意义。如果变量间存在逻辑依赖关系,那么这些依赖关系在机械地选取输入值时可能丢失。决策表方法通过使用“不可能动作”概念表示条件的不可能组合
21、,来强调依赖关系。NextDate函数能够使用的操作只有5种:n Day变量1n Month 变量1n Day变量复位n Mongth变量复位n Year变量1 M1:month:month有30天 M2:month:month有31天,12月除外 M3:month:month是12月)M4:month:month是2月)D1:day:1 day 27)D2:day:day:28)D3:day:day:29)D4:day:day:30 D5:day:day:31)Y1:year:year是闰年 Y2:year:year不是闰年 NextDateNextDate函数的日、月的等价类集合上建立决策
22、表函数的日、月的等价类集合上建立决策表N extD ate 函 数 的 决 策 表 1 2 3 4 5 6 7 8 9 10 条 件:c 1:m onth 在 c 2:da y 在 c 3:ye a r 在 M 1 D 1 M 1 D 2 M 1 D 3 M 1 D 4 M 1 D 5 M 2 D 1 M 2 D 2 M 2 D 3 M 2 D 4 M 2 D 5 行 为:a 1:不 可 能 a 2:da y 加1 a 3:da y 复 位 a 4:m onth 加1 a 5:m onth 复 位 a 6:ye a r 加1 X X X X X X X X X X X X 11 12 13 1
23、4 15 16 17 18 19 20 21 22 条 件:c 1:m onth 在 c 2:da y 在 c 3:ye a r 在 M 3 D 1 M 3 D 2 M 3 D 3 M 3 D 4 M 3 D 5 M 4 D 1 M 4 D 2 Y 1 M 4 D 2 Y 2 M 4 D 3 Y 1 M 4 D 3 Y 2 M 4 D 4 M 4 D 5 行 为:a 1:不 可 能 a 2:da y 加1 a 3:da y 复 位 a 4:m onth 加1 a 5:m onth 复 位 a 6:ye a r 加1 X X X X X X X X X X X X X X X X 有有30天的月
24、份天的月份有有31天的月份天的月份(非(非12月)月)12月份月份不可能规则不可能规则可以简化可以简化关注关注2月和闰年月和闰年使用决策表代数进一步简化这使用决策表代数进一步简化这22个测试用例。个测试用例。进一步简化后的决策表 1-3 4 5 6-9 10 11-14 15 16 17 18 19 20 21,22 条件:c1:month在 c2:day 在 c3:year 在 M1 D1,D2,D3 M1 D4 M1 D5 M2 D1,D2,D3,D4 M2 D5 M3 D1,D2,D3,D4 M3 D5 M4 D1 M4 D2 Y1 M4 D2 Y2 M4 D3 Y1 M4 D3 Y2
25、M4 D4,D5 行为:a1:不可能 a2:day加 1 a3:day复位 a4:month加 1 a5:month复位 a6:year加 1 进一步简化后的决策表 1-3 4 5 6-9 10 11-14 15 16 17 18 19 20 21,22 条件:c1:month在 c2:day 在 c3:year 在 M1 D1,D2,D3 M1 D4 M1 D5 M2 D1,D2,D3,D4 M2 D5 M3 D1,D2,D3,D4 M3 D5 M4 D1 M4 D2 Y1 M4 D2 Y2 M4 D3 Y1 M4 D3 Y2 M4 D4,D5 行为:a1:不可能 a2:day加 1 a3:
26、day复位 a4:month加 1 a5:month复位 a6:year加 1 使用决策表代数进一步简化这使用决策表代数进一步简化这22个测试用例。个测试用例。Test:month day year 预期输出Test1-3:8 16 2001 17/08/2001Test4:8 30 2001 1/09/2001Test5:8 31 2001 不可能Test:Test:Test1-3:Test1-3:Test4:Test4:Test5:Test5:进一步简化后的决策表 1-3 4 5 6-9 10 11-14 15 16 17 18 19 20 21,22 条件:c1:month在 c2:da
27、y 在 c3:year 在 M1 D1,D2,D3 M1 D4 M1 D5 M2 D1,D2,D3,D4 M2 D5 M3 D1,D2,D3,D4 M3 D5 M4 D1 M4 D2 Y1 M4 D2 Y2 M4 D3 Y1 M4 D3 Y2 M4 D4,D5 行为:a1:不可能 a2:day加 1 a3:day复位 a4:month加 1 a5:month复位 a6:year加 1 Test:month day year 预期输出Test6-9:1 16 2001 17/01/2001Test10:1 31 2001 1/02/2001Test11-14:12 16 2001 17/12/2
28、001Test:Test:Test6-9:Test6-9:Test10:Test10:Test11-14:Test11-14:Test:month day year 预期输出Test15:12 31 2001 1/01/2002Test16:2 16 2001 17/02/2001Test17:2 28 2004 29/02/2004Test:Test:Test15:Test15:Test16:Test16:Test17:Test17:Test:month day year 预期输出Test18:2 28 2001 1/03/2002Test19:2 29 2004 1/03/2004Test
29、20:2 29 2001 不可能Test21-22:2 30 2001 不可能Test:Test:Test18:Test18:Test19:Test19:Test20:Test20:Test21-22Test21-22相应的测试用例如下:测试用例 month day year 预期输出 Test1-3 Test4 Test5 Test6-9 Test10 Test11-14 Test15 Test16 Test17 Test18 Test19 Test20 Test21-22 8 8 8 1 1 12 12 2 2 2 2 2 2 16 30 31 16 31 16 31 16 28 28 2
30、9 29 30 2001 2001 2001 2001 2001 2001 2001 2001 2004 2001 2004 2001 2001 17/8/2001 1/9/2001 不可能 17/1/2001 1/2/2001 17/12/2001 1/1/2002 17/2/2001 29/2/2004 1/3/2001 1/3/2004 不可能 不可能 使用决使用决策表设计测试用例,可以把条件解释为输入,策表设计测试用例,可以把条件解释为输入,把行动解释为输出。把行动解释为输出。与其他测试方法一样,基于决策表的测试对于某些应用程序(例如NextDate函数)很有效,但是对另一些应用程序(
31、例如佣金问题)就不值得费这么大精力。基于决策表测试适用于要发生大量决策的情况(例如三角形问题),或在输入变量之间存在重要的逻辑关系的情况(例如NextDate函数)。1决策表方法适用于以下应用程序n if-then-else逻辑突出。n 输入变量之间存在逻辑关系。n 涉及输人变量子集的计算。n 输入与输出之间存在因果关系。2.适合于使用决策表设计测试用例的情况有:n 规格说明以决策表形式给出,或是容易转换成决策表。n 条件的排列顺序不会也不应影响执行的操作。n 规则的排列顺序不会也不应影响执行的操作。n 每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。n 如果某一规则得到满
32、足要执行多个操作,这些操作的执行顺序无关紧要。3决策表规模较大,有n个条件的有限条目决策表 有2n规则。4与其他方法一样,迭代会有所帮助。因果图方法适合于描述对于多种条件的组合,产生多个相应动作的测试方法,能够帮助测试人员按照一定的步骤,高效率地开发测试用例,以检测程序输入条件的各种组合情况。1分析程序规格说明的描述中,哪些是原因,哪些是结果。原因常常是输入条件或是输入条件的等价类,而结果则是输出条件。2找出原因与结果之间,原因与原因之间的对应关系,并将其表示成连接各个原因与各个结果的“因果图”。3把因果图转换成判定表。因果图的基本符号因果图的基本符号 约束符号约束符号分析分析关联转换输出根据
33、组合间的关联、约束,形成因果图由因果图转换为判定表由判定表导出测试用例分析输入、输出数据之间的关系软件需求规格说明如下:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。步骤一:分析程序规格说明书,识别哪些是原因,哪些是结果,原因往往是输入条件或者输入条件的等价类,而结果常常是输出条件。如下所示:原因:1-第一列字符是A;2-第一列字符是B;3-第二列字符是一数字。结果:21-修改文件;22-给出信息L;23-给出信息M。1 12 23 34 45 56 6原因原因1 11 11 10 00
34、00 00 02 20 00 01 11 10 00 03 31 10 01 10 01 10 0结果结果21210 00 00 00 01 11 122221 10 01 10 00 00 023230 01 10 01 10 01 1测试用例测试用例A3A3A5A5AMAMA7A7B5B5B4B4BNBNB!B!C2C2X6X6DYDYP;P;n软件系统中流程的控制都由事件触发的,例如:申请一个项目,需先提交审批单据,再由部门经理审批,审核通过后由总经理来最终审批,如果部门经理审核不通过,就直接退回。同一事件不同的触发顺序和处理结果形成事件流,每个事件流触发时的情景便形成了场景。通过运用场
35、景来对系统的功能点或业务流程的描述,可以提高测试效果。n场景法一般包含基本流和备用流,从一个流程开始,通过描述经过的路径来确定的过程,经过遍历所有的基本流和备用流来完成整个场景。步骤1:根据说明,描述程序的基本流及各项备选流 步骤2:根据基本流和各项备选流生成不同的场景 步骤3:对每一个场景生成相应的测试用例 步骤4:对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值从基本流开始,再将基本流和备选流结合起来,可以确定以下用例场景:场景1:基本流场景2:基本流 备选流 1场景3:基本流备选流 1 备选流 2场景4:基本流 备选流 3场景5:基本流 备
36、选流 3 备选流 1场景6:基本流 备选流 3 备选流 1 备选流 2场景7:基本流 备选流 4场景8:基本流 备选流 3 备选流 4 在等价类分析测试中,通过等价类划分来减少在等价类分析测试中,通过等价类划分来减少测试用例的绝对数量。测试用例的绝对数量。边界值分析方法则通过分析输入变量的边界值边界值分析方法则通过分析输入变量的边界值域设计测试用例。域设计测试用例。在基于决策表的测试中,通过分析被测程序的在基于决策表的测试中,通过分析被测程序的逻辑依赖关系,构造决策表,进而设计测试用例。逻辑依赖关系,构造决策表,进而设计测试用例。边界值分析等价类划分决策表高低测试用例数每种测试方法的测试用例边
37、界值分析等价类划分决策表高低测试用例数每种测试方法的测试用例数量边界值分析不考虑数据或逻辑依赖关系,边界值分析不考虑数据或逻辑依赖关系,机械地根据各边界生成测试用例。机械地根据各边界生成测试用例。等价类划分则关注数据依赖关系和函等价类划分则关注数据依赖关系和函数本身,考虑如何划分等价类,随后数本身,考虑如何划分等价类,随后也是机械地生成测试用例。也是机械地生成测试用例。决策表技术最精细,既要考虑数决策表技术最精细,既要考虑数据,又要考虑逻辑依赖关系。据,又要考虑逻辑依赖关系。n黑盒测试方法有等价类划分、边界值分析、决策表法等。n等价类划分把程序的输入域划分成若干个互不相交的等价类,其目的是要减少测试用例的绝对数量。在进行等价类划分时,不仅要考虑有效等价类,还应考虑无效等价类。n边界值分析方法则通过分析输入变量的边界值域设计测试用例。n在基于决策表的测试中,通过分析被测程序的逻辑依赖关系,构造决策表,进而设计测试用例。n每种黑盒测试方法各有所长,应针对软件开发项目的具体特点,选择适当的测试方法,设计高效的测试用例,有效地将软件中隐藏的故障揭露出来。