测试用例生成方法及装置与流程

文档序号:12597006阅读:213来源:国知局
测试用例生成方法及装置与流程

本发明属于软件技术领域,特别涉及一种测试用例生成方法及装置。



背景技术:

数据采集与监控系统(Supervisory Control And Data Acquisition,简称SCADA)广泛应用在油气调控、石化炼油、水利调度、电力调度、轨道交通等领域。早期SCADA系统的主要目的是实现特定区域内的数据采集、控制、监视等功能,网络相对独立,因此较少考虑系统安全性。然而随着工业技术和信息技术的发展,SCADA系统之间以及SCADA系统和其他网络之间开始互联互通,比如现在很多SCADA系统与企业信息管理系统联通,并间接接入互联网,所以对于外部的入侵和攻击行为,SCADA系统已经不具有物理防护能力,SCADA系统的安全性和可靠性大大降低。因此,对于SCADA系统的协议安全性进行测试和分析是目前亟待解决的问题之一。

常用的SCADA系统工业协议主要包括IEC-60870、IEC-61850、Modbus、CIP(Common Industrial Protocol)、DNP3.0(Distributed Network Protocol Version3.0,分布式网络规约)等。其中DNP3.0协议的功能较为全面,数据传输量较大,因此使用范围较广。由于相关DNP3.0协议软件源代码的不透明性,因此需要采用模糊测试方法对DNP3.0协议进行测试。现有的模糊测试方法是输出大量的畸形数据到目标程序中,并监视目标程序执行过程中产生的任何异常,记录下导致异常的输入数据,从而定位目标程序中缺陷的位置,发现可能存在的安全漏洞。

模糊测试中最为关键的问题就是如何构造模糊测试数据,也即测试用例的生成。现有的模糊测试在生成测试用例时,通过在输入数据空间内任意取值,自动产生大量随机的测试用例,最终发送至系统中进行测试。然而,通过这样的方法产生的测试用例由于具有盲目性,因此在检测到发现漏洞时,不能够及时准确地判断出漏洞发生的位置或根源,还需要大量冗余测试输入才能够进行准确定位,从而导致随机测试时间过长,降低测试效率。且现有技术中也没有专门应用于DNP3.0协议的测试用例,因此测试缺乏针对性。



技术实现要素:

本发明提供了一种测试用例生成方法及装置,用以解决上述至少一个技术问题。

第一方面,本发明提供了一种测试用例生成方法,用于针对DNP3.0协议生成测试用例,所述方法包括:

构造符合DNP3.0协议规约的数据包;

在所述数据包的关联性字段中选择至少一个字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段进行变异,以生成与所述其他字段的数据不匹配的测试用例;

其中,所述关联性字段,为其包含的数据限制其他字段的设置或被其他字段的设置所限制的字段。

可选地,在所述数据包的关联性字段中选择至少一个字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段进行变异,以生成与所述其他字段的数据不匹配的测试用例的步骤,包括:

在所述数据包的关联性字段中,选择位于应用层的数据对象字段作为目标字段,保持除数据对象字段以外的其他字段不变,对数据对象字段进行变异,以生成与应用层报文的对象标题字段中的至少一个字段的数据不匹配,和/或与应用层报文中功能码字段的数据不匹配的测试用例。

可选地,所述对数据对象字段进行变异的步骤,包括:

对数据对象字段中的数据进行变异,以使数据对象的类型改变;

和/或,对数据对象字段中的索引值进行变异;

和/或,对数据对象字段中的数量进行变异。

可选地,在所述数据包的关联性字段中选择至少一个字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段进行变异,以生成与所述其他字段的数据不匹配的测试用例的步骤,包括:

在所述数据包的关联性字段中,选择应用层的对象标题字段中的至少一个字段作为目标字段,保持除目标字段以外的其他字段不变,将目标字段进行变异,以生成与应用层报文中数据对象字段的数据不匹配,和/或与应用层报文中功能码字段的数据不匹配,和/或与对象标题字段中非目标字段的数据不匹配的测试用例。

可选地,所述在数据包的关联性字段中红,选择应用层的对象标题字段中的至少一个字段作为目标字段,保持除目标字段以外的其他字段不变,将目标字段进行变异,以生成与应用层报文中数据对象字段的数据不匹配,和/或与应用层报文中功能码字段的数据不匹配,和/或与对象标题字段中非目标字段的数据不匹配的测试用例的步骤,包括:

选取对象标题字段中对象字段作为目标字段,保持除所述对象字段以外的其他字段不变,将对象字段进行变异,以生成与所述功能码字段的数据不匹配,和/或与所述数据对象字段的数据不匹配的测试用例;

或,

选取对象标题字段中限定词字段作为目标字段,保持除所述限定词字段以外的其他字段不变,将限定词字段进行变异,以生成与对标题中的变程字段的数据以及数据对象字段中的索引值不匹配的测试用例;

或,

选取对象标题字段中变程字段作为目标字段,保持除所述变程字段以外的其他字段不变,将变程字段进行变异,以生成与所述数据对象字段中的索引值不匹配的测试用例。

可选地,所述在数据包中选择至少一个字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段中的数据进行变异,以生成测试DNP3.0协议的测试用例的步骤,包括:

在所述数据包中,选择应用层报头中的控制字段作为目标字段,和/或选择传输层报头中的控制字段作为目标字段,和/或选择数据链路层报头中的控制字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段中的数据进行变异,以生成与至少一个所述其他字段的数据不匹配的测试用例。

第二方面,本发明提供了一种测试用例生成装置,用于生成针对DNP3.0协议的测试用例,所述装置包括:

数据包构造单元,构造符合DNP3.0协议规约的数据包;

字段选择变异单元,用于在所述数据包的关联性字段中选择至少一个字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段进行变异,以生成与所述其他字段的数据不匹配的测试用例;其中,所述关联性字段,为其包含的数据限制其他字段的设置或被其他字段的设置所限制的字段。

可选地,所述字段选择变异单元,还用于在所述数据包的关联性字段中,选择位于应用层的数据对象字段作为目标字段,

保持除数据对象字段以外的其他字段不变,对数据对象字段进行变异,以生成与应用层报文的对象标题字段中的至少一个字段的数据不匹配,和/或与应用层报文中功能码字段的数据不匹配的测试用例。

可选地,所述字段选择变异单元,还用于:

对数据对象字段中的数据进行变异,以使数据对象的类型改变;

和/或,对数据对象字段中的索引值进行变异;

和/或,对数据对象字段中的数量进行变异。

可选地,所述字段选择变异单元,还用于在所述数据包的关联性字段中,选择应用层的对象标题字段中的至少一个字段作为目标字段,保持除目标字段以外的其他字段不变,将目标字段进行变异,以生成与应用层报文中数据对象字段的数据不匹配,和/或与应用层报文中功能码字段的数据不匹配,和/或与对象标题字段中非目标字段的数据不匹配的测试用例。

可选地,所述字段选择变异单元,还用于:

选取对象标题字段中对象字段作为目标字段,保持除所述对象字段以外的其他字段不变,将对象字段进行变异,以生成与所述功能码字段的数据不匹配,和/或与所述数据对象字段的数据不匹配的测试用例;

或,

选取对象标题字段中限定词字段作为目标字段,保持除所述限定词字段以外的其他字段不变,将限定词字段进行变异,以生成与对标题中的变程字段的数据以及数据对象字段中的索引值不匹配的测试用例;

或,

选取对象标题字段中变程字段作为目标字段,保持除所述变程字段以外的其他字段不变,将变程字段进行变异,以生成与所述数据对象字段中的索引值不匹配的测试用例。

可选地,所述字段选择变异单元,还用于在所述数据包中,选择应用层报头中的控制字段作为目标字段,和/或选择传输层报头中的控制字段作为目标字段,和/或选择数据链路层报头中的控制字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段中的数据进行变异,以生成与至少一个所述其他字段的数据不匹配的测试用例。

本发明提供了一种测试用例生成方法及装置,该方法中,首先构造符合DNP3.0协议规约的数据包,在所述数据包的关联性字段中选择至少一个字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段进行变异,从而生成用于测试DNP3.0协议的测试用例。由于本发明提供的方法在关联性字段中选择目标字段进行变异,因此在实际测试中,本发明提供的方法能够根据实际的测试需要自行选择指定的目标字段,且选择的目标字段的变异能够破坏与关联性字段之间的关系,进而能够对DNP3.0协议进行有针对性的测试,避免现有技术中输入较多的盲目性的测试用例,有效节约了测试时间,提高测试效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些示例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术中DNP3.0协议中数据链路层、传输层、应用层之间的关系示意图;

