协议测试技术分析与研究

2016-08-30 18:30郭清菊王磊
软件 2016年5期

郭清菊 王磊

摘要:随着网络通讯技术的飞速发展,通讯协议的规范性严重制约着网络交互和通讯服务的质量。协议测试的地位也越发显得重要。本文针对协议测试中的一致性测试和互操作性测试内容进行理论分析,对比两种测试的差异,并明确两者关系以及在协议测试中的重要作用,研究结果能够为实际的测试执行提供选择依据。

关键词:协议规范;协议测试;一致性测试;互操作性测试;被测实现

中图分类号:TP391.41 文献标识码:A DOI:10.3969/j.issn.1003 6970.2016.05.028

本文著录格式:郭清菊,王磊.协议测试技术分析与研究[J].软件,2016,37(5):115-118

0.引言

随着计算机技术和网络通讯技术的快速发展,计算机网络的复杂性和高质量要求的不断提高,网络通讯协议从中起到了不可代替的作用。网络通讯协议是指在计算机网络与通讯网络中各种实体相互交换信息时必须遵守的规范集合,其规范行性严重制约着网络交互和通讯服务的质量,这意味着协议软件是否满足协议的规范是保证通讯系统正常运行和顺利开展业务首要保证。虽然国际上各类机构和学术组织也制定了各种各样的网络协议规范和标准,但是随着近年来分布式计算机网络结构日趋复杂在协议方面表现出多种形态,如不稳定性、多样性等等,严重影响到网络软件的可靠性和可维护性,因此,协议工程产生,它是一个系统化的完整、规范和可靠的工程,其中,协议测试成为了这工程中的重要部分。

与软件测试在软件工程中的作用一样,协议测试是协议工程中的一个重要组成部分,是保证协议工程质量的重要技术和举措。协议测试的目的就是为了保证一个标准化协议的不同实现之间能够成功地进行通信。协议测试属于黑盒测试,它主要评估被测实现(IUT,Implementation Under Test)的外部行为是否符合协议的标准。协议测试包括四个方面:

●一致性测试:检查被测实现与协议规范是否一致。

●性能测试:检查系统的性能指标,如:数据传输、连接时间、执行速度以及吞吐量等,一般通过实验来观测被测实现IUT的一些性能参数。

●互操作性测试:检查被测实现在各个版本之间的互连操作性和互通能力。

●鲁棒测试:检查系统的健壮性,在各种严重环境下,如断绝通道,切断通信节点的电源或注入干扰消息等操作时的运行能力的检测。

本文接下来重点讨论协议一致性测试和互操作性测试的方法和策略。

1.协议一致性测试

在协议测试的内容中,一致性测试是目前唯一可以给出明确理论框架和方法的一种测试,协议一致性测试是其他测试的基础和关键部分,它属于功能性黑盒测试的范畴,只关注外部行为表现而非具体的通讯连接细节,即:依据协议,测试者对被测实现(IUT)发送一系列外部刺激,观察并判定被测实现的外部响应,其目的就是确认被测实现是否与标准一致,以此来减少运行时的错误风险,属于功能性测试范畴。

ISO/IEC9646提供了协议一致性测试的基本方法和框架,主要用于OSI协议测试,为测试集制定了设计步骤和描述方法,同时为测试系统的实现提高了指导。接下来,研究主要从测试方法的构建和测试序列生成两个方面进行。

1.1构建测试方法

协议一致性测试主要解决被测协议实体与协议规范一致性的问题。换句话说,协议一致性测试是根据协议的标准文本描述对被测实现IUT进行外部行为观测,以判定此实现与所对应的协议标准是否一致。

一致性要求分为静态一致性和动态一致性,静态一致性要求是指被测实现在运行时与规范一致所具备的最小功能,而动态一致性要求则是指被测实现在外部刺激下与规范一致性所必须表现出的行为,可以分为本地测试、分布式测试以及远程协同测试等多种方式。测试完成后给出判定测试报告,对其在测试执行过程中产生的测试日志文件进行分析、判定,生成符合规范的一致性测试报告,分为:通过(Pass)、失败(fall)和不确定(Inconclusive)三种结果。

