实现(第六版)(张海潘编著)_第1页
实现(第六版)(张海潘编著)_第2页
实现(第六版)(张海潘编著)_第3页
实现(第六版)(张海潘编著)_第4页
实现(第六版)(张海潘编著)_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

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

文档简介

1、第第7章章 实现实现7.1 编码编码7.2 软件测试基础软件测试基础7.3 单元测试单元测试7.4 集成测试集成测试7.5 确认测试确认测试7.6 白盒测试技术白盒测试技术7.7 黑盒测试技术黑盒测试技术7.8 调试调试7.9 软件可靠性软件可靠性 n通常把编码和测试统称为实现。通常把编码和测试统称为实现。n所谓编码就是把软件设计结果翻译成用某种程序设计所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。语言书写的程序。n软件测试在软件生命周期中横跨两个阶段。软件测试在软件生命周期中横跨两个阶段。q通常在编写出每个模块之后就对它做单元测试。通常在编写出每个模块之后就对它做单元测试。q

2、在这个阶段结束之后,对软件系统还应该进行各种综合测试,在这个阶段结束之后,对软件系统还应该进行各种综合测试,通常由专门的测试人员承担这项工作。通常由专门的测试人员承担这项工作。n通过测试发现错误之后还必须诊断并改正错误,这就通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。调试是测试阶段最困难的工作。是调试的目的。调试是测试阶段最困难的工作。n在对测试结果进行收集和评价的时候,使用故障率数在对测试结果进行收集和评价的时候,使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠据,估计软件将来出现故障的情况并预测软件的可靠性。性。 通常把编码和测试统称为实现。通常把编码和测试统称为

3、实现。所谓编码就是把软件设计结果翻译成用某种程序所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。设计语言书写的程序。作为软件工程过程的一个阶段,编码是对设计的作为软件工程过程的一个阶段,编码是对设计的进一步具体化,因此,程序的质量主要取决于进一步具体化,因此,程序的质量主要取决于软软件设计的质量。件设计的质量。但是,所选用的程序设计语言的特点及但是,所选用的程序设计语言的特点及编码风格也将对程序的可靠性、可读性、编码风格也将对程序的可靠性、可读性、可测试性和可维护性产生深远的影响。可测试性和可维护性产生深远的影响。在开发大型软件系统的漫长过程中,面对着极其错在开发大型软件系统的漫

4、长过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符合客观综复杂的问题,人的主观认识不可能完全符合客观现实,与工程密切相关的各类人员之间的通信和配现实,与工程密切相关的各类人员之间的通信和配合也不可能完美无缺,合也不可能完美无缺,我们力求在每个阶段结束之前通过严格的技术审查,我们力求在每个阶段结束之前通过严格的技术审查,尽可能早地发现并纠正差错;尽可能早地发现并纠正差错;但是,经验表明审查但是,经验表明审查并不能发现所有差错,此外在编码过程中还不可避并不能发现所有差错,此外在编码过程中还不可避免地会引入新的错误免地会引入新的错误。因此,在软件生命周期的每个阶因此,在软件生命周期的每个阶

5、段都不可避免地会产生差错。段都不可避免地会产生差错。如果在软件投入生产性运行之前,没有发现并纠正如果在软件投入生产性运行之前,没有发现并纠正软件中的大部分差错,则这些差错迟早会在生产过软件中的大部分差错,则这些差错迟早会在生产过程中暴露出来。程中暴露出来。测试的目的测试的目的就是在软件投入生产性运行之前,尽可就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。能多地发现软件中的错误。那时不仅改正这些错误的代价更高,那时不仅改正这些错误的代价更高,而且往往会造成很恶劣的后果。而且往往会造成很恶劣的后果。目前软件测试仍然是保证软件质量的关键步骤,它是目前软件测试仍然是保证软件质量的关键步骤,

6、它是对软件规格说明、设计和编码的最后复审。对软件规格说明、设计和编码的最后复审。软件测试在软件生命周期中横跨两个阶段。软件测试在软件生命周期中横跨两个阶段。(1)(1)通常在编写出每个模块之后就对它做必要的测通常在编写出每个模块之后就对它做必要的测试试( (称为称为单元测试单元测试) )。(2)(2)在这个阶段结束之后,对软件系统还应该进行在这个阶段结束之后,对软件系统还应该进行各种各种综合测试综合测试。模块的编写者和测试者是同一模块的编写者和测试者是同一个人,编码和单元测试属于软个人,编码和单元测试属于软件生命周期的同一个阶段件生命周期的同一个阶段.这是软件生命周期中的另一个这是软件生命周期

7、中的另一个独立的阶段,通常由专门的测独立的阶段,通常由专门的测试人员承担这项工作试人员承担这项工作.大量统计资料表明,大量统计资料表明,软件测试的工作量软件测试的工作量往往占软件往往占软件开发总工作量的开发总工作量的40%40%以上。以上。因此,必须高度重视软件测试工作,绝不要以为写因此,必须高度重视软件测试工作,绝不要以为写出程序之后软件开发工作就接近完成了,实际上,出程序之后软件开发工作就接近完成了,实际上,大约还有同样多的开发工作量需要完成。大约还有同样多的开发工作量需要完成。在极端情况,测试那种关系人的生命安全在极端情况,测试那种关系人的生命安全的软件所花费的成本,可能相当于软件工的软

