软件工程学:实现_第1页
软件工程学:实现_第2页
软件工程学:实现_第3页
软件工程学:实现_第4页
软件工程学:实现_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、通常把编码和测试统称为实现。通常把编码和测试统称为实现。第第7章章 实实 现现 本章介绍编码和测试两个阶段,其中主要介绍进行单元本章介绍编码和测试两个阶段,其中主要介绍进行单元测试、集成测试、确认测试的方法和步骤,设计测试方案的测试、集成测试、确认测试的方法和步骤,设计测试方案的白盒和黑盒测试技术,以及软件可靠性的相关概念。白盒和黑盒测试技术,以及软件可靠性的相关概念。 软件测试的软件测试的任务任务:根据软件开发各阶段的文档资料和程序的内:根据软件开发各阶段的文档资料和程序的内部结构,精心设计一组测试方案,用这些方案执行程序,找出软部结构,精心设计一组测试方案,用这些方案执行程序,找出软件中潜

2、在的各种错误和缺陷,并进行调试纠错。件中潜在的各种错误和缺陷,并进行调试纠错。 编码是详细设计的自然结果,是将详细设计得到的处理过程描编码是详细设计的自然结果,是将详细设计得到的处理过程描述转换为基于某种程序设计语言的程序。述转换为基于某种程序设计语言的程序。 软件测试的软件测试的目的目的:在软件投入生产运行之前,尽可能多地发现:在软件投入生产运行之前,尽可能多地发现软件中的错误和缺陷。软件中的错误和缺陷。 防不胜防的软件错误防不胜防的软件错误 例例1:1963年年, 美国美国, 飞往火星的火箭爆炸飞往火星的火箭爆炸, 损失损失$ 10 million. 原因原因: FORTRAN循环循环 D

3、O 5 I = 1, 3 误写为误写为 DO 5 I = 1.3例例2:1996年,美国年,美国 Washington Post 报导报导Dallas, Aug. 23 The captain of an American Airlines jet that crashed in Colombia last December entered an incorrect one-letter computer command that sent the plane into a mountain, the airline said today.第第7章章 实现实现第第7章章 实现实现The cra

4、sh killed all but four of the 163 people aboard.Americans investigators concluded that the captain of the Boeing 757 apparently thought he had entered the coordinates for the intended destination, Cali.But on most South American aeronautical charts, the one-letter code for Cali is the same as the on

5、e for Bogota, 132 miles in the opposite direction.The coordinates for Bogota directed the plane toward the mountain, according to a letter by Cecil Ewell, Americans chief pilot and vice president for flight. The codes for Bogota and Cali are different in most computer databases, Ewell said. 软件测试是保证软

6、件质量的关键步骤,是对软件测试是保证软件质量的关键步骤,是对软件规格说明、设计和编码的最后复审,其工作软件规格说明、设计和编码的最后复审,其工作量约占总工作量量约占总工作量40%以上(对于人命关天的系统,以上(对于人命关天的系统,测试相当于其它开发总成本的测试相当于其它开发总成本的3 - 5倍倍)。)。 这意味着,写出程序代码并不是开发工作接这意味着,写出程序代码并不是开发工作接近完成,实际上还有大约同样多甚至更多的工作近完成,实际上还有大约同样多甚至更多的工作需要做。需要做。第第7章章 实现实现1. 编码编码2、编码风格、编码风格程序代码应简明清晰、易读易懂,应遵循以下规则:程序代码应简明清

7、晰、易读易懂,应遵循以下规则: 程序内部应该有很好的文档(标示符、注释、组织等)程序内部应该有很好的文档(标示符、注释、组织等) 数据说明应该易于理解便于查阅(说明次序、实现方法等)数据说明应该易于理解便于查阅(说明次序、实现方法等) 语句构造应该尽可能简单直观语句构造应该尽可能简单直观 输入输出风格遵守人机界面设计准则输入输出风格遵守人机界面设计准则 效率满足用户需求即可(运行时间、存储效率、效率满足用户需求即可(运行时间、存储效率、I/O效率等)效率等)2. 软件测试基础软件测试基础定义:测试是为了定义:测试是为了发现程序中的错误发现程序中的错误而执行程序的过程。而执行程序的过程。1、软件

8、测试的目标、软件测试的目标目标:证明程序有错误,从而发现错误并排除错误。目标:证明程序有错误,从而发现错误并排除错误。2、软件测试指导原则、软件测试指导原则 所有的测试都应该追溯到用户需求所有的测试都应该追溯到用户需求 应该在测试开始之前制定严格的测试计划应该在测试开始之前制定严格的测试计划 把把Pareto原理应用到软件测试中原理应用到软件测试中 应该从应该从“小模块小模块”开始,逐步过渡到开始,逐步过渡到“大模块大模块”的测试的测试 不可能进行穷举测试不可能进行穷举测试 测试方案应作为文档长期保存测试方案应作为文档长期保存 应该由独立的第三方进行测试应该由独立的第三方进行测试3、软件测试方

