本部分包含的测试设计技术
测试设计和实现过程的六个活动
1、识别特征集(测什么?)
2、导出测试条件(如何测?)
3、导出测试覆盖项(要测多少?)
4、导出测试用例(测试动作和数据?)
5、汇集测试集(测试集合?)
6、导出测试规程(测试步骤?)
分类树
分类树 (classification tree)分类树方法使用测试项模型将测试项的输入进行划分,并且用分类树的方式进行图形化表示。
例如:下图是一个简单的是否举行某个活动的决策树(分类树):
我们可以通过左面的决策树进行预测,当天气晴朗,交通畅通时,我们预测该活动很可能要举办;当天下小雨交通拥挤时,我们预测活动很可能被取消。
决策树方法包括以下几个步骤:
(1)收集数据(可以使用任何方法收集)。
(2)准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。
(3)选取划分算法:根据数据的特点,选取合适的划分算法
(4)构造决策树:使用选取的划分算法构造树形的决策模型
(5)测试特征集:发现程序中的错误
组合测试方法
组合测试方法 combinatorial testing method (GB/T 38639-2020)
组合测试是基于多参数组合进行软件测试的一种方法。当多参数(每个参数都有大量离散值)必须相互作用的情况下,这种技术可以显著减少所需的测试用例数量,而不会影响功能覆盖率。
以覆盖表作为测试用例集,能够以少量的测试用例有效地检测由软件各参数之间的交互作用所触发的失效,如何得到尽可能小规模的覆盖表是组合测试的关键也是极具挑战性的问题。
组合强度:
①单一选择
②基本选择
③成对组合
④ 全组合
①单一选择
单一选择(或1-对)测试中,测试覆盖项应该是键值对集合的成员,每个参数值至少包含在集合中一次。导出的测试用例应实现一个或者多个未被先前测试用例包含的键值对。
②基本选择
基本选择测试中,测试覆盖项应为每个输入参数的键值对的集合。其中,除了一个参数之外的所有其他参数都被设为"基础"值,而最后的参数被设为其它有效值之一。
③成对组合
成对测试中,测试覆盖项应该是唯一的不同的测试项参数的键值对组合。本技术不是覆盖所有参数的可能组合(如完全组合测试中的要求) ,而是覆盖总测试集中所有选定值的可能组合。
导出测试用例的步骤:
a)选择当前测试用例包含的测试覆盖项,其中键值对组合中,每一对都覆盖了一个没有被先前测试用例包含的参数取值对;
b)测试用例中其他的输入变量取任意有效值;
c)通过将输入应用到测试依据中来确定测试用例的预期结果;
d)重复步骤a到c直到键值对组合中所有唯一对都被实现。
④ 全组合
在完全组合测试中,测试覆盖项是所有唯一的键值对的集合,使得每个参数在此集盒中至少包含一次。其中每个测试用例实现一个唯一的键值对组合。
下面是导出测试用例的步骤:
a)选择没有被测试用例覆盖的测试覆盖项,使其包含在当前测试用例中;
b)通过将输人应里到测试依据中来确定测试用倒的预期结果;
c)重复步骤a和b直到达到要求的测试覆盖率水平。
状态转移测试
状态转移测试使用测试项的状态模型,模型包含测试项可能的状态、状态间的转移,导致转移的实际和转移可能导致的动作。
- 状态转换测试法应用于以下模式:被测应用拥有多个状态(state) 各个状态之间的转换(transition) 由事件 (event) 来触发,各个状态之间的转换还可能导致一些动作(action)的产生。
- 在该种模式下被测应用应该包括状态、转换、事件、动作及它们之间的联系。其中各个状态之间是正交(disjoint)的。各个状态是可以被明确识别的,而且其数量是有限的。事件用于触发各状态之问的转换。而事件的触发将由组件的输入产生。作为结果,状态的转换可能导致一些动作的产生,从而可能进一步产生输出。
场景测试
数据流测试
数据流测试:在数据流测试中,应该导出测试项的模型,该模型识别测试项的控制流子路径,在该子路径中,给定变量的每个定义与该变量的后续使用相关,并且后续使用没有重新定义变量的值.
“定义"可能给变量赋了新的值(有时定义将变量保持与之前相同的值)。
“使用"是变量出现,不一定是赋新的值;
- 谓词使用是指使用变量来确定判定条件(谓词)的结果,例如while-loop,if-then-else等。
- 计算使用是指一个变量作为任何变量定义或输出的计算输入。
在数据流测试中,测试项中变量的每个定义-使用对都是测试条件。
数据流测试有五种形式
①全定义测试
②全谓词使用测试
③全计算使用测试
④全使用测试
⑤全定义-使用路径测试
①全定义测试
全定义测试:测试覆盖项是从每个变量定义到该定义的某种使用(谓词使用或计算使用)的控制流子路径。每个子路径称为"定义-使用"路径。“全定义"测试要求所有变量定义都覆盖从定义到其谓词使用或者计算使用的至少一个定义到任意类型使用的子路径(与特定变量有关)。
②全谓词使用测试
全谓词使用测试:测试覆盖项是从每个变量定义到该定义的每个谓词使用的控制流子路径。“全谓词使用”测试要求所有相关变量定义都覆盖从定义到其每个谓词使用的至少一个自由定义子路径(与特定变量有关)。
③全计算使用测试
全计算使用测试:测试覆盖项是从每个变量定义到该定义的每个计算使用的控制流子路径。“全计算使用”测试要求所有相关变量定义都覆盖从定义到其每个计算使用的至少一个自由定义子路径(与特定变量有关)。
④全使用测试
全使用测试:测试覆盖项是从变量定义到该定义每次使用(包括计算使用和谓词使用)的控制流子路径。“全使用”测试要求包括从每个变量定义到它的每个使用的所有子路径(不包括变量的中间定义)。
⑤全定义-使用路径测试
全定义-使用路径测试:测试覆盖项是从每个变量定义到该定义的每次使用(包括就计算使用和谓词使用)的控制流子路径。“全定义-使用路径”测试要求包括从每个变量定义到它的每个使用的所有子路径(不包括变量的中间定义)。