首页> 中国专利> 下一代互联网协议一致性测试例设计方法

下一代互联网协议一致性测试例设计方法

摘要

本发明涉及网络协议测试技术领域,涉及下一代互联网(IPv6)协议一致性测试例设计方法,得到了新的IPv6协议一致性测试例结构。通过对IPv6协议测试状态转换的研究得到测试例的测试序列的新的生成方法,用给出的通用算法生成测试例的前测试步的测试序列,依据测试例对应的测试目标得到测试例的测试体的测试序列,测试例不再包含后测试步。新的IPv6协议一致性测试例结构由前测试步和测试体两部分组成。这种方法适用于除IPv6邻居发现协议外的所有IPv6协议。采用这种方法简化了测试例的测试序列,缩短了测试例执行时间,提高了测试效率。

著录项

  • 公开/公告号CN1540928A

    专利类型发明专利

  • 公开/公告日2004-10-27

    原文格式PDF

  • 申请/专利权人 中国科学院计算技术研究所;

    申请/专利号CN200310104375.4

  • 发明设计人 郑红霞;张玉军;孙静波;李忠诚;

    申请日2003-10-27

  • 分类号H04L12/26;H04L12/28;H04M3/22;H04B17/00;

  • 代理机构11021 中科专利商标代理有限责任公司;

  • 代理人周国城

  • 地址 100080 北京市中关村科学院南路6号

  • 入库时间 2023-12-17 15:39:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2009-04-22

    授权

    授权

  • 2005-01-05

    实质审查的生效

    实质审查的生效

  • 2004-10-27

    公开

    公开

说明书

技术领域

本发明涉及网络协议测试技术领域,特别是一种下一代互联网协议一致性测试例设计方法,尤其是适用于下一代互联网协议IPv6的简化测试序列生成的协议一致性测试例设计方法。

背景技术

下一代互联网协议(Intetnet Protocol version 6,简称IPv6)由于其近乎无限的地址空间、层次化的地址结构、高速的路由、更强的安全性、对移动性和服务质量的更好支持等特性,被认为是解决目前互联网面临的困境、为下一代互联网提供更好的服务和发展的最佳协议。随着支持IPv6的网络产品的日渐增多,各IPv6协议实现与协议标准的一致性问题也越来越重要,对IPv6协议进行一致性测试的需求也越来越强烈。开展IPv6协议一致性测试研究具有重要的理论和现实意义。

协议一致性测试是一种“功能测试”,它依据一个协议的描述对协议的某个实现进行测试,判别一个协议的实现与所对应的协议标准是否相一致。ISO/IEC 9646为协议的一致性测试提供了基本方法和框架,为测试集制定了设计步骤和描述方法,并为测试系统的实现提供了指导。协议一致性测试过程分三个阶段:测试准备阶段生成抽象测试集(Abstract TestSuite,简称ATS);测试操作阶段产生参数化的可执行测试集;测试执行阶段包括被测协议实现(Implementation Under Test,简称IUT)的协议实现一致性声明的分析和可执行测试集的执行,最终得到一个一致性的判决,生成一致性测试报告。其中抽象测试集的生成决定了测试的质量,是测试操作和测试执行的基础,是整个协议测试的核心。

一致性测试集是测试例的完整集合,可能组合到嵌套的测试组中,用于执行一个或多个OSI协议的动态一致性测试。测试例又分为一般的、抽象的和可执行的测试例。抽象测试集是由抽象测试例组成的测试集。抽象测试集具有分级结构,一个抽象测试集可以有多个测试组,每个测试组由若干个测试例组成,每个测试例可以有多个测试步,每个测试步由测试事件和/或其它测试步构成,测试事件是测试例在说明的抽象层次上不可分的最小单位。其中测试例是测试集的最重要的一级。测试例的生成方法的研究对协议测试十分重要。

抽象测试例是实现特定的测试目标(或特定的测试目标的组合)所要求的行为的完整而独立的说明,定义在特定抽象测试方法的抽象层次,开始于一个稳定的测试状态且结束于一个稳定的测试状态。这个说明可能包括一个或多个连续的或并行的连接。ISO/IEC 9646中定义的测试例结构如图1所示。其中的术语定义如下:

测试状态:测试中的状态,是被测系统、测试系统、ATS描述的协议和下层服务(如果相关)的状态的组合。

稳定测试状态:一个测试状态不需要指定下测试器的动作可以维持到下一个测试例执行之前。

空闲测试状态:一个稳定测试状态,在这个状态没有已建立的相关协议的连接且被测系统独立于之前执行的任何测试例。

初始测试状态:测试体开始的状态。

前测试步:从测试例开始的稳定测试状态到测试体开始的初始状态之间的测试步的序列。

测试体:实现测试目标的测试步的序列。

后测试步:从测试体结束到测试例终止的稳定测试状态之间的测试步的序列。

