资源描述
第七章第七章 测试测试n n基本概念基本概念n n单元测试单元测试n n集成测试集成测试n n验收测试验收测试n n设计测试方案设计测试方案n n调试调试n n软件可靠性软件可靠性n n日立预测法日立预测法n n自动测试工具自动测试工具基本概念基本概念n n7.1.1 软件测试的目标n n7.1.2 黑盒测试和白盒测试n n7.1.3 软件测试的步骤n n7.1.4 测试阶段的信息流基本概念基本概念n n 软件测试的目标n n测试是为了发现程序中的错误而执行程序的过测试是为了发现程序中的错误而执行程序的过程程n n只能尽可能查错,不能证明程序中没有错只能尽可能查错,不能证明程序中没有错n n测试员与程序员不应是同一个人测试员与程序员不应是同一个人基本概念基本概念n n 黑盒测试和白盒测试n n黑盒测试黑盒测试-已经知道产品应该具有的功能,已经知道产品应该具有的功能,检验每个功能是否都能正常使用检验每个功能是否都能正常使用-功能测试功能测试n n白盒测试白盒测试-已经知道产品内部工作过程,检已经知道产品内部工作过程,检验产品内部动作是否按规定正常使用验产品内部动作是否按规定正常使用-结构结构测试测试基本概念基本概念n n 软件测试的步骤n n模块测试模块测试n n单元测试单元测试n n子系统测试子系统测试n n测试模块的接口测试模块的接口n n系统测试系统测试n n和子系统测试合称集成测试和子系统测试合称集成测试n n验收测试验收测试n n平行运行平行运行基本概念基本概念n n测试阶段的信息流单元测试单元测试n n7.2.1 单元测试考虑n n7.2.2 单元测试过程单元测试单元测试n n 单元测试考虑n n模块接口模块接口n n内部检查:传输参数的数目、属性、单位、次序内部检查:传输参数的数目、属性、单位、次序是否匹配;全程变量的定义是否一致;只做输入是否匹配;全程变量的定义是否一致;只做输入的变元有无被修改的变元有无被修改n n外部检查:打开、结束、关闭文件的操作;文件外部检查:打开、结束、关闭文件的操作;文件和属性;和属性;IOIO错误处理;输出拼写错误处理;输出拼写n n局部数据结构局部数据结构n n数据说明数据说明(declaration)declaration);初始化与缺省值的设初始化与缺省值的设置;变量名拼写;数据类型的相容性;上置;变量名拼写;数据类型的相容性;上 下溢下溢出及地址异常出及地址异常单元测试单元测试n n 单元测试考虑n n重要的执行通路重要的执行通路 常见的错误常见的错误n n计算次序问题计算次序问题n n不同类型混合运算(例:比较类型不同的量)不同类型混合运算(例:比较类型不同的量)n n初值设置错误初值设置错误n n精度问题(例:精度不够导致两变量不可能相等,精度问题(例:精度不够导致两变量不可能相等,而程序中等待相等条件的出现)而程序中等待相等条件的出现)n n表达式错误表达式错误n n循环终止条件错误(例:次数差循环终止条件错误(例:次数差1 1,或陷入死循环),或陷入死循环)单元测试单元测试n n 单元测试考虑n n出错处理通路出错处理通路 常见的问题常见的问题n n输出的错误信息难以理解,不能确定错误位置输出的错误信息难以理解,不能确定错误位置n n描述的错误与实际错误不符描述的错误与实际错误不符n n处理之前系统已经干预处理之前系统已经干预n n处理不正确处理不正确n n边界条件边界条件 n n单元测试中最后,也可能是最重要的任务,因为软单元测试中最后,也可能是最重要的任务,因为软件常在其边界失效件常在其边界失效单元测试单元测试n n 单元测试过程n n代码审查代码审查n n测试软件测试软件集成测试集成测试n n 非渐增式测试n n分别测试每个模块,再放在一起结合成所要的程序分别测试每个模块,再放在一起结合成所要的程序n n 渐增式测试n n将下一个要测试的模块同以测试好的模块放在一起将下一个要测试的模块同以测试好的模块放在一起测试,类推结合成所要的程序测试,类推结合成所要的程序n n分为分为自顶向下自顶向下和和自底向上自底向上两种方法两种方法集成测试集成测试n两者比较两者比较n渐增式测试渐增式测试可以较早发现模块间的接口错误可以较早发现模块间的接口错误n非非渐增式测试渐增式测试最后才组装,因此错误发现得晚。最后才组装,因此错误发现得晚。n非渐增式测试非渐增式测试中发现错误后难以诊断定位中发现错误后难以诊断定位n渐增式测试渐增式测试中,出现的错误往往跟最新加入的模块中,出现的错误往往跟最新加入的模块有关。有关。n渐增式测试渐增式测试在不断集成的过程中使模块不断在新的在不断集成的过程中使模块不断在新的条件下受到新的检测,测试更彻底。条件下受到新的检测,测试更彻底。n渐增式测试渐增式测试较较非非渐增式测试渐增式测试费时。费时。n非渐增式测试非渐增式测试可以同时并行测试所有模块,能充分可以同时并行测试所有模块,能充分利用人力。利用人力。集成测试集成测试n n 自顶向下结合n n步骤步骤集成测试集成测试n n 自顶向下结合n n步骤步骤n n测试顶端模块,用存根程序测试顶端模块,用存根程序(stub)stub)代替直接附属的代替直接附属的下层模块下层模块n n根据深度优先或宽度优先的策略,每次用一个实际根据深度优先或宽度优先的策略,每次用一个实际模块代换一个模块代换一个stubstubn n在结合进一个模块的同时进行测试在结合进一个模块的同时进行测试n n回归测试回归测试-全部或部分地重复以前做过的测试全部或部分地重复以前做过的测试集成测试集成测试n n自顶向下结合n n优点优点n n在早期即对主要控制及关键的抉择进行检验在早期即对主要控制及关键的抉择进行检验n n问题问题n nStubStub只是对低层模块的模拟,测试时没有重要的数只是对低层模块的模拟,测试时没有重要的数据自下往上流,许多重要的测试须推迟进行,而且据自下往上流,许多重要的测试须推迟进行,而且在早期不能充分展开人力在早期不能充分展开人力集成测试集成测试n n自底向上结合n n步骤步骤集成测试集成测试n n自底向上结合n n步骤步骤n n把低层模块组合成族,每族实现一个子功能把低层模块组合成族,每族实现一个子功能n n用驱动程序用驱动程序(Driver)Driver)协调测试数据的协调测试数据的IOIO,测试子功测试子功能族能族n n去掉去掉DriverDriver,自下而上把子功能族合成更大的子功能自下而上把子功能族合成更大的子功能族族集成测试集成测试n n不同集成测试策略的比较n n改进的自顶向下测试方法改进的自顶向下测试方法n n混合法混合法n n两种策略的优、缺点刚好互补,但单用其中任一种两种策略的优、缺点刚好互补,但单用其中任一种都不实际,通常根据软件的特点将二者混用都不实际,通常根据软件的特点将二者混用验收测试验收测试n n7.4.1 验收测试的范围n n7.4.2 软件配置复查验收测试验收测试n n 验收测试的范围n n某些已经测试过的纯粹技术性的特点可能不需要再某些已经测试过的纯粹技术性的特点可能不需要再次测试次测试n n对用户特别感兴趣的功能或性能,可能需要增加一对用户特别感兴趣的功能或性能,可能需要增加一些测试;些测试;n n通常主要使用生产中的实际数据进行测试;通常主要使用生产中的实际数据进行测试;n n可能需要设计并执行一些与用户使用步骤有关的测可能需要设计并执行一些与用户使用步骤有关的测试试n n 软件配置复查系统测试系统测试(System Testing)n n系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。n n系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。测试和测试n在软件交付使用之后,用户将如何实际使用程序,对于开发者来说是无法预测的。n测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。n测试的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。尤其注重产品的界面和特色。n测试可以从软件产品编码结束之时开始,或在模块(子系统)测试完成之后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。n测试是由软件的多个用户在实际使用环境下进行的测试。这些用户返回有关错误信息给开发者。n n测试时,开发者通常不在测试现场。因而,测试是在开发者无法控制的环境下进行的软件现场应用。n n在测试中,由用户记下遇到的所有问题,包括真实的以及主观认定的,定期向开发者报告。n测试主要衡量产品的FLURPS。着重于产品的支持性,包括文档、客户培训和支持产品生产能力。n n只有当测试达到一定的可靠程度时,才能开始测试。它处在整个测试的最后阶段。同时,产品的所有手册文本也应该在此阶段完全定稿。设计测试方案设计测试方案n n7.5.1 逻辑覆盖n n7.5.2 等价划分n n7.5.3 边界值分析n n7.5.4 错误推测n n7.5.5 实用测试策略设计测试方案设计测试方案n n 逻辑覆盖-适用于白盒测试n n语句覆盖:语句覆盖:每个语句至少执行一次每个语句至少执行一次n n判定覆盖:在语句覆盖的基础上,每个判定的每个判定覆盖:在语句覆盖的基础上,每个判定的每个分支至少执行一次分支至少执行一次n n条件覆盖:在语句覆盖的基础上,使每个判定表达条件覆盖:在语句覆盖的基础上,使每个判定表达式的每个条件都取到各种可能的结果式的每个条件都取到各种可能的结果n n判定判定/条件覆盖:即条件覆盖:即判定覆盖判定覆盖 条件覆盖条件覆盖n n条件组合覆盖:每个判定表达式中条件的各种可能条件组合覆盖:每个判定表达式中条件的各种可能组合都至少出现一次组合都至少出现一次n n点覆盖;边界覆盖;路径覆盖点覆盖;边界覆盖;路径覆盖由 弱 到 强设计测试方案设计测试方案n n 逻辑覆盖n n语句覆盖语句覆盖 A=2,B=0,X=4A=2,B=0,X=4若若ANDAND错写为错写为OROR,或或X1X1错写为错写为X1X 1AND B=0TA=2OR X 1TX=X/AX=X+1返回返回FF设计测试方案设计测试方案n n 逻辑覆盖n n判定覆盖判定覆盖 A=3,B=0,X=3A=3,B=0,X=3 A=2,B=1,X=1A=2,B=1,X=1 若若X1X1错写为错写为X1X 1AND B=0TA=2OR X 1TX=X/AX=X+1返回返回FF设计测试方案设计测试方案n n 逻辑覆盖n n条件覆盖条件覆盖n n A=2,B=0,X=4A=2,B=0,X=4(满足满足A1,B=0;A=2,X1)A1,B=0;A=2,X1)n nA=1,B=1,X=1A=1,B=1,X=1 (满足满足A A 1,B 1,B 0;A 0;A 2,X2,X 1 1)入口入口A 1AND B=0TA=2OR X 1TX=X/AX=X+1返回返回FF设计测试方案设计测试方案n n 逻辑覆盖n n条件组合覆盖条件组合覆盖n nA1,B=0A1,B=0;A1,BA1,B 0 0n nA A 1,B=01,B=0;A A 1,B1,B 0 0 n nA=2,X1A=2,X1;A=2,XA=2,X 1 1 n nA A 2,X1 2,X1;A A 2,X 2,X 1 1 n n仍有未测到的路径仍有未测到的路径n n(T,F)T,F)入口入口A 1AND B=0TA=2OR X 1TX=X/AX=X+1返回返回FF设计测试方案设计测试方案n n 逻辑覆盖n n边覆盖边覆盖 A=3,B=0,X=3A=3,B=0,X=3 (T,F)(T,F)A=2,B=1,X=1A=2,B=1,X=1 (F,T)(F,T)入口入口A 1AND B=0TA=2OR X 1TX=X/AX=X+1返回返回FF设计测试方案设计测试方案n n 逻辑覆盖逻辑覆盖n n路径覆盖路径覆盖 A=1,B=1,X=1A=1,B=1,X=1 (F,F)(F,F)A=1,B=1,X=2A=1,B=1,X=2 (F,T)(F,T)A=3,B=0,X=1A=3,B=0,X=1 (T,F)(T,F)A=2,B=0,X=4A=2,B=0,X=4 (T,T(T,T)入口入口A 1AND B=0TA=2OR X 1TX=X/AX=X+1返回返回FFn n对一个具有多重选择和循环嵌套的程序,不对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小同的路径数目可能是天文数字。给出一个小程序的流程图,它包括了一个执行程序的流程图,它包括了一个执行2020次的循次的循环。环。n n包含的不同执行路径数达包含的不同执行路径数达520520条,对每一条路条,对每一条路径进行测试需要径进行测试需要1 1毫秒,假定一年工作毫秒,假定一年工作365 365 2424小时,要想把所有路径测试完,需小时,要想把所有路径测试完,需31703170年。年。n n假设一个程序假设一个程序P P有输入量有输入量X X和和Y Y及输出量及输出量Z Z。在在字长为字长为3232位的计算机上运行。若位的计算机上运行。若X X、Y Y取整数,取整数,按黑盒方法进行穷举测试:按黑盒方法进行穷举测试:n n可能采用的可能采用的 测试数据组:测试数据组:232232 232232 264 264 n n如果测试一如果测试一 组数据需要组数据需要1 1毫秒,一年工作毫秒,一年工作365 24365 24小时,完小时,完成所有测试需成所有测试需5 5亿年。亿年。设计测试方案设计测试方案n n 等价划分n n 划分经验划分经验n n如果规定了输入值的范围,则可划分出一个有效的如果规定了输入值的范围,则可划分出一个有效的等价类等价类(输入值在此范围内输入值在此范围内),两个无效的等价类,两个无效的等价类(输输入值小于最小值或大于最大值入值小于最小值或大于最大值)n n如果规定了输入数据的个数,则类似地也可以划分如果规定了输入数据的个数,则类似地也可以划分出一个有效的等价类和两个无效的等价类出一个有效的等价类和两个无效的等价类n n如果规定了输入数据的一组值,而且程序对不同输如果规定了输入数据的一组值,而且程序对不同输入值做不同处理,则每个允许的输入值是一个有效入值做不同处理,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类的等价类,此外还有一个无效的等价类(任一个不允任一个不允许的输入值许的输入值)设计测试方案设计测试方案n n 等价划分n n 划分经验划分经验n n如果规定了输入数据必须遵循的规则,则可以划分如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类出一个有效的等价类(符合规则符合规则)和若干个无效的等和若干个无效的等价类价类(从各种不同角度违反规则从各种不同角度违反规则)n n如果规定了输入数据为整型,则可以划分出正数、如果规定了输入数据为整型,则可以划分出正数、零和负整数等三个有效类零和负整数等三个有效类n n如果程序的处理对象是表格,则应该使用空表,以如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表及含一项或多项的表设计测试方案设计测试方案n n 等价划分n n有效输入的等价类有有效输入的等价类有n n(1)161)16个数字字符组成的数字串个数字字符组成的数字串(最高位数字不是零最高位数字不是零)n n(2)(2)最高位数字是零的数字串;最高位数字是零的数字串;n n(3)(3)最高位数字左邻是负号的数字串;最高位数字左邻是负号的数字串;n n无效输入的等价类有无效输入的等价类有n n(4)(4)空字符串空字符串(全是空格全是空格);n n(5)(5)左部填充的字符既不是零也不是空格;左部填充的字符既不是零也不是空格;n n(6)(6)最高位数字右面由数字和空格混合组成;最高位数字右面由数字和空格混合组成;n n(7)(7)最高位数字右面由数字和其他字符混合组成;最高位数字右面由数字和其他字符混合组成;n n(8)(8)负号与最高位数字之间有空格;负号与最高位数字之间有空格;n n例如,在程序的规格说明中,对输入条件有一句话:“项数可以从1到999”则有效等价类是“1项数999”两个无效等价类是“项数1”或“项数999”。在数轴上表示成:设计测试方案设计测试方案n n 等价划分n n合法输出的等价类有合法输出的等价类有n n(9)(9)在计算机能表示的最小负整数和零之间的负整数;在计算机能表示的最小负整数和零之间的负整数;n n(10)(10)零;零;n n(11)(11)在零和计算机能表示的最大正整数之间的正整数;在零和计算机能表示的最大正整数之间的正整数;n n非法输出的等价类有非法输出的等价类有n n(12)(12)比计算机能表示的最小负整数还小的负整数比计算机能表示的最小负整数还小的负整数n n(13)(13)比计算机能表示的最大正整数还大的正整数比计算机能表示的最大正整数还大的正整数设计测试方案设计测试方案n n边界值分析n n 程序最容易在边界发生错误程序最容易在边界发生错误 n n 通常与等价划分结合进行。通常与等价划分结合进行。设计测试方案设计测试方案n n错误推测n n思路思路n n 列出可能有的错误列出可能有的错误 n n列出容易发生错误的特殊情况列出容易发生错误的特殊情况 n n根据根据n n直觉、经验直觉、经验n n工具:常见错误清单、判定表等工具:常见错误清单、判定表等设计测试方案设计测试方案n n 实用测试策略n n在任何情况下都应该使用在任何情况下都应该使用边界值分析边界值分析的方法的方法n n 必要时用必要时用等价划分法等价划分法补充补充n n 必要时再用必要时再用错误推测法错误推测法补充补充n n 对照程序逻辑,检查测试方案。可根据对程序对照程序逻辑,检查测试方案。可根据对程序可靠性的要求采用不同的可靠性的要求采用不同的逻辑覆盖标准逻辑覆盖标准,必要,必要时补充一些测试方案时补充一些测试方案调试调试n n7.6.1 调试技术n n7.6.2 调试策略调试调试n n 调试技术n n输出存储器内容输出存储器内容n n以八进制或十六进制的形式印出存储器的内容。以八进制或十六进制的形式印出存储器的内容。n n缺点缺点n n 输出信息量极大,不易解读且大多无用输出信息量极大,不易解读且大多无用n n 输出的是程序在某一时刻的静态情况,且往往不是出错输出的是程序在某一时刻的静态情况,且往往不是出错 时的状态时的状态调试调试n n调试技术n n打印语句打印语句n n缺点缺点 n n可能输出大量需要分析的信息,对于大型程序系统来说情可能输出大量需要分析的信息,对于大型程序系统来说情况更是如此况更是如此n n必须修改源程序才能插入打印语句,但是这可能改变了关必须修改源程序才能插入打印语句,但是这可能改变了关键的时间关系,从而既可能掩盖错误,也可能引进新的错键的时间关系,从而既可能掩盖错误,也可能引进新的错误。误。调试调试n n 调试策略n n试探法试探法n n凭经验猜测。凭经验猜测。n n 回溯法回溯法n n由症状由症状最先出现的地方,沿最先出现的地方,沿控制流控制流向回检查。适用于小型程序。向回检查。适用于小型程序。n n对分查找法对分查找法n n在关键点插入变量的正确值在关键点插入变量的正确值n n归纳法归纳法n n从错误症状中找出规律,推断根源从错误症状中找出规律,推断根源n n演绎法演绎法n n普通普通 特殊特殊 n n从假设中逐步排除、精化,从而导出错误根源从假设中逐步排除、精化,从而导出错误根源软件可靠性软件可靠性n n7.7.1 基本概念n n7.7.2 估算平均无故障时间的方法n n7.7.3 程序正确性证明软件可靠性软件可靠性n n 基本概念n n可靠性可靠性n n 程序在给定的程序在给定的时间间隔内时间间隔内,按照说明书的规定,成,按照说明书的规定,成功地运行的概率。功地运行的概率。n n 可用性可用性n n 程序在给定的程序在给定的时间点时间点,按照说明书的规定,成功地,按照说明书的规定,成功地运行的概率运行的概率n n 正确性正确性n n 程序的功能正确程序的功能正确软件可靠性软件可靠性n n 估算平均无故障时间的方法n n平均无故障时间平均无故障时间MTTF=MTTF=nK为经验常数(典型值约在为经验常数(典型值约在200左右);左右);nET为测试前故障总数;为测试前故障总数;nIT为程序长度(机器指令总数);为程序长度(机器指令总数);n 为测试(包括调试)时间;为测试(包括调试)时间;nEC()为时间从为时间从0至至 期间改正的错误数期间改正的错误数软件可靠性软件可靠性n n 程序正确性证明n n正确性证明只证明程序功能正确,但不能验证正确性证明只证明程序功能正确,但不能验证动态特性;动态特性;n n证明过程本身也可能发生错误证明过程本身也可能发生错误日立预测法日立预测法n n7.8.1 测试完成率模型n n7.8.2 错误发现率模型n n7.8.3 使用日立预测法的步骤日立预测法日立预测法n n测试完成率模型100%50%100%测试时间使用率测试时间使用率 =所用时间所用时间 /总时间总时间第一第一阶段阶段第二第二阶段阶段第三第三阶段阶段测试用例完成率测试用例完成率 =已完成用例已完成用例 /全部用例全部用例工程的成败取工程的成败取决于第一阶段决于第一阶段向第二阶段转向第二阶段转移断点的位置,移断点的位置,一般成功的工一般成功的工程其转折点位程其转折点位于于15%15%;若超;若超过过55%55%则破产则破产不可避免不可避免日立预测法日立预测法n n 错误发现率模型错误发现率错误发现率=单位时间内发现的错误数单位时间内发现的错误数时间时间峰值时间峰值时间成成功功的的工工程程失败的失败的工程工程极坏的工程极坏的工程刚过峰值点后刚过峰值点后刚过峰值点后刚过峰值点后曲线的导数关曲线的导数关曲线的导数关曲线的导数关系到工程的成系到工程的成系到工程的成系到工程的成败。若导数值败。若导数值败。若导数值败。若导数值大于大于大于大于-0.3-0.3,则,则,则,则失败不可避免失败不可避免失败不可避免失败不可避免自动测试工具自动测试工具n n7.9.1 测试数据生成程序n n7.9.2 动态分析程序n n7.9.3 静态分析程序n n7.9.4 文件比较程序自动测试工具自动测试工具n n测试数据生成程序n n功能功能n n自动生成大量输入数据自动生成大量输入数据n n用途用途 n n测试系统在实际环境中的性能(例如测试数据库管测试系统在实际环境中的性能(例如测试数据库管理系统)理系统)n n自动校核系统输出自动校核系统输出(若输出数据的语法可以被形式地若输出数据的语法可以被形式地说明说明)n n缺点缺点n n不能自动生成预期的输出,因此用途有限。不能自动生成预期的输出,因此用途有限。自动测试工具自动测试工具n n动态分析程序n n功能功能n n分析程序中每个语句的执行次数分析程序中每个语句的执行次数n n 组成组成 n n检测部分:插入检测语句,负责收集、整理语句执行次数检测部分:插入检测语句,负责收集、整理语句执行次数n n显示部分:以容易理解的形式印出收集的信息显示部分:以容易理解的形式印出收集的信息n n用途用途n n发现测试中没有执行的语句,以增加相应的测试用例发现测试中没有执行的语句,以增加相应的测试用例n n发现不按要求终结的循环发现不按要求终结的循环n n发现不应执行却执行了的代码,及应执行而未执行的代码发现不应执行却执行了的代码,及应执行而未执行的代码自动测试工具自动测试工具n n 静态分析程序n n不执行程序,仅扫描程序的正文,从中寻找可不执行程序,仅扫描程序的正文,从中寻找可能导致错误的异常情况能导致错误的异常情况n n 文件比较程序n n主要步骤主要步骤 n n 建立一个文件存放预期的正确结果建立一个文件存放预期的正确结果n n 执行测试,将输出数据存进另一个文件执行测试,将输出数据存进另一个文件n n 使用文件比较程序来比较上述两个文件,印出两者使用文件比较程序来比较上述两个文件,印出两者之差异之差异
展开阅读全文