8、件所花费的成本,可能相当于软件工程其他开发步骤总成本的程其他开发步骤总成本的3倍到倍到5倍。倍。防不胜防的软件错误防不胜防的软件错误 例例:1963年年, 美国美国, 飞往火星的火箭爆炸飞往火星的火箭爆炸, 损失损失1千千万美元万美元.原因原因: FORTRAN循环循环 DO 5 I = 1, 3 误写为误写为 DO 5 I = 1.3w 软件测试是保证软件质量的关键步骤,是对软软件测试是保证软件质量的关键步骤,是对软件规格说明、设计和编码的最后复审件规格说明、设计和编码的最后复审o软件测试技术要求不高,至少比编程容易多了软件测试技术要求不高,至少比编程容易多了对软件测试的误解对软件测试的误解

9、o软件测试随便找一个能力差的人就能做软件测试随便找一个能力差的人就能做o有时间就多测一些,来不及就少测一些有时间就多测一些,来不及就少测一些o软件测试是测试人员的事,与开发人员无关软件测试是测试人员的事,与开发人员无关把证明程序无错当作测试目的不仅是不正确的把证明程序无错当作测试目的不仅是不正确的, 完全做不到的,而且对做好测试没有任何益处完全做不到的,而且对做好测试没有任何益处,甚至是,甚至是十分有害的十分有害的.软件测试要设法使软件发生故障,暴露软件错误。软件测试要设法使软件发生故障,暴露软件错误。测试的测试的“成功成功”与与“失败失败” w能够发现错误的测试是成功的测试能够发现错误的测试

10、是成功的测试w否则是失败的测试。否则是失败的测试。“测试的目的是说明程序正确地执行它应有测试的目的是说明程序正确地执行它应有的功能的功能” 这种说法正确吗?这种说法正确吗?n例:程序例:程序Triangle,输入三个整数,表示一个三,输入三个整数,表示一个三角形的三个边长,该程序产生一个结果,指出角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等腰三角形还是不等该三角形是等边三角形、等腰三角形还是不等边三角形。边三角形。n 为说明其能正确执行它的功能,可使用为说明其能正确执行它的功能,可使用“测试测试用例用例”(3,4,5),(5,5,6),(6,6,6), n程序都能给出正确结

11、果,是否就可认为程序是程序都能给出正确结果,是否就可认为程序是正确的正确的仅就测试而言,它的目标是发现软件中的错误。仅就测试而言,它的目标是发现软件中的错误。软件工程的根本目标是开发出高质量的完全符合用软件工程的根本目标是开发出高质量的完全符合用户需要的软件户需要的软件,因此,通过测试发现错误之后还必因此,通过测试发现错误之后还必须诊断并改正错误,这就是须诊断并改正错误,这就是调试调试的目的。的目的。在对测试结果进行收集和评价的时候,软件所达到在对测试结果进行收集和评价的时候,软件所达到的可靠性也开始明朗了。的可靠性也开始明朗了。但是,发现错误并不是最终目的但是,发现错误并不是最终目的调试是测

12、试阶段最困难的工作。调试是测试阶段最困难的工作。7.1 编码编码7.1.1 选择程序设计语言选择程序设计语言n机器语言,几乎不使用。机器语言,几乎不使用。n汇编语言,特殊场合使用。汇编语言,特殊场合使用。n高级语言,明显优于汇编语言。高级语言,明显优于汇编语言。 程序设计语言的划代:程序设计语言的划代: 划代划代语言语言特点特点级别级别1GL机器语言机器语言程序不直观,编程出错率高程序不直观,编程出错率高运行效率高运行效率高低级低级2GL汇编语言汇编语言比机器语言直观,减少了出错率比机器语言直观,减少了出错率与机器码一样长与机器码一样长特殊情况下才使用特殊情况下才使用3GLBASICPASCA

13、LC、C+等等利用类英语的语句和命令利用类英语的语句和命令一条语句相当于一条语句相当于5-10条机器码条机器码要规定详细的算法过程要规定详细的算法过程高级高级4GL数据库查询语言数据库查询语言程序生成器程序生成器图形语言图形语言与自然语言接近与自然语言接近一条语句相当于一条语句相当于30-50条机器码条机器码非过程化问题定义非过程化问题定义运行开销大,效率低运行开销大,效率低选择语言的理想标准:选择语言的理想标准:n为了使程序容易测试和维护以减少软件的总成本,为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言应该有理想的模块化机制,以所选用的高级语言应该有理想的模块化机制,以及可读性

14、好的控制结构和数据结构;及可读性好的控制结构和数据结构;n为了便于调试和提高软件可靠性,语言特点应该为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;使编译程序能够尽可能多地发现程序中的错误;n为了降低软件开发和维护的成本,选用的高级语为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。言应该有良好的独立编译机制。 主要的实用标准:主要的实用标准:n系统用户的要求系统用户的要求n可以使用的编译程序可以使用的编译程序n可以得到的软件工具可以得到的软件工具n工程规模工程规模n程序员的知识程序员的知识n软件可移植性要求软件可移植性要求n软件的应用领

15、域软件的应用领域7.1.2 编码风格编码风格1. 程序内部的文档程序内部的文档n恰当的标识符恰当的标识符n适当的注解适当的注解n程序的视觉组织程序的视觉组织例例1:注释:注释/* ADD AMOUNT TO TOTAL */TOTAL = AMOUNT+TOTAL/* ADD MONTHLY-SALES TO ANNUAL-TOTAL */TOTAL = AMOUNT+TOTAL例例2:视觉组织:视觉组织空格空格 (A17)ANDNOT(B49)ORC (A17) AND NOT (B49) OR C 例例3:视觉组织:视觉组织移行移行 IF () THEN IF () THEN ELSE E

