首页计算机计算机软件软件工程 07 第7章 软件测试.pptx

07 第7章 软件测试.pptx

页数:106页文件大小:1.52 MB来源: 软件工程ppt课件

本课件讲解第7章 软件测试,从软件测试目标与准则切入,依次展开静态测试与动态测试、单元测试到确认测试全过程等内容,配合课堂示例与练习,帮助学习者掌握白盒逻辑覆盖与黑盒等价划分的核心方法。

本章学习目标,列举了解软件测试的目标及准则、识记软件测试方法的分类、掌握软件测试过程等要点
本节目录页,列出软件测试目标、软件测试准则、软件测试方法、软件测试过程等小节
软件测试目标,列举Myers《Art of Softwar、测试是为了证明程序有错、一个好的测试用例在于它能发现至今未发现等要点
查看本课件的文字版(共 106 页,供检索与复制)

第1页:本章学习目标

  • 本章学习目标:
  • 了解软件测试的目标及准则
  • 识记软件测试方法的分类
  • 掌握软件测试过程
  • 掌握常用的软件测试用例设计方法
  • 了解软件调试的途径第7章软件测试

第2页:第7章软件测试 本节目录

  • 第7章软件测试
  • 7.1软件测试目标
  • 7.2软件测试准则
  • 7.3软件测试方法
  • 7.4软件测试过程
  • 7.5测试用例的设计
  • 7.6软件调试

第3页:软件测试目标

  • 1979 Myers《Art of Software Testing》为了发现错误而执行程序的过程重要观点:
  • 测试是为了证明程序有错,而不是证明程序无错误;
  • 一个好的测试用例在于它能发现至今未发现的错误;
  • 一个成功的测试是发现了至今未发现的错误的测试。7.1软件测试目标

第4页:软件测试准则

  • 所有测试都应该能追溯到用户需求;
  • 测试开始之前制定测试计划;
  • Pareto原理可应用于软件测试;
  • 从小规模测试开始,并逐步进行大规模测试;
  • 穷举测试是不可能的;
  • 由独立的第三方从事测试工作。7.2软件测试准则

第5页:软件测试(方法)

  • (1)测试时是否需要执行被测软件?
  • 静态测试
  • 动态测试
  • (2)测试是否针对内部结构和具体实现算法?
  • 黑盒测试(Black-box testing)
  • 白盒测试(White-box testing)
  • 灰盒测试(Gray-box testing)7.3软件测试方法

第6页:7.3.1 静态测试

定义
对被测程序进行特性分析的方法的总称,这些方法的主要特性是无须执行被测代码,而是借助专用的软件测试工具评审软件文档或程序,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率。7.3.1静态测试

第7页:7.3.1 静态测试

主要方法:-个人代码走查-小组代码检查-代码评审-静态结构分析-代码质量度量7.3.1静态测试

第8页:7.3.2 动态测试

定义
实际运行被测程序,通过输入相应的测试用例,判定执行结果(输入/输出的对应关系)是否符合要求,从而检验程序的正确性、可靠性和有效性。7.3.2动态测试

第9页:7.3.2 动态测试

主要方法:-白盒测试又称结构测试、逻辑驱动测试或基于程序的测试。

它依赖于对程序内部细节的严密检验,针对特定条件设计测试用例,对软件的逻辑路径进行测试。

因此采用白盒测试技术时,必须有设计规约及程序清单。

-黑盒测试又称功能测试、数据驱动测试或基于规格说明的测试。

它是一种从用户观点出发的测试。

用这种方法进行测试时,把被测程序当作一个黑盒,不考虑程序内部结构和特性,测试者只考虑程序输入输出和程序功能,根据需求规格说明书来设计测试用例,推断测试结果的正确性。

7.3.2动态测试

第10页:黑盒测试白盒测试根据用户规格说明

黑盒测试白盒测试根据用户规格说明,以及体现它们的输入与输出之间的对应关系,特别是针对功能进行测试根据程序的内部结构,如语句的控制结构、模块间控制结构,以及内部数据结构等进行测试测试规划能站在用户立场,针对软件功能进行测试对程序内部逻辑进行覆盖测试。

优点特点无法测试程序内部逻辑无法检验程序的外部功能特性无法对程序内部欠缺部分进行测试缺点等价类划分边界值分析错误推测因果图法语句覆盖判定覆盖条件覆盖判定-条件覆盖条件组合覆盖基本路径覆盖……方法举例白盒测试与黑盒测试两类方法的对比

第11页:软件测试过程

7.4软件测试过程-软件测试过程与开发过程是一个相反的过程。

-开发过程经历需求分析、概要设计、详细设计到编码等一系列逐步细化的过程,那么测试的单元测试、集成测试到系统测试是一个逆向的求证过程。

-测试过程主要是指代码调试之后的动态测试过程,测试的过程一般分为单元测试、集成测试、系统测试,有时还要增加用户的验收测试,在每次测试的过程中可能伴随着回归测试。

第12页:软件测试过程软件测试的V模型

7.4软件测试过程软件测试的V模型

第13页:单元测试-概念将每个模块作为一个独立

7.4.1单元测试-概念将每个模块作为一个独立的实体来测试。

用详细设计描述作指南,对重要的程序执行通路进行测试,以便发现模块内部的错误。

发现编码和详细设计的错误。

