技术开发 频道

基于RFT的测试脚本自动修复技术

2 GUI空间依赖关系的引入

  在同一GUI界面的控件之间或不同界面的控件之间,都有可能存在一些相互关联,相互依赖的关系,称为GUI控件依赖关系。依赖关系在具体表现形式为:一个控件的执行是另一控件执行的结果或者导致了另一控件的执行。例如,本来菜单项是不可操作的,对界面上某一个GUI控件操作后,激活了菜单项。

  控件之间的关联关系是通过用户和控件的交互或控件之间的消息而激发的。而想要从GUI软件界面中直接获得控件之间的依赖关系是不实际的,并且很难保证正确性和完整性。因此,在实现时往往需要根据系统的需求和软件设计说明书,人工进行调整。为了方便确定控件之间的关联关系,根据各个控件的类型特点,大致可把控件分为下面两类:

  • 行为控件 如界面上的菜单,按钮等控件,用户与之交互会触发某些事件。
  • 信息控件 如文本框,编辑框等控件,它们可以接受用户的输入数据或根据某些控件条件输出数据。

  一般来说,行为控件的执行和一个或多个信息控件相依赖,信息控件为行为控件的执行提供输入或输出数据。

2.1 事件依赖关系图

  事件依赖关系序列图可以表示控件之间的依赖关系。它由有限个(e1,e2...en)事件序列组成,每一个节点都表示一个对象控件对应的事件,有向边则表示了程序执行时界面控件之间的执行时序和之间的依赖关系。

  事件依赖关系序列图其实就是以图形符号的方式形式化的来表示界面控件之间的依赖关系的有向图。其中用来表示一个事件,其属性包括对象元素名称,输入格式,输入参数,前驱顶点,后继顶点等;有向边可用“”表示,表示系统中控件执行的时序和事件路径;依赖关系可用“”表示,表示同一界面事件之间的依赖关系;用“”表示事件e1到事件en省略了若干事件。关联图中如果一个顶点没有前驱顶点,则叫做起点;如果一个顶点没有后继顶点,则叫终点。一个完整的事件依赖关系图,必须能够从起点走到终点,表明了该事件序列是合法的,可达的。

  下图所示为一个简单的事件依赖关系序列图。其中e1为起点,en为终点,e2事件制约着e3事件,e3事件依赖着e2事件。


图4. 一个简单的事件依赖关系序列图

  在事件依赖关系序列图中,依赖关系是事件序列能否正常运行的关键。如果能保证在有依赖关系的事件ei出现之前,其依赖事件ej已经出现,这样就可以保证ei的正确运行。通过依赖事件序列生成算法,可以找出ei的所有依赖事件ej,并将ej写入到的ei',ei'为对象i的默认操作,该操作包含了对象i的所有依赖事件。如图5所示用ei'保证了在调用对象i之前,所有依赖事件已经出现。对于ei其依赖事件有两类来源:

  • 父节点所有子节点都依赖其父节点,只有父节点的对象处于活动状态,子节点的事件才能被调用。
  • 事先指定好的依赖节点测试人员往往需要根据系统的需求和软件设计说明书,人工进行调整,在对象树中将控件A所依赖的控件节点信息,写入到该控件A的依赖节点列表中。


图5. 依赖事件关系图

  设集合I保存测试对象Oi的所有依赖节点,依赖事件生成算法的步骤如下:

  算法输入:对象树状信息文件

  算法输出:生成有依赖关系对象的依赖事件

  步骤1:输入对象树状信息文件;

  步骤2:遍历对象树中所有节点;

  步骤3:从对象集合中找到对象Oi,并将其标识为已访问,其父节点为Oj,其依赖节点为Ok,I=I∪{Oj,Ok};

  步骤4:访问集合I,如果集合为空,则转入步骤9;

  步骤5:依次访问集合I中的对象,并重复步骤3;

  步骤6:当集合I不再变化时,则找到对象Oi所有依赖节点;

  步骤7:访问集合I中对象,获得层级码,和该对象的默认事件;

  步骤8:将默认事件按照层级码的方式组织起来,生成ei';

  步骤9:如果对象树中仍有未访问节点,清空集合I,转到步骤3;

  步骤10:至此,遍历结束,生成所有有依赖关系对象的依赖事件ej',算法结束。

0
相关文章