16、NDIF ELSE ENDIF2. 数据说明数据说明n数据说明的次序应该标准化。数据说明的次序应该标准化。n当多个变量名在一个语句中说明时,应该按字当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。母顺序排列这些变量。n如果设计时使用了一个复杂的数据结构,则应如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结该用注解说明用程序设计语言实现这个数据结构的方法和特点。构的方法和特点。 例例4:数据说明标准化:数据说明标准化 INTEGER size,length,width,cost,price INTEGER cost,length,price,size,

17、width3. 语句构造语句构造n不要为了节省空间而把多个语句写在同一行;不要为了节省空间而把多个语句写在同一行;n尽量避免复杂的条件测试;尽量避免复杂的条件测试;n尽量减少对尽量减少对“非非”条件的测试;条件的测试;n避免大量使用循环嵌套和条件嵌套;避免大量使用循环嵌套和条件嵌套;n利用括号使逻辑表达式或算术表达式的运算次序利用括号使逻辑表达式或算术表达式的运算次序清晰直观。清晰直观。 例例5:一行一条语句:一行一条语句 FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF AJAT THEN T:=J; IF TI THEN BEGIN

18、WORK:=AT; AT:=AI; AI:=WORK; END END; FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF AJAT THEN T:=J; IF TI THEN BEGIN WORK:=AT; AT:=AI; AI:=WORK; END END;例例6:强调清晰性:强调清晰性 AI=AI+AT; AT=AI-AT; AI=AI-AT; WORK=AT; AT=AI; AI=WORK;例例7:简单直接:简单直接 for (i=1; i=n; i+) for (j=1; j=n; j+) Vij=(i/j)*(j/i) for

19、 (i=1; i=n; i+) for (j=1; j=n; j+) if (i=j) Vij=1; else Vij=0;例例8:避免不必要的转移:避免不必要的转移 IF (XY) GOTO 30 IF (YZ) GOTO 50 SMALL=Z GOTO 70 30 IF (XZ) GOTO 60 SMALL=Z GOTO 70 50 SMALL=Y GOTO 70 60 SMALL=X 70 CONTINUESMALL=X;IF (YSMALL) SMALL=Y;IF (Z=a)if (char=z) cout “This is a letter.”;else cout =a &

20、char=z) cout “This is a letter.”;else cout “This is not a letter.”;例例10:少用否定条件:少用否定条件if ( !(char 9) )if (char = 0 & char = 9)4. 输入输出输入输出n对所有输入数据都进行检验;对所有输入数据都进行检验;n检查输入项重要组合的合法性;检查输入项重要组合的合法性;n保持输入格式简单;保持输入格式简单;n使用数据结束标记,不要要求用户指定数据的数目;使用数据结束标记,不要要求用户指定数据的数目;n明确提示交互式输入的请求,详细说明可用的选择或明确提示交互式输入的请求,详

21、细说明可用的选择或边界数值;边界数值;n当程序设计语言对格式有严格要求时,应保持输入格当程序设计语言对格式有严格要求时,应保持输入格式一致;式一致;n设计良好的输出报表;设计良好的输出报表;n给所有输出数据加标志。给所有输出数据加标志。 5. 效率效率n效率主要指处理机时间和存储器容量两个方面。效率主要指处理机时间和存储器容量两个方面。n效率是性能要求,因此应该在需求分析阶段确效率是性能要求,因此应该在需求分析阶段确定效率方面的要求。定效率方面的要求。n效率是靠好设计来提高的。效率是靠好设计来提高的。n程序的效率和程序的简单程度是一致的,不要程序的效率和程序的简单程度是一致的,不要牺牲程序的清

22、晰性和可读性来不必要地提高效牺牲程序的清晰性和可读性来不必要地提高效率。率。 n程序运行时间程序运行时间n存储器效率存储器效率n输入输出的效率输入输出的效率(1) 程序运行时间程序运行时间n写程序之前先简化算术的和逻辑的表达式;写程序之前先简化算术的和逻辑的表达式;n仔细研究嵌套的循环,以确定是否有语句可以从内层仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;往外移;n尽量避免使用多维数组;尽量避免使用多维数组;n尽量避免使用指针和复杂的表;尽量避免使用指针和复杂的表;n使用执行时间短的算术运算;使用执行时间短的算术运算;n不要混合使用不同的数据类型;不要混合使用不同的数据类型;n尽量使

23、用整数运算和布尔表达式。尽量使用整数运算和布尔表达式。n在效率是决定性因素的应用领域,尽量使用有良好优在效率是决定性因素的应用领域,尽量使用有良好优化特性的编译程序,以自动生成高效目标代码。化特性的编译程序,以自动生成高效目标代码。 (2) 存储器效率存储器效率n使用能保持功能域的结构化控制结构,是提高使用能保持功能域的结构化控制结构,是提高效率的好方法。效率的好方法。n在微处理机中如果要求使用最少的存储单元,在微处理机中如果要求使用最少的存储单元,则应选用有紧缩存储器特性的编译程序,在非则应选用有紧缩存储器特性的编译程序,在非常必要时可以使用汇编语言。常必要时可以使用汇编语言。n提高执行效率