9、法与技术、软件测试方法与技术2. 软件测试基础软件测试基础(1)静态测试与动态测试)静态测试与动态测试 静态测试静态测试是指被测试程序不在机器上运行,而是采用人工测是指被测试程序不在机器上运行,而是采用人工测试或计算机辅助分析的手段对程序进行的测试。试或计算机辅助分析的手段对程序进行的测试。 动态测试动态测试是指通过实际运行被测试程序从而发现错误的测试。是指通过实际运行被测试程序从而发现错误的测试。(2)黑盒测试与白盒测试)黑盒测试与白盒测试 黑盒测试黑盒测试(black-box , or closed-box testing): Make sure that every kind of in

10、put is submitted, and the output observed matches the output expected. Functional testing白盒测试白盒测试(white-box , or open-box, clear-box testing): Use the structure of the program to test. Structural testing 动态测试三过程:设计方案、执行程序、分析结果并发现错误动态测试三过程:设计方案、执行程序、分析结果并发现错误(3)穷举测试与选择测试)穷举测试与选择测试2. 软件测试基础软件测试基础14141

11、6161616161610103 32 22 22 2若程序若程序1次执行需次执行需10-3秒,秒,则对于所有合法输入的测试大约则对于所有合法输入的测试大约需用需用1万年,而且还应测试输入万年,而且还应测试输入非法数据的情况。非法数据的情况。 因此因此:穷举测试:穷举测试(complete test)通常通常是不可能的,说明黑盒、是不可能的,说明黑盒、白盒测试都不可能使测试达到彻底。在实际中只能选择一些有白盒测试都不可能使测试达到彻底。在实际中只能选择一些有代表性的典型用例进行有限测试。代表性的典型用例进行有限测试。例例1:(Black-box) 程序要求输入程序要求输入3个整型数据。若字长个

12、整型数据。若字长16位,则各位,则各种可能输入的排列组合共有种可能输入的排列组合共有 (种)(种)例例2:(White-box) 右图所示的程序中右图所示的程序中共有共有 520 1014条可能的执行通路,条可能的执行通路,显然,每条通路都执行一遍是不显然,每条通路都执行一遍是不现实的。现实的。循环循环2020次次4、软件测试步骤、软件测试步骤(1) Module testing program design & coding bugs2. 软件测试基础软件测试基础(2) Subsystem testing connections between modules 又称单元测试,发现并改

13、正程序模块中的错误,保证模块正确又称单元测试,发现并改正程序模块中的错误,保证模块正确实现规定的功能。测试在编码或详细设计中的错误。实现规定的功能。测试在编码或详细设计中的错误。(4) Acceptance testing customer joins in 把经过模块测试的模块组装在一起形成子系统进行的测试,测把经过模块测试的模块组装在一起形成子系统进行的测试,测试模块间相互协调和通信错误。试模块间相互协调和通信错误。(3) System testing requirements & system design 把经过测试的子系统组装成一个完整的系统进行的测试,测试与把经过测试的子系

14、统组装成一个完整的系统进行的测试,测试与设计有关的软件系统结构中的错误。设计有关的软件系统结构中的错误。 子系统测试和系统测试统称为集成测试子系统测试和系统测试统称为集成测试(Integration testing)。 把软件作为单一的实体进行的测试,测试是否满足需求规格说把软件作为单一的实体进行的测试,测试是否满足需求规格说明中确定的各种需求。明中确定的各种需求。2. 软件测试基础软件测试基础测试测试评价评价调试调试可靠性可靠性模型模型软件配置软件配置测试配置测试配置测试结果测试结果可靠性预测可靠性预测错错 误误正正 确确错误率数据错误率数据预期结果预期结果测试阶段的信息流:测试阶段的信息流

15、:(5) Parallel running compare the new system with the old one. 把软件系统与旧系统同时运行来进行的测试,测试性能指标、把软件系统与旧系统同时运行来进行的测试,测试性能指标、用户指南手册、让用户熟悉等。用户指南手册、让用户熟悉等。 通过运行得到结果与预期结果比较评价,不一致则找出错误进通过运行得到结果与预期结果比较评价,不一致则找出错误进行调试,同时收集可靠性指标。行调试,同时收集可靠性指标。3. 单元测试单元测试从模块开始进行测试的好处:从模块开始进行测试的好处: 减小测试工作的复杂性减小测试工作的复杂性 易于确定错误位置并进行调试

16、纠错易于确定错误位置并进行调试纠错 可同时对多个模块进行测试可同时对多个模块进行测试1、单元测试的内容、单元测试的内容 单元测试的单元测试的目的目的:是考察模块的接口和内部结构是否符合模块:是考察模块的接口和内部结构是否符合模块功能说明的要求。功能说明的要求。 (1)模块接口)模块接口 内部检查:传输参数的数目、属性、单位、次序是否匹配;内部检查:传输参数的数目、属性、单位、次序是否匹配;全程变量的定义是否一致;只做输入的变元有无被修改,等等。全程变量的定义是否一致;只做输入的变元有无被修改,等等。 外部检查:打开、结束、关闭文件的操作;文件和属性;外部检查:打开、结束、关闭文件的操作;文件和

17、属性;I/O错误处理;输出拼写,等等。错误处理;输出拼写,等等。主要测试以下五个方面:主要测试以下五个方面:(2)局部数据结构)局部数据结构 数据说明数据说明(declaration);初始化与缺省值的设置;变量名拼写;初始化与缺省值的设置;变量名拼写;数据类型的相容性;上数据类型的相容性;上下溢出及地址异常;等等下溢出及地址异常;等等3. 单元测试单元测试(3)重要的执行通路)重要的执行通路 由于穷尽测试不可能,故通常针对最常见的错误设计测试方案。由于穷尽测试不可能,故通常针对最常见的错误设计测试方案。较常见的错误有:计算次序问题;初值设置错误;表达式错误;较常见的错误有:计算次序问题;初值

