




已阅读5页,还剩151页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第七章软件测试,软件测试的目的和原则软件测试用例设计软件测试策略软件测试方案的实施与建立程序调试可靠性分析,1,2,7.1软件测试的目的和原则,软件测试的目的软件测试的原则软件测试的对象测试信息流测试与软件开发各阶段的关系,2,3,软件产品最大的成本是检测软件错误、修正软件错误的成本。在整个软件开发中,测试工作量一般占30%40%,甚至50%。在人命关天的软件(如飞机控制、核反应堆等)测试所花费的时间往往是其它软件工程活动时间之和的三到五倍,3,4,一、软件测试的目的,基于不同的立场,存在着两种完全不同的测试目的。从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。,4,5,Myers软件测试目的,(1)测试是程序的执行过程,目的在于发现错误;(2)一个好的测试用例在于极可能发现至今未发现的错误;(3)一个成功的测试是发现了至今未发现的错误的测试。,5,6,换言之,测试的目的是想以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。实施测试收集到的测试结果数据为可靠性分析提供了依据。测试不能表明软件中不存在错误,它只能说明软件中存在错误而没有发现。,6,7,二、软件测试的原则,1.应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。2.测试用例应由测试输入数据和对应的预期输出结果这两部分组成。3.程序员应避免检查自己的程序。4.在设计测试用例时,应包括合理的输入条件和不合理的输入条件。,7,8,5.充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。6.严格执行测试计划,排除测试的随意性。7.应当对每一个测试结果做全面检查。8.妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。,8,9,三、软件测试的对象,软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。,9,10,据美国一家公司统计,查出的软件错误中,属于需求分析和软件设计的错误约占64%,属于程序编写的错误仅占36%。程序编写的许多错误是“先天的”。,10,11,四、测试信息流,11,12,测试信息流,软件配置:软件需求规格说明、软件设计规格说明、源代码等;测试配置:测试计划、测试用例、测试程序等;测试工具:测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试数据库等等。,12,13,测试结果分析:比较实测结果与预期结果,评价错误是否发生。排错(调试):对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。修正后的文档再测试:直到通过测试为止。,13,14,7.2测试用例设计,两种常用的测试方法黑盒测试白盒测试,14,15,一、黑盒测试,这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。黑盒测试又叫做功能测试或数据驱动测试。,15,16,黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:是否有不正确或遗漏了的功能?在接口上,输入能否正确地接受?能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?,16,17,用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的。,17,18,假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:可能采用的测试数据组:232232264如果测试一组数据需要1毫秒,一年工作36524小时,完成所有测试需5亿年。,18,19,二、白盒测试,此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。,19,20,软件人员使用白盒测试方法,主要想对程序模块进行如下的检查:对程序模块的所有独立的执行路径至少测试一次;对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性,等。,20,21,对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小程序的流程图,它包括了一个执行20次的循环。包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作36524小时,要想把所有路径测试完,需3170年。,21,22,22,23,7.2.1逻辑覆盖,语句覆盖判定覆盖条件覆盖,判定条件覆盖条件组合覆盖路径覆盖。,逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。,23,24,例,24,25,L1(ace)=(A1)and(B=0)and(A=2)or(X1)=(A1)and(B=0)and(A=2)or(A1)and(B=0)and(X1)=(A=2)and(B=0)or(A1)and(B=0)and(X1),25,26,L2(abd)=not(A1)and(B=0)andnot(A=2)or(X1)=not(A1)ornot(B=0)andnot(A=2)andnot(X1)=not(A1)andnot(A=2)andnot(X1)ornot(B=0)andnot(A=2)andnot(X1),26,27,L3(abe)=not(A1)and(B=0)and(A=2)or(X1)=not(A1)ornot(B=0)and(A=2)or(X1)=not(A1)and(A=2)ornot(A1)and(X1)ornot(B=0)and(A=2)ornot(B=0)and(X1),27,28,L4(acd)=(A1)and(B=0)andnot(A=2)or(X1)=(A1)and(B=0)andnot(A=2)andnot(X1),28,29,一、语句覆盖,语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。在图例中,正好所有的可执行语句都在路径L1上,所以选择路径L1设计测试用例,就可以覆盖所有的可执行语句。,29,30,测试用例的设计格式如下【输入的(A,B,X),预期输出的(A,B,X)】为图例设计满足语句覆盖的测试用例是:【(2,0,4),(2,0,3)】覆盖ace【L1】,=(A1)and(B=0)and(A=2)or(X1),30,31,语句覆盖是最弱的逻辑覆盖(如:AND写成OR,X1写成X1)and(B=0)and(A=2)or(X1),=not(A1)and(B=0)andnot(A=2)or(X1),33,34,如果选择路径L3和L4,还可得另一组可用的测试用例:【(2,1,1),(2,1,2)】覆盖abe【L3】【(3,0,3),(3,1,1)】覆盖acd【L4】,=(A1)and(B=0)and(A=2)or(X1),=(A1)and(B=0)andnot(A=2)or(X1),34,35,三条件覆盖,条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。在图例中,我们事先可对所有条件的取值加以标记。例如,对于第一个判断:条件A1取真为,取假为条件B0取真为,取假为,35,36,对于第二个判断:条件A2取真为,取假为条件X1取真为,取假为测试用例覆盖分支条件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,0,1),(1,0,1)】L2(b,d)【(2,1,1),(2,1,2)】L3(b,e)或,36,37,测试用例覆盖分支条件取值【(1,0,3),(1,0,4)】L3(b,e)【(2,1,1),(2,1,2)】L3(b,e),=(A1)and(B=0)and(A=2)or(X1),37,38,测试用例通过满足的覆盖ABX路径条件分支103abeT1,T2,T3,T4b,e211abeT1,T2,T3,T4b,e两个测试用例覆盖了四个条件八种可能取值。未覆盖c、d分支,不满足判定覆盖的要求.条件覆盖不一定包含判定覆盖判定覆盖也不一定包含条件覆盖,(A1)AND(B=0),(A=2)OR(X1),X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,39,四、判定条件覆盖判定条件覆盖就是设计足够的测试用例,使得判断中所有可能取值至少执行一次,每个判断中的每个条件的可能取值至少执行一次。,39,40,测试用例覆盖分支条件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,1,1),(1,1,1)】L2(b,d),40,=(A1)and(B=0)and(A=2)or(X1),=not(A1)and(B=0)andnot(A=2)or(X1),41,and,or,A1,T,B=0,T,X=X/A,T,F,F,A=2,T,F,X1,F,X=X+1,41,42,五、条件组合覆盖,条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。记A1,B0作A1,B0作A1,B0作A1,B0作,42,43,A2,X1作A2,X1作A2,X1作A2,X1作测试用例覆盖条件覆盖组合【(2,0,4),(2,0,3)】(L1),【(2,1,1),(2,1,2)】(L3),【(1,0,3),(1,0,4)】(L3),【(1,1,1),(1,1,1)】(L2),43,44,六路径测试,路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。测试用例通过路径覆盖条件【(2,0,4),(2,0,3)】ace(L1)【(1,1,1),(1,1,1)】abd(L2)【(1,1,2),(1,1,3)】abe(L3)【(3,0,3),(3,0,1)】acd(L4),44,45,7.2.2基本路径测试,基本路径测试方法把覆盖的路径数压缩到一定限度内,程序中的循环体最多只执行一次。它是在程序控制流图的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,设计测试用例的方法。设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。,45,46,1.程序的控制流图,符号为控制流图的一个结点,表示一个或多个无分支的PDL语句或源程序语句。箭头为边,表示控制流的方向。,46,47,在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。如果判断中的条件表达式是由一个或多个逻辑运算符(OR,AND,.)连接的复合条件表达式,则需改为一系列只有单个条件的嵌套的判断。,47,48,48,49,计算程序图G的环路复杂性V(G).McCabe定义程序图的环路复杂性为此平面图中区域的个数。区域个数为边和结点圈定的封闭区域数加上图外未被包围区域。例如图的V(G)=4也可按另一种方法计算,即V(G)=判定结点数+1,49,50,2.程序环路复杂性,程序的环路复杂性给出了程序基本路径集中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。从控制流图来看,一条独立路径是至少包含有一条在其它独立路径中从未有过的边的路径。,50,51,例如,在图示的控制流图中,一组独立的路径是path1:1-11path2:1-2-3-4-5-10-1-11path3:1-2-3-6-8-9-10-1-11path4:1-2-3-6-7-9-10-1-11路径path1,path2,path3,path4组成了控制流图的一个基本路径集。,51,52,3.导出测试用例,导出测试用例:确保基本路径集中的每一条路径的执行。,52,53,每个测试用例执行之后,与预期结果进行比较。如果所有测试用例都执行完毕,则可以确信程序中所有的可执行语句至少被执行了一次。必须注意,一些独立的路径(如例中的路径1),往往不是完全孤立的,有时它是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。,53,54,7.2.3黑盒测试的测试用例设计,等价类划分边界值分析错误推测法,54,55,一、等价类划分,等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例。,55,56,使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。划分等价类等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。,56,57,等价类的划分有两种不同的情况:有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。,57,划分等价类的规则,1.如果输入条件规定了取值范围,可定义一个有效等价类和两个无效等价类。例:输入值是学生成绩,范围是0100有效等价类:0成绩100无效等价类:成绩100,58,划分等价类的规则(续),(2)如果规定了输入数据的个数,则类似地可以划分出一个有效等价类和两个无效等价类。例:一个学生每学期只能选修13门课有效等价类:选修13门无效等价类:不选或选修超过3门,59,划分等价类的规则(续),(3)如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)。例:输入条件说明学历可为:专科、本科、硕士、博士四种之一有效等价类:专科、本科、硕士、博士无效等价类:其它任何学历,60,划分等价类的规则(续),(4)如果规定了输入数据必须遵循的规则,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。例:校内电话号码拨外线为9开头有效等价类:9外线号码无效等价类:非9开头外线号码9非外线号码,,61,以上列出的启发式规则只是测试时可能遇到的情况中的很小一部分,实际情况千变万化,根本无法一一列出。为了正确划分等价类,一是要注意积累经验,二是要正确分析被测程序的功能。以上启发式规则虽然都是针对输入数据说的,但是其中绝大部分也同样适用于输出数据。,62,等价类划分法测试用例设计,(1)对每个输入或外部条件进行等价类划分,形成等价类表,为每一等价类规定一个唯一的编号;(2)设计一测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等价类均被测试用例所覆盖;(3)设计一新测试用例,使其只覆盖一个无效等价类,重复这一步骤直到所有无效等价类均被覆盖;,63,例1:报表日期,设某公司要打印20012005年的报表,其中报表日期为6位数字组成,其中,前4位为年份,后两位为月份。,64,第一步:划分等价类,65,第二步:为有效等价类设计测试用例,对表中编号为的3个有效等价类用一个测试用例覆盖:,66,第三步:为每一个无效等价类至少设计一个测试用例,本例的10个等价类至少需要8个测试用例,不能出现相同的测试用例,67,例2:准考证号码,对招干考试系统“输入学生成绩”子模块设计测试用例招干考试分三个专业,准考证号第一位为专业代号,如:1-行政专业,2-法律专业,3-财经专业.行政专业准考证号码为:110001111215法律专业准考证号码为:210001212006财经专业准考证号码为:310001314015,68,准考证号码的等价类划分有效等价类:(1)110001111215(2)210001212006(3)310001314015无效等价类:(4)-110000(5)111216210000(6)212007310000(7)314016+,69,例3:某市的电话号码由3部分组成,这3个部分的名称与内容分别是:长途区号:空白或3位数字;区码:非0开头的4位数字;流水号:4位数字。假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的号码,请为被测程序设计测试方案。,解(1)划分等价类,70,例:某市的电话号码由3部分组成,这3个部分的名称与内容分别是:长途区号:空白或3位数字;区码:非0开头的4位数字;流水号:4位数字。假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的号码,请为被测程序设计测试方案。,解(2)确定有效等价类测试用例表中4个有效等价类,可以公用以下两个测试用例:,71,例:某市的电话号码由3部分组成,这3个部分的名称与内容分别是:长途区号:空白或3位数字;区码:非0开头的4位数字;流水号:4位数字。假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的号码,请为被测程序设计测试方案。,解(3)表中10个无效等价类,应选择10个测试用例:,72,73,例4:编写一个程序,输入三个0-200之间的任意整数a,b,c,判断能否成为三角形,如果能是什么三角形。(等价类划分)输入条件:输出:1、不能组成三角形2、等边三角形3、等腰三角形4、直角三角形5、一般三角形6、某些边不满足限制,73,74,74,边界值分析,经验表明,处理边界情况时程序最容易发生错误。例如,许多程序错误出现在下标、纯量、数据结构和循环等等的边界附近。因此,设计使程序运行在边界情况附近的测试方案,暴露出程序错误的可能性更大一些。,75,边界值分析法与等价类划分法区别(1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。(2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况,如果在悬崖峭壁边可以自信地安全行走,平地就不在话下。如果软件在能力达到极限时能够运行,那么在正常情况下就不会出什么问题。,软件边界与悬崖很类似,76,使用边界值分析方法设计测试方案首先应该确定边界情况,这需要经验和创造性,通常输入等价类和输出等价类的边界,就是应该着重测试的程序边界情况。按照边界值分析法,应该选取刚好等于、稍小于和稍大于等价类边界值的数据作为测试数据,而不是选取每个等价类内的典型值或任意值作为测试数据。通常设计测试方案时总是联合使用等价划分和边界值分析两种技术。,77,常见的边界值,1)对16-bit的整数而言32767和-32768是边界2)屏幕上光标在最左上、最右下位置3)报表的第一行和最后一行4)数组元素的第一个和最后一个5)循环的第0次、第1次和倒数第2次、最后一次,78,边界值分析方法选择测试用例原则,1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。例如,如果程序的规格说明中规定:重量在10公斤至50公斤范围内的邮件,其邮费计算公式为。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等。,79,边界值分析方法选择测试用例原则,2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。比如,一个输入文件应包括1255个记录,则测试用例可取1和255,还应取0及256等。,80,边界值分析方法选择测试用例原则,3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。例如,某程序的规格说明要求计算出每月保险金扣除额为0至1167.25元,其测试用例可取0.01及1167.24、还可取一0.01及1167.26等。再如一程序属于情报检索系统,要求每次最少显示1条、最多显示4条情报摘要,这时我们应考虑的测试用例包括1和4,还应包括0和5等。,81,边界值分析方法选择测试用例原则,4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。6)分析规格说明,找出其它可能的边界条件。,82,边界条件类型,如果软件测试问题包含确定的边界,那么数据类型可能是:数值字符位置数量速度地址尺寸,还要考虑数据类型的特征:第一个/最后一个最小值/最大值开始/完成空/满最慢/最快相邻/最远超过/在内,83,84,测试用例模版,84,85,三、错误推测法,人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。这就是错误推测法。错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。,85,错误推测法(errorguessing)根据经验、直觉和预感来进行测试例如:一定要考虑建立处理下列等价类:缺省值空白空值零值无输入条件在已经找到软件缺陷的地方再找找,86,87,黑盒测试与白盒测试优缺点比较,黑盒测试白盒测试,优点,缺点,性质,适用于各阶段测试从产品功能角度测试容易入手生成测试数据,可构成测试数据使特定程序部分得到测试有一定的充分性度量手段可获较多工具支持,某些代码得不到测试如果规格说明有误,则无法发现不易进行充分性测试,不易生成测试数据(通常)无法对未实现规格说明的部分进行测试工作量大,通常只用于单元测试,有应用局限,是一种确认技术,回答“我们在构造一个正确的系统吗?”,是一种验证技术,回答“我们在正确地构造一个系统吗?”,87,88,测试用例模版,88,7.3软件测试的策略,上面介绍了构造测试实例的几种主要方法,实践表明,这些实例构造方法在不同类型的程序测试以及某些特定的应用领域中效果很好,当如果将它们单独使用于综合性的软件测试中,却没有一种方法能够产生完善的、符合测试目标的测试实例。因此,在实际的测试工作中总是把它们组合起来使用,并且在不同的测试阶段采用不同的测试策略。,89,测试过程按4个步骤进行,即单元测试、组装测试、确认测试和系统测试。开始是单元测试,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。,组装测试把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。系统测试把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。,7.3软件测试的策略(续),在单元测试阶段,在构造测试实例时,直接考虑源程序结构是可能的,可用白盒技术和黑盒技术相结合。具体的做法可采用下面两种形式:一般情况下,单元测试应该以白盒测试为主,黑盒测试为辅。,93,7.3软件测试的策略(续),集成测试及以后的测试主要采用黑盒技术。其实例构造策略包括:用等价分类法和(或)边值分析法先构造一组基本测试实例。再用错误猜测法根据系统具体情况补充新的测试实例。,94,7.4测试方案的建立及实施,制定一个完善的测试方案是高质量完成软件测试工作的重要保证。测试方案是整个测试工作的指导性文档,包括测试目标、测试内容、测试实例的集合、测试步骤以及测试过程的说明性信息。测试方案主要内容包括:单元测试集成测试确认测试系统测试验收测试,95,软件测试的步骤图,96,单元测试又称模块测试,是针对软件设计的最小单位程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试所要发现的往往是编码和详细设计阶段产生的错误。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。单元测试主要分为人工静态检查和动态执行跟踪两个步骤进行。,7.4.1单元测试(UnitTesting),97,人工静态检查(走查),成立一个34人的代码审查小组,包括经验丰富的测试人员、被测程序的作者和其他程序员。被测程序的作者讲述程序的逻辑结构,大家发现问题可随时提问,以判断是否存在错误。,主要是保证算法代码实现的正确性和高效性,代码编写清晰、规范。经验表明,使用人工静态检查法能够有效的发现30%-70%的逻辑设计和编码错误。,动态执行跟踪,设计测试用例,执行待测程序,比较实际结果与预期结果,发现程序中的错误。动态执行测试通常分为黑盒测试与白盒测试。对于单元测试来说主要应该采用白盒测试法对每个模块的内部作跟踪检查测试。,在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。,1.单元测试的内容,101,单元测试的内容图示,102,(1)模块接口测试,在单元测试的开始,应对通过被测模块的数据流进行测试。测试项目包括:调用本模块的输入参数是否正确;本模块调用子模块时输入给子模块的参数是否正确;全局量的定义在各模块中是否一致;在做内外存交换时要考虑:文件属性是否正确;OPEN与CLOSE语句是否正确;缓冲区容量与记录长度是否匹配;在进行读写操作之前是否打开了文件;在结束文件处理时是否关闭了文件;正文书写输入错误,IO错误是否检查并做了处理。,103,(2)局部数据结构测试,对于一个模块来说,局部数据结构是常见的错误来源局部数据结构测试发现下列类型的错误:不正确或不一致的数据类型说明使用尚未赋值或尚未初始化的变量错误的初始值或错误的缺省值变量名拼写错或书写错,104,(3)路径测试,选择适当的测试用例,对模块中重要的执行路径进行测试。选择测试执行路径,是单元测试期间的基本任务。应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。测试执行路径可以发现如下种类的错误:运算符优先级误解或次序不正确;混合运算中运算对象的类型彼此不相容;逻辑运算不正确或优先次序不正确;循环中止条件不正确。,105,(4)错误处理测试,有意识地进行不合理输入,而使程序出错,从而检查程序的错误处理能力,并检查是否出现如下错误:出错的描述是否难以理解。出错的描述是否能够对错误定位显示的错误与实际的错误是否相符对错误条件的处理正确与否在对错误进行处理之前,错误条件是否已经引起系统的干预等,106,(5)边界测试,注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和一般情况下影响模块运行时间的因素。,107,模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模块。驱动模块(driver)桩模块(stub)支持模块,2.单元测试过程,108,驱动模块的作用是模拟被测模块的上层模块,它调用被测模块,并将准备好的测试数据以调用参数的形式传送给被测模块,同时接收运行结果。桩模块是在测试中模拟被测模块的下属模块,它可以显示信息、传递参数信息、打印调用入口信息并将运行结果返回给被测模块。,2.单元测试过程(续),109,集成测试(组装测试、联合测试),是把经过单元测试的模块按软件结构组合在一起作为一个系统或子系统来综合测试。模块相互间的协调和通信是这个测试过程中的主要测试内容。该步骤主要发现结构设计阶段产生的错误。,7.4.2集成测试(IntegratedTesting),110,经验表明,即使所有的模块都通过了测试,但组装中仍不免出现新的问题,这些问题包括:在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失一个模块的功能是否会对另一个模块的功能产生不利的影响;全局数据结构是否有问题;单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。归结起来:接口问题;存取全局量的问题;数据结构不一致问题;模块调用顺序问题。解决这些问题就是集成测试的目的。,集成测试的重要性,111,112,通常,把模块组装成为系统的方式有两种一次性组装方式增殖式组装方式,113,1.一次性组装方式(bigbang),它是一种非增殖式组装方式。也叫做整体拼装。使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统。,114,一次全部集成的方式,这种方式属于非递增的模块组合方式。对于一部分规模不大、模块接口不算复杂的软件系统适合采用这种集成测试方法。这种方法无须驱动模块和桩模块的支持,只需要认真分析确认系统功能及性能,并运用黑盒测试技术构造一组测试实例直接对整个系统进行集成测试。,115,116,2.增殖式组装方式,这种组装方式又称渐增式组装首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统在组装的过程中边连接边测试,以发现连接过程中产生的问题通过增殖逐步组装成为要求的软件系统。,117,(1)自顶向下的增殖方式,这种组装方式将模块按系统程序结构,沿控制层次自顶向下进行组装。自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。,118,自顶向下集成测试的优缺点,优点:可以较早体现程序的轮廓,给用户演示;上层模块往往是关键性模块,有更充分的测试机会;不用设计驱动模块。缺点:(1)桩模块较多,设计测试用例较难,不能反映真实情况.,119,120,(2)自底向上的增殖方式,这种组装的方式是从程序模块结构的最底层的模块开始组装和测试。因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到。,121,自顶向下增殖的方式和自底向上增殖的方式各有优缺点。一般来讲,一种方式的优点是另一种方式的缺点。,自底向上集合图示,把底部模块分为几个特定的功能族。为每族设计一驱动模块。如此重复向上。如图:,122,自底向上集成测试的优缺点,优点:大大减少桩模块的设计,减少工作量。缺点:只有把最后一个模块组合起来之后,才能作为一个整体进行集成测试。自顶向下集成的方式和自底向上集成的方式各有优缺点,一般来讲,一种方式的优点是另一种方式的缺点。,123,124,(3)混合增殖式测试,衍变的自顶向下的增殖测试首先对输入输出模块和引入新算法模块进行测试;再自底向上组装成为功能相当完整且相对独立的子系统;然后由主模块开始自顶向下进行增殖测试。,125,自底向上自顶向下的增殖测试首先对含读操作的子系统自底向上直至根结点模块进行组装和测试;然后对含写操作的子系统做自顶向下的组装与测试。,根据系统的实际确定策略,具体采用哪一种集成测试方法主要取决于软件系统的特点以及任务完成的进度。一般来说,软件结构中较上层部分使用自顶向下的模块结合方法实现测试较好,而对于下层的模块使用自底向上底模块结合方法更合适。,126,7.4.3确认测试,确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。,127,1.进行有效性测试(黑盒测试),有效性测试是在模拟的环境(可能就是开发的环境)下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。首先制定测试计划,规定要做测试的种类。还需要制定一组测试步骤,描述具体的测试用例。通过实施预定的测试计划和测试步骤,确定软件的特性是否与需求相符;所有的文档都是正确且便于使用;同时,对其它软件需求,例如可移植性、兼容性、出错自动恢复、可维护性等,也都要进行测试,128,在全部软件测试的测试用例运行完后,所有的测试结果可以分为两类:测试结果与预期的结果相符。这说明软件的这部分功能或性能特征与需求规格说明书相符合,从而这部分程序被接受。测试结果与预期的结果不符。这说明软件的这部分功能或性能特征与需求规格说明不一致,因此要为它提交一份问题报告。,129,2.软件配置复查,软件配置复查的目的是保证软件配置的所有成分都齐全;各方面的质量都符合要求;具有维护阶段所必需的细节;而且已经编排好分类的目录。应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查这些文档资料的完整性和正确性。,130,7.4.4系统测试,系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。,131,系统测试的内容,恢复测试:系统发生故障时软件能恢复。用各种办法强迫系统失败而进行考察。安全测试:测试对非法入侵的防范能力。口令、密码、用户权限等。强度测试:测试系统的负荷。存储容量、终端个数、网络结点数、实时系统中的上限数据。如空中管理系统的最大飞机量等。性能测试:测试在系统环境下的运行性能。如响应速度、计算精度等。可靠性测试:利用一套数学模型来估算系统的可靠性。配置测试:系统在不同环境下运行情况的测试。(5)安装测试:对系统的安装过程进行测试。,132,7.4.5验收测试,验收测试:亦称用户测试,是将软件提供用户试运行。让用户验证是否满足其要求。发现只有最终用户才能发现的错误以及了解用户对新产品接受程度。验收测试的方式有这么三种测试测试验收鉴定会:用户和同行专家参与。其中,文档验收是系统交付时必须完成的一项任务,因为文档是今后软件维护的重要基础。,133,测试和测试,测试是由用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。测试是多个用户相互独立地使用软件,在各自环境下进行自主测试。有些软件产品采用这种测试,提供测试版本,收集反馈。只有当测试达到一定的可靠程度时,才能开始测试。它处在整个测试的最后阶段。同时,产品的所有手册文本也应该在此阶段完全定稿。,134,7.5.1软件排错的概念,排错的过程亦称为调试。软件调试是在进行了成功的测试之后才开始的工作。它与软件测试不同,调试的任务是进一步诊断和改正程序中潜在的错误。调试是软件开发中最难的技术之一,一般与测试同步进行。调试主要包括如下三个内容:1、找出错误的性质和位置;2、纠正错误;3、进行回归测试。,135,调试是一个具有很强技巧性的工作,软件运行失效或出现问题,往往只是潜在错误的外部表现,而外部表现与内在原因之间常常没有明显的联系。如果要找出真正的原因,排除潜在的错误,不是一件易事。可以说,调试是通过现象,找出原因的一个思维分析的过程。,136,从技术角度来看,查找错误的难度在于:,现象与原因所处的位置可能相距甚远。当其它错误得到纠正时,这一错误所表现出的现象可能会暂时消失,但并未实际排除。现象实际上是由一些非错误原因(例如,舍入不精确)引起的。现象可能是由于一些不容易发现的人为错误引起的。错误是由于时序问题引起的,与处理过程无关。现象是由于难于精确再现的输入状态(例如,实时应用中输入顺序不确定)引起。现象可能是周期出现的。在软、硬件结合的嵌入式系统中常常遇到。,137,7.5.2排错方法,1.直接排错:其排错效果取决于使用人员的经验和技术水平。(1)设置打印语句(2)单步跟踪(早期),用工具软件较好。2.回溯探究:发现某点已经有错,先分析错误征兆,确定最先发现“症状”的位置。然后,人工沿程序的控制流程,回溯程序执行过程,直到找到错误根源或找出错误位置。此法对小程序很实用。,138,7.5.2排错方法(续),3.逻辑排错:使用逻辑学中的归纳与演绎的思维方法,来排除错误。归纳:从个别推断一般的方法:,139,7.5.2排错方法,演绎:从一般原理或前提出发,运用排除和思维推理过程逐步导出结论。,140,7.5.2排错方法(续),4.智能化辅助排错工具(Debug程序),141,7.5.3排错的几条指导原则,软件排错的工作质量更多的影响不仅来自于技术方面,而且来自于心理方面。以下几条原则是有指导意义的:认真分析错误的相关信息,勤于思考问题的前因后果。避开死胡同。排错中不要走极端,一旦发现排错陷入可困境应及时退回,不要一意孤行。良好的心态是排错工作成功的保证。不要迷信排错工具。只把调试工具当做辅助手段来使用。利用调试工具,可以帮助思考,但不能代替思考。,142,7.5.3排错的几条指导原则,错误的出现也满足局部化原则,即错误的群集现象。在出现错误的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 琵琶行集体备课课件
- 琵琶行并序课件
- 服装扶贫工程方案范文(3篇)
- 扶贫希望工程方案(3篇)
- 洞库工程临时伪装方案(3篇)
- 电梯工程的安装方案(3篇)
- 农业电商新业态:2025年乡村特色农产品直播基地风险管理报告
- 广西灵山县大步江水闸除险加固工程环评报告
- 玲玲的画课件
- 风机更换工程方案(3篇)
- 2024至2030年中国钾长石土壤调理剂行业市场深度分析及投资前景展望报告
- 2024事业单位工勤技能考试题库(含答案)
- DL∕T 1935-2018 架空导线载流量试验方法
- 异地就医备案的个人承诺书
- 小学数学解题研究(小学教育专业)全套教学课件
- 个体诊所备案信息表
- 招标代理服务服务方案
- 小提琴培训行业市场前瞻与未来投资战略分析报告
- 网络舆情应对及处置
- (带目录)员工劳动合同书版Word模板下载
- 最高人民法院民法典婚姻家庭编司法解释
评论
0/150
提交评论