24、的技术通常也能提高存储器效率。提高执行效率的技术通常也能提高存储器效率。提高存储器效率的关键同样是提高存储器效率的关键同样是“简单简单”。 (3) 输入输出的效率输入输出的效率n如果用户为了给计算机提供输入信息或为了理解如果用户为了给计算机提供输入信息或为了理解计算机输出的信息,所需花费的脑力劳动是经济计算机输出的信息,所需花费的脑力劳动是经济的,那么人和计算机之间通信的效率就高。因此,的,那么人和计算机之间通信的效率就高。因此,简单清晰同样是提高人机通信效率的关键。简单清晰同样是提高人机通信效率的关键。 7.2 软件测试基础软件测试基础7.2.1 软件测试的目标软件测试的目标n测试是为了发现

25、程序中的错误而执行程序的过测试是为了发现程序中的错误而执行程序的过程;程;n好的测试方案是极可能发现迄今为止尚未发现好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;的错误的测试方案;n成功的测试是发现了至今为止尚未发现的错误成功的测试是发现了至今为止尚未发现的错误的测试。的测试。 n所有测试都应该能追溯到用户需求;所有测试都应该能追溯到用户需求;n应该远在测试开始之前就制定出测试计划;应该远在测试开始之前就制定出测试计划;n把把Pareto原理应用到软件测试中;原理应用到软件测试中;n应该从应该从“小规模小规模”测试开始,并逐步进行测试开始,并逐步进行“大规模大规模”测试;测试;n穷

26、举测试是不可能的;穷举测试是不可能的;n为了达到最佳的测试效果,应该由独立的第为了达到最佳的测试效果,应该由独立的第三方从事测试工作。三方从事测试工作。7.2.2 软件测试准则软件测试准则7.2.3 测试方法测试方法n把程序看作一个黑盒子;把程序看作一个黑盒子;n完全不考虑程序的内部结构和处理过程;完全不考虑程序的内部结构和处理过程;n是在程序接口进行的测试。是在程序接口进行的测试。n把程序看成装在一个透明的盒子里;把程序看成装在一个透明的盒子里;n测试者完全知道程序的结构和处理算法;测试者完全知道程序的结构和处理算法;n按照程序内部的逻辑测试程序,检测程序中的主按照程序内部的逻辑测试程序,检

27、测程序中的主要执行通路是否都能按预定要求正确工作。要执行通路是否都能按预定要求正确工作。n假设有程序假设有程序P,输入量,输入量A和和B,输出量为,输出量为C。n如果计算机的字长为如果计算机的字长为32位,位,A和和B的数据类型都是的数据类型都是整数类型。将整数类型。将A和和B的可能取值进行排列组合,输的可能取值进行排列组合,输入数据的可能性有:入数据的可能性有:232232264种。种。n假设这个程序执行一次需要假设这个程序执行一次需要1毫秒,要完成所有的毫秒,要完成所有的测试,计算机需要连续工作测试,计算机需要连续工作5亿年。亿年。n图中所示的一个小程序的控图中所示的一个小程序的控制流程。

28、曲线代表执行次数制流程。曲线代表执行次数不超过不超过20的循环,循环体中的循环,循环体中共有共有5条通路。条通路。n可能执行的路径有可能执行的路径有520条,近条,近似为似为1014条可能的路径。条可能的路径。n如果完成一个路径的测试需如果完成一个路径的测试需要要1毫秒,那么整个测试过程毫秒,那么整个测试过程需要需要3170年。年。黑盒测试黑盒测试白盒测试白盒测试优优点点适用于各阶段测试适用于各阶段测试从产品功能角度测试从产品功能角度测试容易入手生成测试数据容易入手生成测试数据可构成测试数据使特定程可构成测试数据使特定程 序部分得到测试序部分得到测试有一定的充分性度量手段有一定的充分性度量手段

29、可获较多工具支持可获较多工具支持缺缺点点某些代码得不到测试某些代码得不到测试如果规格说明有误,则无如果规格说明有误,则无法发现法发现不易进行充分性测试不易进行充分性测试通常不易生成测试数据通常不易生成测试数据无法对未实现规格说明的部无法对未实现规格说明的部分进行测试分进行测试工作量大,通常只用于单元工作量大,通常只用于单元测试,有应用局限测试,有应用局限性性质质一种确认技术,回答一种确认技术,回答“我们我们在构造一个正确的系统吗?在构造一个正确的系统吗?”一种验证技术,回答一种验证技术,回答“我们在我们在正确地构造一个系统吗?正确地构造一个系统吗?”7.2.4 测试步骤测试步骤1. 模块测试模

30、块测试(单元测试单元测试)n保证每个模块作为一个单元能正确运行;保证每个模块作为一个单元能正确运行;n发现的往往是编码和详细设计的错误。发现的往往是编码和详细设计的错误。2. 子系统测试子系统测试n把经过单元测试的模块放在一起形成一个子系把经过单元测试的模块放在一起形成一个子系统来测试;统来测试;n着重测试模块的接口。着重测试模块的接口。3. 系统测试系统测试n把经过测试的子系统装配成一个完整的系统来把经过测试的子系统装配成一个完整的系统来测试;测试;n发现的往往是软件设计中的错误,也可能发现发现的往往是软件设计中的错误,也可能发现需求说明中的错误;需求说明中的错误;n不论是子系统测试还是系统

31、测试,都兼有检测不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。和组装两重含义,通常称为集成测试。 4. 验收测试验收测试(确认测试确认测试)n把软件系统作为单一的实体进行测试;把软件系统作为单一的实体进行测试;n它是在用户积极参与下进行的,而且可能主要它是在用户积极参与下进行的,而且可能主要使用实际数据使用实际数据(系统将来要处理的信息系统将来要处理的信息)进行测进行测试;试;n发现的往往是系统需求说明书中的错误。发现的往往是系统需求说明书中的错误。5. 平行运行平行运行n同时运行新开发出来的系统和将被它取代的旧系同时运行新开发出来的系统和将被它取代的旧系统;以便比