从图中看到,测试例的测试序列分为前测试步、测试体和后测试步三部分,由测试体实现测试目标,而前测试步和后测试步的测试序列是为了保证测试体部分顺利执行从而实现测试目标所构造的辅助测试序列,适当选择前测试步和后测试步的序列对于在保证测试体执行的前提下简化测试生成、缩短测试执行时间、提高测试效率都有重要意义。

目前在测试生成方面的理论研究主要集中在测试例的测试体部分测试序列的生成上,对前测试步和后测试步部分测试序列的生成很少涉及。在IPv6协议测试方面,当前日本TAHI工程、美国新罕布什尔大学等从事IPv6协议一致性测试的机构已公布的IPv6协议测试例都只描述了测试体部分的测试序列,对前测试步和后测试步部分的测试序列没有详细定义。

协议一致性测试例设计的一般步骤可以总结为:

1、根据协议内容选择测试目标;

2、根据测试目标构造测试例的实际拓扑结构;

3、选择测试方法;

4、设计测试例的测试序列。

对于IPv6协议,依据图1所示的测试例结构,按常规方法分别设计测试例的前测试步、测试体和后测试步三个部分的测试序列,得到的测试例的前测试步和后测试步的测试序列很复杂,而且耗时长,在实际测试中,这往往造成一个测试例中前测试步和后测试步的测试序列甚至比测试体的测试序列还长,大部分的测试时间都消耗在前测试步和后测试步的执行上,测试效率很低。本发明正是针对这个问题提出的一种行之有效的解决办法。

发明内容

本发明的目的是简化IPv6协议测试例的前测试步和后测试步的测试序列,得到适用于IPv6协议的新的测试例结构,从而简化测试生成,缩短测试执行时间,提高测试效率。为此提出一种下一代互联网协议一致性测试例设计方法。

发明的技术方案

在此提出一种用于IPv6协议的协议一致性测试例设计方法,其特征在于,对于除IPv6邻居发现协议外的所有IPv6协议,根据对协议测试状态及其转换的研究得到生成测试例的前测试步测试序列的通用算法,采用这种算法生成前测试步的测试序列,依据对应的测试目标得到测试体的测试序列,略去后测试步,得到新的IPv6协议一致性测试例结构。

具体地说,这种方法可以完整描述为如下过程:根据协议内容得到测试目标,根据测试目标设计测试例的实际拓扑结构,选择测试方法,依据测试目标得到测试例的测试体的测试序列,采用给出的通用算法生成测试例的前测试步的测试序列,将前测试步与测试体组成完整的测试例。

下面给出其中测试例的测试序列的生成方法的具体描述,分为如下三个步骤:

1、根据测试目标设计测试体的测试序列;

2、依据如下给出的通用算法生成前测试步的测试序列:(与图3相对应)

1)列出测试体中需要与被测节点通信的邻居的地址列表;

2)若地址列表为空,执行步骤7),否则执行步骤3);

3)从地址列表中顺序选择一个地址;

4)向前测试步的测试序列中添加如下测试事件:以选中地址为源地址向被测节点发送回应请求,要求被测节点回复回应应答;

5)向前测试步的测试序列中添加如下测试事件:以选中地址为源地址向被测节点发送请求的邻居宣告,其中带有测试例要求的链路层地址,要求覆盖原缓存;

6)从地址列表中去掉选中地址,重复执行步骤2)-6)。

7)向前测试步的测试序列中添加如下测试事件:测试体中设置的被测节点所在链路上的默认路由器(若存在)发送路由器宣告给被测节点,其中设置了默认路由器标志,带有被测节点所在链路的在线前缀的前缀选项。

3、将生成的前测试步测试序列和测试体测试序列顺序组合成完整的测试例。

图3表示了其中前测试步的测试序列的生成算法的流程图。图4给出了按上述方法生成的测试例的完整的测试序列的一个示意图,图中仅表示了一个作为被测节点邻居的测试节点与一个被测节点所在链路上的默认路由器(可能与作为被测节点邻居的测试节点重合)与被测节点之间进行数据包交互的测试事件的序列,其中箭头方向表示数据包传送方向,若存在多个这样的测试节点,则对每个测试节点重复相同的测试事件的序列。

由此提出新的IPv6协议测试例结构,如图5所示。测试例由前测试步和测试体组成,前测试步是从测试例开始的状态到测试体开始的初始测试状态之间的测试步的序列,测试体是实现测试目标的测试步的序列,测试例不包含后测试步。测试例开始的测试状态可以是空闲测试状态(首次执行时)或测试体结束的状态(连续执行时),测试例结束的测试状态是测试体结束的状态(连续执行时)或空闲测试状态(最后执行时),一个测试例结束的测试状态同时也是下一个测试例开始的测试状态。测试例的前测试步部分的测试序列包含如下测试事件:以测试例中每个作为被测节点的邻居与被测节点通信的节点地址为源地址依次向被测节点发送回应请求、邻居宣告,随后测试例中被测节点所在链路上的默认路由器(若存在)向被测节点发送路由器宣告,其中设置了默认路由器标志并带有被测节点所在链路的在线前缀的前缀选项。

