一旦我们将状态模型转换成计算机能理解的状态表,计算机可以为我们做些什么呢?我们该如何使用我们有关应用程序行为的那些信息呢?
计算机能够应用状态表来生成测试序列以测试应用。你将在下面的例子中看到,可根据这些测试序列的新颖性、有效性或它们的全面性来选择它们。这种测试生成是应用你对系统的理解的一种强有力的方式――这就是模型驱动测试的内容。
状态模型上的随机路线
生成测试操作的一个简单的方法就是从应用当前状态可用的操作中任意选择一个。例如,如果你在0个文件开始状态,你能够选择下面两种操作中的任意一个:
1. 反选取(让你仍停留在0个文件状态)
2. 创建(让你停留在1个被选文件状态)
按照这种方式随机选取操作,你能生成许多非常规的序列(就象测试员3的随机“猴子测试程序”那样),而最后你将能执行模型中的所有操作。图2显示了一个典型的随机路线。注意这个随机路线在一轮中执行了四次同样的操作(反选取),但是却让剩下的两个其它的操作没有执行到。这就是随机测试的实际情况。
#FormatImgID_1# |
图2 一个随机路线
执 行 的 操 作 | 结 束 状 态 | |
1 | 创 建 | 1 个 被 选 文 件 |
2 | 反 选 取 | 1 个 未 选 文 件 |
3 | 反 选 取 | 1 个 被 选 文 件 |
4 | 反 选 取 | 1 个 未 选 文 件 |
5 | 反 选 取 | 1 个 被 选 文 件 |
状态模型上一个有效的路线:中国邮递员路线
当模型很大时要到达所有测试操作按照随机路线是很低效的。我们怎样才能有效的测试模型中的每种操作呢?
一个邮递员在递送信件时会遇到同样的问题。设想模型中的每个操作是递送邮件必须经过的街道――模型中每个状态是邮递员改变方向时的十字路口。就像邮递员必须走过每一条街道来递送邮件一样,我们也必须测试模型中的每种操作。在这两种情况下,我们都想将所需的路线长度减小到最短。
一个叫做管梅谷的中国数学家为这个问题提出了一个优秀的解决方案,这就是中国邮递员算法(见图3)。管梅谷的方法生成一条该状态模型的路线,该路线用最少的步数执行到模型中所有的操作。下面列出的测试序列只用5步就覆盖了模型中的5种操作。对于一个你要快速测试的、大的应用程序而言这种效率是很有用的。
#FormatImgID_2# |
图3 一个中国邮递员路线
执 行 的 操 作 | 结 束 状 态 | |
1 | 反 选 取 | 0 个 文 件 |
2 | 创 建 | 1 个 被 选 文 件 |
3 | 反 选 取 | 1 个 未 选 文 件 |
4 | 反 选 取 | 1 个 被 选 文 件 |
5 | 删 除 | 0 个 文 件 |
一个更有效的路线:状态改变的中国邮递员路线
文章来源于领测软件测试网 https://www.ltesting.net/