扩展测试数据的方法及设备的制作方法

文档序号:6506658阅读:189来源:国知局
扩展测试数据的方法及设备的制作方法
【专利摘要】本发明公开了一种用于扩展测试数据的方法及设备,用于根据样本测试数据扩展出新的测试数据。所述方法包括:获取用查询语句以及期望查询结果所表示的测试数据需求;在样本测试数据上执行所述查询语句以获取实际查询结果,同时记录执行所述查询语句时各个查询子操作的中间结果;通过比较所述期望查询结果以及所述实际查询结果确定出差别;按照与所述查询语句相反的执行顺序执行与各个查询子操作分别对应的各个数据生成子操作,在所述各个数据生成子操作中根据所述差别、所述中间结果以及与所述样本测试数据中各字段相应的数据生成约束条件对所述样本测试数据进行扩展,其中,至少一个所述数据生成约束条件反映了相应字段的特定模式。
【专利说明】扩展测试数据的方法及设备

【技术领域】
[0001]本发明是涉及测试数据的生成,更具体而言,涉及一种根据样本测试数据生成新的测试数据的方法和设备。

【背景技术】
[0002]目前已经进入大数据时代,交通、电力等各个行业都存在着大量数据,围绕这些行业数据开发出越来越多的应用程序。在开发过程中,需要大量的测试数据对应用程序进行功能测试。但实践中,用户往往只能提供少量实际的样本数据,经常要忍受缺乏实际数据的痛苦,这就需要在已有的样本数据基础上生成更多的测试数据,以满足功能测试的需求。
[0003]现有的测试数据生成方式简单,一般是根据取值范围、数据类型等简单要求随机取值,但这只能考虑到数据的分布均匀、覆盖全面等因素,并不能反映出真实物理数据的本身的复杂关联或模式。以包括员工号和年龄这两个字段的测试数据为例,如员工号需为唯一整型值,年龄需为20-60之间的整型值,在生成1000条记录时,员工号可在1-1000的区间上,年龄可在20-60的区间上随机生成。然而,这样的数据生成方法不支持具有复杂模式或关联性的数据的生成,如果对符合一定模式的数据也用随机方式生成新的测试数据,就会使得新生成的测试数据脱离实际从而无法用于应用程序的测试。
[0004]综上所述,现有测试数据生成方案并未考虑数据的内在联系,不能反映数据本身的关联或模式,需要一种改进了的测试数据生成方案。


【发明内容】

[0005]根据本发明的第一个方面,提供了一种用于扩展测试数据的方法,用于根据样本测试数据扩展出新的测试数据,该方法包括:获取用查询语句以及期望查询结果所表示的测试数据需求;在样本测试数据上执行所述查询语句以获取实际查询结果,同时记录执行所述查询语句时各个查询子操作的中间结果;通过比较所述期望查询结果以及所述实际查询结果确定出差别;按照与所述查询语句相反的执行顺序执行与各个查询子操作分别对应的各个数据生成子操作,在所述各个数据生成子操作中根据所述差别、所述中间结果以及与所述样本测试数据中各字段相应的数据生成约束条件对所述样本测试数据进行扩展,其中,至少一个所述数据生成约束条件反映了相应字段的特定模式。
[0006]根据本发明第二个方面,还提供了一种用于扩展测试数据的设备,该设备包括:获取模块,配置为获取用查询语句以及期望查询结果所表示的测试数据需求;查询模块,配置为在样本测试数据上执行所述查询语句以获取实际查询结果,同时记录执行所述查询语句时各个查询子操作的中间结果;比较模块,配置为通过比较所述期望查询结果以及所述实际查询结果确定出差别;数据生成模块,配置为按照与所述查询语句相反的执行顺序执行与各个查询子操作分别对应的各个数据生成子操作,在所述各个数据生成子操作中根据所述差别、所述中间结果以及与所述样本测试数据中各字段相应的数据生成约束条件对所述样本测试数据进行扩展,其中,至少一个所述数据生成约束条件反映了相应字段的特定模式。
[0007]采用本发明的方法和装置,通过样本测试数据中各字段相应的数据生成约束条件对样本测试数据进行扩展,由于至少一个数据生成约束条件反映了相应字段的特定模式,使得生成的新测试数据也能够符合样本数据的某些特定模式。

【专利附图】

【附图说明】
[0008]通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
[0009]图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图;
[0010]图2示出根据本发明一个实施例的测试数据扩展方法流程图;
[0011]图3示出了本申请的技术方案在测试流程中的位置示意图;
[0012]图4示出了根据本发明一个实施例的查询语句以及期望查询结果示意图;
[0013]图5示出根据本发明一个实施例的查询语句执行以及数据生成流程示意图;
[0014]图6示出根据本发明一个实施例的测试数据扩展的设备示意图。