第14页:-测试重点

  • -测试重点
  • 模块间的接口
  • 局部数据结构
  • 重要的执行通路(选择、循环等)
  • 出错处理通路
  • 边界条件
  • 不正确或不一致的数据类型说明
  • 使用尚未赋值或尚未初始化的变量
  • 错误的初始值或错误的缺省值
  • 变量名拼写错误或书写错误
  • 不一致的数据类型
  • … …
  • 调用本模块的输入参数是否正确;
  • 本模块调用子模块时输入给子模块的参数是否正确;
  • 全局/局部变量的定义和用法是否一致;
  • … …
  • 出错的描述是否难以理解
  • 出错的描述是否能够对错误定位
  • 显示的错误与实际的错误是否相符
  • 对错误条件的处理正确与否
  • 在对错误进行处理之前,错误条件是否已经引起系统的干预等7.4.1单元测试
  • 程序中是否存在死代码;
  • 误解或错误的计算优先级;
  • 精度错误;
  • 表达式符号表示错误;
  • 循环变量的使用错误;
  • … …
  • 普通合法数据是否正确处理;
  • 普通非法数据是否正确处理;
  • 边界内最接近边界的(合法)数据是否正确处理;
  • 边界外最接近边界的(非法)数据是否正确处理等。

第15页:单元测试-单元测试环境

7.4.1单元测试-单元测试环境

  • 驱动模块(Drive):用来模拟被测试模块的上一级模块。驱动模块在单元测试中接收数据,将相关的数据传送给被测试模块,启动被测试模块,并打印相关结果。
  • 桩模块(Stub):用来模拟被测试模块工作中所有的调用模块,它们一般只进行很少的数据处理,如打印入口和返回,以便于检验被测试模块与其下级模块的接口。

第16页:集成测试-概念按照概要设计的要求组装

  • 7.4.2集成测试-概念按照概要设计的要求组装独立模块成为子系统或系统,同时经过测试来发现接口错误的一种系统化的技术。单元测试完成后为什么还需要集成测试?
  • 数据穿过接口时可能丢失;
  • 一模块对另一模块由于疏忽而造成的有害影响;
  • 子功能组合起来可能不产生预期的主功能;
  • 个别看来可接受的误差积累到不能接受的程度;
  • 全程数据结构可能有问题等错误。

第17页:7.4.2 集成测试

  • -集成测试的模式
  • (1)非渐增式测试方法分模块测试→一次性组装→所有模块集成测试
  • (2)渐增式测试方法(集成测试中较多使用)分模块测试→逐个模块组装→直到集成测试渐增方式集成策略:自顶向下和自底向上。7.4.2集成测试

第18页:自顶向下集成从主控制模块开始

(1)自顶向下集成从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。

把模块组装到程序结构中去时,或者使用深度优先的策略,或者使用宽度优先的策略。

7.4.2集成测试

第19页:自顶向下集成方法示意图宽度优先策略沿

自顶向下集成方法示意图宽度优先策略沿软件结构水平地移动,把处于同一控制层次上的所有模块组装起来。

深度优先策略先组装在软件结构的一条主控制通路上的所有模块,然后构造其他控制通路存根程序深度优先:M1-M2-M5-M8-M6-M3-S7-S4宽度优先:M1-M2-M3-S4-M5-M6-S7-M87.4.2集成测试

第20页:M1M4M3M2M6M5程序模块示意

M1M4M3M2M6M5程序模块示意图S5M1S1S1S1S2S2S2S3S3S3第一步,测试主控模块M1设计桩模块S1、S2、S3,模拟被M1调用的M2、M3、M4。

M2M3M4第二步,依次用M2、M3、M4替代桩模块S1、S2、S3,每替代一次进行一次测试。

S4S4S4S5S5第三步,对由主控模块M1和模块M2、M3、M4构成的子系统进行测试,设计桩模块S4、S5。

M5M6第四步,依次用模块M5和M6替代桩模块S4、S5,并同时进行新的测试。

组装测试完毕。

自顶向下集成:7.4.2集成测试

