| 标准编号 | GB/T 38634.4-2020 (GB/T38634.4-2020) | | 中文名称 | 系统与软件工程 软件测试 第4部分:测试技术 | | 英文名称 | Systems and software engineering - Software testing - Part 4: Test techniques | | 行业 | 国家标准 (推荐) | | 中标分类 | L77 | | 国际标准分类 | 35.080 | | 字数估计 | 126,183 | | 发布日期 | 2020-04-28 | | 实施日期 | 2020-11-01 | | 引用标准 | GB/T 38634.1; GB/T 38634.2; GB/T 38634.3 | | 采用标准 | (ISO/IEC/IEEE 29119-4-2015, MOD | | 发布机构 | 国家市场监督管理总局、中国国家标准化管理委员会 | | 范围 | GB/T 38634的本部分定义了在GB/T 38634.2测试设计和实现过程中使用的测试设计技术。本部分适用于但不限于测试人员、测试经理、开发人员和项目经理,特别是那些负责管理和实施软件测试的人员。 |
GB/T 38634.4-2020
Systems and software engineering -- Software testing -- Part 4: Test techniques
ICS 35.080
L77
中华人民共和国国家标准
系统与软件工程 软件测试
第4部分:测试技术
2020-04-28发布
2020-11-01实施
国 家 市 场 监 督 管 理 总 局
国 家 标 准 化 管 理 委 员 会 发 布
目次
前言 Ⅲ
引言 Ⅳ
1 范围 1
2 符合性 1
3 规范性引用文件 1
4 术语和定义 2
5 测试设计技术 4
5.1 概述 4
5.2 基于规格说明的测试设计技术 6
5.3 基于结构的测试设计技术 14
5.4 基于经验的测试设计技术 19
6 测试覆盖率测量 19
6.1 概述 19
6.2 基于规格说明的测试设计技术的测试测量 20
6.3 基于结构的测试设计技术的测试测量 22
6.4 基于经验的测试设计技术的测试测量 24
附录A(资料性附录) 测试质量特性 25
附录B(资料性附录) 基于规格说明的测试设计技术的应用指南和示例 35
附录C(资料性附录) 基于结构的测试设计技术的应用指南和示例 89
附录D(资料性附录) 基于经验的测试设计技术的应用指南和示例 111
附录E(资料性附录) 可交换的测试设计技术的应用指南和示例 114
附录F(资料性附录) 测试设计技术覆盖有效性 117
附录G(资料性附录) 测试设计技术对照 119
参考文献 120
系统与软件工程 软件测试
第4部分:测试技术
1 范围
GB/T 38634的本部分定义了在GB/T 38634.2测试设计和实现过程中使用的测试设计技术。
本部分适用于但不限于测试人员、测试经理、开发人员和项目经理,特别是那些负责管理和实施软
件测试的人员。
2 符合性
2.1 预期用途
本部分的规范性要求包含在第5章和第6章中。由于特定项目或组织可能不需要使用本部分定义
的所有技术,因此,本部分的实施通常涉及选择适合于项目或组织的一组技术。组织或个人可以通过两
种方式声明符合本部分的规定:完全符合或剪裁符合。组织或个人应声明是否要求完全或剪裁符合本部分。
2.2 完全符合性
通过证明满足选定的第5章中技术集(不为空)和/或相应的第6章中测试覆盖率测量方法的所有
要求(即描述为“应”的语句),则可声称完全符合。
示例:组织可以选择仅符合一种技术,例如边界值分析。在这种情况下,组织只需要提供证据证明他们已满足该技
术的要求,可以声称符合本部分。
2.3 剪裁符合性
通过证明已经满足来自所选技术集(不为空)和/或相应的测试覆盖率测量方法的所选择要求的子
集来实现剪裁符合。在剪裁情况下,如不完全遵循第5章中定义的技术或第6章中定义的测量规范性
要求,应当提供理由(无论是直接剪裁或者是通过参考剪裁)。所有剪裁决策都应记录其理由,包括考虑
任何适用的风险。剪裁应由利益相关方商定。
3 规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文
件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 38634.1 系统与软件工程 软件测试 第1部分:概念和定义(GB/T 38634.1-2020,
ISO/IEC/IEEE29119-1:2013,MOD)
GB/T 38634.2 系统与软件工程 软件测试 第2部分:测试过程(GB/T 38634.2-2020,
ISO/IEC/IEEE29119-2:2013,MOD)
GB/T 38634.3 系统与软件工程 软件测试 第3部分:测试文档(GB/T 38634.3-2020,
ISO/IEC/IEEE29119-3:2013,MOD)
4 术语和定义
下列术语和定义适用于本文件。
4.1
巴科斯范式
一种形式化的元语言。用于以文本格式定义一种语言的语法。
4.2
基本选择
见基本值(4.3)。
4.3
基本值
在“基本选择测试”中输入参数的取值,通常依据参数的代表值或典型值进行选择。也称为基本
选择。
4.4
计算使用 c-use
见计算数据使用(4.5)。
4.5
计算数据使用
在任何类型语句中,变量值的使用。
4.6
条件 condition
不包含布尔运算符的布尔表达式。
示例:“A< B”是条件,“AandB”不是条件。
4.7
控制流
在测试项运行期间所执行操作的序列。
4.8
控制流子路径
测试项中的可执行语句的序列。
4.9
数据定义
变量赋值语句。也被称为变量定义。
4.10
数据定义计算使用对
数据定义和后续计算的数据使用,其中数据使用是使用数据定义中定义的值。
4.11
数据定义谓词使用对
数据定义和后续谓词的数据使用,其中数据使用是使用数据定义中定义的值。
4.12
数据定义使用对
数据定义和后续的数据使用,其中数据使用是使用数据定义中定义的值。
4.13
数据使用
访问变量值的可执行语句。
4.14
判定结果
判定式的结果,可用于决定控制流选择方向。
4.15
判定规则
在判定表测试和因果图中产生特定结果的条件(也称为原因)和动作(也称为结果)的组合。
4.16
定义使用对
数据定义和后续谓词的数据使用或计算的数据使用,其中数据使用是使用数据定义中定义的值。
4.17
定义使用路径
从变量定义到谓词使用(p-use)或计算使用(c-use)的控制流子路径。
4.18
入口点
测试项中测试项开始执行的点。
注:入口点是测试项的可执行语句,可由外部进程选择作为通过测试项的一个或多个路径的起点。它通常是测试
项中的第一条可执行语句。
4.19
可执行语句
在编译后将转换为目标代码的语句,该目标代码将在测试项运行时以程序化方式执行,并可能对程
序数据执行操作。
4.20
出口点
测试项的最后一条执行的语句。
注:出口点是通过测试项路径的终点,是测试项中的可执行语句。它或终止测试项,或将控制权返回到外部进程。
这通常是测试项中的最后一条可执行语句。
4.21
谓词使用
见谓词数据使用(4.25)。
4.22
键值对
测试项参数与赋给该参数的值的组合。在组合测试设计技术中,用作测试条件和测试覆盖项。
4.23
路径
测试项中可执行语句的序列。
4.24
谓词
计算结果为“真”或“假”的逻辑表达式,通常用于引导代码中的执行路径。
4.25
谓词数据使用
与判定语句中谓词部分的判定结果相关联的“数据使用”。
4.26
子路径
一个较大路径的一部分。
4.27
测试模型
在测试用例设计过程中使用的测试项的表示。
4.28
变量定义
见数据定义(4.9)。
5 测试设计技术
5.1 概述
本部分定义了基于规格说明的测试设计技术(5.2)、基于结构的测试设计技术(5.3)和基于经验的
测试设计技术(5.4)。在基于规格说明的测试中,测试依据(如需求,规格说明,模型或用户需求)是设计
测试用例的首要信息来源。在基于结构的测试中,测试项的结构(如源代码或模型结构)是设计测试用
例的首要信息来源。在基于经验的测试中,测试人员的知识和经验是设计测试用例的首要信息来源。
对于基于规格说明的测试、基于结构的测试和基于经验的测试,测试依据用于生成预期结果。上述测试
设计技术是互补的,组合使用这些技术会使测试更加有效。
虽然在本部分中介绍的技术被划分为基于规格说明、基于结构和基于经验三类,但在实际使用中这
些技术可以互换使用(如分支测试可以设计测试用例来测试一个互联网系统图形用户界面的逻辑路
径)。附录E中对此进行了举例。此外,尽管每种技术都是独立于所有其他技术定义的,但实际上它们
可以与其他技术结合使用。
示例1:通过等价类划分导出的测试覆盖项可用于场景测试导出的测试用例的输入参数。
本部分使用基于规格说明的测试和基于结构的测试的术语,这种技术分类也称为“黑盒测试”和“白
盒测试”。术语“黑盒测试”和“白盒测试”指的是测试项内部结构的可见性。对于黑盒测试,测试项的内
部结构是不可见的;对于白盒测试,测试项的内部结构是可见的。当一个测试设计技术同时基于测试项
的规格说明和结构时,该测试设计技术被称为“灰盒测试”。
本部分定义了GB/T 38634.2(参见引言)中所述的通用测试设计和实现过程中步骤TD2(导出测试
条件)、TD3(导出测试覆盖项)和TD4(导出测试用例)是如何应用于各测试设计技术的。本部分不提
供使用这些技术的特定周境定义,即不说明每个技术在所有情况下使用的方法。本部分的用户可以参
考附录B、附录C、附录D和附录E,以获得如何应用这些技术的详细示例。附录F对基于结构的测试
设计技术之间的覆盖关系给出了说明。
本部分定义的技术如图2所示,这组技术并不是全面的,部分测试人员和研究人员使用的技术未包
含在本部分中。附录G给出了本部分定义的技术与GB/T 15532-2008中测试设计技术的映射关系。
示例3:等价类划分和边界值分析都基于等价类。
在每种技术的导出测试用例步骤(TD4)中,创建的测试用例可以是“有效的”(即测试项的输入被当
作正确而接受)或“无效”(即测试项至少有一个输入被当作不正确而拒绝,理想情况下给出适当的错误
提示)。在某些技术中,例如等价类划分和边界值分析,通常使用“一对一”方法导出无效测试用例,因为
它通过确保每个测试用例仅包含一个无效输入值来避免故障屏蔽,同时有效测试通常使用“最小化”方
法导出用例,因此减少了覆盖有效测试覆盖项所需的测试用例数量(见5.2.1.3和5.2.3.3)。
注:无效用例也被称为“负面测试用例”。
尽管本部分中定义的技术各自在单独的条目中进行了描述(看上去是互相排斥的),实际上它们可
以结合使用。
示例4:可以使用边界值分析来选择测试输入值,之后使用成对测试来根据测试输入值设计测试用例。可以使用等
价类划分来选择分类树的分类和所分的类,然后根据所分的类使用单一选择测试(技术)来构造测试用例。
本部分提出的技术也可以与附录A中提供的测试类型结合使用。例如,等价类划分可用于易用性
测试中识别用户组(测试条件)和代表性用户(测试覆盖项)。
本章给出了技术的规范性定义。第6章给出了每种技术的相应规范性覆盖测量。附录B、附录C、
附录D和附录E给出了每种技术的资料性案例。尽管本部分给出每种技术的示例都是人工操作的,但
在实践中,可采用自动化操作来支持某些类型的设计和执行(例如,语句覆盖分析器可用于支持基于结
构的测试)。附录A给出了如何将本部分中定义的测试设计技术应用于测试GB/T 25000.10-2016中
定义的质量特性的示例。
5.2 基于规格说明的测试设计技术
5.2.1 等价类划分
5.2.1.1 导出测试条件 (TD2)
等价类划分使用测试项模型将测试项输入和输出划分为等价类(也称为“分区”),其中每个等价类
都应当作为一个测试条件。这些等价类应该从测试依据导出,对于每个分区中的所有值,都可以被测试
项类似地处理(即等价类中的值是“等同的”)。有效的输入输出以及无效的输入输出均可导出等价类
划分。
示例:对于期望小写字母字符作为(有效)输入的测试项,可以派生的无效输入等价类包括包含整数、实数、大写字
母字符、符号和控制字符的等价类,具体取决于测试期间所需的严谨程度。
注1:对于输出等价类,基于测试项规格说明中描述的过程导出相应的输入分区。然后从输入分区中选择测试
输入。
注2:无效的输出等价类通常对应于未明确指定的任何输出。由于未指定,通常会根据各测试人员的主观判断得到
等价类。当应用基于经验的技术(如错误猜测)时,也可能出现这种主观形式的测试设计。
注3:域分析法通常归类为等价类划分和边界值分析的结合。
5.2.1.2 导出测试覆盖项 (TD3)
每个等价类应该是一个测试覆盖项(即在等价类划分中,测试条件和测试覆盖项是同样的等价类)。
5.2.1.3 导出测试用例 (TD4)
导出的测试用例应该实现每个测试覆盖项(即等价类)。下面是导出测试用例的步骤:
a) 确定选择测试用例所实现测试覆盖项的组合方法,下面是两种常见的方法:
1) 一对一,导出的每个测试用例用于覆盖一个特定的等价类;
2) 最小化,其中等价类由测试用例覆盖,使得导出的最小测试用例数至少覆盖所有等价类
一次。
注:在5.2.5(组合测试设计技术)中给出了选择测试用例实现测试覆盖项的其他方法。
b) 采用步骤a)中的方法选择包含在当前测试用例中的测试覆盖项。
c) 确定为执行测试用例所涵盖的测试覆盖项的输入值,以及测试用例所需的任何其他输入变量
的任意有效值。
d) 将输入应用于测试依据来确定测试用例的预期结果。
e) 重复步骤b)~d)直到达到要求的测试覆盖率。
5.2.2 分类树
5.2.2.1 导出测试条件 (TD2)
分类树方法使用测试项模型将测试项的输入进行划分,并且用分类树的方式进行图形化表示。测
试项的输入被分为若干个“分类”,每个划分由若干个独立(不重叠)的“类”和子类组成,同时分类集是完
整的(被建模测试项的所有输入域都被识别并包括在所有分类内)。每个分类应是一个测试条件。根据
测试的严格程度,通过分解分类得到的“类”可能会进一步分为“子类”。根据要求的测试覆盖程度,导出
的划分和类可能同时包括有效和无效的输入数据。将分类、类和子类之间的层次关系塑造成一棵树,测
试项的输入域作为树的根节点,分类作为分支节点,类或者子类作为叶节点。
注:分类树方法中的分区过程类似于等价类划分。其关键的区别在于,在分类树方法中,划分(分类和类别)必须完
全不相交,而在等价类划分中,它们可能会重叠,具体取决于技术的应用方式。此外,分类树方法还包括分类树
的设计,其提供测试条件的视觉展示。
5.2.2.2 导出测试覆盖项 (TD3)
测试覆盖项应采用所选的组合方法由组合分类来导出。
示例:将组合分类导出测试覆盖项的两个示例:
---最小化,导出最小数量的测试覆盖项,至少覆盖所有分类一次。
---最大化,每个可能的分类组合至少由一个测试覆盖项覆盖。
注1:5.2.5(组合测试设计技术)描述了通过测试用例选择测试覆盖项组合的其他方法。
注2:测试覆盖项通常由组合表来表示(见B.2.2.5的图B.5)。
注3:分类树方法的最早的出版物中,采用了术语“最小值”和“最大值”来代替“最小化”和“最大化”。
5.2.2.3 导出测试用例 (TD4)
导出的测试用例应该实现每个测试覆盖项。下面是导出测试用例的步骤:
a) 在步骤TD3产生的分类组合的基础上,为当前测试用例选择一个组合,要求该组合没有被测
试用例覆盖;
b) 确定每个类别中尚未赋值的输入值;
c) 通过将输入应用到测试依据中来确定测试用例的预期结果;
d) 重复步骤a)~c),直到达到要求的测试覆盖率水平。
5.2.3 边界值分析
5.2.3.1 导出测试条件 (TD2)
边界值分析是通过对测试项模型边界值的分析,将测试项的输入和输出划分为具有可识别边界的
多个有序集和子集(分区和子分区),其中每个边界是测试条件。边界应来自测试依据。
示例:一个分区的定义是从1~10的整数,该分区有两个边界,下边界是1,上边界是10,这些是测试条件。
注:对于输出边界,可基于测试项规格说明中描述的过程导出相应的输入分区。然后从输入分区中选择测试输入。
5.2.3.2 导出测试覆盖项 (TD3)
可选择以下两种方法的一种来导出测试覆盖项:
---二值边界测试;
---三值边界测试。
对于二值边界测试,应为每个边界(测试条件)导出两个测试覆盖项,这些边界对应于边界上的值和
该边界外一定增量距离的等价类。该增量距离应定义为所考虑的数据类型的最小有效值。
对于三值边界测试,应为每个边界(测试条件)导出三个测试覆盖项,这些边界对应于边界上的值和
该边界每一侧有一定增量距离的等价类。该增量距离应定义为所考虑的数据类型的最小有效值。
注1:某些分区在测试依据上只能识别出一个边界。例如,数据分区“年龄 >=70岁”有一个下边界但没有明显的
上边界。在某些情况中,实际实现中强加的边界可以作为边界值,比如输入域可接受的最大值(此类决策需进
行记录;例如,记录在测试规格说明文档中)。
注2:二值边界测试在大多数情况下是充分的;但是,在某些情况下可能需要进行三值边界值测试(例如,测试人员
和开发人员在严格测试确认测试项中,变量的边界没有错误发生时)。
注3:在进行二值边界或三值边界测试时,连续分区(分区共享边界)将导致重复的测试覆盖项。在这种情况下,典
型的做法是仅执行一次这些重复值。有关重复边界的示例,见B.2.3.4.3。
5.2.3.3 导出测试用例 (TD4)
导出的测试用例应实现每个测试覆盖项。下面是导出测试用例的步骤:
a) 确定选择测试用例所实现测试覆盖项的组合方法,有两种常见的方法:
1) 一对一,每个测试用例实现一个指定的边界值;
2) 最小化,导出最小数量的测试用例以覆盖所有边界值至少一次。
注1:在最小化边界值分析中,每个测试用例可以覆盖多个测试覆盖项。
注2:5.2.5(组合测试设计技术)描述了通过测试用例选择测试覆盖项组合的其他方法。
b) 采用步骤a)中的方法选择当前测试用例包含的测试覆盖项。
c) 步骤b)中测试用例没有选择的其他输入变量取任意有效值。
d) 通过将输入应用到测试依据中来确定测试用例的预期结果。
e) 重复步骤b)~d),直到达到要求的测试覆盖率水平。
5.2.4 语法测试
5.2.4.1 导出测试条件 (TD2)
语法测试使用测试项输入形式化的语法作为测试设计的依据。语法模型表示为多个规则,其中每
个规则根据语法中的元素“序列”、元素“迭代”或元素“之间的选择”来定义输入参数的形式。语法可以
以文本或图形的形式表示。语法测试中的测试条件应为测试项输入的全部或部分模型。
示例1:巴科斯范式是一种形式化元语言,以文本形式定义一个测试项的语法。
示例2:抽象语法树可以图形化地表示形式化语法。
5.2.4.2 导出测试覆盖项 (TD3)
在语法测试中,基于两个目标导出测试覆盖项:正面测试,导出的测试覆盖项以各种方式覆盖有效
语法;负面测试,导出的测试覆盖项以各种方式故意违反规则语法。正面测试的测试覆盖项应是已定义
语法的“选项”,而负面测试的测试覆盖项应是已定义语法的“变异”。
以下指导原则可以用于导出“选项”(在合适的地方可以使用替代的指导原则):
---每当语法强制选择时,就为该选择的每个备选方案导出“选项”。
示例1:对于输入变量“颜色=蓝色|红色|绿色”(|表示“或”布尔运算符),则导出三个选项 “蓝色”“红色”和“绿色”
作为测试覆盖项。
---每当语法强制执行迭代时,为此迭代导出至少两个“选项”;一个包含了最小重复次数,另一个
则大于最小重复次数。
示例2:输入变量“字母=[A–Z|a–z]+”(“+”表示“一个或多个”),则导出两个选项“一个字母”和“多个字母”
作为测试覆盖项。
---每当迭代被要求具有最大重复次数时,为此迭代导出至少两个“选项”;一个具有最大重复次
数,另一个则超过最大重复次数。
示例3:输入变量“字母=[A–Z|a–z]100”(“100”表示一个字母最多选择100次),至少生成两个选项“100个字
母”和“少于100个字母”作为测试覆盖项。
下面的指导原则可以用于生成“变异”(在合适的地方可以使用替代的指导原则):
---对于任何输入,可以改变已定义的语法用以导出无效输入(“变异”......
|