[计算机]第8章 软件测试.ppt_第1页
[计算机]第8章 软件测试.ppt_第2页
[计算机]第8章 软件测试.ppt_第3页
[计算机]第8章 软件测试.ppt_第4页
[计算机]第8章 软件测试.ppt_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章 软件测试,软件测试是在软件投入运行之前,对软件的需求分析、设计规格说明和编码的最后复审。 软件必须测试的原因: 由于软件开发的各个阶段均包含了大量的人的创造性劳动,不可避免地会引入错误,尤其是大型、复杂的软件系统。,软件测试的概念和意义,什么是软件测试? 软件测试的定义:软件测试是为了发现错误而运行程序的过程。 根据软件开发各阶段的规格说明和程序内部结构精心设计一批测试用例,并利用这些用例去运行程序,以发现程序中的错误。,软件测试的概念和意义,软件测试在软件生命期中,跨越两个阶段。 编写每一个模块后,进行单元测试。通常模块的编写者和测试者是同一个人。 每一个模块完成单元测试后,对软件进行各种综合测试。由专门的测试人员完成。,软件测试的目标和原则,软件测试的目标: 1、软件测试是为了发现错误而运行程序的过程。 2、一个好的测试用例能够发现至今尚未发现的错误。 3、一次成功的测试是发现了至今尚未发现的错误的测试。,软件测试的目标和原则,软件测试的原则: (1)设计测试用例时,要给出测试的预期结果。 测试用例=输入数据+预期的输出结果 (2)软件测试工作应该由独立的专业的软件测试机构来完成 。 (3)测试工作要全面(如非法输入等),但不可能实现“穷举”。,软件测试的目标和原则,(4)把Pareto原理应用到软件测试中。即对发现错误较多的程序段,应进行更深入的测试。 (5)妥善保存一切测试过程文档。 (6)不要希望在极短的时间内完成一个高水平的测试。 (7)错误经过修改后,相关的测试必不可少。,软件测试的目标和原则,帕累托原理: 帕累托(Pareto)是十九世纪意大利的社会学家,他利用图表显示:国家财富的80%掌握在20%的人的手中,这种80%20%的关系,即是帕累托原理。我们可以从生活中的许多事件得到印证,举例来说: 公司80%的收入是由其全部产品中的20%所赚得的。 生产线上80%的故障,发生在20%的机器上。 80%的员工问题,是由20%的员工所引起的。,软件测试的范围,软件测试的对象: 软件测试不等于程序测试,在软件定义与开发的整个期间所得到的各种文档资料,都是测试对象。 测试对象包括需求规格说明、概要设计规格说明、详细设计规格说明、源程序等。 据有关统计表明,在查找出的软件错误中,属于需求分析和软件设计的错误约占错误总量的64%,而属于程序编写的错误则仅占错误总量的36%。,软件错误分类方法,按照错误的影响和造成的后果进行分类: 较小错误 中等错误 较严重错误 严重错误 按照软件生存周期各个阶段分类: 问题定义(需求分析)错误 规格说明错误 设计错误 编码错误,软件测试的分类,软件测试分类:,软件测试的分类,静态测试: 静态测试指被测程序不在机器上运行,而采用人工检测和计算机辅助静态检测的手段对程序进行测试。,软件测试的分类,静态测试方法: 1、人工检测:人工审查程序或评审软件。 人工审查程序偏重于编码质量的检验。 人工评审软件除了审查编码还要对各阶段的软件产品进行检验。 人工检测可以发现计算机不易发现的错误,据统计人工检测可发现30%70%的逻辑设计和编码错误,从而减少系统测试的总工作量。 2、计算机辅助静态检测:利用静态检测工具(如Splint,PC-LINT 等)对程序进行测试。,软件测试的分类,动态测试: 动态测试是通过运行程序发现错误。 一般意义上的测试都是动态测试。为使测试发现尽可能多的错误,动态测试时需采用一些有效的测试方法。 动态测试的方法: 黑盒测试:测试产品的功能。 白盒测试:测试产品的内部结构和处理过程。,软件测试需要的配置,软件测试过程中需要的配置: 测试过程需要三类信息: 1、软件配置:包括需求规格说明、软件设计规格说明、源程序等; 2、测试配置:包括测试方案、测试用例、测试驱动程序等; 3、测试工具:计算机辅助测试的有关工具。如测试数据自动生成工具、静态分析程序、动态分析程序、测试结果分析程序等。,软件测试需要的配置,软件测试方法,白盒测试: 白盒测试也称为结构测试,通过分析程序的内部的逻辑与执行路径来设计测试用例,并对用例进行测试的方法。被测对象基本上是源程序。,软件测试方法,为了选用高产的测试数据集,做尽可能完备的测试,可以参考以下一些基本的测试原则: 1)保证程序模块中每一个独立的路径至少测试一次; 2)保证所有判断的每一个分支至少测试一次; 3)保证每一个循环都在边界条件和一般条件下至少测试一次; 4)测试所有内部数据结构的有效性。,软件测试方法,介绍几种用白盒法测试时选择测试用例的方法: 1、逻辑覆盖 以程序内部的逻辑结构为基础来设计测试用例,即以程序流程图为依据来设计测试用例。重点考察图中的菱形框的内容,即判定条件,因为判定条件通常与条件结构及循环结构联系在一起。,软件测试方法,根据覆盖标准不同,逻辑覆盖可以分为以下几类: 语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 条件组合覆盖,软件测试方法,下面通过以下例子分别讲述每种覆盖: 例:C语言程序代码如下: Float X; Example (float A,B) if(A1) ,软件测试方法,常用的覆盖技术有: (1)语句覆盖: 为了提高发现错误的可能性,在测试时应该执行到程序中的每一个语句。语句覆盖是指设计足够的测试用例,使被测程序的每个语句至少执行一次。,测试路径为1-2-4,即可保证每个语句至少执行一次。所以测试用例为:A=2、B=0 、X=3。程序每个语句都能执行,语句覆盖似乎全面地检查了每个语句,但该测试用例只检查了逻辑表达式为“真”的情况,如将“AND” 错写为“ OR ”、 X1错写为X1,仍用上面的测试用例,不能发现错误。因此语句覆盖是比较弱的覆盖。,软件测试方法,常用的覆盖技术有: (2)判定覆盖: 判定覆盖是指设计足够的测试用例,使被测程序的每个判定表达式至少获得一次“真”和“假”值,从而使程序的每个分支至少都通过一次,所以判定覆盖又叫分支覆盖。,测试路径只要1-2-4,1-3-5或1-2-5,1-3-4即可达到覆盖标准。所以测试用例为:A=3、B=0 、X=1(1-2-5), A=2、B=1、X=2(1-3-4)。对于多分支的判定,判定覆盖要使得每一个判定表达式获得每一个可能的值。判定覆盖比语句覆盖严格,若通过各个分支,各个语句也执行了。但该测试仍不充分,上述数据只覆盖了全部路径的一半,如将X1错写为X1,测试不到.,软件测试方法,常用的覆盖技术有: (3)条件覆盖: 条件覆盖是指设计足够的测试用例,使被测程序的每个判定表达式中每个条件的各种可能的值至少出现一次。即对该程序中的四个条件A1 B=o A=2,X1 要选择足够的测试用例,使得: 判定表达式1出现:A1,B=0;A1,B0 判定表达式2出现:A=2, X1; A2, X1 达到条件覆盖标准。 为满足上述要求,选择以下两组数据: A=2,B=0, X=3(满足A1 ,B=0, A=2 , X1 通过路径124) A=1,B=1, X=1(满足A1,B0, X 1, A2通过路径135 ),软件测试方法,常用的覆盖技术有: (3)条件覆盖: 以上两组数据不仅覆盖了判定表达式中的所有条件的可能取值,而且覆盖了 所有判定的取“真”分支和取“假”分支,在这种情况下条件覆盖强于判定覆盖。但也有例外,如选择以下两组数据: A=1,B=0, X=3(满足A 1 ,B=0,A 2 ,X1 ) A=2,B=1, X=1(满足A1,B0, X 1, A=2) 以上两组数据覆盖了判定表达式中的所有条件的可能取值,但只覆盖了 第一个判定表达式的取“假”分支和第二个判定表达式的取“真”分支,此例不满足判定覆盖。所以满足条件覆盖不一定满足判定覆盖。为了解决此问题,需要对条件和分支兼顾。,软件测试方法,常用的覆盖技术有: (4)判定/条件覆盖: 该覆盖标准是指设计足够的测试用例,使被测程序的每个判定表达式中每个条件的各种可能的值至少出现一次。并使每个判定表达式所有可能的结果也至少出现一次。对该例程序,可选择以下两组数据达到判定/条件覆盖标准: A=2,B=0, X=3 A=1,B=1, X=1 从表面上看,判定/条件覆盖测试了所有条件的取值,但实际上条件组合中的某些条件会抑制其它的条件,如“与”运算的判定表达式中,第一个条件为“假”,则这个表达式后面的几个条件均不起作用,后面的表达式中的错误也就测试不出来。,软件测试方法,(5)条件组合覆盖: 该覆盖标准是指设计足够的测试用例,使被测程序的每个判定表达式中每个条件的各种可能的值的组合至少出现一次。条件组合覆盖是较强的覆盖标准。该例中,两个判定表达式共有4个条件,有8种组合: A1, B=0 ; A1, B0 ; A1,B=0; A1, B0 ; A=2, X1 ; A=2, X1; A2, X1; A2, X1 ; 测试用例4组数据: A=2, B=0, X=2;覆盖条件组合 ,路径124 A=2, B=1, X=1;覆盖条件组合 ,路径134 A=1, B=1, X=1;覆盖条件组合 ,路径135 A=1, B=0, X=2;覆盖条件组合 ,路径134 显然,满足条件组合覆盖的测试,一定满足判定覆盖、条件覆盖、判定/条件覆盖,但该测试没有覆盖程序所有可能的执行路径,125路径没有覆盖。,软件测试方法,五种覆盖的比较:,语句覆盖 每条语句至少执行一次 判定覆盖 每个判定的每个分支至少执行一次 条件覆盖 每个判定的每个条件应取到各种可能的值 判定/条件覆盖 同时满足判定覆盖和条件覆盖 条件组合覆盖 每个判定中各条件的每一种组合至少出现一次,发现错误能力,强 力,弱 力,软件测试的方法,黑盒测试法 黑盒测试着重测试软件功能,它检查的内容只包括程序功能是否能按照规格说明书的内容正常使用,程序是否接收输入数据产生正确的输出信息等。 黑盒测试与白盒测试是互补的测试方法,黑盒测试很可能发现白盒测试不易发现的错误。 白盒测试在测试过程的早期阶段进行,而黑盒测试主要用于测试过程的后期。,软件测试的方法,黑盒测试力图发现下述类型的错误: 功能不正确或遗漏了功能; 接口错误;,软件测试的方法,黑盒测试法分类: 等价类划分法 边界值分析法 错误推测法,软件测试的方法,1、等价类划分法(等价分类法) 等价类:指某个输入域的子集合,在该集合中,各个输入数据对暴露程序中的错误是等效的。 如果使用某个等价类中的一个输入条件,作为测试数据检测出了错误,那么用这一等价类中的其它数据进行测试会发现同样的错误,反之亦然。,软件测试的方法,等价类划分的思想: 将输入数据域按有效的或无效的(合理的或不合理的)划分成若干类,测试每个等价类的代表值。 如果某个等价类中任选一个测试用例,未发现程序错误,则该类中的其他测试用例,也不会发现程序错误。 这样用少量有代表性的例子可代替大量测试目的相同的例子,明显的提高了测试效率。,7.2 软件测试的方法,利用等价类划分法测试的步骤: 划分等价类 从程序的功能说明中找出每个输入条件,然后将其划分成若干个有效和无效的等价类。 有效等价类:对程序的规格说明来说是正确的,有意义的输入数据的集合。 无效等价类:对程序的规格说明来说是错误的,无意义的输入数据的集合。,软件测试的方法,下面给出等价类划分的几条经验性原则供参考: 如果规定了输入值的范围,则可划分出一个有效的等价类(输入值在此范围内)和两个无效的等价类(输入值小于最小值或大于最大值)。 如果规定了数据输入的个数,则可划分出一个有效的等价类(输入值的个数符合规定)和两个无效的等价类(输入值的个数少于或多于规定个数)。,软件测试的方法,如果规定了输入数据是一组值,则每个数据都符合要求是一个有效的等价类,此外还有一个无效的等价类(规定的这一组值以外的值)。 如果规定了输入数据必须遵循的规则,则可划分出一个有效的等价类(符合规则)和若干个无效的等价类(从不同的角度违反规则)。 如果规定了输入数据的类型,则可划分出一个有效的等价类(符合该数据类型)和一个无效的等价类(其他数据类型)。,软件测试的方法,设计测试用例 设计测试用例的步骤: 将第一步划分的等价类编号。 为有效等价类设计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的有效等价类。如此重复,直到所有有效等价类都被覆盖为止。 设计一个新的测试用例,覆盖且仅覆盖一个无效等价类,如此重复,直到所有无效等价类都被覆盖为止。,软件测试的方法,例:某程序的功能是输入三个正数作为三角形的边长,求三角形的面积。用等价类划分法对这个程序进行测试。 步骤: 1)划分等价类 2)设计测试用例,软件测试方法,2、边界值分析 边界值分析也是一种黑盒测试法,是对等价类划分法的补充。 实践经验表明,程序往往在处理边界情况时发生错误。边界情况指输入等价类、输出等价类边界上的情况。检查边界情况的测试用例是比较高效的,可以查出更多的错误。,软件测试的方法,下面给出边值分析法的几条经验性原则供参考: 如果输入条件指定了范围a,b,则a、b以及紧挨a、b左右的各一个值都应作为测试用例。比如,学生成绩为0,100,应取-1、0、1、99、100、101共6个值作为测试用例。 如果输入条件指定了输入数据的个数范围,则按最大、最小个数及超出个数范围的临界个数各设计一个测试用例。比如,一个输入文件应包括1255个记录,则应分别设计输入0个、1个、2个、254个、255个、256个记录的测试用例。,软件测试的方法,将规则和应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。 如果程序规格说明中提到的输入或输出域是个有序集合(如顺序文件、表格等),应注意选取有序集的第一个和最后一个元素作为测试用例。 分析规格说明,找出其他的可能边界条件。,软件测试方法,3、错误推测 错误推测法的基本思想是:程序测试员通过已经掌握的测试理论和实际测试中积累的经验,推测程序在哪些情况下可能发生错误,并将可能发生错误的情况列出,然后为每一可能发生错误的情况各设计一个测试用例。,软件测试方法,例如,测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况: 1)输入的线性表为空表; 2)表中只含有一个元素; 3)输入表中所有元素已排好序; 4)输入表已按逆序排好; 5)输入表中部分或全部元素相同。 于是,可以针对以上列出的每一种情况各设计一个测试用例。,软件测试过程,测试过程分为4个步骤: 单元测试 组装测试 确认测试 系统测试,单元 测试,单元 测试,单元 测试,被测模块,被测模块,被测模块,组装 测试,设计信息,确认 测试,系统 测试,已集成的 软件,已确认的 软件,可交付的 软件,软件需求,系统其它元素,已测试 模块,1、单元测试 单元测试也称模块测试,是针对软件设计的最小单元程序模块进行测试的工作。目的是发现模块内部的错误。 单元测试主要从以下五个方面进行: (1)模块接口测试(参数的类型、个数、顺序是否正确) (2)局部数据结构测试(变量定义、使用、初始化是否正确) (3)路径测试 (4)程序异常测试(健壮性测试) (5)边界条件测试,软件测试过程,单元测试属于动态测试,需要运行被测模块,而被测模块通常不是一个独立的程序,不能独立运行,因此要引入驱动模块和桩模块,模拟与被测模块相联系的调用模块和被调用模块。 驱动模块 模拟被测模块的调用模块。 支持模块(桩模块) 模拟被测模块的下属模块。,软件测试过程,2、集成测试 集成测试也称组装测试或联合测试,它的任务是按照一定的策略对经过单元测试的模块进行组装,并在组装过程中对模块接口与系统功能进行测试。 (1)一次性组装方式(非增殖式) 一次性组装方式的基本思想是首先分别测试每个模块,然后将所有模块全部组装起来进行测试,形成最终的软件系统。,软件测试过程,一次性组装方式测试的缺点: 一次将所有模块组装后的程序会很庞大,各模块之间相互影响,情况十分复杂。 在测试过程中会同时出现很多错误,对这些错误的定位难度增大,修改的过程中可能又会引发其它错误或激发其它潜在的错误。 测试工作十分的漫长。,软件测试过程,(2)增殖式组装方式 增殖式组装方式是采用循序渐进的方式,每次增加一个模块到已测试好的模块中。 1)自顶向下增殖方式 具体的实施步骤如下: 先测试主控制模块,测试时使用存根模块(桩模块)代替所有直接附属主控制模块的功能模块; 用某种结合策略(广度优先),用实际模块代替相应的存根模块; 对结合后的模块进行测试; 为了保证加入的模块没有引进新的错误,需要进行回归测试; 重复操作2、3、4步,完成集成测试。,软件测试过程,2)自底向上增殖方式 具体的结合策略如下: 将低层模块组合成实现某个子功能的簇; 写一个驱动模块,用来提供该功能簇的执行入口和输入/输出界面; 对该功能簇进行测试; 在低层继续寻找模块,将该功能簇扩大,重新修改驱动程序,以适应对当前功能簇的测试。 不断重复前面的步骤,完成测试。,软件测试过程,(3)混合增殖式测试 自顶向下增殖方式和自底向上增殖方式各有优缺点,在实际的测试过程中,可根据具体情况将两种方法结合起来使用。 改进的自顶向下的增殖测试:它的基本思想是对涉及输入输出模块和复杂算法的模块先采用自底向上的测试方法,将这些模块组装成为功能相对完整且相对独立的子系统,然后由主模块开始自顶向下进行增殖测试。,软件测试过程,3、确认测试 确认测试也称有效性测试,目的是验证软件的有效性,即验证软件的功能和性能及其它特性是否符合用户要求 。确认测试是软件交付使用前一项很重要的活动,它最终决定用户对该软件的认可程度。 1) 测试: 测试是邀请用户参加,在开发场地进行的测试,由开发组成员或用户实际操作运行,对测试过程中出现的问题,由开发者记录下来,作为修改的依据。 它的最大特点是整个测试过程是在受控环境下进行。,软件测试过程,2) 测试: 测试是由部分用户在实际的使用环境下进行的测试。测试过程中开发者不在现场,由用户独立操作,验证程序的各项功能,用户发现的问题全部记录下来,反馈给程序开发者,开发者对软件进行必要的修改,并准备最终的软件产品发布。 测试的最大特点是实际的使用环境下进行的测试。 确认测试的结果可分为两种情况: 测试结果与预期结果相符,程序的功能和性能满足用户需求; 测试结果与预期结果不相符,将存在的问题列出清单,提供给开发者作为修改依据。,软件测试过程,4、系统测试 系统测试的目的是充分运行系统,验证系统各部件是否都能正常工作并完成所赋予的任务。 系统测试的任务主要有:测试软件系统是否能与硬件协调工作,测试与其它软件协调运行的状况。,软件测试过程,系统测试分类: (1)恢复测试:主要检查系统的容错能力。 (2)安全测试:主要检查系统对非法侵入的防范能力。 (3)强度测试:主要检查程序在一些极限条件下的运行情况。 (4)性能测试:主要检查系统是否满足需求说明书中规定的性能。 (5)其它:版本间的兼容性测试、安装测试,最终提交的文档测试等 。,软件测试过程,见标准文档,测试相关文档,软件调试,调试(debug,排错) 调试功能是将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论