18、设置错误;表达式错误;循环终止条件错误;等等循环终止条件错误;等等(4)出错处理通路)出错处理通路 预见出现错误的条件,设置处理。较常见的问题有:输出的错预见出现错误的条件,设置处理。较常见的问题有:输出的错误信息难以理解,不能确定错误位置;描述的错误与实际错误不误信息难以理解,不能确定错误位置;描述的错误与实际错误不符;处理之前系统已经干预;处理不正确;等等符;处理之前系统已经干预;处理不正确;等等(5)边界条件)边界条件 是单元测试的最后也可能是最重要的任务,因为软件常在其边是单元测试的最后也可能是最重要的任务,因为软件常在其边界失效。数组的边界;循环的边界;等等界失效。数组的边界;循环的

19、边界;等等 人工测试:人工测试:如由四人组成小组如由四人组成小组(包括包括header,author,programmer和和tester),逐行检查源代码。,逐行检查源代码。 预排预排(Rehearsal):由人扮演:由人扮演computer,模拟执行情况。,模拟执行情况。 优点优点: 一次审查可发现多个错误,不必改一个测一个。一次审查可发现多个错误,不必改一个测一个。3. 单元测试单元测试 制作测试程序:制作测试程序:Stub (存根)和(存根)和 Driver(驱动)程序的编写,(驱动)程序的编写,属额外开支。模块高内聚可简化这一过程。属额外开支。模块高内聚可简化这一过程。2、单元测试的

20、手段、单元测试的手段(1)代码审查)代码审查(code inspection)(2)计算机测试)计算机测试 Stub模块的作用:是模拟被测试模块所调用的下级模块,返模块的作用:是模拟被测试模块所调用的下级模块,返回被测试模块所需的信息。回被测试模块所需的信息。 Driver模块的作用:是模拟被测试模块的上级调用模块,驱动模块的作用:是模拟被测试模块的上级调用模块,驱动被测试模块,接收被测试模块的测试结果并输出。被测试模块,接收被测试模块的测试结果并输出。 例如:例如:P.1554. 集成测试集成测试 (Integration Testing)1、集成测试的内容、集成测试的内容单元测试以后进行集

21、成测试是由于:单元测试以后进行集成测试是由于: Stub和和Driver模块与真实模块并不完全等效模块与真实模块并不完全等效 模块组装后穿过模块接口的数据可能丢失模块组装后穿过模块接口的数据可能丢失 一个模块的功能可能会对另一个模块的功能产生不利的影响一个模块的功能可能会对另一个模块的功能产生不利的影响 各模块的功能组装起来可能达不到预期的功能各模块的功能组装起来可能达不到预期的功能 单个模块可接受的误差,组装后可能积累或放大到不能接受单个模块可接受的误差,组装后可能积累或放大到不能接受的程度的程度 全局数据可能出现引用问题全局数据可能出现引用问题 不正确的接口不正确的接口 因存取全局数据引起

22、的块间干扰因存取全局数据引起的块间干扰 不一致的文件与数据结构不一致的文件与数据结构 不适当的模块调用不适当的模块调用 出错处理上的错误出错处理上的错误(1)非渐增式测试)非渐增式测试 (Big-bang testing)4. 集成测试集成测试2、集成测试的方式、集成测试的方式集成测试通常采用黑盒测试的方法,主要有两种:集成测试通常采用黑盒测试的方法,主要有两种: 把经过单元测试的模块按设计要求组把经过单元测试的模块按设计要求组装成所要的程序,再进行全程序的测试。装成所要的程序,再进行全程序的测试。(2)渐增式测试)渐增式测试 (Incremental testing) 从一个模块开始进行测试

23、,每组装一从一个模块开始进行测试,每组装一个模块进行一次测试,重复此过程直至个模块进行一次测试,重复此过程直至程序组装完毕。程序组装完毕。Test A,B, C, DTestATestBTestCTestDTestATest A,B, C, DTestA,BTestA,B,C4. 集成测试集成测试 Incremental testing可以较早发现模块间的接口错误;可以较早发现模块间的接口错误;Big-bang testing 最后才组装,因此错误发现得晚。最后才组装,因此错误发现得晚。 Big-bang testing中发现错误后难以诊断定位;中发现错误后难以诊断定位;Incremental

24、 testing中出现的错误往往跟最新加入的模块有关。中出现的错误往往跟最新加入的模块有关。 Incremental testing 在不断集成的过程中使模块不断在新的条件在不断集成的过程中使模块不断在新的条件下受到新的检测,测试更彻底。下受到新的检测,测试更彻底。 Incremental testing 较较 Big-bang testing 费时。费时。Big-bang testing 可以同时并行测试所有模块,能充分利用人力。可以同时并行测试所有模块,能充分利用人力。(3)两种测试方式的比较)两种测试方式的比较 第第1步:测试顶层模块,用存根程序步:测试顶层模块,用存根程序(Stub)代

