第八章协议的一致性测试8.1基本概念计算机网络或通讯系统的测试包括四个方面:(1)一致性测试(conformancetesting)一致性测试旨在检测所实现的协议实体(或系统)与协议规范的符合程度;(2)性能测试(Performcetesting)性能测试旨在检测协议实体或系统的性能指标(数据传输率,联接时间,执行速度,并发度,……);(3)互操作测试(interoperateabilitytesting)互操作测试旨在检测同一种协议的不同实现版本之间,或同一类协议的不同实现版本之间互通的能力和互操作能力;(4)坚固性测试(robusunesstesting)。坚固性测试旨在检测协议实体或系统在各种恶劣环境下运行的能力(信道被切断,通讯结点掉电,注入干扰报文……)。本章只讨论一致性测试问题。第八章协议的一致性测试8.1.1一致性定义在OSI范畴内,如果一个实际系统在它与别的实际系统通讯中所表现的行为符合OSI协议规范的一致性要求,我们就说它呈现了一致性。OSI协议规范的一致性要求属于协议规范文本的一部分,它包括:静态一致性要求(staticconformancerequirements)和动态一致性要求(dynamicconformancerequirements)两个方面。静态一致性:说明协议实现者必须实现的最小子集的内容,定义各类协议或各个子集的内容〔即协议实现者欲实现某类协议所必须包括的内容),定义PDU的最大长度,定义各种协议参数、变量、定时时钟的取值范围等等。动态一致性:说明协议执行过程中。协议在每个状态下所允许的行为是什么。例如,发出“联接请求”报文的协议实体所期待的回答报文应该是“联接认可”或“联接拒绝”或“联接释放”,其它回答报文是不允许的。第八章协议的一致性测试ISO颁布的一部分ISO协议已包括一致性要求文本,这些文本称为协议实现一致性说明PICS(ProtocolImplementationConformanceStatements)和协议实现测试的附加信息PIXIT(PrococolImplementationeXtraInformationforTesting)。这些要求往往使用表格形式(tabulorproformas)来描述,前者称作PICSproformas,后者称作为PIXITproformas。第八章协议的一致性测试8.1.2测试模型协议一致性测试的基本模型如图8.1所示。(1)IUT(ImplementationUnderTest)是被测试的协议实体系统,(2)UT(UpperTester)高层测试软件或硬件,(3)LT(LowerTester)是低层测试软件〔或硬件〕。如果IUT是n层协议实体,那么UT属于(n十1)层,LT属于n层(LT和IUT为同等层协议实体)。UT通过PCO(PointofControlandObservation)和IUT交换(n)ASP(AbstractServicePrimitives),LT通过PCO和IUT交换(n-1)ASP。如果IUT是传输层协议实体,那么(n)就是TSP(TransportServicePrimitives),(n-1)ASP就是NSP(NetworkServicePrimitives),上面的PCO就是TSAP,第八章协议的一致性测试下面的PCO就是NSAP,图8.1中,LT和IUT通过(n-1)层服务交换(n-1)ASP,UT和LT利用(n-1)层提供的另外一条通道交换协同信息CI(CoordinatedInformation)。为了测试能正常进行,UT和LT可能要交换一些协同信息,解决测试的同步问题和控制问题。测试的主控者可以是UT,也可以是LT。第八章协议的一致性测试LTPCOUTPCOIUT(n-1)ServiceproviderCI(n)ASP(n-1)ASP图8.1测试模型第八章协议的一致性测试下面的例子说明图8.1模型的基本工作过程,该例子检测IUT是否具有正常的联接能力(假定UT为测试的主控者)。例8.1:⑴UT向IUT发联接请求服务原语CONNECT_retuest;⑵UT告诉LT:已启动联接测试;⑶LT从IUT接收联接请求报文CONNECTreq;⑷如果CONNECTreq合法,LT向IUT发接受联接请求报文CONNECTaccept;⑸LT告诉UT:正确收到联接请求报文,已发出CONNECTaccept报文;⑹UT从IUT接收联接指示服务原语CONNECT_indication(confirm),UT分析有关信息作出IUT是否有正常联接能力的判决(verdict)。第八章协议的一致性测试8.1.3测试工作流程协议一致性测试工作流程如图8.2所示。协议规范(protocolspecification)、服务规范(servicespecification)以及根据两者制定的协议一致性说明PICS和协议测试的附加信息PIXIT都是由标准化组织颁布的。协议一致性测试者所进行的工作分为四步进行。(1)第一步是根据协议规范、服务规范确定测试目的;(2)第二步是生成并描述测试套具(testsuite);(3)第三步是按测试套具对IUT进行测试(这意味着要建立一个测试执行系统);(4)第四步是根据测试记录(testlogging)参照PICS和PIXIT对IUT进行评估(assessment),并给出测试报告(testreport)。测试套具的生成(第二步)又包括几个方面的工作:一是测试序列的生成,二是测试数据的生成,三是将测试序列和测试数据合起来生成并描述测试套具第八章协议的一致性测试ProtocolSpecificationServiceSpecificationPICSPIXITtestpurposetestsuiteIUTtestassessmenttestloggingtestreport图8.2测试工作流程第八章协议的一致性测试IUT的测试序列(testsequence)根据它的状态转换模型FSM(也可以是CCS模型)产生。对于给定测试目的,IUT应该执行的符合协议一致性要求的事件序列叫做测试序列。实际上,测试序列是对IUT进行结构测试(structuraltesting)的事件系列。因此,我们在设计测试序列时,只要考虑IUT的控制结构就可以,无需考虑测试序列中每个事件所携带的参数和数据是什么。例如,下面的测试序列的目的是检查IUT是否有正常联接能力的测试序列。第八章协议的一致性测试例8.2(测试序列):U!CONreq,L?CP,L!CA,U?CONconf这里,U表示UT,L表示LT,!表示发送,?表示接收,CONreq为联接请求服务原语,CONconf为联接认可服务原语,CP为联接请求报文,CA为接受联接请求报文。例8.2和例8.1相似。测试数据(testdata)的产生包括一系列工作。首先,我们必须将服务原语和PDU用确定数据结构描述,然后根据测试目的产生服务原语和PDU的实例(instances),这些实例就是测试数据。最后,我们还必须设计和编程,产生PDU的编码程序(encoder)和解码程序(decoder),前者将PDU实例转变成信道上可传送的报文,后者将接收的报文转变成PDU。编码程序和解码程序由LT调用。第八章协议的一致性测试测试套具是用某种测试执行系统能够认识的语言描述的.测试套具包括两大部分,一部分是测试数据的描述,另一部分是测试案例(testcases)的描述。对于给定测试目的,UT和LT拟将执行的参数化测试事件的集合(测试事件树)叫做测试案例。测试序列引导出测试案例,但两者有较大区别。对同一个测试序列的事件施加不同的测试数据(即测试事件携带不同参数)就产生不同测试案例,因此一个测试序列对应多个测试案例。测试案例不同于测试序列的另一个地方在于,它还必须考虑“选择事件”。所谓“选择事件”是,当UT或LT接收不到IUT的正常响应事件时,UT或LT应该做什么。例8.3中,事件5和6是UT的选择事件(otherwise),该事件的具体内容由协议测试者定义。另外,测试案例与测试方法紧密相关(参见例8.5~8.8)。例8.3为一个非形式化的测试案例,测试目的和例8.1相同。source表示源地址,destination表示目的地址,reason表示拒绝原因。实际的测试事件要携带更多的参数。第八章协议的一致性测试例8.31.U!CONreq(source,destination)2.L?CP3.L!CA(reason)4.U?CONconf5.U?otherwise6.U?otherwise第八章协议的一致性测试8.1.4测试级别IUT的一致性测试分为四级:(1)基本互联测试(basicinterconnectiontest)基本互联测试旨在检查IUT是否具备进一步测试的条件,是否有最小的联接能力,能否接收和发送数据。(2)能力测试(capabilitytest)能力测试旨在检测IUT是否符合动态一致性要求。(3)行为测试(behaviourtest)行为测试旨在测试IUT是否符合动态一致性要求,它又分为两级:覆盖性测试(comprehensivetesting)和穷尽性测试(exhausivetesting)。覆盖性测试只要求测试序列历经IUT的所有转换至少一次就可以,而穷尽性测试要求检查每个转换的前后状态。(4)一致性分解测试(conformanceresolutiontest)。一致性分解测试要求测试执行系统对一致性要求逐项地给出yes/no的肯定回答(例如,IUT实现了第二类协议吗等等)。测试总是由低级向高级逐级进行。下面的例子是行为测试要包括的一部分内容。第八章协议的一致性测试IUT的行为测试分成B、C、D三大组,每个大组包括许多小组,每个小组的测试目的可能要由多个测试序列来实现。B.IUT对合法行为的响应测试序列以及测试数据根据协议规范是合法的。B1联接建立阶段B1.1注重于向IUT发送什么B1.1.1每个状态下改变测试事件B1.1.2改变定时时钟之值B1.1.3改变PDU编码之值B1.1.4改变单个协议参数值B1.1.5多个参数值的组合改变B1.2注重于从IUT接收什么(类同于B1.1)B1.3注重于与IUT的交互(类同于B1.1)B2数据传输阶段(类同于B1)B3联接释放阶段(类同于B1)第八章协议的一致性测试C.IUT对语法上不合法行为的响应测试序列根据协议规范是合法的,但测试数据是不合法的。C1联接建立阶段C1.1注重于向IUT发送什么C1.1.1每个状态下改变测试事件C1.1.2改变PDU编码之值C1.1.3改变单个协议参数值C1.1.4多个协议参数值的组合改变C1.2注重于请求IUT发送什么C1.2.1单个不合法参数值C1.2.2多个不合法参数值的组合C1.3注重于与IUT的交互(类同于C1.1)C2数据传输阶段(类同于C1)C3联接释放阶段(类同于C1)第八章协议的一致性测试D.IUT对不合适事件(inopportuneevents)的响应不合适事件为异常事件,对协议规范来说,它是不合法的。D1联接建立阶段D1.1注重于向IUT发送什么D1.1.1每个状态下改变测试事件D1.1.2改变定时时钟之值D1.1.3改变PDU编码之值D1.1.4改变单个协议参数值D1.1.5多个参数值的组合改变D1.2注重于从IUT接收什么(类同于D1.1)D1.3注重于与IUT的交互(类同于D1.1)D2数据传输阶段(类同于D1)D3联接释放阶段(类同于D1)第八章协议的一致性测试8.1.5要考虑的问题协议一致性测试不但在理论上而且在工程上还有许多问题需要进一步研究,这包括:·测试覆盖率怎样度量?各级测试包括多少测试就足够了?·怎样选取最小的测试序列去检测最多的协议错误?·如果协议规范本身有错误,不完整,存在二义性,这将给协议一致性测试带来什么问题,怎样处理?·怎样描述测试?测试描述至少有二种途径:用测试案例,用一组程序,用参考协议实体。哪种方法最好?·怎样产生测试数据?