第21页:自底向上集成从“原子”模块(即在软件

  • (2)自底向上集成从“原子”模块(即在软件结构最低层的模块)开始组装和测试。
  • (1)把低层模块组合成实现某个特定的软件子功能的族;
  • (2)写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出;
  • (3)对由模块组成的子功能族进行测试;
  • (4)去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。7.4.2集成测试

第22页:自底向上结合驱动程序7.4.2集成测

自底向上结合驱动程序7.4.2集成测试

第23页:7.4.2 集成测试

23M3M6M5D1D2D3D1D1D2D2D3D3M2M4M1第四步,把已测试的子系统按程序结构连接起来完成程序整体的组装测试。

D4D4D4D5D5D5M1M4M3M2M6M5程序模块示意图第一步,对最底层的模块M3、M5、M6进行测试,设计驱动模块D1、D2、D3来模拟调用。

第三步,设计驱动模块D4、D5和D6模拟调用,分别对新子系统进行测试第二步,用实际模块M2、M1和M4替换驱动模块D1、D2、D3D6自底向上集成:7.4.2集成测试

第24页:自顶向下集成测试方法

  • 自顶向下集成测试方法:优点:减少了驱动模块开发的工作量;功能的可行性较早得到验证,而且能较早发现上层模块的接口错误;可以较早验证主要的控制和判断点;如果选用深度方向组装的方式,可以首先实现和验证一个完整的软件功能;支持故障隔离。缺点:桩模块的开发和维护是测试过程中的最大成本;底层组建行为的验证被推迟了;底层组件的增加会使得整个系统变得越来越复杂,导致底层组件的测试不充分,尤其是那些被重用的组件。适用范围:
  • (1)控制结构比较清晰和稳定的产品;
  • (2)高层接口变化较小的产品;
  • (3)底层接口未定义或经常可能被修改的产品;
  • (4)控制组件具有较大技术风险,需要尽早被验证的产品;
  • (5)希望尽早能够看到产品的系统功能行为。7.4.2集成测试

第25页:自底向上测试方法

  • 自底向上测试方法:优点:减少了桩模块开发的工作量;测试用例的设计亦相对简单;支持故障隔离;允许对底层组件行为的早期验证,涉及复杂算法和真正输入/输出的模块最先得到集成和测试,进而把最容易出问题的部分得到提前解决;可实施多个模块的并行测试,提高了测试效率。缺点:驱动模块开发的工作量很庞大;对高层的验证被推迟到最后,设计上的错误不能及时发现。适用范围:
  • (1)底层接口比较稳定、变动较少的产品;
  • (2)高层接口变化比较频繁的产品;
  • (3)底层组件较早被完成的产品。7.4.2集成测试

第26页:三明治集成三明治集成也称为混合式集成

(3)三明治集成三明治集成也
称为混合式集成,该策略在测试过程中将系统分为三层,中间一层为目标层,对目标层的上面采用自顶向下的集成策略,对目标层的下面采用自底向上的集成策略,最后,测试在目标层汇合。该集成测试策略的缺点在于对中间层的测试不充分,适用于大部分软件开发项目。7.4.2集成测试

第27页:集成测试三明治集成测试策略

7.4.2集成测试三明治集成测试策略

第28页:系统测试、确认测试与回归测试

-概念系统测试
是指将经过集成测试的软件作为整个基于计算机系统的一个元素,与计算机硬件、外设、支持软件、数据和人员等元素结合在一起,对计算机系统进行一系列的组装测试和确认测试。系统测试的依据是软件需求规格说明书,测试的内容主要包括功能测试和性能测试两方面。7.4.3系统测试

第29页:功能测试图形界面测试、功能测试

  • 功能测试图形界面测试、功能测试
  • 性能测试配置测试、时间性能测试、压力测试、容量测试、安全性测试、恢复测试、兼容性测试、备份测试、可用性测试7.4.3系统测试

第30页:系统测试、确认测试与回归测试

-概念确认测试又称“验收测试”、“有效性测试”,其任务是验证软件的功能和性能及其它特性是否与用户的要求一致。

需求分析阶段产生的软件需求规格说明书,是软件有效性的标准,是进行确认测试的基础。

7.4.4确认测试

第31页:-分类Alpha测试(开发者+用户)

-分类Alpha测试(开发者+用户)由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。

开发者负责记录发现的错误和使用中遇到的问题。

Alpha测试是在受控的环境中进行的。

Beta测试(用户+开发者)由软件的最终用户们在一个或多个客户场所进行。

开发者通常不在Beta测试的现场。

Beta测试是软件在开发者不能控制的环境中的“真实”应用。

用户记录在Beta测试过程中遇到的一切问题,并把这些问题报告给开发者。

7.4.4确认测试

第32页:系统测试、确认测试与回归测试

概念:重新执行已经做过的测试的某个子集,以保证上述这些变化没有带来非预期的副作用。

实施条件:当新模块结合进来,程序发生如下变化:建立新的数据流路径;出现新的I/O操作;激活新的控制逻辑。

作用:保证由于调试或其他原因引起的变化,不会导致非预期的副作用。

7.4.5回归测试

第33页:检测软件全部功能的代表性测试用例

  • 回归测试集(已执行过的测试用例的子集)包括的测试用例:
  • (1)检测软件全部功能的代表性测试用例;
  • (2)针对可能受修改影响的软件功能的附加测试;
  • (3)针对被修改过的软件成分的测试。7.4.5回归测试

第34页:测试用例的设计

测试用例设计的基本目的是确定一组最有可能发现某个错误或某类错误的测试数据,好的测试用例可以在测试过程中重复使用,但不可能测试程序的每一条路径,也不可能把所有的输入数据都试一遍。

测试用例的设计人员必须努力以最少量的测试用例来发现最大量的可能错误。

7.5测试用例的设计

第35页:测试用例的设计(原则)

  • (1)测试用例由输入数据和预期的输出数据两个部分组成。这样便于对照检查,做到有的放矢。
  • (2)测试用例不仅选用合理的输入数据,还要选择不合理的输入数据。这样能更多地发现错误,提高程序的可靠性。
  • (3)长期保留测试用例。测试用例必须作为文档保存,因为修改后的程序可能有新的错误,需要进行多次反复测试,同时为以后的维护提供依据。7.5.1测试用例的设计原则

第36页:白盒测试方法用例的设计

7.5.2白盒测试方法用例的设计

  • 逻辑覆盖
  • 语句覆盖
  • 判定覆盖
  • 条件覆盖
  • 判定条件覆盖
  • 条件组合覆盖
  • 路径覆盖
  • 循环覆盖
  • 单循环
  • 嵌套循环
  • 基本路径测试使用基本路径测试技术设计测试用例的步骤:
  • 根据详细设计结果或源程序画出相应的程序图(也称为流图);
  • 计算程序图G的环形复杂度V(G);
  • 确定线性独立路径的基本集合;
  • 导出测试用例;
  • 准备测试用例,确保基本路径集中的每一条路径的执行

第37页:白盒测试方法用例的设计1.逻辑覆盖逻

7.5.2白盒测试方法用例的设计1.逻辑覆盖逻辑覆盖法是一组方法的总称,这组方法强调程序内部逻辑结构的覆盖程度,测试过程是逐渐进行越来越完整的通路测试。

白盒测试中的逻辑覆盖方法有以下6种:-语句覆盖-判定覆盖-条件覆盖-判定-条件覆盖-条件组合覆盖-路径覆盖

第38页:语句覆盖基本思想是

(1)语句覆盖基本思想是:设计若干测试用例,运行被测程序,使程序中每个可执行语句至少执行一次。

被测试模块的流程图为了使每个语句都执行一次,程序的执行路径应该是sacbed,为此只需要输入下面的测试数据:A=2,B=0,X=47.5.2白盒测试方法用例的设计

第39页:语句覆盖的优缺点

语句覆盖的优缺点:【优点】:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。

【缺点】:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。

如在多分支的逻辑运算中无法全面的考虑。

语句覆盖是最弱的逻辑覆盖。

7.5.2白盒测试方法用例的设计

第40页:判定覆盖基本思想是

  • (2)判定覆盖基本思想是:设计若干测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。被测试模块的流程图
  • (1)覆盖sacbd路径:A=3,B=0,X=3
  • (2)覆盖sabed路径:A=2,B=1,X=17.5.2白盒测试方法用例的设计

第41页:判定覆盖的优缺点

判定覆盖的优缺点:【优点】:判定覆盖具有比语句覆盖更强的测试能力。

同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。

【缺点】:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。

判定覆盖仍是弱的逻辑覆盖。

7.5.2白盒测试方法用例的设计

第42页:条件覆盖基本思想是

  • (3)条件覆盖基本思想是:设计若干测试用例,执行被测程序以后要使每个判断中每个条件的可能取值至少满足一次。被测试模块的流程图
  • (1)覆盖sacbed路径:A=2,B=0,X=4
  • (2)覆盖sabd路径:A=1,B=1,X=17.5.2白盒测试方法用例的设计

第43页:条件覆盖的优缺点

条件覆盖的优缺点:【优点】:增加了对条件判定情况的测试,增加了测试路径。

【缺点】:条件覆盖不一定包含判定覆盖。

条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。

7.5.2白盒测试方法用例的设计

第44页:判定-条件覆盖基本思想是

  • (4)判定-条件覆盖基本思想是:设计足够的测试用例,使得判断条件中的所有条件可能至少执行一次取值,同时所有判断的可能结果至少执行一次。被测试模块的流程图
  • (1)覆盖sacbed路径:A=2,B=0,X=4
  • (2)覆盖sabd路径:A=1,B=1,X=17.5.2白盒测试方法用例的设计

第45页:判定-条件覆盖的优缺点

判定-条件覆盖的优缺点:【优点】:能同时满足判定、条件两种覆盖标准。

【缺点】:判定/条件覆盖准则的缺点是未考虑条件的组合情况。

7.5.2白盒测试方法用例的设计

第46页:条件组合覆盖基本思想是

  • (5)条件组合覆盖基本思想是:设计足够的测试用例,使得每个判定表达式中条件的各种可能组合都至少执行一次。被测试模块的流程图
  • (1)A>1, B=0
  • (2)A>1, B≠0
  • (3)A≤1, B=0
  • (4)A≤1, B≠0
  • (5)A=2, X>1
  • (6)A=2, X≤1
  • (7)A≠2, X≤1
  • (8)A≠2, X≤17.5.2白盒测试方法用例的设计

第47页:对于上图的例子来说

  • 对于上图的例子来说,共有以下八种可能的条件组合:
  • (1) A>1,B=0属第一个判断的取真分支;
  • (2) A>1,B≠0属第一个判断的取假分支;
  • (3) A≤1,B=0属第一个判断的取假分支;
  • (4) A≤1,B≠0属第一个判断的取假分支;
  • (5) A=2,X>1属第二个判断的取真分支;
  • (6) A=2,X≤1属第二个判断的取真分支;
  • (7) A≠2,X>1属第二个判断的取真分支;
  • (8) A≠2,X≤1属第二个判断的取假分支。7.5.2白盒测试方法用例的设计

第48页:下面的四组测试数据可以使上面列出的八

  • 48下面的四组测试数据可以使上面列出的八种组合每种至少出现一次:
  • (1)A=2,B=0,X=4(针对1,5两种组合,执行路径sacbed);
  • (2)A=2,B=1,X=1(针对2,6两种组合,执行路径sabed);
  • (3)A=1,B=0,X=2(针对3,7两种组合,执行路径sabed);
  • (4)A=1,B=1,X=1(针对4,8两种组合,执行路径sabd)。7.5.2白盒测试方法用例的设计

第49页:在此例中条件组合覆盖并未要求第一个判

在此例中条件组合覆盖并未要求第一个判定的四个组合与第二个判定的四个组合再进行组合,要那样的话,就需42=16个测试用例了。

显然,满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。

因此,条件组合覆盖是前述几种覆盖标准中最强的。

但是,满足条件覆盖标准的测试数据并不一定能使程序中的每条路径都执行到,如上述四组测试数据都没有测试到路径sacbd。

7.5.2白盒测试方法用例的设计

第50页:条件组合覆盖的优缺点

条件组合覆盖的优缺点:【优点】:条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。

【缺点】:线性地增加了测试用例的数量。

7.5.2白盒测试方法用例的设计

第51页:路径覆盖基本思想是

(6)路径覆盖基本思想是:设计所有的测试用例,来覆盖程序中的所有可能的执行路径。

【优点】:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。

【缺点】:需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。

7.5.2白盒测试方法用例的设计

第52页:某商场在“五一”期间

  • 某商场在“五一”期间,顾客购物时收费有4种情况:普通顾客一次购物累计少于100元,按A类标准收费(不打折),一次购物累计多于或等于100元,按B类标准收费(打9折);会员顾客一次购物累计少于1000元,按C类标准收费(打8折),一次购物累计等于或多于1000元,按D类标准收费(打7折)。测试对象是按以上要求计算顾客收费模块。要求:
  • (1)计算顾客收费模块流程图。
  • (2)按照路径覆盖法设计测试用例。7.5.2白盒测试方法用例的设计

第53页:计算顾客收费模块流程图

  • (1)计算顾客收费模块流程图。
  • (2)按照路径覆盖法设计测试用例如下:
  • ①测试用例:是会员,累计消费900元预期结果:覆盖路径126
  • ②测试用例2:是会员,累计消费2000元预期结果:覆盖路径127
  • ③测试用例3:不是会员,累计消费80元预期结果:覆盖路径134
  • ④测试用例4:不是会员,累计消费300元预期结果:覆盖路径1357.5.2白盒测试方法用例的设计

第54页:循环覆盖

7.5.2白盒测试方法用例的设计

  • 逻辑覆盖
  • 语句覆盖
  • 判定覆盖
  • 条件覆盖
  • 判定条件覆盖
  • 条件组合覆盖
  • 路径覆盖
  • 循环覆盖
  • 单循环
  • 嵌套循环
  • 基本路径测试使用基本路径测试技术设计测试用例的步骤:
  • 根据详细设计结果或源程序画出相应的程序图(也称为流图);
  • 计算程序图G的环形复杂度V(G);
  • 确定线性独立路径的基本集合;
  • 导出测试用例;
  • 准备测试用例,确保基本路径集中的每一条路径的执行

第55页:循环的类别

循环的类别:简单循环嵌套循环串接循环无结构循环2.循环覆盖7.5.2白盒测试方法用例的设计

第56页:简单循环的测试案例选取策略

简单循环的测试案例选取策略:设:n为允许通过循环的最大次数,应使用如下测试集来测试简单循环,1)跳过整个循环2)只有一次通过循环3)两次通过循环4)m次通过循环(m<n-1)5)使循环次数是n-1,n和n+1各通过一次循环简单循环7.5.2白盒测试方法用例的设计

