白盒测试及用例的设计.ppt

上传人:wuy****n92 文档编号:91520127 上传时间:2023-05-27 格式:PPT 页数:55 大小:502.50KB
返回 下载 相关 举报
白盒测试及用例的设计.ppt_第1页
第1页 / 共55页
白盒测试及用例的设计.ppt_第2页
第2页 / 共55页
点击查看更多>>
资源描述

《白盒测试及用例的设计.ppt》由会员分享,可在线阅读,更多相关《白盒测试及用例的设计.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、A Free sample background from Slide 1第四章 白盒测试及其用例的设计第4 章 白盒测试及用例的设计4.1 4.1 白盒测试方法白盒测试方法4.2 4.2 白盒测试的基本概念白盒测试的基本概念4.3 4.3 覆盖测试覆盖测试4.4 4.4 路径测试路径测试4.5 4.5 最少测试用例数计算最少测试用例数计算A Free sample background from Slide 2第四章 白盒测试及其用例的设计本章教学目标理论环节理论环节n n 学习理解白盒测试方法的基本概念 学习理解白盒测试方法的基本概念n n 学习理解白盒测试的覆盖理论 学习理解白盒测试的覆

2、盖理论n n 学习掌握白盒测试的路径表达 学习掌握白盒测试的路径表达n n 学习掌握白盒测试的基本路径测试法 学习掌握白盒测试的基本路径测试法实践环节实践环节n n 通过案例运用学习掌握覆盖问题的解决方法 通过案例运用学习掌握覆盖问题的解决方法n n 运用基本路径测试方法进行实际程序测试 运用基本路径测试方法进行实际程序测试A Free sample background from Slide 3第四章 白盒测试及其用例的设计4.1 白盒测试方法n n 为什么要进行白盒测试?为什么要进行白盒测试?如果所有软件错误的根源都可以追溯到某个唯一原因,如果所有软件错误的根源都可以追溯到某个唯一原因,那

3、么问题就简单了。然而,事实上一个 那么问题就简单了。然而,事实上一个bug bug 常常是由多个 常常是由多个因素共同导致的,如下图所示。因素共同导致的,如下图所示。Return 假设此时开发工作已结束,程序 假设此时开发工作已结束,程序送交到测试组,没有人知道代码中有 送交到测试组,没有人知道代码中有一个潜在的被 一个潜在的被 0 0 除的错误。若测试组 除的错误。若测试组采用的测试用例的执行路径没有同时 采用的测试用例的执行路径没有同时经过 经过x=0 x=0 和 和y=5/x y=5/x 进行测试,显然测试 进行测试,显然测试工作似乎非常完善,测试用例覆盖了 工作似乎非常完善,测试用例覆

4、盖了所有执行语句,也没有被 所有执行语句,也没有被 0 0 除的错误 除的错误发生。发生。A Free sample background from Slide 4第四章 白盒测试及其用例的设计白盒测试方法(续)n n 白盒测试也称结构测试或逻辑驱动测试,是针对被测单元 白盒测试也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计 内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。测试用例,主要用于软件或程序验证。n n 白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行 白盒测试法检查程序内部逻辑结构,对所有逻辑路径进

5、行测试,是一种穷举路径的测试方法。测试,是一种穷举路径的测试方法。但 但 即使每条路径都测 即使每条路径都测试过了,仍然可能存在错误。因为:试过了,仍然可能存在错误。因为:穷 穷 举 举 路 路 径 径 测 测 试 试 无 无 法 法 检 检 查 查 出 出 程 程 序 序 本 本 身 身 是 是 否 否 违 违 反 反 了 了 设 设 计 计 规 规 范 范,即程序是否是一个错误的程序。即程序是否是一个错误的程序。穷举路径测试不可能查出程序因为遗漏路径而出错。穷举路径测试不可能查出程序因为遗漏路径而出错。穷举路径测试发现不了一些与数据相关的错误。穷举路径测试发现不了一些与数据相关的错误。A

6、Free sample background from Slide 5第四章 白盒测试及其用例的设计白盒测试方法(续)n n 采 采 用 用 白 白 盒 盒 测 测 试 试 方 方 法 法 必 必 须 须 遵 遵 循 循 以 以 下 下 几 几 条 条 原 原 则 则,才 才 能 能 达 达 到 到测试的目的:测试的目的:保证一个模块中的所有独立路径至少被测试一次。保证一个模块中的所有独立路径至少被测试一次。所有逻辑值均需测试真 所有逻辑值均需测试真(true)(true)和假 和假(false)(false)两种情况。两种情况。检查程序的内部数据结构,保证其结构的有效性。检查程序的内部数据结

