一种分布式实时测试系统多路测试数据压缩与归并方法

文档序号:6511505阅读:316来源:国知局
一种分布式实时测试系统多路测试数据压缩与归并方法
【专利摘要】一种分布式实时测试系统多路测试数据压缩与归并方法,有九大步骤:一、根据变量特性制定收集策略;二、查询缓存中最新一帧数据,如果ID与变量值相同,则保存时间标签和变量ID;三、主控节点将实时仿真节点传来数据保存各文件中;四、归并处理信息并保存数据结构中;五、遍历数据文件,如果只有时间标签和变量ID,则从前一帧数据中获取变量值补齐本帧数据;六、获取所有文件第一帧数据,并且比较得出时间标签最小的一帧;七、比较获得的时间标签和前一帧是否相同,若不同,则向输出文件写一行数据;八、将获取的这帧数据值更新到id_value_map中,并且将变化信息更新以便下次比较;九、循环执行步骤六—八,直至所有文件都读取完毕,将最后一行写入输出文件中。
【专利说明】一种分布式实时测试系统多路测试数据压缩与归并方法
【【技术领域】】
[0001]本发明提供一种分布式实时测试系统多路测试数据压缩与归并方法,它涉及基于分布式架构的实时测试系统的测试数据收集,属于嵌入式软件测试【技术领域】。
【【背景技术】】
[0002]随着嵌入式系统在航空航天等领域的应用面不断扩大,针对嵌入式软件的测试需求也日益迫切。一方面,为成功的完成测试任务,测试系统必须能够采集测试过程中产生的大量数据,同时针对航空航天等领域的测试系统往往要求有很高的实时性,必须能够在规定的时间点上准确无误的完成预定的任务;另一方面,随着嵌入式系统本身的复杂性越来越强,对测试系统容纳负载的能力也相应提出越来越高的要求,采用分布式架构的测试系统不仅可以将负载平均分配到各个节点互不干扰的运行,也可以提供更多的载体供不同的硬件接口板卡工作,以满足嵌入式测试中日益增长的对于多种总线接口,多种通讯协议同时工作的要求,并且可以降低每个节点计算机的功耗,提高系统的可靠性。
[0003]分布式实时测试系统采用主控节点加实时仿真节点的结构,其中,主控节点负责实时性要求不高的任务,如人机交互、控制测试过程、分析测试数据等;实时仿真节点则负责仿真与被测件通讯的组件并通过总线接口与被测件完成数据交互,为满足高实时性测试要求,实时仿真节点必须在规定的时间点完成任务调度。
[0004]分布式实时测试系统测试过程中产生的数据有两个突出的特点,一是活动时间性强,要求在一定的时刻和/或一定的时间内自外部环境收集数据、按彼此联系存取以获得的数据和处理收集的数据、再及时作出相应;而是要处理“短暂”数据,这种数据只在一定的时间范围内有效,过时则无意义了。这就要求分布式实时测试系统具有将每一时刻测试数据的变化都收集起来的能力, 这意味着需要收集的数据量十分巨大,在通过网络传输之前对其进行压缩处理能够节省大量的传输时间。另外由于测试数据来源为多个实时仿真节点,一方面测试系统需要收集的数据量进一步增大,另一方面在测试结束后需要对多路测试数据进行归并处理。
[0005]因此,需要一种方法,能够在不占用大量系统资源和运算时间的情况下对测试数据进行压缩处理,并且在网络传输之后能够将压缩的数据还原,不造成数据丢失;同时,这种方法还要能够将多个实时仿真节点收集的多路测试数据归并为一路按时序排列的测试数据。

【发明内容】

