基于代数规约的Web服务测试数据生成技术(4)
时间:2022-08-07 11:08 来源:毕业论文 作者:毕业论文 点击:次
从作用上来看,代数规约中的操作分为生成子、构造子、转换子和观察子四种操作类型。在语法形式上,构造子和转换子完全相同。它们只在语义上有区别,即构造子可以在范式中出现,而转换子不在任何范式中出现。 2。2 SOFIA语言 SOFIA 是基于上述代数结构定义的一种代数规约语言,本节只对 SOFIA 语言进行简要的介绍,完整的SOFIA介绍读者可以参考文献[27]。 SOFIA语言由一组规约单元够成,而每个规约单元则由基调单元和公理单元两个部分组成,基调单元定义了操作名、输入数据类型和返回值的类型,公理单元则定义了条件等式和变量声明模块。 条件等式的最基本形式为, 如StackService 中 s。isEmpty =True就是一个最基本的等式, s。isEmpty = True, if s。length=0 是一个条件等式。StackService服务的功能是操作整型栈, 并且只可以存在一个服务实例,用户通过在服务请求者和服务提供者传输消息来完成对整型栈的操作。因此,每一个服务请求都由一个操作来表示,该请求不仅可以改变服务的中间状态,并且要求服务提供者返回一个消息给服务请求者。使用SOFIA描述该服务的代数规约如下,本文以该规约为例介绍。 相对于其他代数规约语言,SOFIA语言中规定每个规约单元定义一个主类子,主类子表示某个软件实体,例如, StackService就是上述规约的主类子。每个规约单元对应描述的软件实体可能会与其他规约单元相关或由其他软件实体构成,例如,对StackService来说, 它主要使用 Integer、 Bool以及ComplexType三个规约单元,其中前两者是SOFIA语言中基本类子, ComplexType是用户自己定义的复杂类子类型,表示服务发布者向服务需求者返回的消息。与其他代数规约语言类似, SOFIA语言将操作子分为以下三类: 1)常操作子,使用关键字Const声明,表示主类子的构造操作;文献综述 2)可观察操作子或属性操作子, 使用关键字Attribute声明,表示获取主类子的属性操作; 3)转换操作子, 使用关键字Operation声明,表示改变主类子状态的操作。 Spec Stack; uses Integer,Bool,ComplexType; Const nil; Attr isEmpty:Bool; length: Integer; top: ComplexType; Operation push(Stack,ComplexType): Stack; pop(Stack):Stack; replace(Stack,ComplexType): Stack; Axiom nil。isEmpty = True; nil。length = 0; nil。id = NULL; For all s : Stack: that s。isEmpty = True, if s。length = 0; s;pop。length = s。length-1, if s。length>0; End For all s : Stack, x: ComplexType that s;push(x)。isEmpty = False; s;push(x)。top = x; s;push(x)。length = s。length+1; End For all s : Stack, x : ComplexType that s;replace(x)。top = x, if s。length>0; End End
3 基于树编码的遗传算法 测试数值是为了测试程序的某项功能而输入的一组数据,运行程序,从而检测程序的功能是否符合预期的结果。测试数据的生成是软件测试过程的核心环节,而好的测试数据不仅能丰富测试的多样性,保证测试的完整性,还会提高测试效率。一般而言,好的测试数据是降低测试费用、提高测试效率的有效方法。 基于代数规约的Web服务测试数据生成主要是指为每个待测公理生成一个测试数据集,该测试数据集由每个局部变量所对应的输入构成。但是已有的测试数据生成方法测试消耗高且效率低下。为了提高Web服务测试数据的生成效率,本章介绍一个基于树编码的遗传算法,主要从个体表示、遗传算子、适应值函数和终止条件等方面介绍该算法。 (责任编辑:qin) |