图2a-2c为现有技术中Q码为0和3,1和4,2和5且索引大小为0时变程字段和数据段的报文格式示意图;

图3a-3d为现有技术中Q码为7且索引大小分别为0,1,2,3时变程字段和数据段的报文格式示意图;

图4为本发明提供的测试用例生成方法流程图;

图5为本发明提供的数据抓包示意图;

图6为本发明提供的数据分析示意图;

图7为本发明提供的测试用例生成装置结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为便于理解,首先对本发明中涉及的DNP3.0工业控制协议以及该协议规定的数据格式进行详细说明。

DNP3.0协议在实际数据交互过程中,将源站数据组装成DNP3规约格式并以TCP/IP协议进行数据打包后在网络中传输,在组装数据的过程中,分为应用层、传输层和数据链路层。

图1示出了DNP3.0协议中数据链路层、传输层、应用层之间的关系图。其中,数据链路层报头采用可变帧长格式FT3,一个FT3帧被定义为一个固定长度的报头,固定的报头含有2字节起始字,1字节长度,1字节链路层控制字,1个16位目的址,1个16位源地址和1个16位CRC校验码。报头后跟随可选用的数据块,每个数据块附有一个16位的CRC校验码。传输层报头包含传输控制字,用于多帧报文组装。应用层中包括请求/响应报头、对象标题字段以及数据对象字段。

由于应用层的各个字段是本发明实现生成测试用例的过程中较为重要的几个字段,因此,下面结合附图1对应用层中的各个字段进行详细解释。

(1)请求/响应报头字段

请求/响应报头,用于标识报文的目的,常被称为应用规约控制信息(APCI)。请求/响应报头包含功能码字段,用于表示报头后面数据对象的功能。例如,当功能码为选择(select)时,报头后面被操作的数据对象则为控制继电器输出、模拟量输出或模式(pattern)控制组,而功能码为操作(operate)时,报头后面被操作的数据对象字段则为与输出或设置点有关的控制块。可以看出功能码字段与后面的数据对象字段存在着一定的关联性。

(2)对象标题字段

对象标题字段,用于标识后随的数据对象,也就是说,后随的数据是由对象标题字段所标识的指定类型的数据。如图1所示,报头之后可以包含一个或多个对象标题字段和任选的与之相伴的数据对象字段。

其中,对象标题字段中包含三个字段,分别为:

a)对象字段(Object Field),用于标识后续的数据对象的类型,包含对象组别(Group)和变体(Variation)两部分,两者结合起来唯一地规定报文所指定的数据对象;

b)限定词字段(Qualifier Field),用于规定变程字段(Range)的意义,包含索引大小(Index Size)和Q码(Qualifier Code)两部分。其中,索引的大小决定数据对象的索引(Index)所占的字节数。Q码决定变成字段的意义与长度,具体来说:

当Q码为0至5时,变程字段包含8/16/32毕特的起始索引与结束索引,所指的是从起始索引到结束索引的所有数据对象,如图2(a)至2(c)所示分别是Q码为0和3,1和4,2和5且索引大小为0时变程字段和数据段的报文格式示意图,Do表示数据对象;

当Q码为6时,没有变程字段,所指的是全部数据对象,索引大小为0,由于没有变程字段所以示图省略;

当Q码为7至9时,变程字段分别占8/16/32毕特,且表示一个数量值,它指明后随的数据对象的数量。并且,如果索引大小等于0,则跟在变程字段后面的内容为索引值从0至Q-1的Q个顺序的数据对象,没有索引字段。如果为索引大小为1,2或3,则跟在变程字段后面的内容包含Q对索引与数据对象,即不相关的Q个数据对象,且索引所占的字节数由索引大小决定,其中Q为变程字段所表示的数量值。如图3(a)至3(d)所示是Q码为7且索引大小分别为0,1,2,3时变程字段和数据段的报文格式示意图。Q-码8与Q-码7基本相同,唯变程字段变为16比特。Q-码9与Q-码7基本相同,唯变程字段变为32比特。