[0006]1.目的:本发明的目的在于提供一种分布式实时测试系统多路测试数据压缩与归并方法,这种方法能够在不占用大量系统资源和运算时间的情况下对测试数据进行压缩处理,并且在网络传输之后能够将压缩的数据还原,不造成数据丢失;同时,这种方法还要能够将多个实时仿真节点收集的多路测试数据归并为一路按时序排列的测试数据。
[0007]2.技术方案:为解决上述技术问题,本发明提供了一种分布式实时测试系统多路测试数据压缩与归并方法,它包括以下步骤:
[0008]步骤一:减少测试数据的收集次数;测试系统收集数据的方式有两种,一种是需要按照某个时间间隔收集的数据,比如按照5ms的周期采集模拟量或者每隔Ims查询某个接口上的电平是否变为高电平;另一种方式是不需要主动地收集数据,比如串口上的数据只需在板卡检测到总线上有新数据并触发中断才收集数据;本方法通过对这两种数据进行区分并确立不同的收集策略,大大减少测试过程中需要传送的测试数据,这是对测试数据进行的第一层压缩处理。
[0009]步骤二:在收集数据的过程中,每一帧测试数据包含以下信息:变量ID,收集到数据的时刻对应的时间标签,变量的数值。变量ID用于区分测试过程中的各个不同的变量,时间标签用于把当前收集到的数据和历史数据进行区分。在本方法的设计中,每一帧数据在存放到一级缓存中之前,对缓存中前一帧数据进行比对,如果变量ID与变量值都相同,则只在缓存中添加一帧时间标签和变量ID,不需要再收集重复的变量值。由于不需要移动缓存的索引,不需要进行指针运算操作,这种比较消耗很小,然而在以很高频率收集某个变量值的情况下可以去掉很多冗余信息。在测试完成后分析数据的时候,只要从前一帧数据中获取变量的值即可还原所有的测试数据。
[0010]步骤三:测试过程中主控节点将实时仿真节点传来的测试数据按照节点保存到不同的文件中。测试过程中实时仿真节点将测试数据发送到主控节点,主控节点把测试数据保存到磁盘文件中,每个实时仿真节点对应一个文件,由于实时仿真节点发送数据的过程具有时序性故文件中的数据已经按照时间标签进行了排序。
[0011]测试停止后对测试数据进行还原和归并处理,具体流程如错误!未找到引用源。
[0012]步骤四:对数据归并处理进行准备;获取数据归并处理需要的信息并将信息保存到数据结构中,具体包括以下几个方面:需要进行归并的各文件,将其索引保存到一个数据结构中。随着本发明中的方法应用于不同的系统中,保存的文件索引和所用的数据结构可能有所不同,可以直接保存文件路径,也可以保存打开文件对应的ifstream对象或者CFile对象等等;采用的数据结构可以采用数组、链表、vector等等,对方法本身的实现并无影响;另外,本次处理的测试数据属于哪些变量也是必须的信息,每个变量的值使用一个字符串保存下来,每个变量的ID对应一个字符串组成一对,将其保存入map中,本map用于保存在一个时间标签内的所有变量的值,将其命名为id_value_map。定义一个vector用于记录每个时间标签内或者说每个时刻值哪些变量发生了变化,在本发明所述方法中,归并后的数据文件每一行记录一个时间标签的所有测试数据,在行尾用分号分割的字符串将哪些变量有变化表示出来,例如:第一二列数据在本时刻有变化则行尾字符串为1;2,在数据处理过程中将变量是否变化的信息保存在vecModifiedCols中。
[0013]步骤五:按照顺序对所有数据文件进行处理,遍历文件中所有数据,如果发现某一帧数据只有时间标签和ID没有保存变量值,则从前一帧数据中获取变量值补齐本帧数据。
[0014]步骤六:遍历所有的文件,获取文件中第一帧数据,由于所有文件中的数据都是各实时仿真节点按照时序关系进行收集的,所以文件的第一帧数据肯定是本文件中时间标签最小的一帧,也就是说产生时间最早的一帧数据。比较各个文件的第一帧数据得到其中时间标签最小的一帧数据。如果获取某一文件第一帧数据失败,则说明该文件中的数据已经全部被获取,从保存文件索引的数据结构中将其删除,下次遍历不必再打开这个文件。[0015]步骤七:判断所获得的这帧数据中的时间标签是否与记录的上一帧数据的时间标签相等,如果不相等,则说明这是属于新的时间标签的测试数据,故前一个时间标签的所有测试数据都已获取完毕,应该将上一时间标签的测试数据都输出到归并后的输出文件中。如果相等,则说明这一行数据还没有拼接完成,不需要向输出文件中写数据,继续进行步骤八即可;这些数据在输出文件中应该存在于同一行。首先向文件中写入时间标签,然后从id_value_map中获取变量的值,按照顺序输出到同一行,最后将vecModifiedCols拼成一个以分号分割的字符串输出到行尾。每列中间可以空格或者制表符进行分割,该分割符只要能将各列分开即可,对本发明中的方法实现没有影响。输出一行数据后将vecModifiedCols清空以便保存下一行数据的变量变化信息。如果是第一帧数据也就是说上一帧数据的时间标签为0则不需要向输出文件中写数据。
[0016]步骤八:将当前获取的这帧测试数据的时间标签更新到last_lable中,以便下次获取测试数据后进行比较;同时根据这帧测试数据中的变量ID获取变量在步骤四所述id_value_map中的位置,将所得位置信息插入到mapModifiedCoIs中并且将变量的值写入步骤四所述id_value_map中对应的位置。
[0017]步骤九:循环执行步骤六到步骤八,直至所有文件都已读取完毕,此时保存文件索引的数据结构为空,id_Value_map中存有最后一行的数据,将其写入输出文件中即完成多路测试数据归并操作。
[0018]3.优点及功效:分布式实时测试系统多路测试数据压缩与归并方法通过在收集测试数据阶段根据不同变量的特点制定不同的收集策略,并且去除重复的冗余测试数据,实现了在不占用大量系统资源和运算时间的情况下对测试数据的压缩处理,并且在网络传输之后能够将压缩的数据还原,不造成数据丢失;同时,本发明中所述的方法能够将多个实时仿真节点收集的多路测试数据归并为一路按时序排列的测试数据。
【【专利附图】