本发明适用于除IPv6邻居发现协议以外的所有IPv6协议,用本发明给出的方法设计的IPv6协议测试集已成功应用于实际测试,在简化测试序列、缩短测试时间和提高测试效率方面取得了明显成效。

本发明广泛用于计算机之间的下一代互联网协议之中。

附图说明

下面参照附图说明本发明的具体内容。

图1为ISO9646定义的测试例结构图。

图2为IPv6邻居缓存条目状态转换图。

图3为前测试步的测试序列生成算法流程图。

图4为IPv6协议测试例的测试序列示意图。

图5为新的IPv6协议测试例结构图。

对于IPv6协议,按照图1所示测试例结构设计测试例的测试序列的常规方法分为以下三个步骤:

1、根据协议内容选择测试状态;

一个IPv6节点对自身所处网络环境的认识主要依靠邻居发现机制实现,IPv6各部分协议的通信都要受邻居发现机制的制约。每个处在网络中的IPv6节点都有一个邻居缓存,保存与它通信的所有节点的IPv6地址及对应的MAC地址,IPv6节点通过搜寻邻居缓存条目来与其它节点建立通信。在节点间通信的不同阶段,对应的邻居缓存条目可能处于不同状态。IPv6协议测试例的测试状态就依据邻居缓存条目的状态来选择。邻居缓存条目的可能状态及各状态间的转换关系如图2所示。图2中包含六个状态,其中“——”状态表示邻居缓存条目不存在的状态,当邻居缓存条目存在时,它可能处于其余五个状态之一。这五个状态简述如下:

INCOMPLETE:正在进行地址解析,还没有确定邻居的链路本地地址。

REACHABLE:大致地说,知道邻居最近(在几十秒以前)曾经可到达。

STALE:在通信发往邻居之前不再知道邻居可到达,不应作任何尝试验证它的可到达性。

DELAY:通信最近已发往邻居而不再知道邻居可到达。不是立即探测邻居,而是在一段时间后发送探测,从而给上层协议提供可到达性确认的机会。

PROBE:不再知道邻居可到达,且要发送单播邻居请求探测来验证可到达性。

图2中数字表示引起这六个状态之间的转换的事件及对应的节点动作的编号,按RFC2461附录C中列表顺序排列。我们以“事件;动作”的格式描述各个编号对应的事件及动作,以事件0为例,它的定义是:

事件0:要发送包;创建邻居缓存条目,发送多播邻居请求,启动重传定时器。

其中“要发送包”是引起状态转换的事件,“创建邻居缓存条目,发送多播邻居请求,启动重传定时器”是对应的节点动作。图2显示经过事件0邻居缓存条目由“——”状态转换到“Incomplete”状态,也就是说当邻居缓存条目处于“——”状态且发生事件“要发送包”时,节点进行“创建邻居缓存条目,发送多播邻居请求,启动重传定时器”的操作,邻居缓存条目转换到“Incomplete”状态。

图2中所有编号对应的事件及动作的详细说明参见RFC2461附录C,这里不再一一列出,仅对叙述中涉及到的一些事件及动作按上述格式在下面的叙述中给出定义。

根据RFC2461中对各状态的定义,对于除邻居发现协议外的所有IPv6协议,都可选择状态“——”作为空闲测试状态,状态“Reachable”作为测试体开始执行的初始测试状态。

2、根据测试状态设计前测试步和后测试步;

选定测试状态后依据图2可以得到前测试步和后测试步的测试序列。前测试步是使被测协议实现从状态“——”到状态“Reachable”的转换的测试序列,从图2中可以看到,状态“——”转换为状态“Reachable”有三条路径:

①“——”→“Incomplete”→“Reachable”。

②“——”→“Reachable”。

③“——”→“Stale”→“Reachable”。

后测试步是使被测协议实现从状态“Reachable”回到状态“——”的测试序列,图2显示由“Reachable”状态到“——”状态的路径是唯一的,即“Reachable”→“Stale”→“Delay”→“Probe”→“——”。

图2中激发上述状态转换的事件的序列就分别构成了测试例的前测试步部分和后测试步部分的测试序列。

3、根据测试目标设计测试体。

测试体的测试序列由实现测试目标的一组测试事件组成,执行这组测试事件时被测协议实现应处于“Reachable”状态。

以上给出了用常规方法设计前测试步和后测试步的测试序列的三个步骤,可以看到,其中涉及的前测试步和后测试步的状态转换过程经过很多中间状态,需要产生很多激发这些状态转换的测试事件,得到的测试序列比较复杂。