【具体实施方式】
[0015]下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0016]所属【技术领域】的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0017]可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0018]计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0019]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于一无线、电线、光缆、RF等等,或者上述的任意合适的组合。
[0020]可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言一诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0021]下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
[0022]也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruct1nmeans)的制造品(manufacture)。
[0023]也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
[0024]图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0025]如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
[0026]总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
[0027]计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
[0028]系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图3未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如⑶-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
[0029]具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
[0030]计算机系统/服务器12也可以与一个或多个外部设备14 (例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口 22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
[0031]现在参看图2,其示出根据本发明一个实施例的用于扩展测试数据的方法流程图,可对具有特定模式的样本测试数据进行扩展以生成新的测试数据。如图2所示,该方法包括如下步骤:
[0032]在步骤201中,获取用查询语句以及期望查询结果所表示的测试数据需求。
[0033]现结合图3对该步骤进行说明,图3示出了本申请的技术方案在测试流程中的位置。如图3所示,功能测试用例301是根据测试需求或者软件验收标准等资料设计出的具体测试流程,通常是为某个程序功能编制的一组测试输入、执行条件以及预期结果。进而,测试工程师通过分析功能测试用例确定测试数据需求,即功能测试用例对测试数据的具体要求。例如,在对司机排名功能进行测试时,为了在排名时考虑到水平不同的司机,可在测试数据需求中可以要求提供两个司机在2012年6月份的数据记录,并且要求第二个司机的油耗比第一个司机的油耗低25%。实际上,如何根据功能测试用例确定具体的测试数据需求,这属于现有技术的范畴,在此不对其进行过多的描述。
[0034]步骤201的独特之处在于,用计算机可读的查询语句以及期望查询结果表示测试数据需求。测试数据需求是测试数据在特定的逻辑关系下应具备的特性。在这里,查询语句用来表示前述特定的逻辑关系,期望的查询结果用来表示前述应具备的特性。查询语句可以用任何编程语言表示,在一个实施例中,是采用SQL语句,除此之外,本领域技术人员可以采用其它计算机可读方式表示查询语句。在另一个实施例中,可将尽量多的需求逻辑写入查询语句中,而将简单的数据特性用期望查询结果来表示,这样就会进一步提高生成测试数据需求的效率。
[0035]图4示出的是查询语句以及期望查询结果的一个示例,框403中示出的是用SQL语句所描述的查询语句,框405中示出的期望查询结果的一个示例。期望查询结果通常是一张表单,当设定了查询语句,期望查询结果的表单中包括哪些字段就已经确定了,例如,根据图4中框403中的查询语句就可以确定出框405中期望查询结果的表单包括driver_ID, fuelconsu两个字段。进而,还需要对期望查询结果的表单内容进行定制,例如,每条记录的各个字段的取值,记录条数的取值。期望查询结果可以是确定的,也可以是模糊的,在图4所示的例子中,期望查询结果已经确定到具体字段的数值,而在另一个实施例中,期望查询结果可以是条目要求,例如,要求不少于5条。
[0036]在另一个实施例中,查询语句还可以是一个或一组程序,期望查询结果可以体现为程序的输入数据或者程序运行的配置文件。程序的输出结果则为后续步骤中的比较实际查询结果与期望查询结果所获得的差别。
[0037]样本测试数据是来自实际应用场景的真实数据,通常被视为一组同构的数据记录,每条记录包括多个字段。例如,车辆轨迹由一系列的坐标点组成,每个坐标点为一条记录,每个记录包括时间,经度,纬度,速度,航向等字段。样本测试数据可以数据表的方式存储,也可用文本等非数据库形式的结构化数据,样本测试数据如果是非结构化的数据,还需将其处理为结构化的数据。
[0038]返回图2所示的方法流程,在步骤202中,在样本测试数据上执行所述查询语句以获取实际查询结果,同时记录执行所述查询语句时各个查询子操作的中间结果。
[0039]通过查询引擎在样本测试数据上执行该查询语句并输出实际查询结果,当查询语句是SQL语句时,查询引擎可以是任何现有的SQL处理引擎。接下来,参看图4的实施例,405示出的就是在包括位置表单(locat1n)以及司机表单(driver)的样本测试数据上执行403所示的查询语句后所生成的实际查询结果。图4还分别示出了位置(locat1n)表单401、以及,司机(driver)表单402中所包括的字段。
[0040]查询引擎在执行查询语句时通常会将其分解为一系列基本的子操作,例如关系代数中的选择(select)、投影(project)、连接(join)等操作以及数据库查询语言中广泛应用的聚合(aggregate)函数,基本上所有的查询引擎在执行查询语句时都会划分为这几个基本的子操作,然后按照一定的顺序执行这些子操作,不同的引擎的执行顺序可能会不一致。中间结果是在执行一个查询时每个查询子操作的输入所对应的输出结果。本领域技术人员可采用任何现有的方式对其进行记录,例如,采用数据表的形式。为了记录中间结果,可在现有的处理引擎上增加代码,使其能够记录该查询语句执行过程中的中间结果,以便用于后续步骤。另参看图5所示出的查询语句执行以及数据生成过程的一个实施例,如图5所示,右侧粗箭头示出了图4中框403中查询语句的执行过程,其中依次包括连接子操作“ Θ locat1n.vehicle_ID=driver.vehicle_ID”,选择子操作“ σ start_time〈=time_stampand end_time>=time_stamp”,投影子操作“ π driver_ID, fuel_consumpt1n”,以及聚合子操作“ Y driver_ID (fuel_consumpt1n) ”。
[0041]在图2所示的步骤203中,通过比较所述期望查询结果以及所述实际查询结果确定出差别。如不存在差别,则说明样本测试数据能够满足测试数据需求,无需进行后续样本测试数据扩展的步骤。如存在差别,则说明样本测试数据不能满足测试数据需求,需要对样本测试数据进行扩展以生成符合要求的新的测试数据。
[0042]实际查询结果与期望查询结果具有相同的表单结构,因此,在进行比较时,对于期望查询结果中的每一条记录,如果在实际查询结果中没有与之相匹配的记录,则将该条记录作为差别中的一条记录,因此,差别中的每一条记录就代表实际查询结果中缺失的记录,需要扩展测试数据,使得在扩展后的测试数据上执行查询语句能够得到差别中的所有记录。其中,实际查询结果中的一条记录和期望查询结果中的一条记录相匹配指的是两条记录的各个字段的值完全一样。参看图4的实施例,404中虚线框所包围的部分就是经过比较后所确定的差别部分。
[0043]在步骤205中,按照与所述查询语句相反的执行顺序执行与各个查询子操作分别对应的各个数据生成子操作,在所述各个数据生成子操作中根据所述差别、所述中间结果以及与所述样本测试数据中各字段相应的数据生成约束条件对所述样本测试数据进行扩展,至少一个字段的数据生成约束条件反映了相应字段的特定模式。
[0044]在生成新的测试数据时,通过前述步骤所比较出的差别表示实际查询结果所缺失的记录,因此,在步骤205中需要以差别中的每条缺失的记录为线索,按照与查询语句执行顺序的相反顺序执行与各个查询子操作分别对应的各个数据生成子操作。
[0045]在每个数据生成子操作中,都具有基于前述差别所确定出的当前差别,然后,根据该当前差别、已经记录的各个查询子操作的中间结果、以及各字段的数据生成约束条件在每个数据生成子操作中执行扩展操作,最终就可以生成新的测试数据,使得在新生成的测试数据上执行查询语句能够得到期望的查询结果。
[0046]若当前数据生成子操作对应于所述查询语句的最后一步查询子操作,将所述差别作为当前差别与所述最后一步查询子操作的查询结果一起作为当前数据生成子操作的输入。实际上,每个数据生成子操作都可以排在第一个(对应于所述查询语句的最后一步查询子操作),接下来,分别对其进行描述。
[0047]如果第一个数据生成子操作是聚合生成子操作,则,对于所述当前差别中的每一条记录:根据与所述聚合生成子操作相对应的聚合查询子操作的中间结果,在所述聚合查询子操作的输出结果中为当前差别中的该条记录确定当前关联记录,根据所述聚合查询子操作的中间结果,在所述聚合查询子操作的输入数据中确定所述当前关联记录的当前对应记录,复制所述当前对应记录并根据所述当前对应记录中各字段的数据生成约束条件,以及聚合生成子操作类型对所述复制的当前对应记录进行修改;将所有修改后的复制的当前对应记录与所述聚合查询子操作的输入数据一起作为所述聚合生成子操作的输出,其中,该聚合生成子操作的输出作为下一步数据生成子操作的输入,该所有修改后的复制的当前对应记录作为所述下一步数据生成子操作输入中的当前差别,该聚合生成子操作中得到的当前对应记录作为下一步数据生成子操作中的当前关联记录。
[0048]如果第一个数据生成子操作是投影生成子操作,则,对于所述当前差别中的每一条记录:根据与所述投影生成子操作相对应的投影查询子操作的中间结果,在所述投影查询子操作的输出结果中为当前差别中的该条记录确定当前关联记录,根据所述投影查询子操作的中间结果,在所述投影查询子操作的输入数据中确定所述当前关联记录的当前对应记录,根据所述当前对应记录补齐当前差别中该条记录中缺少的字段,并根据各字段的数据生成约束条件对所述补齐后的记录进行修改;将所有补齐并修改后的记录与所述投影查询子操作的输入数据数据一起作为所述投影生成子操作的输出,其中,该投影生成子操作的输出成为下一步数据生成子操作的输入,该所有补齐并修改后的记录成为下一步数据生成子操作输入中的当前差别,该当前投影生成子操作中得到当前对应记录成为下一步数据生成子操作输入中的当前关联记录。
[0049]如第一个数据生成子操作是选择生成子操作,则,根据与所述选择生成子操作相对应的选择查询子操作的中间结果,在所述选择查询子操作的输出结果中为当前差别中的记录确定当前关联记录;把所述选择生成子操作的输入直接作为所述选择生成子操作的输出,该输出成为下一步数据生成子操作的输入,并且,所述选择生成子操作的输入中的当前差别和所述当前关联记录成为下一步数据生成子操作输入中的当前差别和当前关联记录。
[0050]如第一个数据生成子操作是连接生成子操作,则,根据与连接生成子操作相对应的连接查询子操作的中间结果,在所述连接查询子操作的输出结果中为当前差别中的记录确定当前关联记录;对所述连接生成子操作的输入执行所述连接子操作的反操作生成所述连接生成子操作的输出,该输出成为下一步数据生成子操作的输入,并且,所述连接生成子操作的输入中的当前差别和当前关联记录成为下一步数据生成子操作输入中的当前差别和当前关联记录。
[0051]每个字段都有相应的数据生成约束条件,这意味着对于不同的类型的数据,在进行数据扩展时,操作约束是不同的。为了能够考虑测试数据的内在联系,需要至少一个数据生成约束条件反映了相应字段的特定模式。接下来,.以一个实施例进行更加详细的说明,该实施例中包括A、B、C三类数据:
[0052]其中,A类型的数据字段或者A类型数据字段之间存在复杂的强耦合关系,例如是很强的时空关系。由于字段之间耦合紧密,该类数据字段的数据生成具有较小的自由度,对于该类型数据的数据生成约束条件可包括:块复制、块连接,数据缩放、时移等能够反映A类型数据强耦合关系的操作。例如,对于车辆轨迹数据来说,经度、纬度,速度,方向,里程等字段具有强的时空关联性,可以在一个数据约束条件中设定对这五个字段的数据只能通过块复制操作才能保证这些字段之间时空关联性。
[0053]其中,B类型的数据字段,或者B类型的数据字段之间,或者同A类型的字段之间具有简单的耦合关系,例如是稍弱的时空关联性。由于耦合关系比较简单,所以这样的偶合关系可以被建模并加入数据生成算法,从而使该类字段的数据生成具备较大的灵活性。对于该类型数据的数据生成约束条件可包括:数据值的扩大或减少。例如,总油耗(fuelconsumpt1n)具有较弱的时空关联性,总油耗随着时间的增加只能是递增的,因此,对油耗允许的操作可以是扩大操作。
[0054]其中,属于C类型的数据字段同其他字段之间没有相关性,或相关性可以被忽略,例如是不具有任何时空关联性。因此,对于该类型数据的数据生成约束条件可以最为灵活,在数据扩展时对于该类字段的数据的允许任意赋值。例如,司机识别信息,交通工具识别码等,可以按照现有技术的方式随机生成。
[0055]在生成新的数据时,对于耦合关系较弱的数据字段当然可以执行用于耦合关系较强数据字段的数据生成约束条件,反之则不可以。
[0056]上述对字段的分类只是一种示例,最终的目的是为每个或每组字段绑定一个生成新数据时可以实施的操作集合,即数据生成约束条件,在本申请所公开的信息的基础上,本领域技术人员容易想到其它分类方式。
[0057]接下来,结合图5对图2中步骤204中的按照与所述查询语句执行顺序的相反顺序生成新的测试数据进行说明。
[0058]正向查询操作是在样本测试数据上执行查询语句并获取实际查询结果的过程,而反向生成操作是按照与正向查询操作相反的顺序生成测试数据的过程。在本申请中,将反向生成操作中的子操作称为当前子操作,每个当前子操作都有一个相对应的查询子操作。
[0059]继续参看图5所示的实施例,左侧粗箭头示出的查询操作从下至上依次包括连接子操作Θ、选择子操作σ、投影子操作π,以及聚合子操作Y。右侧细箭头示出了反向的数据生成操作的过程,其中,每个数据生成子操作都具有一个对应的查询子操作。需要说明的是,图5按照最为常见的顺序进行举例说明,实际上,可以采用其它顺序,或者只采用其中的一个或多个子操作,这都是本领域技术人员在本申请公开的信息基础上容易实现的, 申请人:对此不再赘述其具体实现细节。
[0060]每个查询子操作的输入数据用QI表示,输出数据用QO表示,例如,框505、509示出的是连接子操作的输入QI_ Θ (不包括虚线框中的数据),框504示出的是连接子操作的输出QO_0,同时,框504还是后续选择子操作σ的输入QI_ σ,基于同样的道理,图5中还示出了其它查询子操作的输入、输出,不对其进行一一说明。每个数据生成子操作的输入数据用GI表示,输出结果用GO表示,例如,框506示出了生成子操作Y的输入GI_y,框507示出了生成子操作Y的输出G0_Y,同时,框507也是后续生成子操作π的输入GI_ji。其中每一个数据生成子操作的输入GI都包括相应的查询子操作的输出结果(表示为Q0)以及差别部分(表示为NEW),图5中框506、507以及508中分别用虚线框出了对应数据生成子操作的输入数据中的差别部分。对于第一个数据生成子操作来说,差别部分就是在步骤203通过比较得到的差别。因此,对于每个数据生成子操作,就演变为如何根据GI (包括QO和NEW),QI来生成G0。最终生成的新的测试数据就是最后一个数据生成子操作的输出,例如图5中框506、509所示的两个数据表(包括虚线框中的数据)。
[0061](I)如果当前数据生成子操作为聚合生成子操作,对于差别中的每一条记录(例如,框506中虚线框中的记录),执行下述操作:
[0062]根据与聚合生成子操作相对应的聚合查询子操作的中间结果,在对应的聚合查询子操作的输出结果(Q0_y )中为差别中的该条记录确定当前关联记录。可以任选一条进行关联,在一个改进的实施例中,还可根据最大相似度原则选择Q0_y中的一条记录与之建立关联。
[0063]根据聚合查询子操作的中间结果,在聚合查询子操作的输入数据(QI_Y )中确定该当前关联记录的对应记录(当前对应记录),即,QI_ Y中那些生成该当前关联记录的记录
口 O
[0064]复制当前对应记录并根据该当前对应记录中各字段的数据生成约束条件,以及聚合生成子操作类型对所述复制的当前对应记录进行修改。通过修改,使得在包括修改后的复制的对应记录执行对应的聚合查询子操作时,输出结果中能够包括差别中的该条记录。具体聚合操作类型例如是求最小值(min),求最大值(max),统计数量(count)等等。数据字段及相应的数据生成约束条件在前面已经做过介绍,在此不再重述。
[0065]当差别中所有记录都处理完毕后,将所有修改后的复制的对应记录与所述对应的查询子操作的输入数据(QI_ Y ) —起作为聚合生成子操作的输出(G0_ Y )。
[0066]然后,将所有修改后的复制的对应记录作为下一步数据生成子操作中的当前差别;被复制的原始对应记录成为下一步数据生成子操作输入中相应的关联记录;将对应的查询子操作的输入数据(QI_ Y)作为下一步数据生成子操作中对应的查询子操作的输出结果(Q0_ ) ?
[0067](2)如果当前数据生成子操作为投影生成子操作π,将前一步中聚合生成子操作的输出作为投影生成子操作的输入,前述所有修改后的复制的对应记录作为该投影生成子操作的输入中的当前差别,被复制的原始对应记录成为该投影生成子操作的输入中的当前关联记录,并且,将前一步骤中聚合查询子操作的输入数据作为投影查询子操作的输出;
[0068]获取当前差别中的一条记录。然后,对于每一条记录,执行下述操作:
[0069]根据该条记录相应的当前关联记录和该投影查询子操作的中间结果,在投影查询子操作的输入数据(QI_ η )中确定该当前关联记录的当前对应记录,即,QI_n中生成该当前关联记录的记录集合。
[0070]根据当前对应记录补齐当前差别中该条记录中缺少的字段,并根据各字段的数据生成约束条件对该补齐后的记录进行修改。通过修改,使得在包括补齐并修改后的记录上执行对应的投影查询子操作时,输出结果中能够包括当前差别中的该条记录。
[0071]当差别中所有记录都处理完毕后,将所有补齐并修改后的记录与投影查询子操作的输入数据(QI_n )—起作为该投影生成子操作的输出(G0_ji )。
[0072]然后,将所述补齐并修改后的对应记录作为下一步数据生成子操作中的差别部分,以及将对应的查询子操作的输入数据(QI_ η ) 一起作为下一步数据生成子操作中对应的查询子操作的输出结果(Q0_o )。在当前投影生成子操作中得到的对应记录成为下一步数据生成子操作输入中相应的关联记录。
[0073](3)如果当前子操作为选择生成操作σ,则,
[0074]将上一数据生成子操作的输出作为所述选择生成子操作的输入;
[0075]则把该当前数据生成子操作的输入数据(GI_o )直接当作该当前数据生成子操作的输出(G0_o ),同时,也是下一步数据生成子操作Θ的输入(GI_0)。
[0076](4)如果当前子操作为连接操作Θ,则,
[0077]将上一数据生成子操作的输出作为所述连接生成子操作的输入;
[0078]则对该当前数据生成子操作的输入数据(GI_ Θ )执行连接操作的反操作,例如,在图5所示的实施例中将输入数据(GI_ Θ )拆分为506、509所示的两张数据表作为最终的输出(GO_0 )。
[0079]图6示出根据本发明一个实施例的一种用于扩展测试数据的设备,可以根据样本测试数据扩展出新的测试数据,该设备包括:
[0080]获取模块601,配置为获取用查询语句以及期望查询结果所表示的测试数据需求;查询模块602,配置为在样本测试数据上执行所述查询语句以获取实际查询结果,同时记录执行所述查询语句时各个查询子操作的中间结果;比较模块603,配置为通过比较所述期望查询结果以及所述实际查询结果确定差别;数据生成模块604,配置为按照与所述查询语句相反的执行顺序执行与各个查询子操作分别对应的各个数据生成子操作,在所述各个数据生成子操作中根据所述差别、所述中间结果以及与所述样本测试数据中各字段相应的数据生成约束条件对所述样本测试数据进行扩展,其中,至少一个所述数据生成约束条件反映了相应字段的特定模式。
[0081]在一个实施例中,数据生成模块604包括:配置为若当前数据生成子操作对应于所述查询语句的最后一步查询子操作,将所述差别作为当前差别与所述最后一步查询子操作的查询结果一起作为当前数据生成子操作的输入的模块。
[0082]在一个改进的实施例中,其中当前数据生成子操作是聚合生成子操作,则数据生成模块604进一步包括:配置为对于所述当前差别中的每一条记录:根据与所述聚合生成子操作相对应的聚合查询子操作的中间结果,在所述聚合查询子操作的输出结果中为当前差别中的该条记录确定当前关联记录,根据所述聚合查询子操作的中间结果,在所述聚合查询子操作的输入数据中确定所述当前关联记录的当前对应记录,复制所述当前对应记录并根据所述当前对应记录中各字段的数据生成约束条件,以及聚合生成子操作类型对所述复制的当前对应记录进行修改的模块;以及,配置为将所有修改后的复制的当前对应记录与所述聚合查询子操作的输入数据一起作为所述聚合生成子操作的输出,其中,该聚合生成子操作的输出作为下一步数据生成子操作的输入,该所有修改后的复制的当前对应记录作为所述下一步数据生成子操作输入中的当前差别,该聚合生成子操作中得到的当前对应记录作为下一步数据生成子操作中的当前关联记录的模块。
[0083]在另一个改进的实施例中,其中,所述当前数据生成子操作是投影生成子操作,则所述数据生成模块604进一步包括:配置为对于所述当前差别中的每一条记录:根据与所述投影生成子操作相对应的投影查询子操作的中间结果,在所述投影查询子操作的输出结果中为当前差别中的该条记录确定当前关联记录,根据所述投影查询子操作的中间结果,在所述投影查询子操作的输入数据中确定所述当前关联记录的当前对应记录,根据所述当前对应记录补齐当前差别中该条记录中缺少的字段,并根据各字段的数据生成约束条件对所述补齐后的记录进行修改的模块;以及,配置为将所有补齐并修改后的记录与所述投影查询子操作的输入数据数据一起作为所述投影生成子操作的输出,其中,该投影生成子操作的输出成为下一步数据生成子操作的输入,该所有补齐并修改后的记录成为下一步数据生成子操作输入中的当前差别,该当前投影生成子操作中得到当前对应记录成为下一步数据生成子操作输入中的当前关联记录的模块。
[0084]在一个实施例中,其中,所述当前数据生成子操作是选择生成子操作,则数据生成模块604进一步包括:配置为根据与所述选择生成子操作相对应的选择查询子操作的中间结果,在所述选择查询子操作的输出结果中为当前差别中的记录确定当前关联记录的模块;配置为把所述选择生成子操作的输入直接作为所述选择生成子操作的输出,该输出成为下一步数据生成子操作的输入,并且,所述选择生成子操作的输入中的当前差别和所述当前关联记录成为下一步数据生成子操作输入中的当前差别和当前关联记录的模块。
[0085]在一个实施例中,其中,所述当前数据生成子操作是连接生成子操作,则所述数据生成模块604进一步包括:配置为根据与所述连接生成子操作相对应的连接查询子操作的中间结果,在所述连接查询子操作的输出结果中为当前差别中的记录确定当前关联记录的模块;配置为对所述连接生成子操作的输入执行所述连接子操作的反操作生成所述连接生成子操作的输出,该输出成为下一步数据生成子操作的输入,并且,所述连接生成子操作的输入中的当前差别和当前关联记录成为下一步数据生成子操作输入中的当前差别和当前关联记录的模块。
[0086]在另一个实施例中,是根据最大相似度的原则确定当前关联记录。
[0087]在一个实施例中,查询模块602还包括:配置为对于所述期望查询结果中的每一条记录,如果在所述实际查询结果中没有找到相匹配的记录,则将该条记录作为所述差别中的一条记录的模块。
[0088]在一个实施例中,图6所示的生成测试数据的设备还包括:配置为如果所述实际查询结果为空,按所述查询操作的逆向找到下一个选择子操作的模块;配置为调整所述找到的选择子操作的条件并重新执行所述查询操作,直至获取非空的查询结果并将其作为所述实际查询结果的模块。
[0089]前述实施例中均是以车联网对本申请的技术方案进行说明,然而,本领域技术人员在其基础上,可以在其他场景中应用本申请的技术方案。例如,应用在管网(自来水或油气管管路阀门的位置,型号,安装年代,随时间变化的压力测量值,等)的分析和管理中;或者,应用于智能电网的场景中:智能电网中大数据分析的应用(发电机转速/输出功率,变电站的即时电压/电流/有效功率,等)。总之,采用本申请的技术方案,能够根据样本测试数据生成符合实际物理特性的新的测试数据。
[0090]附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0091]以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本【技术领域】的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本【技术领域】的其它普通技术人员能理解本文披露的各实施例。
【权利要求】
1.一种用于扩展测试数据的方法,该方法包括: 获取用查询语句以及期望查询结果所表示的测试数据需求; 在样本测试数据上执行所述查询语句以获取实际查询结果,同时记录执行所述查询语句时各个查询子操作的中间结果; 通过比较所述期望查询结果以及所述实际查询结果确定出差别; 按照与所述查询语句相反的执行顺序执行与各个查询子操作分别对应的各个数据生成子操作,在所述各个数据生成子操作中根据所述差别、所述中间结果以及与所述样本测试数据中各字段相应的数据生成约束条件对所述样本测试数据进行扩展,其中,至少一个所述数据生成约束条件反映了相应字段的特定模式。
2.根据权利要求1所述的方法,其中,按照与所述查询语句相反的执行顺序执行与各个查询子操作分别对应的各个数据生成子操作,在所述各个数据生成子操作中根据所述差另O、所述中间结果以及与所述样本测试数据中各字段相应的数据生成约束条件对所述样本测试数据进行扩展包括: 若当前数据生成子操作对应于所述查询语句的最后一步查询子操作,将所述差别作为当前差别与所述最后一步查询子操作的查询结果一起作为当前数据生成子操作的输入。
3.根据权利要求2所述的方法,其中所述当前数据生成子操作是聚合生成子操作,则所述对样本测试数据进行扩展的步骤进一步包括: 对于所述当前差别中的每一条记录: 根据与所述聚合生成子操作相对应的聚合查询子操作的中间结果,在所述聚合查询子操作的输出结果中为当前差别中的该条记录确定当前关联记录, 根据所述聚合查询子操作的中间结果,在所述聚合查询子操作的输入数据中确定所述当前关联记录的当前对应记录, 复制所述当前对应记录并根据所述当前对应记录中各字段的数据生成约束条件,以及聚合生成子操作类型对所述复制的当前对应记录进行修改; 将所有修改后的复制的当前对应记录与所述聚合查询子操作的输入数据一起作为所述聚合生成子操作的输出,其中,该聚合生成子操作的输出作为下一步数据生成子操作的输入,该所有修改后的复制的当前对应记录作为所述下一步数据生成子操作输入中的当前差别,该聚合生成子操作中得到的当前对应记录作为下一步数据生成子操作中的当前关联记录。
4.根据权利要求2所述的方法,其中,所述当前数据生成子操作是投影生成子操作,则所述对样本测试数据进行扩展的步骤进一步包括: 对于所述当前差别中的每一条记录: 根据与所述投影生成子操作相对应的投影查询子操作的中间结果,在所述投影查询子操作的输出结果中为当前差别中的该条记录确定当前关联记录, 根据所述投影查询子操作的中间结果,在所述投影查询子操作的输入数据中确定所述当前关联记录的当前对应记录, 根据所述当前对应记录补齐当前差别中该条记录中缺少的字段,并根据各字段的数据生成约束条件对所述补齐后的记录进行修改; 将所有补齐并修改后的记录与所述投影查询子操作的输入数据数据一起作为所述投影生成子操作的输出,其中,该投影生成子操作的输出成为下一步数据生成子操作的输入,该所有补齐并修改后的记录成为下一步数据生成子操作输入中的当前差别,该当前投影生成子操作中得到当前对应记录成为下一步数据生成子操作输入中的当前关联记录。
5.根据权利要求2所述的方法,其中,所述当前数据生成子操作是选择生成子操作,则所述对样本测试数据进行扩展的步骤进一步包括: 根据与所述选择生成子操作相对应的选择查询子操作的中间结果,在所述选择查询子操作的输出结果中为当前差别中的记录确定当前关联记录; 把所述选择生成子操作的输入直接作为所述选择生成子操作的输出,该输出成为下一步数据生成子操作的输入,并且,所述选择生成子操作的输入中的当前差别和所述当前关联记录成为下一步数据生成子操作输入中的当前差别和当前关联记录。
6.根据权利要求2所述的方法,其中,所述当前数据生成子操作是连接生成子操作,则所述对样本测试数据进行扩展的步骤进一步包括: 根据与所述连接生成子操作相对应的连接查询子操作的中间结果,在所述连接查询子操作的输出结果中为当前差别中的记录确定当前关联记录; 对所述连接生成子操作的输入执行所述连接子操作的反操作生成所述连接生成子操作的输出,该输出成为下一步数据生成子操作的输入,并且,所述连接生成子操作的输入中的当前差别和当前关联记录成为下一步数据生成子操作输入中的当前差别和当前关联记录。
7.根据权利要求2所述的方法,是根据最大相似度的原则确定所述当前关联记录。
8.根据权利要求1所述的方法,其中所述通过比较确定所述期望查询结果以及所述实际查询结果之间的差别包括: 对于所述期望查询结果中的每一条记录,如果在所述实际查询结果中没有找到相匹配的记录,则将该条记录作为所述差别中的一条记录。
9.根据权利要求1所述的方法,还包括: 如果所述实际查询结果为空,按所述查询操作的逆向找到下一个选择子操作; 调整所述找到的选择子操作的条件并重新执行所述查询操作,直至获取非空的查询结果并将其作为所述实际查询结果。
10.一种用于扩展测试数据的设备,该设备包括: 获取模块,配置为获取用查询语句以及期望查询结果所表示的测试数据需求; 查询模块,配置为在样本测试数据上执行所述查询语句以获取实际查询结果,同时记录执行所述查询语句时各个查询子操作的中间结果; 比较模块,配置为通过比较所述期望查询结果以及所述实际查询结果确定差别; 数据生成模块,配置为按照与所述查询语句相反的执行顺序执行与各个查询子操作分别对应的各个数据生成子操作,在所述各个数据生成子操作中根据所述差别、所述中间结果以及与所述样本测试数据中各字段相应的数据生成约束条件对所述样本测试数据进行扩展,其中,至少一个所述数据生成约束条件反映了相应字段的特定模式。
11.根据权利要求9所述的设备,所述数据生成模块包括: 配置为若当前数据生成子操作对应于所述查询语句的最后一步查询子操作,将所述差别作为当前差别与所述最后一步查询子操作的查询结果一起作为当前数据生成子操作的输入的模块。
12.根据权利要求10所述的设备,其中所述当前数据生成子操作是聚合生成子操作,则所述数据生成模块进一步包括: 配置为对于所述当前差别中的每一条记录: 根据与所述聚合生成子操作相对应的聚合查询子操作的中间结果,在所述聚合查询子操作的输出结果中为当前差别中的该条记录确定当前关联记录, 根据所述聚合查询子操作的中间结果,在所述聚合查询子操作的输入数据中确定所述当前关联记录的当前对应记录, 复制所述当前对应记录并根据所述当前对应记录中各字段的数据生成约束条件,以及聚合生成子操作类型对所述复制的当前对应记录进行修改的模块; 配置为将所有修改后的复制的当前对应记录与所述聚合查询子操作的输入数据一起作为所述聚合生成子操作的输出,其中,该聚合生成子操作的输出作为下一步数据生成子操作的输入,该所有修改后的复制的当前对应记录作为所述下一步数据生成子操作输入中的当前差别,该聚合生成子操作中得到的当前对应记录作为下一步数据生成子操作中的当前关联记录的模块。
13.根据权利要求11所述的设备,其中,所述当前数据生成子操作是投影生成子操作,则所述数据生成模块进一步包括: 配置为对于所述当前差别中的每一条记录: 根据与所述投影生成子操作相对应的投影查询子操作的中间结果,在所述投影查询子操作的输出结果中为当前差别中的该条记录确定当前关联记录, 根据所述投影查询子操作的中间结果,在所述投影查询子操作的输入数据中确定所述当前关联记录的当前对应记录, 根据所述当前对应记录补齐当前差别中该条记录中缺少的字段,并根据各字段的数据生成约束条件对所述补齐后的记录进行修改的模块; 配置为将所有补齐并修改后的记录与所述投影查询子操作的输入数据数据一起作为所述投影生成子操作的输出,其中,该投影生成子操作的输出成为下一步数据生成子操作的输入,该所有补齐并修改后的记录成为下一步数据生成子操作输入中的当前差别,该当前投影生成子操作中得到当前对应记录成为下一步数据生成子操作输入中的当前关联记录的模块。
14.根据权利要求11所述的设备,其中,所述当前数据生成子操作是选择生成子操作,则所述数据生成模块进一步包括: 配置为根据与所述选择生成子操作相对应的选择查询子操作的中间结果,在所述选择查询子操作的输出结果中为当前差别中的记录确定当前关联记录的模块; 配置为把所述选择生成子操作的输入直接作为所述选择生成子操作的输出,该输出成为下一步数据生成子操作的输入,并且,所述选择生成子操作的输入中的当前差别和所述当前关联记录成为下一步数据生成子操作输入中的当前差别和当前关联记录的模块。
15.根据权利要求11所述的设备,其中,所述当前数据生成子操作是连接生成子操作,则所述数据生成模块进一步包括: 配置为根据与所述连接生成子操作相对应的连接查询子操作的中间结果,在所述连接查询子操作的输出结果中为当前差别中的记录确定当前关联记录的模块; 配置为对所述连接生成子操作的输入执行所述连接子操作的反操作生成所述连接生成子操作的输出,该输出成为下一步数据生成子操作的输入,并且,所述连接生成子操作的输入中的当前差别和当前关联记录成为下一步数据生成子操作输入中的当前差别和当前关联记录的模块。
16.根据权利要求11所述的设备,是根据最大相似度的原则确定所述当前关联记录。
17.根据权利要求10所述的设备,其中所述查询模块还包括: 配置为对于所述期望查询结果中的每一条记录,如果在所述实际查询结果中没有找到相匹配的记录,则将该条记录作为所述差别中的一条记录的模块。
18.根据权利要求10所述的设备,还包括: 配置为如果所述实际查询结果为空,按所述查询操作的逆向找到下一个选择子操作的模块; 配置为调整所述找到的选择子操作的条件并重新执行所述查询操作,直至获取非空的查询结果并将其作为所述实际查询结果的模块。
【文档编号】G06F11/36GK104346366SQ201310325671
【公开日】2015年2月11日 申请日期:2013年7月30日 优先权日:2013年7月30日
【发明者】胡国强, 朱俊, 段宁, 丁建栋, 黄胜 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1