第57页:嵌套循环的测试案例选取策略

嵌套循环的测试案例选取策略:如果采用简单测试的方法,将会使测试案例成几何级增长。

所以采用:1)从内层循环开始,将其它循环值设置为最小;2)对内层使用简单循环测试方法,并为范围外的值添加适当的测试;3)由内向外构造下一个循环测试,对已经测过的内层循环设为典型值;4)继续以上测试方式,直至全部嵌套循环结束。

嵌套循环7.5.2白盒测试方法用例的设计

第58页:白盒测试方法用例的设计串接循环

串接循环的测试案例选取策略:1)如果串接循环彼此独立,采用简单循环测试策略2)如果多个循环的循环计数是串接方式的,采用嵌套循环的测试策略无结构循环:应该重新设计循环结构,使之成为其它循环方式7.5.2白盒测试方法用例的设计串接循环

第59页:基本路径测试

7.5.2白盒测试方法用例的设计

  • 逻辑覆盖
  • 语句覆盖
  • 判定覆盖
  • 条件覆盖
  • 判定条件覆盖
  • 条件组合覆盖
  • 路径覆盖
  • 循环覆盖
  • 单循环
  • 嵌套循环
  • 基本路径测试使用基本路径测试技术设计测试用例的步骤:
  • 根据详细设计结果或源程序画出相应的程序图(也称为流图);
  • 计算程序图G的环形复杂度V(G);
  • 确定线性独立路径的基本集合;
  • 导出测试用例;
  • 准备测试用例,确保基本路径集中的每一条路径的执行