25、替直接附属的下代替直接附属的下层模块层模块 Stub: to simulate the activity of the component which is not yet tested.4. 集成测试集成测试3、Incremental testing 的几种策略的几种策略MS1S2 Top-down testing第第2步:根据深度优先或宽度优先的策略,每次用一个实际模步:根据深度优先或宽度优先的策略,每次用一个实际模块代换一个块代换一个Stub。MS1S2M1S3S4M2S24. 集成测试集成测试第第3步:在结合进一个模块的同时进行测试。步:在结合进一个模块的同时进行测试。第第4步:回归测

26、试。步:回归测试。回归测试集包括以下测试用例:回归测试集包括以下测试用例: 检测软件全部功能的代表性测试用例检测软件全部功能的代表性测试用例 专门针对可能受修改影响的软件功能的附加测试专门针对可能受修改影响的软件功能的附加测试 针对被修改过的软件成分的测试针对被修改过的软件成分的测试 回归测试回归测试(regression testing) :是指重新执行已经做过的测:是指重新执行已经做过的测试的某个子集,以保证当一个新模块结合进来时,程序发生的试的某个子集,以保证当一个新模块结合进来时,程序发生的变化没有带来非预期的副作用。变化没有带来非预期的副作用。4. 集成测试集成测试Top-down

27、testing的的优点优点: 能在早期即对主要控制及关键的抉择进行检验。能在早期即对主要控制及关键的抉择进行检验。 能较早显示出整个程序的轮廓。能较早显示出整个程序的轮廓。 不需要不需要Driver模块,上级模块采用真实模块。模块,上级模块采用真实模块。 高层模块可以多次测试,使测试更彻底。高层模块可以多次测试,使测试更彻底。Top-down testing的的缺点缺点: 设计较多设计较多Stub模块,测试开销大。模块,测试开销大。 Stub只是对低层模块的模拟,许多重要的测试须推迟。只是对低层模块的模拟,许多重要的测试须推迟。 早期不能并行进行,不能充分利用人力。早期不能并行进行,不能充分利

28、用人力。第第2步:用驱动程序步:用驱动程序(Driver)协调测试数据的协调测试数据的IO,测试子功能族。,测试子功能族。4. 集成测试集成测试Driver: to call a particular component and passes a test case to it.DM1M2 Bottom - up testing第第1步:把低层模块组合成族,每族实现一个子功能。步:把低层模块组合成族,每族实现一个子功能。MMMMMMMMMMMMDDDDDD第第3步:去掉步:去掉Driver,自下而上把子功能族合成更大的子功能族。,自下而上把子功能族合成更大的子功能族。4. 集成测试集成测试注意

29、:注意:两种集成测试策略的优、缺点刚好互补,但单用其中任一两种集成测试策略的优、缺点刚好互补,但单用其中任一种都不实际,通常根据软件的特点将二者混用。种都不实际,通常根据软件的特点将二者混用。Bottom - up testing的的优点优点: 不需要不需要Stub模块,下级模块采用真实模块。模块,下级模块采用真实模块。 随着测试的进行,随着测试的进行,Driver模块逐渐减少。模块逐渐减少。 比较容易设计测试用例。比较容易设计测试用例。 测试的早期可以并行工作。测试的早期可以并行工作。Bottom - up testing的的缺点缺点: 软件系统的整体功能(轮廓)最后才清晰。软件系统的整体功

30、能(轮廓)最后才清晰。 上层模块的错误发现晚,这些全局性的错误影响范围大。上层模块的错误发现晚,这些全局性的错误影响范围大。 Sandwich testing4. 集成测试集成测试Target layerTop-downBottom-up 对上层模块采取对上层模块采取Top-down testing,使能较早显示软件系,使能较早显示软件系统的功能。统的功能。 对某些关键模块或全部的下层模块采取对某些关键模块或全部的下层模块采取Bottom - up testing ,减少,减少Stub模块并能合理利用人力。模块并能合理利用人力。 Sandwich testing兼有前两种集成测试策略的优、缺点

31、,兼有前两种集成测试策略的优、缺点,取长补短,混合使用。取长补短,混合使用。5. 确认测试确认测试(Validation testing)内容:内容: 功能测试功能测试确认是否实现了需求规格说明书中规定的一确认是否实现了需求规格说明书中规定的一切功能;切功能; 性能测试性能测试确认执行的响应时间和处理速度,占用内存确认执行的响应时间和处理速度,占用内存和外存容量等;和外存容量等; 强度测试强度测试确认对强负荷的承受能力;确认对强负荷的承受能力; 软件配置复查软件配置复查检查所有文档资料的完整性、正确性。检查所有文档资料的完整性、正确性。任务:验证软件的有效性。任务:验证软件的有效性。手段:黑盒

