浅介TTCN-3中语法特性对通信协

Author Xingzai Lv Date 2007-10-13

TTCN-3ETSI指定的一个强大的黑盒测试标准,其标准的内容包括核心语言,整体架构和与其他各个模块的接口。由于项目进展需要,上周我对TTCN-3进行了一些调研。由于时间又比较短,且缺乏计算机专业方面的知识,因此TTCN-3标准对我来说比较难以理解,想必计算机专业出身的人读通信协议的感受应该和我的感觉类似。以下尽我所能对TTCN-3语法中对通信协议的支持展开一些浅薄的讨论。以下蓝色粗体,如type,为TTCN-3中的关键字。

1. List & Range

TTCN-3中,定义一个类型的时候(如C中的typedef),不仅可以把内置类型定义为自己的类型,同时还可以给出该类型的取值范围,取值范围可以是一个List,也可以给定一个Range。比如:

type integer MyIntegerRange (0 .. 255);

type charstring MyStringList ("abcd", "rgy", "xyz");

上式中分别定义了一个新的整数类型MyIntegerRange, 其取值范围为0255定义了一个新的字符串类型MyStringList,其取值范围为"abcd", "rgy", "xyz"三个字符串之一。即使都是整数,但是取值范围不一致,也会被TTCN-3认为是不兼容的类型。

尽管很多语言都支持这个特性,但该功能不失实用。我们肯定还记得,在通信协议中,很多属性的取值都是属于一定范围的整数,浮点数,或者是一些离散的整数值。比如窗口的大小,FFT的点数,等等。以WiMAXARQ_BLOCK_SIZE为例,该值可取:16, 32, 64, 128, 256, 512, 1024。因此我们可做如下定义:

type integer WIARQBlockSizeType (16, 32, 64, 128, 256, 512, 1024);

WIARQBlockSizeTye arqBlockSize

我们无须担心代码里的这个arqBlockSize被赋上一个非法的值,也无须另外一个不同类型的整数被赋给了arqBlockSizeTTCN-3会自动为我们保证正确性。

2. Record & Set

RecordSet类似与C语言中的结构体,不同的是,Record中各个属性是有严格顺序关系,而set中各个属性则没有顺序的关系。更为强大的是,RecordSet都可以提供optional的属性,即下面的某个属性可以是无效的。如

type record MyRecordType

{

integer field1,

MyOtherRecordType field2 optional,

charstring field3

}

field2是一个可以忽略,即可以不在结构体中出现的属性。这是否让你想起了什么呢?是的,WiMAX中万恶的可有可无的TLV。利用set结构,和optional关键字,可以方便的从逻辑上简洁地描述这种灵活的结构,不再需要一大堆的present。一条空口消息无非包括固定的有序部分和可选的变化部分,一个record结构套上一个set结构即可以完美表达。

3. Template

TemplateTTCN-3提供的强大的功能,分为消息模板和函数模板。如果你不幸学过C++,可能会把这里的Template概念和C++中的Template概念搞混,事实上,二者是十分不同的东西。TTCN-3中的Template实际上是一个特定值的集合,你可以用Template来规定一组传输的数据,或是测试接收的值的集合是否与Template中的规定匹配。

由于Template比较复杂,在此不在举例说明,有兴趣的可以去参阅相关文档。我想说明的是,Template提供一个最有用的功能的,它使函数可以在传入某些参数的情况下才被调用,或者是从接收到的消息中过滤出符合特殊要求的消息。由于它是在底层语法级别上支持这一功能,Template可以和任何内置或自定义的类型联用,因而极大简化了程序。比如上一点中自定义的消息类型就可以和Template连用,构成消息模板。这样TTCN-3会自动检测消息是否和模板中指明的域是否匹配,并在匹配时才调用相关操作(是的,QL,这就是MASK)。对任何通信协议的一致性测试,这都是个极为重要的功能。

4Altsteps

Altsteps又是一个即为强大的功能。你可以将它等同与C中的switch-case语句,但Altsteps比后者强大得多,而且是动态的。有例如下:

alt {

[ ] L1.receive { // Boolean guard/expression

setverdict(pass);

}

[ ] L2.receive { // Boolean guard/expression

setverdict(inconc);

}

}

