文档库 最新最全的文档下载
当前位置:文档库 › IPv6路由器的测试集规划技术的研究

IPv6路由器的测试集规划技术的研究

IPv6路由器的测试集规划技术的研究
IPv6路由器的测试集规划技术的研究

IPv6路由器测试集规划技术的研究

刘霞曾淼徐娟

(西南交通大学计算机与通信工程学院成都 610031)

摘要: 本文以四川省网络通信技术重点实验室进行的IPv6路由器的并发多端口测试技术研究和系统开发为背景,讨论了测试集的规划技术,其中的重点是通用测试集的规划。根据IP协议集的特点,本文分别针对单状态协议和多状态协议通用测试集规划的一般方法进行了详细的讨论。

关键词:通用测试集 (GTS – Generic Test Suite) 规划

1 引言

在从IPv4向IPv6网络过渡期间,对新一代的IPv6网络产品,特别是路由器产品进行测试变得越来越重要。但是,迄今为止国、内外对路由器进行测试所采用的技术,仍然沿袭ISO规定的两种测试中继系统的方法:回绕测试(Loop-back Test)和穿越测试(Transverse Test)法[1]。由于这两种方法只能对路由器单个或一对端口进行测试,难以对未来的多端口路由器进行完整的测试,四川省网络通信技术重点实验室对“并发多端口测试技术”进行了研究并正在开发相关的测试系统。由于并发多端口测试可以对多个端口同时进行控制和观测,完成各对端口测试过程的协调与同步,因而能够在模拟路由器的正常与极端工作环境下进行测试。因此,并发多端口测试能够进行全面三类不同性质的测试,即:是否符合相关协议标准的测试(Conformance Test)、性能测试(Performance Test)和互通测试(Interoperability Test)。

网络协议测试系统通过执行事先定义的测试控制数据来达到测试目的。ISO 9646[1]将测试控制数据定义为层次结构,其顶层为测试集(Test Suite),下面各层次分别为测试组(Test Group)、测试子组(Test Subgroup)、测试例(Test Case)和测试步(Test Step)等。尽管在20世纪80~90年代,许多人对自动生成测试控制数据进行了大量的研究,但在Internet相关的协议测试中,仍然以人工描述技术为主,ISO 9646-3中制订的半形式化测试控制数据TTCN(Tree and Table Combined Notation)仍然是广为采用的语言。

以测试集为例,测试控制数据从规划到转变为测试系统可执行的机器代码可呈现为3种形式:通用测试集(GTS - Generic Test Suite)、抽象测试集(ATS - Abstract Test Suite)和可执行测试集(ETS - Executable Test Suite)。GTS是对测试目的、测试覆盖范围和测试内容的宏观描述,详细地界定测试组、子组和测试例,是后续的抽象测试集的描述和具体化的基础。根据GTS和采用的测试方法,再采用某种描述语言(如TTCN)对测试例和测试步骤进行详细的描述,然后再组合成ATS。测试系统测试支撑工具(编译器或解释器)将ATS变为特定测试系统可执行的机器代码,直接用于控制测试过程。鉴于ATS的重要性,而对GTS又缺少标准化的规划与描述工具,加上Internet协议种类繁多,需要对相关的技术进行研究。出于实验室的研究工作的需要,笔者在相关的工作中对路由器的IPv6协议集GTS的规划技术进行了研究,并在规划IPv6协议GTS的实践基础上提出了单状态协议和多状态协议GTS 规划的一般方法。

2 GTS规划原则与测试命名编码规则

2.1 测试集规划原则

尽管IP路由器的用户平面较为简单,仅涉及网络层的IP协议;但其信令控制与管理平面却涉及包括应用层在内的多个协议[6]。如网络层的协议除IP 之外,在IP之上的子层中,有ICMP、RSVP、IPSec 等;而在IP之下的子层中,有ARP、IARP和RARP 等。因此,GTS的规划必须充分考虑其复杂性,以便将单个GTS的规划控制在可管理的范围内。由于对路由器的测试按性质可分为:一致性测试(Conformance Test)、性能测试(Performance Test)、