第60页:基本路径测试

  • i = 1;Total.input = total.valid = 0;⑴Sum = 0;DO WHILEvalue[i]<>-999⑵AND total.input <100⑶incrementtotal.input by 1;⑷IF vale[i] >= minimum⑸AND vale[i] <= maximum⑹THEN increment total.valid by 1;sum = sum + value[i];⑺ELSE skip;ENDIFincrement i by 1;⑻ENDDO⑼IFtotal.valid > 0⑽THENaverage = sum / total.valid;⑾ELSE average =-999;⑿ENDIF⒀23456187910111213
  • ①以处理代码为基础,画流图处理部分白盒路径测试技术:基本路径测试

第61页:②确定流图的环复杂度average流图2

②确定流图的环复杂度average流图23456187910111213V(G)= 6个区域V(G)=17边-13个节点+ 2 = 6V(G)=5个判定节点+ 1 = 6白盒路径测试技术

第62页:③确定线性独立路径的一个基本集avera

③确定线性独立路径的一个基本集average流图23456187910111213路径1:1-2-10-11-13路径2:1-2-10-12-13路径3:1-2-3-10-11-13路径4:1-2-3-4-5-8-9-2...路径5:1-2-3-4-5-6-8-9-2...路径6:1-2-3-4-5-6-7-8-9-2...根据环复杂度计算,6条路径足够覆盖所有的测试路径。

选取独立路径6条:白盒路径测试技术