32、测试;用户参与;主要用实际数据进行测试。手段:黑盒测试;用户参与;主要用实际数据进行测试。 Alpha测试测试在受控的环境中进行在受控的环境中进行 Beta测试测试在非受控环境中真实进行在非受控环境中真实进行有效性有效性是指软件的功能和性能如同用户所合理期望的那样。是指软件的功能和性能如同用户所合理期望的那样。6. 白盒测试技术白盒测试技术 设计测试方案是测试阶段的关键性技术问题。其设计测试方案是测试阶段的关键性技术问题。其任务任务包括:包括: 预定要测试的功能预定要测试的功能 设计输入的测试数据设计输入的测试数据(test cases) 列出预期结果列出预期结果(expected outpu

33、t) 设计测试方案的设计测试方案的目标目标是:要确定一组最有效、最可能发现某是:要确定一组最有效、最可能发现某个错误或某类错误的测试数据。个错误或某类错误的测试数据。 测试用例测试用例1、逻辑覆盖、逻辑覆盖(Logical coverage) 逻辑覆盖是一系列覆盖测试的总称,其基本思想是设计测试逻辑覆盖是一系列覆盖测试的总称,其基本思想是设计测试用例,使在程序执行时尽量执行程序的所有逻辑结构(语句、条用例,使在程序执行时尽量执行程序的所有逻辑结构(语句、条件、路径等)。件、路径等)。6. 白盒测试技术白盒测试技术例:例:P.163 图图7.5问题:若问题:若AND错写错写为为OR,或,或X1错

34、写错写为为X 1AND B=0TA=2OR X 1TX = X / AX = X + 1返回返回FFTest case : A=2 , B=0 , X=4. 语句覆盖语句覆盖(Statement coverage)选择足够多的测试数据,使被测程序中每个语句至少执行一次。选择足够多的测试数据,使被测程序中每个语句至少执行一次。又称分支覆盖,在的基础上,每个判定的每个分支至少执又称分支覆盖,在的基础上,每个判定的每个分支至少执行一次。行一次。Test cases:A=3 , B=0 , X=3A=2 , B=1 , X=1问题:若问题:若X1错写为错写为X 1AND B=0TA=2OR X 1TX