7、构,保证其结构的有效性。在上下边界及可操作范围内运行所有循环。在上下边界及可操作范围内运行所有循环。n n 白 白 盒 盒 测 测 试 试 主 主 要 要 是 是 检 检 查 查 程 程 序 序 的 的 内 内 部 部 结 结 构 构、逻 逻 辑 辑、循 循 环 环 和 和路径。常用测试用例设计方法有:路径。常用测试用例设计方法有:逻辑覆盖法(逻辑驱动测试)逻辑覆盖法(逻辑驱动测试)基本路径测试方法 基本路径测试方法A Free sample background from Slide 6第四章 白盒测试及其用例的设计4.2 白盒测试的基本概念4.2.1 4.2.1 控制流图控制流图4.2.2

8、 4.2.2 环形复杂度环形复杂度4.2.3 4.2.3 图矩阵图矩阵ReturnA Free sample background from Slide 7第四章 白盒测试及其用例的设计 控制流图n n 控制流图(可简称流图)是对程序流程图进行简化后得到 控制流图(可简称流图)是对程序流程图进行简化后得到的,它可以更加突出的表示程序控制流的结构。的,它可以更加突出的表示程序控制流的结构。n n 控制流图中包括两种图形符号:节点和控制流线。控制流图中包括两种图形符号:节点和控制流线。节点由带标号的圆圈表示,可代表一个或多个语句、一个 节点由带标号的圆圈表示,可代表一个或多个语句、一个处理框序列和

9、一个条件判定框(假设不包含复合条件)。处理框序列和一个条件判定框(假设不包含复合条件)。控制流线由带箭头的弧或线表示,可称为边。它代表程序 控制流线由带箭头的弧或线表示,可称为边。它代表程序中的控制流。中的控制流。n n 对于复合条件,则可将其分解为多个单个条件,并映射成 对于复合条件,则可将其分解为多个单个条件,并映射成控制流图。控制流图。常见结构的控制流图A Free sample background from Slide 9第四章 白盒测试及其用例的设计 环形复杂度n n 环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度 环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度

10、的软件度量。提供定量尺度的软件度量。n n 环形复杂度的应用 环形复杂度的应用 可以将环形复杂度用于基本路径方 可以将环形复杂度用于基本路径方法,它可以提供:程序基本集的独立路径数量;确保所有 法,它可以提供:程序基本集的独立路径数量;确保所有语句至少执行一次的测试数量的上界。语句至少执行一次的测试数量的上界。独立路径是指程序中至少引入了一个新的处理语句集合或 独立路径是指程序中至少引入了一个新的处理语句集合或一个新条件的程序通路。一个新条件的程序通路。采用流图的术语,即独立路径必 采用流图的术语,即独立路径必须至少包含一条在本次定义路径之前不曾用过的边。须至少包含一条在本次定义路径之前不曾用

11、过的边。n n 测试可以被设计为基本路径集的执行过程,但基本路径集 测试可以被设计为基本路径集的执行过程,但基本路径集通常并不唯一。通常并不唯一。A Free sample background from Slide 10第四章 白盒测试及其用例的设计计算环形复杂度的方法n n 环形复杂度以图论为基础,为我们提供了非常有用的软件 环形复杂度以图论为基础,为我们提供了非常有用的软件度量。可用如下三种方法之一来计算环形复杂度:度量。可用如下三种方法之一来计算环形复杂度:控制流图中区域的数量对应于环形复杂度。控制流图中区域的数量对应于环形复杂度。给定控制流图 给定控制流图G G 的环形复杂度 的环形

12、复杂度 V(G)V(G),定义为 定义为 V(G)=E-N+2 V(G)=E-N+2 其中,其中,E E 是控制流图中边的数量,是控制流图中边的数量,N N 是控制流图中的节点 是控制流图中的节点数量。数量。给定控制流图 给定控制流图G G 的环形复杂度 的环形复杂度 V(G)V(G),也可定义为 也可定义为 V(G)=P+1 V(G)=P+1 其中,其中,P P 是控制流图 是控制流图G G 中判定节点的数量。中判定节点的数量。A Free sample background from Slide 11第四章 白盒测试及其用例的设计4.2.3 图矩阵n n 图矩阵是控制流图的矩阵表示形式。图