当Q码为11时,当所描述的对象需要用一个对象标识码(例如文件对象的标识码或组态标题)作为唯一的识别时使用该Q码,变程字段占8比特,表示一个数量值,它指定后随的对象识别码对象的数目。

c)变程字段(Range),被用以索引数据或者作为识别符,表明数据对象的量,起点与终点的索引或者所讨论的对象的识别等,如果限定词字段指出没有变程字段,则变程字段也可以没有。

(3)数据对象字段

由于对象标题的三个字段可以灵活组合使用,因此数据对象字段可以根据对象标题的三个字段的不同设置表示多种数据类型。不难理解的是,不同的数据类型可以适合主站和外站之间在不同情形下进行数据通信。

具体来说,例如,当外站收集数据并向主站传输时,数据对象字段包括:二进制输入数据,用于监控设备的状态,例如管道压力值处于正常或警报范围;模拟输入数据,用于传输电压,电流,功率,水位和水温等;计数输入数据,用于传输千瓦小时或流体体积等;文件,用于传输配置数据。当主站向外站分发控制指令时,数据类型可以包括:控制指令输出数据,用于输出控制指令,例如关闭/打开断路器或者阀门、开始/停止马达的指令;模拟输出数据,用于设置规定的压力或者电压值。当应用于其它数据通信时,还包括同步时间和日期,发送历史或日志数据等。

数据对象字段除了与对象标题中的三个字段具有一定的关联性,还与请求/响应报头字段中的功能码字段具有一定的联系。

具体来说,数据对象字段中的数据类型就需要与相应的功能码匹配。例如,当应用层报头中的功能码为操作(operate)时,报头后面的数据对象必须是与输出或设置点有关的控制块,这是两个字段间存在制约性的情况,再加上数据对象的类型是由对象标题中的对象字段来标识和决定的,从而形成多个字段间存在相关性和制约性的情况。

基于上述内容,第一方面,本发明实施例提供了一种测试用例生成方法,用于生成测试DNP3.0协议的测试用例,如图4所示,包括:

S101、构造符合DNP3.0协议规约的数据包;

S102、在数据包的关联性字段中选择至少一个字段作为目标字段,保持数据包中除目标字段以外的其他字段不变,对目标字段进行变异,以生成与其他字段的数据不匹配的测试用例;

其中,这里的关联性字段,为其包含的数据限制其他字段的设置或被其他字段的设置所限制的字段。

本发明提供的测试用例生成方法中,首先构造符合DNP3.0协议规约的数据包,在所述数据包的关联性字段中选择至少一个字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段进行变异,从而生成用于测试DNP3.0协议的测试用例。由于本发明提供的方法在关联性字段中自行选择目标字段进行变异,因此在实际测试中,本发明提供的方法能够根据实际的测试需要自行选择指定的目标字段,且选择的目标字段的变异能够破坏与关联性字段之间的关系,进而能够对DNP3.0协议进行有针对性的测试,避免现有技术中输入较多的盲目性的测试用例,有效节约了测试时间,提高测试效率。

在实际应用中,这里的关联性字段可以包括功能码字段、数据对象字段、以及对象标题字段等等,当然还可以包括其他字段,本发明对此不作具体限定。这里的关联性字段间的限制可以以各种形式体现在多个方面,例如这里的功能码字段与数据对象字段存在着一定的关联性,如果功能码不同则限制了可操作的数据对象字段也是不同的。再例如,这里的对象标题字段中的各个字段之间、或与数据对象字段之间也存在着一定关联性。对象字段的设置可以用于指定数据对象,对象字段可以唯一地标识数据对象的类型,也即可以给定数据对象的结构;对象标题中的限定词字段可以用于规定变程字段的意义,即限制变程字段应该如何解释;变程字段表明数据对象的量。

此外,在实际应用中,在构造符合DNP3.0协议规约的数据包时,对于DNP3.0协议规定的每一种功能码,都需要确定与功能码对应的数据对象的类型及其所包含的字段。此外,还需要对对象标题中的限定词字段和变程字段按照协议规约进行多种组合。最后可以根据组合和数据对象类型构建合法的符合DNP3.0协议的应用层报文。可见,这里的构建的应用层报文可以包括多种组合的形式,因此需要说明的是,这里的除目标字段以外的其他字段并不是在所有组合的情况下都是一成不变的,也即并不是在所有组合情况下都取同样的值。而是在每种组合情况下,针对每个具体的构造好的数据包,在生成测试用例的过程中保持不变。如果更换为另外一种组合,那么这些字段也有可能根据另外一种组合的要求进行适应性的变化。