35、 = X / AX = X + 1返回返回FF 判定覆盖判定覆盖(Branch coverage)6. 白盒测试技术白盒测试技术 在的基础上,使每个判定表达式的每个条件都取到各种可能在的基础上,使每个判定表达式的每个条件都取到各种可能的结果。的结果。Test cases:A=2 , B=0 , X=4(满足(满足A1, B=0; A=2, X1)A=1, B=1, X=1(满足满足A 1, B 0; A 2, X 1)问:条件覆盖问:条件覆盖 ? 判定覆盖判定覆盖 答答: 不一定。不一定。 反例反例: A=2, B=0, X=1 A=1, B=1, X=2 判定判定/条件覆盖:即条件覆盖:即判

36、定覆盖判定覆盖 条件覆盖条件覆盖 入口入口A 1AND B=0TA=2OR X 1TX = X / AX = X + 1返回返回FF 条件覆盖条件覆盖(Condition coverage)6. 白盒测试技术白盒测试技术 条件组合覆盖条件组合覆盖入口入口A 1AND B=0TA=2OR X 1TX = X / AX = X + 1返回返回FF全部可能的条件组合为:全部可能的条件组合为: A1, B=0 A1, B 0 A 1, B=0 A 1, B 0 A=2, X1 A=2, X 1 A 2, X1 A 2,X 1 Test cases: A=2, B=0, X=4 (T T) A=2. B

37、=1, X=1 (F T) A=1, B=0, X=2 (F T) A=1, B=1, X=1 (F F)问题:没有测试到(问题:没有测试到(T F)的情形)的情形每个判定表达式中条件的各种可能组合都至少出现一次。每个判定表达式中条件的各种可能组合都至少出现一次。6. 白盒测试技术白盒测试技术 点覆盖点覆盖 边覆盖边覆盖= 语句覆盖语句覆盖 路径覆盖路径覆盖(Path coverage)= 判定覆盖判定覆盖Test cases: A=1 , B=1 , X=1 A=1 , B=1 , X=2 A=3 , B=0 , X=1 A=2 , B=0 , X=4 路径覆盖路径覆盖 条件组合覆盖条件组合

38、覆盖考察考察Control flow graph 的角度,还可考虑下述覆盖:的角度,还可考虑下述覆盖: 每条可能的路径都至少执行一次,若每条可能的路径都至少执行一次,若图中有环,则每个环至少经过一次。图中有环,则每个环至少经过一次。6. 白盒测试技术白盒测试技术2、控制结构测试、控制结构测试6. 白盒测试技术白盒测试技术 基本路径测试基本路径测试 基本路径测试是基本路径测试是T.McCabe提出的一种白盒测试技术,提出的一种白盒测试技术,其步骤如下:其步骤如下:第第1步步 根据过程设计结果画出流图。如根据过程设计结果画出流图。如P.16612345678910111213第第2步步 计算流图的

39、环形复杂度。计算流图的环形复杂度。V=6第第3步步 确定线性独立路径的基本集合。确定线性独立路径的基本集合。 独立路径独立路径是至少包含一条在定义该路径是至少包含一条在定义该路径之前不曾用过的边。之前不曾用过的边。Independent path:path1:1-2-10-11-13path4:1-2-3-4-5-8-9-2-path2:1-2-10-12-13path5:1-2-3-4-5-6-8-9-2-path3:1-2-3-10-11-13path6:1-2-3-4-5-6-7-8-9-2-第第4步步 设计可强制执行基本集合中每条路径的测试用例。设计可强制执行基本集合中每条路径的测试用

40、例。注意注意: 基本路径测试可以保证程序中每条语句至少执行一次,且每个条基本路径测试可以保证程序中每条语句至少执行一次,且每个条件在执行时都将分别取真、假值。件在执行时都将分别取真、假值。 基本路径测试中某些独立路径不能以独立的方式测试。基本路径测试中某些独立路径不能以独立的方式测试。6. 白盒测试技术白盒测试技术 条件测试条件测试 条件测试技术设计的用例,能够检查程序模块中包含的逻辑条件。条件测试技术设计的用例,能够检查程序模块中包含的逻辑条件。其测试策略是:对于任何复合条件,设计用例以能保证真分支、假其测试策略是:对于任何复合条件,设计用例以能保证真分支、假分支及每个简单条件都至少执行一次

41、。分支及每个简单条件都至少执行一次。 K.C.Tai提出的提出的BRO(Branch and Relational Operator)测试是一测试是一种比较有效的条件测试策略:如果在条件中所有布尔量和关系算符种比较有效的条件测试策略:如果在条件中所有布尔量和关系算符都只出现一次而且没有公共变量,则能保证发现该条件中的分支错都只出现一次而且没有公共变量,则能保证发现该条件中的分支错和关系算符错。和关系算符错。 E1和和E2是算术表达式,是算术表达式,关系算符关系算符是是、 之一,之一,但仅需要但仅需要3个测试分别使个测试分别使E1的值小于、等于、大于的值小于、等于、大于E2就能够发现算就能够发现

42、算符的错误。符的错误。 如:如:E1关系算符关系算符E26. 白盒测试技术白盒测试技术例例1:B1 & B2 条件约束为条件约束为(D1,D2),约束集为,约束集为(t,t)、(t,f)、(f,t)例例2:B1 & (E1=E2) 条件约束为条件约束为(D1,D2),约束集为,约束集为(t,=)、(t,)、(f,=)例例3:(E1E2) & (E3=E4) 条件约束为条件约束为(D1,D2),约束集为,约束集为(,=)、(,)、(=,=)、(,=) BRO测试是利用条件测试是利用条件C的条件约束来设计测试用例:条件的条件约束来设计测试用例:条件C有有n个简单条件,其条件

43、约束定义为个简单条件,其条件约束定义为D=(D1,D2,Dn),如果在如果在C的一次执的一次执行过程中,每个简单条件的输出都满足行过程中,每个简单条件的输出都满足D中对应的约束,称中对应的约束,称C的这次的这次执行覆盖了执行覆盖了C的条件约束的条件约束D。注意注意: 条件测试易于度量条件的测试覆盖率,由此指导附加测试的设计。条件测试易于度量条件的测试覆盖率,由此指导附加测试的设计。 条件测试不仅检测程序条件中的错误,同时可以检测其他的错误。条件测试不仅检测程序条件中的错误,同时可以检测其他的错误。 循环测试循环测试6. 白盒测试技术白盒测试技术 循环测试技术专注于测试循环结构的有效性。循环测试

44、技术专注于测试循环结构的有效性。 简单循环简单循环 嵌套循环嵌套循环 串接循环串接循环 跳过循环跳过循环 通过循环通过循环m次次(mn-1) 通过循环通过循环1次次 通过循环通过循环n-1,n,n+1次次 通过循环通过循环2次次 从最内层开始测试,其他循环设为最小值从最内层开始测试,其他循环设为最小值 最内层循环使用简单循环测试方法最内层循环使用简单循环测试方法 由内向外,内层循环取典型值,外层循环由内向外,内层循环取典型值,外层循环取最小值,直到测试完所有循环取最小值,直到测试完所有循环 若各循环是独立的,使用简单循环测试若各循环是独立的,使用简单循环测试 若各循环不是独立的,使用嵌套循环测

45、试若各循环不是独立的,使用嵌套循环测试1、等价划分、等价划分(Equivalence Partitioning)7. 黑盒测试技术黑盒测试技术黑盒测试着重测试软件的功能需求。黑盒测试着重测试软件的功能需求。黑盒测试通常发现的错误:黑盒测试通常发现的错误: 功能不正确或遗漏功能不正确或遗漏 界面错误界面错误 数据结构或外部数据库访问错误数据结构或外部数据库访问错误 性能错误性能错误 初始化或终止错误初始化或终止错误黑盒测试技术设计的测试用例满足:黑盒测试技术设计的测试用例满足: 可以减少总的测试用例数可以减少总的测试用例数 可以测试某一类错误可以测试某一类错误 等价划分技术是把程序的输入域划分成

46、若干个数据类,由此等价划分技术是把程序的输入域划分成若干个数据类,由此导出测试用例。导出测试用例。注:注: 需认真研究程序的功能说明,注意经验的积累;需认真研究程序的功能说明,注意经验的积累; 以上经验亦适用于输出数据;以上经验亦适用于输出数据; 不需要测试编译程序肯定能发现的错误不需要测试编译程序肯定能发现的错误。 当规定了输入范围或数据个数时:当规定了输入范围或数据个数时:无效类无效类 有效类有效类 无效类无效类 当规定了输入的一组值,且对不同值做不同处理时:当规定了输入的一组值,且对不同值做不同处理时:第第1步步 划分等价类划分等价类划分等价类需要经验:划分等价类需要经验:如:教工分房方

47、案中,按教授、副教授、讲师、助教分别计分如:教工分房方案中,按教授、副教授、讲师、助教分别计分 有效类有效类4个;无效类个;无效类1个个 当规定了输入的规则时:当规定了输入的规则时:如:如:(PASCAL) 语言规定,每个语句以语言规定,每个语句以“ ;” 结结 束束 有效类有效类1个;个;无效类若干(以无效类若干(以“ ,”结束、以结束、以“ :”结束、以空格结束等等)结束、以空格结束等等) 当输入为整型时:有效类可分为当输入为整型时:有效类可分为Z+、0、Z 三种三种 当处理表格时:有效类可分为空表、含一项的表、含多项的表等当处理表格时:有效类可分为空表、含一项的表、含多项的表等7. 黑盒

48、测试技术黑盒测试技术 设计一个新方案以设计一个新方案以尽可能多尽可能多地覆盖尚未被覆盖的地覆盖尚未被覆盖的有效有效等价类;等价类;重复这一步骤直到所有重复这一步骤直到所有有效类有效类都被覆盖为止。都被覆盖为止。 设计一个新方案以覆盖设计一个新方案以覆盖一个且仅一个一个且仅一个尚未被覆盖的尚未被覆盖的无效无效等价类;等价类;重复这一步骤直到所有重复这一步骤直到所有无效类无效类都被覆盖为止。都被覆盖为止。第第2步步 设计测试方案设计测试方案7. 黑盒测试技术黑盒测试技术设计步骤:设计步骤:注:注: 对有效等价类的覆盖,尽量公用用例减少测试次数;对有效等价类的覆盖,尽量公用用例减少测试次数; 对无效

49、等价类的覆盖,必须每类一个用例,以防遗漏可能对无效等价类的覆盖,必须每类一个用例,以防遗漏可能发现的错误。发现的错误。例:考察一个把数字串转变成整数的函数。用二进制补码例:考察一个把数字串转变成整数的函数。用二进制补码表示整数,机器字长表示整数,机器字长16位,即整数范围最小为位,即整数范围最小为- 32768,最大为最大为32767。函数及参数的。函数及参数的PASCAL说明如下:说明如下: function StrToInt (dstr : shortstr) : integer; type shortstr = array 1.6 of char; 要求被处理的数字串是右对齐的,即在少于

50、要求被处理的数字串是右对齐的,即在少于6个字符的个字符的串左边补空格。负号在最高位数字左边一位。串左边补空格。负号在最高位数字左边一位。试用等价划分法设计测试方案。试用等价划分法设计测试方案。7. 黑盒测试技术黑盒测试技术解:首先根据规格说明划分等价类。考虑到解:首先根据规格说明划分等价类。考虑到PASCAL编译器的固有编译器的固有检错功能,测试时不需要使用长度不等于检错功能,测试时不需要使用长度不等于6的数组,也不需要的数组,也不需要用非字符数组类型的参数。用非字符数组类型的参数。有效输入类:有效输入类:16个数字字符组成的数字串(最高位非个数字字符组成的数字串(最高位非0););最高位为最

51、高位为0的数字串;的数字串; 最高位左邻负号的数字串;最高位左邻负号的数字串;无效输入类:无效输入类:空字符串(空字符串(6位空格);左边补位的既非位空格);左边补位的既非0亦非空格;亦非空格;最高位右边含有空格;最高位右边含有空格;最高位右边含有其它非数字字符;最高位右边含有其它非数字字符;负号与最高位间有空格;负号与最高位间有空格;有效输出类:有效输出类: 在合法范围内的负整数;在合法范围内的负整数;101011110 0 ;在合法范围内的正整数;在合法范围内的正整数;无效输出类:无效输出类: 小于小于 - 32768的负整数;的负整数; 大于大于 32767的正整数。的正整数。12121

52、3137. 黑盒测试技术黑盒测试技术 最高位为最高位为0的数字串,输出为合法正整数。的数字串,输出为合法正整数。 输入:输入: 预期输出:预期输出:1 0 0 0 0 0 1 16个数字字符组成的数字串,最高位非个数字字符组成的数字串,最高位非0;输出为合法正整数。;输出为合法正整数。 输入:输入: 预期输出:预期输出:11下面根据等价划分,设计出一套测试方案:下面根据等价划分,设计出一套测试方案: 负号与最高位数字相邻;输出合法负整数。负号与最高位数字相邻;输出合法负整数。 输入:输入: 预期输出:预期输出:-1- 0 0 0 0 1 最高位为最高位为0;输出;输出0。 输入:输入: 预期输

53、出:预期输出:0 0 0 0 0 0 0 太小的负整数。太小的负整数。 输入:输入: 预期输出:预期输出:“错误,无效输入错误,无效输入”- 3 2 7 6 97. 黑盒测试技术黑盒测试技术 左边补位的非左边补位的非0也非空格。也非空格。 输入:输入: 预期输出:预期输出:“错误:非法填充错误:非法填充”a a a a a 1 最高位右边也含空格。最高位右边也含空格。 输入:输入: 预期输出:预期输出:“错误:无效输入错误:无效输入” 1 2 最高位右边含其它非数字字符。最高位右边含其它非数字字符。 输入:输入: 预期输出:预期输出:“错误:无效输入错误:无效输入”0 0 1 x x 2 负号

54、与最高位间有空格。负号与最高位间有空格。 输入:输入: 预期输出:预期输出:“错误:负号位置非法错误:负号位置非法”11 - 1 2 太大的正整数。太大的正整数。 输入:输入: 预期输出:预期输出:“错误:无效输入错误:无效输入” 3 2 7 6 8 空字符串。空字符串。 输入:输入: 预期输出:预期输出:“错误:没有数字错误:没有数字” 7. 黑盒测试技术黑盒测试技术思路:思路: 列出可能有的错误;列出可能有的错误; 列出容易发生错误的特殊情列出容易发生错误的特殊情况。以此为基础设计测试方案。况。以此为基础设计测试方案。根据:直觉、经验根据:直觉、经验工具:常见错误清单、判定表等。工具:常见

55、错误清单、判定表等。7. 黑盒测试技术黑盒测试技术2、边界值分析、边界值分析(Boundary Value Analysis) 程序最容易在边界发生错误;程序最容易在边界发生错误; 通常与等价划分结合进行。通常与等价划分结合进行。3、错误推测、错误推测(Failure Prediction) 错误推测是推测被测试程序中哪些地方容易出错,并据此设错误推测是推测被测试程序中哪些地方容易出错,并据此设计测试方案。计测试方案。注:注: 对多个输入数据的组合应测试其组合效应;对多个输入数据的组合应测试其组合效应; 白盒测试在早期测试进行,黑盒测试在后期进行;白盒测试在早期测试进行,黑盒测试在后期进行;

56、对发现较多错误的程序段,应进行着重的测试。对发现较多错误的程序段,应进行着重的测试。8. 调调 试试(Debugging)测试测试 发现错误发现错误调试调试 改正错误改正错误第第1步:确定错误的位置步:确定错误的位置(占占95%工作量工作量);第第2步:改正错误。步:改正错误。 调试(纠错)是在经成功测试发现错误之后,确定错误的位调试(纠错)是在经成功测试发现错误之后,确定错误的位置并改正错误的过程。置并改正错误的过程。1、调试过程、调试过程Execution of casesTestcasesResultsDebuggingAdditional testsSuspected causesId

57、entified causesCorrectionsRegression testsDebugging8. 调调 试试 调试是软件开发过程中最艰巨的脑力劳动,其原因在于心理方调试是软件开发过程中最艰巨的脑力劳动,其原因在于心理方面、技术方面以及软件错误的自身特征方面。面、技术方面以及软件错误的自身特征方面。 激活对程序运行过程的跟踪,在程序中插入激活对程序运行过程的跟踪,在程序中插入write(输出输出)语句,语句,以八进制或十六进制的形式印出存储器的内容。通过分析这些以八进制或十六进制的形式印出存储器的内容。通过分析这些大量的信息来发现错误的原因。大量的信息来发现错误的原因。8. 调调 试试

58、2、调试途径、调试途径(1)蛮干法)蛮干法缺点:缺点: 输出信息量极大,不易解读且大多无用输出信息量极大,不易解读且大多无用(浪费时间和精力);(浪费时间和精力); 输出的是程序在某一时刻的静态情况,输出的是程序在某一时刻的静态情况,且往往不是出错时的状态;且往往不是出错时的状态; 改动源代码,增加出错机会。改动源代码,增加出错机会。(2)回溯法)回溯法8. 调调 试试 由症状由症状(symptom)最先出现的地方,沿程序的控制流最先出现的地方,沿程序的控制流(control flow)往往回检查,追踪分析源程序代码,直至找出错误回检查,追踪分析源程序代码,直至找出错误原因。原因。 适用于小型