13、矩阵是控制流图的矩阵表示形式。n n 图 图 矩阵是一个方形矩阵,矩阵是一个方形矩阵,其维数等于控制流图的节点数。其维数等于控制流图的节点数。矩阵中的 矩阵中的 每列和每行都对应于标识的节点,矩阵元素对应 每列和每行都对应于标识的节点,矩阵元素对应于节点间的边。于节点间的边。n n 通常,控制流图中的结点用数字标识,边则用字母标识。通常,控制流图中的结点用数字标识,边则用字母标识。如果在控制流图中从第 如果在控制流图中从第 i i 个结点到第 个结点到第 j j 个结点有一个标识 个结点有一个标识为 为 x x 的边相连接,则在对应图矩阵的第 的边相连接,则在对应图矩阵的第 i i 行第 行第

14、 j j 列有一个 列有一个非空的元素 非空的元素 x x。A Free sample background from Slide 12第四章 白盒测试及其用例的设计4.3 覆盖测试4.3.1 4.3.1 测试覆盖率测试覆盖率4.3.2 4.3.2 逻辑覆盖法逻辑覆盖法4.3.3 4.3.3 面向对象的覆盖面向对象的覆盖4.3.4 4.3.4 测试覆盖准则测试覆盖准则ReturnA Free sample background from Slide 13第四章 白盒测试及其用例的设计4.3.1 测试覆盖率n n 测试覆盖率:用于确定测试所执行到的覆盖项的百分比。测试覆盖率:用于确定测试所执行到

15、的覆盖项的百分比。其中的覆盖项是指作为测试基础的一个入口或属性,比如 其中的覆盖项是指作为测试基础的一个入口或属性,比如语句、分支、条件等。语句、分支、条件等。n n 测试覆盖率可以表示出测试的充分性,在测试分析报告中 测试覆盖率可以表示出测试的充分性,在测试分析报告中可以作为量化指标的依据,测试覆盖率越高效果越好。但 可以作为量化指标的依据,测试覆盖率越高效果越好。但覆盖率不是目标,只是一种手段。覆盖率不是目标,只是一种手段。n n 测试覆盖率包括功能点覆盖率和结构覆盖率:测试覆盖率包括功能点覆盖率和结构覆盖率:功能点覆盖率大致用于表示软件已经实现的功能与软件需 功能点覆盖率大致用于表示软件

16、已经实现的功能与软件需要实现的功能之间的比例关系。要实现的功能之间的比例关系。结构覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率、结构覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率、路径覆盖率等等。路径覆盖率等等。A Free sample background from Slide 14第四章 白盒测试及其用例的设计4.3.2 逻辑覆盖法n n 根据覆盖目标的不同,逻辑覆盖又可分为语句覆盖、判定 根据覆盖目标的不同,逻辑覆盖又可分为语句覆盖、判定覆盖、条件覆盖、判定 覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。条件覆盖、组合覆盖和路径覆盖。语句覆盖:选择足够多的测试用例,使得程序中的每个

17、可 语句覆盖:选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。执行语句至少执行一次。判定覆盖:通过执行足够的测试用例,使得程序中的每个 判定覆盖:通过执行足够的测试用例,使得程序中的每个判定至少都获得一次 判定至少都获得一次“真 真”值和 值和“假 假”值,值,也就是使程序 也就是使程序中的每个取 中的每个取“真 真”分支和取 分支和取“假 假”分支至少均经历一次,分支至少均经历一次,也称为 也称为“分支覆盖 分支覆盖”。条件覆盖:设计足够多的测试用例,使得程序中每个判定 条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真 包含的每个条件的可能取值(真

18、/假)都至少满足一次。假)都至少满足一次。A Free sample background from Slide 15第四章 白盒测试及其用例的设计逻辑覆盖法(续)判定 判定/条件覆盖:设计足够多的测试用例,使得程序中每 条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真 个判定包含的每个条件的所有情况(真/假)至少出现一次,假)至少出现一次,并且每个判定本身的判定结果(真 并且每个判定本身的判定结果(真/假)也至少出现一次。假)也至少出现一次。满足判定 满足判定/条件覆盖的测试用例一定同时满足判定覆盖 条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖。和条件覆盖。

19、组合覆盖:通过执行足够的测试用例,使得程序中每个判 组合覆盖:通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。定的所有可能的条件取值组合都至少出现一次。满足组合覆盖的测试用例一定满足判定覆盖、条件覆 满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定 盖和判定/条件覆盖。条件覆盖。路径覆盖:设计足够多的测试用例,要求覆盖程序中所有 路径覆盖:设计足够多的测试用例,要求覆盖程序中所有可能的路径。可能的路径。A Free sample background from Slide 16第四章 白盒测试及其用例的设计逻辑覆盖法(续)组合覆盖判断/条件覆盖判断覆盖