可以理解的是,在具体实施时,上述方法实施例的步骤S102可以通过多种方式来实现,下面对其中几个可选的实施例进行详细说明。

(一)对数据对象字段进行变异,生成与对象标题字段或功能码字段不匹配的测试用例。

在步骤S102一种可选的实施例中,可以在数据包的关联性字段中,选择位于应用层的数据对象字段作为目标字段,保持除数据对象字段以外的其他字段不变,对数据对象字段进行变异,以生成与应用层报文的对象标题字段中的至少一个字段的数据不匹配,和/或与应用层报文中功能码字段的数据不匹配的测试用例。

其中,上述对数据对象字段进行的变异可以具体包括:对数据对象字段中的数据进行变异,以使数据对象的类型改变;和/或,对数据对象字段中的索引值进行变异;和/或,对数据对象字段中的数量进行变异。

例如,由于这里的数据对象类型与功能码字段相关。对于每种功能码,当确定与功能码对应的数据对象的类型后,如果对数据对象字段中的数据进行随机变异,以使数据对象的类型发生改变,则改变后的数据对象的类型就与当前功能码的设置不匹配,从而生成与功能码字段包含的内容不匹配的测试用例。

再例如,这里的数据对象的索引值以及数据对象数量与对象标题中的限定词字段和变程字段相关。当限定词字段和变程字段的组合确定后,数据对象的索引值和数量即确定,如果对数据对象的索引值进行变异或者对数据对象的数量进行变异,则就会导致变异后的数据对象字段与限定词字段和变程字段与不匹配,从而生成与限定词字段以及变程字段包含的内容不匹配的测试用例。

当然,在某些情况下也可以将上述三种变异方式组合使用,从而形成与多个字段不匹配的测试用例,本发明对此不作具体限定。

(二)对对象标题字段进行变异,生成与数据对象字段或功能码字段不匹配的测试用例。

由前文中对于DNP3.0协议的叙述中可知,对象标题字段与其他字段例如数据对象字段或功能码字段的关联性很强,正因为具有较强的关联性,因此选择对象标题字段作为目标字段进行变异的方法生成的测试用例大多数均为有效的测试用例,因此下面本发明将对对于对象标题字段的变异进行详细的说明。

具体来说,在步骤S102一种可选的实施例中,在数据包的关联性字段中,选择应用层的对象标题字段中的至少一个字段作为目标字段,保持除目标字段以外的其他字段不变,将目标字段进行变异,以生成与应用层报文中数据对象字段的数据不匹配,和/或与应用层报文中功能码字段的数据不匹配,和/或与对象标题字段中非目标字段的数据不匹配的测试用例。

示例一、选取对象标题字段中对象字段作为目标字段,保持除所述对象字段以外的其他字段不变,将对象字段进行变异,以生成与所述功能码字段的数据不匹配,和/或与所述数据对象字段的数据不匹配的测试用例。

例如,当功能码为选择select功能对应的功能码时,报头后面的对象可以是控制继电器输出、模拟量输出或模式控制组等选择性功能字段,如果此时对对象字段进行变异,例如,将其变异为指示后面的数据对象字段为操作(operate)功能的字段,则此时将产生与功能码字段的不匹配,生成与功能码字段不匹配的测试用例。

另外如果只对决定数据对象类型的对象字段变异,而后面的数据对象不变,则也同样会不匹配的现象,生成测试用例。因为不同类型数据对象所包含的字段是各不相同的,例如对象段为0x0c01时,数据对象的类型为控制继电器的输出块,该类型的数据对象所包含的字段包括7位控制码(control code)、7位计数(count)、32位合时间(on time)、32位分时间(off time)、8位状态(status),而对象段为0x1401时,数据对象的类型为32位二进制计数值,该类型的数据对象所包含的字段包括8位标志(Flag)和32位数值(Value),也就是说不同类型的数据对象所包含的字段长度和意义均不相同,因此对对象字段进行变异即改变数据对象的类型而保持后续实际的数据对象不变,使得前后不匹配,产生对象字段与数据对象字段不匹配的测试用例。

