




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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在对测试结果进行收集和评价的时候,使用故障率数在对测试结果进行收集和评价的时候,使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠据,估计软件将来出现故障的情况并预测软件的可靠性。性。 7.1 编码编码7.1.1 选择程序设计语言选择程
3、序设计语言n机器语言,几乎不使用。机器语言,几乎不使用。n汇编语言,特殊场合使用。汇编语言,特殊场合使用。n高级语言,明显优于汇编语言。高级语言,明显优于汇编语言。 程序设计语言的划代:程序设计语言的划代: 划代划代语言语言特点特点级别级别1GL机器语言机器语言程序不直观,编程出错率高程序不直观,编程出错率高运行效率高运行效率高低级低级2GL汇编语言汇编语言比机器语言直观,减少了出错率比机器语言直观,减少了出错率与机器码一样长与机器码一样长特殊情况下才使用特殊情况下才使用3GLBASICPASCALC、C+等等利用类英语的语句和命令利用类英语的语句和命令一条语句相当于一条语句相当于5-10条机
4、器码条机器码要规定详细的算法过程要规定详细的算法过程高级高级4GL数据库查询语言数据库查询语言程序生成器程序生成器图形语言图形语言与自然语言接近与自然语言接近一条语句相当于一条语句相当于30-50条机器码条机器码非过程化问题定义非过程化问题定义运行开销大,效率低运行开销大,效率低选择语言的理想标准:选择语言的理想标准:n为了使程序容易测试和维护以减少软件的总成为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言应该有理想的模块化机本,所选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;制,以及可读性好的控制结构和数据结构;n为了便于调试和提高软件可靠性,语言特点应
5、为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错该使编译程序能够尽可能多地发现程序中的错误;误;n为了降低软件开发和维护的成本,选用的高级为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。语言应该有良好的独立编译机制。 主要的实用标准:主要的实用标准:n系统用户的要求系统用户的要求n可以使用的编译程序可以使用的编译程序n可以得到的软件工具可以得到的软件工具n工程规模工程规模n程序员的知识程序员的知识n软件可移植性要求软件可移植性要求n软件的应用领域软件的应用领域7.1.2 编码风格编码风格1. 程序内部的文档程序内部的文档n恰当的标识符恰当的
6、标识符n适当的注解适当的注解n程序的视觉组织程序的视觉组织2. 数据说明数据说明n数据说明的次序应该标准化。数据说明的次序应该标准化。n当多个变量名在一个语句中说明时,应该按字当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。母顺序排列这些变量。n如果设计时使用了一个复杂的数据结构,则应如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结该用注解说明用程序设计语言实现这个数据结构的方法和特点。构的方法和特点。 3. 语句构造语句构造n不要为了节省空间而把多个语句写在同一行;不要为了节省空间而把多个语句写在同一行;n尽量避免复杂的条件测试;尽量避免复杂的条件
7、测试;n尽量减少对尽量减少对“非非”条件的测试;条件的测试;n避免大量使用循环嵌套和条件嵌套;避免大量使用循环嵌套和条件嵌套;n利用括号使逻辑表达式或算术表达式的运算次利用括号使逻辑表达式或算术表达式的运算次序清晰直观。序清晰直观。 4. 输入输出输入输出n对所有输入数据都进行检验;对所有输入数据都进行检验;n检查输入项重要组合的合法性;检查输入项重要组合的合法性;n保持输入格式简单;保持输入格式简单;n使用数据结束标记,不要要求用户指定数据的数目;使用数据结束标记,不要要求用户指定数据的数目;n明确提示交互式输入的请求,详细说明可用的选择或明确提示交互式输入的请求,详细说明可用的选择或边界数
8、值;边界数值;n当程序设计语言对格式有严格要求时,应保持输入格当程序设计语言对格式有严格要求时,应保持输入格式一致;式一致;n设计良好的输出报表;设计良好的输出报表;n给所有输出数据加标志。给所有输出数据加标志。 5. 效率效率n效率主要指处理机时间和存储器容量两个方面。效率主要指处理机时间和存储器容量两个方面。n效率是性能要求,因此应该在需求分析阶段确效率是性能要求,因此应该在需求分析阶段确定效率方面的要求。定效率方面的要求。n效率是靠好设计来提高的。效率是靠好设计来提高的。n程序的效率和程序的简单程度是一致的,不要程序的效率和程序的简单程度是一致的,不要牺牲程序的清晰性和可读性来不必要地提
9、高效牺牲程序的清晰性和可读性来不必要地提高效率。率。 效率问题:效率问题:n程序运行时间程序运行时间n存储器效率存储器效率n输入输出的效率输入输出的效率(1) 程序运行时间程序运行时间n写程序之前先简化算术的和逻辑的表达式;写程序之前先简化算术的和逻辑的表达式;n仔细研究嵌套的循环,以确定是否有语句可以从内层仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;往外移;n尽量避免使用多维数组;尽量避免使用多维数组;n尽量避免使用指针和复杂的表;尽量避免使用指针和复杂的表;n使用执行时间短的算术运算;使用执行时间短的算术运算;n不要混合使用不同的数据类型;不要混合使用不同的数据类型;n尽量使用整
10、数运算和布尔表达式。尽量使用整数运算和布尔表达式。n在效率是决定性因素的应用领域,尽量使用有良好优在效率是决定性因素的应用领域,尽量使用有良好优化特性的编译程序,以自动生成高效目标代码。化特性的编译程序,以自动生成高效目标代码。 (2) 存储器效率存储器效率n使用能保持功能域的结构化控制结构,是提高使用能保持功能域的结构化控制结构,是提高效率的好方法。效率的好方法。n在微处理机中如果要求使用最少的存储单元,在微处理机中如果要求使用最少的存储单元,则应选用有紧缩存储器特性的编译程序,在非则应选用有紧缩存储器特性的编译程序,在非常必要时可以使用汇编语言。常必要时可以使用汇编语言。n提高执行效率的技
11、术通常也能提高存储器效率。提高执行效率的技术通常也能提高存储器效率。提高存储器效率的关键同样是提高存储器效率的关键同样是“简单简单”。 (3) 输入输出的效率输入输出的效率n如果用户为了给计算机提供输入信息或为了理如果用户为了给计算机提供输入信息或为了理解计算机输出的信息,所需花费的脑力劳动是解计算机输出的信息,所需花费的脑力劳动是经济的,那么人和计算机之间通信的效率就高。经济的,那么人和计算机之间通信的效率就高。因此,简单清晰同样是提高人机通信效率的关因此,简单清晰同样是提高人机通信效率的关键。键。 例例1:注释:注释/* ADD AMOUNT TO TOTAL */TOTAL = AMOU
12、NT+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 ENDIF ELSE ENDIF例例4:数据说明标准化:数据说明标准化 INTEGER size,length,width,cost,price INTEGER cost,length,price,size,width例例5:一行一条语句:一行一条语
13、句 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; 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
14、; AT=AI; AI=WORK;例例7:简单直接:简单直接 for (i=1; i=n; i+) for (j=1; j=n; j+) Vij=(i/j)*(j/i) for (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 AMALL=Z GOTO 70 50 SMALL=Y GOTO 70 60 SMALL=X 70 CONTINUESMAL
15、L=X;IF (YSMALL) SMALL=Y;IF (Z=a)if (char=z) cout “This is a letter.”;else cout =a & char=z) cout “This is a letter.”;else cout “This is not a letter.”;例例10:少用否定条件:少用否定条件if ( !(char 9) )if (char = 0 & char = 9)7.2 软件测试基础软件测试基础7.2.1 软件测试的目标软件测试的目标n测试是为了发现程序中的错误而执行程序的过测试是为了发现程序中的错误而执行程序的过程;程;n好
16、的测试方案是极可能发现迄今为止尚未发现好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;的错误的测试方案;n成功的测试是发现了至今为止尚未发现的错误成功的测试是发现了至今为止尚未发现的错误的测试。的测试。 n所有测试都应该能追溯到用户需求;所有测试都应该能追溯到用户需求;n应该远在测试开始之前就制定出测试计划;应该远在测试开始之前就制定出测试计划;n把把Pareto原理应用到软件测试中;原理应用到软件测试中;n应该从应该从“小规模小规模”测试开始,并逐步进行测试开始,并逐步进行“大大规模规模”测试;测试;n穷举测试是不可能的;穷举测试是不可能的;n为了达到最佳的测试效果,应该由独立的第
17、三为了达到最佳的测试效果,应该由独立的第三方从事测试工作。方从事测试工作。7.2.2 软件测试准则软件测试准则7.2.3 测试方法测试方法黑盒测试黑盒测试(功能测试功能测试):n把程序看作一个黑盒子;把程序看作一个黑盒子;n完全不考虑程序的内部结构和处理过程;完全不考虑程序的内部结构和处理过程;n是在程序接口进行的测试。是在程序接口进行的测试。白盒测试白盒测试(结构测试结构测试):n把程序看成装在一个透明的盒子里;把程序看成装在一个透明的盒子里;n测试者完全知道程序的结构和处理算法;测试者完全知道程序的结构和处理算法;n按照程序内部的逻辑测试程序,检测程序中的主按照程序内部的逻辑测试程序,检测
18、程序中的主要执行通路是否都能按预定要求正确工作。要执行通路是否都能按预定要求正确工作。黑盒测试不可能实现穷尽测试:黑盒测试不可能实现穷尽测试:n假设有程序假设有程序P,输入量微,输入量微A和和B,输出量为,输出量为C。n如果计算机的字长为如果计算机的字长为32位,位,A和和B的数据类型的数据类型都是整数类型。将都是整数类型。将A和和B的可能取值进行排列的可能取值进行排列组合,输入数据的可能性有:组合,输入数据的可能性有:232232264种。种。n假设这个程序执行一次需要假设这个程序执行一次需要1毫秒,要完成所毫秒,要完成所有的测试,计算机需要连续工作有的测试,计算机需要连续工作5亿年。亿年。
19、白盒测试也不能实现穷尽测试:白盒测试也不能实现穷尽测试:n图中所示的一个小程序的控制图中所示的一个小程序的控制流程。曲线代表执行次数不超流程。曲线代表执行次数不超过过20的循环,循环体中共有的循环,循环体中共有5条通路。条通路。n可能执行的路径有可能执行的路径有520条,近似条,近似为为1014条可能的路径。条可能的路径。n如果完成一个路径的测试需要如果完成一个路径的测试需要1毫秒,那么整个测试过程需毫秒,那么整个测试过程需要要3170年。年。黑盒测试与白盒测试优缺点比较:黑盒测试与白盒测试优缺点比较: 黑盒测试黑盒测试白盒测试白盒测试优优点点适用于各阶段测试适用于各阶段测试从产品功能角度测试
20、从产品功能角度测试容易入手生成测试数据容易入手生成测试数据可构成测试数据使特定程可构成测试数据使特定程 序部分得到测试序部分得到测试有一定的充分性度量手段有一定的充分性度量手段可获较多工具支持可获较多工具支持缺缺点点某些代码得不到测试某些代码得不到测试如果规格说明有误,则无如果规格说明有误,则无法发现法发现不易进行充分性测试不易进行充分性测试通常不易生成测试数据通常不易生成测试数据无法对未实现规格说明的部无法对未实现规格说明的部分进行测试分进行测试工作量大,通常只用于单元工作量大,通常只用于单元测试,有应用局限测试,有应用局限性性质质一种确认技术,回答一种确认技术,回答“我们我们在构造一个正确
21、的系统吗?在构造一个正确的系统吗?”一种验证技术,回答一种验证技术,回答“我们在我们在正确地构造一个系统吗?正确地构造一个系统吗?”7.2.4 测试步骤测试步骤1. 模块测试模块测试(单元测试单元测试)n保证每个模块作为一个单元能正确运行;保证每个模块作为一个单元能正确运行;n发现的往往是编码和详细设计的错误。发现的往往是编码和详细设计的错误。2. 子系统测试子系统测试n把经过单元测试的模块放在一起形成一个子系把经过单元测试的模块放在一起形成一个子系统来测试;统来测试;n着重测试模块的接口。着重测试模块的接口。3. 系统测试系统测试n把经过测试的子系统装配成一个完整的系统来把经过测试的子系统装
22、配成一个完整的系统来测试;测试;n发现的往往是软件设计中的错误,也可能发现发现的往往是软件设计中的错误,也可能发现需求说明中的错误;需求说明中的错误;n不论是子系统测试还是系统测试,都兼有检测不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。和组装两重含义,通常称为集成测试。 4. 验收测试验收测试(确认测试确认测试)n把软件系统作为单一的实体进行测试;把软件系统作为单一的实体进行测试;n它是在用户积极参与下进行的,而且可能主要它是在用户积极参与下进行的,而且可能主要使用实际数据使用实际数据(系统将来要处理的信息系统将来要处理的信息)进行测进行测试;试;n发现的往往是系
23、统需求说明书中的错误。发现的往往是系统需求说明书中的错误。5. 平行运行平行运行n同时运行新开发出来的系统和将被它取代的旧系同时运行新开发出来的系统和将被它取代的旧系统;统;n比较新旧两个系统的处理结果;比较新旧两个系统的处理结果;n可以在准生产环境中运行新系统而又不冒风险;可以在准生产环境中运行新系统而又不冒风险;n用户能有一段熟悉新系统的时间;用户能有一段熟悉新系统的时间;n可以验证用户指南和使用手册之类的文档;可以验证用户指南和使用手册之类的文档;n能够以准生产模式对新系统进行全负荷测试,可能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。以用测试结果验证性能指标。 7
24、.2.5 测试阶段的信息流测试阶段的信息流n输入信息有两类:输入信息有两类: q软件配置,包括需求说明书、设计说明书和源程序软件配置,包括需求说明书、设计说明书和源程序清单等;清单等; q测试配置,包括测试计划和测试方案。测试配置,包括测试计划和测试方案。 7.3 单元测试单元测试n单元测试集中检测模块;单元测试集中检测模块;n单元测试和编码属于软件过程的同一个阶段;单元测试和编码属于软件过程的同一个阶段;n可以应用人工测试和计算机测试这样两种不同可以应用人工测试和计算机测试这样两种不同类型的测试方法;类型的测试方法;n单元测试主要使用白盒测试技术,对多个模块单元测试主要使用白盒测试技术,对多
25、个模块的测试可以并行地进行。的测试可以并行地进行。 7.3.1 测试重点测试重点n模块接口模块接口n局部数据结构局部数据结构n重要的执行通路重要的执行通路n出错处理通路出错处理通路n边界条件边界条件7.3.2 代码审查代码审查n由审查小组正式进行测试称为代码审查;由审查小组正式进行测试称为代码审查;n可查出可查出30%70%的逻辑设计错误和编码错误;的逻辑设计错误和编码错误;n审查小组组成:审查小组组成:q组长组长q程序的设计者程序的设计者q程序的编写者程序的编写者q程序的测试者程序的测试者n一次审查会上可以发现许多错误,可以减少系统一次审查会上可以发现许多错误,可以减少系统验证的总工作量。验
26、证的总工作量。 7.3.3 计算机测试计算机测试n必须为每个单元测试开发驱动程序和必须为每个单元测试开发驱动程序和(或或)存根存根程序。程序。q驱动程序是一个驱动程序是一个“主程序主程序”,它接收测试数据,它接收测试数据,传送给被测试的模块,并且印出有关的结果。传送给被测试的模块,并且印出有关的结果。q存根程序代替被测试的模块所调用的模块。它使存根程序代替被测试的模块所调用的模块。它使用被它代替的模块的接口,可能做最少量的数据用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。制归还给调用它的模块。
27、n驱动程序和存根程序代表开销,通常并不把它驱动程序和存根程序代表开销,通常并不把它们作为软件产品的一部分交给用户。们作为软件产品的一部分交给用户。7.4 集成测试集成测试n集成测试是测试和组装软件的系统化技术,主集成测试是测试和组装软件的系统化技术,主要目标是发现与接口有关的问题。要目标是发现与接口有关的问题。n由模块组装成程序时有两种方法:由模块组装成程序时有两种方法:q非渐增式测试方法非渐增式测试方法q渐增式测试方法渐增式测试方法非渐增式测试方法:非渐增式测试方法:n先分别测试每个模块,再把所有模块按设计要先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序;求放在一起结合成
28、所要的程序;n非渐增式测试一下子把所有模块放在一起,并非渐增式测试一下子把所有模块放在一起,并把庞大的程序作为一个整体来测试,测试者面把庞大的程序作为一个整体来测试,测试者面对的情况十分复杂。对的情况十分复杂。n在庞大的程序中想要诊断定位一个错误是非常在庞大的程序中想要诊断定位一个错误是非常困难的,改正错误更是极端困难,而且一旦改困难的,改正错误更是极端困难,而且一旦改正一个错误之后,马上又会遇到新的错误。正一个错误之后,马上又会遇到新的错误。 渐增式测试方法:渐增式测试方法:n把下一个要测试的模块同已经测试好的那些模把下一个要测试的模块同已经测试好的那些模块结合起来进行测试;块结合起来进行测
29、试;n测试完以后再把下一个应该测试的模块结合进测试完以后再把下一个应该测试的模块结合进来测试,每次增加一个模块;来测试,每次增加一个模块;n实际上同时完成单元测试和集成测试;实际上同时完成单元测试和集成测试;n把程序划分成小段来构造和测试,在这个过程把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误;中比较容易定位和改正错误;n渐增方式有两种集成策略:渐增方式有两种集成策略:q自顶向下自顶向下q自底向上自底向上7.4.1 自顶向下集成自顶向下集成n从主控制模块开始,沿着程序的控制层次向下从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。移动,逐渐把各个模块结合
30、起来。n在把附属于主控制模块的在把附属于主控制模块的那些模块组装到程序结构那些模块组装到程序结构中去时,或者使用深度优中去时,或者使用深度优先的策略,或者使用宽度先的策略,或者使用宽度优先的策略。优先的策略。q深度优先:先组装在软件深度优先:先组装在软件结构的一条主控制通路上结构的一条主控制通路上的所有模块。的所有模块。q宽度优先:沿软件结构水宽度优先:沿软件结构水平地移动,把处于同一个平地移动,把处于同一个控制层次上的所有模块组控制层次上的所有模块组装起来。装起来。按深度优先策略组装按深度优先策略组装按宽度优先策略组装按宽度优先策略组装把模块结合进软件结构的过程由下述把模块结合进软件结构的过
31、程由下述4个步骤完成:个步骤完成:n第一步,对主控制模块进行测试,测试时用存根程序第一步,对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块;代替所有直接附属于主控制模块的模块;n第二步,根据选定的结合策略第二步,根据选定的结合策略(深度优先或宽度优先深度优先或宽度优先),每次用一个实际模块代换一个存根程序每次用一个实际模块代换一个存根程序(新结合进来新结合进来的模块往往又需要新的存根程序的模块往往又需要新的存根程序);n第三步,在结合进一个模块的同时进行测试;第三步,在结合进一个模块的同时进行测试;n第四步,为了保证加入模块没有引进新的错误,可能第四步,为了保证加入模块
32、没有引进新的错误,可能需要进行回归测试需要进行回归测试(即,全部或部分地重复以前做过即,全部或部分地重复以前做过的测试的测试)。n从第二步开始不断地重复进行上述过程,直到构造起从第二步开始不断地重复进行上述过程,直到构造起完整的软件结构为止。完整的软件结构为止。 优点:优点:n能够在测试的早期对主要的控制或关键的抉择能够在测试的早期对主要的控制或关键的抉择进行检验。进行检验。n如果选择深度优先的结合方法,可以在早期实如果选择深度优先的结合方法,可以在早期实现软件的一个完整的功能并且验证这个功能。现软件的一个完整的功能并且验证这个功能。缺点:缺点:n存根程序代替了低层次的模块,在软件结构中存根程
33、序代替了低层次的模块,在软件结构中没有重要的数据自下往上流。没有重要的数据自下往上流。用下述步骤可以实现自底向上的结合策略:用下述步骤可以实现自底向上的结合策略:n第一步,把低层模块组合成实现某个特定的软第一步,把低层模块组合成实现某个特定的软件子功能的族;件子功能的族;n第二步,写一个驱动程序第二步,写一个驱动程序(用于测试的控制程用于测试的控制程序序),协调测试数据的输入和输出;,协调测试数据的输入和输出;n第三步,对由模块组成的子功能族进行测试;第三步,对由模块组成的子功能族进行测试;n第四步,去掉驱动程序,沿软件结构自下向上第四步,去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起
34、来形成更大的子功能移动,把子功能族组合起来形成更大的子功能族。族。n上述第二步到第四步实质上构成了一个循环。上述第二步到第四步实质上构成了一个循环。 7.4.2 自底向上集成自底向上集成自底向上结合自底向上结合自底向上结合自底向上结合7.4.3 不同集成测试策略的比较不同集成测试策略的比较不同集成测试方法的比较:不同集成测试方法的比较:方法方法优点优点缺点缺点非渐非渐增式增式没有错误隔离手段没有错误隔离手段主要设计错误发现迟主要设计错误发现迟潜在可重用代码测试不充分潜在可重用代码测试不充分需要驱动程序和存根程序需要驱动程序和存根程序自顶自顶向下向下具有错误隔离手段具有错误隔离手段主要设计错误发
35、现早主要设计错误发现早不需要驱动程序不需要驱动程序潜在可重用代码测试不充分潜在可重用代码测试不充分需要存根程序需要存根程序自底自底向上向上具有错误隔离手段具有错误隔离手段潜在可重用代码能充分测试潜在可重用代码能充分测试不需要存根程序不需要存根程序主要设计错误发现迟主要设计错误发现迟需要驱动程序需要驱动程序混合混合具有错误隔离手段具有错误隔离手段主要设计错误发现早主要设计错误发现早潜在可重用代码能充分测试潜在可重用代码能充分测试混合策略:混合策略:n改进的自顶向下测试方法改进的自顶向下测试方法q基本上使用自顶向下的测试方法,但是在早期使基本上使用自顶向下的测试方法,但是在早期使用自底向上的方法测
36、试软件中的少数关键模块。用自底向上的方法测试软件中的少数关键模块。q能在测试的早期发现关键模块中的错误;测试关能在测试的早期发现关键模块中的错误;测试关键模块时需要驱动程序。键模块时需要驱动程序。n混合法混合法q对软件结构中较上层使用的自顶向下方法与对软对软件结构中较上层使用的自顶向下方法与对软件结构中较下层使用的自底向上方法相结合。件结构中较下层使用的自底向上方法相结合。q兼有两种方法的优缺点,当被测试的软件中关键兼有两种方法的优缺点,当被测试的软件中关键模块比较多时,这种混合法可能是最好的折衷方模块比较多时,这种混合法可能是最好的折衷方法。法。7.4.4 回归测试回归测试n回归测试是指重新
37、执行已经做过的测试的某个回归测试是指重新执行已经做过的测试的某个子集,以保证测试过程中的变化没有带来非预子集,以保证测试过程中的变化没有带来非预期的副作用。期的副作用。n回归测试就是用于保证由于调试或其他原因引回归测试就是用于保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外起的变化,不会导致非预期的软件行为或额外错误的测试活动。错误的测试活动。n回归测试可以通过重新执行全部测试用例的一回归测试可以通过重新执行全部测试用例的一个子集人工地进行,也可以使用自动化的捕获个子集人工地进行,也可以使用自动化的捕获回放工具自动进行。回放工具自动进行。 7.5 确认测试确认测试n确认测试也称
38、为验收测试,它的目标是验证软确认测试也称为验收测试,它的目标是验证软件的有效性。件的有效性。n软件有效性的一个简单定义是:如果软件的功软件有效性的一个简单定义是:如果软件的功能和性能如同用户所合理期待的那样,软件就能和性能如同用户所合理期待的那样,软件就是有效的。是有效的。n需求分析阶段产生的软件需求规格说明书,准需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望,因此是软确地描述了用户对软件的合理期望,因此是软件有效性的标准,也是进行确认测试的基础。件有效性的标准,也是进行确认测试的基础。 n确认测试必须有用户积极参与,或者以用户为确认测试必须有用户积极参与,或者以用户为
39、主进行。主进行。n使用用户界面输入测试数据并且分析评价测试使用用户界面输入测试数据并且分析评价测试的输出结果。的输出结果。n通常在验收之前由开发单位对用户进行培训。通常在验收之前由开发单位对用户进行培训。 7.5.1 确认测试的范围确认测试的范围n确认测试的一个重要内容是复查软件配置。确认测试的一个重要内容是复查软件配置。n复查的目的是保证软件配置的所有成分都齐全,复查的目的是保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,而且已经编好目录。成软件维护所必须的细节,而且已经编好目录。 7.5.2 软件配置复查
40、软件配置复查nAlpha测试由用户在开发者的场所进行,并且测试由用户在开发者的场所进行,并且在开发者对用户的在开发者对用户的“指导指导”下进行测试。下进行测试。Alpha测试是在受控的环境中进行的。测试是在受控的环境中进行的。nBeta测试由软件的最终用户们在一个或多个客测试由软件的最终用户们在一个或多个客户场所进行。开发者通常不在户场所进行。开发者通常不在Beta测试的现场,测试的现场,因此,因此,Beta测试是软件在开发者不能控制的环测试是软件在开发者不能控制的环境中的境中的“真实真实”应用。应用。7.5.3 Alpha和和Beta测试测试测试阶段测试阶段主要依据主要依据测试人员测试人员
41、测试方式测试方式主要测试内容主要测试内容单元测试单元测试 系统设计文档系统设计文档 开发小组开发小组 白盒测试白盒测试接口测试接口测试路径测试路径测试 子系统子系统测试测试系统设计文档系统设计文档需求文档需求文档独立测试独立测试小组小组白盒测试白盒测试黑盒测试黑盒测试接口测试接口测试路径测试路径测试功能测试功能测试性能测试性能测试 系统测试系统测试 需求文档需求文档独立测试独立测试小组小组黑盒测试黑盒测试功能测试功能测试健壮性测试健壮性测试性能测试性能测试用户界面测试用户界面测试安全性测试安全性测试压力测试压力测试可靠性测试可靠性测试安装安装/反安装测试反安装测试 验收测试验收测试 需求文档需
42、求文档用户用户黑盒测试黑盒测试测试总结:测试总结:1. 接口测试接口测试n每个接口可能有多个输入参数,每个参数有每个接口可能有多个输入参数,每个参数有 “典型值典型值”、“边界值边界值”、“异常值异常值”之分。之分。n根据接口的定义,可以推断某种输入应当产生根据接口的定义,可以推断某种输入应当产生什么样的输出。输出包括函数的返回值和输出什么样的输出。输出包括函数的返回值和输出参数。参数。 n观察是否有程序语句从来没有被执行过。观察是否有程序语句从来没有被执行过。n要特别留意函数体内的错误处理程序块。要特别留意函数体内的错误处理程序块。 2. 路径测试路径测试n想遍历测试几乎是不可能的,不测试或
43、者胡乱想遍历测试几乎是不可能的,不测试或者胡乱找几条路径测试却又不行。找几条路径测试却又不行。 n输入与对应的输出之间的路径是唯一的。由于输入与对应的输出之间的路径是唯一的。由于接口测试时的输入是有代表性的,因此相应的接口测试时的输入是有代表性的,因此相应的路径也具有代表性。路径也具有代表性。n路径测试检查表:数据类型、变量值、逻辑判路径测试检查表:数据类型、变量值、逻辑判断、循环、内存管理、文件断、循环、内存管理、文件I/O、错误处理。、错误处理。3. 功能测试功能测试n功能测试的基本方法是构造一些合理输入(在功能测试的基本方法是构造一些合理输入(在需求范围之内),检查输出是否与期望相同。需
44、求范围之内),检查输出是否与期望相同。n功能测试有两种比较好的测试方法:等价划分功能测试有两种比较好的测试方法:等价划分法和边界值分析法。法和边界值分析法。 n等价划分是指把输入空间划分为几个等价划分是指把输入空间划分为几个“等价区等价区间间”,在每个,在每个“等价区间等价区间”中只需要测试一个中只需要测试一个典型值就可以了。典型值就可以了。n边界值测试法是对等价划分法的补充。除了典边界值测试法是对等价划分法的补充。除了典型值外还要用边界值作为测试用例。型值外还要用边界值作为测试用例。 4. 健壮性测试健壮性测试n健壮性是指在异常情况下,软件能正常运行的健壮性是指在异常情况下,软件能正常运行的
45、能力。能力。n健壮性有两层含义:健壮性有两层含义:q容错能力。容错性测试通常构造一些不合理的输容错能力。容错性测试通常构造一些不合理的输入来引诱软件出错。入来引诱软件出错。q恢复能力恢复能力 。恢复测试重点考察以下几项:。恢复测试重点考察以下几项:n系统能否重新运行;系统能否重新运行;n有无重要的数据丢失;有无重要的数据丢失;n是否毁坏了其它相关的软件硬件。是否毁坏了其它相关的软件硬件。 5. 性能测试性能测试n性能测试即测试软件处理事务的速度,一是为性能测试即测试软件处理事务的速度,一是为了检验性能是否符合需求,二是为了得到某些了检验性能是否符合需求,二是为了得到某些性能数据供人们参考。性能
46、数据供人们参考。 n有时人们关心测试的有时人们关心测试的“绝对值绝对值” 。n有时人们关心测试的有时人们关心测试的“相对值相对值” 。 6. 用户界面测试用户界面测试n绝大多数软件拥有图形用户界面。绝大多数软件拥有图形用户界面。n图形用户界面的测试重点是正确性、易用性和图形用户界面的测试重点是正确性、易用性和视觉效果。视觉效果。n在评价易用性和视觉效果时,主观性非常强,在评价易用性和视觉效果时,主观性非常强,应当考虑多个人的观点。应当考虑多个人的观点。 7. 信息安全测试信息安全测试n信息安全性是指防止系统被非法入侵的能力,信息安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。
47、既属于技术问题又属于管理问题。n信息安全性测试有如下步骤:信息安全性测试有如下步骤:q为非法入侵设立目标;为非法入侵设立目标;q邀请(或悬赏)一些人扮演黑客,让他们想尽办邀请(或悬赏)一些人扮演黑客,让他们想尽办法入侵系统,实现法入侵系统,实现“目标目标”。q如果有人成功了,请他详述入侵的过程。如果有人成功了,请他详述入侵的过程。8. 压力测试压力测试n压力测试也叫负荷测试,即获取系统能正常运压力测试也叫负荷测试,即获取系统能正常运行的极限状态。行的极限状态。 n压力测试的主要任务是:构造正确的输入,使压力测试的主要任务是:构造正确的输入,使劲折腾系统却让它刚好不瘫痪。劲折腾系统却让它刚好不瘫
48、痪。 n压力测试的一个变种是敏感测试。压力测试的一个变种是敏感测试。n敏感测试目的是发现什么样的输入可能会引发敏感测试目的是发现什么样的输入可能会引发不稳定现象。不稳定现象。 9. 可靠性测试可靠性测试n可靠性是指在一定的环境下、给定的时间内、可靠性是指在一定的环境下、给定的时间内、系统不发生故障的概率。系统不发生故障的概率。n软件可靠性测试可能会花费很长时间。软件可靠性测试可能会花费很长时间。 n比较实用的办法是,让用户使用该系统,记录比较实用的办法是,让用户使用该系统,记录每一次发生故障的时刻。计算出相邻故障的时每一次发生故障的时刻。计算出相邻故障的时间间隔,注意要去掉非工作时间。间间隔,
49、注意要去掉非工作时间。n统计出不发生故障的统计出不发生故障的“最小时间间隔最小时间间隔”、“最最大时间间隔大时间间隔”和和“平均时间间隔平均时间间隔”。 10. 安装安装/反安装测试反安装测试n目前市面上有非常流行的、专门制作安装目前市面上有非常流行的、专门制作安装/反反安装程序的一些工具,如安装程序的一些工具,如Install Shelled。n主要测试工作:主要测试工作: q至少在标准配置和最低配置两种环境下测试;至少在标准配置和最低配置两种环境下测试;q如果有安装界面,应当尝试各种选项,如选择如果有安装界面,应当尝试各种选项,如选择“全部全部”、“部分部分”、“升级升级”等。等。 7.6
50、 白盒测试技术白盒测试技术n所谓测试方案包括具体的测试目的(例如,预所谓测试方案包括具体的测试目的(例如,预定要测试的具体功能),应该输入的测试数据定要测试的具体功能),应该输入的测试数据和预期的结果。通常又把测试数据和预期的输和预期的结果。通常又把测试数据和预期的输出结果称为测试用例。出结果称为测试用例。7.6.1 逻辑覆盖逻辑覆盖n有选择地执行程序中某些最有代表性的通路是有选择地执行程序中某些最有代表性的通路是对穷尽测试的惟一可行的替代办法。对穷尽测试的惟一可行的替代办法。n从覆盖源程序语句的详尽程度分析,大致有以从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:下一些不同的覆
51、盖标准:q语句覆盖语句覆盖q判定覆盖判定覆盖 q条件覆盖条件覆盖 q判定判定/条件覆盖条件覆盖 q条件组合覆盖条件组合覆盖 1. 语句覆盖语句覆盖n含义:选择足够多的测含义:选择足够多的测试数据,使被测程序中试数据,使被测程序中每个语句至少执行一次。每个语句至少执行一次。n分析:分析: 执行路径执行路径sacbedn测试用例:测试用例: A2,B0,X4 覆盖覆盖sacbed语句覆盖特点:语句覆盖特点:n语句覆盖对程序的逻辑覆盖很少。语句覆盖对程序的逻辑覆盖很少。n语句覆盖只关心判定表达式的值,而没有分别语句覆盖只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值时的情况。测试判定
52、表达式中每个条件取不同值时的情况。n语句覆盖是很弱的逻辑覆盖标准。语句覆盖是很弱的逻辑覆盖标准。 2. 判定覆盖(分支覆盖)判定覆盖(分支覆盖)n含义:不仅每个语句必须含义:不仅每个语句必须至少执行一次,而且每个至少执行一次,而且每个判定的每种可能的结果都判定的每种可能的结果都应该至少执行一次。应该至少执行一次。n所有判定分支:所有判定分支: (1) a点判定为点判定为T (2) a点判定为点判定为F (3) b点判定为点判定为T (4) b点判定为点判定为F2. 判定覆盖(分支覆盖)判定覆盖(分支覆盖)n测试用例:测试用例: . 满足满足(1)(4) A3,B0,X3 覆盖覆盖sacbd .
53、 满足满足(2)(3) A2,B1,X1 覆盖覆盖sabed2. 判定覆盖(分支覆盖)判定覆盖(分支覆盖)n或者或者 . 满足满足(1)(3) A2,B0,X3 覆盖覆盖sacbed . 满足满足(2)(4) A3,B1,X1 覆盖覆盖sabdn特点:比语句覆盖强,但特点:比语句覆盖强,但对程序逻辑的覆盖程度仍对程序逻辑的覆盖程度仍不高。不高。 3. 条件覆盖条件覆盖n含义:不仅每个语句至少含义:不仅每个语句至少执行一次,而且使判定表执行一次,而且使判定表达式中的每个条件都取到达式中的每个条件都取到各种可能的结果。各种可能的结果。n所有条件:所有条件: (1)A1 (2)A1 (3)B0 (4
54、)B0 (5)A2 (6)A2 (7)X1 (8)X13. 条件覆盖条件覆盖n测试用例:测试用例: . 满足满足(1)(3)(5)(7) A2,B0,X4 覆盖覆盖sacbed . 满足满足(2)(4)(6)(8) A1,B1,X1 覆盖覆盖sabd 3. 条件覆盖条件覆盖n或者或者 . 满足满足(1)(3)(5)(8) A2,B0,X1 覆盖覆盖sacbed . 满足满足(2)(4)(6)(7) A1,B1,X2 覆盖覆盖sabedn或者或者条件覆盖特点:条件覆盖特点:n条件覆盖通常比判定覆盖强,因为它使每个条条件覆盖通常比判定覆盖强,因为它使每个条件都取到了两个不同的结果,判定覆盖却只关件
55、都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。但也有反例,如第二心整个判定表达式的值。但也有反例,如第二组测试用例。组测试用例。n判定覆盖不一定包含条件覆盖,条件覆盖也不判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。一定包含判定覆盖。4. 判定判定/条件覆盖条件覆盖n含义:使得判定表达式中的每个条件都取到各种可能含义:使得判定表达式中的每个条件都取到各种可能的值,每个判定表达式也都取到各种可能的结果。的值,每个判定表达式也都取到各种可能的结果。n测试用例:测试用例: . 满足条件满足条件(1)(3)(5)(7) 和判定和判定(1)(3) A2,B0,X4 覆盖覆盖sa
56、cbed . 满足条件满足条件(2)(4)(6)(8) 和判定和判定(2)(4) A1,B1,X1 覆盖覆盖sabd n特点:有时判定特点:有时判定/条件覆盖也并不比条件覆盖更强。条件覆盖也并不比条件覆盖更强。 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. 条件组合覆
57、盖条件组合覆盖n测试用例:测试用例: .满足满足(1)(5) A2,B0,X4 覆盖覆盖sacbed .满足满足(2)(6) A2,B1,X1 覆盖覆盖sabed .满足满足(3)(7) A1,B0,X2 覆盖覆盖sabed . 满足满足(4)(8) A1,B1,X1 覆盖覆盖sabd条件组合覆盖特点:条件组合覆盖特点:n条件组合覆盖是前述几种覆盖标准中最强的。条件组合覆盖是前述几种覆盖标准中最强的。满足条件组合覆盖标准的测试数据,也一定满满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定足判定覆盖、条件覆盖和判定/条件覆盖标准。条件覆盖标准。n但是,条件组合覆盖标准的测试数据
58、并不一定但是,条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。(能使程序中的每条路径都执行到。(4组数据组数据都没有测试到都没有测试到sacbd) 从对程序路径的覆盖程度分析的逻辑覆盖标准:从对程序路径的覆盖程度分析的逻辑覆盖标准:6. 点覆盖点覆盖n含义:选取足够多的测试数据,使得程序执行路径至含义:选取足够多的测试数据,使得程序执行路径至少经过流图的每个结点一次。少经过流图的每个结点一次。n特点:由于流图的每个结点与一条或多条语句相对应,特点:由于流图的每个结点与一条或多条语句相对应,因此点覆盖标准和语句覆盖标准是相同的。因此点覆盖标准和语句覆盖标准是相同的。7. 边覆盖边
59、覆盖n含义:选取足够多测试数据,使得程序执行路径至少含义:选取足够多测试数据,使得程序执行路径至少经过流图中每条边一次。经过流图中每条边一次。n特点:通常边覆盖和判定覆盖是一致的。特点:通常边覆盖和判定覆盖是一致的。8. 路径覆盖路径覆盖n含义:选取足够多测试数据,使程序的每条可能路径含义:选取足够多测试数据,使程序的每条可能路径都至少执行一次都至少执行一次(如果程序图中有环,则要求每个环如果程序图中有环,则要求每个环至少经过一次至少经过一次)。 语句语句覆盖覆盖判判定定覆覆盖盖条条件件覆覆盖盖判定判定/条件覆盖条件覆盖条件组合覆盖条件组合覆盖路径覆盖路径覆盖点覆盖点覆盖边覆盖边覆盖7.6.2
60、 控制结构测试控制结构测试1. 基本路径测试基本路径测试n基本路径测试是基本路径测试是Tom McCabe提出的一种白盒提出的一种白盒测试技术。测试技术。q首先计算程序的环形复杂度;首先计算程序的环形复杂度;q以该复杂度为指南定义执行路径的基本集合;以该复杂度为指南定义执行路径的基本集合;q从该基本集合导出的测试用例可保证程序中的每从该基本集合导出的测试用例可保证程序中的每条语句至少执行一次,而且每个条件在执行时都条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。将分别取真、假两种值。 i=1;total.input=total.valid=0;sum=0;DO WHILE valuei -99
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考数学实践2024年试题及答案
- 网络服务的级别试题及答案分析
- 企业竞争策略与风险分析试题及答案
- 2025年软考设计师备考情绪管理试题及答案
- 2025农民土地流转合同范本
- 2025企业租赁合同标准范文
- 棉业公司范本章程
- 法学概论研究的国际视野与试题与答案
- 班级获奖经验的总结与反思计划
- 组织文件档案的秘书工作计划
- 《隧道测量》课件
- 《平凡的世界》中孙少平人物形象分析8500字(论文)
- 《结构式家庭疗法提升“丧偶式育儿”家庭亲密度的个案研究》
- 化学实验室废物处理管理制度
- 2024年六西格玛黄带认证考试练习题库(含答案)
- 第三章-足球-基本技术 足球运球绕杆 教学设计 人教版初中体育与健康七年级全一册
- 2024年同等学力英语考试真题及详解
- 会展活动场地布置与搭建技术规范手册
- “非遗”之首-昆曲经典艺术欣赏智慧树知到期末考试答案章节答案2024年北京大学
- 《药事管理学》习题库
- 水文地质技术员技能鉴定理论考试题库-下(多选、判断题)
评论
0/150
提交评论