20、条件覆盖语句覆盖A Free sample background from Slide 17第四章 白盒测试及其用例的设计逻辑覆盖法(续)void DoWork(int x,int y,int z)void DoWork(int x,int y,int z)int k=0,j=0;int k=0,j=0;if(x3)&(z3)&(z5)if(x=4)|(y5)j=x*y+10;j=x*y+10;/语句块 语句块2 2 j=j%3;/j=j%3;/语句块 语句块3 3 A Free sample background from Slide 18第四章 白盒测试及其用例的设计逻辑覆盖法(续)X3&

21、z5执行语句块3FFTTabdceA Free sample background from Slide 19第四章 白盒测试及其用例的设计语句覆盖n n 要实现 要实现DoWork DoWork 函数的语句覆盖,只需设计一个测试用例 函数的语句覆盖,只需设计一个测试用例就可以覆盖程序中的所有可执行语句。就可以覆盖程序中的所有可执行语句。测试用例输入为:测试用例输入为:x=4 x=4、y=5 y=5、z=5 z=5 程序执行的路径是:程序执行的路径是:abd abdn n 分析:分析:语句覆盖可以保证程序中的每个语句都得到执行,但 语句覆盖可以保证程序中的每个语句都得到执行,但发现不了判定中逻

22、辑运算的错误,即它并不是一种充分的 发现不了判定中逻辑运算的错误,即它并不是一种充分的检验方法。例如在第一个判定 检验方法。例如在第一个判定(x3)&(z3)&(z10)中把 中把“&”“&”错误的写成了 错误的写成了“|”“|”,这时仍使用该测试用例,则程序仍,这时仍使用该测试用例,则程序仍会按照流程图上的路径 会按照流程图上的路径abd abd 执行。可以说语句覆盖是最弱 执行。可以说语句覆盖是最弱的逻辑覆盖准则。的逻辑覆盖准则。A Free sample background from Slide 20第四章 白盒测试及其用例的设计判定覆盖n n 要实现 要实现DoWork DoWork

23、 函数的判定覆盖,需要设计两个测试用例。函数的判定覆盖,需要设计两个测试用例。测试用例的输入为:测试用例的输入为:x=4 x=4、y=5 y=5、z=5 z=5;x=2 x=2、y=5 y=5、z=5 z=5 程序执行的路径分别是:程序执行的路径分别是:abd abd;ace acen n 分析:分析:上述两个测试用例不仅满足了判定覆盖,同时还做到 上述两个测试用例不仅满足了判定覆盖,同时还做到语句覆盖。从这点看似乎判定覆盖比语句覆盖更强一些,语句覆盖。从这点看似乎判定覆盖比语句覆盖更强一些,但仍然无法确定判定内部条件的错误。例如把第二个判定 但仍然无法确定判定内部条件的错误。例如把第二个判定

24、中的条件 中的条件y5 y5 错误写为 错误写为y5 y5,使用上述测试用例,照样能按 使用上述测试用例,照样能按原路径执行而不影响结果。因此,需要有更强的逻辑覆盖 原路径执行而不影响结果。因此,需要有更强的逻辑覆盖准则去检验判定内的条件。准则去检验判定内的条件。A Free sample background from Slide 21第四章 白盒测试及其用例的设计判定覆盖(续)16352789410n n 说明:以上仅考虑了两出口的判断,我们还应把判定覆盖 说明:以上仅考虑了两出口的判断,我们还应把判定覆盖准则扩充到多出口判断(如 准则扩充到多出口判断(如Case Case 语句)的情况。

25、因此,判 语句)的情况。因此,判定覆盖更为广泛的含义应该是使得每一个判定获得每一种 定覆盖更为广泛的含义应该是使得每一个判定获得每一种可能的结果至少一次。可能的结果至少一次。A Free sample background from Slide 22第四章 白盒测试及其用例的设计条件覆盖n n 在实际程序代码中,一个判定中通常都包含若干条件。在实际程序代码中,一个判定中通常都包含若干条件。条件覆盖的目的是设计若干测试用例,在执行被测程序 条件覆盖的目的是设计若干测试用例,在执行被测程序后,要使每个判定中每个条件的可能值至少满足一次。后,要使每个判定中每个条件的可能值至少满足一次。n n 对 对