【附图说明】】
[0019]图1为分布式实时测试系统多路测试数据压缩与归并方法的流程示意图
`[0020]图2为分布式实时测试系统多路测试数据归并方法的实现流程示意图
【【具体实施方式】】
[0021]为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
[0022]本发明的目的在于提供一种分布式实时测试系统多路测试数据压缩与归并方法,这种方法能够在不占用大量系统资源和运算时间的情况下对测试数据进行压缩处理,并且在网络传输之后能够将压缩的数据还原,不造成数据丢失;同时,这种方法还要能够将多个实时仿真节点收集的多路测试数据归并为一路按时序排列的测试数据。
[0023]为更清楚的介绍本方法在具体实施例中的应用,首先对实施例针对的系统的结构做简单介绍:
[0024]系统中的节点分为主控节点和实时仿真节点两种节点;
[0025]?主控节点负责实时性要求不高的任务,如人机交互、测试用例编写、测试数据分析等等。由主控节点向实时仿真节点下发控制指令并且控制测试进程。[0026]?实时仿真节点负责实时性要求高的任务,例如任务定时、总线接口的信息交换、测试数据的收集等等,其最小时钟颗粒度可达25us ;
[0027]?测试过程中各实时仿真节点产生的数据通过网络发送到主控节点进行处理。
[0028]见附图1,本发明在具体实施例中的实施步骤如下:
[0029]步骤一:减少测试数据的收集次数,测试系统收集数据的方式有两种,一种是需要按照某个时间间隔收集的数据,比如按照5ms的周期采集模拟量或者每隔Ims查询某个接口上的电平是否变为高电平;另一种方式是不需要主动地收集数据,比如串口上的数据只需在板卡检测到总线上有新数据并触发中断才收集数据;本方法通过对这两种数据进行区分并确立不同的收集策略,大大减少测试过程中需要传送的测试数据,这是对测试数据进行的第一层压缩处理。
[0030] 步骤二:在收集数据的过程中,每一帧测试数据包含以下信息:变量ID,收集到数据的时刻对应的时间标签,变量的数值。变量ID用于区分测试过程中的各个不同的变量,时间标签用于把当前收集到的数据和历史数据进行区分。在本方法的设计中,每一帧数据在存放到一级缓存中之前,对缓存中前一帧数据进行比对,如果变量ID与变量值都相同,则只在缓存中添加一帧时间标签和变量ID,不需要再收集重复的变量值。由于不需要移动缓存的索引,不需要进行指针运算操作,这种比较消耗很小,然而在以很高频率收集某个变量值的情况下可以去掉很多冗余信息。在测试完成后分析数据的时候,只要从前一帧数据中获取变量的值即可还原所有的测试数据。
[0031]步骤三:测试过程中主控节点将实时仿真节点传来的测试数据按照节点保存到不同的文件中。测试过程中实时仿真节点将测试数据发送到主控节点,主控节点把测试数据保存到磁盘文件中,每个实时仿真节点对应一个文件,由于实时仿真节点发送数据的过程具有时序性故文件中的数据已经按照时间标签进行了排序。本发明中的方法要求主控节点必须可以判断接收到的数据属于哪个仿真节点,在具体的实施过程中,可以采取各种手段传递该信息,例如发送测试数据之前先发送测试数据的相关信息,或者在测试数据的信息帧里添加关于测试信息来源的相关属性等等,在本实施例中采取前一种方式,实时仿真节点发送测试数据之前先通知主控节点将要发送的测试数据属于哪个节点。
[0032]测试停止后对测试数据进行还原和归并处理,具体流程见附图2
[0033]步骤四:对数据归并处理进行准备,获取数据归并处理需要的信息并将信息保存到数据结构中,具体包括以下几个方面:需要进行归并的各文件,将其索引保存到一个数据结构中。随着本发明中的方法应用于不同的系统中,保存的文件索引和所用的数据结构可能有所不同,可以直接保存文件路径,也可以保存打开文件对应的ifstream对象或者CFile对象等等;采用的数据结构可以采用数组、链表、vector等等,对方法本身的实现并无影响;本实施例中,数据归并相关算法使用C++实现,故采用vector作为保存数据文件索引的数据结构,使用if stream将数据文件打开并且将其指针添加到vector中。另外,本次处理的测试数据属于哪些变量也是必须的信息,每个变量的值使用一个字符串保存下来,每个变量的ID对应一个字符串组成一对,将其保存入map中,本map用于保存在一个时间标签内的所有变量的值,将其命名为id_value_map。定义一个vector用于记录每个时间标签内或者说每个时刻值哪些变量发生了变化,在本发明所述方法中,归并后的数据文件每一行记录一个时间标签的所有测试数据,在行尾用分号分割的字符串将哪些变量有变化表示出来,例如:第一二列数据在本时刻有变化则行尾字符串为I; 2,在数据处理过程中将变量是否变化的信息保存在vecModifiedCols中。
[0034]步骤五:按照顺序对所有数据文件进行处理,遍历文件中所有数据,如果发现某一帧数据只有时间标签和ID没有保存变量值,则从前一帧数据中获取变量值补齐本帧数据。
[0035]步骤六:遍历所有的文件,获取文件中第一帧数据,由于所有文件中的数据都是各实时仿真节点按照时序关系进行收集的,所以文件的第一帧数据肯定是本文件中时间标签最小的一帧,也就是说产生时间最早的一帧数据。比较各个文件的第一帧数据得到其中时间标签最小的一帧数据。从多帧数据中获取时间标签最小的一帧有多种方法可以实现,可以循环比较也可以采用各种方式排序后获得,多种方法间只是存在效率上的差异,对功能的实现并没有差别。在本实施例中,采用C++标准库中的min_element算法实现。如果获取某一文件第一帧数据失败,则说明该文件中的数据已经全部被获取,从保存文件索引的数据结构中将其删除,下次遍历不必再打开这个文件。
[0036]步骤七:判断所获得的这帧数据中的时间标签是否与记录的上一帧数据的时间标签相等,如果不相等,则说明这是属于新的时间标签的测试数据,故前一个时间标签的所有测试数据都已获取完毕,应该将上一时间标签的测试数据都输出到归并后的输出文件中。如果相等则说明这一行数据还没有拼接完成,不需要向输出文件中写数据,继续进行步骤八即可;这些数据在输出文件中应该存在于同一行。首先向文件中写入时间标签,然后从id_value_map中获取变量的值,按照顺序输出到同一行,最后将vecModifiedCols拼成一个以分号分割的字符串输出到行尾。每列中间可以空格或者制表符进行分割,该分割符只要能将各列分开即可,对本发明中的方法实现没有影响。本实施例中采用制表符进行分割。输出一行数据后将vecModifiedCols清空以便保存下一行数据的变量变化信息。如果是第一帧数据也就是说上一帧数据的时间标签为0则不需要向输出文件中写数据。
[0037]步骤八:将当前获取的这帧测试数据的时间标签更新到last_lable中,以便下次获取测试数据后进行比较;同时根据这帧测试数据中的变量ID获取变量在步骤四所述id_value_map中的位置,将所得位置信息插入到mapModif iedCo Is中并且将变量的值写入步骤四所述id_value_map中对应的位置。从id_value_map中获得变量位置信息可以采用多种算法,使用迭代器遍历map比较变量ID或者是使用map的find函数进行查找等方法都可以,对本发明中的方法本身的实现没有影响。本实施例中调用C++标准算法中的find_if算法实现该功能。
[0038]步骤九:循环执行步骤六到步骤八,直至所有文件都已读取完毕,此时保存文件索引的数据结构为空,id_Value_map中存有最后一行的测试数据,将其写入输出文件中即完成多路测试数据归并操作。
[0039]本发明未详细阐述部分属于本领域公知技术。
[0040]以上所述,仅为本发明部分【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本领域的人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
【权利要求】
1.一种分布式实时测试系统多路测试数据压缩与归并方法,其特征在于:它包括以下步骤: 步骤一:减少测试数据的收集次数;测试系统收集数据的方式有两种,一种是需要按照某个时间间隔收集的数据,比如按照5ms的周期采集模拟量或者每隔Ims查询某个接口上的电平是否变为高电平;另一种方式是不需要主动地收集数据,比如串口上的数据只需在板卡检测到总线上有新数据并触发中断才收集数据;通过对这两种数据进行区分并确立不同的收集策略,减少测试过程中需要传送的测试数据,这是对测试数据进行的第一层压缩处理; 步骤二:在收集数据的过程中,每一帧测试数据包含以下信息:变量ID,收集到数据的时刻对应的时间标签,变量的数值;变量ID用于区分测试过程中的各个不同的变量,时间标签用于把当前收集到的数据和历史数据进行区分;在设计中,每一帧数据在存放到一级缓存中之前,对缓存中前一帧数据进行比对,如果变量ID与变量值都相同,则只在缓存中添加一帧时间标签和变量ID,不需要再收集重复的变量值;由于不需要移动缓存的索引,不需要进行指针运算操作,这种比较消耗很小,然而在以很高频率收集某个变量值的情况下可以去掉很多冗余信息;在测试完成后分析数据的时候,只要从前一帧数据中获取变量的值即可还原所有的测试数据; 步骤三:测试过程中主控节点将实时仿真节点传来的测试数据按照节点保存到不同的文件中;测试过程中实时仿真节点将测试数据发送到主控节点,主控节点把测试数据保存到磁盘文件中,每个实时仿真节点对应一个文件,由于实时仿真节点发送数据的过程具有时序性,故文件中的数据已经按照时间标签进行了排序,测试停止后对测试数据进行还原和归并处理; 步骤四:对数据归并处理进行准备;获取数据归并处理需要的信息并将信息保存到数据结构中,具体包括以下几个方面:需要进行归并的各文件,将其索引保存到一个数据结构中;在不同的系统中,保存的 文件索引和所用的数据结构可能有所不同,可以直接保存文件路径,也可以保存打开文件对应的ifstream对象或者CFile对象;采用的数据结构采用数组、链表、vector,对方法本身的实现并无影响;另外,本次处理的测试数据属于哪些变量也是必须的信息,每个变量的值使用一个字符串保存下来,每个变量的ID对应一个字符串组成一对,将其保存入map中,本map用于保存在一个时间标签内的所有变量的值,将其命名为id_value_map ;定义一个vector用于记录每个时间标签内或者说每个时刻值哪些变量发生了变化,归并后的数据文件每一行记录一个时间标签的所有测试数据,在行尾用分号分割的字符串将哪些变量有变化表示出来,例如:第一二列数据在本时刻有变化则行尾字符串为I; 2,在数据处理过程中将变量是否变化的信息保存在vecModifiedCols中; 步骤五:按照顺序对所有数据文件进行处理,遍历文件中所有数据,如果发现某一帧数据只有时间标签和ID没有保存变量值,则从前一帧数据中获取变量值补齐本帧数据;步骤六:遍历所有的文件,获取文件中第一帧数据,由于所有文件中的数据都是各实时仿真节点按照时序关系进行收集的,所以文件的第一帧数据肯定是本文件中时间标签最小的一帧,也就是说产生时间最早的一帧数据;比较各个文件的第一帧数据得到其中时间标签最小的一帧数据,如果获取某一文件第一帧数据失败,则说明该文件中的数据已经全部被获取,从保存文件索引的数据结构中将其删除,下次遍历不必再打开这个文件;步骤七:判断所获得的这帧数据中的时间标签是否与记录的上一帧数据的时间标签相等,如果不相等,则说明这是属于新的时间标签的测试数据,故前一个时间标签的所有测试数据都已获取完毕,应该将上一时间标签的测试数据都输出到归并后的输出文件中;如果相等,则说明这一行数据还没有拼接完成,不需要向输出文件中写数据,继续进行步骤八即可;这些数据在输出文件中应该存在于同一行,首先向文件中写入时间标签,然后从id_value_map中获取变量的值,按照顺序输出到同一行,最后将vecModifiedCols拼成一个以分号分割的字符串输出到行尾;每列中间可以空格或者制表符进行分割,该分割符只要能将各列分开即可;输出一行数据后将vecModifiedCols清空以便保存下一行数据的变量变化信息,如果是第一帧数据也就是说上一帧数据的时间标签为0则不需要向输出文件中写数据; 步骤八:将当前获取的这帧测试数据的时间标签更新到last_lable中,以便下次获取测试数据后进行比较;同时根据这帧测试数据中的变量ID获取变量在步骤四所述id_value_map中的位置,将所得位置信息插入到mapModifiedCols中并且将变量的值写入步骤四所述id_value_map中对应的位置; 步骤九:循环执行步骤六到步骤八,直至所有文件都已读取完毕,此时保存文件索引的数据结构为空,id_Value_map中存有最后一行的数据,将其写入输出文件中即完成多路测试数据归并操作。`
【文档编号】G06F17/30GK103488564SQ201310418563
【公开日】2014年1月1日 申请日期:2013年9月13日 优先权日:2013年9月13日
【发明者】杨顺昆, 刘斌, 司维 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1