32、较新旧两个系统的处理结果;统;以便比较新旧两个系统的处理结果;目的:目的:n可以在准生产环境中运行新系统而又不冒风险;可以在准生产环境中运行新系统而又不冒风险;n用户能有一段熟悉新系统的时间;用户能有一段熟悉新系统的时间;n可以验证用户指南和使用手册之类的文档;可以验证用户指南和使用手册之类的文档;n能够以准生产模式对新系统进行全负荷测试,可能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。以用测试结果验证性能指标。 7.2.5 测试阶段的信息流测试阶段的信息流n输入信息有两类:输入信息有两类: q软件配置,包括需求说明书、设计说明书和源程序软件配置,包括需求说明书、设计说明

33、书和源程序清单等;清单等; q测试配置,包括测试计划和测试方案。测试配置,包括测试计划和测试方案。 7.3 单元测试单元测试n单元测试集中检测模块;单元测试集中检测模块;n单元测试和编码属于软件过程的同一个阶段;单元测试和编码属于软件过程的同一个阶段;n可以应用人工测试和计算机测试这样两种不同可以应用人工测试和计算机测试这样两种不同类型的测试方法;类型的测试方法;n单元测试主要使用白盒测试技术,对多个模块单元测试主要使用白盒测试技术,对多个模块的测试可以并行地进行。的测试可以并行地进行。 7.3.1 测试重点测试重点n模块接口模块接口n局部数据结构局部数据结构n重要的执行通路重要的执行通路n出

34、错处理通路出错处理通路n边界条件边界条件7.3.2 代码审查代码审查n由审查小组正式进行测试称为代码审查;由审查小组正式进行测试称为代码审查;n可查出可查出30%70%的逻辑设计错误和编码错误;的逻辑设计错误和编码错误;n审查小组组成:审查小组组成:q组长组长q程序的设计者程序的设计者q程序的编写者程序的编写者q程序的测试者程序的测试者n一次审查会上可以发现许多错误,可以减少系统一次审查会上可以发现许多错误,可以减少系统验证的总工作量。验证的总工作量。 7.3.3 计算机测试计算机测试n必须为每个单元测试开发驱动程序和必须为每个单元测试开发驱动程序和(或或)存根存根程序。程序。q驱动程序是一个

35、驱动程序是一个“主程序主程序”,它接收测试数据,它接收测试数据,传送给被测试的模块,并且输出有关的结果。传送给被测试的模块,并且输出有关的结果。q存根程序代替被测试的模块所调用的模块。它使存根程序代替被测试的模块所调用的模块。它使用被它代替的模块的接口,可能做最少量的数据用被它代替的模块的接口,可能做最少量的数据操作,输出对入口的检验或操作结果,并且把控操作,输出对入口的检验或操作结果,并且把控制归还给调用它的模块。制归还给调用它的模块。n驱动程序和存根程序代表开销,通常并不把驱动程序和存根程序代表开销,通常并不把它们作为软件产品的一部分交给用户。它们作为软件产品的一部分交给用户。被测模块被测

36、模块存根模块存根模块驱动模块驱动模块存根模块存根模块存根模块存根模块单元测试下计算机测试的环境单元测试下计算机测试的环境图图7.27.2是一个正文加工系统的部分层次图,假定要测是一个正文加工系统的部分层次图,假定要测试其中编号为试其中编号为3.03.0的关键模块的关键模块正文正文编辑编辑模块。模块。图图7.2 7.2 正文加工系统的层次正文加工系统的层次图图驱动模块驱动模块存根存根changechange存根存根appendappendn. TEST DRIVER. TEST DRIVERn ( (* *测试正文编辑模块用的测试正文编辑模块用的驱动程序驱动程序* *) )n说明长度为说明长度为

37、25002500个字符的一个缓冲区;个字符的一个缓冲区;n把把CFUNCTCFUNCT置为希望测试的状态;置为希望测试的状态;n输入字符串;输入字符串;n调用正文编辑模块;调用正文编辑模块;n停止或再次初启;停止或再次初启;nEND TEST DRIVEREND TEST DRIVERn. TEST STUB(TEST STUB(* *测试正文编辑模块用的测试正文编辑模块用的存根程序存根程序* *) )n初始化;初始化;n输出信息输出信息“进入了正文编辑程序进入了正文编辑程序”;n输出输出“输入的控制信息是输入的控制信息是”CFUNCTCFUNCT;n输出缓冲区中的字符串;输出缓冲区中的字符串

38、;nIF CFUNCT=CHANGEIF CFUNCT=CHANGEnTHENTHENn 把缓冲区中第二个字改为把缓冲区中第二个字改为* * * *nELSEELSEn 在缓冲区的尾部加在缓冲区的尾部加?nENDENDIFIF;n输出缓冲区中的新字符串;输出缓冲区中的新字符串;n END TEST STUBEND TEST STUB7.4 集成测试集成测试n集成测试是测试和组装软件的系统化技术,主集成测试是测试和组装软件的系统化技术,主要目标是发现与接口有关的问题。要目标是发现与接口有关的问题。n由模块组装成程序时有两种方法:由模块组装成程序时有两种方法:q非渐增式测试方法非渐增式测试方法q渐