26、DoWork DoWork 函数的各个判定的各种条件取值加以标记。函数的各个判定的各种条件取值加以标记。对于第一个判定 对于第一个判定(x3)&(z3)&(z3 x3 取真值记为 取真值记为T1 T1,取假值记为 取假值记为-T1 T1 条件 条件z10 z5)(x=4)|(y5):条件 条件x=4 x=4 取真值记为 取真值记为T3 T3,取假值记为 取假值记为-T3 T3 条件 条件y5 y5 取真值记为 取真值记为T4 T4,取假值记为 取假值记为-T4 T4A Free sample background from Slide 23第四章 白盒测试及其用例的设计条件覆盖(续)n n 根

27、据条件覆盖的基本思想,要使上述 根据条件覆盖的基本思想,要使上述4 4 个条件可能产生的 个条件可能产生的8 8 种情况至少满足一次,设计测试用例如下:种情况至少满足一次,设计测试用例如下:测试用例 测试用例 执行路径 执行路径 覆盖条件 覆盖条件 覆盖分支 覆盖分支 x=4 x=4、y=6 y=6、z=5 z=5 abd abd T1 T1、T2 T2、T3 T3、T4 T4 bd bd x=2 x=2、y=5 y=5、z=15 z=15 ace ace-T1 T1、-T2-T2、-T3-T3、-T4-T4 ce cen n 分析:上面这组测试用例不但覆盖了 分析:上面这组测试用例不但覆盖了

28、4 4 个条件的全部 个条件的全部8 8 种 种情况,而且将两个判定的 情况,而且将两个判定的4 4 个分支 个分支b b、c c、d d、e e 也同时覆盖 也同时覆盖了,即同时达到了条件覆盖和判定覆盖。了,即同时达到了条件覆盖和判定覆盖。A Free sample background from Slide 24第四章 白盒测试及其用例的设计条件覆盖(续)n n 说明:虽然前面的一组测试用例同时达到了条件覆盖和判 说明:虽然前面的一组测试用例同时达到了条件覆盖和判定覆盖,但是,并不是说满足条件覆盖就一定能满足判定 定覆盖,但是,并不是说满足条件覆盖就一定能满足判定覆盖。如果设计了下表中的这

29、组测试用例,则虽然满足了 覆盖。如果设计了下表中的这组测试用例,则虽然满足了条件覆盖,但只是覆盖了程序中第一个判定的取假分支 条件覆盖,但只是覆盖了程序中第一个判定的取假分支c c 和第二个判定的取真分支 和第二个判定的取真分支d d,不满足判定覆盖的要求。,不满足判定覆盖的要求。测试用例 测试用例 执行路径 执行路径 覆盖条件 覆盖条件 覆盖分支 覆盖分支x=2 x=2、y=6 y=6、z=5 z=5 acd acd-T1 T1、T2 T2、-T3-T3、T4 T4 cd cdx=4 x=4、y=5 y=5、z=15 z=15 acd acdT1 T1、-T2-T2、T3 T3、-T4-T4

30、 cd cdA Free sample background from Slide 25第四章 白盒测试及其用例的设计判定/条件覆盖n n 判定 判定/条件覆盖实际上是将判定覆盖和条件覆盖结合起来 条件覆盖实际上是将判定覆盖和条件覆盖结合起来的一种方法,即:设计足够的测试用例,使得判定中每个 的一种方法,即:设计足够的测试用例,使得判定中每个条件的所有可能取值至少满足一次,同时每个判定的可能 条件的所有可能取值至少满足一次,同时每个判定的可能结果也至少出现一次。结果也至少出现一次。n n 根据判定 根据判定/条件覆盖的基本思想,只需设计以下两个测试 条件覆盖的基本思想,只需设计以下两个测试用例

31、便可以覆盖 用例便可以覆盖4 4 个条件的 个条件的8 8 种取值以及 种取值以及4 4 个判定分支。个判定分支。测试用例 测试用例 执行路径 执行路径 覆盖条件 覆盖条件 覆盖分支 覆盖分支x=4 x=4、y=6 y=6、z=5 z=5 abd abdT1 T1、T2 T2、T3 T3、T4 T4 bd bdx=2 x=2、y=5 y=5、z=15 z=15 ace ace-T1 T1、-T2-T2、-T3-T3、-T4-T4 ce ceA Free sample background from Slide 26第四章 白盒测试及其用例的设计判定/条件覆盖(续)n n 分析:从表面上看,判定

32、 分析:从表面上看,判定/条件覆盖测试了各个判定中的 条件覆盖测试了各个判定中的所有条件的取值,但实际上,编译器在检查含有多个条件 所有条件的取值,但实际上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其它条件 的逻辑表达式时,某些情况下的某些条件将会被其它条件所掩盖。因此,判定 所掩盖。因此,判定/条件覆盖也不一定能够完全检查出 条件覆盖也不一定能够完全检查出逻辑表达式中的错误。逻辑表达式中的错误。例如:对于第一个判定 例如:对于第一个判定(x3)&(z3)&(z3 x3 和 和z10 z3 x3为假,则编译器将不再检查 为假,则编译器将不再检查z10 z5)(x=4)

