第九章-软件测试
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
2024/5/26
17
Step1 根据程序的逻辑结构画出流程图
11
1
2 模块流程图
3
6
4
7
8
5
9
10
2024/5/26
18
Step2 根据流程图画出流图
11
1
2 模块流程图
3
6
4
7
8
5
9
10
2024/5/26
1
程序流图
11 2,3
6
4,5
7
8
9 10
19
Step3 确定基本路径的集合
基本路径
非结构化的循环需按结构化程序设计的思想首先将程序结 构化然后再进行测试。
2024/5/26
31
黑盒测试
黑盒测试旨在测试软件是否满足功能要求,它主要 诊断下列几类错误:
(1)不正确或遗漏的功能; (2)界面错误; (3)数据结构或外部数据库访问错误; (4)性能错误; (5)
值得指出的是,黑盒测试法与白盒测试法不能互相 替代,相反两者应互为补充,在测试的不同阶段为发 现不同类型的错误而灵活选用。
每旋转一圈,测试的范围加大一次:
螺旋中心对应单元测试,它测试源程序的每一模块; 下一步是综合测试,它测试软件总体结构; 再下一步是确认(验收)测试,测试软件是否满足需求; 最后一步是系统测试,检查软件与系统中其他元素是否协
调。
2024/5/26
8
软件测试技术
本节主要讨论当用白盒或黑盒测试法测试软件时, 如何设计测试用例才能达到测试的目的。
前者称为黑盒测试,后者称为白盒测试。 测试用例和测试场景将根据这两种测试方法的特性
制定。
2024/5/26
4
黑盒测试
黑盒测试完全不考虑程序的内部结构和处理过程。 测试仅在程序界面上进行。
设计测试用例旨在说明: ①软件的功能是否可操作; ②程序能否适当地接收输入数据并产生正确的输出 结果或在可能的场景中事件驱动的效果是否尽 如人意; ③能否保持外部信息(如数据文件)的完整性。
通过对测试结果的收集和评价,软件质量和软件可 靠性的一些定性指标即能逐步确定下来。
2024/5/26
3
测试用例和场景的设计
任何工程化的产品都有两种测试方法: 一种方法是已知产品应该具有的功能,通过测试 检验每个功能是否都能正常使用; 另一种方法是已知产品内部工作过程,通过测试 检验产品内部动作是否按照产品规格说明的规 定正常进行。
2024/5/26
10
1.基本路径测试
基本路径测试的主要思想是,根据软件过程性描述 (详细设计或代码)中的控制流程确定复杂性度量, 然后用此度量定义基本路径集合,由此导出一组测
为了使用图论的知识和术语,引入流图(亦称程序图) 的概念,流图即把流程图中结构化构件改用一般有 向图的表示形式。
代表条件判断的结点称为谓词结点。
✓ nPosX 取1, nPosY取-1
1 - 2, 3 - 6 - 8 - 9 - 10 - 1 - 11
✓ nPosX 取1, nPosY取-3
2024/5/26
22
2. 控制结构测试
基本路径测试是控制结构测试技术的一种,下面介 绍其他形式的控制结构测试,它们比基本路径测试 法覆盖程度更大,进一步提高了白盒测试的质量。
2024/5/26
33
等价分类法
常用的一些规则:
(1) 如果能为输入条件指定一个范围,则可划分出一个有 效的等价类(输入值落在此范围内)和两个无效的等价 类(大于最大值的输入和小于最小值的输入);
(2) 如果能为输入条件指定一个特定值,则可类似地划分 出一个有效等价类和两个无效等价类;
(3) 如果能为输入条件指定一个集合,则可划分出一个有 效等价类(此集合)和一个无效等价类(此集合的补集);
最简单的条件测试是分支测试。
2024/5/26
24
分支和关系运算测试法BRO
能用少于2n次测试发现条件中大多数错误,采用该 方法的前提是条件中每个布尔变量和关系运算符至 多出现一次并无公共变量。
BRO方法引入条件约束的概念,含n个简单条件的 复合条件C之约束D表示为(D1,D2,…Dn),Di(0< i≤n)一般为某种符号,它指明简单条件Ci在C中出 现的约束。C的一次执行覆盖约束条件D指,C中 出现的每个简单条件Ci在这次执行中都满足D中对 应的约束Di。对于一个布尔表达式,出现约束或为 真(t)或为假(f);对于一个关系表达式,出现约束用 符号>、<或=表示。
BVA技术是对等价分类技术的补充,即在一个等价 类中不是任选一个元素作为此等价类的代表进行测 试,而是选择此等价类边界上的值。
此外,采用BVA技术导出测试用例时,不仅要考虑输 入条件,还要考虑输出的状态。
2024/5/26
35
边界值分析法
采用BVA技术设计测试用例与等价分类法有许多 相似之处:
2024/5/26
23
条件测试法
条件测试主要考虑程序中的条件判断,以期发现条 件判断内部的错误和程序中其他一些错误。
程序中“条件”分为简单条件和复合条件。简单条 件为一个布尔变量或一个关系表达式(可能前缀逻 辑非),复合条件由简单条件通过逻辑运算符(OR、 AND、NOT)和括号连接而成。
因此条件中可能出现的错误类型包括:布尔运算符 错、布尔变量错、括号错、关系运算符错和算术表 达式错。
28
2024/5/26
29
循环测试(续)
对于最多为n次的简单循环,应作下列测试: 1)完全跳过循环; 2)仅循环一次; 3)循环两次; 4)循环m次,m<n; 5)分别循环(n-1)次,n次,n+1次。
2024/5/26
30
循环测试(续)
对于嵌套循环若生搬硬套简单循环的测试策略。可能使测 试次数成几何级数增长,减少测试次数的具体措施包括:
第八章 软件测试
软件测试的目标
软件测试是为了发现程序中的错误。 软件测试的过程亦是程序运行的过程。 程序运行需要数据,为测试设计的数据称测试用例。 设计测试用例的原则自然是尽可能暴露错误。 软件测试是一个找错过程。 测试只能找出程序中的错误,而不能证明程序无错。
2024/5/26
1
测试阶段的信息流程
2024/5/26
6
例:
最多有1014个 逻辑路径,假设 每运行一个测 试用例平均花 费1毫秒,总共 需3170年才 能穷尽所有测 试。
2024/5/26
7
软件测试的步骤
软件工程的开发过程和测试过程应该是对应的。第 一章图1.3采用V型图表示开发—测试的对应关系, 也可以采用图14.3所示的螺旋型图表示。
1) 如果输入条件指定了由值a,b括起来的一个范围,那么值 a、值b和紧挨a、b左右的值应分别作为测试用例;
2) 如果输入条件指定为一组数,那么这组数中最大者、最 小者和次大、次小者应作为测试用例;
3) 应用规则1)、2)于输出条件。例如,假设某程序输出为 一张温度压力对照表,此时应设计测试用例正好产生表项
1)从最内层循环开始测试,此时所有外层循环都取最小值, 内层循环按简单循环的测试策略测试;
2)由里向外,回退到上一层循环测试,这层循环的所有外层 循环仍取最小值,由该层循环嵌套的那些循环取一些典型 值。
3)继续向外扩展,
对于并置循环分两种情况,若两个循环完全独立,采用简单循 环的测试策略,反之,若第一循环的计数器用作第二循环的初 值,即两循环不独立,
2024/5/26
25
数据流测试法
数据流测试法是根据程序中变量定义和引用的位置 选择测试路径。
为说明数据流测试法,假设程序中每个语句都被赋 与一个唯一的标号,并且每个函数都不修改其参数 和全局变量,对以S为标号的语句定义下面两个集合:
DEF(S)={|语句S中含X的定义}
USE(S)={X|语句S中含对X的引用}
2024/5/26
2
测试阶段的信息流程
输入流分软件配置和测试配置两项,软件配置由需 求说明书、设计说明书和源代码组成;测试配置中 包含测试计划、测试工具、测试用例和期望结果, 有时测试配置亦作为软件配置的一个组成部分。
测试人员根据上述输入信息测试程序并评价测试结 果,当测试结果与期望结果存在差异时,往往程序有 错。此时可采用排错技术定位错误并改正之。
2024/5/26
11
结构化构件在流图中的表示
2024/5/26
12
例:流程图
2024/5/26
13
例:对应的流图
2024/5/26
14
条件处理
若判断中含复合条件,则需增加谓词结点。如OR运 算的处理。
If a or b Then X Else Y End If
a X
b
X
Y
2024/5/26
一种简单的数据流测试策略即对每条DU链至少覆 盖一次,称为DU测试策略,它对于测试含嵌套IF语 句和多重循环语句的程序特别有效。
2024/5/26
27
循环测试
循环是大多数算法的基础,循环测试的目的是检查 循环结构的有效性。
循环分为简单循环、并列循环、嵌套循环和非结构 循环四类:
2024/5/26
2024/5/26
21
Step4 对每条基本路径设计测试用例
对于路径1 – 11
✓ nPosX 取-1, nPosY取任意值
1 - 2, 3 - 4, 5 - 10 - 1 - 11
✓ nPosX 取1, nPosY取1
对于路径1 - 2, 3 - 6 - 7 - 9 - 10 - 1 – 11
流图的Cyclomatic复 杂度正好是基本路径 的数目
V(G) = E – N + 2
✓ V(G) = 11 - 9 + 2 = 4
1
程序流图
11 2,3
6
4,5
7
8
9 10
2024/5/26
20
Step3 确定基本路径的集合
1 - 11 1 - 2, 3 - 4, 5 - 10 - 1 - 11 1 - 2, 3 - 6 - 7 - 9 - 10 - 1 - 11 1 - 2, 3 - 6 - 8 - 9 - 10 - 1 - 11
当S为分支或循环语句时,DEF集合为空,USE集合 由S所含条件确定。如果从语句S到语句S’存在一 条路径并且在S’中不存在X的再定义,则称在S中定 义的X在S’处活跃。
2024/5/26
26
数据流测试法(续)
定义变量X的定义—引用链(DU链)为[X,S,S’], 其中S,S’为标号,X∈DEF(S)∩USE(S’)且S中定 义的X在S’
2024/5/26
5
白盒测试
白盒测试法密切关注处理细节,针对程序的每一条 逻辑路径都要分别设计测试用例,检查分枝和循环 的情况。
穷举测试不可取,一般选用少量“最有效”,即最有 可能暴露错误的路径进行测试。
测试的目的是为了找出错误,所以无论采用黑盒法 还是白盒法,设计测试用例时总是期望用尽可能少 的时间和代价发现尽可能多的错误。
此外,对自动测试工具也作一些简单介绍。
2024/5/26
9
白盒测试
白盒测试应该根据程序的控制结构设计测试用例, 原则是: ①保证模块中每一独立的路径至少执行一次; ②保证所有判断的每一分枝至少执行一次; ③保证每一循环都在边界条件和一般条件下至少各 执行一次; ④验证所有内部数据结构的有效性。
15
基本路径测试的思想
基本路径 至少引入一个新语句或者新判断的程序 执行通道
测试用例的设计方法 流程图 ==> 流图 ==> 基本路径 ==> 测试用例
2024/5/26
16
Step1 根据程序的逻辑结构画出流程图
void Func(int nPosX, int nPosY) { while (nPosX > 0) { int nSum = nPosX + nPosY; if (nSum > 1) { nPosX--; nPosY--; } else { if (nSum < -1) nPosX -= 2; else nPosX -= 4; } } // end of while
(4) 如果能为输入条件指定一个布尔量,则可划分出一个 有效等价类(此布尔量)和一个无效布尔量(此布尔量 之非)。
2024/5/26
34
2. 边界值分析法
经验表明,大多数错误都发生在输入的边界值上。 为此,专门引入边界值分析(Boundary Value Analysis)技术,旨在选择测试用例,强迫程序在边
2024/5/26
32
1. 等价分类法
等价分类法的主要思想是把程序的输入数据集合按 输入条件划分为若干个等价类,每一等价类相对于 输入条件表示为一组有效或无效的输入,然后为每 一等价类设计一个测试用例,这样即可大大减小测 试的次数又不丢失发现错误的机会。
因此等价分类法的关键是根据输入数据的类型和程 序的功能说明划分等价类。
2024/5/26
17
Step1 根据程序的逻辑结构画出流程图
11
1
2 模块流程图
3
6
4
7
8
5
9
10
2024/5/26
18
Step2 根据流程图画出流图
11
1
2 模块流程图
3
6
4
7
8
5
9
10
2024/5/26
1
程序流图
11 2,3
6
4,5
7
8
9 10
19
Step3 确定基本路径的集合
基本路径
非结构化的循环需按结构化程序设计的思想首先将程序结 构化然后再进行测试。
2024/5/26
31
黑盒测试
黑盒测试旨在测试软件是否满足功能要求,它主要 诊断下列几类错误:
(1)不正确或遗漏的功能; (2)界面错误; (3)数据结构或外部数据库访问错误; (4)性能错误; (5)
值得指出的是,黑盒测试法与白盒测试法不能互相 替代,相反两者应互为补充,在测试的不同阶段为发 现不同类型的错误而灵活选用。
每旋转一圈,测试的范围加大一次:
螺旋中心对应单元测试,它测试源程序的每一模块; 下一步是综合测试,它测试软件总体结构; 再下一步是确认(验收)测试,测试软件是否满足需求; 最后一步是系统测试,检查软件与系统中其他元素是否协
调。
2024/5/26
8
软件测试技术
本节主要讨论当用白盒或黑盒测试法测试软件时, 如何设计测试用例才能达到测试的目的。
前者称为黑盒测试,后者称为白盒测试。 测试用例和测试场景将根据这两种测试方法的特性
制定。
2024/5/26
4
黑盒测试
黑盒测试完全不考虑程序的内部结构和处理过程。 测试仅在程序界面上进行。
设计测试用例旨在说明: ①软件的功能是否可操作; ②程序能否适当地接收输入数据并产生正确的输出 结果或在可能的场景中事件驱动的效果是否尽 如人意; ③能否保持外部信息(如数据文件)的完整性。
通过对测试结果的收集和评价,软件质量和软件可 靠性的一些定性指标即能逐步确定下来。
2024/5/26
3
测试用例和场景的设计
任何工程化的产品都有两种测试方法: 一种方法是已知产品应该具有的功能,通过测试 检验每个功能是否都能正常使用; 另一种方法是已知产品内部工作过程,通过测试 检验产品内部动作是否按照产品规格说明的规 定正常进行。
2024/5/26
10
1.基本路径测试
基本路径测试的主要思想是,根据软件过程性描述 (详细设计或代码)中的控制流程确定复杂性度量, 然后用此度量定义基本路径集合,由此导出一组测
为了使用图论的知识和术语,引入流图(亦称程序图) 的概念,流图即把流程图中结构化构件改用一般有 向图的表示形式。
代表条件判断的结点称为谓词结点。
✓ nPosX 取1, nPosY取-1
1 - 2, 3 - 6 - 8 - 9 - 10 - 1 - 11
✓ nPosX 取1, nPosY取-3
2024/5/26
22
2. 控制结构测试
基本路径测试是控制结构测试技术的一种,下面介 绍其他形式的控制结构测试,它们比基本路径测试 法覆盖程度更大,进一步提高了白盒测试的质量。
2024/5/26
33
等价分类法
常用的一些规则:
(1) 如果能为输入条件指定一个范围,则可划分出一个有 效的等价类(输入值落在此范围内)和两个无效的等价 类(大于最大值的输入和小于最小值的输入);
(2) 如果能为输入条件指定一个特定值,则可类似地划分 出一个有效等价类和两个无效等价类;
(3) 如果能为输入条件指定一个集合,则可划分出一个有 效等价类(此集合)和一个无效等价类(此集合的补集);
最简单的条件测试是分支测试。
2024/5/26
24
分支和关系运算测试法BRO
能用少于2n次测试发现条件中大多数错误,采用该 方法的前提是条件中每个布尔变量和关系运算符至 多出现一次并无公共变量。
BRO方法引入条件约束的概念,含n个简单条件的 复合条件C之约束D表示为(D1,D2,…Dn),Di(0< i≤n)一般为某种符号,它指明简单条件Ci在C中出 现的约束。C的一次执行覆盖约束条件D指,C中 出现的每个简单条件Ci在这次执行中都满足D中对 应的约束Di。对于一个布尔表达式,出现约束或为 真(t)或为假(f);对于一个关系表达式,出现约束用 符号>、<或=表示。
BVA技术是对等价分类技术的补充,即在一个等价 类中不是任选一个元素作为此等价类的代表进行测 试,而是选择此等价类边界上的值。
此外,采用BVA技术导出测试用例时,不仅要考虑输 入条件,还要考虑输出的状态。
2024/5/26
35
边界值分析法
采用BVA技术设计测试用例与等价分类法有许多 相似之处:
2024/5/26
23
条件测试法
条件测试主要考虑程序中的条件判断,以期发现条 件判断内部的错误和程序中其他一些错误。
程序中“条件”分为简单条件和复合条件。简单条 件为一个布尔变量或一个关系表达式(可能前缀逻 辑非),复合条件由简单条件通过逻辑运算符(OR、 AND、NOT)和括号连接而成。
因此条件中可能出现的错误类型包括:布尔运算符 错、布尔变量错、括号错、关系运算符错和算术表 达式错。
28
2024/5/26
29
循环测试(续)
对于最多为n次的简单循环,应作下列测试: 1)完全跳过循环; 2)仅循环一次; 3)循环两次; 4)循环m次,m<n; 5)分别循环(n-1)次,n次,n+1次。
2024/5/26
30
循环测试(续)
对于嵌套循环若生搬硬套简单循环的测试策略。可能使测 试次数成几何级数增长,减少测试次数的具体措施包括:
第八章 软件测试
软件测试的目标
软件测试是为了发现程序中的错误。 软件测试的过程亦是程序运行的过程。 程序运行需要数据,为测试设计的数据称测试用例。 设计测试用例的原则自然是尽可能暴露错误。 软件测试是一个找错过程。 测试只能找出程序中的错误,而不能证明程序无错。
2024/5/26
1
测试阶段的信息流程
2024/5/26
6
例:
最多有1014个 逻辑路径,假设 每运行一个测 试用例平均花 费1毫秒,总共 需3170年才 能穷尽所有测 试。
2024/5/26
7
软件测试的步骤
软件工程的开发过程和测试过程应该是对应的。第 一章图1.3采用V型图表示开发—测试的对应关系, 也可以采用图14.3所示的螺旋型图表示。
1) 如果输入条件指定了由值a,b括起来的一个范围,那么值 a、值b和紧挨a、b左右的值应分别作为测试用例;
2) 如果输入条件指定为一组数,那么这组数中最大者、最 小者和次大、次小者应作为测试用例;
3) 应用规则1)、2)于输出条件。例如,假设某程序输出为 一张温度压力对照表,此时应设计测试用例正好产生表项
1)从最内层循环开始测试,此时所有外层循环都取最小值, 内层循环按简单循环的测试策略测试;
2)由里向外,回退到上一层循环测试,这层循环的所有外层 循环仍取最小值,由该层循环嵌套的那些循环取一些典型 值。
3)继续向外扩展,
对于并置循环分两种情况,若两个循环完全独立,采用简单循 环的测试策略,反之,若第一循环的计数器用作第二循环的初 值,即两循环不独立,
2024/5/26
25
数据流测试法
数据流测试法是根据程序中变量定义和引用的位置 选择测试路径。
为说明数据流测试法,假设程序中每个语句都被赋 与一个唯一的标号,并且每个函数都不修改其参数 和全局变量,对以S为标号的语句定义下面两个集合:
DEF(S)={|语句S中含X的定义}
USE(S)={X|语句S中含对X的引用}
2024/5/26
2
测试阶段的信息流程
输入流分软件配置和测试配置两项,软件配置由需 求说明书、设计说明书和源代码组成;测试配置中 包含测试计划、测试工具、测试用例和期望结果, 有时测试配置亦作为软件配置的一个组成部分。
测试人员根据上述输入信息测试程序并评价测试结 果,当测试结果与期望结果存在差异时,往往程序有 错。此时可采用排错技术定位错误并改正之。
2024/5/26
11
结构化构件在流图中的表示
2024/5/26
12
例:流程图
2024/5/26
13
例:对应的流图
2024/5/26
14
条件处理
若判断中含复合条件,则需增加谓词结点。如OR运 算的处理。
If a or b Then X Else Y End If
a X
b
X
Y
2024/5/26
一种简单的数据流测试策略即对每条DU链至少覆 盖一次,称为DU测试策略,它对于测试含嵌套IF语 句和多重循环语句的程序特别有效。
2024/5/26
27
循环测试
循环是大多数算法的基础,循环测试的目的是检查 循环结构的有效性。
循环分为简单循环、并列循环、嵌套循环和非结构 循环四类:
2024/5/26
2024/5/26
21
Step4 对每条基本路径设计测试用例
对于路径1 – 11
✓ nPosX 取-1, nPosY取任意值
1 - 2, 3 - 4, 5 - 10 - 1 - 11
✓ nPosX 取1, nPosY取1
对于路径1 - 2, 3 - 6 - 7 - 9 - 10 - 1 – 11
流图的Cyclomatic复 杂度正好是基本路径 的数目
V(G) = E – N + 2
✓ V(G) = 11 - 9 + 2 = 4
1
程序流图
11 2,3
6
4,5
7
8
9 10
2024/5/26
20
Step3 确定基本路径的集合
1 - 11 1 - 2, 3 - 4, 5 - 10 - 1 - 11 1 - 2, 3 - 6 - 7 - 9 - 10 - 1 - 11 1 - 2, 3 - 6 - 8 - 9 - 10 - 1 - 11
当S为分支或循环语句时,DEF集合为空,USE集合 由S所含条件确定。如果从语句S到语句S’存在一 条路径并且在S’中不存在X的再定义,则称在S中定 义的X在S’处活跃。
2024/5/26
26
数据流测试法(续)
定义变量X的定义—引用链(DU链)为[X,S,S’], 其中S,S’为标号,X∈DEF(S)∩USE(S’)且S中定 义的X在S’
2024/5/26
5
白盒测试
白盒测试法密切关注处理细节,针对程序的每一条 逻辑路径都要分别设计测试用例,检查分枝和循环 的情况。
穷举测试不可取,一般选用少量“最有效”,即最有 可能暴露错误的路径进行测试。
测试的目的是为了找出错误,所以无论采用黑盒法 还是白盒法,设计测试用例时总是期望用尽可能少 的时间和代价发现尽可能多的错误。
此外,对自动测试工具也作一些简单介绍。
2024/5/26
9
白盒测试
白盒测试应该根据程序的控制结构设计测试用例, 原则是: ①保证模块中每一独立的路径至少执行一次; ②保证所有判断的每一分枝至少执行一次; ③保证每一循环都在边界条件和一般条件下至少各 执行一次; ④验证所有内部数据结构的有效性。
15
基本路径测试的思想
基本路径 至少引入一个新语句或者新判断的程序 执行通道
测试用例的设计方法 流程图 ==> 流图 ==> 基本路径 ==> 测试用例
2024/5/26
16
Step1 根据程序的逻辑结构画出流程图
void Func(int nPosX, int nPosY) { while (nPosX > 0) { int nSum = nPosX + nPosY; if (nSum > 1) { nPosX--; nPosY--; } else { if (nSum < -1) nPosX -= 2; else nPosX -= 4; } } // end of while
(4) 如果能为输入条件指定一个布尔量,则可划分出一个 有效等价类(此布尔量)和一个无效布尔量(此布尔量 之非)。
2024/5/26
34
2. 边界值分析法
经验表明,大多数错误都发生在输入的边界值上。 为此,专门引入边界值分析(Boundary Value Analysis)技术,旨在选择测试用例,强迫程序在边
2024/5/26
32
1. 等价分类法
等价分类法的主要思想是把程序的输入数据集合按 输入条件划分为若干个等价类,每一等价类相对于 输入条件表示为一组有效或无效的输入,然后为每 一等价类设计一个测试用例,这样即可大大减小测 试的次数又不丢失发现错误的机会。
因此等价分类法的关键是根据输入数据的类型和程 序的功能说明划分等价类。