收藏 分销(赏)

软件测试的目标PPT学习课件.ppt

上传人:精*** 文档编号:9863947 上传时间:2025-04-11 格式:PPT 页数:64 大小:2.20MB 下载积分:14 金币
下载 相关 举报
软件测试的目标PPT学习课件.ppt_第1页
第1页 / 共64页
软件测试的目标PPT学习课件.ppt_第2页
第2页 / 共64页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,软件测试的目标,测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,测试是对软件规格说明、设计和编码的最后复审。,根本目标:尽可能多地发现并排除软件中潜藏的错误,最终把高质量的软件系统交给用户。,无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。,1,软件测试在软件生命周期中横跨两个阶段。软件测试包括两种:,单元测试,模块的编写者和测试者是同一个人,综合测试,由专门的测试人员承担,软件测试的工作量往往占软件开发总工作量的,40,以上,2,7.,基本概念,7.1.1,软件测试的目标,(,1,)测试是为了发现程序中的错误而执行程序的过程;,(,2,)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;,(,3,)成功的测试是发现了至今为止尚未发现的错误的测试。,测试的定义,为了发现程序中的错误而执行程序的过程。,3,测试目标决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。,由于测试的目标是暴露程序中的错误,因此由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。,4,测试不能证明错误不存在,只能表示软件错误已经出现。,测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。,5,测试原则,所有的测试都应追溯到用户需求。,应在测试工作真正开始的前较长时间内就进行测试计划。(测试计划可在设计模型一完成就开始,详细测试方案定义可在设计模型被确定后立即开始),穷举测试是不可能的。,为达到最佳效果,应由独立的第三方来构造测试。,6,可测试性,软件的可测试性就是一个计算机程序能够被测试的容易程度。,可测试性特征:,可操作性“运行得越好,被测试的效率越高”,可观察性。“你所见的即为你所测试的”,可控制性。“对软件控制越好,测试越能够被自动执行与优化”,可分解性。“通过控制测试范围,能更快的分界问题,执行更灵巧的再测试”,简单性。“需测试的内容越少,测试速度越快”,稳定性。“改变越少,对测试的破坏越小”,易理解性。“得到的信息越多,进行的测试越灵巧”,7,“,好”测试的属性,一个好测试发现错误的可能性很高。,一个好测试并不冗余。(每个测试都该有不同的用途),一个好测试应该是一组目的相似的测试中最佳的,最可能找到所有错误的测试。,一个好测试既不会太简单,也不会太复杂。,8,7.1.2,黑盒测试和白盒测试,测试任何产品都有两种方法:,黑盒测试,如果已经知道了产品应该具有,的功能,可以通过测试来检验是否每个功能都能正常使用;,白盒测试,如果知道产品内部工作过程,,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行,且所有内部部件被充分利用(确保“所有齿轮吻合”)。,9,黑盒测试又称为功能测试,它把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按,照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如,数据库或文件)的完整性。,(故意不考虑控制结构,而是注意信息域),10,黑盒测试检测的错误类型,功能不对或遗漏。,界面错误。,数据结构或外部数据库访问错误。,性能错误。,初始化和终止错误。,11,白盒测试又称为结构测试,它的前提是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。,(使用程序设计的控制结构导出测试方案),包含所有可能情况的测试称为穷尽测试,对于实际程序而言,穷尽测试通常是不可能做到的。,12,白盒测试功能,保证一个模块中的所有独立路径至少被执行一次。,对所有逻辑值均需测试,TRUE,和,FALSE,。,在上下边界及可操作范围内运行所有循环。,检查内部数据结构以确保其有效性。,13,7.1.3,软件测试的步骤,1.,模块测试,模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。在这个测试步骤中所发现的往往是编码和详细设计的错误。,2.,子系统测试,子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。模块相互间的协调和通信是这个测试过程中的主要问题,因此这个步骤着重测试模块的接口。,14,3.,系统测试,系统测试是把经过测试的子系统装配成一个完整的系统来测试。在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。,4.,验收测试,验收测试把软件系统作为单一的实体进行测试,,目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误。,15,5.,平行运行,平行运行就是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。这样做的具体目的有如下几点:,(,1,)可以在准生产环境中运行新系统而又不冒风险;,(,2,)用户能有一段熟悉新系统的时间;,(,3,)可以验证用户指南和使用手册之类的文档;,(,4,)能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。,16,测试阶段的信息流,软件配置:,测试配置,+,测试实际结果,+,调试纪录,测试配置:,测试计划,+,测试方案,测试方案:,测试时使用的输入数据(测试用例),每组输入数据预定要检查的功能,每组输入数据预期应该得到的正确输出,17,7.1.4,测试阶段的信息流,18,7,单元测试,单元测试集中检验软件设计的最小单元,模块。单元测试通常使用白盒测试法,而且对多个模块的测试可以并行地进行。,7.2.1,单元测试考虑,在单元测试期间主要评价模块的下述五个特性:,模块接口;,局部数据结构;,重要的执行通路;,出错处理通路;,影响上述各方面特性的边界条件。,19,在对接口进行测试时主要检查下述各点;,()参数数目和由调用模块送来的变元的数目是否相等?,(,2,)参数的属性和变元的属性是否匹配?,(,3,)参数和变元的单位系统是否匹配?,(,4,)传送给被调用模块的变元的数目是否等于那个模块的参数的数目?,(,5,)传送给被调用模块的变元属性和参数的属性是否一致?,(,6,)传送给被调用模块的变元的单位系统和该模块参数的单位系统是否一致?,(,7,)传送给内部函数的变元属性、数目和次序是否正确?,(,8,)是否修改了只做输入用的变元?,(,9,)全程变量的定义和用法在各个模块中是否一致?,20,如果一个模块完成外部的输入或输出时,还应该再检查下述各点:,(,1,)文件属性是否正确?,(,2,)打开文件语句是否正确?,(,3,)格式说明书与输入输出语句是否一致?,(,4,)缓冲区大小与记录长度是否匹配?,(,5,)使用文件之前先打开文件了吗?,(,6,)文件结束条件处理了吗?,(,7,)输入输出错误检查并处理了吗?,(,8,)输出信息中有文字书写错误吗?,21,对于一个模块而言,局部数据结构是常见的错误来源。应该仔细设计测试方案,以便发现下述类型的错误:,(,1,)错误的或不相容的说明;,(,2,)使用尚未赋值或尚未初始化的变量;,(,3,)错误的初始值或不正确的缺省值;,(,4,)错误的变量名字(拼写错或截短了);,(,5,)数据类型不相容;,(,6,)上溢、下溢或地址异常。,22,由于错误的计算、不正确的比较或不适当的控制流造成的错误:,(,1,)计算次序不对或误解了运算符的优先次序;,(,2,)混合运算(运算对象的类型彼此不相容);,(,3,)变量初始值不正确;,(,4,)精度不够;,(,5,)表达式的符号表示错误。,23,比较后控制流变化的错误:,(,1,)比较数据类型不同的量;,(,2,)逻辑运算符不正确或优先次序的错误;,(,3,)当由于精度问题两个量不会相等时,程序中却期待着相等条件的出现;,(,4,)“差,1”,错(即,多循环一次或少循环一次);,(,5,)错误的或不存在的循环终止条件;,(,6,)当遇到发散的迭代时不能终止循环;,(,7,)错误地修改循环变量。,24,当错误处理部分,应该考虑潜在的错误:,(,1,)对错误的描述是难于理解的;,(,2,)记下的错误与实际遇到的错误不同;,(,3,)在对错误进行处理之前,错误条件已经引起系统异常;,(,4,)对错误的处理(例外处理)不正确;,(,5,)描述错误的信息不足以帮助确定造成错误的位置。,边界测试是单元测试中最后的也可能是最重要的任务。软件常常在它的边界上失效。,25,7.2.2,单元测试过程,通常经过人工测试和计算机测试两种类型的测试。,1.,代码审查,人工测试源程序可以由编写者本人非正式地进行,也可以由审查小组正式进行。后者称为代码审查,它是一种非常有效的程序验证技术,对于典型的程序来说,可以查出,30,70,的逻辑设计错误和编码错误。,代码审查比计算机测试优越的是:一次审查会上可以发现许多错误。可减少系统验证的总工作量,实践表明,对于查找某些类型的错误来说,人工测试比计算机测试更有效;对于其他类型的错误来说则刚好相反。,26,2.,测试软件,模块并不是一个独立的程序,因此必须为每个单元测试开发驱动软件和(或)存根软件。,高内聚可简化单元测试过程。(减少所需的测试方案,且模块中的错误也更容易预测和发现),27,在所有的模块都完成单元测试以后提一个问题:,如果每个模块都工作的很好,那么为什么要怀疑把它们放在一起就不能正常工作呢?,问题在于:“怎样放在一起”,接口,问题数不胜数,28,集成测试,集成测试是通过测试发现和接口有关的问题来构造程序结构的系统化技术。,目标:把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构。,29,7,集成测试,集成测试是组装软件的系统技术,由模块组装成程序时有两种方法。,一种方法是先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,这种方法称为非渐增式测试方法;(通常存在的倾向),另一种方法是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。这种每次增加一个模块的方法称为渐增式测试,这种方法实际上同时完成单元测试和集成测试。,30,两种方法的主要优缺点:,非渐增式测试方法工作量比较大,渐增式测试可以较早发规模块间的接口错误;非渐增式测试最后才把模块组装在一起,因此接口错误发现得晚。,非渐增式测试一下子把所有模块组合在一起,如果发现错误则较难诊断定位;使用渐增式测试方法时,如果发生错误则往往和最近加进来的那个模块有关。,31,渐增式测试方法对程序的测试更彻底。,渐增式测试需要较多的机器时间。,非渐增式测试方法可以并行测试所有模块,因此能充分利用人力,加快工程进度。,总的说来,渐增式测试方法比较好。,使用渐增方式把模块结合到软件系统中去时,有自顶向下和自底向上两种方法。,32,7.3.1,自顶向下结合,从主控制模块(“主程序”)开始,沿着软件的控制层次向下移动,从而逐渐把各个模块结合起来。,33,7.3.2,自底向上结合,自底向上测试从“原子”模块(即在软件结构最低层的模块)开始组装和测试。,34,7.3.3,不同测试策略的比较,自顶向下结合的优点:,不需要测试驱动程序,能在早期实现并验证系统的主要功能,能较早发现上层模快的接口错误。,自顶向下结合的缺点:,需要存根程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,而且用这种方法在早期不能充分展开人力。,自底向上测试方法的优缺点刚好相反。,35,混合策略:,改进的自顶向下测试方法:基本上使用自顶向下的测试方法,但是在早期,就使用自底向上的方法测试软件中的少数关键模块。,混合法:对软件结构中较上层,使用的是自顶向下方法;对软件结构中较下层,使用的是自底向上方法,两者相结合。,36,验收测试,验收测试的任务,验证软件的有效性。,软件有效性定义,如果软件的功能和性能如同用户所合理地期待的那样,则软件是有效的。,需求分析阶段产生的文档准确地描述了用户对软件的合理期望,因此是软件有效的标准,也是验收测试的基础。,37,回归测试,对某些已经进行过测试的某些子集在重新进行一遍。,用来保证(由于测试或其他原因)改动不会带来不可预料的行为或者另外的错误活动。,通过重新执行所有的测试用例的一个子集人工的来进行,或使用自动化捕获回访工具来进行。,测试用例的类型包括:,能够测试软件的所有功能的代表性测试用例,专门针对可能会修改影响的软件功能的附加测试,针对修改过的软件成分的测试,38,进行集成测试时,应能识别关键模块。,关键模块的特性:,和好几个软件需求有关,含有高层控制(位于程序结构的高层),本身是复杂的或者是容易出错的,含有确定性的性能需求,关键模块应尽可能早地进行测试,回归测试应集中在关键模块的功能上,39,7.4.1,验收测试(确认测试)的范围,验收测试的范围与系统测试类似,但是也有一些差别。,验收测试有两种可能的结果:,(,1,)功能和性能与用户要求一致,软件是可以接受的;,(,2,)功能或性能与用户的要求有差距。,7.4.2,软件配置复查,40,系统测试,将软件和其他系统成分(新的硬件、信息)集成起来,进行系统集成和确认测试。(不属于软件工程的研究范围),系统测试类型,恢复测试,安全测试,压力测试,性能测试,41,设计测试方案,测试方案包括预定要测试的功能,应,该输入的测试数据和预期的结果。,通常的做法是,用黑盒法设计基本的测试方案,再用白盒法补充一些方案。,42,7.5.1,逻辑覆盖,逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。,1.,语句覆盖,选择足够多的测试数据,使被测试程序中每个语句至少执行一次。,2.,判定覆盖,判定覆盖又叫分支覆盖,它的含义是,不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支部至少执行一次。,43,3.,条件覆盖,不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。,4.,判定条件覆盖,同时满足判定和条件两种覆盖标准的逻辑覆盖,这就是判定条件覆盖。它的含义是,选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式 也都取到各种可能的结果。,44,5.,条件组合覆盖,条件组合覆盖是更强的逻辑覆盖标准,它要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。,6.,点覆盖,如果连通图,G,的子图,G,是连通的,而且包含,G,的所有节点,则称,G,是,G,的点覆盖,45,7.,边覆盖,如果连通图,G,的子图,G“,是连通的,而且包含,G,的所有边,则称,G”,是,G,的边覆盖。,8.,路径覆盖,选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次),46,7.5.2,等价划分,如果把所有可能的输入数据(有效的和无效的)划分成若干个等价类,则可以合理地,做出下述假定:每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。因此,可以从每个等价类中只取一组数据作为测试数据。这样选取的测试数据最有代表性,最可能发现程序中的错误。,47,等价划分的测试方案用于设计基于输入条件的等价类评估,如果对象具有对称性或自反性的关系连接,就存在等价类。,等价类表示输入条件的一组有效或无效的状态,48,划分出等价类以后,根据等价类设计测试方案时主要使用下面两个步骤:,(,1,)设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等价类,复重这一步骤直到所有有效等价类都被覆盖为止;,(,2,)设计一个新的测试方案,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。,49,7.5.3,边界值分析(,BVA),是补充等价划分的测试方案设计技术。,设计使程序运行在边界情况附近的测试方案,暴露出程序错误的可能性更大一些。,应该选取刚好等于、稍小于和稍大干等价类边界值的数据作为测试数据,而不是选取每个等价类内的典型值或任意值作为测试数据。,7.5.4,错误推测,错误推测法在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。,50,7.5.5,实用测试策略,对软件系统进行实际测试时,应该联合使用各种设计测试方案的方法,形成一种综合策略。通常的做法是,用黑金法设计基本的测试方案,再用白金法补充一些必要的测试方案。,具体地说,可以使用下述策略结合各种方法:,1,在任何情况下都应该使用边界值分析的方法。,2,必要时用等价划分法补充测试方案。,3,必要时再用错误推测法补充测试方案。,4,对照程序逻辑,检查已经设计出的测试方案。,51,测试步骤,确定测试要度量什么(要测试什么,为什么要测试。)内容是需求规格说明的完全性、系统设计中模块的内聚性及实现代码的可靠性。,决定如何测试待定软件(选择何种测试方法),开发测试用例。,确定测试的期望结果并创建测试喻示。,执行测试用例。,将测试结果与测试喻示表示的期望结果进行比较。,52,6,调试,在成功的测试之后,还必须进一步诊断和改正程序中的错误,这就是调试的任务。,调试过程的两个步骤:,它从表示程序中存在错误的某些迹象开始,首先确定错误的准确位置工(作量大约占调试总工作量的,95,);,确定问题的原因,并改正错误。,53,7.6.1,调试技术,现有的调试技术主要有下述三类:,1.,输出存储器内容,2.,打印语句,3.,自动工具,7.6.2,调试策略,调试过程的关键不是调试技术,而是用来推断错误原因的基本策略。,54,1.,试探法,分析错误征兆,猜想故障的大致位置,2.,回溯法,检查错误征兆,确定最先发现“症状”的地方,然后人工沿程序的控制流往回追踪源程序代码,直到找出错误根源或确定故障范围为止。,3.,对分查找法,55,4.,归纳法,从线索(错误征兆)出发,通过分析这些,线索之间的关系而找出故障。,归纳法的四个主要步骤:,(,l,)收集有关的数据,(,2,)组织数据,(,3,)导出假设,(,4,)证明假设,56,5.,演绎法,演绎法调试开始时先列出所有看来可能成立的原因或假设,然后一个一个地排除列举出的原因,最后,证明剩下的原因确实是错误的根源。演绎法主要有下述四个步骤;,(,1,)设想可能的原因,(,2,)用已有的数据排除不正确的假设,(,3,)精化余下的假设,(,5,)证明余下的假设,57,7,软件可靠性,7.7.1,基本概念,1.,软件可靠性的空义,软件可靠性,程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。,2.,软件的可用性,软件可用性,程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。,58,7.7.2,估算平均无故障时间,(MTTF),的方法,1.,符号,E,T,测试之前程序中故障总数;,I,T,程序长度(机器指令总数);,测试(包括调试)时间;,E,d,(),在,0,至,期间发现的错误数;,E,c,(),在,0,至,r,期间改正的错误数。,59,2.,基本假定,(,1,)在类似的程序中,单位长度里的故障数,E,T,I,T,近似为常数。,(,2,)失效率正比于软件中剩余的(潜藏的)故障数,而平均无故障时间,MTTF,与剩余的故障数成反比。,3.,估算平均无故障时间,经验表明,平均无故障时间与单位长度程序中剩余的故障数成反比,即,其中,K,为常数,它的值应该根据经验选取。,K,的典型值是,200,。,60,4.,估计故障总数的方法,(,1,)植入故障法,在测试之前由专人在程序中随机地植入一些故障,测试之后,根据测试小组发现的故障中原有的和植入的两种故障的比例,来估计程序中原有故障的总数,E,T,。,(,2,)分别测试法,分别测试法使用两个测试员(或测试小组),彼此独立地测试同一个程序的两个副本,把其中一个测试员发现的故障作为有标记的故障。,61,7.7.3,程序正确性证明,正确性证明的基本思想是证明程序能完成预定的功能。因此,应该提供对程序功能的,严格数学说明,然后根据程序代码证明程序确实能实现它的功能说明。,62,9,自动测试工具,7.9.1,测试数据生成程序,这种程序可以为测试某个系统而自动产生大量输入数据,但是它不能自动产生预期的输出,因此用途有限。,7.9.2,动态分析程序,动态分析程序的主要功能是分析被测程序中每个语句的执行次数。它有两个基本部分:,1,检测部分,2,显示部分,63,7.9.3,静态分析程序,静态分析程序不需要执行被测试的程序,它仅仅扫描被测试程序的正文,从中寻找可,能导致错误的异常情况。,7.9.4,文件比较程序,自动化检查测试结果。,64,
展开阅读全文

开通  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 

客服