33、|(y5)来 来说,若条件 说,若条件x=4 x=4 满足,就认为该判定为真,这时将不会再 满足,就认为该判定为真,这时将不会再检查 检查y5 y5,那么同样也无法发现这个条件中的错误。,那么同样也无法发现这个条件中的错误。A Free sample background from Slide 27第四章 白盒测试及其用例的设计组合覆盖n n 组合覆盖的目的是要使设计的测试用例能覆盖每一个判定 组合覆盖的目的是要使设计的测试用例能覆盖每一个判定的所有可能的条件取值组合。的所有可能的条件取值组合。n n 对 对DoWork DoWork 函数中的各个判定的条件取值组合加以标记:函数中的各个判定的

34、条件取值组合加以标记:1 1、x3,z3,z3,z=10 x3,z=10 记做 记做T1-T2 T1-T2,第一个判定的取假分支 第一个判定的取假分支 3 3、x=3,z10 x=3,z10 记做 记做-T1 T2 T1 T2,第一个判定的取假分支 第一个判定的取假分支 4 4、x=10 x=10 记做 记做-T1-T2 T1-T2,第一个判定的取假分支 第一个判定的取假分支 5 5、x=4,y5 x=4,y5 记做 记做T3 T4 T3 T4,第二个判定的取真分支 第二个判定的取真分支 6 6、x=4,y=5 x=4,y5 x!=4,y5 记做 记做-T3 T4 T3 T4,第二个判定的取真

35、分支 第二个判定的取真分支 8 8、x!=4,y=5 x!=4,y=5 记做 记做-T3-T4 T3-T4,第二个判定的取假分支 第二个判定的取假分支A Free sample background from Slide 28第四章 白盒测试及其用例的设计组合覆盖(续)n n 根据组合覆盖的基本思想,设计测试用例如下:根据组合覆盖的基本思想,设计测试用例如下:测试用例 测试用例 执行路径 执行路径 覆盖条件 覆盖条件 覆盖组合号 覆盖组合号x=4 x=4、y=6 y=6、z=5 z=5 abd abd T1 T1、T2 T2、T3 T3、T4 T4 1 1 和 和5 5 x=4 x=4、y=5

36、 y=5、z=15 z=15 acd acd T1 T1、-T2-T2、T3 T3、-T4-T4 2 2 和 和6 6 x=2 x=2、y=6 y=6、z=5 z=5 acd acd-T1 T1、T2 T2、-T3-T3、T4 T4 3 3 和 和7 7 x=2 x=2、y=5 y=5、z=15 z=15 ace ace-T1 T1、-T2-T2、-T3-T3、-T4-T4 4 4 和 和8 8n n 分析:上面这组测试用例覆盖了所有 分析:上面这组测试用例覆盖了所有8 8 种条件取值的组合,种条件取值的组合,覆盖了所有判定的真假分支,但是却丢失了一条路径 覆盖了所有判定的真假分支,但是却丢失

37、了一条路径abe abe。A Free sample background from Slide 29第四章 白盒测试及其用例的设计路径覆盖n n 前面提到的 前面提到的5 5 种逻辑覆盖都未涉及到路径的覆盖。事实上,种逻辑覆盖都未涉及到路径的覆盖。事实上,只有当程序中的每一条路径都受到了检验,才能使程序受 只有当程序中的每一条路径都受到了检验,才能使程序受到全面检验。路径覆盖的目的就是要使设计的测试用例能 到全面检验。路径覆盖的目的就是要使设计的测试用例能覆盖被测程序中所有可能的路径。覆盖被测程序中所有可能的路径。n n 根据路径覆盖的基本思想,在满足组合覆盖的测试用例中 根据路径覆盖的基本

38、思想,在满足组合覆盖的测试用例中修改其中一个测试用例,则可以实现路径覆盖:修改其中一个测试用例,则可以实现路径覆盖:测试用例 测试用例 执行路径 执行路径 覆盖条件 覆盖条件 x=4 x=4、y=6 y=6、z=5 z=5 abd abd T1 T1、T2 T2、T3 T3、T4 T4 x=4 x=4、y=5 y=5、z=15 z=15 acd acd T1 T1、-T2-T2、T3 T3、-T4-T4 x=2 x=2、y=5 y=5、z=15 z=15 ace ace-T1 T1、-T2-T2、-T3-T3、-T4-T4 x=5 x=5、y=5 y=5、z=5 z=5 abe abe T1