注意到在图2中,除状态“——”和状态“Incomplete”外,其余状态都可经过事件5、事件8或事件12转换为“Reachable”状态。这几个事件及其对应的被测实现的动作分别是:

事件5:收到请求的邻居宣告,其中包含与缓存中相同的链路层地址,不要求覆盖原缓存;无动作。

事件8:收到请求的邻居宣告,要求覆盖原缓存;记录新的链路层地址(若与缓存中地址不同)。

事件12:收到上层可达性确认;无动作。

而由“——”状态经过事件0可以转换为“Incomplete”状态由“Incomplete”状态经过事件4可以转换为“Reachable”状态,

两个事件和所对应的被测实现的动作是:

事件0:要发送包;创建邻居缓存条目,发送多播邻居请求,启动重传定时器。

事件4:收到请求的邻居宣告;记录链路层地址,发送队列中的包。

可以看到,除状态“——”外,无论邻居缓存条目处于其他什麽状态,只要收到适当的请求的邻居宣告,都可直接转换为“Reachable”状态。而对于状态“——”,在节点需要发送到邻居的包时就能转换到“Incomplete”状态。因此可以直接在每个测试例的开始部分执行以下步骤:

①作为被测节点的邻居的测试节点向被测节点发送回应请求,被测节点需要发送回应应答给测试节点。若此时邻居缓存条目处于“——”状态,事件0发生,邻居缓存条目状态转换为“Incomplete”;若此时邻居缓存条目处于其余五个状态之一,执行这个步骤后邻居缓存条目将仍处于这五个状态之一。

②测试节点向被测实现发送请求的邻居宣告,其中带有测试例要求的链路层地址,要求覆盖原缓存。被测实现收到后,据当前邻居缓存条目所处的不同状态,可能是事件4或事件8发生。无论是哪个事件发生,邻居缓存条目状态都会直接转换为“Reachable”,此时被测实现上已建立测试节点的完整的邻居缓存条目,双方可以正常通信,进入具体测试执行阶段。若测试例中被测节点所在链路上存在默认路由器,则充当默认路由器的测试节点还需发送路由器宣告给被测节点,其中设置了默认路由器标志并带有被测节点所在链路的在线前缀的前缀选项。

在任何状态下执行上述两个步骤都可以使被测协议实现直接进入测试体开始的初始测试状态,因此这两个步骤可以作为通用的测试例的前测试步部分,若有多个测试节点或一个测试节点的多个地址需要与被测节点通信,则重复执行上述步骤。由于上述前测试步部分可以实现从空闲测试状态和任意测试体结束状态到测试体开始的初始测试状态之间的转换,在任何情况下都能保证测试体的顺利执行和测试目标的实现,因此测试例的后测试步部分可以省略。实际执行测试例时,第一个测试例开始于空闲测试状态,之后连续执行的每个测试例开始于上一个测试例的测试体结束的测试状态而结束于它自身的测试体结束的测试状态,最后一个测试例执行结束后,根据邻居发现协议中的邻居不可达检测机制,被测节点在一段时间内发现所有测试节点已不可到达,将到达空闲测试状态。这样,在任意时刻可以执行任意多个测试例,且各个测试例的测试体部分都能确保正确而独立的执行。

上述通用的前测试步部分的测试序列在实际操作时可以用一个通用算法生成,图3表示了这个算法的流程图。这样可以得到IPv6协议测试例的测试序列生成过程:先根据测试目标得到测试体的测试序列,再用前测试步的生成算法得到前测试步的测试序列,最后将前测试步的测试序列和测试体的测试序列顺序组合成测试例的完整测试序列。图4表示了这样得到的一个IPv6协议测试例的完整测试序列的示意图。

由此得到适用于IPv6协议的新的测试例结构,如图5所示。新的测试例结构仅包含前测试步和测试体两个部分,测试体实现测试目标,前测试步实现保证测试体正确而独立的执行所需要的测试状态转换。选择IPv6邻居发现协议中规定的邻居缓存条目的“——”状态作为测试例的空闲测试状态,“Reachable”状态作为测试例的初始测试状态。测试例开始的测试状态可以是空闲测试状态(首次执行时)或测试体结束的状态(连续执行时),测试例结束的测试状态是测试体结束的状态(连续执行时)或空闲测试状态(最后执行时),一个测试例结束的测试状态同时也是下一个测试例开始的测试状态。生成的测试例组成前测试步部分测试序列的测试事件为:以测试例中每个作为被测节点的邻居与被测节点通信的节点地址为源地址依次向被测节点发送回应请求、邻居宣告,随后测试例中被测节点所在链路上的默认路由器(若存在)向被测节点发送路由器宣告,其中设置了默认路由器标志并带有被测节点所在链路的在线前缀的前缀选项。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号