39、增式测试方法渐增式测试方法非渐增式测试方法:非渐增式测试方法:n先分别测试每个模块,再把所有模块按设计要求放在先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序;一起结合成所要的程序;n非渐增式测试一下子把所有模块放在一起,并把庞大非渐增式测试一下子把所有模块放在一起,并把庞大的程序作为一个整体来测试,测试者面对的情况十分的程序作为一个整体来测试,测试者面对的情况十分复杂。复杂。n在庞大的程序中想要诊断定位一个错误是非常困难的,在庞大的程序中想要诊断定位一个错误是非常困难的,改正错误更是极端困难,而且一旦改正一个错误之后,改正错误更是极端困难,而且一旦改正一个错误之后,马上又会

40、遇到新的错误。马上又会遇到新的错误。 渐增式测试方法:渐增式测试方法:n把下一个要测试的模块同已经测试好的那些模块结把下一个要测试的模块同已经测试好的那些模块结合起来进行测试;合起来进行测试;n测试完以后再把下一个应该测试的模块结合进来测测试完以后再把下一个应该测试的模块结合进来测试,每次增加一个模块;试,每次增加一个模块;n实际上同时完成单元测试和集成测试;实际上同时完成单元测试和集成测试;n把程序划分成小段来构造和测试,在这个过程中比把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误;较容易定位和改正错误;n渐增方式有两种集成策略:渐增方式有两种集成策略:q自顶向下自顶向下q

41、自底向上自底向上7.4.1 自顶向下集成自顶向下集成n从主控制模块开始,沿着程序的控制层次向下从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。移动,逐渐把各个模块结合起来。n在把附属于主控制模块的在把附属于主控制模块的那些模块组装到程序结构那些模块组装到程序结构中去时,或者使用中去时,或者使用的策略,或者使用的策略,或者使用的策略。的策略。q深度优先:先组装在软件深度优先:先组装在软件结构的一条主控制通路上结构的一条主控制通路上的所有模块。的所有模块。q宽度优先:沿软件结构水宽度优先:沿软件结构水平地移动,把处于同一个平地移动,把处于同一个控制层次上的所有模块组控制层次上

42、的所有模块组装起来。装起来。按深度优先策略组装按深度优先策略组装按宽度优先策略组装按宽度优先策略组装总结:把模块结合进软件结构的过程由下述总结:把模块结合进软件结构的过程由下述4个步骤完成:个步骤完成:n第一步第一步,对主控制模块进行测试,测试时用存根程序代,对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块;替所有直接附属于主控制模块的模块;n第二步第二步,根据选定的结合策略,根据选定的结合策略(深度优先或宽度优先深度优先或宽度优先),每次用一个实际模块代换一个存根程序每次用一个实际模块代换一个存根程序(新结合进来的模新结合进来的模块往往又需要新的存根程序块往往又需要新

43、的存根程序);n第三步,第三步,在结合进一个模块的同时进行测试;在结合进一个模块的同时进行测试;n第四步,第四步,为了保证加入模块没有引进新的错误,可能需为了保证加入模块没有引进新的错误,可能需要进行回归测试要进行回归测试(即,全部或部分地重复以前做过的测即,全部或部分地重复以前做过的测试试)。n从第二步开始不断地从第二步开始不断地重复重复进行上述过程,直到构造起完进行上述过程,直到构造起完整的软件结构为止。整的软件结构为止。 优点:优点:n能够在测试的早期对主要的控制或关键的抉择进能够在测试的早期对主要的控制或关键的抉择进行检验。行检验。n如果选择深度优先的结合方法,可以在早期实现如果选择深

44、度优先的结合方法,可以在早期实现软件的一个完整的功能并且验证这个功能。软件的一个完整的功能并且验证这个功能。缺点:缺点:n存根程序代替了低层次的模块,在软件结构中没存根程序代替了低层次的模块,在软件结构中没有重要的数据自下往上流。有重要的数据自下往上流。结合策略:结合策略:n第一步,把低层模块组合成实现某个特定的软件第一步,把低层模块组合成实现某个特定的软件子功能的族;子功能的族;n第二步,写一个驱动程序第二步,写一个驱动程序(用于测试的控制程序用于测试的控制程序),协调测试数据的输入和输出;协调测试数据的输入和输出;n第三步,对由模块组成的子功能族进行测试;第三步,对由模块组成的子功能族进行

45、测试;n第四步,去掉驱动程序,沿软件结构自下向上移第四步,去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。动,把子功能族组合起来形成更大的子功能族。n上述第二步到第四步实质上构成了一个循环。上述第二步到第四步实质上构成了一个循环。 7.4.2 自底向上集成自底向上集成自底向上结合自底向上结合自底向上结合自底向上结合7.4.3 不同集成测试策略的比较不同集成测试策略的比较混合策略:混合策略:n改进的自顶向下测试方法改进的自顶向下测试方法q基本上使用自顶向下的测试方法,但是在早期使用基本上使用自顶向下的测试方法,但是在早期使用自底向上的方法测试软件中的少数关键模块。自底

46、向上的方法测试软件中的少数关键模块。q能在测试的早期发现关键模块中的错误;测试关键能在测试的早期发现关键模块中的错误;测试关键模块时需要驱动程序。模块时需要驱动程序。n混合法混合法q对软件结构中较上层使用的自顶向下方法与对软件对软件结构中较上层使用的自顶向下方法与对软件结构中较下层使用的自底向上方法相结合。结构中较下层使用的自底向上方法相结合。q兼有两种方法的优缺点,当被测试的软件中关键模兼有两种方法的优缺点,当被测试的软件中关键模块比较多时,这种混合法可能是最好的折衷方法。块比较多时,这种混合法可能是最好的折衷方法。7.4.4 回归测试回归测试n回归测试是指重新执行已经做过的测试的某个子集,