39、T1、T2 T2、-T3-T3、-T4-T4 A Free sample background from Slide 30第四章 白盒测试及其用例的设计路径覆盖(续)n n 分析:虽然前面一组测试用例满足了路径覆盖,但并没有 分析:虽然前面一组测试用例满足了路径覆盖,但并没有覆盖程序中所有的条件组合(丢失了组合 覆盖程序中所有的条件组合(丢失了组合3 3 和 和7 7),即满足),即满足路径覆盖的测试用例并不一定满足组合覆盖。路径覆盖的测试用例并不一定满足组合覆盖。n n 说明:说明:对于比较简单的小程序,实现路径覆盖是可能做到的。但 对于比较简单的小程序,实现路径覆盖是可能做到的。但如果程序

40、中出现较多判断和较多循环,可能的路径数目将 如果程序中出现较多判断和较多循环,可能的路径数目将会急剧增长,要在测试中覆盖所有的路径是无法实现的。会急剧增长,要在测试中覆盖所有的路径是无法实现的。为了解决这个难题,只有把覆盖路径数量压缩到一定的限 为了解决这个难题,只有把覆盖路径数量压缩到一定的限度内,如程序中的循环体只执行一次。度内,如程序中的循环体只执行一次。在实际测试中,即使对于路径数很有限的程序已经做到路 在实际测试中,即使对于路径数很有限的程序已经做到路径覆盖,仍然不能保证被测试程序的正确性,还需要采用 径覆盖,仍然不能保证被测试程序的正确性,还需要采用其他测试方法进行补充。其他测试方

41、法进行补充。A Free sample background from Slide 31第四章 白盒测试及其用例的设计4.3.3 面向对象的覆盖n n 继承上下文覆盖 继承上下文覆盖 由于传统的结构化度量没有考虑面向对象的一些特性(如 由于传统的结构化度量没有考虑面向对象的一些特性(如多态、继承和封装等),所以在面向对象领域,传统的结 多态、继承和封装等),所以在面向对象领域,传统的结构化覆盖必须被加强,以满足面向对象特性。构化覆盖必须被加强,以满足面向对象特性。继承上下文覆盖考虑在每个类的上下文内获得的覆盖率级 继承上下文覆盖考虑在每个类的上下文内获得的覆盖率级别。它是扩展到面向对象领域里的

42、一种覆盖率度量方法,别。它是扩展到面向对象领域里的一种覆盖率度量方法,用于度量在系统中的多态调用被测试得多好。用于度量在系统中的多态调用被测试得多好。继承上下文定义将基类上下文内例行程序的执行作为独立 继承上下文定义将基类上下文内例行程序的执行作为独立于继承类上下文内例行程序的执行。同样,它们在考虑继 于继承类上下文内例行程序的执行。同样,它们在考虑继承类上下文内例行程序的执行也独立于基类上下文内例行 承类上下文内例行程序的执行也独立于基类上下文内例行程序的执行。为了获得 程序的执行。为了获得100 100 继承上下文覆盖,代码必须 继承上下文覆盖,代码必须在每个适当的上下文内被完全执行。在每

43、个适当的上下文内被完全执行。A Free sample background from Slide 32第四章 白盒测试及其用例的设计面向对象的覆盖(续)n n 基于状态的上下文覆盖 基于状态的上下文覆盖 在绝大多数面向对象的系统中存在这样的一些类:这些类 在绝大多数面向对象的系统中存在这样的一些类:这些类的对象可以存在于众多不同状态中的任何一种,并且由于 的对象可以存在于众多不同状态中的任何一种,并且由于类的行为依赖于状态,每个类的行为在每个可能的状态中 类的行为依赖于状态,每个类的行为在每个可能的状态中其性质是不同的。其性质是不同的。基于状态的上下文覆盖对应于被测类对象的潜在状态。基于状态

44、的上下文覆盖对应于被测类对象的潜在状态。这样基于状态的上下文覆盖把一个状态上下文内的一个例 这样基于状态的上下文覆盖把一个状态上下文内的一个例行程序的执行认为是独立于另一个状态内相同例行程序的 行程序的执行认为是独立于另一个状态内相同例行程序的执行。为了达到 执行。为了达到100 100 的基于状态的上下文覆盖,例行程 的基于状态的上下文覆盖,例行程序必须在每个适当的上下文(状态)内被执行。序必须在每个适当的上下文(状态)内被执行。A Free sample background from Slide 33第四章 白盒测试及其用例的设计4.3.4 测试覆盖准则n n 逻辑覆盖的出发点是合理的、