示例二、选取对象标题字段中限定词字段作为目标字段,保持除所述限定词字段以外的其他字段不变,将限定词字段进行变异,以生成与对标题中的变程字段的数据以及数据对象字段中的索引值不匹配的测试用例;

例如,限定词字段的索引大小和Q码原先都为0,则变程字段包含8毕特的起始索引与结束索引,后续不包含数据对象的索引值,数据对象的索引从起始索引到结束索引。此时对限定词字段进行变异,如果索引大小和Q码变异为7和1,则变程字段应该只包含8毕特的数量值,后续包含数据对象的索引值且索引值占8比特,然而实际上变程字段只包含8毕特的起始索引与结束索引,且后续不包含数据对象的索引值,从而生成变成字段与数据对象字段中的索引值不匹配的测试用例。

另外对于限定词字段的变异还有可能变异超出协议规约中的指定值,则目标测试系统同样地很有可能对此不能作出正确处理,从而同样生成变成字段与数据对象字段中的索引值不匹配的测试用例。

示例三、选取对象标题字段中变程字段作为目标字段,保持除所述变程字段以外的其他字段不变,将变程字段进行变异,以生成与所述数据对象字段中的索引值不匹配的测试用例。

例如,当限定词字段中的Q码为8时,变程字段是16bit的数量值,与后续数据对象的数量是匹配的,而如果对变程字段进行变异,而后面数据对象的数量不变,从而变异之后两者的设置不匹配,则目标测试系统很有可能不能正确的判断数据对象的结束位置,从而生成变程字段与数据对象字段中的索引值不匹配的测试用例。

不难理解的是,上述三种变异方式仅仅只是本发明提供的几种变异示例,还可以对上述变异方式进行改进,例如选取对象字段,限定词字段和变程字段进行组合变异,产生对象标题与数据对象多维度不匹配的测试用例等等,本发明对此不作具体限定。

(三)对各个协议层的控制字段进行变异,生成与数据包其他字段内容不匹配的测试用例。

在数据包中,选择应用层报头中的控制字段作为目标字段,和/或选择传输层报头中的控制字段作为目标字段,和/或选择数据链路层报头中的控制字段作为目标字段,保持所述数据包中除目标字段以外的其他字段不变,对所述目标字段中的数据进行变异,以生成与至少一个所述其他字段的数据不匹配的测试用例。

具体来说,上述各个协议层的控制字段与其它字段之间也具有一定的相关性,因此选择其中的至少一个控制字段作为目标字段并对其进行变异,也同样可以生成与其他字段的数据不匹配的测试用例。

不难理解的是,上述实施例中的举例说明只是为了便于更好地理解本发明实施例提供的测试用例的生成方法,并不能构成对本发明的具体限定。且上述的各个优选实施方式之间不会相互影响,各个优选实施方式之间的任意组合所得到的方案均应该落入本发明的保护范围。

此外,在具体实施时,对于上述各个实施方式,本发明提供的方法可以使用模糊测试框架生成用于测试用例数据定义的文件,也就是说,用于测试用例数据定义的文件是包含以下标签域的xml文件:

1)DataModel标签域,用于定义数据结构,此标签下还可以有若干级、若干种下级标签。使用这些子标签可以比较容易的定义数据的类型,大小,各个数据块之间的关系,以及CRC校验和等。此外,可以定义多个DataModel,多个DataModel之间可以有关系也可以没有关系。

2)StateModel标签域,用于定义测试的逻辑,实际上相当于一个状态机。下级标签包括State用于表示一个状态,每个State中又可以包含若干个Action标签,用于执行发送数据包之类的命令。

3)Agent标签域,用于检测exception、crash等,即用来监测被测目标的反应。

4)Test标签域,用于指定将要使用到的state、Agen、publisher等,用什么方法发数据,还可指定使用什么方法加工数据。

下面以前文中叙述过的一种测试用例的生成方法为例,详细说明如何使用模糊测试框架生成用于测试用例数据定义的文件。