第63页:63④准备测试案例

  • 63
  • ④准备测试案例,强制执行基本集中的每条路径准备路径1:1-2-10-11-13测试案例:i = 1;Total.input = total.valid = 0;⑴Sum = 0;DO WHILE value[i]<>-999⑵AND total.input <100⑶increment total.input by 1;⑷IF vale[i] >= minimum⑸AND vale[i] <= maximum⑹THEN increment total.valid by 1;sum = sum + value[i];⑺ELSE skip;ENDIFincrement i by 1;⑻ENDDO⑼IF total.valid > 0⑽THEN average = sum / total.valid;⑾ELSE average =-999;⑿ENDIF⒀注意:满足
  • (2)直接到
  • (10)的条件是:value[i]==-999或者total.input >=100但是,如果一次都没有执行DO WHILE则不会执行
  • (11),因为total.valid == 0,所以路径1无法独立测试,需要结合其它路径的测试来完成路径1测试案例:value[k]=有效输入value[i]=-999 (其中k<i)预期结果:基于k的正确平均值和总和白盒路径测试技术

第64页:准备路径2

  • 准备路径2:1-2-10-12-13测试案例:i = 1;Total.input = total.valid = 0;⑴Sum = 0;DO WHILE value[i]<>-999⑵AND total.input <100⑶increment total.input by 1;⑷IF vale[i] >= minimum⑸AND vale[i] <= maximum⑹THEN increment total.valid by 1;sum = sum + value[i];⑺ELSE skip;ENDIFincrement i by 1;⑻ENDDO⑼IF total.valid > 0⑽THEN average = sum / total.valid;⑾ELSE average =-999;⑿ENDIF⒀路径2测试案例:value[i]=-999预期结果:平均值=-999
  • ④准备测试案例,强制执行基本集中的每条路径白盒路径测试技术

第65页:准备路径3

  • 准备路径3:1-2-3-10-11-13测试案例:i = 1;Total.input = total.valid = 0;⑴Sum = 0;DO WHILE value[i]<>-999⑵ANDtotal.input <100⑶increment total.input by 1;⑷IF vale[i] >= minimum⑸AND vale[i] <= maximum⑹THEN increment total.valid by 1;sum = sum + value[i];⑺ELSE skip;ENDIFincrement i by 1;⑻ENDDO⑼IF total.valid > 0⑽THEN average = sum / total.valid;⑾ELSE average =-999;⑿ENDIF⒀路径3测试案例:前100个数值应该有效预期结果:正确的100个数的平均值和总和测试多于100个值的情况
  • ④准备测试案例,强制执行基本集中的每条路径白盒路径测试技术

第66页:66准备路径4

  • 66准备路径4:1-2-3-4-5-8-9-2...测试案例:i = 1;Total.input = total.valid = 0;⑴Sum = 0;DO WHILE value[i]<>-999⑵ANDtotal.input <100⑶increment total.input by 1;⑷IF vale[i] >= minimum⑸AND vale[i] <= maximum⑹THEN increment total.valid by 1;sum = sum + value[i];⑺ELSE skip;ENDIFincrement i by 1;⑻ENDDO⑼IF total.valid > 0⑽THEN average = sum / total.valid;⑾ELSE average =-999;⑿ENDIF⒀路径4测试案例:value[k]=有效输入(其中k<100)value[i] <最小值(其中i<k)预期结果:基于k-1的正确平均值和总数
  • ④准备测试案例,强制执行基本集中的每条路径白盒路径测试技术

第67页:准备路径5

  • 准备路径5:1-2-3-4-5-6-8-9-2...测试案例:i = 1;Total.input = total.valid = 0;⑴Sum = 0;DO WHILE value[i]<>-999⑵AND total.input <100⑶increment total.input by 1;⑷IF vale[i] >= minimum⑸AND vale[i] <= maximum⑹THEN increment total.valid by 1;sum = sum + value[i];⑺ELSE skip;ENDIFincrement i by 1;⑻ENDDO⑼IF total.valid > 0⑽THEN average = sum / total.valid;⑾ELSE average =-999;⑿ENDIF⒀路径5测试案例:value[k]=有效输入(其中k<100)value[i] >最大值(其中i<k)预期结果:基于k-1的正确平均值和总数
  • ④准备测试案例,强制执行基本集中的每条路径白盒路径测试技术

第68页:准备路径6

  • 准备路径6:1-2-3-4-5-6-7-8-9-2...测试案例:i = 1;Total.input = total.valid = 0;⑴Sum = 0;DO WHILE value[i]<>-999⑵AND total.input <100⑶increment total.input by 1;⑷IF vale[i] >= minimum⑸AND vale[i] <= maximum⑹THEN increment total.valid by 1;sum = sum + value[i];⑺ELSE skip;ENDIFincrement i by 1;⑻ENDDO⑼IF total.valid > 0⑽THEN average = sum / total.valid;⑾ELSE average =-999;⑿ENDIF⒀路径6测试案例:value[k]=有效输入(其中k<100)预期结果:基于k的正确平均值和总数
  • ④准备测试案例,强制执行基本集中的每条路径白盒路径测试技术

第69页:黑盒测试方法用例的设计

功能测试黑盒测试概念示意图7.5.3黑盒测试方法用例的设计

第70页:常用测试种类

常用测试种类:等价分类法边界值分析错误猜测法因果图法7.5.3黑盒测试方法用例的设计

第71页:等价划分(经典的黑盒测试方法)定义

(1)等价划分(经典的黑盒测试方法)定义
等价分类,就是把输入数据的可能值划分为若干等价类(输入域的子集合,各个输入数据对于揭露程序中的错误都是等价的)。在每一个等价类中取一个数据作为测试的输入条件,这样就可以少量的代表性测试数据,来取得较好的测试结果。7.5.3黑盒测试方法用例的设计

第72页:是指对于程序的规格说明来说

是指对于程序的规格说明来说,是合理的有意义的输入数据构成的集合。

利用它可以检验程序是否实现预先规定的功能和性能。

有效等价类是指对于程序的规格说明来说,是不合理的,是无意义的输入数据构成的集合。

