收藏 分销(赏)

第七讲软件测试.ppt

上传人:a199****6536 文档编号:13296982 上传时间:2026-02-24 格式:PPT 页数:98 大小:720.54KB 下载积分:8 金币
下载 相关 举报
第七讲软件测试.ppt_第1页
第1页 / 共98页
第七讲软件测试.ppt_第2页
第2页 / 共98页


点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,第七部分 软件测试,软件测试的定义,软件测试基础,软件测试用例设计,软件测试策略,软件测试是在软件投入运行前,对软件需求分析,设计规格说明和编码的最终复审,是软件质量保证的关键步骤。,定义:,软件测试是为了发现错误而执行程序的过程。,或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程。,软件测试的定义,软件测试的基础,软件测试的目的,软件测试的原则,测试与软件开发各阶段的关系,软件测试的目的,基于不同的立场,存在着两种完全不同的测试目的。,从,用户的角度,出发,普遍希望通过软件测试,暴露软件中隐藏的错误和缺陷,,以考虑是否可接受该产品。,从,软件开发者的角度,出发,则希望测试成为,表明软件产品中不存在错误,的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。,Myers,软件测试目的,(1)测试是,程序的执行过程,,目的在于,发现错误,;,(2)一个好的测试用例在于,能发现至今未发现的错误,;,(3)一个成功的测试是,发现了至今未发现的错误的测试,。,5.,充分注意测试中的群集现象。,经验表明,测试后,程序中残存的错误数目与该程序中已发现的错误数目成正比,。,6.,严格执行测试计划,排除测试的随意性,。,7.应当对每一个测试结果做全面检查。,8.妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。,测试与软件开发各阶段的关系,软件开发过程是一个自顶向下,逐步细化的过程,软件计划阶段定义软件作用域,软件需求分析建立软件信息域、功能和性能需求、约束等,软件设计把设计用某种程序设计语言转换成程序代码,测试过程是依相反顺序安排的自底向上,逐步集成的过程。,软件测试用例设计,两种常用的测试方法,黑盒测试,白盒测试,黑盒测试,这种方法是把,测试对象,看做,一个黑盒子,,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。,黑盒测试又叫做,功能测试,或,数据驱动测试,。,黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:,是否有不正确或遗漏了的功能,?,在接口上,输入能否正确地接受,?,能否输出正确的结果,?,是否有数据结构错误或外部信息(例如数据文件)访问错误?,性能上是否能够满足要求,?,是否有初始化或终止性错误,?,用黑盒测试发现程序中的错误,必须在,所有可能的输入条件和输出条件,中确定测试数据,来检查程序是否都能产生正确的输出。,但这是,不可能,的。,假设一个,程序,P,有,输入量,X,和,Y,及,输出量,Z,。,在字长为32位的计算机上运行。若,X,、,Y,取整数,按黑盒方法进行穷举测试:,可能采用的,测试数据组:,2,32,2,32,2,64,如果测试一,组数据需要1毫秒,一年工作,365 24,小时,完成所有测试需5亿年。,白盒测试,此方法,把测试对象看做一个透明的盒子,,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。,软件人员使用白盒测试方法,主要想对程序模块进行如下的检查:,对程序模块的所有独立的执行路径至少测试一次;,对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;,在循环的边界和运行界限内执行循环体;,测试内部数据结构的有效性等。,对一个具有,多重选择和循环嵌套,的程序,,不同的路径数目可能是天文数字,。给出一个小程序的流程图,它包括了一个执行,20,次的循环。,包含的不同执行路径数达,5,20,条,对每一条路径进行测试需要1毫秒,假定一年工作,365 24,小时,要想把所有路径测试完,需3170年。,逻辑覆盖,语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,条件组合覆盖,路径覆盖。,逻辑覆盖是以,程序内部的逻辑结构为基础,的设计测试用例的技术。它属白盒测试。,白盒测试的测试用例设计,举例:所有路径为:,L1(a-c-e),L2(a-b-d),L3(a-b-e),L4(a-c-d),依据以上推导出来的结果就可以设计满足要求的测试用例。,语句覆盖,语句覆盖就是设计若干个测试用例,运行被测程序,使得,每一可执行语句至少执行一次,。,在图例中,正好所有的可执行语句都在,路径,L1,上,所以选择,路径,L1,设计测试用例,就可以覆盖所有的可执行语句。,测试用例的设计格式如下【输入的(,A,B,X,),,输出的(,A,B,X,)】,为图例设计满足,语句覆盖,的测试用例是:【(2,0,4),(2,0,3)】,覆盖,ace【L1】,判定覆盖,判定覆盖就是设计若干个测试用例,运行被测程序,使得,程序中每个判断的取真分支和取假分支至少经历一次,。,判定覆盖又称为,分支覆盖,。,对于图例,如果选择,路径,L1,和,L2,,,就可得满足要求的测试用例:,【(2,0,4),(2,0,3)】覆盖,ace【L1】【(1,1,1),(1,1,1)】,覆盖,abd【L2】,如果选择路径,L3,和,L4,,还可得另一组可用的测试用例:【(2,1,1),(2,1,2)】覆盖,abe【L3】【(3,0,3),(3,1,1)】,覆盖,acd【L4】,条件覆盖,条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中,每个判断的每个条件的可能取值至少执行一次,。,在图例中,我们事先可对所有条件的取值加以标记。例如,,对于第一个判断:,条件,A1,取真为 ,取假为 条件,B0,取真为 ,取假为,对于第二个判断:,条件,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),或,测 试 用 例,覆盖分支,条件取值,【(1,0,3),(1,0,4)】,L3(b,e),【(2,1,1),(2,1,2)】,L3(b,e),判定条件覆盖,判定条件覆盖就是设计足够的测试用例,使得,判断中每个条件的所有可能取值至少执行一次,,同时,每个判断中的每个条件的可能取值至少执行一次,。,测 试 用例,覆盖分支,条件取值,【(2,0,4),(2,0,3)】,L1(c,e),【(1,1,1),(1,1,1)】,L2(b,d),由多个基本判断组成的流程图,条件组合覆盖,条件组合覆盖就是设计足够的测试用例,运行被测程序,使得,每个判断的所有可能的条件取值组合至少执行一次,。,记,A1,B0,作 ,A1,B0,作 ,A1,B0,作,A1,B0,作,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),路径覆盖,路径测试就是设计足够的测试用例,,覆盖程序中所有可能的路径,。,测 试 用 例,通过路径,覆盖条件,【(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),黑盒测试的测试用例设计,等价类划分,边界值分析,错误推测法,因果图,等价类划分,等价类划分是一种典型的黑盒测试方法,使用这一方法时,,完全不考虑程序的内部结构,,,只依据程序的规格说明来设计测试用例,。,等价类划分方法,把所有可能的输入数据,,即程序的输入域,划分成若干部分,,然后,从每一部分中选取少数有代表性的数据做为测试用例,。,使用这一方法设计测试用例要经历,划分等价类,(列出等价类表)和,选取测试用例,两步。,划分等价类,等价类是指某个输入域的子集合。在该子集合中,,各个输入数据对于揭露程序中的错误都是等效的,。测试某等价类的代表值就等价于对这一类其它值的测试。,等价类的划分有两种不同的情况:,有效等价类,:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。,无效等价类,:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。,在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。,划分等价类的原则。(1),如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类。,例如,在程序的规格说明中,对输入条件有一句话:,“,项数可以从1到999,”,则有效等价类是“1项数999”,两个无效等价类是“项数1”或“项,数999”。在数轴上表示成:,(2),如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类,。,例如,在,Pascal,语言中对变量标识符规定为“以字母打头的串”。那么所有以字母打头的构成有效等价类,而不在此集合内(不以字母打头)的归于无效等价类。,(3),如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。,(4)如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理。这时可为 每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。,例如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。因此可以确定4个有效等价类为教授、副教授、讲师和助教,一个无效等价类,它是所有不符合以上身分的人员的输入值的集合。(5),如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。,例如,,Pascal,语言规定“一个语句必须以分号;结束”。这时,可以确定一个有效等价类“以;结束”,若干个无效等价类“以:结束”、“以,结束”、“以 结束”、“以,LF,结束”等。,确立测试用例在确立了等价类之后,建立等价类表,列出所有划分出的等价类。,再从划分出的等价类中按以下原则选择测试用例:(,1)为每一个等价类规定一个唯一编号;(2)设计一个新的测试用例,使其,尽可能多地覆盖尚未被覆盖的有效等价类,,重复这一步,直到所有的有效等价类都被覆盖为止;(3)设计一个新的测试用例,使其,仅覆盖一个尚未被覆盖的无效等价类,,重复这一步,直到所有的无效等价类都被覆盖为止,。,用等价类划分法设计测试用例的实例在某一,PASCAL,语言版本中规定:“,标识符是由字母开头,,,后跟字母或数字的任意组合构成,。,有效字符数为8个,,,最大字符数为80个,。”,并且规定:“,标识符必须先说明,,,再使用,。”“,在同一说明语句中,,,标识符至少必须有一个,。”,用等价类划分的方法,建立输入等价类表:,下面选取了9个测试用例,它们覆盖了所有的等价类。,VAR x,T1234567:REAL;,BEGIN x:=3.414;,T1234567:=2.732;,.,(1),(2),(4),(8),(9),(12),(14),VAR :REAL;,(3),VAR x,:REAL;,(5),VAR T12345678:REAL;,(6),VAR T12345.:REAL;,(7),多于80个字符,VAR T$:CHAR;,(10),VAR GOTO:INTEGER;,(11),VAR 2T:REAL;,(13),VAR PAR:REAL;,(15),BEGIN .PAP:=SIN(3.14*0.8)/6;,边界值分析,边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。,人们从长期的测试工作经验得知,,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部,。因此针对各种边界情况设计测试用例,,可以查出更多的错误,。,比如,在做三角形计算时,要输入三角形的三个边长:,A、B,和,C,。,我们应注意到这三个数值应当满足,A0、B0、C0、,ABC、ACB、BCA,,才能构成三角形。但如果把六个不等式中的任何一个大于号“”错写成大于等于号“”,那就不能构成三角形。问题恰出现在容易被疏忽的边界附近。,这里所说的边界是指,相当于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。,使用边界值分析方法设计测试用例,首先应确定边界情况。,应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据,,而不是选取等价类中的典型值或任意值做为测试数据。,错误推测法,人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。这就是错误推测法。,错误推测法的基本想法是:,列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例,。,因果图,因果图的适用范围如果在测试时必须考虑,输入条件的各种组合,,可使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图。因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。,用因果图生成测试用例的基本步骤(1)分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。(2)分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系?根据这些关系,画出因果图。,(3)由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。(4)把因果图转换成判定表。(5)把判定表的每一列拿出来作为依据,设计测试用例。,在因果图中出现的基本符号通常在因果图中用,Ci,表示原因,用,Ei,表示结果,各结点表示状态,可取值“0”或“1”。“0”表示某状态不出现,“1”表示某状态出现。,主要的原因和结果之间的关系有:,表示约束条件的符号为了表示原因与原因之间,结果与结果之间可能存在的约束条件,在因果图中可以附加一些表示约束条件的符号。,例如,有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:,若,投入,5角钱或1元钱的硬币,,,押下,橙汁,或,啤酒,的按钮,则相应的饮料就送出来。若售货机,没有零钱找,,则一个显示零钱找完的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若,有零钱找,,则显示零钱找完的红灯灭,在送出饮料的同时退还5角硬币。”,(1)分析这一段说明,列出原因和结果原因:1.售货机有零钱找,2.投入1元硬币,3.投入5角硬币,4.押下橙汁按钮,5.押下啤酒按钮,建立中间结点,表示处理中间状态11.投入1元硬币且押下饮料按钮12.押下橙汁或啤酒的按钮13.应当找5角零钱并且售货机有零钱找14.钱已付清,结果:21.售货机零钱找完灯亮,22.退还1元硬币,23.退还5角硬币,24.送出橙汁饮料,25.送出啤酒饮料(2)画出因果图。所有原因结点列在左,边,所有结果结点列在右边。,(3)由于 2 与 3,4 与 5 不能同时发生,,分别加上约束条件,E。(4),因果图,(5)转换成判定表,软件测试的策略,测试过程按4个步骤进行,即,单元测试,、,组装测试,、,确认测试,和,系统测试,。,开始是,单元测试,,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。,组装测试,把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。,确认测试,则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。,系统测试,把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。,单元测试,(,Unit Testing),单元测试又称模块测试,,是针对软件设计的最小单位 程序模块,,,进行正确性检验,的测试工作。其目的在于发现各模块内部可能存在的各种差错。,单元测试需要,从程序的内部结构出发设计测试用例,。多个模块可以平行地独立进行单元测试。,1.单元测试的内容,在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的,I/O,条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。,(1)模块接口测试,在单元测试的开始,应对,通过被测模块的数据流,进行测试。测试项目包括:,调用本模块的输入参数是否正确;,本模块调用子模块时输入给子模块的参数是否正确;,全局量的定义在各模块中是否一致;,在做,内外存交换,时要考虑:,文件属性是否正确;,OPEN,与,CLOSE,语句是否正确;,缓冲区容量与记录长度是否匹配;,在进行读写操作之前是否打开了文件;,在结束文件处理时是否关闭了文件;,正文书写输入错误,,IO,错误是否检查并做了处理。,(2)局部数据结构测试,不正确或不一致的数据类型说明,使用尚未赋值或尚未初始化的变量,错误的初始值或错误的缺省值,变量名拼写错或书写错,不一致的数据类型,全局数据对模块的影响,(3)路径测试,选择适当的测试用例,对模块中,重要的执行路径,进行测试。,应当设计测试用例查找由于,错误的计算,、,不正确的比较,或,不正常的控制流,而导致的错误。,对基本执行路径和循环进行测试可以发现大量的路径错误。,(4)错误处理测试,出错的描述是否难以理解,出错的描述是否能够对错误定位,显示的错误与实际的错误是否相符,对错误条件的处理正确与否,在对错误进行处理之前,错误条件是否已经引起系统的干预等,(5)边界测试,注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。,如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。,2.单元测试的步骤,模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模块。,驱动模块(,driver),桩模块(,stub),存根模块,驱动模块(,driver),相当于所测模块的主程序。它接收测试数据,把这些数据传送给所测模块,最后再输出实测结果。,桩模块(,stub),存根模块。用以代替所测模块调用的子模块。,如果一个模块要完成多种功能,可以将这个模块看成由几个小程序组成。必须对其中的每个小程序先进行单元测试要做的工作,对关键模块还要做性能测试。,对支持某些标准规程的程序,更要着手进行互联测试。有人把这种情况特别称为模块测试,以区别单元测试。,组装测试(,Integrated Testing),组装测试(集成测试、联合测试),通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:,在把各个模块连接起来的时侯,,穿越模块接口的数据,是否会丢失;,一个模块的功能是否会对另一个模块的功能产生不利的影响,;,各个子功能组合起来,,,能否达到预期要求的父功能,;,全局数据结构是否有问题,;,单个模块的误差累积起来,是否会放大,,从而达到不能接受的程度。,在单元测试的同时可进行组装测试,,,发现并排除在模块连接中可能出现,的问题,最终构成要求的软件系统。,子系统的组装测试特别称为,部件测试,,它所做的工作是要找出组装后的,子系统与系统需求规格说明之间,的不一致。,通常,把模块组装成为系统的方式有两种,一次性组装方式,增殖式组装方式,1.一次性组装方式(,big bang),它是一种非增殖式组装方式。也叫做整体拼装。,使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统。,2.增殖式组装方式,这种组装方式又称,渐增式组装,首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统,在组装的过程中边连接边测试,以发现连接过程中产生的问题,通过增殖逐步组装成为要求的软件系统。,(1)自顶向下的增殖方式,这种组装方式将模块,按系统程序结构,,,沿控制层次自顶向下进行组装,。,自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。,选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。,(2)自底向上的增殖方式,这种组装的方式是从,程序模块结构的最底层的模块开始组装和测试,。,因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以,不再需要桩模块,。在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到。,自顶向下增殖的方式和自底向上增殖的方式各有优缺点。,一般来讲,一种方式的优点是另一种方式的缺点。,确认测试(,Validation Testing),确认测试又称,有效性测试,。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。,对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。,1.进行有效性测试(黑盒测试),有效性测试是在模拟的环境(可能就是开发的环境)下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。,首先制定测试计划,规定要做测试的种类。还需要制定一组测试步骤,描述具体的测试用例。,通过实施预定的测试计划和测试步骤,确定,软件的特性是否与需求相符;,所有的文档都是正确且便于使用;,同时,对其它软件需求,例如可移植性、兼容性、出错自动恢复、可维护性等,也都要进行测试,在全部软件测试的测试用例运行完后,所有的测试结果可以分为两类:,测试结果与预期的结果相符,。这说明软件的这部分功能或性能特征与需求规格说明书相符合,从而这部分程序被接受。,测试结果与预期的结果不符,。这说明软件的这部分功能或性能特征与需求规格说明不一致,因此要为它提交一份问题报告。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服