互通测试(Interoperability Test)、仲裁测试(Arbitration Test)等,在进行并发多端口测试时可能还包括多个协议间的多协议配合测试(Multi-protocol Coordinated Test)等,因此,GTS的规划还必须考虑适应各类测试的能力。按照ISO规定的路由器的测试方法,可分为单端口回绕测试和一对端口的穿越测试,当涉及多端口并发测试时,两种测试方法的组合可能出现更复杂的情况。因此,GTS的规划必须考虑上述种种因素和需要。在笔者的实践中,探索出以下几项GTS规划原则:

○1测试集的可管理原则

单个GTS的规模不宜太大,所涉及协议宜尽量少。在笔者的IP路由器通用测试集的规划实践中采用了以单个协议为基础规划GTS的方法,以避免单个测试集过大,向下细分层次过多。

○2向上汇聚原则

在ISO的测试集之上,我们引入了超级测试类(STC - Super Test Class)的概念,将多个测试集向上汇聚为超级测试类(STC),相应地可派生出通用超级测试类(GSTC)和抽象超级测试类(ASTC)。由于我实验室正进行路由器的并发多端口测试和传统单个端口或一对端口的测试,笔者目前定义了两类超级测试类:并发多端口超级测试类(MSTC - Concurrent Multi-port Super Test Class)和单个/单对端口超级测试类(SSTC-Single port/pair Super Test Class)。超级测试类可以根据需要增加。采用上述汇聚法的目的还在于能够与其他研究单位关于单端口/单对端口测

试使用的GTS具有可比性。

○3测试集划分原则

为了适应不同测试性质的测试需要,测试集可分为:一致性测试集、性能测试集、互通测试集等。

○4测试组划分原则

针对不同的测试集,划分原则也有所不同。一致性测试主要根据测试需求以协议标准为单位来划分测试组(如邻居发现协议测试组、RIP协议测试组等);而性能测试主要按性能指标实现测试组的划分(如端口流量测试组等)。测试组可根据需要进一步增加。由于一致性测试是各类测试的基础,因此下文主要讨论一致性测试集的规划,对于其它测试集的规划有待进一步研究。

○5测试子组划分原则

为了适应一致性测试的需要,每个测试组可以进一步划分为测试子组(Subgroup)。对测试子组的划分,主要针对被测协议的特点(如单状态、多状态、有连接等)采用了下面的规划原则:

对于无连接的单状态协议(如IPv6协议)按报文格式的字段以及协议各项功能来划分测试子组。

对于多状态协议,无连接(如RIPng协议)或有连接协议(如OSPF协议、TCP协议)基于协议的有限状态机并结合非状态描述按各状态来划分测试子组。

⑥通用测试例的规划原则

通用测试例是测试子组下的细化,独立于测试方法,因此对它的规划可采用以下原则:

按报文格式的字段划分测试子组,其测试例的规划主要按各字段的有效取值和无效取值划分。

按协议功能划分测试子组,其测试例的划分有几种情况:一是按功能的有

效情况和无效情况划分测试例;二是继续划分子功能,将之作为测试例。

基于状态划分的主要按各输入事件、输出事件、状态变迁、状态处理等划分相应的测试例。

值得一提的是,前面讨论的6项原则既适用于通用测试集(GTS)的规划,也适用于抽象测试集(ATS)的规划。由于ATS与测试方法有关,因此根据GTS的规划加上具体的测试方法和测试步骤,就可以得到相应的由抽象测试例(ATC,Abstract Test Case)组成的ATS。

2.2 测试数据命名与编码规则

为了使测试名称的定义既符合2.1节中讨论的规划原则和层次性分组原则,又能够兼顾可读性和机器易识别性,必须对测试数据的命名和编码做明确的规定。在相关的工作中我们对GTS和ATS分别规定了下述命名格式与编码规则:

对比表1和2可以看出:抽象测试例(ATC )和测试步(ATSP )与测试方法有关,需要命名格式,而通用测试例(GTC,Generic Test Case )的命名规则只需要到测试例为止。事实上,GTC 解决测什么的问题,而ATC 要根据各GTC 解决怎样测的问题(即采用一定的测试方法来实现具体的测试过程)。从人工阅读容易的角度出发,采用表1和表2中的全称命名方式较直观,但书写起来较为繁琐,为此在机器阅读格式中可以采用缩写方式,即符号加序号的方式, 在两种命名格式间需要进行映射。一个测试集(GTS 或ATS )的层次结构中,允许在特定测试组中不再划分测试子组,此时,测试子组的编码为缺省编码(连续5个“E” - Empty, 表示为空,或GTSG/A TSG 缩写命名为序号为“0”)。在对ATS 进行编译或解释时即可直接将测试例隶属于相应的测试组。

3 IPv6协议集测试集举例

有了规划原则和系统的测试集命名规则,就可以针对不同的协议进行相应的规划设计。下面笔者将以超级测试类IPv6协议集为例详细讨论其规划过程。

明确测试工作的对象和内容,才可有效地开展测试工作,因此首先要做好协议测试的需求分析。通过对IPv6 RFC 文本及相关资料的研究,笔者针对IPv6协议集的特点对ISO [1]建议的测试集结构进行了相应的改进,并根据2.1节中讨论的测试集的规划原则设计了自顶向下的IPv6协议集的树状测试集结构(如图1),该结构从上到下分为以下6层:

(1) 超级测试类:指路由器的IPv6协议集单个/单对端口的测试,即多个协议测试集的向上汇聚。

(2) 测试集:按测试性质划分,本研究主要

注:表中的层次结构连接符为英文中的着重线(_),以避免与名称中的英文连字符(-)。表2 ASTC 、ATS 、ATM 、ATG 、ATSG 、ATC 和ATSP 命名格式ASTC Name_ATS Name_Test Method Name_ATG Name_ATSG Name_ATC Name

ASTC Name: 抽象超级测试类名称(字符串,最多10个字符),如路由器并发多端口超级测试类

(A-MSTC-IPv6、A-MSTC-IPv4等)和缺省路由器超级测试类(A-Rdef-IPv6、A-Rdef-IPv4等)。根据需要超级测试类可以增加。

ATS Name: 抽象测试集名称(字符串,最多10个字符),如Conformance 、Performance 、Interoperable 、Arbitration 等。

Abstract Test Method Name: 测试方法名称(字符串,最多10个字符),如Loop-back 、Transverse 等。 ATG Name: 抽象测试组名称(字符串,最多15个字符),如A-IPv4、A-IPv6、A-RSVP 、A-BGP-4、A-SNMP-2等。

ATSG Name: 抽象测试子组名称(字符串,最多10个字符),如IPv6协议中版本字段的测试为Version 等。 ATC Name: 抽象测试例名称(字符串,最多10个字符),如版本字段有效取值Version-6,无效取值 Version-5、Version-4等。

ATSP Name: 抽象测试步名称(字符串,最多10个子符),如发送为send,receive 等。

进行协议的一致性测试,当然还可进行性能测试等。

(3)测试组:对应于协议集一标准协议规范。如IPv6基本描述协议(RFC2460)、ICMPv6协议(RFC2463)、路由协议RIPng(RFC2080)等。

(4)测试子组:对应于一个标准协议的某一项功能描述,包含一个或多个对该项功能进行多项测试的测试例,如RFC2460中关于下一报头的描述、HBH选项头在扩展头中位置的描述等。

(5)测试例:完成一个测试组可能需要多个