程序员主要利用这一类测试用例来检查程序中功能和性能的实现是否不符合规格说明要求。

无效等价类7.5.3黑盒测试方法用例的设计

第73页:如果输入条件规定了取值范围

1、如果输入条件规定了取值范围,或者是值的个数,则可以确立一个有效等价类和两个无效等价类。

确定等价类的原则:例如:……序号值可以从1到999……一个有效等价类:1≤序号值≤999两个无效等价类:序号值<1序号值>9997.5.3黑盒测试方法用例的设计

第74页:如果输入条件规定了输入值的集合

2、如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。

例如:在C语言中对变量标识符规定为“以字母打头的……串”。

所有以字母打头的构成为有效等价类;而不在此集合内(不以字母打头)归于无效等价类。

7.5.3黑盒测试方法用例的设计

第75页:如果规定了输入数据是一组值

3、如果规定了输入数据是一组值,而且程序要对每个输入值分别进行处理。

这时可为每一个输入值确立一个有效等价类此外再针对这组确立一个无效等价类,它应是所有不允许输入值的集合。

例如:在教师分房方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。

因此可以确定4个有效等价类为教授、副教授、讲师和助教,以及1个无效等价类它应是所有不符合以上身份的人员的输入值的集合。

7.5.3黑盒测试方法用例的设计

第76页:如果规定了输入数据必须遵守的规则

4、如果规定了输入数据必须遵守的规则,则可以确定一个有效等价类(符合规则),和若干个无效等价类(从不同角度违反则)。

例如:在C语言中规定了“一个语句必须以分号‘;’作为结束”,这时,可以确定一个有效等价类,以“;”结束,而若干个无效等价类应以“:,、”等。

7.5.3黑盒测试方法用例的设计

第77页:如果输入条件是一个布尔量

5、如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。

7.5.3黑盒测试方法用例的设计

第78页:等价划分法

6、如果确知,已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。

7.5.3黑盒测试方法用例的设计

第79页:根据等价类来设计测试用例

  • 根据等价类来设计测试用例,其过程如下:
  • (1)为每个等价类规定一个惟一的编号。
  • (2)设计一个新的测试用例,使其尽可能多地覆盖未被覆盖的有效等价类,此项工作重复进行,直到所有的有效等价类都被覆盖为止。
  • (3)设计一个新的测试用例,使其覆盖一个(而且仅仅一个)尚未被覆盖的无效等价类,此项工作重复进行,直到所有的无效等价类都被覆盖为止。7.5.3黑盒测试方法用例的设计

第80页:黑盒等价划分测试技术举例

黑盒等价划分测试技术举例:某一报表处理系统,要求用户输入处理报表的日期。

假设日期限制在1990年1月至1999年12月,即系统只能对该段时期内的报表进行处理。

如果用户输入的日期不在此范围内,则显示输入错误信息。

该系统规定日期由年、月的6位数字字符组成,前4位代表年,后2位代表月。

请用等价类划分法设计测试用例,来测试程序的“日期检查功能”。

第81页:黑盒等价划分测试技术①划分等价类并编号

  • 黑盒等价划分测试技术
  • ①划分等价类并编号:划分成3个有效等价类,7个无效等价类,如表所示。
  • ②为合理等价类设计测试用例,对于表中编号为1,5,8对应的3个合理等价类,用一个测试用例覆盖。无效等价类有效等价类输入条件
  • ②有非数字字符
  • ③少于6位数字字符
  • ④多于6位数字字符
  • ①6位数字出生年月的类型及长度
  • ⑥小于199001
  • ⑦大于199912
  • ⑤199001~199912间出生年月数值
  • ⑨等于00
  • ⑩大于12
  • ⑧01~12间月份

第82页:③为每一个不合理等价类至少设计一个测试用

  • ③为每一个不合理等价类至少设计一个测试用例:测试数据期望结果覆盖范围
  • 测试用例1 99MAY输入无效2
  • 测试用例2 19995输入无效3
  • 测试用例3 1999005输入无效4
  • 测试用例4 198912输入无效6
  • 测试用例5 200001输入无效7
  • 测试用例6 199900输入无效9
  • 测试用例7 199913输入无效10
  • 黑盒等价划分测试技术

第83页:边界值的相邻值注

  • 经验:边界值最容易出错!测试数据:
  • 边界值
  • 边界值的相邻值注:通常设计测试方案时联合使用等价划分和边界值分析两种技术。
  • (2)边界值分析7.5.3黑盒测试方法用例的设计

第84页:边界值分析举例

  • 边界值分析举例:程序功能说明书指出,某程序的输入条件为:每个学生可以选修1至3门课程,试用黑盒法设计测试用例。【要求】
  • (1)按等价类划分法设计测试用例(要求列出设计过程)
  • (2)按边界值分析法设计测试用例。7.5.3黑盒测试方法用例的设计

第85页:按等价类划分法设计测试用例合理等价类

  • (1)按等价类划分法设计测试用例合理等价类(择一):选修1-3门不合理等价类:没选课选3门以上等价类划分法设计测试用例:
  • ①测试数据:选修=1预期结果:有效输入
  • ①选修=0预期结果:无效输入
  • ②选修=4预期结果:无效输入7.5.3黑盒测试方法用例的设计

第86页:按边界值分析法设计测试用例

  • (2)按边界值分析法设计测试用例。
  • ①测试数据:选修=0预期结果:无效输入
  • ②测试数据:选修=1预期结果:有效输入
  • ③测试数据:选修=3预期结果:有效输入
  • ④测试数据:选修=4预期结果:无效输入7.5.3黑盒测试方法用例的设计