45、完善的。所谓 逻辑覆盖的出发点是合理的、完善的。所谓“覆盖 覆盖”,就是,就是想要做到全面而无遗漏,但逻辑覆盖并不能真正做到无遗漏。想要做到全面而无遗漏,但逻辑覆盖并不能真正做到无遗漏。n n 例如:我们不小心将前面提到的程序段中的 例如:我们不小心将前面提到的程序段中的 if(x3&Z3&Z=3&Z=3&Z10)按照我们前面设计的测试用例(按照我们前面设计的测试用例(x x 的值取 的值取2 2 或 或4 4)来看,)来看,逻辑覆盖对这样的小问题都无能为力。分析出现这一情况的 逻辑覆盖对这样的小问题都无能为力。分析出现这一情况的原因在于:错误区域仅仅在 原因在于:错误区域仅仅在x=3 x=3

46、 这个点上,即仅当 这个点上,即仅当x x 的值取 的值取3 3时,测试才能发现错误。面对这类情况,我们应该从中吸取 时,测试才能发现错误。面对这类情况,我们应该从中吸取的教训是测试工作要有重点,要多针对容易发生问题的地方 的教训是测试工作要有重点,要多针对容易发生问题的地方设计测试用例。设计测试用例。A Free sample background from Slide 34第四章 白盒测试及其用例的设计测试覆盖准则(续)n n ESTCA ESTCA 覆盖准则:覆盖准则:在容易发生问题的地方设计测试用例,在容易发生问题的地方设计测试用例,即重视程序中谓词(条件判断)的取值。即重视程序中谓词

47、(条件判断)的取值。n n ESTCA ESTCA 覆盖准则 覆盖准则 是一套错误敏感用例分析规则。这一规则 是一套错误敏感用例分析规则。这一规则虽然并不完备,但在普通程序中却是有效的。原因在于这 虽然并不完备,但在普通程序中却是有效的。原因在于这是一种经验型的覆盖准则,规则本身针对了程序编写人员 是一种经验型的覆盖准则,规则本身针对了程序编写人员容易发生的错误,或是围绕着发生错误的频繁区域,从而 容易发生的错误,或是围绕着发生错误的频繁区域,从而提高了发现错误的命中率。具体规则如下:提高了发现错误的命中率。具体规则如下:规则 规则1 1 对于 对于A rel B A rel B 型 型(re

48、l(rel 可以是 可以是)的分支谓词,的分支谓词,应适当的选择 应适当的选择A A 与 与B B 的值,使得测试执行到该分支语句时,的值,使得测试执行到该分支语句时,AB AB AB 的情况分别出现一次。的情况分别出现一次。这是为了检测逻辑符号写错的情况,如将 这是为了检测逻辑符号写错的情况,如将“AB”AB”AB”。A Free sample background from Slide 35第四章 白盒测试及其用例的设计测试覆盖准则(续)规则 规则2 2 对于 对于A A rel rel C C 型 型(rel rel 可以是 可以是 或 或,A A 是变量,是变量,C C 是常量 是常量

49、)的分支谓词:当 的分支谓词:当rel rel 为 为 时,应适当的选择 时,应适当的选择A A 的值,使 的值,使A=C+M A=C+M。这是为了检测 这是为了检测“差 差1”1”之类的错误,如 之类的错误,如“A1”A1”错写成 错写成“A0”A0”。规则 规则3 3 对外部输入变量赋值,使其在每一个测试用例中均 对外部输入变量赋值,使其在每一个测试用例中均有不同的值与符号,并与同一组测试用例中其他变量的值与 有不同的值与符号,并与同一组测试用例中其他变量的值与符号不同。符号不同。这是为了检测程序语句中的错误,如应该引用某一变量 这是为了检测程序语句中的错误,如应该引用某一变量而错成引用另

50、一个常量。而错成引用另一个常量。A Free sample background from Slide 36第四章 白盒测试及其用例的设计测试覆盖准则(续)n n 关于 关于LCSAJ LCSAJ LCSAJ(LCSAJ(Linear Code Sequence and Jump Linear Code Sequence and Jump)的字面含义是 的字面含义是线性代码序列与跳转。在程序中,一个 线性代码序列与跳转。在程序中,一个LCSAJ LCSAJ 是一组顺序 是一组顺序执行的代码,以控制跳转为其结束点。执行的代码,以控制跳转为其结束点。LCSAJ LCSAJ 的起点是根据程序本身决定

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