ISO/IEC9646提供了协议一致性测试的基本方法和框架,规定协议一致性测试标准包括:抽象测试集(ATS)、协议实现一致性说明(PICS)和协议实施附加信息(PIXIT)三部分,图1说明了其测试的基本框架和过程。

1.2生成测试序列的方法

通过图1可知,在一致性测试过程中,主要分为测试生成和测试执行两个主要的阶段。测试生成的目的是生成测试执行的测试序列(集);测试执行则是完成测试和生成测试判定报告。由此可以看出,测试序列的生成时一致性测试的关键环节。测试序列是在用形式化描述的协议抽象测试集(ATS)合中抽取的一组符合代表输入事件的符号标识序列,转换成可执行测试集(ETS),是协议一致性测试中的关键步骤和核心数据,一般通过协议模型,我们获取测试序列,表述被测实现应该具备的逻辑行为。通常通讯协议中的形式化规范模型有:FSM(Finite State Model)有限状态机模型、Peter网模型、TL(Temporal Logic Model)时序逻辑模型和CCS(Calculus of Communication System Model)通讯进程演算模型等四种模型,其中由于具备描述直观、清晰的特点,FSM和peter网广泛用于大型复杂的协议,而TL和CCS则经常被用于验证并发系统的协议验证中。ISO提供2种形式化规范标准描述语言:Estelle和Lotos,分别基于扩张的FSM和CCS,ITU2T组织也发布了一种基于扩展的FSM的SDL语言。

在目前的协议一致性测试中,比较成熟的生成测试序列算法大都是基于FSM模型的,FSM模型被广泛用在分布式系统中,用来描述有限机从一种状态过渡到另一种状态的数学模型。FSM可以抽象地描述独立进程的运行状态,但是必须具备四个条件:所有被测实现系统的状态数、输入,输出事件数都必须是有限、确定的;所有被测实现系统必须是完整的;对于有限输入的事件数必须能够在给定的时间内产生有限的输出事件;被测实现系统的每个状态必须是可达的连通图。基于FSM的测试生成序列的方法有四种:

(1)T方法:是一种最简单的基于FSM模型的生成测试序列的方法。测试输入序列随机对应的正式规范的状态转变,直到所有的状态转换都包括在内。T法的目的是找到可以保证至少一次走访所有转换,这是类似中国邮递员投递问题,如何在最短的时间遍历每个投递点,但是T方法会产生冗余输人,尽管T方法可以检测所有输出的错误,但不保证所有的传输错误可被检测,由此错误检测能力较弱。

(2)D方法:是一种构造可区分序列DS(Distinguishing Sequence)到FSM,然后生成若干测试输入序列。相对于输出序列,每一个DS都是独一无二的。D方法的目的是找出故障点,并产生一个小数目的测试用输入序列。然而,并非所有的FSM可以有一个DS中,同时难以优化,而且每个序列长度很长。因此,限制使用D方法。

(3)w方法:w法生成的特征集的FSM,构建基于所述特征集的输入序列。该特征集可以识别FSM的每个状态。w法包括两个输入序列设置:w和P,w是最小特征集。P包括所有检测路径。根节点是初始状态,每个转变只出现一次。但用这种方法产生的测试输入序列的长度很长,使得检测效率是在实际应用中的偏低。

(4)u方法:u方法的前提是给定的FSM应该是最小的、强连接的和完整的。u方法针对FSM的每一个状态生成一个独特唯一的序列,由此称之为唯一输人/输出序列(UIO)。根据此UIO生成测试输入序列。在该方法中,如果FSM不存在UIO,那么FSM就不能建立测试输入序列。目前,针对u方法也有一些改进的新方法,如SUIO、MUIO、OUIO、FUIO以及BUIO等等,各有优势和特点。

