您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 软件测试的目标(PPT64页)
软件测试的目标测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,测试是对软件规格说明、设计和编码的最后复审。根本目标:尽可能多地发现并排除软件中潜藏的错误,最终把高质量的软件系统交给用户。无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。软件测试在软件生命周期中横跨两个阶段。软件测试包括两种:单元测试——模块的编写者和测试者是同一个人综合测试——由专门的测试人员承担软件测试的工作量往往占软件开发总工作量的40%以上7.1基本概念7.1.1软件测试的目标(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。测试的定义——为了发现程序中的错误而执行程序的过程。测试目标决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。由于测试的目标是暴露程序中的错误,因此由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。测试不能证明错误不存在,只能表示软件错误已经出现。测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。测试原则所有的测试都应追溯到用户需求。应在测试工作真正开始的前较长时间内就进行测试计划。(测试计划可在设计模型一完成就开始,详细测试方案定义可在设计模型被确定后立即开始)穷举测试是不可能的。为达到最佳效果,应由独立的第三方来构造测试。可测试性软件的可测试性就是一个计算机程序能够被测试的容易程度。可测试性特征:可操作性“运行得越好,被测试的效率越高”可观察性。“你所见的即为你所测试的”可控制性。“对软件控制越好,测试越能够被自动执行与优化”可分解性。“通过控制测试范围,能更快的分界问题,执行更灵巧的再测试”简单性。“需测试的内容越少,测试速度越快”稳定性。“改变越少,对测试的破坏越小”易理解性。“得到的信息越多,进行的测试越灵巧”“好”测试的属性一个好测试发现错误的可能性很高。一个好测试并不冗余。(每个测试都该有不同的用途)一个好测试应该是一组目的相似的测试中最佳的,最可能找到所有错误的测试。一个好测试既不会太简单,也不会太复杂。7.1.2黑盒测试和白盒测试测试任何产品都有两种方法:黑盒测试——如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;白盒测试——如果知道产品内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行,且所有内部部件被充分利用(确保“所有齿轮吻合”)。黑盒测试又称为功能测试,它把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如,数据库或文件)的完整性。(故意不考虑控制结构,而是注意信息域)黑盒测试检测的错误类型功能不对或遗漏。界面错误。数据结构或外部数据库访问错误。性能错误。初始化和终止错误。白盒测试又称为结构测试,它的前提是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。(使用程序设计的控制结构导出测试方案)包含所有可能情况的测试称为穷尽测试,对于实际程序而言,穷尽测试通常是不可能做到的。白盒测试功能保证一个模块中的所有独立路径至少被执行一次。对所有逻辑值均需测试TRUE和FALSE。在上下边界及可操作范围内运行所有循环。检查内部数据结构以确保其有效性。7.1.3软件测试的步骤1.模块测试模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。在这个测试步骤中所发现的往往是编码和详细设计的错误。2.子系统测试子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。模块相互间的协调和通信是这个测试过程中的主要问题,因此这个步骤着重测试模块的接口。3.系统测试系统测试是把经过测试的子系统装配成一个完整的系统来测试。在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。4.验收测试验收测试把软件系统作为单一的实体进行测试,目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误。5.平行运行平行运行就是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。这样做的具体目的有如下几点:(1)可以在准生产环境中运行新系统而又不冒风险;(2)用户能有一段熟悉新系统的时间;(3)可以验证用户指南和使用手册之类的文档;(4)能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。测试阶段的信息流软件配置:测试配置+测试实际结果+调试纪录测试配置:测试计划+测试方案测试方案:测试时使用的输入数据(测试用例)每组输入数据预定要检查的功能每组输入数据预期应该得到的正确输出7.1.4测试阶段的信息流7.2单元测试单元测试集中检验软件设计的最小单元——模块。单元测试通常使用白盒测试法,而且对多个模块的测试可以并行地进行。7.2.1单元测试考虑在单元测试期间主要评价模块的下述五个特性:模块接口;局部数据结构;重要的执行通路;出错处理通路;影响上述各方面特性的边界条件。在对接口进行测试时主要检查下述各点;(1)参数数目和由调用模块送来的变元的数目是否相等?(2)参数的属性和变元的属性是否匹配?(3)参数和变元的单位系统是否匹配?(4)传送给被调用模块的变元的数目是否等于那个模块的参数的数目?(5)传送给被调用模块的变元属性和参数的属性是否一致?(6)传送给被调用模块的变元的单位系统和该模块参数的单位系统是否一致?(7)传送给内部函数的变元属性、数目和次序是否正确?(8)是否修改了只做输入用的变元?(9)全程变量的定义和用法在各个模块中是否一致?如果一个模块完成外部的输入或输出时,还应该再检查下述各点:(1)文件属性是否正确?(2)打开文件语句是否正确?(3)格式说明书与输入/输出语句是否一致?(4)缓冲区大小与记录长度是否匹配?(5)使用文件之前先打开文件了吗?(6)文件结束条件处理了吗?(7)输入/输出错误检查并处理了吗?(8)输出信息中有文字书写错误吗?对于一个模块而言,局部数据结构是常见的错误来源。应该仔细设计测试方案,以便发现下述类型的错误:(1)错误的或不相容的说明;(2)使用尚未赋值或尚未初始化的变量;(3)错误的初始值或不正确的缺省值;(4)错误的变量名字(拼写错或截短了);(5)数据类型不相容;(6)上溢、下溢或地址异常。由于错误的计算、不正确的比较或不适当的控制流造成的错误:(1)计算次序不对或误解了运算符的优先次序;(2)混合运算(运算对象的类型彼此不相容);(3)变量初始值不正确;(4)精度不够;(5)表达式的符号表示错误。比较后控制流变化的错误:(1)比较数据类型不同的量;(2)逻辑运算符不正确或优先次序的错误;(3)当由于精度问题两个量不会相等时,程序中却期待着相等条件的出现;(4)“差1”错(即,多循环一次或少循环一次);(5)错误的或不存在的循环终止条件;(6)当遇到发散的迭代时不能终止循环;(7)错误地修改循环变量。当错误处理部分,应该考虑潜在的错误:(1)对错误的描述是难于理解的;(2)记下的错误与实际遇到的错误不同;(3)在对错误进行处理之前,错误条件已经引起系统异常;(4)对错误的处理(例外处理)不正确;(5)描述错误的信息不足以帮助确定造成错误的位置。边界测试是单元测试中最后的也可能是最重要的任务。软件常常在它的边界上失效。7.2.2单元测试过程通常经过人工测试和计算机测试两种类型的测试。1.代码审查人工测试源程序可以由编写者本人非正式地进行,也可以由审查小组正式进行。后者称为代码审查,它是一种非常有效的程序验证技术,对于典型的程序来说,可以查出30%~70%的逻辑设计错误和编码错误。代码审查比计算机测试优越的是:一次审查会上可以发现许多错误。可减少系统验证的总工作量实践表明,对于查找某些类型的错误来说,人工测试比计算机测试更有效;对于其他类型的错误来说则刚好相反。2.测试软件模块并不是一个独立的程序,因此必须为每个单元测试开发驱动软件和(或)存根软件。高内聚可简化单元测试过程。(减少所需的测试方案,且模块中的错误也更容易预测和发现)在所有的模块都完成单元测试以后提一个问题:如果每个模块都工作的很好,那么为什么要怀疑把它们放在一起就不能正常工作呢?问题在于:“怎样放在一起”——接口问题数不胜数集成测试集成测试是通过测试发现和接口有关的问题来构造程序结构的系统化技术。目标:把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构。7.3集成测试集成测试是组装软件的系统技术,由模块组装成程序时有两种方法。一种方法是先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,这种方法称为非渐增式测试方法;(通常存在的倾向)另一种方法是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。这种每次增加一个模块的方法称为渐增式测试,这种方法实际上同时完成单元测试和集成测试。两种方法的主要优缺点:非渐增式测试方法工作量比较大渐增式测试可以较早发规模块间的接口错误;非渐增式测试最后才把模块组装在一起,因此接口错误发现得晚。非渐增式测试一下子把所有模块组合在一起,如果发现错误则较难诊断定位;使用渐增式测试方法时,如果发生错误则往往和最近加进来的那个模块有关。渐增式测试方法对程序的测试更彻底。渐增式测试需要较多的机器时间。非渐增式测试方法可以并行测试所有模块,因此能充分利用人力,加快工程进度。总的说来,渐增式测试方法比较好。使用渐增方式把模块结合到软件系统中去时,有自顶向下和自底向上两种方法。7.3.1自顶向下结合从主控制模块(“主程序”)开始,沿着软件的控制层次向下移动,从而逐渐把各个模块结合起来。7.3.2自底向上结合自底向上测试从“原子”模块(即在软件结构最低层的模块)开始组装和测试。7.3.3不同测试策略的比较自顶向下结合的优点:不需要测试驱动程序,能在早期实现并验证系统的主要功能,能较早发现上层模快的接口错误。自顶向下结合的缺点:需要存根程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,而且用这种方法在早期不能充分展开人力。自底向上测试方法的优缺点刚好相反。混合策略:改进的自顶向下测试方法:基本上使用自顶向下的测试方法,但是在早期,就使用自底向上的方法测试软件中的少数关键模块。混合法:对软件结构中较上层,使用的是自顶向下方法;对软件结构中较下层,使用的是自底向上方法,两者相结合。7.4验收测试验收测试的任务——验证软件的有效性。软件有效性定义——如果软件的功能和性能如同用户所合理地期待的那样,则软件是有效的。需求分析阶段产生的文档准确地描述了用户对软件的合理期望,因此是软件有效的标准,也是验收测试的基础。回归测试对某些已经进行过测试的某些子集在重新进行一遍。用来保证(由于测试或其他原因)改动不会带来不可预料的行为或者另外的错误活动。通过重新执行所有的测试用例的一个子集人工的来进行,或使用自动化捕获回访工具来进行。测试用例的类型包括:能够测试软件的所有功能的代表性测试用例专门针对可能会修改影响的软件功能的附加测试针对修改过的软件成分的测试进行集成测试时,应能识别关键模块。关键模块的特性:–和好几个软件需求有关–含有高层
本文标题:软件测试的目标(PPT64页)
链接地址:https://www.777doc.com/doc-648050 .html