资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,可行性研究,需求分析,总体设计,详细设计,编码,测试,运行,/,维护,软件生命周期模型结构图,问题定义,第六部分 测试,软件测试的基本概念,软件测试方法,软件测试的步骤,软件可靠性,测试工具,1 软件测试的基本概念,软件测试的定义,软件测试的基本原则,软件测试的步骤,软件测试的信息流,软件测试的定义,为什么,要进行软件测试?,测试的,目标,是什么?,G.Myers,认为:,1)测试是为了发现程序中的错误而执行程序的过程;,2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;,3)成功的测试是发现了至今为止尚未发现的错误的测试。,测试的,定义,:,为了发现程序中的,错误,而执行程序的过程。,软件测试的特点,1,、软件测试的开销大,按照,Boehm,的统计,软件测试的开销大约占总成本的,30%-50%,。例如:,APOLLO,登月计划,,80%,的经费用于软件测试。,2,、不能进行,“,穷举,”,测试,只有将所有可能的情况都测试到,才有可能检查出所有的错误。但这是不可能的:,例:程序,P,有两个整型输入量,X,、,Y,,输出量为,Z,,在,32,位机上运行。所有的测试数据组(,Xi,,,Yi,)的数目为:,P,X,Y,Z,32,32,64,2,2,2,假设,1,毫秒执行,1,次,如要进行完全测试,共需,5,亿年。,软件测试的基本原则,1,、尽量不由程序设计者进行测试,因为由程序设计者进行测试,他会有意无意地在测试过程中去证明自己的程序是正确的,因而会影响测试的效果。,2,、关键是注重测试用例的选择,测试用例由两部分组成(输入数据、预期的输出结果)。,既有合理输入数据,也有不合理的输入数据。,3,、充分注意测试中的群集现象,群集现象是指在测试过程中,发现错误比较集中的程序段,往往可能残留的错误数较多。因此必须注意这种群集现象,对错误群集的程序段进行重点测试,以提高测试的效率。,软件测试的步骤,1.,单元测试,:指对源程序中每一个,程序单元,进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。该阶段涉及编码和详细设计的文档。,2.,集成测试,:各模块经过单元测试后,将各,模块组装,起来进行集成测试,以检查与设计相关的软件体系结构的有关问题。,3.,确认测试,:主要检查已实现的软件是否满足,需求说明书,中确定了的各种需求。,4.,系统测试,:指把已确定的软件,与其他系统元素,(如硬件、其他支持软件、数据和人工等)结合在一起进,行测试。,软件测试的信息流,测试工具,软件配置:指需求说明书、设计说明书和源程序等。,测试配置:指测试方案、测试用例和测试驱动程序等。,测试工具:指计算机辅助测试的有关工具。,2 软件测试方法,软件测试方法分为两类:,静态分析、动态测试,,在进行软件测试时,通常两种方法都应同时使用。,一、静态分析方法,静态测试,是通过对被测程序的静态审查,发现代码中潜在的错误。,计算机并不真正运行被测试的程序,只对被测程序进行特性分析。,桌前检查,(,Desk Checking),由程序员检查自己的程序,对源代码进行分析、检验。,代码会审,(,Code Reading Review),由程序员和测试员组成评审小组,按照“常见的错误清单”,进行会议讨论检查。,步行检查,(Walkthroughs),与代码会审类似,也要进行代码评审,但评审过程主要采取人工执行程序的方式,故也称为“走查”。,二、动态测试方法,动态测试方法与静态分析方法的区别是:需要通过选择适当的测试用例,上机执行程序进行测试。,任何产品都可以使用以下两种方法进行测试:,逻辑结构,测试用例,:测试数据预期结果,测试方案,:测试目的测试用例,(1)如果已知产品的功能,则可以对它的,每一个功能,进行测试,-,黑盒法,(2)如果已知产品的内部工作过程,则可以对它的,每种内部操作,进行测试,-,白盒法,无论是白盒法还是黑盒法,关键都是如何选择高效的测试用例。,白盒测试,测试时按照程序,内部的逻辑,测试程序、检验程序中的每条通路是否都能按预定的要求正确工作。,白盒测试又称为,结构,测试,,主要用于单元测试。,逻辑覆盖,是以程序的,内部逻辑,结构为基础的测试用例设计技术,在白盒法中,规定了不同的覆盖标准。,语,句,覆,盖,判,定,覆,盖,条,件,覆,盖,判,定,条,件,覆,盖,条,件,组,合,覆,盖,弱,强,语句覆盖,语句覆盖就是设计足够的测试用例,使得程序中的每个,语句至少执行一次,。,满足语句覆盖的情况是:,执行路径:ace,用例格式,,由输入数据和预期的输出结果两部分组成:,输入(A,B,X),输出(A,B,X),选择用例:,(2,0,4),(2,0,3),若第一个判断中的逻辑运算符“&”若错写成了“|”,利用上面的数据能检查出这个错误吗?,A1,AND,B=0,a,X=X/A,A=2,OR,X1,X=X+1,b,c,d,e,T,F,T,F,判定覆盖,覆盖情况:,共有两个判定,应执行路径:,ace,abd,或:,acd,abe,选择用例:,(1),(2,0,4),(2,0,3),ace,(1,1,1),(1,1,1),abd,或:,(2),(3,0,3,),(3,0,1,),acd,(2,1,1),(2,1,2),abe,如果,x1,错写成了,x1,,能检查出这个错误吗?,A1,AND,B=0,X=X/A,A=2,OR,X1,X=X+1,a,b,c,d,e,T,F,T,F,覆盖标准:,使得程序中,每个判定,的取“,真,”分支和取“,假,”分支至少都执行一次。,条件覆盖,条件:,A1,B0,A2,x1。,选择输入数据:,A2,B0,x4,A1,B1,x1,如下数据:,A1,B0,x3,A2,B1,x1,满足条件覆盖,但不满足判,定,覆盖。,条件覆盖:使得程序判定中的,每个条件,能获得各种可能的结果。,A1,AND,B=0,X=X/A,A=2,OR,X1,X=X+1,a,b,c,d,e,T,F,T,F,判定条件覆盖,条件:,A1,B0,A2,x1。,判定:,(A1)and(B0),(A2)or(x1),选择输入数据:,A2,B0,x4,A1,B1,x1,A1,AND,B=0,X=X/A,A=2,OR,X1,X=X+1,a,b,c,d,e,T,F,T,F,判定条件覆盖:使得判定中的,每个条件,都取到各种可能的值,而且,每个判定表达式,也都取到各种可能的结果。,条件组合覆盖,可能的条件组合:,(1)A1,B0(2)A1,B0,(3)A1,B0(4)A1,B0,(5)A2,x1(6)A2,x1,(7)A2,x1(8)A2,x1,相应的输入数据:,A2,B0,x4,满足(1)和(5),A2,B1,x1,满足(2)和(6),A1,B0,x2,满足(3)和(7),A1,B1,x1,满足(4)和(8),条件组合覆盖,:,使得每个判定中的条件的,各种可能组合,都至少出现一次。,A1,AND,B=0,X=X/A,A=2,OR,X1,X=X+1,a,b,c,d,e,T,F,T,F,路径覆盖,选择以下输入数据,覆盖程序中的 4 条路径:,a=2,b=0,x=2 (ace),,和,a=2,b=1,x=1 (,abe,),,和,a=1,b=1,x=1 (,abd,),,和,a=3,b=0,x=1 (,acd,),,和,可看出满足路径覆盖却未满足条件组合覆盖。,路径覆盖是指设计足够的测试用例,覆盖被测程序中,所有可能的路径,。,A1,AND,B=0,X=X/A,A=2,OR,X1,X=X+1,a,b,c,d,e,T,F,T,F,覆盖标准的比较,基本路径测试,在实际问题中,一个不太复杂的程序其路径是一个庞大的数字。为了解决这一难题,只得把覆盖的路径数压缩到一定的限度内,例如,循环体,只执行一次。,基本路径测试是在程序流程图的基础上,通过分析由控制构造的,环路复杂性,,导出,基本路径,集合,从而设计,测试用例,,保证这些路径至少通过一次。,基本路径测试的步骤为:,(1)以详细设计或源程序为基础,导出程序流程图的拓补结构程序图。,基本路径的导出步骤,(1)以详细设计或源程序为基础,导出程序流程图的拓补结构程序图。,(2)计算程序图,G,的环路复杂性,V(G)。,McCabe,定义程序图的,环路复杂性,为此平面图中区域的个数。,区域个数为边和结点圈定的封闭区域数加上图形外的区域数1。例如图(,b),的,V(G)=4,也可按另一种方法计算,即,V(G)=,判定结点数+1。,(3)确定只包含独立路径的基本路径集。,环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个执行语句至少执行一次所必需的测试用例,数目的上界,。,独立路径,是指包括一组以前没有处理的语句或条件的一条路径。从程序图来看,,在图(,b),所示的图中,一组独立的路径是:,path1:1-11,path2:1-2-3-4-5-10-1-11,path3:1-2-3-6-8-9-10-1-11,path4:1-2-3-6-7-9-10-1-11,从例中可知,一条新的路径必须包含有一条新边。这 4 条路径组成了图(,b),所示的程序图的一个基本路径集。,只要测试用例确保这些基本路径的执行,就可以使程序中每个可执行,语句至少执行一次,,每个条件的,取“真”和取“假”分支,也能得到测试。,基本路径集,不是唯一,的,对于,给定的程序图,可以得到不同的基本路径集。,黑盒测试,黑盒,测试时完全不考虑程序内部的结构和处理过程,只按照,规格说明书的规定,来检查程序是否符合它的功能要求。,黑盒测试是在程序接口进行的测试,又称为,功能,测试。,黑盒测试检查的主要方面有:,程序的,功能,是否正确或完善;,数据的,输入,能否正确接收,,输出,是否正确;,是否能保证,外部信息,(如数据文件)的完整性;,性能,上是否能够满足要求。,黑盒测试-等价类划分,等价类划分是一种实用的测试技术,属于黑盒测试。与逻辑覆盖不同,使用等价类划分设计测试用例时,完全不需要考虑程序的内部逻辑结构,而主要依据程序的,功能,说明。,穷尽测试是不可能实现的。如何选择这个子集,使得这个子集具有代表性,能,尽可能多,地发现程序中的错误,等价类划分就是基于这种考虑的一种实现方法。该方法根据输入数据和输出数据的特点,将程序,输入域划分,成若干个部分,即子集,然后从每个子集中,选取,具有代表性的数据作为测试用例。,1.划分等价类,等价类的划分在很大程度上依靠的是测试人员的经验,下面给出几条基本原则:,(1)如果输入条件规定了,取值范围,,则可划分出,一个有效,的等价类(输入值在此范围内)和,两个无效,的等价类(输入值小于最小值、输入值大于最大值)。,例如输入值是学生的成绩,范围为0100,确定一个合理的等价类为“0成绩100”,两个不合理的等价类为“成绩0”和“成绩100”。,(2)如果输入条件规定了输入数据的,个数,,则可相应地划分出一个有效的等价类(输入数据的,个数等于,给定的个数要求)和两个无效的等价类(输入数据的,个数少于,给定的个数要求、输入数据的,个数多于,给定的个数要求)。,(3)如果输入条件规定了输入数据的,一组可能的值,,而且程序对这组可能的值做相同的处理,则可将这组,可能的值,划分为一个有效的等价类,而这些,值以外,的值划分成无效的等价类。,例如,输入条件上说明教师的职称可为助教、讲师、副教授及教授 4 种职称之一,则分别取这四个值作为4 个合理等价类,另外把 4 个职称之外的任何职称作为不合理等价类。,(4)如果输入条件规定了输入数据的一组可能的值,但是程序对不同的输入值做不同的处理,则,每个输入值,是一个有效的等价类,此外还有一个无效的等价类(所有不允许值的集合)。,(5)如果输入条件规定了,输入数据必须遵循,的规则,则可以划分,一个有效,的等价类(符合规则)和,若干个无效,的等价类(从各种角度违反规则)。,2.确定测试用例,划分出等价类后,根据以下原则设计测试用例:,(1)为每个等价类编号。,(2)设计一个新的测试用例,使它能包含尽可能多的尚未被覆盖的,有效,等价类。重复这一过程,直到所有的有效等价类都被覆盖。,(3)设计一个新的测试用例,使它包含一个尚未被覆盖的,无效,等价类。重复这一过程,直到所有的无效等价类都被覆盖。,例如:某一报表处理系统,要求用户输入处理报表的日期。假设日期限制在,1990年1月至1999年12月,,即系统只能对该段时期内的报表进行处理。如果用户输入的日期不在此范围内,则显示输入错误信息。该系统规定日期由年、月的 6 位数字字符组成,前 4 位代表年,后两位代表月。现用,等价类划分法,设计测试用例,来测试程序的“日期检查功能”。,划分等价类并编号:划分成 3 个有效等价类,7 个无效等价类,如表5-3所示。,为合理等价类设计测试用例,对于表中编号为1,5,8对应的 3 个合理等价类,用一,个测试用例覆盖。,为每一个不合理等价类至少设计一个测试用例:,测试数据 期望结果 覆盖范围,99,MAY,输入无效 2,19995 输入无效 3,1999005 输入无效 4,198912 输入无效 6,200001 输入无效 7,199900 输入无效 9,199913 输入无效 10,边界值分析,人们在长期的测试中发现,程序往往在处理边界值的时候容易出错,比如数组的下标,循环的上下界等。针对这种情况设计测试用例的方法就是,边界值,分析方法。,使用边界值分析方法设计测试用例时,首先要,确定边界情况,。通常,输入,等价类和,输出,等价类的,边界,,就是应该着重测试的程序边界情况。也就是说,应该选取,恰好等于,、,小于,和,大于边界,的值作为测试数据,而不是选取每个等价类内的典型值或任意值作为测试数据。,边界值分析也属于黑盒测试,可以看作是对等价类划分的一个补充。在设计测试用例时,往往,联合,等价类划分和边界值分析这两种方法。,在选择测试用例时,选择边界附近的值就能发现被疏忽的问题。下面给出几条基本原则:,(1)如果输入条件规定了值的范围,可以选择,正好等于边界值,的数据作为合理的测试用例,同时还要选择,刚好越过边界值,的数据作为不合理的测试用例。,如:输入值的范围是1,100,可取0,1,100,101等值作为测试数据。,(2)如果输入条件指出了输入,数据的个数,,则按,最大个数,、,最小个数,、,比最小个数少 1,及比,最大个数多1,等情况分别设计测试用例。,如:一个输入文件可包括1255个记录,则分别设计有1个记录、255个记录,以及0个记录和256个记录的输入文件的测试用例。,(3)对每个输出条件分别按照以上两个原则确定,输出值,的边界情况。,如:一个学生成绩管理系统规定,只能查询9598级大学生的各科成绩,可以设计测试用例,使得查询范围内的某一届或四届学生的学生成绩,还需设计查询94级、99级学生成绩的测试用例(不合理输出等价类)。,由于输出值的边界不与输入值的边界相对应,所以要检查输出值的边界不一定可能,要产生超出输出值之外的结果也不一定能做到,但必要时还需试一试。,(4)如果程序的需求说明给出的输入或输出域是个,有序集合,(如顺序文件、线性表和链表),则第一个元素和最后一个元素作为测试用例。,对上述报表处理系统中的报表日期输入条件,以下用边界值分析设计测试用例。,程序中判断输入日期(年月)是否有效,假设使用如下语句:,IF(ReportDate,=,MinDate,)THEN,产生指定日期报表,ELSE,显示错误信息,ENDIF,如果将程序中的“=”误写为“”,则上例的等价类划分中所有测试用例都不能发现这一,错误,采用边界值分析法的测试用例如表5-4所示。,错误推测法,在测试程序时,人们根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是,错误推测法,。,错误推测法没有确定的步骤,凭经验进行。它的基本思想是,列举出程序中所有,可能,有的错误和,容易发生错误,的特殊情况,根据它们选择测试用例。,如:输入、输出数据为零是容易发生错误的情况;,如:输入表格为空或输入表格只有一行是容易出错的情况,如,测试一个采用二分法的检索程序,考虑以下情况:(1)表中只有一个元素。,(2)表长是2的幂。,(3)表长为2的幂减1或2的幂加1,例如对于一个排序程序,列出以下几项需特别测试的情况(1)输入表为空。,(2)输入表只含一个元素。,(3)输入表中所有元素均相同。,(4)输入表中已排好序。,因此,要根据具体情况具体分析。,黑盒测试方法的选择,(1)在任何情况下都应使用,边界值,分析法,用这种方法设计的用例暴露程序错误能力强。设计用例时,应该既包括,输入数据的边界,情况又包括,输出数据的边界,情况。,(2)必要时用,等价类,划分方法,补充,一些测试用例。,(3)再用,错误推测法补充,测试用例。,(4)检查上述测试用例的逻辑覆盖程度,如未满足所要求的覆盖标准,再增加例子。,3 软件测试的步骤,单元测试,集成测试,确认测试,3.1 单元测试,单元测试又称,模块,测试,集中对软件设计的最小单位模块进行测试,主要是为了发现模块内部可能存在的各种错误和不足。,进行单元测试时,根据程序的内部结构设计测试用例,主要使用,白盒,测试法。由于各模块间相对独立,因而对多个模块的测试可以并行地进行,以提高测试效率,。,单元测试的内容,(1)模块接口,主要进行的测试项目有以下几方面:,所测模块的形式参数和调用该模块的实际输入参数在参数,数目,、,属性,和,顺序,上是否匹配;,是否修改了只做输入用的形式参数;,输出给被调用模块的参数在数目、属性和顺序上是否正确;,全程变量,的定义和用法在各个模块中是否一致。,若模块中有外部的,I/O,操作,还应该进行以下的测试项目:,文件属性是否正确;,打开文件语句和关闭语句是否正确;,格式说明书与输入输出语句是否一致;,缓冲区的大小与记录长度是否匹配;,使用文件之前是否先打开了文件;,文件,操作结束,后是否,关闭,了文件;,是否进行了输入输出错误检查并进行了相应的处理。,(2)局部数据结构,模块的局部数据结构是常见的错误来源,测试者应该仔细设计测试用例,以便发现这样一些类型的错误:,错误的,变量名,(变量名拼写错或被编译程序截短);,错误的或不一致的,数据类型,说明;,使用尚未赋值或尚未初始化的变量;,错误的,初始值,或错误的缺省值;,数据类型不相容;,上溢、下溢或地址异常。,如果有可能的话,在单元测试期间除了局部数据结构之外,还应该检查全程数据对模块的影响。,(3)重要的执行路径,选择适当的测试用例,对模块中的最有代表性、最可能发现错误的执行路径进行测试。,错误的计算主要集中在以下几个方面:,运算的,优先次序,不对或误解了运算符的优先次序;,混合,运算(运算对象的类型彼此不相容);,变量的,初始值,赋值不正确;,运算的精度不够;,表达式的符号有错误。,错误的比较和控制流主要集中在以下几个方面:,不同,数据类型,之间的比较;,逻辑,运算符,不正确或优先次序不正确;,由于,精度,问题造成的两值比较时不相等;,差“,1,”错,即循环次数多一次或少一次;,错误的或不可能的,循环终止条件,;,当遇到不能终止的循环;,错误地修改,循环变量,。,(4)出错处理,由于输入等条件的限制,程序在运行中出错往往是不可避免的。因而好的程序设计应该能预见可能出现的各种出错情况,并且设置相应的出错处理,以便在出现错误时执行相应的操作。,在单元测试时也应该对模块中的出错处理部分进行测试,进行这一部分测试时可能存在的错误主要有:,显示的错误信息与,实际错误不相符,;,在对错误进行处理之前,错误条件已经引起系统的干预;,对错误的,处理不正确,。,(5)边界条件,我们知道,软件常常在它的,边界,上失效。例如,处理,n,元数组的第一个元素或最后一个元素时,在,n,次循环中的第,n,次重复时,往往会发生错误。,因此,使用刚好小于、等于或大于最大值或最小值的数据结构、控制量和数据值的测试方案时,很可能会发现软件中的错误。,单元测试的步骤,单元测试的对象是模块。测试者必须自己动手设计这两类模块:驱动模块和存根模块。,驱动,模块:相当于所测模块的“,主程序,”。它接收测试数据,把这些数据传送给所测模块,然后输出测试结果。,存根,模块:也叫,虚拟子程序,。它的作用是模拟被测模块所调用的子模块。存根模块可以做少量的数据操作,一般情况下,不需要把实际子模块的所有功能都带进来。,集成测试,集成测试过程中要考虑的问题:,(1)数据穿过模块接口时是否会丢失;,(2)模块的功能是否会对其它模块的功能产生不利的影响;,(3)把子功能组合起来,能否达到预期的主功能要求;,(4)单个模块的误差累积起来是否会放大到不能接受的程度;,(5)全局数据结构是否有问题。,将各个模块组装成系统的方法:,非渐增式,组装方式和,渐增式,组装方式。,采用,非渐增式,组装方式:先分别对每个模块进行测试,再把所有模块按设计要求组装在一起进行测试,最终得到所要求的软件。,采用,渐增式,组装方式:把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。,这两种方法各有优缺点:,(1)采用非渐式时要对每个模块进行单元测试,需要编写的测试软件较,多,,工作,量大,;而采用渐式时,利用已测试过的模块部分作为部分测试软件,因而,工作量较小,。,(2)非渐式要求一下子把所有模块组装起来,如果发现错误则较,难判断,错误的位置;而采用渐式时,由于每次只加入一个模块,因而错误往往与刚加入的模块有关,查错则相对容易些。,(3)采用非渐式时,各模块的单元测试可以,并行地进行,,因此可以充分利用人力,加快测试进程,采用渐式时却不能如此。,自顶向下方法,采用这种组装方式时,是从主控制模块开始,沿着软件的控制层次向下移动,从而逐渐把各个模块都结合起来。,下图是一个树形结构,主控制模块是,M1,,在把主控制模块,M1,所属的那些模块都组装起来时可以采取两种方法:深度优先策略或者宽度优先策略。,采用,深度,优先的结合方法时,先把软件结构的一条主控制通路上的所有模块一个一个地结合组装起来。主控制通路的选择取决于应用的特点。对于上图来说,如果选取左通路为主控通路,那么首先结合模块,M1,M2,和,M5,,然后是,M8。,如果,M2,的某个功能需要的话,可结合,M6。,然后结合中间的和右边的控制通路。,采用,宽度,优先的结合方法时,逐层结合直接下属的所有模块,即把处于同一个控制层次上的所有模块组装起来。对于上图来说,首先结合模块,M2,M3,和,M4(,代替存根模块,S4),,接着结合下一个控制层次中的模块,M5,M6,和,M7;,如此继续进行下去,直到所有模块都被结合进来。,采用自顶向下的结合策略的好处:,在测试过程中能够较,早,地对主要的控制或关键的判断点进行检验。因为在一个功能划分合理的软件结构中,关键的判断点常常出现在较高的层次里,所以能够较早碰到。如果主要控制存在问题,及早发现这类问题并尽快想办法解决是十分重要的,这样可以大大减少后面的工作量。,如果选择的是深度优先结合方法,可以首先实现并验证软件的一个比较完整的功能,这样对增强开发人员和用户双方的信心是很有意义的。,采用自顶向下的结合策略的不足:,可能会遇到,逻辑上,的问题。,当我们为了充分地测试较高层次的功能时,可能需要较低层次上处理的信息,但是我们采用自顶向下的方法时,,存根,模块代替了低层次的模块。,若高层模块需要低层模块返回的信息不仅数量大,而且种类也很多时,存根模块有可能很难完全满足这个要求,因而,这种方法有一定的局限性。为了解决这个问题,可以采用以下解决办法:,由层次系统的底部向上组装软件。这种方法就是下面要介绍的,自底向上,结合方法。,2 自底向上测试,自底向上测试是从软件结构,最低层,的模块开始进行组装和测试。它不需要存根模块,但需要,驱动,模块。其结合过程如下:,(1)把低层模块组合成实现某个特定软件子功能的模块族;,(2)为每一个族编写一个驱动模块,作为测试的控制来协调测试用例的输入和输出;,(3)对模块族进行测试;,(4)按模块结构图依次向上扩展,用实际模块替换驱动模块,将模块族与新的模块结合,形成新的模块族,再进行测试,直到所有模块都被结合进来。,图中自底向上的结合过程:首先把模块组合成族1、族2和族3,然后设计相应的驱动模块,D1、D2,和,D3,,并对每个子功能族进行测试;族1和族2下属于模块,Ma,,去掉驱动模块,D1,和,D2,,把这两个族直接与,Ma,结合,同样地,在族3与模块,Mb,结合之前将,D3,去掉;最后,Ma,和,Mb,与,Mc,结合起来。,不同集成测试策略的比较,自顶向下结合的主要优点:不需要设计测试驱动模块,与存根模块相联系的问题可能在测试的早期发现。,主要缺点是:需要设计存根模块,并且由于为了使存根模块能够尽量模拟实际模块的功能,必然会增加设计存根模块的复杂度,从而导致增加一些附加的测试。,自底向上结合的主要,优点,:不需要设计存根模块,而设计测试驱动模块一般比建立存根模块要容易,同时比较容易设计测试用例,并且可以实现多个模块的并行测试,从而提高测试效率。,主要,缺点,是:直到最后一个模块结合进来以前,程序作为一个整体始终不存在。也就是说,对主要的控制直到最后才接触到。,一般来说,我们根据情况,结合,这两种方法来进行组装和测试:对软件结构中较上层模块使用自顶向下结合方法,对软件结构中较下层模块使用自底向上结合方法。,确认测试,确认测试的任务:进一步验证软件的有效性,即验证软件的,功能和性能,是否与用户的要求一致。,在每个有效性测试用例测试完成以后,可能有两种情况:,(1)软件的功能和性能与用户的要求一致,软件可以接受;,(2)软件的功能或性能与用户的要求有差距。,若出现后一种情况,通常与需求分析阶段的差错有关,这时要列出一张软件缺陷表,通过与用户的协商,找出问题所在并解决它。,Alpha,和,Beta,测试,如果一个软件是为许多客户开发的,在这种情况下,绝大多数软件开发商都使用被称为,Alpha,测试和,Beta,测试,的过程。,Alpha,测试,:,由,用户在开发者的场所,进行,,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题,Alpha,测试是在,受控,的环境中进行的。,Beta,测试:由软件的最终用户们在一个或多个,客户场所,进行,。开发者通常不在,Beta,测试的现场,Beta,测试是软件在开发者不能控制的环境中的,“真实”应用,。,用户记录在,Beta,测试过程中遇到的一切问题(真实的或想像的),并且定期把这些问题报告给开发者。接收到在,Beta,测试期间报告的问题之后,开发者对软件产品进行必要的修改,并准备向全体客户发布最终的软件产品。,调试,调试的目的,软件测试的目的是尽可能多地发现程序中的错误,而调试则是在进行了成功的测试之后才开始的工作。调试的目的是确定错误的,原因和位置,,并,改正错误,,因此调试也称为,纠错,。,调试是程序员自己进行的,技巧性很强,的工作,要确定发生错误的内在原因和位置不是一件容易的事,它占整个调试工作量的90%左右。与测试比较,调试技术缺乏系统的理论研究,因此介绍的调试方法多是实践中的经验积累。,调试技术,1.简单的调试方法,1)在程序中,插入打印语句,该方法的优点是显示程序的动态过程,比较容易检查源程序的有关信息。,2)运行,部分程序,设法使被测试程序只执行需要检查的程序段,以提高效率。可采用以下方法:,(1)把不需要执行的语句段前和后加上,注释符,,使这段程序不再执行。,(2)在不需要执行的语句段前加判定值为“假”的,IF,语句或者加,GOTO,语句,使该,程序不执行,。,3)借助于,调试工具,目前大多数程序设计语言都有专门的调试工具,可以利用这些工具分析程序的动态行为。,例如借助“,追踪,”功能可以追踪子程序调用、循环与分支执行路径、特定变量的变化情况等,利用“,置断点,”可以执行特定语句或改变特定变量值引起的程序中断,以便检查程序的当前状态。,还可借助调试工具,观察或输出,内存,变量,的值,大大提高调试程序的效率,缺点是也会产生大量的无关信息,也会走弯路。,2.归纳法调试,归纳法是一种,从特殊到一般,的思维过程,从对个别事例的认识当中,概括出共同特点,得出一般性规律的思考方法。,归纳法调试从测试结果发现的线索(错误迹象、征兆)入手分析它们之间的联系,导出错误原因的假设,然后再证明或否定这个假设。,3.演绎法调试,演绎法是一种从一般的推测和前提出发,运用排除和推断过程作出结论的思考方法。演绎法调试是,列出所有可能的错误,原因的假设,然后利用测试数据排除不适当的假设,最后再用测试数据验证余下的假设确实是出错的原因。,4.回溯法调试,该方法从程序产生错误的地方出发,人工沿程序的逻辑路径,返向搜索,,直到找到错误的原因为止。例如,从打印语句出错开始,通过看到的变量值,从相反的执行路径查询该变量,值从何而来。该方法是对小型程序寻找错误位置的有效方法。,软件可靠性,软件可靠性表明了一个程序按照用户的要求和设计的目标,执行其功能的,正确程度,。,一个可靠的程序应要求是,正确,的、,完整,的、,一致,的和,健壮,的。,现实中,一个程序要达到完全可靠是不实际的,要精确地度量它也不现实。在一般情形下只能通过程序的测试,去度量程序的可靠性。,软件可靠性是,指在给定的时间内,,在,规定的环境条件下系统完成所指定功能的概率,。,平均无故障时间,平均无故障时间与单位长度程序中剩余的错误数成反比(,P181,公式,7.5,),估计错误总数的方法,植入错误法,分别测试法,实验四,1,、对系统中所选,选择一种程序设计语言进行实现,编写模块开发文档。(运行的屏幕截图或代码),2,、对实现的系统的运行过程进行屏幕录制。,3,、对已实现的模块选择合适的测试方法、设计测试用例,并且进行测试。,4,、对测试结果进行分析,编写测试分析报告的结果分析部分。设计系统实现部分的测试用例,实验三,1,、使用,LoadRunner,对系统进行测试。,1,)录制测试代码,2,)对代码进行参数化,3,)创建场景(,Scenario,),4,)实施测试,5,)分析测试结果,2,、使用,PVCS,对系统进行版本控制管理。,1,)创建项目数据库,2,)添加项目用户,3,)配置项的添加,4,)检入和检出,5,)新版本产生和分支,
展开阅读全文