第87页:黑盒测试方法用例的设计(3)错误推测

  • 直觉+经验基本思路:列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据他们选择测试方案。7.5.3黑盒测试方法用例的设计
  • (3)错误推测

第88页:黑盒测试方法用例的设计

总结:首选“边界值分析法”必要时“等价划分法”错误推测作为补充逻辑覆盖对照检查7.5.3黑盒测试方法用例的设计

第89页:黑盒测试方法用例的设计(4)因果图法

  • 定义:利用图解法分析输入的各种组合情况从而来设计测试用例。设计测试用例步骤:找出SRS中的原因和结果,并分别加以标识;分析语义,找出原因-结果、原因-原因之间关系,画出因果图,并标明约束和限制条件;将因果图转换为判定表;依据判定表每列,设计测试用例。7.5.3黑盒测试方法用例的设计
  • (4)因果图法

第90页:黑盒测试方法用例的设计

图中,Ci,Ei取值为0或1,0表示条件不成立或某状态不出现,1表示条件成立或某状态出现。

4种符号分别表示规格说明中4种因果关系:7.5.3黑盒测试方法用例的设计

第91页:输入\输出条件之间的约束关系表示为

  • 输入\输出条件之间的约束关系表示为:
  • ①E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1
  • ②I约束(或):a、b和c中至少有一个必须是1,即a、b和c不能同时为0
  • ③O约束(唯一);a和b必须有一个,且仅有1个为1
  • ④R约束(要求):a是1时,b必须是1,即不可能a是1时b是0输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0

第92页:因果图法举例

因果图法举例:有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。

其规格说明如下:若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。

若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。

7.5.3黑盒测试方法用例的设计

第93页:分析这一段说明

1)分析这一段说明,列出原因和结果,并编号。

原因:1.售货机有零钱找2.投入1元硬币3.投入5角硬币4.押下橙汁按钮5.押下啤酒按钮结果:21.售货机〖零钱找完〗灯亮22.退还1元硬币23.退还5角硬币24.送出橙汁饮料25.送出啤酒饮料7.5.3黑盒测试方法用例的设计

第94页:画出因果图

2)画出因果图,如图所示。

所有原因结点列在左边,所有结果结点列在右边。

建立中间结点,表示处理的中间状态。

中间结点:11.投入1元硬币且押下饮料按钮12.押下〖橙汁〗或〖啤酒〗的按钮13.应当找5角零钱并且售货机有零钱找14.钱已付清7.5.3黑盒测试方法用例的设计

第95页:转换成判定表

3)转换成判定表:7.5.3黑盒测试方法用例的设计

第96页:在判定表中

4)在判定表中,阴影部分表示因违反约束条件的不可能出现的情况,删去。

第16列与第32列因什么动作也没做,也删去。

最后可根据剩下的16个列作为确定测试用例的依据。

依据因果图法设计的测试用例如下:【例,根据第6列设计的测试用例1】测试用例1:输入:自动售货机有零钱找,顾客投入1元硬币并押下橙汁按钮。

输出:系统退还5角硬币并送出橙汁饮料。

测试用例2:……7.5.3黑盒测试方法用例的设计

第97页:因果图法课堂练习

课堂练习:试用因果图法列写本题测试用例某规格说明:“第一列字符必须是A或者B,第二列字符必须是数字,第一、二两列都满足时修改文件,第一列不正确时给出信息L,第二列不正确时给出信息M。

”7.5.3黑盒测试方法用例的设计

第98页:分析规格说明并编号

  • 解题过程:
  • (1)分析规格说明并编号。原因:第一列字符是A编号:第一列字符是B编号:第二列字符是数字编号:结果:第一列字符正确编号:修改文件编号:给出L信息编号:给出M信息编号:7.5.3黑盒测试方法用例的设计

第99页:添加约束和限制条件“原因”的符号表示

(2)添加约束和限制条件“原因”的符号表示:“结果”的符号表示:7.5.3黑盒测试方法用例的设计

第100页:黑盒测试方法用例的设计

7.5.3黑盒测试方法用例的设计

第101页:问题的因果图表述7.5.3黑盒测试方

(3)问题的因果图表述7.5.3黑盒测试方法用例的设计

第102页:判定表87654321组合条件000

  • (4)因果图
  • 判定表87654321组合条件000001010011100101110111条
  • ①件
  • ②原
  • ③因001111XX中间结果101100001010001010XXXXXX动作结果7.5.3黑盒测试方法用例的设计

第103页:根据判定表的3~8列编写测试用例如下

(5)根据判定表的3~8列编写测试用例如下:根据3列输入:A3, A8输出:修改文件根据4列输入:AM, A?

输出:给出信息M根据5列输入:B4, B5输出:修改文件根据6列输入:BB, BC输出:给出信息M根据7列输入:M1, X6输出:给出信息L根据8列输入:XY, MN输出:给出信息M与L7.5.3黑盒测试方法用例的设计

第104页:7.6 软件调试

“找出错误的位置,并设法改正!

”软件调试过程7.6软件调试

第105页:7.6 软件调试

  • 常用方法:
  • (1)试探法:猜测故障位置,检查程序获得对错误的准确定位。
  • (2)回溯法:从发现症状的地方开始,沿程序的控制流往回追踪源程序代码,以找出错误原因。
  • (3)对分查找法:定位关键点,运行定位错误。
  • (4)归纳法:通过错误数据,查找并排除错误。
  • (5)演绎法:设想错误原因,通过测试逐个排除。7.6软件调试

第106页:本章结束页

The End

顶部目录