测试例。比如为了测试RFC2460中关于HBH(Hop by Hop)选项头在扩展头中位置的描述,需要对HBH 在扩展头中位置的前后进行考虑,因此可设计多种顺序组合,这就需要测试子组中包括多个测试例。

(6)测试步:一个测试例的完成需要进行初始化、发包和收包、比较以及处理结果等等,每一个动作就是一个测试步。需说明的是,前5层可用于GTS和ATS,但测试步与测试方法有关,因此只用于A TS。

为了便于机器阅读,笔者根据表1的命名格式设计了IPv6协议GTS缩写的命名规则:G-SSTC-IPv6表IPv6协议集单个/单对端口超级测试类;C表一致性测试集;Gn(n为整数)表示测试组;SGn表示测试子组;BV(Valid Behavior)和BI(Invalid Behavior)加上编号表示有效行为测试例和无效行为测试例。

有了测试集结构和命名规则,就可根据测试需求,选择适当的规划技术确定相应的测试目的。下面笔者以实践工作中对IPv6基本描述协议[2]、ICMPv6协议[3]和RIPng协议[4]规划的测试集为例,详细讨论单状态协议、多状态协议通用测试集的规划设计。

4 单状态协议通用测试集的规划设计

IPv6和ICMPv6协议无状态变迁,因此采用单状态协议测试,笔者主要针对它们协议描述中的数据报合法性问题和协议功能实现问题来进行相应的规划。

4.1 报文格式的测试

对于报文格式的测试

主要采用对数据报各字段取正常值、非正常值或者对几个字段进行联合取有效或无效值以达到对报文格式的一致性测试。

以IPv6基本描述协议中基本报头的测试规划为例,如图2所示,IPv6基本报头报文格式中包括了6个字段和两个地址字段,因此规划时可按字段划分测试子组,根据各字段具体要求按其有效取值和无效取值就可设计各测试子组下的测试例。

以IPv6基本报头版本(Version)字段测试为例,首先将该字段的测试作为第一测试子组SG1;接着根据协议文本对该字段的描述(其值必须为6),按照字段值是否有效,分别设计了有效值为6,无效值为5和4的三个测试例。设置4是想看一下被测路由器(RUT)对版本号字段值为4的IPv6包是按IPv4包处理还是将之作为无效的包处理。综合上述测试需求就得到了GS1的三个测试例,即有效行BV001(IPv6 Version_6),无效行为BI001(IPv6 Version_5)和BI002(IPv6 Version_4)。基本报头其它字段(通信流类型、流标签等)测试目的的确定如法炮制,只是除了基于协议文本,还要尽量根据被测路由器的特点以及实践中可能遇到的问题来

图2 IPv6基本报头格式

3 RIPng 状态变迁图 设计。

4.2 协议功能的测试

对协议功能进行测试规划的一般方法是根据协议文本,同时结合相关资料和实践经验划分各项功能及其子功能,对应于各功能划分同时分析出其有效和无效情况就能得到覆盖较全面的协议功能测试集。

以ICMPv6协议差错报文测试目的的定义为例,其差错报文有四种类型:目的不可达、包过大、超时和参数出错。每一种类型都有不同的描述和要求,根据这四种类型可将差错报文规划为相应的4个测试子组。对于每个测试子组下测试目的的确定以目的不可达为例进行说明。目的不可达有4种情况:没有路由到目的、同目的的通讯由于管理被禁止、地址不可达和端口不可达。根据这四种功能设计了相应的四个测试例。因此对协议功能的测试主要在于如何对功能进行合理准确的划分。

4.3 单状态协议通用测试集规划的一般方法 总的来讲,单状态协议测试目的定义充分利用了软件测试的方法——等价类划分[5]。就是按照协议文本将诸多情况分为有效情况和无效情况。在每种情况内使用特殊代表一般的原则,使等价类采用特殊测试例来覆盖。有效或无效情况可以更详细的进一步划分为各等价类,直到不能再分为止。然后每种不可再分的等价类使用特殊的测试例来覆盖测试。事实上,就是按测试集的树形结构,自顶向下逐步确定各分支以(测试子组)及分支下的叶节点(测试例)来实现GTS 的层层规划。

