可视化测试流程图的代码实现
·68· 先要构造测试流程中可执行基本过程的集合。本研究采用深度优先搜索的算法,遍历所有单元,搜索其中的测试过程和循环过程,而条件过程的每个分支都要遍历。具体过程如图2所示。
图2 构造可执行基本过程的集合过程
2.2 主控制函数
主控制函数就是按照一定顺序执行测试流程中可执行基本过程的集合的过程。在可执行基本过程的集合中,根据每个可执行基本过程的惟一标识ID,按照次序依次执行基本过程的函数。主控制函数的执行过程如下:
(1)图元的ID设置为当前运行ID;
(2)以当前运行ID为参数调用OnSwitchFunc函数;
(3)将OnSwitchFunc过程返回值设置为当前运行ID;
(4)如果当前运行ID为结束或终止标志,则主控制函数结束;否则,返回(2)。
《测控技术》2005年第24卷第5期
其中,OnSwitchFunc(long Id) 函数以标识ID为参数,调用该ID对应的基本过程的函数。其格式如下:
{…
switch(Id) {
case 过程1:
调用过程1的函数,并返回集合中的下一基本过程的ID作为该函数的返回值 break;
case 过程2:
调用过程2的函数, 并返回集合中的下一基本过程的ID作为该函数的返回值 break;
… case 结束过程: 返回结束标志 break; } …}
2.3 基本过程生成的函数
每个基本过程都生成一个自己的执行函数,在这
个函数中除了根据此基本过程属性的要求执行相关的
测试步骤,还要将该基本过程后面的所有条件跳转单元的相关过程递归查询出来,并返回条件跳转单元的ID。具体的递归子过程如图3所示。 2.4 循环过程生成的函数
循环过程的函数代码包括从循环开始到循环结束之间的所有基本过程的执行函数的代码。查找循环过程中包含的基本过程集合是一个复杂的过程,具体过程如下:
(1)得到与循环图元连接的循环结束图元,并将该单元压入搜索堆栈;
(2)判断堆栈是否为空;若为空,则退出;否则到(3);
(3)弹出栈顶图元,并获取图元的所有输入路径; (4)判断是否遍历所有的路径,若已经遍历,回到(2);
(5)得到当前路径的输出端的图元;该图元如果是条件判断单元,则压入堆栈,并回到(4);否则查看该单元是否在集合中,若在集合中,回到(4);否则,查看该单元是否是循环结束单元,若是,获取与该结束单元连接的循环单元;否则,将该单元压入搜索堆栈中,并放入结果集合中,并返回到(4);
(6)判断该循环单元是否在结果集合中;若在,回到(4),否则,放入结果集合,压入搜索堆栈,并返回到(4)。
查找到循环过程中包含的基本过程集合后,可以