协助状态机编译器

时间:2014-10-19 06:38:46

标签: java state-machine

我正在从事软件测试,特别是自动测试用例生成。在现有的测试用例中,我的重点是由事件序列组成的测试用例,例如_.event1.event2 ... eventx()

但是,事件可分为:敏感和不敏感。后者不会影响系统的状态,因此可以忽略;而前者会影响各州。无论如何,测试案例中的敏感事件可能导致国家爆炸,并且需要防止这种情况发生。因此,一些技术建议使用一个变量来呈现状态并将所有相似的状态组合在一起,例如在循环队列中使用len变量。相对而言,可以使用FSM等特定图纸来表示状态。

例如,循环队列的测试用例可能如下所示:

  1. 加(0)卸下摆臂()。添加(1).Front()
  2. 加(0)。新增(1)卸下摆臂()。前()
  3. 产生以下状态:

    len=1, rear=0, front=0 and dataQ[0]=0
    len=0, rear=0, front=1 and dataQ={0}
    len=1, rear=1, front=1 and dataQ[1]=1
    

    len=1, rear=0, front=0 and dataQ[0]=0
    len=2, rear=1, front=0 and dataQ[1]=1
    len=1, rear=1, front=1 and dataQ={1,0}
    

    可以看出,每次添加/删除都会产生新的状态。状态由4个变量组成:len,rear,front和dataQ。前三个变量是整数,而dataQ是整数数组。尽管如此,不同测试用例产生的状态可能相同,这会浪费精力和时间。因此,需要优化这些状态。提出了搜索技术,其中问题可以表示为搜索问题并且应用该技术。如果我们将Len视为一个州,那么我们将得到:len = 0; 0QSize。但是,这并不代表州,但它适合将州分为不同的群体。

    就状态表示而言,状态机/映射编译器(SMC)被建议作为一种建模机制,它采用状态机(即FSM)绘制并以任何首选语言生成代码。在SMC中,FSM以特定语法(状态---转换----下一状态)表示并保存在文件(.sm)中。此文件将由SMC编译以生成上下文类,该上下文类包括FSM中的状态,转换和操作的定义,但仍需要由另一个类触发。该类必须调用修改状态的转换。

    我们创建了该类并使用它们的转换实现了所有方法。但是,使用的FSM仅基于1个变量(即len)。此外,我们仍在寻找SMC结果,因为它们将成为任何搜索技术的输入。据推测,SMC生成的状态可以直接用于搜索技术,但这仍然值得怀疑。 请注意,我们需要你的帮助。

    此致

0 个答案:

没有答案