1、第第7章章 软件测试软件测试 由于软件开发的各个阶段均包含了大量的人的创造性由于软件开发的各个阶段均包含了大量的人的创造性劳动,不可避免地会引入错误,尤其是大型、复杂的软劳动,不可避免地会引入错误,尤其是大型、复杂的软件系统。件系统。软件测试是在软件投入运行之前软件测试是在软件投入运行之前,对软件的需求分析、对软件的需求分析、设计规格说明和编码的最后复审。设计规格说明和编码的最后复审。软件测试目标和任务软件测试目标和任务软件测试的方法软件测试的方法软件测试方法之白盒测试软件测试方法之白盒测试软件测试方法之黑盒测试软件测试方法之黑盒测试软件测试的步骤软件测试的步骤调试调试实例实例第第6章章 软件
2、测试软件测试软件测试的任务和目标软件测试的任务和目标 1、软件测试的目的:软件测试的目的:1963年,没过飞往火星的火年,没过飞往火星的火箭爆炸,损失¥箭爆炸,损失¥10million美元。原因:美元。原因:FORTRAN循环:循环:DO 5 I=1,3 误写为误写为DO 5 I=1.3 软件测试的任务和目标软件测试的任务和目标 目前软件开发结构,将研制力量的目前软件开发结构,将研制力量的40%以上投入到以上投入到软件测试之中。软件测试之中。微软微软Exchange 2000和和Windows 2000中的人员结构中的人员结构 Exchange Windows 2000 项目经理项目经理 25
3、人人 约约250人人 开发人员开发人员 140人人 约约1700人人 测试人员测试人员 350人人 约约3200人人 测试人员测试人员/开发人员开发人员 2.5 1.9软件测试的任务和目标软件测试的任务和目标 目前软件开发结构,将研制力量的目前软件开发结构,将研制力量的40%以上投入到以上投入到软件测试之中。软件测试之中。几个典型系统中软件测试的费用几个典型系统中软件测试的费用 系统名称系统名称 测试费用占软件开发预算的比例测试费用占软件开发预算的比例 SAGE 47%NAVAL TACTICAL 50%DATA SYSTEM GENINI 47%S ATURN V 44%软件测试的任务和目标
4、软件测试的任务和目标软件测试的目的:软件测试的目的:为什么需要这么多人、花这么多代价进行测试?目的何为什么需要这么多人、花这么多代价进行测试?目的何在?在?“证明程序正确!证明程序正确!”对吗?对吗?Myers对软件测试目的提出以下观点:对软件测试目的提出以下观点:1、软件测试是为了发现错误而运行程序的过程。、软件测试是为了发现错误而运行程序的过程。2、一个好的测试用例能够发现至今尚未发现的错误。、一个好的测试用例能够发现至今尚未发现的错误。3、一个成功的测试是发现了至今尚未发现的错误的测、一个成功的测试是发现了至今尚未发现的错误的测试。试。软件测试的任务和目标软件测试的任务和目标什么是软件测
5、试:什么是软件测试:软件测试的定义:软件测试是为了发现错误而运行软件测试的定义:软件测试是为了发现错误而运行程序的过程。是根据软件开发各阶段的规格说明和程序程序的过程。是根据软件开发各阶段的规格说明和程序内部结构精心设计一批测试用例,并利用这些用例去运内部结构精心设计一批测试用例,并利用这些用例去运行程序,以发现程序中的错误。行程序,以发现程序中的错误。软件测试的任务和目标软件测试的任务和目标软件测试的原则:软件测试的原则:(1)应当把)应当把“尽早地和不断地测试尽早地和不断地测试”作为开发者的座右铭作为开发者的座右铭(2)软件测试工作应该由独立的专业的软件测试机构来完成)软件测试工作应该由独
6、立的专业的软件测试机构来完成(3)测试工作要全面,但不可能实现)测试工作要全面,但不可能实现“穷举穷举”。(4)把)把Pareto原理应用到软件测试中。即对发现错误较多的程序段,原理应用到软件测试中。即对发现错误较多的程序段,应进行更深入的测试。应进行更深入的测试。(5)妥善保存一切测试过程文档,作用是不言而喻的,测试的重现性)妥善保存一切测试过程文档,作用是不言而喻的,测试的重现性往往要靠测试文档。往往要靠测试文档。(6)不要希望在极短的时间内完成一个高水平的测试。)不要希望在极短的时间内完成一个高水平的测试。(7)错误经过修改后,相关的测试必不可少。)错误经过修改后,相关的测试必不可少。软
7、件测试的任务和目标软件测试的任务和目标软件测试信息流:软件测试信息流:测试测试结果结果分析分析可靠性可靠性分析分析排错排错软件配置软件配置测试配置测试配置测试工具测试工具测试结果测试结果预期结果预期结果错误错误出错率出错率数据数据改正的软件改正的软件预测的可靠性预测的可靠性软件测试过程中的信息:软件测试过程中的信息:测试过程需要三类信息:测试过程需要三类信息:1、软件配置:包括需求规格说明、软件设计规格说明、源程序、软件配置:包括需求规格说明、软件设计规格说明、源程序等;等;2、测试配置:包括测试方案、测试用例、测试驱动程序等;、测试配置:包括测试方案、测试用例、测试驱动程序等;3、测试工具:
8、计算机辅助测试的有关工具。如测试数据自动生、测试工具:计算机辅助测试的有关工具。如测试数据自动生成工具、静态分析程序、动态分析程序、测试结果分析程序、驱动成工具、静态分析程序、动态分析程序、测试结果分析程序、驱动测试的测试数据库。测试的测试数据库。软件测试的任务和目标软件测试的任务和目标软件测试的范围软件测试的范围软件测试的对象软件测试的对象:软件测试不等于程序测试,对软件定义与开发的整个期软件测试不等于程序测试,对软件定义与开发的整个期间所得到的各种文档资料,都是测试对象,包括需求规格间所得到的各种文档资料,都是测试对象,包括需求规格说明、概要设计规格说明、详细设计规格说明、源程序等。说明、
9、概要设计规格说明、详细设计规格说明、源程序等。软件测试方法软件测试方法软件测试分类:软件测试分类:静态测试静态测试分为两大类:分为两大类:动态测试动态测试黑盒测试黑盒测试白盒测试白盒测试软件测试的工作软件测试的工作静态:静态:静态测试指被测程序不在机器上运行,而采用人工检静态测试指被测程序不在机器上运行,而采用人工检测和计算机辅助静态检测的手段对程序进行测试。测和计算机辅助静态检测的手段对程序进行测试。1、人工检测:人工审查程序或评审软件。人工审查程、人工检测:人工审查程序或评审软件。人工审查程序偏重于编码质量的检验,而人工评审软件除了审查编码序偏重于编码质量的检验,而人工评审软件除了审查编码
10、还要对各阶段的软件产品进行检验。人工检测可以发现计还要对各阶段的软件产品进行检验。人工检测可以发现计算机不易发现的错误,据统计人工检测可发现算机不易发现的错误,据统计人工检测可发现30%70%的逻辑设计和编码错误,从而减少系统测试的逻辑设计和编码错误,从而减少系统测试的总工作量。的总工作量。2、计算机辅助静态检测:利用静态检测工具对程序进行、计算机辅助静态检测:利用静态检测工具对程序进行测试。测试。软件测试的工作软件测试的工作动态:动态:动态测试是通过运行程序发现错误。动态测试是通过运行程序发现错误。一般意义上的测试都是动态测试。为使测试发现尽可能多的一般意义上的测试都是动态测试。为使测试发现
11、尽可能多的错误错误,动态测试时需采用一些有效的方法。一般有两种方法:一动态测试时需采用一些有效的方法。一般有两种方法:一是测试产品的功能,二是测试产品的内部结构和处理程。分别称是测试产品的功能,二是测试产品的内部结构和处理程。分别称为黑盒测试和白盒测试。为黑盒测试和白盒测试。软件测试方法之白盒测试软件测试方法之白盒测试白盒测试:白盒测试:白盒测试也称为结构测试或逻辑驱动测试,所以被测对象基本上是源白盒测试也称为结构测试或逻辑驱动测试,所以被测对象基本上是源程序,以程序的内部结构为基础,设计测试用例。程序,以程序的内部结构为基础,设计测试用例。1、逻辑覆盖:、逻辑覆盖:追求程序内部的逻辑覆盖程度
12、,当程序中有循环时,覆盖每条路径是追求程序内部的逻辑覆盖程度,当程序中有循环时,覆盖每条路径是不可能的,要设计使覆盖程度较高的或覆盖有代表性的路径的测试用例。不可能的,要设计使覆盖程度较高的或覆盖有代表性的路径的测试用例。(A1)AND(B=0)(A=2)OR(X1)语句段语句段语句段语句段TFFT12345如右图:一个被测如右图:一个被测程序的流程图。程序的流程图。软件测试方法软件测试方法常用的覆盖技术有:常用的覆盖技术有:(1)语句覆盖:)语句覆盖:为了提高发现错误的可能性,在测试时应该执行到程序中的每一个语为了提高发现错误的可能性,在测试时应该执行到程序中的每一个语句。语句覆盖是指设计足
13、够的测试用例,使被测程序的每个语句至少执行一句。语句覆盖是指设计足够的测试用例,使被测程序的每个语句至少执行一次。次。(A1)AND(B=0)(A=2)OR(X1)语句段语句段TFFT12345 测试路径为测试路径为1-2-4,即可保证每,即可保证每个语句至少执行一次。所以测试用例个语句至少执行一次。所以测试用例为:为:A=2、B=0、X=3。程序每个程序每个语句都能执行,语句覆盖似乎全面地语句都能执行,语句覆盖似乎全面地检查了每个语句,但该测试用例只检检查了每个语句,但该测试用例只检查了逻辑表达式为查了逻辑表达式为“真真”的情况,如的情况,如将将“AND”错写为错写为“OR”、X1错错写为写
14、为X1)AND(B=0)(A=2)OR(X1)语句段语句段TFFT12345 测试路径只要测试路径只要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)。)。对于多对于多分支的判定,判定覆盖要使得每一个判定分支的判定,判定覆盖要使得每一个判定表达式获得每一个可能的值。判定覆盖比表达式获得每一个可能的值。判定覆盖比语句覆盖严格,若通过各个分支,各个语语句覆盖严格,若通过各个分支,各个语句也执行了。但该测试仍不充分,上述数句也执行了。但该测试仍不充分,上述
15、数据只覆盖了全部路径的一半,如将据只覆盖了全部路径的一半,如将X1错写为错写为X1 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)软件测试方法软件测试方法常用的覆盖技术有:常用的覆盖
16、技术有:(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)以上两组数据覆盖了判定表达式中的所有条件的可能取值,但只覆盖了以上两组数据覆盖了判定表达式中的所有条件的可能
17、取值,但只覆盖了 第一个判定表达式的取第一个判定表达式的取“假假”分支和第二个判定表达式的取分支和第二个判定表达式的取“真真”分支,此分支,此例不满足判定覆盖。所以满足条件覆盖不一定满足判定覆盖。为了解决此问例不满足判定覆盖。所以满足条件覆盖不一定满足判定覆盖。为了解决此问题,需要对条件和分支兼顾。题,需要对条件和分支兼顾。软件测试方法软件测试方法常用的覆盖技术有:常用的覆盖技术有:(4)判定)判定/条件覆盖:条件覆盖:该覆盖标准是指设计足够的测试用例,使被测程序的每个判定表达式中该覆盖标准是指设计足够的测试用例,使被测程序的每个判定表达式中每个条件的各种可能的值至少出现一次。并使每个判定表达
18、式所有可能的结每个条件的各种可能的值至少出现一次。并使每个判定表达式所有可能的结果也至少出现一次。对该例程序,可选择以下两组数据达到判定果也至少出现一次。对该例程序,可选择以下两组数据达到判定/条件覆盖条件覆盖标准:标准:A=2,B=0,X=3 A=1,B=1,X=1 从表面上看,判定从表面上看,判定/条件覆盖测试了所有条件的取值,但实际上条件条件覆盖测试了所有条件的取值,但实际上条件组合中的某些条件会抑制其它的条件,如组合中的某些条件会抑制其它的条件,如“与与”运算的判定表达式中,第一运算的判定表达式中,第一个条件为个条件为“假假”,则这个表达式后面的几个条件均不起作用,后面的表达式,则这个
19、表达式后面的几个条件均不起作用,后面的表达式中的错误也就测试不出来。中的错误也就测试不出来。软件测试方法软件测试方法(5)条件组合覆盖:)条件组合覆盖:该覆盖标准是指设计足够的测试用例,使被测程序的每个判定表达式中每该覆盖标准是指设计足够的测试用例,使被测程序的每个判定表达式中每个条件的各种可能的值的组合至少出现一次。条件组合覆盖是较强的覆盖标准。个条件的各种可能的值的组合至少出现一次。条件组合覆盖是较强的覆盖标准。该例中,两个判定表达式共有该例中,两个判定表达式共有4个条件,有个条件,有8种组合:种组合:A1,B=0;A1,B0;A1,B=0;A1,B0;A=2,X1;A=2,X1;A2,X
20、1;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路径没有覆盖。路径没有覆盖。软件测试方法软件
21、测试方法(6)路径覆盖:)路径覆盖:该覆盖标准是指设计足够的测试用例,覆盖被测程序中所有可能路径:该覆盖标准是指设计足够的测试用例,覆盖被测程序中所有可能路径:该例可选择以下测试用例,覆盖程序中的该例可选择以下测试用例,覆盖程序中的4条路径:条路径:A=2,B=0,X=2;覆盖路径覆盖路径124,条件组合,条件组合;A=2,B=1,X=1;覆盖路径覆盖路径134,条件组合,条件组合;A=1,B=1,X=1;覆盖路径覆盖路径135,条件组合,条件组合;A=3,B=0,X=1;覆盖路径覆盖路径125,条件组合,条件组合;显然,该测试满足路径覆盖,但没有满足条件组合覆盖。显然,该测试满足路径覆盖,但
22、没有满足条件组合覆盖。软件测试方法软件测试方法六种覆盖的比较:六种覆盖的比较:语句覆盖语句覆盖 每条语句至少执行一次每条语句至少执行一次 判定覆盖判定覆盖 每个判定的每个分支至少执行一次每个判定的每个分支至少执行一次条件覆盖条件覆盖 每个判定的每个条件应取到各种可能的值每个判定的每个条件应取到各种可能的值判定判定/条件覆盖条件覆盖 同时满足判定覆盖和条件覆盖同时满足判定覆盖和条件覆盖条件组合覆盖条件组合覆盖 每个判定中各条件的每一种组合至少出现一次每个判定中各条件的每一种组合至少出现一次路径覆盖路径覆盖 使程序中每一条可能的路径至少执行一次使程序中每一条可能的路径至少执行一次发现错误能力发现错
23、误能力弱弱强强软件测试方法软件测试方法2、控制结构测试、控制结构测试(1)基本路径测试基本思想)基本路径测试基本思想 在给出程序控制流图的基础之上,分析控制结构的环路在给出程序控制流图的基础之上,分析控制结构的环路复杂度,导出基本可执行路径集合,并把覆盖路径数压复杂度,导出基本可执行路径集合,并把覆盖路径数压缩到一定限度内,保证程序中的循环体最多执行一次,缩到一定限度内,保证程序中的循环体最多执行一次,设计出的测试用例保证在测试中,程序的每条可执行语设计出的测试用例保证在测试中,程序的每条可执行语句至少执行一次,并且每个条件在执行时都将分别取真、句至少执行一次,并且每个条件在执行时都将分别取真
24、、假两种值。假两种值。软件测试方法软件测试方法2、控制结构测试、控制结构测试(1)基本路径测试)基本路径测试 画出程序的控制流图画出程序的控制流图 计算程序环路复杂度计算程序环路复杂度 确定独立路径的基本集合确定独立路径的基本集合 设计测试用例设计测试用例软件测试方法软件测试方法2、控制结构测试示例、控制结构测试示例流程图流图软件测试方法软件测试方法2、控制结构测试、控制结构测试(2)条件测试)条件测试 条件测试重点测试程序中的每个条件,通过检测程序条件中的错条件测试重点测试程序中的每个条件,通过检测程序条件中的错误,来发现程序中的其它错误误,来发现程序中的其它错误.主要是测试组成条件的各个成
25、分的正确性,条件可能是一个布尔主要是测试组成条件的各个成分的正确性,条件可能是一个布尔变量、一个关系表达式或是由两个或多个简单条件、布尔运算符和括变量、一个关系表达式或是由两个或多个简单条件、布尔运算符和括弧组成的复杂条件弧组成的复杂条件,最简单的条件测试策略应该是分支测试,分支测最简单的条件测试策略应该是分支测试,分支测试主要是保证条件中的每个简单条件,以及取真、取假的分支都至少试主要是保证条件中的每个简单条件,以及取真、取假的分支都至少执行一次。执行一次。软件测试方法软件测试方法2、控制结构测试、控制结构测试(3)循环测试)循环测试 根据循环的复杂性,可分为简单循环、嵌套循环和串接循环三根
26、据循环的复杂性,可分为简单循环、嵌套循环和串接循环三种种:软件测试方法软件测试方法2、控制结构测试、控制结构测试(3)循环测试)循环测试 根据循环的复杂性,可分为简单循环、嵌套循环和串接循环三种根据循环的复杂性,可分为简单循环、嵌套循环和串接循环三种 1)简单循环简单循环简单循环可依据以下顺序分别设计测试用例进行测试:简单循环可依据以下顺序分别设计测试用例进行测试:零次循环:从循环入口到出口;零次循环:从循环入口到出口;一次循环:检查循环初始值;一次循环:检查循环初始值;二次循环:检查二次循环:检查2次循环;次循环;m次循环:检查次循环:检查m次循环,其中次循环,其中m小于最大次数减小于最大次
27、数减1;进行最大次数循环、比最大次数多一次、少一次的循环。进行最大次数循环、比最大次数多一次、少一次的循环。软件测试方法软件测试方法(3)循环测试)循环测试 根据循环的复杂性,可分为简单循环、嵌套循环和串接循环三种根据循环的复杂性,可分为简单循环、嵌套循环和串接循环三种 2)嵌套循环嵌套循环使用使用B.Beizer提出的测试方法,可以减少测试数目:提出的测试方法,可以减少测试数目:对最内层循环做简单循环的全部测试。所有其它层的循环变量置对最内层循环做简单循环的全部测试。所有其它层的循环变量置为最小值;为最小值;逐步外推,对其外面一层循环进行测试。测试时保持当前层的所逐步外推,对其外面一层循环进
28、行测试。测试时保持当前层的所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取量取“典型典型”值,同时考虑增加越界值和非法值的测试。值,同时考虑增加越界值和非法值的测试。反复进行,直到所有各层循环测试完毕。反复进行,直到所有各层循环测试完毕。软件测试方法软件测试方法2、控制结构测试、控制结构测试(3)循环测试)循环测试 根据循环的复杂性,可分为简单循环、嵌套循环和串接循环三根据循环的复杂性,可分为简单循环、嵌套循环和串接循环三种种:3)串接循环串接循环 如果各个循环互相独立,则可以用与简单循环相同的方法进行如果各个循环互相独
29、立,则可以用与简单循环相同的方法进行测试。但如果几个循环不是互相独立的,第二个循环的执行与第一测试。但如果几个循环不是互相独立的,第二个循环的执行与第一个循环的某个值有关,则需要使用测试嵌套循环的办法来处理。个循环的某个值有关,则需要使用测试嵌套循环的办法来处理。软件测试的方法软件测试的方法黑盒测试法黑盒测试法 “黑盒黑盒”测试也称为功能测试或数据驱动测试,它把程序看测试也称为功能测试或数据驱动测试,它把程序看成是一个黑盒子,不考虑程序的内部结构和处理过程的测试方法。成是一个黑盒子,不考虑程序的内部结构和处理过程的测试方法。它检查的内容只包括程序功能是否能按照规格说明书的内容正常它检查的内容只
30、包括程序功能是否能按照规格说明书的内容正常使用,程序是否接收输入数据产生正确的输出信息使用,程序是否接收输入数据产生正确的输出信息 方法有:等价类划分法、边界值分析法和错误推测法方法有:等价类划分法、边界值分析法和错误推测法 1、等价类划分:、等价类划分:等价类:指某个输入域的子集合,在该集合中,各个输入数等价类:指某个输入域的子集合,在该集合中,各个输入数据对暴露程序中的错误是等效的。即如果使用某个等价类中的一据对暴露程序中的错误是等效的。即如果使用某个等价类中的一个输入条件,作为测试数据检测出了错误,则用这一等价类中的个输入条件,作为测试数据检测出了错误,则用这一等价类中的其它数据进行测试
31、会发现同样的错误,反之亦然。其它数据进行测试会发现同样的错误,反之亦然。软件测试的方法软件测试的方法黑盒测试法黑盒测试法1、等价类划分:、等价类划分:等价类划分的含义:将输入数据域按有效的或无效的(或称合理的等价类划分的含义:将输入数据域按有效的或无效的(或称合理的或不合理的)划分成若干类,通过测试每个类的代表值,进行测试。如或不合理的)划分成若干类,通过测试每个类的代表值,进行测试。如果某个等价类中任选一个测试用例,未发现程序错误,则该类中的其他果某个等价类中任选一个测试用例,未发现程序错误,则该类中的其他测试用例,也不会发现程序错误。这样用少量有代表性的例子可代替大测试用例,也不会发现程序
32、错误。这样用少量有代表性的例子可代替大量测试目的相同的例子,有效地提高测试效率。量测试目的相同的例子,有效地提高测试效率。步骤:步骤:划分等价类划分等价类 有效等价类:对程序规格来说是正确的,有意义的数据;有效等价类:对程序规格来说是正确的,有意义的数据;无效等价类:对程序规格来说是错误的,无意义的数据。无效等价类:对程序规格来说是错误的,无意义的数据。软件测试的方法软件测试的方法黑盒测试法黑盒测试法1、等价类划分:、等价类划分:确定测试用例确定测试用例,选取的原则:,选取的原则:1)为每个等价类规定一个唯一的编号;)为每个等价类规定一个唯一的编号;2)设计一个测试用例,使其尽可能多的覆盖尚未
33、被覆盖)设计一个测试用例,使其尽可能多的覆盖尚未被覆盖的有效等价类,重复此步骤,直到所有的有效等价类均被覆盖的有效等价类,重复此步骤,直到所有的有效等价类均被覆盖为止;为止;3)设计一个测试用例,使其尽可能多的覆盖尚未被覆盖)设计一个测试用例,使其尽可能多的覆盖尚未被覆盖的无效等价类,重复此步骤,直到所有的无效等价类均被覆盖的无效等价类,重复此步骤,直到所有的无效等价类均被覆盖为止;为止;软件测试方法软件测试方法黑盒测试法黑盒测试法2、边界值分析:、边界值分析:边界值分析也是一种黑盒测试法,是对等价类划分法的补充。边界值分析也是一种黑盒测试法,是对等价类划分法的补充。实践经验表明,程序往往在处
34、理边界情况时发生错误。边界实践经验表明,程序往往在处理边界情况时发生错误。边界情况指输入等价类、输出等价类边界上的情况。检查边界情况的情况指输入等价类、输出等价类边界上的情况。检查边界情况的测试用例是比较高效的,可以查出更多的错误。测试用例是比较高效的,可以查出更多的错误。选取刚好等于、刚好大于、刚好小于边界的值作为测试用例。选取刚好等于、刚好大于、刚好小于边界的值作为测试用例。软件测试方法软件测试方法黑盒测试法黑盒测试法2、边界值分析选取测试用例是应遵循的原则:、边界值分析选取测试用例是应遵循的原则:(1)如果输入条件规定了取值的范围,应该以范围的边界值及)如果输入条件规定了取值的范围,应该
35、以范围的边界值及刚刚超范围边界值作为测试数据。刚刚超范围边界值作为测试数据。(2)若规定了输入值的个数,分别满足条件的个数及稍小于、)若规定了输入值的个数,分别满足条件的个数及稍小于、稍大于当前各数值作为测试数据。稍大于当前各数值作为测试数据。(3)针对每个输入条件使用上述()针对每个输入条件使用上述(1)、()、(2)原则。)原则。(4)如果程序规格说明书中提到的输入或输出域是个有序的集)如果程序规格说明书中提到的输入或输出域是个有序的集合,就应该注意选取有序集的第一个和最后一个元素作为测试用合,就应该注意选取有序集的第一个和最后一个元素作为测试用例。例。(5)分析规格说明书,找出其他可能的
36、边界条件。)分析规格说明书,找出其他可能的边界条件。软件测试方法软件测试方法黑盒测试法黑盒测试法3、错误推测:、错误推测:错误推测法的基本思想:是列举出程序中可能有的错误和错误推测法的基本思想:是列举出程序中可能有的错误和容易发生错误的特殊情况,并根据它们选择测试方案。容易发生错误的特殊情况,并根据它们选择测试方案。有经验的程序员通常可根据程序的特点和功能选择测试数有经验的程序员通常可根据程序的特点和功能选择测试数据,这些数据可能导致程序出现错误。据,这些数据可能导致程序出现错误。软件测试步骤软件测试步骤软件测试策略:软件测试策略:测试过程分为测试过程分为4个步骤:个步骤:单元测试单元测试 组
37、装测试组装测试 确认测试确认测试 系统测试系统测试单元单元测试测试单元单元测试测试单元单元测试测试被测模块被测模块被测模块被测模块被测模块被测模块组装组装测试测试设计信息设计信息确认确认测试测试系统系统测试测试已集成的已集成的软件软件已确认的已确认的软件软件可交付的可交付的软件软件软件需求软件需求系统其它系统其它元素元素已测试已测试模块模块软件测试步骤软件测试步骤1、单元测试、单元测试 单元测试也称模块测试,是针对软件设计的最小单元单元测试也称模块测试,是针对软件设计的最小单元程序模块进行测试的工作。目的是发现模块内部的错误程序模块进行测试的工作。目的是发现模块内部的错误。单元测试主要从以下五
38、个方面进行。单元测试主要从以下五个方面进行。(1)模块接口测试)模块接口测试(2)局部数据结构测试)局部数据结构测试(3)路径测试)路径测试(4)程序异常测试)程序异常测试(5)边界条件测试)边界条件测试软件测试步骤软件测试步骤2、集成测试 集成测试也称组装测试,它的任务是按照一定的策略对单元测集成测试也称组装测试,它的任务是按照一定的策略对单元测试的模块进行组装,并在组装过程中进行模块接口与系统功能测试。试的模块进行组装,并在组装过程中进行模块接口与系统功能测试。(1)一次性组装方式)一次性组装方式 一次性组装方式的基本思想是首先分别测试每个模块,然后将一次性组装方式的基本思想是首先分别测试
39、每个模块,然后将所有模块全部组装起来进行测试,形成最终的软件系统。所有模块全部组装起来进行测试,形成最终的软件系统。缺点:缺点:一次将所有模块组装后的程序会很庞大,各模块之间相互影响,一次将所有模块组装后的程序会很庞大,各模块之间相互影响,情况十分复杂情况十分复杂 在测试过程中会同时出现很多错误,对这些错误的定位难度增在测试过程中会同时出现很多错误,对这些错误的定位难度增大,修改的过程中可能又会引发其它错误或激发其它潜在的错误大,修改的过程中可能又会引发其它错误或激发其它潜在的错误 测试工作十分的漫长。测试工作十分的漫长。软件测试步骤软件测试步骤(2)增殖式组装方式)增殖式组装方式 增殖式组装
40、方式是采用循序渐进的方式,每次增加一个模块到已测增殖式组装方式是采用循序渐进的方式,每次增加一个模块到已测试好的模块中试好的模块中 1)自顶向下增殖方式自顶向下增殖方式具体的实施步骤如下:具体的实施步骤如下:先测试主控制模块,测试时使用存根模块代替所有直接附属主控先测试主控制模块,测试时使用存根模块代替所有直接附属主控制模块的功能模块;制模块的功能模块;用某种结合策略,用实际模块代替相应的存根模块;用某种结合策略,用实际模块代替相应的存根模块;对结合后的模块进行测试;对结合后的模块进行测试;为了保证加入的模块没有引进新的错误,需要进行回归测试为了保证加入的模块没有引进新的错误,需要进行回归测试
41、 重复操作重复操作2 2、3 3、4 4步,完成集成测试。步,完成集成测试。软件测试步骤软件测试步骤2、集成测试(2)增殖式组装方式)增殖式组装方式 2)自底向上增殖方式自底向上增殖方式具体的结合策略如下:具体的结合策略如下:将低层模块组合成实现某个子功能的簇;将低层模块组合成实现某个子功能的簇;写一个驱动程序,用来提供该功能簇的执行入口和输入写一个驱动程序,用来提供该功能簇的执行入口和输入/输出界面;输出界面;对该功能簇进行测试;对该功能簇进行测试;在低层继续寻找模块,将该功能簇扩大,重新修改驱动程序,以在低层继续寻找模块,将该功能簇扩大,重新修改驱动程序,以适应对当前功能簇的测试。适应对当
42、前功能簇的测试。不断重复第不断重复第3、4步,完成测试。步,完成测试。软件测试步骤软件测试步骤2、集成测试 (3)混合增殖式测试混合增殖式测试 自顶向下增殖方式和自底向上增殖方式各有优缺点,在实际的测自顶向下增殖方式和自底向上增殖方式各有优缺点,在实际的测试过程中,可根据具体情况将两种方法结合起来使用。试过程中,可根据具体情况将两种方法结合起来使用。1)改进的自顶向下的增殖测试:它的基本思想是对涉及输入改进的自顶向下的增殖测试:它的基本思想是对涉及输入输出模块和复杂算法的模块先采用自底向上的测试方法,将这些模输出模块和复杂算法的模块先采用自底向上的测试方法,将这些模块组装成为功能相对完整且相对
43、独立的子系统,然后由主模块开始块组装成为功能相对完整且相对独立的子系统,然后由主模块开始自顶向下进行增殖测试。自顶向下进行增殖测试。2)混合测试法:它首先对软件结构中较底层的模块自底向上组混合测试法:它首先对软件结构中较底层的模块自底向上组装测试,然后对软件结构中较上层的模块采用自顶向下的方法进行装测试,然后对软件结构中较上层的模块采用自顶向下的方法进行组装与测试。组装与测试。3)回归测试:采用自顶向下的方式测试时,每次结合新的模块,)回归测试:采用自顶向下的方式测试时,每次结合新的模块,进行回归测试进行回归测试软件测试步骤软件测试步骤3、确认测试确认测试 确认测试也称有效性测试,目的是验证软
44、件的有效性,即验确认测试也称有效性测试,目的是验证软件的有效性,即验证软件的证软件的功能和性能及其它特性是否符合用户要求功能和性能及其它特性是否符合用户要求。软件功能主。软件功能主要参照用户说明书。要参照用户说明书。确认测试是软件交付使用前一项很重要的活确认测试是软件交付使用前一项很重要的活动,它最终决定用户对该软件的认可程度。动,它最终决定用户对该软件的认可程度。测试和测试和测试测试 测试是邀请用户参加,在开发场地进行的测试,由开发组测试是邀请用户参加,在开发场地进行的测试,由开发组成员或用户实际操作运行,对测试过程中出现的问题,由开发者成员或用户实际操作运行,对测试过程中出现的问题,由开发
45、者记录下来,作为修改的依据。记录下来,作为修改的依据。它的最大特点是整个测试过程是在受控环境下进行。它的最大特点是整个测试过程是在受控环境下进行。软件测试步骤软件测试步骤3、确认测试确认测试测试和测试和测试测试 测试是由部分用户在实际的使用环境下进行的测试。测试测试是由部分用户在实际的使用环境下进行的测试。测试过程中开发者不在现场,由用户独立操作,验证程序的各项功能,过程中开发者不在现场,由用户独立操作,验证程序的各项功能,用户发现的问题全部记录下来,反馈给程序开发者,开发者对软用户发现的问题全部记录下来,反馈给程序开发者,开发者对软件进行必要的修改,并准备最终的软件产品发布。件进行必要的修改
46、,并准备最终的软件产品发布。测试的最大特点是实际的使用环境下进行的测试。测试的最大特点是实际的使用环境下进行的测试。确认测试的结果可分为两种情况:确认测试的结果可分为两种情况:测试结果与预期结果相符,程序的功能和性能满足用户需求;测试结果与预期结果相符,程序的功能和性能满足用户需求;测试结果与预期结果不相符,将存在的问题列出清单,提供给测试结果与预期结果不相符,将存在的问题列出清单,提供给开发者作为修改依据。开发者作为修改依据。软件测试步骤软件测试步骤4、系统测试系统测试 系统测试的任务主要有:测试软件系统是否能与硬件协调工作,系统测试的任务主要有:测试软件系统是否能与硬件协调工作,测试与其它
47、软件协调运行的状况。测试与其它软件协调运行的状况。系统测试的系统测试的目的是充分运行系统,验证系统各部件是否都能正目的是充分运行系统,验证系统各部件是否都能正常工作并完成所赋予的任务。常工作并完成所赋予的任务。(1)恢复测试:)恢复测试:主要检查系统的容错能力。主要检查系统的容错能力。(2)安全测试:)安全测试:主要检查系统对非法侵入的防范能力。主要检查系统对非法侵入的防范能力。(3)强度测试:)强度测试:主要检查程序在一些极限条件下的运行情况。主要检查程序在一些极限条件下的运行情况。(4)性能测试:)性能测试:主要检查系统是否满足需求说明书中规定的性能。主要检查系统是否满足需求说明书中规定的
48、性能。(5)其它:)其它:版本间的兼容性测试、安装测试,最终提交的文档测版本间的兼容性测试、安装测试,最终提交的文档测试等试等。软件调试软件调试调试调试(debug,排错排错)调试功能是将在测试过程中出现的错误进一步的诊断并且改正调试功能是将在测试过程中出现的错误进一步的诊断并且改正程序中存在的潜在错误,保证软件运行的正确性和可靠性。程序中存在的潜在错误,保证软件运行的正确性和可靠性。软件调试活动主要分为以下两部分软件调试活动主要分为以下两部分:确定程序中可疑错误的确切性质和位置。确定程序中可疑错误的确切性质和位置。对程序的设计和编码进行修改,纠正当前错误。对程序的设计和编码进行修改,纠正当前
49、错误。调试的过程如下:调试的过程如下:确定出错原因确定出错原因-找出错误的位置找出错误的位置-排除这个错误排除这个错误-重复重复对修改后的代码进行有关测试对修改后的代码进行有关测试-修正无效或是引入了新的错误,修正无效或是引入了新的错误,撤销此次改动或是修改新的错误。撤销此次改动或是修改新的错误。不断重复上述过程,直到找到一个有效的解决办法为止不断重复上述过程,直到找到一个有效的解决办法为止 软件调试软件调试调试方法调试方法1、原始法调试、原始法调试 主要思想是通过分析运行程序时数据信息的变化情况查找错主要思想是通过分析运行程序时数据信息的变化情况查找错误原因误原因:(1)打印内存的全部数据)
50、打印内存的全部数据 (2)添加必要的打印语句)添加必要的打印语句 (3)使用自动调试工具)使用自动调试工具 设置断点设置断点 单步执行单步执行软件调试软件调试调试方法调试方法2、回溯法调试、回溯法调试 回溯调试的回溯调试的方法是从出现错误征兆处开始,人工沿控制流程往方法是从出现错误征兆处开始,人工沿控制流程往回追踪程序代码,直至发现出错的根源回追踪程序代码,直至发现出错的根源或确定错误产生的范围或确定错误产生的范围。适用于较小程序,它能将错误范围缩小到程序中的一小段代码,适用于较小程序,它能将错误范围缩小到程序中的一小段代码,使得定位错误相对容易;使得定位错误相对容易;对于大程序,它回溯的路径
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。