1、第六章第六章 软件测试软件测试任务任务1 1 进行静态测试进行静态测试软件测试概述软件测试概述软件测试的目的和原则软件测试的目的和原则软件测试与软件开发各阶段的关系软件测试与软件开发各阶段的关系软件测试的过程软件测试的过程软件测试方法软件测试方法任务任务2 2 进行白盒测试进行白盒测试白盒测试白盒测试逻辑覆盖逻辑覆盖基本路径覆盖基本路径覆盖2任务任务3 3 进行黑盒测试进行黑盒测试黑盒测试黑盒测试等价类划分等价类划分边界值分析法边界值分析法错误推断法错误推断法因果图法因果图法3 3代码在编写过程是与软件测试并发执行的。一般代码在编写过程是与软件测试并发执行的。一般我们对测试的理解认为必须让程序
2、跑起来才能够我们对测试的理解认为必须让程序跑起来才能够查看程序是否存在问题。实际上,静止状态下的查看程序是否存在问题。实际上,静止状态下的源代码也可以暴露出一些问题。源代码也可以暴露出一些问题。下面下面给出一段程序,大家看看能不能直接找出问给出一段程序,大家看看能不能直接找出问题呢?题呢?4 45 5软件测试的重要性软件测试的重要性在整个软件开发中,测试在整个软件开发中,测试工作量工作量一般占一般占 在人命关天的软件在人命关天的软件(如飞机控制、核反应如飞机控制、核反应堆等)测试所花费的时间往往是其它软堆等)测试所花费的时间往往是其它软件工程活动时间之和的三到五倍件工程活动时间之和的三到五倍G
3、.MyersG.Myers给出了关于测试的目的给出了关于测试的目的测试是为了发现程序中的错误而执行程序的过程;测试是为了发现程序中的错误而执行程序的过程;好的测试方案是极可能发现迄今为止尚未发现的错误好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;的测试方案;成功的测试是发现了至今为止尚未发现的错误的测试成功的测试是发现了至今为止尚未发现的错误的测试。软件测试的原则软件测试的原则所有的测试都应追溯到用户需求所有的测试都应追溯到用户需求最严重的错误最严重的错误(从用户角度从用户角度)是那些导致软件无法满足需求是那些导致软件无法满足需求的错误。的错误。程序中的问题根源可能在开发前期的各阶
4、段解决、纠正错程序中的问题根源可能在开发前期的各阶段解决、纠正错误也必须追溯到前期工作。误也必须追溯到前期工作。测试与软件开发个阶段之间的关系可用测试与软件开发个阶段之间的关系可用V V模型描述模型描述所有测试可以在任何代码被产生前就被计划和设计所有测试可以在任何代码被产生前就被计划和设计应该在测试开始之前的相当长时间,就制定出测应该在测试开始之前的相当长时间,就制定出测试计划。试计划。测试计划可以在需求模型一完成就开始测试计划可以在需求模型一完成就开始详细的测试方案定义可以在设计模型被确定后立即开始详细的测试方案定义可以在设计模型被确定后立即开始软件测试不等于程序测试,软件测试应贯穿于软件定
5、义与软件测试不等于程序测试,软件测试应贯穿于软件定义与开发的整个期间;开发的整个期间;据美国一家公司统计,查出的软件错误中,属于据美国一家公司统计,查出的软件错误中,属于需求分析和软件设计的错误约占需求分析和软件设计的错误约占 64%64%,属于程序,属于程序编写的错误仅占编写的错误仅占 36%36%。程序编写的许多错误是。程序编写的许多错误是“先天的先天的”。paretopareto原则原则测试发现的错误中测试发现的错误中80%80%很可能起源于很可能起源于20%20%的模块中。的模块中。测试应该从测试应该从“小规模小规模”开始,并逐步进行开始,并逐步进行“大规大规模模”测试。测试。穷举测试
6、是不可能的。穷举测试是不可能的。为了达到最佳的测试效果,应该由独立的第三方为了达到最佳的测试效果,应该由独立的第三方来从事测试工作。来从事测试工作。用户需求和验收测试计划验收测试功能需求和系统测试计划系统测试总体设计和集成测试计划集成测试详细设计和单元测试计划单元测试编码单元测试单元测试又称为模块测试,是最小单位的测试,其目的在又称为模块测试,是最小单位的测试,其目的在于发现各模块内部可能存在的各种错误。于发现各模块内部可能存在的各种错误。在单元测试活动中,各独立单元模块将在于系统在单元测试活动中,各独立单元模块将在于系统的其它部分相隔离的情况下进行测试,的其它部分相隔离的情况下进行测试,单元
7、测试集中对源代码实现的每一个程序单元进单元测试集中对源代码实现的每一个程序单元进行测试,检查各模块是否正确实现了规定的功能行测试,检查各模块是否正确实现了规定的功能。多个模块可以并行进行单元测试。多个模块可以并行进行单元测试。集成测试集成测试在集成各个模块时有两种方式在集成各个模块时有两种方式一次性集成方式一次性集成方式首先对每个模块进行单元测试,然后将这些模块组装在一起进行测首先对每个模块进行单元测试,然后将这些模块组装在一起进行测试,最终得到要求的软件系统试,最终得到要求的软件系统增值式集成方式增值式集成方式首先对每个模块进行单元测试,然后将其逐步组装成较大的系统,首先对每个模块进行单元测
8、试,然后将其逐步组装成较大的系统,在组装过程中一边连接一边测试,已发现连接过程中产生的问题,在组装过程中一边连接一边测试,已发现连接过程中产生的问题,最后组装成要求的软件系统。最后组装成要求的软件系统。增值式集成方式有三种实现方式增值式集成方式有三种实现方式自顶向下、自底向上和混合增值方式。自顶向下、自底向上和混合增值方式。确认测试确认测试也称为有效性测试。基于需求规格说明书和用户也称为有效性测试。基于需求规格说明书和用户信息,验证软件的功能和性能及其它特性。信息,验证软件的功能和性能及其它特性。确认测试的步骤确认测试的步骤进行有效性测试进行有效性测试在模拟的环境下,应用黑盒测试方法,验证所测
9、试的软件是否满足在模拟的环境下,应用黑盒测试方法,验证所测试的软件是否满足需求规格说明属列出的需求需求规格说明属列出的需求软件配置的复查软件配置的复查 测试和测试和 测试测试系统测试系统测试把已经通过确认测试的软件,与计算机硬件、外把已经通过确认测试的软件,与计算机硬件、外设、某些支持软件、数据和人员等系统元素结合设、某些支持软件、数据和人员等系统元素结合起来,进行组装和测试。起来,进行组装和测试。系统测试用理应根据需求规格说明书来设计,并系统测试用理应根据需求规格说明书来设计,并在模拟环境下运行。在模拟环境下运行。验收测试验收测试以用户为主,由开发人员,测试人员,以用户为主,由开发人员,测试
10、人员,QAQA人员参人员参加的测试加的测试1717软件测试的软件测试的策略和方法策略和方法静态静态测试方法测试方法动态动态测试方法测试方法人工测试方法人工测试方法计算机辅助静计算机辅助静态分析方法态分析方法白盒测试方法白盒测试方法黑盒测试方法黑盒测试方法目前图书管理系统代码已经编写完身份验证部分目前图书管理系统代码已经编写完身份验证部分的代码。如何设计合理的测试数据,才能让这个的代码。如何设计合理的测试数据,才能让这个函数中的所有代码都跑一遍,并能够验证其逻辑函数中的所有代码都跑一遍,并能够验证其逻辑实现的合理性,检验程序中是否存在问题。实现的合理性,检验程序中是否存在问题。1818白盒测试白
11、盒测试把程序看成装在一个透明的白盒子里,也就是完把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。序中的每条通路是否都能按预定要求正确工作。白盒测试又称为结构测试。白盒测试又称为结构测试。1919逻辑覆盖逻辑覆盖基本路径测试基本路径测试条件测试条件测试数据流测试数据流测试循环测试循环测试控制结构测试控制结构测试逻辑覆盖逻辑覆盖是设计白盒测试方案的一种技术,是对一系列测是设计白盒测试方案的一种技术,是对一系列测试过程的总称,
12、这组测试过程逐渐进行越来越完试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。整的通路测试。逻辑覆盖方法逻辑覆盖方法(1)(1)语句覆盖语句覆盖(2)(2)判定覆盖判定覆盖(3)(3)条件覆盖条件覆盖(4)(4)判定判定/条件覆盖条件覆盖(5)(5)条件组合覆盖条件组合覆盖PROCEDURE SAMPAL PROCEDURE SAMPAL (A,B:REAL;VAR (A,B:REAL;VAR X:REAL);X:REAL);BEGIN BEGIN IF(A1)AND(B=0)IF(A1)AND(B=0)THEN X:=X/A THEN X:=X/A IF(A=2)OR(X1)IF(A=
13、2)OR(X1)THEN X:=X+1 THEN X:=X+1 END;END;开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce使程序中每个语句至少执行一次使程序中每个语句至少执行一次只需设计一个测试用例,覆盖只需设计一个测试用例,覆盖ace 路径路径:A1 and B=0 and A=2A1 and B=0 and X/A 1 输入数据:输入数据:A=2,B=0,X=4 即达到了语句覆盖。即达到了语句覆盖。语句覆盖是语句覆盖是最弱最弱的逻辑覆盖的逻辑覆盖使每个判定的真假分支都至少执行一次。使每个判定的真假分支都至少执行一次。可设计两组测试用
14、例可设计两组测试用例:第一个判定表达式为真并且第二个判定表达式为假:第一个判定表达式为真并且第二个判定表达式为假:P1TP2F A=3,B=0,X=0 可覆盖可覆盖acd分支分支 第一个判定表达式为假并且第二个判定表达式为真:第一个判定表达式为假并且第二个判定表达式为真:P1FP2T A=2,B=1,X=1 可覆盖可覆盖abe分支分支 两组测试用例可覆盖所有判定的真假分支两组测试用例可覆盖所有判定的真假分支 判定覆盖仍是判定覆盖仍是弱的弱的逻辑覆盖逻辑覆盖使每个判定的每个条件的可能取值至少执行一次。使每个判定的每个条件的可能取值至少执行一次。例子中共有两处判定表达式,每个表达式中有两个例子中共
15、有两处判定表达式,每个表达式中有两个条件,为了做到条件覆盖应该选取测试数据使得:条件,为了做到条件覆盖应该选取测试数据使得:在第一个判断表达式中有下述结果出现:在第一个判断表达式中有下述结果出现:A1,A A1,A 1,B=0,B 1,B=0,B 0 0 在第二个判定表达式中有下述结果出现:在第二个判定表达式中有下述结果出现:A=2,A A=2,A 2,X1,X 2,X1,X 1 1使用下面两组数据就可以满足上述覆盖标准:使用下面两组数据就可以满足上述覆盖标准:T1T2F3F4 T1T2F3F4 A=2A=2,B=0B=0,X=4 X=4 可覆盖可覆盖c c、e e分支分支 F1F2T3T4
16、A=1F1F2T3T4 A=1,B=1B=1,X=1 X=1 可覆盖可覆盖b b、d d分支分支 选取足够多的测试用例,使判断中的每个条件的所有选取足够多的测试用例,使判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次能判断结果至少执行一次.针对例子,下面两组测试数据满足判定条件覆盖。针对例子,下面两组测试数据满足判定条件覆盖。P1TT1T2P2TT3T4 A=2,B=0,X=4P1TT1T2P2TT3T4 A=2,B=0,X=4P1FF1F2P2FF3F4 A=1P1FF1F2P2FF3F4 A=1,B=1
17、B=1,X=1X=1条件覆盖条件覆盖不一定包含不一定包含判定覆盖判定覆盖 判定覆盖判定覆盖也不一定包含也不一定包含条件覆盖条件覆盖条件组合覆盖是更强的逻辑覆盖标准,它要求选条件组合覆盖是更强的逻辑覆盖标准,它要求选取足够多的测试数据,使得每个判定表达式中条取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。件的各种可能组合都至少出现一次。条件组合覆盖是前述几种覆盖标准中条件组合覆盖是前述几种覆盖标准中最强的最强的,但是但是不一定能够不一定能够执行到程序中的每条路径。执行到程序中的每条路径。上述例子共有上述例子共有8种可能的条种可能的条件组合:件组合:1.A1,B=02.A
18、1,B 03.A 1,B=04.A 1,B 05.A=2,X16.A2,X 17.A 2,X18.A 2,X 1下面的四组数据可以使上面列出来的下面的四组数据可以使上面列出来的的八种条件组合每种至少出现一的八种条件组合每种至少出现一次:次:i.A=2,B=0,X=4(针对(针对1,5两种组合,覆盖路径两种组合,覆盖路径ce)ii.A=2,B=1,X=1(针对(针对2,6两种组合,覆盖路径两种组合,覆盖路径be)iii.A=1,B=0,X=2(针对(针对3,7两种组合,覆盖路径两种组合,覆盖路径be)iv.A=1,B=1,X=1(针对针对4,8两种组合,覆盖路径两种组合,覆盖路径bd)语句覆盖语
19、句覆盖1.a1.a路径路径 x=80,y=80 x=80,y=802.bcef 2.bcef 路径不存在路径不存在3.bcf 3.bcf 路径路径 (x=80 and y=80 x=80 and y=80)and(x=90 and y=75)and and(x=90 and y=75)and(x75 or y90)(x75 or y=90,80=y=90,80=y=80 and y=80)and(x90 or y=75(x=80 and y=80)and(x90 or y=75 and y=90)and y=90)80=80=90 80=80=90测试用例:测试用例:x=85,y=90 x=8
20、5,y=90 判定覆盖判定覆盖 1.1.路径:路径:a a 条件:条件:P1T x=90 and y=90 P1T x=90 and y=90 测试用例:测试用例:x=90,y=90 x=90,y=90 2.2.路径:路径:bcebce,不可能,不可能 3.3.路径:路径:dbedbe 条件:条件:P1FP2FP3T x=75 and y=90 P1FP2FP3T x=75 and y=90 测试用例测试用例 :x=75,y=90:x=75,y=90 4.4.路径:路径:bcfbcf 条件:条件:P1FP2TP3F x=90 and y=75 and y=90 and y=75 and y80
21、 测试用例:测试用例:x=90,y=75x=90,y=75条件覆盖条件覆盖 1 1、路径:、路径:dbedbe 条件:条件:F1T2F3T4T5T6 x=75 and y=90 F1T2F3T4T5T6 x=75 and y=90 测试用例测试用例 :x=75,y=90:x=75,y=90 2 2、路径:、路径:bcfbcf 条件:条件:T1F2T3T4T5F6 x=90 and y=75 and y=90 and y=75 and y80 测试用例:测试用例:x=90,y=75 x=90,y=75 3 3、路径:、路径:bdfbdf 条件:条件:F1F2F3F4F5F6 x75and y75
22、 F1F2F3F4F5F6 x75and y=80 y=80 x=90 y=75 x=75 y=90 x=80 y=80 x=90 y=75 x=75 y=90 x=80 y=90 y=75 y=80 y=90 y=75 y90 x=80 x=75 x=90 x=80 x=75 x=90 x80 y80 x90 y75 x75 y90 x80 y80 x90 y75 x75 y901.T1T2 x=80 y=801.T1T2 x=80 y=802.T1F2T3T4T5F6 x=90 y=752.T1F2T3T4T5F6 x=90 y=753.F1T2F3T4F5T6 x=74 y=913.F1
23、T2F3T4F5T6 x=74 y=914.F1F2F3F4F5F6 x=74 y=744.F1F2F3F4F5F6 x=74 y=745.F1T2F3T4T5T6 x=75 y=915.F1T2F3T4T5T6 x=75 y=916.T1F2T3F4T5F6 x=76 y=746.T1F2T3F4T5F6 x=76 y=74基本路径测试是基本路径测试是Tom McCabeTom McCabe提出的一种白盒提出的一种白盒测试技术。使用这种技术设计测试用例时,测试技术。使用这种技术设计测试用例时,首先计算过程设计结果的逻辑复杂度,并以首先计算过程设计结果的逻辑复杂度,并以该复杂度为指南定义执行路
24、径的基本集合,该复杂度为指南定义执行路径的基本集合,从该基本集合导出的测试用例可以保证程序从该基本集合导出的测试用例可以保证程序中的每条语句至少执行一次,而且每个条件中的每条语句至少执行一次,而且每个条件在执行时都将分别取真和假值。在执行时都将分别取真和假值。在设计测试方案时,往往需要仔细分析程序在设计测试方案时,往往需要仔细分析程序的控制流。为了突出表示程序的控制流,可的控制流。为了突出表示程序的控制流,可以使用流图以使用流图(也称为程序图也称为程序图)。流图仅仅描绘程。流图仅仅描绘程序的控制流程,它完全不表现对数据的具体序的控制流程,它完全不表现对数据的具体操作以及分支或循环的具体条件。操
25、作以及分支或循环的具体条件。在流图中用圆表示节点,一个圆代表一条或在流图中用圆表示节点,一个圆代表一条或多条语句。程序流程图中的一个处理框序列多条语句。程序流程图中的一个处理框序列和一个菱形判定框,可以映射成流图中的一和一个菱形判定框,可以映射成流图中的一个节点。流图中的箭头线称为边,它和程序个节点。流图中的箭头线称为边,它和程序流程图中的箭头线类似,代表控制流。在流流程图中的箭头线类似,代表控制流。在流图中一条边必须终止于一个节点,即使这个图中一条边必须终止于一个节点,即使这个节点并不代表任何语句节点并不代表任何语句(实际上相当于一个空实际上相当于一个空语句语句)。由边和节点围成的面积称为区
26、域,当。由边和节点围成的面积称为区域,当计算区域数时应该包括图外部未被围起来的计算区域数时应该包括图外部未被围起来的那个区域。那个区域。顺序结构选择While循环Util循环用用PDLPDL表示的处理过程以及与之对表示的处理过程以及与之对应的流图应的流图procedure:sortprocedure:sort1 1:do while records remaindo while records remain read record;read record;2 2:if record field 1=0if record field 1=03 3:then process record;then
27、 process record;store in buffer store in buffer;incremert counter;incremert counter;4 4:elseifrecardfield2=0elseifrecardfield2=05 5:then reset counter;then reset counter;6 6:else process record;else process record;store in file;store in file;7a7a:end ifend ifendifendif7b7b:enddoenddo8 8:endend根据过程设计
28、结果画出相应的流图根据过程设计结果画出相应的流图举例:举例:PROCEDURE average;PROCEDURE average;/*这个过程计算不超过这个过程计算不超过100100个在规定值域内的有效数字的平均个在规定值域内的有效数字的平均值;值;同时计算有效数字的总和及个数。同时计算有效数字的总和及个数。*/INTERFACE RETURNS average,totalINTERFACE RETURNS average,totalinput,totalinput,totalvalid;valid;INTERFACE ACCEPTS value,minimum,maximum;INTERF
29、ACE ACCEPTS value,minimum,maximum;TYPE valueTYPE value1.1001.100 IS SCALAR ARRAY IS SCALAR ARRAY;TYPE average,total,input,totalTYPE average,total,input,totalvalid;valid;minimum,maximum,sum IS SCALAR;minimum,maximum,sum IS SCALAR;TYPE i IS INTEGER;TYPE i IS INTEGER;1 1:i i1 1;total,inputtotal,inputto
30、taltotalvalidvalid0 0;sumsum0 0;2 2:DO WHILE valueDO WHILE valuei i-999-9993 3:AND totalAND totalinputinput1001004 4:increment totalincrement totalinput by1;input by1;5 5:IF valueIF valuei iminimumminimum6 6:AND valueAND valuei imaximummaximum7 7:THEN increment totalTHEN increment totalvalid by 1;va
31、lid by 1;sum sumsum+valuesum+valuei i;8 8:ENDIFENDIF increment i by 1;increment i by 1;9 9:ENDDOENDDO1010:IF totalIF totalvalidvalid0 01111:THEN averageTHEN averagesum/totalsum/totalvalid;valid;1212:ELSE averageELSE average-999-999;1313:ENDIFENDIF END average END average求平均值过程的流图求平均值过程的流图2.2.计算流图的环形
32、复杂度计算流图的环形复杂度环形复杂度定量度量程序的逻辑复杂性。有了描环形复杂度定量度量程序的逻辑复杂性。有了描绘程序控制流的流图之后,可以用下述三种方法绘程序控制流的流图之后,可以用下述三种方法之一来计算环形复杂度。之一来计算环形复杂度。1 1)流图中的区域数等于环形复杂度。流图中的区域数等于环形复杂度。2 2)流图流图G G的环形复杂度的环形复杂度V(G)V(G)E-N+2E-N+2,其中,其中E E是流图中边的条数,是流图中边的条数,N N是流图中节点数。是流图中节点数。3 3)流图)流图G G的环形复杂度的环形复杂度V(G)V(G)P+1P+1,其中,其中P P是是流图中判定节点的数目。
33、流图中判定节点的数目。使用上述任何一种方法,都可以计算出本例求平使用上述任何一种方法,都可以计算出本例求平均值流图的环形复杂度为均值流图的环形复杂度为6 6。3.3.确定线性独立路径的基本集合确定线性独立路径的基本集合 所谓独立路径是指至少引入程序的一个新所谓独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径,用流图处理语句集合或一个新条件的路径,用流图术语描述,独立路径至少包含一条在定义该术语描述,独立路径至少包含一条在定义该路径之前不曾用过的边。路径之前不曾用过的边。使用基本路径测试法设计测试用例时,程使用基本路径测试法设计测试用例时,程序的环形复杂度决定了程序中独立路径的数序
34、的环形复杂度决定了程序中独立路径的数量,而且这个数是确保程序中所有语句至少量,而且这个数是确保程序中所有语句至少被执行一次所需的测试数量的上界。被执行一次所需的测试数量的上界。注意,独立路径的基本集合并不唯一。注意,独立路径的基本集合并不唯一。本例,由于环形复杂度为本例,由于环形复杂度为6 6,因此共有,因此共有6 6条独条独立路径:立路径:路径路径1 1:1-2-10-11-131-2-10-11-13 路径路径2 2:1-2-10-12-131-2-10-12-13 路径路径3 3:1-2-3-10-11-131-2-3-10-11-13 路径路径4 4:1-2-3-4-5-8-9-2-.
35、1-2-3-4-5-8-9-2-.路径路径5 5:1-2-3-4-5-6-8-9-2-1-2-3-4-5-6-8-9-2-.路径路径6 6:1-2-3-4-5-6-7-8-9-2-1-2-3-4-5-6-7-8-9-2-.路径路径4 4、5 5、6 6后面的省略号后面的省略号(.)(.)表示,可以表示,可以后接通过控制结构其余部分的任意路径后接通过控制结构其余部分的任意路径(例如例如,10-11-13)10-11-13)。注意,路径注意,路径1 1和路径和路径3 3不能独立测试。不能独立测试。4 4设计可强制执行基本集合中每条路径的测试用例设计可强制执行基本集合中每条路径的测试用例 应该选取数
36、据使得在测试每条路径时都适当地设置应该选取数据使得在测试每条路径时都适当地设置好了各个判定节点的条件。可以测试上述基本集合的好了各个判定节点的条件。可以测试上述基本集合的测试用例如下:测试用例如下:路径路径1 1的测试用例:的测试用例:valuevaluek k有效输入值,其中有效输入值,其中k ki(i i(i的定义在下面的定义在下面)valuevaluei i-999-999,其中,其中2i1002i100 预期结果:基于预期结果:基于k k的正确平均值和总数的正确平均值和总数 注意,路径注意,路径1 1无法独立测试,必须作为路径无法独立测试,必须作为路径4 4、5 5和和6 6的一部分来
37、测试。的一部分来测试。路径路径2 2的测试用例:的测试用例:valuevalue1 1-999-999 预期结果:预期结果:averageaverage-999-999,其他都保持初始值,其他都保持初始值路径路径3 3的测试用例:的测试用例:试图处理试图处理101101个或更多个值个或更多个值 valuevaluei i有效输入值,其中有效输入值,其中i i100100前前100100个数值应该是有效输入值个数值应该是有效输入值预期结果:与测试用例预期结果:与测试用例1 1相同相同注意,路径注意,路径3 3无法独立测试,可以作为路径无法独立测试,可以作为路径4 4、5 5、6 6的一部分来测试
38、。的一部分来测试。路径路径4 4的测试用例:的测试用例:valuevaluei i=有效输入值,其中有效输入值,其中i i100100 value valuek kminimumminimum,其中,其中k ki i 预期结果:基于预期结果:基于k k的正确平均值和总数。的正确平均值和总数。路径路径5 5的测试用例:的测试用例:valuevaluei i有效输入值,其中有效输入值,其中i i100100 value valuek kmaximummaximum,其中,其中k ki i 预期结果:其于预期结果:其于k k的正确平均值和总数的正确平均值和总数路径路径6 6的测试用例:的测试用例:v
39、aluevaluei i=有效输入值,其中有效输入值,其中i i100100 预期结果:正确的平均值和总数预期结果:正确的平均值和总数当图书管理系统已经完成了系统的集成及集成测当图书管理系统已经完成了系统的集成及集成测试之后,整个程序处在可运行状态。下一步我们试之后,整个程序处在可运行状态。下一步我们需要确认用户的需求是否已经得到满足。下面这需要确认用户的需求是否已经得到满足。下面这段文字是从图书管理系统需求规格说明书中段文字是从图书管理系统需求规格说明书中摘取的借阅功能的需求描述,现在需要根据需求摘取的借阅功能的需求描述,现在需要根据需求说明中的陈述验证我们的程序是否能够达到预定说明中的陈述
40、验证我们的程序是否能够达到预定的目标。的目标。53535454 黑盒测试着重测试软件的功能需求,也就是黑盒测试着重测试软件的功能需求,也就是说,黑盒测试让软件工程师设计出能充分检说,黑盒测试让软件工程师设计出能充分检查程序所有功能需求的输入条件集。黑盒测查程序所有功能需求的输入条件集。黑盒测试并不能取代白盒测试技术,它是与白盒测试并不能取代白盒测试技术,它是与白盒测试互补的方法,它很可能发现白盒测试不易试互补的方法,它很可能发现白盒测试不易发现的其他不同类型的错误。发现的其他不同类型的错误。黑盒测试力图发现下述类型的错误:黑盒测试力图发现下述类型的错误:功能不正确或遗漏了功能;功能不正确或遗漏
41、了功能;界面错误;界面错误;数据结构错误或外部数据库访问错误;数据结构错误或外部数据库访问错误;性能错误;性能错误;初始化和终止错误。初始化和终止错误。等价划分方法把程序的输入域划分成数据类,等价划分方法把程序的输入域划分成数据类,据此可以导出测试据此可以导出测试用例。理想的测试案例是用例。理想的测试案例是独自发现独自发现一类一类错误,从而减少设计测试用例错误,从而减少设计测试用例的数量(一个用例代表了一类错误)。的数量(一个用例代表了一类错误)。如果把所有可能的输入数据如果把所有可能的输入数据(有效的和无效的有效的和无效的)划分成若干个等价类,则可以合理地做出下划分成若干个等价类,则可以合理
42、地做出下述假定:述假定:每类中的一个典型值在测试中的作每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同用与这一类中所有其他值的作用相同。等价类划分的启发规则:等价类划分的启发规则:规则规则1 1:如果输入条件规定了取值范围或者:如果输入条件规定了取值范围或者值的个数,则可以确定一个有效等价类和两值的个数,则可以确定一个有效等价类和两个无效等价类。个无效等价类。例如:假设输入条件的取值范围是例如:假设输入条件的取值范围是0 0到到150150,则有,则有效等价类定义是效等价类定义是0 x1500 x150,无效等价类是,无效等价类是x0 x150 x150。规则规则2 2:如果规定
43、了输入数据的一组值,而且:如果规定了输入数据的一组值,而且程序要对每一个输入值分别进行处理,这时程序要对每一个输入值分别进行处理,这时可以将每一个允许输入的值定义为一个有效可以将每一个允许输入的值定义为一个有效等价类,所有不允许输入值的集合定义为一等价类,所有不允许输入值的集合定义为一个无效等价类。个无效等价类。例如,在学校内对教授、副教授、讲师、助例如,在学校内对教授、副教授、讲师、助教进行统计,则定义教授、副教授、讲师、教进行统计,则定义教授、副教授、讲师、助教助教4 4个有效等价类,所有不符合这个有效等价类,所有不符合这4 4类人员类人员的输入值的输入值(工程师工程师)定义为一个无效等价
44、类。定义为一个无效等价类。规则规则3 3:如果规定了输入条件是一个布尔量,:如果规定了输入条件是一个布尔量,则可以定义一个有效等价类和一个无效等价则可以定义一个有效等价类和一个无效等价类。类。例子:当向系统中输入密码时,该密码是否正例子:当向系统中输入密码时,该密码是否正确结果就是布尔型的,存在确结果就是布尔型的,存在/不存在(分成不存在(分成两个等价类)。两个等价类)。规则规则4 4:如果规定了输入数据必须遵循的规则,:如果规定了输入数据必须遵循的规则,则可以定义一个有效等价类和若干个无效等价则可以定义一个有效等价类和若干个无效等价类。即把符合规则的输入定义为一个有效等价类。即把符合规则的输
45、入定义为一个有效等价类,把从各种不同角度违反规则的输入定义为类,把从各种不同角度违反规则的输入定义为多个无效等价类。多个无效等价类。例:网络游戏中升级装备:角色的等级必须能够例:网络游戏中升级装备:角色的等级必须能够使用该装备;红宝石使用该装备;红宝石1 1个;翡翠个;翡翠2 2个;蓝宝个;蓝宝3 3个。个。测试用例分为有效等价类一个(满足上述条测试用例分为有效等价类一个(满足上述条件);无效等价类四个分别违背上述四条原则件);无效等价类四个分别违背上述四条原则中一条。中一条。(1 1)等级不够)等级不够 (2 2)等级够,缺红宝)等级够,缺红宝 (3 3)等级够,缺翡翠)等级够,缺翡翠 (4
46、 4)等级够,缺蓝宝)等级够,缺蓝宝设计等价类测试用例要注意:设计等价类测试用例要注意:有效等价类的测试用例尽量公用,以减少测试的有效等价类的测试用例尽量公用,以减少测试的次数;次数;无效等价类必须每类一例,以防止漏掉错误。无效等价类必须每类一例,以防止漏掉错误。例子:某一报表处理系统,要求用户输入处理报例子:某一报表处理系统,要求用户输入处理报表的日期。假设日期限制在表的日期。假设日期限制在19901990年年1 1月至月至19991999年年1212月,即系统只能对该段时期内的报表进行处月,即系统只能对该段时期内的报表进行处理。如果用户输入的日期不在此范围内,则显理。如果用户输入的日期不在
47、此范围内,则显示输入错误信息。该系统规定日期由年、月的示输入错误信息。该系统规定日期由年、月的六位数字字符组成,前四位代表年,后两位代六位数字字符组成,前四位代表年,后两位代表月。先用等价类划分的方法设计测试用例,表月。先用等价类划分的方法设计测试用例,来测试系统的日期检查功能。来测试系统的日期检查功能。输入条件有效等价类无效等价类报表输入的长度及内容1.6位数字字符2.有非数字字符3.少于6个4.多于6个年分范围5.199019996.小于19907.大于1999月份范围8.01129.等于0010.大于12对于表中的对于表中的1 1,5 5,8 8对应的三个有效等价类条件,对应的三个有效等
48、价类条件,用一个测试用例覆盖:用一个测试用例覆盖:测试数据测试数据 期望结果期望结果 覆盖条件覆盖条件199709 199709 输入有效输入有效 1 1,5 5,8 8测试数据测试数据 期望结果期望结果 覆盖条件覆盖条件1999KD 1999KD 输入无效输入无效 2 219975 19975 输入无效输入无效 3 31997005 1997005 输入无效输入无效 4 4198912 198912 输入无效输入无效 6 6200012 200012 输入无效输入无效 7 7199800 199800 输入无效输入无效 9 9199713 199713 输入无效输入无效 1010注意:无效等
49、价类的测试用例中,不能出现相同的测注意:无效等价类的测试用例中,不能出现相同的测试用例,否则相当于一个测试用例覆盖一个以上不试用例,否则相当于一个测试用例覆盖一个以上不合理等价类,使测试不完全合理等价类,使测试不完全由于很多时候在输入的边界比中间更加容易由于很多时候在输入的边界比中间更加容易发生错误,为此可用边界值分析(发生错误,为此可用边界值分析(boundary boundary value analysis BVAvalue analysis BVA)作为一种测试技术。)作为一种测试技术。边界值分析选择一组测试用例检测边界值边界值分析选择一组测试用例检测边界值边界值分析是一种补充等价划分
50、的测试案例边界值分析是一种补充等价划分的测试案例设计技术,根据等价类的边界来设计测试用设计技术,根据等价类的边界来设计测试用例例1.1.如果输入条件指定为以如果输入条件指定为以a a和和b b为边界的范围为边界的范围a,ba,b,测试案例应当包括,测试案例应当包括a a、b b、略大于、略大于a,a,略小略小于于b b的值的值2.2.如果输入条件指定为一组值,测试用例应当如果输入条件指定为一组值,测试用例应当执行其中的最大和最小值,还应当测试略大执行其中的最大和最小值,还应当测试略大于最小值和略小于最大值的值于最小值和略小于最大值的值3.3.指导输入的原则也适用于输出的条件(在产指导输入的原则