47、回归测试是指重新执行已经做过的测试的某个子集,以保证测试过程中的变化没有带来非预期的副作用。以保证测试过程中的变化没有带来非预期的副作用。n回归测试就是回归测试就是用于保证用于保证由于调试或其他原因引起的由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误的测变化,不会导致非预期的软件行为或额外错误的测试活动。试活动。n回归测试回归测试可以通过可以通过重新执行全部测试用例的一个子重新执行全部测试用例的一个子集人工地进行,也可以使用自动化的捕获回放工具集人工地进行,也可以使用自动化的捕获回放工具自动进行。自动进行。 7.5 确认测试确认测试n确认测试也称为验收测试,它的目标是验证软确

48、认测试也称为验收测试,它的目标是验证软件的有效性。件的有效性。n软件有效性的一个简单定义是:如果软件的功软件有效性的一个简单定义是:如果软件的功能和性能如同用户所合理期待的那样,软件就能和性能如同用户所合理期待的那样,软件就是有效的。是有效的。n需求分析阶段产生的软件需求规格说明书,准需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望,因此是软确地描述了用户对软件的合理期望,因此是软件有效性的标准,也是进行确认测试的基础。件有效性的标准,也是进行确认测试的基础。 n确认测试必须有用户积极参与,或者以用户为确认测试必须有用户积极参与,或者以用户为主进行。主进行。n使用用户界面

49、输入测试数据并且分析评价测试使用用户界面输入测试数据并且分析评价测试的输出结果。的输出结果。n通常在验收之前由开发单位对用户进行培训。通常在验收之前由开发单位对用户进行培训。 7.5.1 确认测试的范围确认测试的范围n确认测试的一个重要内容是复查软件配置。确认测试的一个重要内容是复查软件配置。n复查的目的是保证软件配置的所有成分都齐全,复查的目的是保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,而且已经编好目录。成软件维护所必须的细节,而且已经编好目录。 7.5.2 软件配置复查软件配置复查nAlpha测试由

50、用户在开发者的场所进行,并且测试由用户在开发者的场所进行,并且在开发者对用户的在开发者对用户的“指导指导”下进行测试。下进行测试。Alpha测试是在受控的环境中进行的。测试是在受控的环境中进行的。nBeta测试由软件的最终用户们在一个或多个客测试由软件的最终用户们在一个或多个客户场所进行。开发者通常不在户场所进行。开发者通常不在Beta测试的现场,测试的现场,因此,因此,Beta测试是软件在开发者不能控制的环测试是软件在开发者不能控制的环境中的境中的“真实真实”应用。应用。7.5.3 Alpha和和Beta测试测试测试阶段测试阶段主要依据主要依据测试人员测试人员 测试方式测试方式主要测试内容主

51、要测试内容单元测试单元测试 系统设计文档系统设计文档 开发小组开发小组 白盒测试白盒测试接口测试接口测试路径测试路径测试 子系统子系统测试测试系统设计文档系统设计文档需求文档需求文档独立测试独立测试小组小组白盒测试白盒测试黑盒测试黑盒测试接口测试接口测试路径测试路径测试功能测试功能测试性能测试性能测试 系统测试系统测试 需求文档需求文档独立测试独立测试小组小组黑盒测试黑盒测试功能测试功能测试健壮性测试健壮性测试性能测试性能测试用户界面测试用户界面测试安全性测试安全性测试可靠性测试可靠性测试安装安装/反安装测试反安装测试 验收测试验收测试 需求文档需求文档用户用户黑盒测试黑盒测试测试步骤小结测试

52、步骤小结7.6 白盒测试技术白盒测试技术n所谓测试方案包括具体的测试目的(例如,预定要所谓测试方案包括具体的测试目的(例如,预定要测试的具体功能),应该输入的测试数据和预期的测试的具体功能),应该输入的测试数据和预期的结果。结果。n通常又把测试数据和预期的输出结果称为通常又把测试数据和预期的输出结果称为测试用例测试用例。最困难的问题是设计测试用的输入数据。最困难的问题是设计测试用的输入数据。不同的测试数据发现程序错误的能力差别很大,为不同的测试数据发现程序错误的能力差别很大,为了提高测试效率降低测试成本,应该选用高效的测了提高测试效率降低测试成本,应该选用高效的测试数据。试数据。因为不可能进行

53、穷尽的测试,选用少量因为不可能进行穷尽的测试,选用少量“最有效的最有效的”测试数据,做到尽可能完备的测试就更重要了。测试数据,做到尽可能完备的测试就更重要了。设计测试方案的设计测试方案的,确定一组最可能发现,确定一组最可能发现某个错误或某类错误的测试数据。某个错误或某类错误的测试数据。已经研究出许多设计测试数据的技术,这些技术各已经研究出许多设计测试数据的技术,这些技术各有优缺点,没有哪一种是最好的,更没有哪一种可有优缺点,没有哪一种是最好的,更没有哪一种可以代替其余所有技术;同一种技术在不同的应用场以代替其余所有技术;同一种技术在不同的应用场合效果可能相差很大,因此,通常需要联合使用多合效果