在进入alt语句块前,TTCN-3会进行一次Snapshot,“照”下当前系统内的状态,然后依据这个状态触发对应的alt branch。如上面的例子。如果port L2中有消息,可以被接收,就会运行第二条branch{}的语句。这东东用来写状态机是十分合适的,特别是配合Template,可以避免你设无穷多个状态变量。alt语句中,你可以如下写:

MyPort.call(MyProc:{ -, MyVar2}) { // in-line signature template for the call of MyProc

[] MyPort.getreply(MyProc:{?, ?}) { }

}

上面指出了我们调用了一个MyProcRPC,并且在MyPort这个Port等待他的答复。如果用C语言实现,我们很可能设置一个变量来记录我们发起过这个调用并在等待回应,并且检查收到的每一条消息,看他是否是来自MyProcReply;这样的调用一多,状态变量必然很多,难以避免地会出现一大堆层层嵌套的switch-case语句。而Altsteps可以将逻辑相关的语句有效地捏合在一起,有利于阅读和维护。

TTCN-3中还有好些好玩的东西,比如 anytyperun onwith等等关键字,对port的操作,及基于procedure的通信,都是很有意思的语法特性,限于体力,不做介绍。总之,TTCN-3语言本身是种比较抽象和高级的语言,屏蔽了很多琐碎的细节,coder可以集中注意在逻辑和协议本身。可惜的是,没有找到TTCN-3的开源实现,商业的TTCN-3可能会比较昂贵。由于TTCN-3比较复杂,比如以上特性,基本上都需要利用多线程和通信特性,系统可移植性也是个问题,也许用Java实现是一个比较好的选择。无论如何,对于复杂的分布式开发系统,要部署TTCN-3,其至少在接口方面的开源是必须的,而且需要很大一番努力将其整合进现有系统。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
TTCN3核心语言 原版 英文版 议测试分为一致性测试、互操作性测试、性能测试和鲁棒性测试。其一致性测试用于确定系统或者设备是否与标准规范一致,是互操作性测试和性能测试的基础,它的结果直接影响测试的效果。议的一致性测试是指在一定的网络环境下,利用一组测试序列,对被测实现(Implementation Under Test,IUT)进行黑盒测试;通过比较IUT的输出与议标准所规定的预期输出的异同,来判断待测设备是否与议所描述的相一致。 目前国际上较流行的议测试语言为TTCN-3(Testing and Test Control Notation version 3),它是由欧洲电信联盟ETSI发布的标准测试语言。其典型应用是议测试、服务测试、模块测试等 TTCN-3测试系统可被看作是相互作用的实体集合,每个实体完成系统某一特定功能,这些实体管理着测试执行、解释或执行编译的TTCN-3代码、实现与IUT的正确通信、执行外部函数、处理时钟等操作。TTCN-3测试系统由测试管理(Test Management,TM)、TTCN-3执行器(TTCN-3 Executable,TE),TTCN-3日志管理器(TTCN-3 Logging,TL),组件管理(Component Handing,CH),编解码器(Coding and Decoding,CD),系统适配器(System Adapter,SA)和平台适配器(Platform Adapter,PA)6部分组成。TTCN-3控制接口TCI定义了TE与TM、CD、CH和TL之间的交互;TTCN-3运行时接口TRI定义了TE与SA和PA之间的交互。其TRI接口TE与SA之间的接口称为TRI通信子接口,TE与PA之间的接口称为TRI平台子接口,TCI接口TE与CD之间的接口称TCI-CD接口。 系统适配器SA负责与IUT的通信细节,即抽象服务原语(Abstract Service Primitive,ASP)和议数据单元PDU(Protocol Data Unit,PDU)的发送和接收。编解码器CD负责TTCN-3数据和ASP/PDU之间的双向转换。组件管理器CH记录测试组件的分布情况,实现测试组件间的通信转发。测试执行器TE是整个系统的核心,它实现TTCN-3语言的操作语义,借助其它部分提供的功能,完成TTCN-3模块的执行,例如当需要发送ASP/PDU时,测试执行器首先利用编解码的编码功能,把TTCN-3数据转换为ASP/PDU,然后交给系统适配器SA,完成发送功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值