5 多状态协议通用测试集的规划设计

多状态协议由于具有状态变迁因而比单状态协议在GTS 的规划上更为复杂。本文将以IPv6的路径信息协议RIP ,即RIPng (RIP next generation )GTS 的规划为例来说明多状态协议的规划方法。 对于RIPng 这类多状态协议,笔者结合了基于协议状态变迁和基于协议文本非状态描述这两种规划技术的优点,采用以状态变迁为主、非状态描述为辅来实现对多状态协议GTS 的规划。这样既可兼顾协议的各种状态,又可对非状态描述进行覆盖,较好的保证了测试的完备性。

基于RIPng 协议GTS 规划的实践,笔者提出了多状态协议测试目的定义的一般步骤:

(1) 确定协议各状态及状态的输入事件和输出事件等。较好的方法是通过状态变迁图来实现。笔者设计了RIPng 状态变迁图(图3),圆圈表状态;弧线表状态变迁,弧线上的标注表触发状态变迁的事件。

(2) 从多个状态变迁中,筛选出对测试有意义的状态变迁进行测试目的的确定。

(3) 按照协议文本将各状态或状态变迁某些规划原则(如按功能)进行等价的分类,每一个分类作为一个大的测试子组,如RIPng 中请求处理状态可作为一个大的测试子组。

(4) 接着进一步分为:非状态测试(如路由条目RTE 的有效性检查,若需要非状态测试)和状态测试(包括对所处状态处理的测试等),由此得出大测试子组下的小测试子组(如GS12是作为请求处理状态这个大测试子组下对请求报文处理的小测试子组)。

(5) 根据状态的不同输入产生的不同处理来规划每个小测试子组下的测试例。如RIPng 请求报文的处理主要以接收三种不同的请求报文(来自1000端口,源地址是全局地址;来自521端口,源

地址是链路地址并且无RTE;请求全部路由表)为依据来进行测试例的规划。

根据上述步骤,笔者设计了RIPng的通用测试

集(如表3)。当然这些步骤只能作为多状态协议GTS规划的主要步骤,事实上在对多状态协议进行GTS规划过程中,还需要基于具体的测试目的确定相应的规划,如对RIPng中的分割范围进行测试,测试目的是完成RUT在不配置分割范围、配置分割范围以及同时配置毒性逆转时的测试,这就需要对路由器进行相应的配置。

6 结语

本文对IPv6路由器测试集的规划技术进行了研究,并在对三个典型IPv6协议测试集规划的实践基础上,提出了单状态协议和多状态协议GTS的一般方法,为测试控制定义技术下一阶段A TS的设计和描述提供了直接的指导。提出了有待进一步研究的工作:如采用带外信令的思想,在控制平面通过路径表的更新对用户平面的IP数据报进行控制的多层协议测试,以及协议测试时,考虑装载被测协议实现(尤其是路由协议)的RUT在同时收到来自多个端口的信息时的不同处理和反应进行的并发多端口测试技术研究,为后续工作提供了很好的借鉴和参考。

参考文献

[1] International Standard,Open Systems Interconnection,Conformance testing methodology and framework(ISO/IEC 9646),1994 [2] RFC2460:Internet Protocol,Version 6(IPv6) Specification,December 1998

[3] RFC2463:Internet Control Message Protocolfor IPv6

Specification((ICMPv6)),December 1998

[4] RFC2080: RIPng for IPv6, January 1997

[5] Glenford J.Myers 著,周之英,郑人杰译.计算机软件测试技巧.清华大学出版社.2001

[6] Huaxin Zeng,Xun Zhou,and Bo Song,”On Testing of IP Routers”,in:Proceedings of PACAT03,IEEE press,PP.535-540,Aug(2003)

相关文档