54、可能相差很大,因此,通常需要联合使用多种设计测试数据的技术。种设计测试数据的技术。7.6.1 逻辑覆盖逻辑覆盖n有选择地执行程序中某些最有代表性的通路是对穷尽有选择地执行程序中某些最有代表性的通路是对穷尽测试的惟一可行的替代办法。测试的惟一可行的替代办法。n从覆盖源程序语句的详尽程度分析,大致有以下一些从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:不同的覆盖标准:q语句覆盖语句覆盖q判定覆盖判定覆盖 q条件覆盖条件覆盖 q判定判定/条件覆盖条件覆盖 q条件组合覆盖条件组合覆盖q路径覆盖路径覆盖 1. 语句覆盖语句覆盖n含义:选择足够多的测含义:选择足够多的测试数据,使被测程序中

55、试数据,使被测程序中每个语句至少执行一次。每个语句至少执行一次。n分析:分析: 执行路径执行路径sacbedn测试用例:测试用例: A2,B0,X4 覆盖覆盖sacbed语句覆盖特点:语句覆盖特点:n语句覆盖对程序的逻辑覆盖很少。语句覆盖对程序的逻辑覆盖很少。n语句覆盖只关心判定表达式的值,而没有分别语句覆盖只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值时的情况。测试判定表达式中每个条件取不同值时的情况。n语句覆盖是很弱的逻辑覆盖标准。语句覆盖是很弱的逻辑覆盖标准。 2. 判定覆盖(分支覆盖)判定覆盖(分支覆盖)n含义:不仅每个语句必须含义:不仅每个语句必须至少执行一次,而且

56、每个至少执行一次,而且每个判定的每种可能的结果都判定的每种可能的结果都应该至少执行一次。应该至少执行一次。n所有判定分支:所有判定分支: (1) a点判定为点判定为T (2) a点判定为点判定为F (3) b点判定为点判定为T (4) b点判定为点判定为F2. 判定覆盖(分支覆盖)判定覆盖(分支覆盖)n测试用例:测试用例: . 满足满足(1)(4) A3,B0,X3 覆盖覆盖sacbd . 满足满足(2)(3) A2,B1,X1 覆盖覆盖sabed2. 判定覆盖(分支覆盖)判定覆盖(分支覆盖)n或者或者 . 满足满足(1)(3) A2,B0,X3 覆盖覆盖sacbed . 满足满足(2)(4)

57、 A3,B1,X1 覆盖覆盖sabdn特点:比语句覆盖强,但特点:比语句覆盖强,但对程序逻辑的覆盖程度仍对程序逻辑的覆盖程度仍不高。不高。 3. 条件覆盖条件覆盖n含义:不仅每个语句至少含义:不仅每个语句至少执行一次,而且使判定表执行一次,而且使判定表达式中的每个条件都取到达式中的每个条件都取到各种可能的结果。各种可能的结果。n所有条件:所有条件: (1)A1 (2)A1 (3)B0 (4)B0 (5)A2 (6)A2 (7)X1 (8)X13. 条件覆盖条件覆盖n测试用例:测试用例: . 满足满足(1)(3)(5)(7) A2,B0,X4 覆盖覆盖sacbed . 满足满足(2)(4)(6)

58、(8) A1,B1,X1 覆盖覆盖sabd 3. 条件覆盖条件覆盖n或者或者 . 满足满足(1)(3)(5)(8) A2,B0,X1 覆盖覆盖sacbed . 满足满足(2)(4)(6)(7) A1,B1,X2 覆盖覆盖sabedn或者或者条件覆盖特点:条件覆盖特点:n条件覆盖通常比判定覆盖强,因为它使每个条条件覆盖通常比判定覆盖强,因为它使每个条件都取到了两个不同的结果,判定覆盖却只关件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。但也有反例,如第二心整个判定表达式的值。但也有反例,如第二组测试用例。组测试用例。n判定覆盖不一定包含条件覆盖,条件覆盖也不判定覆盖不一定包含条件覆

59、盖,条件覆盖也不一定包含判定覆盖。一定包含判定覆盖。4. 判定判定/条件覆盖条件覆盖n含义:使得判定表达式中的每个条件都取到各种可能含义:使得判定表达式中的每个条件都取到各种可能的值,每个判定表达式也都取到各种可能的结果。的值,每个判定表达式也都取到各种可能的结果。n测试用例:测试用例: . 满足条件满足条件(1)(3)(5)(7) 和判定和判定(1)(3) A2,B0,X4 覆盖覆盖sacbed . 满足条件满足条件(2)(4)(6)(8) 和判定和判定(2)(4) A1,B1,X1 覆盖覆盖sabd n特点:有时判定特点:有时判定/条件覆盖也并不比条件覆盖更强。条件覆盖也并不比条件覆盖更强

60、。 5. 条件组合覆盖条件组合覆盖n含义:要求选取足够多的测试数据,使得每个判定表达含义:要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。式中条件的各种可能组合都至少出现一次。n条件组合:条件组合: (1)A1,B0 (2)A1,B0 (3)A1,B0 (4)A1,B0 (5)A2,X1 (6)A2,X1 (7)A2,X1 (8)A2,X1 5. 条件组合覆盖条件组合覆盖n测试用例:测试用例: .满足满足(1)(5) A2,B0,X4 覆盖覆盖sacbed .满足满足(2)(6) A2,B1,X1 覆盖覆盖sabed .满足满足(3)(7) A1,B0,X2 覆盖覆盖sabed

温馨提示

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

评论

0/150

提交评论