从测试序列的长度的观点出发来看,在上述方法中,T法生成的最短测试序列长度,w方法生成的最长。在相同条件下,D的方法和w方法要比u方法更长;而从故障覆盖率来看,T方法的覆盖率最低,u方法、D方法和w方法几乎相同,由于大多数情况的FSM有UIO,因此,u方法能检测出所有的输出缺陷,结合上述因素,u法是在广泛使用在目前的实际测试中。

2.协议互操作性测试

协议互操作性测试是评价相同协议的不同实现或同类协议在不同被测实现之间能否正确的互通并完成协议规范所规定的功能。在协议测试中,协议一致性测试是基础和保障,也是测试的关键过程,目的是检测被测实现与协议规范是否一致,但是,协议一致性测试也不可能完全详尽和覆盖,面对这个困难和挑战,互操作性测试可以对一致性测试做进一步的补充,其主要作用就是保证通讯产品互通的性。

在协议互操作性测试中,测试的形式基本都是测试者分别对认可设备和被测设备进行操作,这些设备包括:单个或若干个网络设备、终端设备或者是一些应用软件之类的被测试单位选择认可的设备。在测试过程中,仍然属于黑盒测试,测试者或用户只关心设备是否符合协议规范中定义的功能,并不关心协议互通时的细节。

互操作性测试应分为两部分:制定协议互操作性测试规范和具体执行协议互操作性测试。

(1)制定协议互操作性测试规范

为了更好的执行测试,必须首先制定测试规范,该过程是互操作性测试的关键和核心,也是决定测试成功与否的标准。制定规范与协议一致性测试规范类似,但是侧重点应主要关注测试功能。流程如图2所示。

(2)执行协议互操作性测试

有了测试规范,具体测试过程就变得简单容易,准备测试、测试执行以及测试报告三个步骤,这个过程与协议一致性测试的过程基本类似,此处不再赘述。在执行的过程中,如何自动化生产测试集,如何保证测试集的完备性都是测试成功的主要因素,都是目前需要进一步探究的问题。

在协议测试的发展过程中,国际相关的标准组织如ISO也制定了一系列的标准,ISO/IEC9646、ETSI ETS300 406规范等等,主要是针对协议一致性的测试方法框架。但是随着通讯网络技术的迅速发展,新的协议也越来越复杂、多样,协议一致性测试的相关研究面临着困境和巨大的挑战。互操作性测试在协议测试的过程能够提供重要的互通信息,因此关于互操作性测试的研究也越来越受到关注和重视。但目前也停留在理论化的阶段,其深入性和标准化还需要逐步的深入探究。

3.协议一致性测试与互操作性测试的比较

在协议测试中,协议一致性测试与互操作性测试都是测试协议是否实现的重要而关键的有效验证方法,但是在测试的对象、范围和所扮演的角色中又所不同,一致性测试可以判定被测实现是否符合协议规范,但不能保证被测协议实现间的互连互通,反过来,互操作性测试可以判定协议见的互操作性,也无法完全保证协议是否符合规范。因此,一致性测试不能覆盖和详尽的地方,互操作性测试又可以进行补充,两者在具体测试实施过程中可以互相借鉴和参考,前者是基础和前提,是后者进行实施的必要条件,后者是具体实现,更能贴近真实的网络环境中,具有广泛的意义。表1对比了两者的异同点。

4.结束语

协议测试是一种功能性的黑盒测试,是目前计算机网络与通讯发展中协议验证过程不可缺的环节之一,在协议工程中的占有不可缺的重要地位。其中,协议一致性测试和协议互操作性测试又是其中最重要的保障,相辅相成,不可分割。而在实际测试的应用过程中,测试序列的产生与选择又直接关系到测试的成效,以上所述内容仅是对测试的方法进行了理论的探究,具体的实施并非文章描述的这么简单,必须结合实际的案例具体分析,给出尽可能详尽、完备的策略和高效算法,但可以对于我们了解协议测试的流程和在具体进行实施测试提供课参考的理论基础和评价标准。