59、程序。适用于小型程序。(3)原因排除法)原因排除法 对分查找法对分查找法在关键点插入变量的正确值,则在关键点插入变量的正确值,则输出正确输出正确错误在前半段错误在前半段错误在后半段错误在后半段NY收集数据收集数据组织数据组织数据研究数据研究数据间的关系间的关系提出假设提出假设证明假设证明假设纠正错误纠正错误能能能能不不能能不能不能特殊特殊 一般一般从错误症状中找出规律,推断根源。从错误症状中找出规律,推断根源。8. 调调 试试 归纳法归纳法YesNo What Where When How3W1H TableWhat:列出一般现象:列出一般现象Where:说明发现现象的地点:说明发现现象的地点

60、When:列出现象发生时所有已知情况:列出现象发生时所有已知情况How:说明现象的范围和量级:说明现象的范围和量级Yes:描述出现错误的:描述出现错误的3W1HNo:作为比较,描述了没有错误的:作为比较,描述了没有错误的3W1H例如:学生考试评卷报告。要求输出成绩排名、平均分、试题分析例如:学生考试评卷报告。要求输出成绩排名、平均分、试题分析报告。报告。发现错误:对发现错误:对51个学生评分个学生评分 平均分为平均分为26(期望值(期望值80) 对对1个学生评个学生评分分 平均分为平均分为1观察分析:取奇数时出错?观察分析:取奇数时出错? 打印的是中间学生的编号而非分数?打印的是中间学生的编号而非分数?加测试来验证上述推测。加测

温馨提示

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

最新文档

评论

0/150

提交评论