paint-brush
组合测试设计技术分析经过@shad0wpuppet
23,444 讀數
23,444 讀數

组合测试设计技术分析

经过 Konstantin Sakhchinskiy7m2024/01/24
Read on Terminal Reader
Read this story w/o Javascript

太長; 讀書

决策表测试:使用表格记录需求并描述应用程序功能。方便业务逻辑表示和创建测试用例。 状态转换测试:使用图表或表格可视化系统状态和转换。对于记录需求和系统结构很有用。 正交数组:利用数组有效地探索变量对的所有值组合。 AllPairs 算法:专注于测试每对变量的所有值组合,减少测试所有可能组合的需要。
featured image - 组合测试设计技术分析
Konstantin Sakhchinskiy HackerNoon profile picture
0-item

我将省略在这里讨论众所周知且广泛使用的测试设计技术,例如等价类、边界值测试和成对测试,我将讨论其他不太常见的技术。您还可以阅读我关于组合测试设计技术问题的文章。


决策表测试

决策表是记录需求和描述应用程序功能的出色工具。这些表非常方便地描述应用程序的业务逻辑,除此之外,它们还可以作为创建测试用例的坚实基础。如果测试的应用程序缺乏适当的文档,那么这是使用决策表的一个很好的理由。以紧凑而简单的形式呈现需求使得创建测试用例变得非常容易。


方法:

决策表根据系统状态的实体(属性/条件)描述应用程序的逻辑。每个决策表应该只描述系统的一种状态。


规则1

规则2

……

规则N

实体





物业1





……





物业M





行动





动作1





……





行动P





实体(Property)从1到M代表系统的各种属性;它们作为可输入系统的输入数据显示在表中。从 1 到 P 的操作是可以通过指定的实体组合发生的操作。根据实体所有输入数据的组合,操作会采取必要的值。每个规则为导致执行特定操作的所有属性定义一组唯一的输入数据。


在组成决策表之后,通常可以简化该表,例如,通过删除一些或全部不可能的场景。然后,该表可以转换为测试用例。


状态转换测试

状态转换测试与决策表测试一样,是记录需求以及描述系统结构和设计的宝贵工具。与描述特定系统状态的决策表测试不同,状态转换测试描述系统的这些状态如何改变。图表定义了应用程序运行期间发生的所有事件以及应用程序如何响应这些事件。


方法:

该技术有两种类型的视觉表示:

  1. 状态转换图
  2. 状态转换表

状态转换图

作为一个例子,让我们考虑一下机票的预订。它的运作大致如下:最初,客户向航空公司提供预订信息——出发地点、目的地、出发日期和时间。航空公司员工充当客户和机票预订系统之间的接口,使用客户提供的信息来创建预订。此后,客户的预订将处于“已完成”状态。此外,创建预留后,系统会启动计时器。当定时器超时,且所预订的机票尚未付款时,系统将取消该机票的预订。


圆圈代表机票预订系统的状态,即“Made”状态。箭头表示到“Made”状态的转换。箭头下方的描述(“get_info”)是源自系统外部的事件。箭头下方描述中的命令(“/”之后)表示系统响应事件而执行某些操作 - 在本例中为启动计时器。黑色圆圈表示图表的起点/入口点。


如果定时器没有超时,并且我们已经支付了预订的门票,则系统进入“已支付”状态。这由标记为“payMoney”的箭头以及从“Made”状态到“Paid”状态的转换来描述。


  • 状态(在图中表示为圆圈) 这是系统等待一个或多个事件的状态。该状态会记住迄今为止接收到的输入数据,并指示系统将如何对接收到的事件做出反应。事件可以触发操作和/或导致状态发生变化。
  • 转换(在图中表示为箭头) 这表示由于事件而发生的从一种状态到另一种状态的转换。
  • 事件(表示为箭头上方的矩形) 事件是导致应用程序更改其状态的事件。事件可以来自应用程序外部,例如通过应用程序的用户界面。同时,应用程序本身可以生成事件,例如“定时器到期”之类的事件。当事件发生时,应用程序可能会保持相同状态、更改状态或执行操作。事件可以有参数;例如,“pay_money”事件可以具有诸如“现金”、“支票”、“借记卡”或“信用卡”等参数。
  • 操作(在转换上方标签中的“/”之后表示) 这是由状态更改发起的操作。它可以是“打印票据”、“在屏幕上显示”等操作。通常,操作创建用作系统输出数据的输出。动作发生在转换期间;国家本身是被动的。
  • 入口点在图表上显示为黑点。
  • 退出点在图表上显示为“靶心”符号。

状态转换表

状态转换表由四列组成:当前状态、事件、操作和下一状态。

状态转换表的优点是它们定义了所有可能的状态转换场景,而不仅仅是正确的场景。因此,状态转换表通常会导致发现未定义、未记录的状态转换组合,最好在编写代码之前识别这些组合。


  • 状态转换图可以轻松地用于创建测试用例。有必要创建一组测试用例,该组测试用例应至少覆盖一次所有转换。
  • 从状态转换表中,生成测试用例也相对简单。需要遍历所有有效组合(如果时间允许或风险不禁止,也可以遍历所有无效组合)。

正交数组

值“1”和“2”对存在多少种组合? {1,1}、{1,2}、{2,1} 和 {2,2}。正交数组是具有特殊属性的二维数组 - 在数组的任意两列中,都存在这些列中值的所有组合。也就是说,如果您从正交数组中取出任意两列,其中值只能是“1”或“2”,您将找到这些列的以下行 - {1,1}、{1,2}、{ 2,1} 和 {2,2}。

作为示例,考虑具有三个输入参数的系统,每个参数都是二进制的(即,取值“1”或“2”)。

变量1

变量2

变量3

1

1

1

1

2

2

1

1

3

1

2

1

4

1

1

2

5

2

2

1

6

1

2

2

7

2

1

2

8

2

2

2

正交数组表示为 - L_4(2^3),其中 L_4 表示正交数组有四行,(2^3) 表示数组有三列,值可以是“1”或“2” ”。

变量1

变量2

变量3

1

1

1

1

2

1

2

2

3

2

1

2

4

2

2

1

L_4,其中 4 是行数

2^3,其中 2 是最大值 (== 2, 3, …, N),3 是列数


正交数组 - 是具有以下属性的二维数组:选择数组的任意两列,您将找到这些列中值的所有组合。

使用正交数组:

  1. 识别变量(输入数据的数量)。有必要选择输入数据、逻辑上可以存在的值的任何组合。
  2. 确定每个变量可以取的值的数量。当确定值的数量时,应该已经应用其他测试设计技术来减少值的数量(例如,边界值、等价类和任何其他)。
  3. 确定一个正交数组,其中每个变量都有一列(正交数组的列具有与变量一样多的值选项)。
  4. 将测试任务投影到正交阵列上。
  5. 编写测试用例。

全对算法

AllPairs 算法的本质是不需要测试所有变量的所有值组合。相反,它侧重于测试每对变量的所有值组合。



作为 QA 专业人员,了解这些细微差别很重要。虽然在某些情况下只是理论上的,但了解组合测试设计技术的复杂性使 QA 专业人员能够有效地测试应用程序的复杂业务逻辑,并向用户提供高质量的软件。