在测试用例中功能码为选择(select),决定变程字段和索引长度的限定词字段变异,而变程字段和索引本身不变。对象标题的对象字段(Object_field)为0x0c01,所以后续跟随的数据对象为控制继电器的输出块,该类型的数据对象所包含的数据对象(Object_Data)字段包括8位控制码(control code)、8位计数(count)、32位合时间(on time)、32位分时间(off time)、8位状态(status);对象标题的限定词字段变异前为0x28,即索引大小为2,Q码为8,对照前述限定词字段和变程字段的组合,所以后续数据对象中索引占2个字节,变程字段的意义为一个数量值且占2个字节,所以在本实施例中给变程段分配2个字节且将其值设为1,符合后续数据对象的个数。在此符合协议规约的正常数据包的基础上,变异限定词字段,而其它字段保持不变,从而能够产生畸形数据包,使得目标测试系统有可能产生异常。优选实施例中还涉及校验位的设置。

测试结果:将生成的测试用例进行抓包并用wireshark进行分析,得到如图5所示的数据抓包图以及如图6所示的数据分析图。其中,限定词字段变异为0x40,且提示为畸形数据包(Malformed Packet)。

第二方面,本发明提供了一种测试用例生成装置,用于生成针对DNP3.0协议的测试用例,如图7所示,该装置包括:

数据包构造单元201,用于,构造符合DNP3.0协议规约的数据包;

字段选择变异单元202,用于在数据包的关联性字段中选择至少一个字段作为目标字段,保持数据包中除目标字段以外的其他字段不变,对目标字段进行变异,以生成与其他字段的数据不匹配的测试用例;其中,关联性字段,为其包含的数据限制其他字段的设置或被其他字段的设置所限制的字段。

在具体实施时,字段选择变异单元202,还用于在数据包的关联性字段中,选择位于应用层的数据对象字段作为目标字段,

保持除数据对象字段以外的其他字段不变,对数据对象字段进行变异,以生成与应用层报文的对象标题字段中的至少一个字段的数据不匹配,和/或与应用层报文中功能码字段的数据不匹配的测试用例。

在具体实施时,字段选择变异单元202,还用于:

对数据对象字段中的数据进行变异,以使数据对象的类型改变;

和/或,对数据对象字段中的索引值进行变异;

和/或,对数据对象字段中的数量进行变异。

在具体实施时,字段选择变异单元202,还用于在数据包的关联性字段中,选择应用层的对象标题字段中的至少一个字段作为目标字段,保持除目标字段以外的其他字段不变,将目标字段进行变异,以生成与应用层报文中数据对象字段的数据不匹配,和/或与应用层报文中功能码字段的数据不匹配,和/或与对象标题字段中非目标字段的数据不匹配的测试用例。

在具体实施时,字段选择变异单元202,还用于:

选取对象标题字段中对象字段作为目标字段,保持除对象字段以外的其他字段不变,将对象字段进行变异,以生成与功能码字段的数据不匹配,和/或与数据对象字段的数据不匹配的测试用例;

或,

选取对象标题字段中限定词字段作为目标字段,保持除限定词字段以外的其他字段不变,将限定词字段进行变异,以生成与对标题中的变程字段的数据以及数据对象字段中的索引值不匹配的测试用例;

或,

选取对象标题字段中变程字段作为目标字段,保持除变程字段以外的其他字段不变,将变程字段进行变异,以生成与数据对象字段中的索引值不匹配的测试用例。

在具体实施时,字段选择变异单元202,还用于在数据包中,选择应用层报头中的控制字段作为目标字段,和/或选择传输层报头中的控制字段作为目标字段,和/或选择数据链路层报头中的控制字段作为目标字段,保持数据包中除目标字段以外的其他字段不变,对目标字段中的数据进行变异,以生成与至少一个其他字段的数据不匹配的测试用例。

由于本实施例所介绍的测试用例生成装置为可以执行本发明实施例中的测试用例生成方法的装置,故而基于本发明实施例中所介绍的测试用例生成的方法,本领域所属技术人员能够了解本实施例的测试用例生成装置的具体实施方式以及其各种变化形式,所以在此对于该测试用例生成装置如何实现本发明实施例中的测试用例生成方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中测试用例生成方法所采用的装置,都属于本申请所欲保护的范围。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的网关、代理服务器、系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1