利用TTCN进行协议测试的一种方法

 摘要SDL和TTCN开发工具广泛地应用在协议开发中,可以利用SDL和TTCN的协仿真功能在WINDOWS操作系统中方便地进行协议栈软件的调试,从而改变了协议软件只能在目标板上才能调试运行的困难,因而,大大提高了协议栈开发的进度。

    但是在使用过程中,发现TTCN提供的数据类型以及数据类型之间的运算是很有限的。从工作出发提出一种利用TTCN进行高效的测试方法,在实际开发过程中得到很好的证实。

    1、概述

    在介绍利用TTCN(TreeandTabularCombined Notation)进行软件测试之前,先来介绍一下利用SDL(Specification and Description language)进行软件开发的过程。SDL是CCITT推荐的规范描述语言。经过ITU-T(International Telecommunication Union)的发展和标准化,定义在兰皮书Z.100建议中。SDL与其它一些相关技术如Z.120建议——消息序列图(MSC:Message Sequence Charts)和Z.105建议——抽象语法符号(ASN.1:Abstract Syntax Notation One)一起形成一个完整的描述语言。

    根据通信协议的描述,利用SDL可以完整的描述出通信软件系统,SDL开发工具可以将SDL描述的系统直接生成可使用C源代码,也可以生成用于测试的C源代码。生成的测试C源代码可以在TelelogicalTauAB公司提供的SIMulator(SDL提供的仿真平台)下运行。Simulator和TTCN配合使用可以方便的测试出SDL设计的正确性,并将测试结果反馈到SDL描述。TTCN的输出结果可以是MSC形式,便于对测试结果的分析。开发流程如图1所示。由于SDL描述转换成的测试C源代码和目标C源代码有很好的一致性,保证测试源代码的正确性也就保证了目标C源代码的正确性。本文主要介绍的是TTCN和SDL协仿真的一种特殊用法。首先还是大概介绍一下TTCN和SDL工具,TTCN(树表结合表示法),是由ISO(InternationalStandardization Organization)和ITU定义在ISO/IEC 9646-3中的一个规范测试语言,它是ISO/IEC 9646的第3部分标准,用于OSI(Open System Interconnection)一致性测试集的测试表示法。

    图1  利用SDL开发软件模型

    TTCN树表结合表示法,顾名思义,就是采用以树和表格为表现形式的测试表示法,其中表格主要用于数据类型、原语、协议观察点、约束等,而树则用于描述测试集、测试例、测试步。TTCN是一种独立于协议、测试方法和测试设备的抽象语言,因此它被广泛地应用在通信协议测试中。根据ISO/IEC9646的定义,TTCN需要满足以下几项需求:第一点:测试系统能够定义和构造发送和接收被测试实体(IUT)的抽象服务原语(ASP)。第二点:能够定义和构造嵌入在ASP中的协议数据单元(PDU)。第三点:在指定控制和观察点(PCO)上,能够规定ASP的发送或接收顺序,能够构造测试例。TTCN的测试模型如图2所示。

    图2  TTCN的测试模型

    由图2可以看出,TTCN的测试采用黑盒测试法,它把IUT整个看作一个测试实体来考虑,但可以根据测试者的测试目的,通过选择IUT与测试环境的接口来进行测试,以达到测试和验证IUT的目的。TTCN虽然采用黑盒测试方法进行测试,但通过与SDL的联合使用(协仿真),可以生成消息序列流图(MSC),通过观察IUT内部和IUT与环境(测试系统)之间的消息序列和数据流,从而达到验证SDL描述正确性的目的。

    2、TTCN存在的局限性

    从上面描述可以推出,一个完整的测试例需要完成ASP、PDU接口的定义和测试数据的编写。其中ASP和PDU的接口定义可以使用SDL工具的TTCN-LINK(利用SDL的功能,可以将SDL描述的数据结构直接转换到TTCN中使用)功能直接转换得到,但是对于测试数据,则需要测试人员根据测试协议手工编写,所以一个测试用例必须设计一套测试数据。在制作测试数据过程中,不得不考虑下面的问题。

    首先是TTCN的数据运算能力,在TTCN协仿真中,TTCN收到SDL发送的数据,经过一定处理后送回到SDL中去,SDL输出的数据和TTCN发送到SDL的数据存在一定的关系。SDL发送出来的信号内容是多变的,并且TTCN只能是根据接收到SDL发送来的数据,经过特定的运算再将运算结果回送到SDL中,但是有一个问题就是TTCN对数据的计算能力是有限的,数据类型也是有限的,大大限制了TTCN的使用。例如在CM(连接管理)业务的多实例测试中,不同实例的TI值是不相同的,并且终端发送到网络的TI值和网络回送的该业务的TI有一一的对应关系。根据协议TS24.008,使用4个比特来表示TI值,响应端回应消息的TI值,必须是发送端TI值的最高比特取反,否则协议栈无法识辨是同一个业务过程,但是在TTCN中就没有比特取反运算,也没有4比特的数据类型定义。

    其次是TTCN数据处理类型的限制,在ASP接口中,存在某些特殊的数据类型定义,TTCN是无法处理的。例如对数据指针的操作,TTCN只能简单的将数据指针转换成无符号32比特的整型,显然不能满足某些协议测试的要求。在进行数据业务的TTCN测试过程中,为了数据传输的效率,在各层之间仅仅只需要传输数据块的指针即可,不需要每次移动内存中的数据块,但是TTCN无法实现指针功能,TTCN无法将测试数据发送到SDL系统,也无法分析处理来自SDL的数据。

    最后就是对进行大量测试的问题,在TTCN进行测试时,一个测试例需要一套测试数据,一套测试数据只能测试一种情况,设计测试数据是一个很大的工作量。特别对于覆盖性测试,TTCN根本是无法完成的。在TD-SCDMA系统的高层协议栈中,对于MM和GMM层,不同的情况组合就是一个独立的测试例,仅仅使用手工编写测试数据的方法覆盖所有的情况几乎是不可能的。USIM中保存的注册状态、网络操作模式、终端支持的模式、MMI要求的注册类型以及在注册过程中网络不同编码的响应的等等都影响到MM层的流程,同时还需要考虑GMM层对MM层的影响。如果把所有的问题进行排列组合,测试例的数目将是一个天文数字,所以在实际的开发过程中,仅仅单靠人工编写测试数据是不现实的。

    为了解决覆盖测试问题,TelelogicTauAB公司提供了Validator(SDL的验证工具)工具,似乎可以解决这个问题,但是在实际的应用中,对于简单的系统,Validator是可以完成,但是对应复杂的TD-SCDMA协议栈系统,Validator工具显得无能为力,由于系统的复杂性,Validator工具无法完成代码的覆盖性检查。所以利用TTCN进行测试时,怎样进行遍历性测试是一个无法解决的问题。

    由于TTCN测试工具存在的上述种种不足。在进行TD-SCDMA系统的终端的高层软件测试过程中,促使我们不得不考虑其改进的方法。

    3、TTCN使用方法的改进

    TTCN测试工具存在许多问题,但是在解决协议栈的测试过程中起到了不可替换的作用。从实际的应用出发,本文将提供一种可以解决上述问题的办法。

    根据图2TTCN的测试模型,测试结果是以MSC图的形式来表现,MSC图可以包括了PCO接口的信号名称以及该信号的内容,问题的关键在MSC图中还可以表示出IUT内部各个模块之间的信号流程及这些信号的具体内容,这就可以将TTCN中不能完成的功能放到SDL中来完成。由于SDL提供了嵌入C代码的功能,所以利用C代码可以完成各种各样的数据类型处理。这种方法,在TD-SCDMA系统的分组数据域的测试中得到广泛的应用,效果很好。

    为了更好地理解上面的描述,将使用图3中的例子加以详细说明。在该例子中,只有一个Block_A模块需要测试,这个模块有一个输入和输出的信号,即sig_A和sig_B。如果这两个信号中没有包括TTCN无法定义的数据类型,那么测试的MSC图应该如图4所示。即TTCN向Block_A模块发送sig_A信号,则Block_A模块将处理sig_A后以sig_B信号的形式发送回TTCN,TTCN根据SDL反馈回来的信号的内容,判定Block_A模块设计是否正确。

    图3  SDL描述结构图

    图4  TTCN枋真的MSC

    如果在信号sig_A和sig_B中含有数据指针的话,TTCN是无法定义的,TTCN无法将一个内存区中的数据一个个进行分析,TTCN也无法将一个没有分配的内存区(TTCN没有分配内存的功能)的数据指针逐一填写,然后在发送回SDL系统中,所以这种情况,TTCN是无法测试的。但是SDL提供了很强的C源代码嵌入功能,充分利用这个功能,所有的问题都会迎刃而解。

    首先将图3中的SDL重新设计成图5形式,在原来SDL系统图的基础上增加两个模块Test_A和Test_B模块,这样TTCN测试口从CH_A和CH_B移动到CH_TA和CH_TB。接口信号在Test_A和Test_B模块进行一次转换,将CH_A和CH_B中TTCN不能处理的信号、数据类型以及不便于TTCN测试用例编写的部分改成CH_TA和CH_TB的形式。例如可以将模块之间接口信号中使用到的指针转化成数组或是数据结构,方便TTCN的处理;可以将8bit数据类型转换成16bit的整型等。由于SDL中可以直接嵌入C源代码的使用,使得Test_A和Tesc_B模块可以对信号sig_A和sig_B作任何处理,如果需要,Test_A和Test_B的可以将处理后的信号直接反送回Block_A模块,这样可以避免测试数据只能手工编写,用C源代码完成测试数据的分析和构造,大大简化了TTCN测试数据的编写,为覆盖性测试提供了有效的方法。

    图5  SDL测试模式结构

    对于改进以后的SDL系统图的测试结果分析和原来的SDL测试结果的分析也是完全一样的,图6所示的情况,实际中对Process_A模块的测试,接口信号有sig_A和sig_B信号,其他信号sig_TA和sig_TB是由TTCN处理和检查,在sig_A和sig_B中不能识辨的数据类型,转化成sig_TA和sig_TB再分析,这就解决了上面描述中TTCN不能使用的情况。在实际的TD-SCDMA的高层信令分组数据业务域的测试中,广泛的使用这种方法并得到很好的效果。

    图6  修改以后的TTCN仿真MSC

    4、结束语

    这种方法虽然很好,在开发TD-SCDMA系统中也得到推广使用,但也不是适合任何的开发流程。首先,利用SDL工具设计的系统,特别是接口的定义是利用C语言来完成的,由于C语言的数据类型特别丰富,不是所有的C语言的数据类型都可以转换成TTCN的数据类型。需要一个转换模块将TTCN不能识别的数据类型转换成TTCN可以识辨的数据类型。如果接口信号完全由SDL定义,那么TTCN必定可以识辨,也就没有必要使用这种方法。其次,SDL有一定的能力分析数据,但是其方便程度远远不如C语言,在使用时,如何更好的将C源代码和SDL混合使用是一个关键的问题。只有这样解决这个问题,才能发挥C语言的编程功能。最后,就是SDL工具的正规用法是将一个完整的SDL图的代码生成两套代码,一套用于TTCN测试,另外一套用于实际应用,如图1的说明描述。而改进以后的SDL系统图如图5,增加了两个模块,在实际的应用中不需要的,并且和其他部分的接口也不是CH_TA和CH_TB,所以不能使用SDL生成的C源代码。

    庆幸的是,在TD-SCDMA系统的高层协议栈开发过程中,最大程度的使用了SDL和TTCN的优点,同时也没有放弃C语言在数据处理中的灵活的特点,所有的接口信号都使用C语言定义,信号的处理也是利用C语言来完成,大大方便了协议栈软件的移植,利用本文介绍的方法,也方便了协议栈的软件测试,在实际的应用中得到很好的收效。

    参考文献

    1TelelogictauAB.TelelogictauTM SDL suite 4.0 Getting Started.2001

    2TelelogictauAB.TelelogictauTM SDL suite 4.0 Methodology Guidelines.2001

    33GPPTS24.007V4.2.0(2002-06)Technical Specification 3rd Generation Partnership Project;Technical Specification Group Core Network;Mobile radio interface signalling layer 3;General aspects(Release 4)

    4李小文.TD-SCDMA第三代移动通信系统、信令及实现.人民邮电出版社.2003

    5段红光.SDL进程及SDL环境通信接口分析.重庆邮电学院学报(自然科学版).2003

    6段红光.如何利用SDL开发TD-SCDMA高层信令.电子技术应用.2004Vol.30No.2

    7段红光.如何在SDL中调用C语言函数的研究.电子技术应用.2003Vol.29No.2

    8赵会群.《通信软件测试技术基础》.人民邮电出版社.2003

你可能感兴趣的:(利用TTCN进行协议测试的一种方法)