图形矩阵是一种数据结构,可以帮助开发用于自动化路径测试的工具。图形矩阵的属性是开发测试工具的基础,因此图形矩阵对于理解软件测试的概念和理论非常有用。
什么是图矩阵?
图矩阵是一个正方形矩阵,其大小表示控制流图中的节点数。如果您不知道什么是控制流程图,请阅读本文。矩阵中的每一行和每一列都标识一个节点,矩阵中的条目表示这些节点之间的边或链接。通常,节点用数字表示,边缘用字母表示。
让我们举个例子。
让我们将此控制流图转换为图矩阵。由于图具有4个节点,因此图矩阵的尺寸为4 X4。矩阵条目将按以下方式填充:
- (1,1)将填充’a’,因为从节点1到节点1存在一条边
- (1,2)将填充’b’,因为存在从节点1到节点2的边缘。重要的是要注意,(2,1)将不填充,因为边缘是单向的而不是双向的
- (1,3)将填充’c’,因为边缘c从节点1到节点3存在
- (2,4)将填充’d’,因为从节点2到节点4存在边
- (3,4)将填充’e’,因为从节点3到节点4存在边
形成的图形矩阵如下所示:
连接矩阵:
连接矩阵是用边权重定义的矩阵。以简单的形式,当控制流图的两个节点之间存在连接时,则边缘权重为1,否则为0。但是,通常不将0输入到矩阵单元中以降低复杂度。
例如,如果我们将上述控制流程图表示为连接矩阵,那么结果将是:
如我们所见,边缘的权重仅替换为1,之前保留为空的单元格保持原样,即表示0。
连接矩阵用于找到控制图的圈复杂度。
尽管还有其他三种方法可以找到圈复杂度,但是这种方法也能很好地工作。
以下是计算圈复杂度的步骤:
- 计算每行中1的数量,并将其写入行的末尾
- 从每一行的此计数中减去1(如果该行的计数为0,则忽略该行)
- 添加先前计算的每一行的计数
- 将此总数加1
- 步骤4中的最终总和是控制流程图的圈复杂度
让我们将这些步骤应用于上图以计算圈复杂度。
我们可以使用其他方法来验证此值是否具有圈复杂度:
方法1:
Cyclomatic complexity
= e - n + 2 * P
从这里开始
e = 5
n = 4
and, P = 1
因此,圈复杂度
= 5 - 4 + 2 * 1
= 3
方法2:
Cyclomatic complexity
= d + P
这里,
d = 2
and, P = 1
因此,圈复杂度
= 2 + 1
= 3
方法3:
Cyclomatic complexity
= number of regions in the graph
里
- 区域1:以边b,c,d和e为边界
- 区域2:以边a为边界(循环中)
- 区域3:图表外
因此,圈复杂度
= 1 + 1 + 1
= 3
可以看出,所有其他方法都给出相同的结果。方法1、2和3已在此处详细讨论。