CN107077413B - 数据驱动的测试框架 - Google Patents
数据驱动的测试框架 Download PDFInfo
- Publication number
- CN107077413B CN107077413B CN201580048211.5A CN201580048211A CN107077413B CN 107077413 B CN107077413 B CN 107077413B CN 201580048211 A CN201580048211 A CN 201580048211A CN 107077413 B CN107077413 B CN 107077413B
- Authority
- CN
- China
- Prior art keywords
- data
- application
- design module
- test
- designed test
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Abstract
一种用于测试应用的装置,包括数据处理机,该数据处理机包括存储器和可操作地耦接至存储器的处理器。该数据处理机配置为实施数据驱动测试框架,数据驱动测试框架包括数据设计模块(16)、计算环境管理器(44)和结果分析模块(72)。数据设计模块配置为至少部分基于待测应用创建设计出的测试数据。计算环境管理器配置为控制计算环境,应用在该计算环境中操作设计出的测试数据。结果分析模块配置为将由应用操作过的设计出的测试数据与预期输出比较。
Description
相关申请的交叉引用
本申请要求于2014年9月8日提交的序列号为62/047,256的美国申请的优先权。
技术领域
本公开涉及质量控制,尤其涉及用于识别软件应用中的瑕疵或缺陷的装置及方法。
背景技术
数据处理机需要重新配置,以便将其从通用计算机转换成执行特定任务的专用机器。通过为通用计算机提供完成其过去所不能完成的事情的能力,使得所得的重新配置改进了通用计算机。通常使通用计算机执行某中专门软件来执行这种重新配置。这种专门的软件通常称作“应用”或“app”。
对于大型项目而言,待测试的应用由一个团队的工程师来设计并实现。然后该应用被提供给质量保证团队。质量保证团队通常与该设计团队分离。质量保证团队继续查找该应用中的缺点或缺陷。
用于测试应用的过程可能非常困难。这种困难可由多种原因导致。原因之一是质量保证团队本质上试图去证明一个否定的论点,即被测试的软件中不存在缺点或缺陷。通常,运行大量的测试以覆盖每一种可能的情况是不经济的做法。因此需要得当地选择测试数据。
测试应用的过程中的另一困难是进行测试的环境可能产生偏差。该环境通常包括正在执行的软件和将要由应用操作的数据。在正在被测试的应用与正在执行的其他软件相互影响的情况下,知道正在执行的其它软件是什么是重要的。当前具有正确的数据是重要的,因为正在被测试的应用的特征很大程度上取决于提供至该应用的数据。例如,应用可能需要来自数据库的某些数据。在这样的情况下,测试应用需要知道数据库具有该正确的数据。因此,质量保证团队通常采取多种措施来控制环境。
在测试应用中出现的另外的困难是确立结果的完整性。在一些情况下,对于在特定环境下被处理的输入数据的给定输入集,可能难以知道什么结果应当被认为是“正确”或“错误”的。
由于测试是软件研发生命周期的主要部分,因此提供一种更有效地进行检测的方法是有用的。
发明内容
在一个方案中,本发明描述了用于测试应用的装置。这种装置包括数据处理机,该数据处理机具有存储器和可操作地耦接至所述存储器的处理器。所述数据处理机已经被配置为实施数据驱动测试框架,所述数据驱动测试框架包括数据设计模块、计算环境管理器和结果分析模块。所述数据设计模块配置为至少部分基于待测应用创建设计出的测试数据。同时,所述计算环境管理器配置为控制计算环境,在所述计算环境中,所述应用对所述设计出的测试数据进行操作。最后,所述结果分析模块配置为将由所述应用操作过的设计出的测试数据与预期输出比较。
在一些实施例中,所述数据设计模块配置为提取生产数据的子集。所述子集被选择以实现指定的代码覆盖率。所述设计出的测试数据包括所述生产数据的所述子集。
在另一些实施例中,所述数据设计模块包括包括用于从生产数据生成提炼后的数据的数据提炼器。
还包含在本发明范围内的实施例是,所述数据设计模块配置为提取生产数据的子集,并且用附加数据增强所述子集,从而生成增强数据。所述附加数据被选择以实现指定的代码覆盖率,并且所述设计出的测试数据包括所述增强的数据。
在一些实施例中,所述数据设计模块包括数据提炼器和数据加强器,所述数据加强器用于从所述数据提炼器中接收提炼后的数据并加强所述提炼后的数据。
其它实施例包括所述数据设计模块配置为至少部分基于所述待测应用生成数据的实施例。所生成的数据被选择以实现指定的代码覆盖率,以及所述设计出的测试数据包括所述生成的数据。
另一些实施例包括其中所述数据设计模块还包括用于生成正数据的正数据制造器的实施例,其中所述数据设计模块配置为至少部分基于所述待测应用生成数据并且生产数据中不存在该数据的实施例,以及其中所述数据设计模块还包括用于生成负数据的负数据制造器的实施例。
在一些实施例中,所述数据设计模块包括用于生成设计出的测试数据的装置。
另一些实施例包括所述数据设计模块包括用于确定所述设计出的测试数据的引用完整性的完整性检查器的实施例;以及其中所述数据设计模块还配置为检测引用完整性中的错误的实施例。
实施例还包括所述数据设计模块包括用于在输出作为设计出的测试数据的数据之前校正所述数据中的引用完整性的缺失的再引用器的实施例;以及其中所述数据设计模块还配置为校正数据中的引用完整性的缺失的实施例。
进一步的实施例如下:所述数据设计模块包括检验单元,检验单元用于接收所述设计出的测试数据并使用户能够查看所述设计出的测试数据或者对设计出的测试数据进行侧写;所述数据测试模块包括数据检验单元,数据检验单元用于接收所述设计出的测试数据,并使用户能够查看所述设计出的测试数据;所述数据设计模块包括侧写器,该侧写器用于接收所述设计出的测试数据并使用户能够对所述设计出的测试数据进行侧写;所述数据设计模块还配置为使用户对所述设计出的测试数据进行侧写;以及所述数据设计模块还配置为使用户能够查看所述设计出的测试数据。
在一些实施例中,所述数据设计模块包括用于生成设计出的测试数据的多种方式。在这些实施例中,关于如何生成设计出的测试数据的选择至少部分依赖于与待测应用相关的信息。在另一些实施例中,数据设计模块包括数据加强器、数据提炼器、负数据制造器和正数据制造器,它们中的每一个均被配置为提供形成所述设计出的测试数据的基础的数据。
本公开还包括如下实施例:所述数据设计模块包括逻辑提取器,逻辑提取器配置为识别所述待测应用中待测试的逻辑函数,并且将这些逻辑函数提供至数据提炼器;以及所述数据设计模块还配置为识别所述待测应用中待测试的逻辑函数,并提供这些逻辑函数以使其用作用来获得生产数据子集的基础。
在进一步的实施例中,所述计算环境管理器包括用于自动创建并卸载计算环境的装置,将被测试的待测应用在所述计算环境中被测试。
本发明还包括如下实施例:所述计算环境管理器包括环境转换机。所述环境转换机配置为识别所述设计出的测试数据的源,并且还配置为识别目标,由所述待测应用处理所述设计出的测试数据而获得的数据放置在所述目标中。
在一些实施例中,所述环境转换机还配置为将设计出的测试数据从第一资料库复制到所述源。在这些实施例中,所述环境转换机还配置为将设计出的测试数据从所述目标复制到第二资料库。
本发明的实施例包括如下所述计算环境管理器包括环境备份机和恢复机的实施例。在这样的实施例中,所述环境备份机配置为在将第一环境转换成第二环境之前备份所述第一环境,所述待测试应用的测试即将发生在所述第二环境中。所述恢复机配置为用所述第一环境替换所述第二环境。
在一些实施例中,所述计算环境管理器包括执行器,所述执行器配置为促使待测应用执行。在这些实施例中包括所述执行器配置为当促使所述应用执行时自动执行脚本的实施例。
另一些实施例包括计算环境管理器,其包括环境转换机、环境备份机、恢复机和执行器。在这些实施例中,所述环境转换机配置为识别所述设计出的测试数据的源,所述环境转换机还配置为识别目标,由所述待测应用处理所述设计出的测试数据而获得的数据放置在所述目标中,所述环境备份机配置为在将第一环境转换成第二环境之前备份所述第一环境,所述待测试应用的测试即将在所述第二环境中发生。所述恢复机配置为用所述第一环境替换所述第二环境。以及所述执行器配置为启动所述待测试应用的执行。
在另一个方案中,本发明的特征在于在计算系统中处理数据的方法。这样的方法包括测试应用。在此情况下的测试应用包括通过输入装置和数据处理系统的端口之一接收表示待测应用的信息,以及处理所述接收到的信息。处理该接收到的信息包括至少部分基于该信息创建设计出的测试数据;控制计算环境,所述应用在所述计算环境中操作所述设计出的测试数据;以及将由所述应用操作过的设计出的测试数据与预期输出比较;以及输出表明所述比较的结果。
在另一个方案中,本发明的特征在于用于测试应用的计算系统。这样的计算系统包括用于记忆信息的装置和用于处理信息的装置。用于处理信息的装置包括用于数据驱动测试的装置。该用于数据驱动测试的装置包括用于通过输入装置和/或数据处理系统的端口接收信息的装置。该信息代表待测试应用。所述用于数据驱动测试的装置还包括:用于至少部分基于待测应用生成设计出的测试数据的集合的装置;用于管理计算环境的装置,在该计算环境中,应用操作通过由用于至少部分基于待测应用生成设计出的测试数据的装置生成的设计出的测试数据;以及用于将应用操作过的设计出的测试数据与预期结果互相比较的装置。该计算系统还包括用于输出结果的分析的装置。
在另一个方案中,本发明的特征在于以非暂时性形式储存在计算机可读介质上以用于管理应用的测试的软件。这样的软件包括用于使计算系统执行特定处理步骤的指令。这些处理步骤包括:至少部分基于待测应用创建设计出的测试数据;控制计算环境,所述应用在所述计算环境中操作所述设计出的测试数据;将由所述应用操作过的设计出的测试数据与预期输出比较;以及输出所述比较的分析。
根据下列详细的描述及附图,本发明的上述及其它特征将变得显而易见。
附图说明
图1是用于应用测试机的数据驱动测试框架的各构件之间的结构关系的示意图;
图2示出了来自用户界面的画面。
图3示出了图2中的几个框展开之后的画面;
图4示出了使用图3中指定的输入和输出数据文件进行测试的图;
图5示出了用于配置输入数据文件的选项;
图6示出了用于指定用于配置基准的信息的框;
图7示出了用于逐条记录比较的选项;
图8示出了关于测试实际上是否正确运行的信息;
图9示出了基于基准测试应用的结果的总结;
图10示出了图2中其他框展开之后的的画面;
图11示出了关于源级代码覆盖率的示例性报告;
图12是图1的数据驱动测试框架所示的数据子集构造器的各组件之间结构关系的示意图;
图13是图1的数据驱动测试框架所示的数据制造器的各组件之间的结构关系的示图;
图14是图1的数据驱动测试框架所示的数据增强器的各组件之间的结构关系的示图;
图15是图1中的数据驱动测试框架的环境管理机的各组件之间的结构关系的示图;以及
图16是高效测试过程的总览。
具体实施方式
通过确保良好的数据可用于测试、提供在已知环境中自动运行应用的可重复测试的方法、收集可以用于衡量正确性或可以评估被测应用的性能的结果、以及具有用于评估这些结果的方法,可以实现更高效的测试。
图1示出了数据驱动测试框架10,该数据驱动测试框架10安装在测试计算机12中,从而对测试计算机12上的应用14进行有条不紊的高效测试。如本文所用的,“测试计算机”意在包括一个或多个处理系统,这一个或多个处理系统协同操作以执行应用测试过程。
图2示出了用户界面的第一画面,数据驱动框架10设置该用户界面以提供与测试应用14相关的使用。第一画面具有十个框。如图3所示,当被点击时,这些框中的每一个框展开以显示更深层级的框,这些框为用户提供众多选择。图1和图2中的框以符合任务顺序的方式从左到右布置成多栏,这些任务通常在测试应用14期间执行。
图2的第一栏示出了“单一测试(Single Test)”框、“输入数据集(InputDatasets)”框和“输出数据集(Output Datasets)”框。
如图3中的扩展形式所示,“单一测试”框使用户能够配置特定测试,指定测试数据集将要保存的位置,并且识别用于实施关于测试环境的创建或卸载的自定义逻辑的任意图(graph)、平面图(plan)或脚本(script),或者执行测试结果的分析。
“输入数据集”和“输出数据集”框可以使用户能够指定输入和输出数据集的位置。通常,输出数据集是应用14改变的那些数据集,而输入数据集是应用14用于确定如何改变输出数据集的那些数据集。例如,应用14可以从多个车行中的每一个车行接收关于收益的每日报告,并且可以更新累计收益的数据库。在该情况下,待更新数据库是“输出”数据集,每日收益报告是“输入”数据集。
图3所示的特定示例与测试图4所示的图相关。该图的特征包括五个输入数据集和两个输出数据集。在图3中,这些数据集的名称列在适当的“输入数据集”和“输出数据集”框中。
图5示出了输入配置框,该输入配置框在将测试框架的视角转移到图3中的“A-客户(A-Customers)”数据库时显示。输入配置框使用户能够标识数据集的名称和类型,数据集类型的示例包括输入文件和输入数据库表格。输入配置框还能够使用户指定输入数据集的状态。数据集状态的一个示例是该数据集是否被压缩。输入配置框还能够使用户指定到输入数据集的路径并且指定数据集的记录格式。测试框架10为指定的每个输入和输出数据集示出相似的框。
当应用操作数据时,通常以某种方式修改数据。应用14是否正确地修改数据为应用14是否正确地操作提供了重要的依据。但是,通常不可能简单地检验已修改数据并宣布其是正确还是不正确。一般来说,需要将已修改数据与已知是正确的其它数据比较。已知是正确的数据被称作“基准(baseline)”。
第一画面的第二栏包含关于检验应用14是否正确执行其函数的框。该第二栏的特征包括“基准比较”框和“指标(metrics)”框。
“指标”框提供用于使用户能够指定应该显示关于应用执行的什么统计数据。例如,这包括经过时间、CPU时间和代码覆盖率。
“基准比较”框能够使用户标识基准数据并对基准数据进行某些运算,以便其用作基准。例如,有可能基准数据具有某些输出数据中未出现的字段,或者所述基准数据中的某些字段本来就与输出数据中的相应字段不匹配。一个示例可以是日期/时间戳,它没有作用但在两种情况下均是不同的。
图6示出了基准配置框,该基准配置框在将测试框架的视角转移到图3中的“基准比较”框中的“配置基准…”选项时显示。基准配置框为用户提供了选择比较类型的机会。比较类型的示例可以是测试数据集库(repository)中的一连串文件或MFS文件之间的比较。基准配置框还为用户提供了用来指定基准所处位置、是否压缩基准、其记录格式以及在比较前删除任意基准字段或输出字段的机会。
如图3所示,有两种方式来执行基准与应用14输出之间的比较。一种方式是执行逐条记录比较,这种方式在图3中由选项“配置逐条记录比较(Configure Record by recordcomparison)”指示。另一种方式是检验聚合数据而不是逐条记录比较。这种方式在图3中由选项“配置统计比较…(Configure statistical comparison…)”显示。该方式的一个示例可以是确定出数据集中的记录数量对应于记录的预期数量。
图6.5示出了在图3的“基准比较”框中的“配置逐条记录比较”被点击时可用的选项。可用选项包括指定待比较的键(key),以及指定比较时要排除的字段。例如,如果字段包括日期/时间戳,则这是有用的(日期/时间戳本来就不能匹配,因为相同的时间不会出现第二次)。
第三栏包括单一测试运行(Single-Test-Run)框,用于控制测试的实际执行。单一测试运行框给出了保存历史结果和仅运行基准分析的选项。
第四栏和最后一栏包含关于结果分析的选项。可以产生多种报告。但是,在实际检验测试结果之前,确定测试实际上是否正确运行是有用的。具体地,确定所有的输入和输出文件被正确指定,以及创建测试(实际上是运行测试)的各步骤和分析结果均成功完成是有用的。这可以通过选择第四栏的“单一测试结果(Single Test Results)”框中的“查看运行的事件详情(View Event Detail for Run)”来实现。这样将产生一个如图8所示的报告。根据图8中所示的报告,除了一个特定分析步骤之外,其它步骤都运行顺利。通过进一步点入报告可以找到运行错误的步骤的详情。
在确定测试是否达到用户的满意度之后,可以检查比较了测试结果和基准结果的报告。如图9所示,一个这样的报告是基准与通过测试应用14所产生的结果之间的比较的总结。通过点击图3“基准比较结果(Baselin Comparison Results)”框中的“查看总结(ViewSummary)”来获取该报告。该报告示出了基准记录的数量和具有偏差的记录的数量。显然,图9中的测试结果表明被测试的应用产生了许多错误。
除了查看应用产生的错误数量和错误出现的位置,还可以查看关于代码覆盖率的报告。代码覆盖率可以用多种方式表达,包括图像级别、组件级别和种类级别的覆盖率指标。通过点击图3中的“代码覆盖率结果(Code Coverage Results)”可以查看可用选项。这样展开了框以显示图10示出的选项。
图11示出了关于源级别覆盖率指标的报告的示例。通过点击图10的“代码覆盖率结果框(Code Coverage Results)”中的“查看源级别代码覆盖率指标(View Source-LevelCode Coverage Metrics)”获取该报告。
示出的数据驱动测试框架10为测试计算机12提供了在数据驱动测试框架10安装之前测试计算机12所不存在的功能。这样,所示出的数据驱动测试框架10为已经安装了该数据驱动测试框架10的测试计算机12的操作提供了显著的技术改进。
待测试的应用14可以包括通过编译源代码来获得目标代码。在某些实施例中,该源代码表示有向无环图。在另一些实施例中,源代码表示平面图。
在一些实施例中,源代码表示图。这些图的节点定义了具有由有向链接连接的端口的处理组件,以便实现组件之间的数据流。在这样的图中,通过在输入端口接收输入数据、处理该数据以及在输出端口提供所得的输出,各组件可以执行计算。
在一些实施例中,源代码表示平面图。平面图是有向无环图,其中节点表示任务并且有向链路定义了任务之间的依赖关系,使得直到上游任务完成才能开始下游任务。在一些实施例中,任务用于执行图。
所编译的与应用14相关的源代码还可以包括代表“pset”的信息或参数集。参数集提供了参数列表以及与这些参数中的每一个对应的值。在一些实施例中,参数集用于提供用来自定义图像的参数。
应用14不限于源自应用的源代码表示数据流图、控制流图和平面图的那些应用。实施例还包括应用14包括通过适当地编译或翻译源代码(所述源代码用任意计算机语言编写,例如,C代码或Java代码)所获得的目标代码的那些应用。在名称为“数据记录选择(DATARECORDS SELECTION)”的美国专利(发明人为Isman等人,公开号为2014-0222752,公开日为2014年8月7日)中提供了执行这类应用的进一步描述,通过引用将该专利的内容并入到本文。
应用14通常实施由一个或多个变量的值触发执行的规则。这些变量可以是对应输入数据的输入变量。或者,它们可以是取决于输入数据中的一个或多个输入变量的导出变量。为了有效测试应用,有时需要提供测试数据,该测试数据足以促成应用14中每个逻辑规则的执行,以便在应用中实现完整的代码覆盖率。还期望要使逻辑规则至少执行相应的最小次数,或者,反过来,使逻辑规则执行不多于最大次数。
有效测试的首要障碍是获取适当的测试数据,基于此,当由应用14操作该数据时就可以满足上述要求。本文所考虑的特定测试数据是构造成一系列记录的数据,每条记录由一个或多个字段组成。
获取测试数据的一种方式是使用从生产系统(production system)中所提取的充足的数据量。原则上,该方法依赖于测试大量的数据,这种数据量要求使忽略测试某些代码的特征的可能性逐渐接近于零。
这些数据量过去通常是巨大的。因而每个测试周期将花费不合理的超长时间。
为了克服前述障碍,示出的数据驱动测试框架10包括数据设计模块16,所述数据设计模块16生成测试应用14时用到的设计出的测试数据。在名称为“数据生成(DATAGENERATION)”的美国临时申请(发明人为Isman等人,申请号为61/917,727,申请日为2013年12月18日)和名称为“数据记录选择(DATA RECORDS SELECTION)”的美国专利(发明人为Isman等人,公开号为2014/0222752,申请号为13/827,558,申请日为2013年3月14日)中均描述了如何生成设计出的测试数据的示例。通过引用,前述两个申请的内容均并入本文。
本文所述的数据驱动测试框架10旨在利用这样的发现:即总数据量不是代码覆盖率唯一依赖的事。事实上,代码覆盖率还取决于数据本身的性质。具体地,代码覆盖率取决于该数据的逻辑密集度(logic concentration)或逻辑分布(logic distribution)。在实践中,只要实际用于测试的数据被设计为具有更高的逻辑密集度,一般就可以使用数量明显较少的数据实现期望的代码覆盖率。
如本文所用的,术语“代码覆盖率”是源代码已经被测试过程测试的程度的量度。它可以表达成第一值与第二值的比率(通常表达为百分比),其中,第二值表示待测代码总量的量化量度,第一值表示实际待测量的量化量度。在一些情况下,第一和第二变量表示用于所实施的特征的已测试特征。在另一些情况下,第一和第二变量表示已测试的源代码的行以及源代码的总行。显然,量化量度的确切性质对于理解本发明是不重要的。
不要求数据驱动测试框架10实现任何特定代码覆盖率,更不用说100%代码覆盖率。代码覆盖率是由用户基于工程确定所设置的参数。但是,无论用户选择的是什么代码测试覆盖率,本文所述的方法和装置将减少实现该覆盖率所需的测试数据的量,相比于通过简单操作生产数据的总量来尽可能实现目标代码测试覆盖率而言,本文所述的方法和装置以更加可靠且稳定的的方式也实现该目标代码测试覆盖率。
具体地,给定一组测试数据,将锻炼(exercise)代码的特定部分。不同测试数据集通常将锻炼代码的不同部分。例如,如果测试数据一遍又一遍的简单重复数据记录,则它将仅锻炼非常有限的代码子集。相反,包含具有各种值的组合的多种记录的测试数据将更有可能锻炼更大的代码子集。
数据设计模块16包括从组件集中选择的一个或多个组件。各组件使用特定方法生成设计出的测试数据。选择使用什么方法以及由此而需要什么组件均取决于当前的特定环境。
数据设计模块16的组件包括数据子集构造器18(data subsetter)、数据增强器20、正数据制造器22(positive data manufacturer)和负数据制造器24(negative datamanufacturer)中的一个或多个。数据子集构造器18通过提炼已有数据生成设计出的测试数据,以便增加其逻辑密集度。数据增强器20通过增强已有数据来生成设计出的测试数据。正数据制造器22和负数据制造器24均基于测试的要求创建设计出的测试数据。
还存在一些情况,其中已经数据中不存在用于测试应用14中的特定逻辑的数据种类。但是,这并不意味着不应该测试该逻辑。
如果仅依赖测试数据去锻炼该逻辑,那么将永远不会测试该逻辑。这是因为,无法保证已有数据的精炼量来产生可以用于测试该逻辑的数据。为了适应这些情况,数据设计模块16的某些实施例包括负数据制造器24。
负数据制造器24提供通常不出现的数据。这扩展了测试的代码覆盖率,因为能够使得其它情况下不具有被测试机会的代码得到锻炼。负数据制造器24不同于正数据制造器22,因为负数据制造器24提供一般不出现在典型数据集中(或典型数据集的样本中)的数据(本文称作“负数据”)。相反,正数据制造器22生成通常出现在典型数据集中(或典型数据集的样本中)的数据(本文称作“正数据”)。负数据的示例包括不适用于字段格式的字段条目(field entry),例如,包括不是为字段预先定义的字符集中的字符的字段条目,或具有超过字段的值的预定义范围的值的字段条目,或包括字段条目的一个或多个部分中的错误字符数的字段条目。示例可以是包含字母或具有值为0的出生月份的社会保障号码(social-security number)。负数据的其它示例包括那些与字段格式一致但仍然破坏了引用完整性的示例。一个示例可以是格式正确却无法识别任何现有客户的客户号码。使用这类负测试情况增强了代码覆盖率。但是,这类负数据不可能出现在生产数据集(productiondataset)中,因此通常需要制造。
由于已经产生了设计出的测试数据,因而在应用14被研发时就可以容易的进行该应用14的交互调试。相比于处理巨大的数据集(这需要花费数十分钟甚至数小时),这运行起来更富有成效。例如,当在局部环境中使用设计出的测试数据时,可以在商业规则环境中于各条记录上看到变化规则的效果。
数据子集构造器18产生一组设计出的测试数据,该组设计出的测试数据足够小,以便应用14的研发者可以快速看到对该应用14进行改变的效果。但该组设计出的测试数据不只是小,其还具有高测试逻辑密集度。由于其高测试逻辑密集度,设计出的测试数据锻炼应用14的全部代码而无需整个数据集。因此消耗相同的计算资源却实现了高代码覆盖率。
图12示出了数据子集构造器18的细节。数据子集构造器18接收实际的生产数据26(或用于子集构造(subsetting)的任何输入数据集、逻辑规范28以及控制变量30。逻辑提取器31识别待测的逻辑函数并将它们提供至数据提炼器32(data still)(逻辑提取器31和数据提炼器32均是数据子集构造器18的组成部分)。然后数据提炼器32处理生产数据26以生成数据精华33(data distillate)。它通过使用由控制变量30指定的提取过程来提取那些与测试由逻辑提取器31指定的逻辑相关的部分来实现。因而,如本文所用的,术语“数据提炼器”用于指一处理模块,该处理模块使用指定的提取过程从输入数据集中提取部分数据,产生的提取数据称为“数据精华”。
基于子集构造规则从生产数据26中选择数据精华33。这些子集构造规则可以来自多个源。在一个示例中,用户指定子集构造规则。在另一个示例中,基于执行应用的反馈制定子集构造规则。在另一个示例中,数据精华33包括可以使应用14中的部分代码或全部代码被执行的数据记录。
作为一个示例,生产数据26可以包括数据记录,每个数据记录包括多个字段,一些字段具有特定允许值,一些特定允许值比另一些特定允许值更容易出现。不同的允许值锻炼代码不同的部分。因而,为了全面测试代码,必须出现所有值的全部组合。在一些实施例中,通过使那些小概率的值更容易出现来导出设计出的测试数据,这样,就不是那么多记录都需要获取允许值的全部组合。
在此情况下,设计出的测试数据可以认为是记录的值的概率分布已经变得更加均匀的数据。话句话说,如果特定允许值出现在生产数据26中的概率相对较低,那么该值在设计出的测试数据中出现的概率相对较高。相反,如果特定允许值在生产数据26中出现的概率相对较高,那么该值在设计出的测试数据中出现的概率相对较低。这样产生的实际效果是,具有了最有可能事件的概率降低而最不可能事件的概率升高的设计出的测试数据。这减小了概率值的分散。定义均匀分布的时候就是这种情况的极限状态(即概率值分散为0)。因而,概率值整体分散的减小趋于将分布朝均匀分布推进。这样趋于产生更有效的用于测试的数据集,因为减少了更可能值所引起的冗余,同时也减少了确保获取最不可能值所需的量。效率的程度对应于设计出的测试数据的测试逻辑密集度。
在许多情况中,生产数据26将由数据库中的多个表格构成。让第一表格中的指针指向或“引用”第二表格的记录可以耦接这些表格。
每当指针指向某些记录时,存在两种可能:(1)指针指向了有效记录,以及(2)指针未指向有效记录。
在第一种可能中,第一表格中的每个指针指向第二表格中的有效记录。在该第一种可能中,这两个表格被描述为具有“引用完整性(referential integrity)”。所以,正如本文所使用的,术语“引用完整性”用于描述一个或多个数据集,在所述数据集中,所述数据集一部分对于所述数据集另一部分中的值的每个引用是有效的。
在上述第二种可能中,第一表格中的至少一个指针不指向第二表格中的有效记录。在该第二种可能中,两个表格被描述为缺少引用完整性。
为了进行合适的测试,优选的是,如果生产数据26具有引用完整性,那么设计出的测试数据也应如此。因此,数据提炼器32应当提供保持应用完整性的数据精华33。
为了确定是否保持了这种引用完整性,数据提炼器32将数据精华33提供至完整性检查器34。如果完整性检查器34确定出数据精华具有引用完整性,那么数据精华33被提供为数据子集构造器18的输出数据子集35。否则数据精华33被提供至再引用器36以修复,修复之后再被提供为输出数据子集35。
在一些实施例中,再引用器36和数据增强器20实现相同的功能。例如,如果因为一个数据集中的指针没有指向另一个数据集中的记录而发生了引用完整性的缺失,那么再引用器36可以利用与数据增强器20所用方法相同的方法而通过适当的记录来增强第二数据集。因而再引用器36可以被视为数据设计模块16的可选构成部分。
在特定实施例中,如图所示,数据子集构造器18还包括数据检验单元37,它能够查看和/或概述输出数据子集35。但是,在另一些实施例中,不存在数据检验单元37。
具有数据检验单元37的实施例中包括数据检验单元37是观察器的实施例和数据检验单元37是归纳器的实施例。在包括数据检验单元37的实施例中还包括的实施例是所述实施例中的数据检验单元37基于用户所期望的目的而成为既能够查看也能够归纳的一种结构。
如本文所使用的,“归纳”数据子集可以包括例如获取元数据或关于该子集的聚合数据,并且归纳的结果称为“侧写(profile)”。聚合数据包括多个特征,例如,记录的数量、所述记录中的值的范围以及数据中的值的统计或概率描述(例如,概率分布的n阶矩,其中n为正整数)。
例如,有时当研发新系统时,不存在可用于提炼的生产数据。在其它情况中,生产数据可能很难获取。为了适应这些状况,一种方法是激活数据设计模块16的正数据制造器22。
参考图13,正数据制造器22接收逻辑规范28、控制变量30和核心关系信息38(key-relationship information)。逻辑提取器31识别待测试逻辑函数并将它们提供至数据生成器40(data generator)。然后,数据生成器42使用由控制变量30指定的提取过程来生成合适的测试数据。在名称为“数据生成(DATA GENERATION)”的美国临时申请(发明人为Isman等人,申请号为61/917,727,申请日为2013年12月18日)和名称为“数据记录选择(DATA RECORDS SELECTION)”的美国专利(发明人为Isman等人,公开号为2014-0222752,公开日为2014年8月7日)中描述了如何生成数据的示例。
优选地,所得的制造出的测试数据39具有引用完整性以进行合适的测试。因此,将制造测试数据39提供至完整性检查器34以确定是否已经建立引用完整性。如果完整性检查器34确定出制造数据具有引用完整性,那么将制造测试数据39作为正数据制造器输出41提供。如果制造测试数据不具有引用完整性,那么将制造测试数据39提供至再引用器36以修复,然后提供为正数据制造器22的输出。
在一些实施例中,正数据制造器22还包括数据检验单元37,它能够在数据驱动测试框架10中查看并归纳制造出的测试数据39。在另一些实施例中,不存在数据检验单元37。
在一些情况下,存在生产数据26,但是不完全以所需形式存在。在这类情况下,通过激活数据设计模块16的数据增强器20来增强生产数据是有用的。
例如,可以使用数据增强器20来基于所提供的规则向已有生产数据26添加一个或多个字段并且生成数据以填充这些字段。
图14示出了数据增强器20的细节。数据增强器20接收实际的生产数据26(或任何待增强的输入数据集)、逻辑规范28和控制变量30。逻辑提取器31识别待测试的逻辑函数,并将它们提供至数据提炼器32和数据调整器48(data modifier)。然后,数据提炼器32处理生产数据26,以便使用由控制变量30指定的提取过程来提取那些与测试逻辑提取器31指定的逻辑相关的部分。基于逻辑提取器31所提供的信息,数据调整器48添加适当的字段并在这些字段中输入合适的值,从而生成增强数据49。
优选地,由数据调整器提供的增强数据49具有用来进行合适测试的引用完整性。因此,将由数据调整器48提供的增强数据49提供至完整性检查器34以确定是否已经保持了引用完整性。如果完整性检查器34确定出增强数据49具有引用完整性,那么将增强数据49提供为数据增强器20的增强数据输出51。否则,将增强数据49提供至再引用器36以修复,然后提供为数据增强器20的增强数据输出51。
在一些实施例中,数据增强器20还包括数据检验单元37,它能查看并归纳数据驱动测试框10中的增强数据输出51。在另一些实施例中,数据增强器20不具有数据检验单元。
在一些情况下,有人可能希望锻炼将不会被生产数据中通常出现的任何数据锻炼的代码段。为了解决此事,数据设计模块包括负数据制造器24,该负数据制造器24的功能是创建这种负测试状况。
高效测试的第二个障碍来自于建立、控制然后卸载测试环境的需求。
通常,测试涉及运行测试套件中的多个测试,并且对与多个外部数据集相互作用的一个或多个图和平面图做同样处理。这些数据集可以来自文件、表格、队列、多文件和网络服务。为了完成使应用14执行测试套件的任务,数据驱动测试框架10提供了计算环境管理器44。
计算环境管理器44以可控方式在已知环境中使用已知输入执行运行应用14的任务。这在指定的特定待测试应用方面提供了灵活性。计算环境管理器44维持资料库文件夹,所述资料库文件夹包含对应于将由应用14处理的输入数据的聚合数据、数据标志、输出路径以及关于建立、卸载和报告的可定制逻辑。
计算环境管理器44自动将数据集创建成文件或表格。这些数据集包括数据的源(即应用14将要操作的数据)和目标(即应用14产生的处理结果被最终存放的地方)。然后,环境管理器44自动将源和目标设置成正确的初始状态;使用合适的测试套件运行应用14;将结果存放在目标中;以及将环境恢复到其预先设置的状况。在一些情况下,环境管理器44备份先前的环境并在测试完成后将其恢复。环境的自动创建和卸载以最低的人工劳动促成了反复的测试。
计算机系统可以被视为是一组不断抽象的嵌套层。每一层均创建可以由处于更高层抽象的层使用的逻辑结构。这些包括存储状态和环境变量的值。
当应用执行时,它可以被视为在这些层上执行。一组由下层创建的逻辑结构可以被视为执行应用的环境。为了恰当地测试应用,优选地是以大致相同的方法保持相同的环境,因为恰当地测试物理结构常常取决于保持恒定的物理环境。
现在参考图15,在一个实施例中,计算环境管理器44包括环境转换机46,它引发两个环境的转换:一个在创建阶段而另一个在卸载阶段。
环境转换机46接收输入规范53和输出规范50。输入规范53标识输入测试数据的源52。该输入可以是文件、多文件、队列、网络服务或其任意组合。输出规范50标识测试输出要存放的目标54。环境转换机46还接收初始化信号56,它包含关于输入、输出和任何环境变量的初始状态的信息。最后,环境转换机46接收测试信号58以表明开始测试。
在一些实施例中,在创建阶段,环境转换机46将测试数据和/或基准数据从第一数据资料库复制到源52中(在实际测试过程中这些数据储存在源52中)。在测试过程完成之后,卸载阶段开始。在该卸载阶段中,环境转换机46从目标54中删除测试数据。
在接收测试信号58的时候,环境转换机46与环境备份机60通信以创建环境的备份62。之后是使输入源开关64指向合适的源52,以及使输出源开关66指向合适的目标54。
在完成这些任务的时候,环境转换机46向执行器68发送信号,以便使应用14执行包括一个或多个测试80的测试套件79。在一些实践中,测试套件的执行包括自动执行一个或多个脚本。在完成执行时,执行器68向环境恢复机70发送信号,然后环境恢复机70取回备份62并将环境恢复到它的初始状态。
在执行的过程中,应用14实施一条或多条规则。在一些实施例中,由至少包括条件表达式和执行表达式的规范指定规则。当条件表达式被评估为“真(true)”时,应用14继续评估执行表达式。但是条件表达式是否被评估为“真”可以取决于数据中的一个或多个变量的值。这些变量可以是对应输入数据的输入变量。或者它们可以是取决于一个或多个输入变量的导出变量。因而,应用14是否在特定测试锻炼中执行规则最终取决于测试数据的选择是否具有能使与规则对应的条件表达式被评估为“真”的变量。
在一些示例中,应用14执行所有被触发的规则。在另一些实施例中,应用14执行的规则比被触发的所有规则少。在专利号为8,069,129、申请日为2007年4月10日的美国专利的第5栏第61行到第6栏第11行,更加详细的描述了规则,该专利的内容通过引用的方式并入本文。
一旦执行器68完成了测试套件79,则结果分析模块72就接管并开始分析测试结果。结果分析模块72的功能之一是创建这些已知的正确结果集并且使得用于检验正在测试的应用14最终达到正确答复的过程。
在一些情况下,正在被测试的应用存在旧版本,正在被测试的应用的所述旧版本通常是当前使用的版本。例如,它可以视为黄金标准以确立输出的准确性。因此,即将被正在测试的应用替换掉的应用的所述旧版本将被称作“黄金标准版本”。
如果正在被测试的应用的版本没有得出与那些使用相同环境执行相同数据时由黄金标准版本获得结果一致的结果,那么可以做出的推断是正在被测试的应用的版本输出了错误的结果。
在测试应用14的过程中发生的一个步骤是确定应用14事实上是否已经正确地处理了数据。为了执行该步骤,必须有一种方法来确立对数据集进行操作的预期结果(由应用14的功能规范定义)与对相同数据集进行操作的测量结果(由执行器68获取)之间的对应关系。换句话说,需要获取正确答复的基准74。一旦可以获得这样的基准74,则结果分析模块72就可以通过将它们与基准74比较来检验结果78。
获取基准74的方法部分取决于应用14与其所代替的任何应用有多大偏差。通常,偏差越大就越难产生基准。
在抽象层面上,已知数据集X和环境E,应用f的版本n将产生输出Y=fn(X,E)。问题是如何确定Y是否是正确的。
通常有三种可能。
第一种可能是存在应用的不同版本,即版本m,它可以在(X,E)上操作。如果认为版本m是可靠的,那么通过询问fn(X,E)是否等于fm(X,E)可以来确立结果Y的准确性。
第二种可能是存在应用的另一个版本,即版本m,该版本被认为是不完全可靠。在该情况下,必须询问fn(Z,E)是否等于fm(Z,E),其中并且认为fm(X,E)对于Z是可靠的,但对于ZC不是,其中ZC是Z的补集。为了确立fn(ZC,E)的准确性,通常必须人工确定正确的结果。
第三种可能是应用不存在已知可靠的版本。这只是第二种可能的退化情况,其中Z=.。在该情况下,人工执行用于确定正确结果的过程。
当被测应用14将要代替实质上具有相同功能的当前应用时,获取基准74的一种方法是有用的。这对应上文所定义的第一种可能性。在该情况下,基准74可以来自由应用的黄金标准版本所生成的结果。
在一些情况下,被测应用14是对已有应用的增强。这种增强使得被测应用14被预期且实际上将要产生不同的结果。例如如果黄金标准版本具有引发错误答复的漏洞并且被测应用14将会修复该漏洞的话,则这种情况(对应上述第二种可能)可能出现。
对于这些情况,结果分析模块72报告哪个字段发生变化和/或输出中的记录数量是否发生变化。结果分析模块72报告任何失配以便人们可以立刻意识到在不需要变化时某些字段是否发生了偶然的变化。对于那些预期要变化的字段,可以要求人为干预以便确定正确的答复,并将正确的答复输入到基准74中。
在另一些情况下,被测应用14是全新的系统。这对应上文所概述的第三种可能。因而,不存在可以用作用于创建基准74的基础的已有输出数据。
在此情况下,从已有生产数据26开始为该生产数据26的子集输入正确的结果(例如,人工进行)来构建基准74。通过查看待测试应用14的底层逻辑,并基于该逻辑识别源数据中有可能受通过应用14的各种逻辑路径影响最大的某些字段可以实现这一目的。这些字段就是在选择数据子集的时候应该挑选的字段。
在一些情况下,某些简单测试可以被自动执行而并非必须检验基准74。例如,如果已知应用14为每条输入记录产生一条输出记录,那么可以使该应用14对已知基数(cardinality)的生产数据26进行操作,在此情况中,输出数据的基数将提供一些关于应用14的功能的信息。具体地,结果分析模块72可以自动表示在实施应用14时瑕疵的概率,到生产数据26的相应基数与应用14运算生产数据26所产生的相应基数之间存在非零偏差的程度。
例如,在某些情况下,应用14将产生包括不同基数的若干成分的输出,其中,关系存在于这些不同的基数之间。在一个示例中,应用14操作源52中的输入并在目标54中生成两个分开的表格。结果分析模块72自动检测这样的偏差并输出表明实施应用14的瑕疵的信息,到所述两个表格的基数之间存在关系的程度。
在另一个示例中,源52中的输入表格可以具有N条记录。如果已知的是目标54中的输出表格也应该具有N条记录,那么检验输出表格中的记录数量是检验软件运行程度如何的好方法。例如,如果观测到当输入中只有N条记录时在输出中有N+1条记录,那么这表明可能存在错误。
在另一个示例(即,前述示例的一般化示例)中,已知应用用某种确定的方式改变记录的数量。因而通常,如果对应N条记录输入表格的记录的输出数量是针对某个已知函数f的f(N),那么一种识别应用中的错误的方法是当输入表格具有N条记录时输出表格实际上是否具有f(N)条记录。
执行之后,有用的是提供给出表明应用14执行的信息的报告,特别是关于应用14与提供给它的测试信息的相互作用的信息。这种信息的示例可以包括应用14执行过或未执行过的规则、应用14中的各个规则的执行次数、或者可能说明应用14与测试数据之间的相互作用的任何其它信息。
基于该报告,用户可以识别附加的测试数据。该附加的测试数据可以是例如使任何未执行规则被执行的数据、使特定逻辑规则被执行特定次数的数据、或引发其它期望的执行结果的数据。然后,用户可以制定新的子集构造规则,以便根据这些附加的子集构造规则启动数据记录的更新后子集的选择。数据记录的更新后的子集可以包括:足以使部分或全部之前未执行的规则被执行的数据记录;足以使部分或全部规则被执行特定次数的数据记录;或者足以导致其它期望的执行结果的数据记录。
结果分析模块72可以提供的信息种类之中有关于测试数据采用代码的程度的报告。该报告包括累积评分(例如,被测代码行的百分比)以及更详细的信息(例如,哪行代码未被测试)。该信息能够使用户根据所测试代码的百分比以及测试中所忽略的代码的重要性来确定测试是否被充分进行。
图16提供了使用本文所述组件的高效测试过程的全面总结。该测试过程通常分为数据相关步骤82和应用相关步骤84。
数据相关步骤82包括运行关于任何已有生产信息的侧写。这被标识为步骤86,在图16中由文字“侧写生产数据(Profile Production Data)”标识。
接下来的数据相关步骤是从上述侧写中获取关于生产数据的某特定聚合数据。该步骤在图16中被标识成步骤88,它由文字“获取元数据(Get Metadata)”标识。应当理解的是“元数据”指聚合数据。这类聚合数据的示例包括但不限于键列表、字段基数和值的范围。
该元数据(或“聚合数据”)用于生成数据的引用完整子集(referentially intactsubset),如图16所标识的步骤90,它由文字“制造引用完整子集(Make referentially-intact subset)”标识。
一些做法包括通过创建并囊括负测试数据来增强引用完整数据子集。图16中被标示为步骤92,由文字“创建负数据(Create Negative-Data)”标识。
其它做法包括通过制造制造数据来增强引用完整数据子集。在图16中标示为步骤94,由文字“制造新数据(Manufacture New Data)”标识。
应用相关步骤84包括构建应用或以某种方式修复或增强应用从而调整已有应用。构建应用的步骤在图16中被显示成步骤96,并由文字“构建APP”标识。以某种方式修复或增强应用从而调整已有应用的步骤在图中16显示成步骤98,并由文字“调整APP”标识。贯穿图16的缩写“APP”是指应用14。
应用相关步骤84还包括与依赖性分析一起进行的将应用14登记到资料库中的步骤,它体现了应用的计算模块与由应用访问或产生的数据集如何相互依赖。在图16中被显示成步骤100,并用文字“登记APP,依赖性分析(Check-in APP,Dependency Analysis)”标注。
然后使应用对设计出的测试数据进行操作,如图16用步骤102所标示的,它用“在工程数据上运行APP”标注。
检验结果以确定代码覆盖率,如图16所示的步骤104,它用文字“报告代码覆盖率”标注。
基于这些覆盖率报告,数据驱动测试框架10提供可以为测试数据进行调整以提供更好代码覆盖的调整建议。在图16中显示成步骤106,它用文字“对提高代码覆盖率的建议方法”标注。
通过创建附加数据或以从已有数据中提取数据的子集的方式变化,步骤106的结果可选地导致数据设计过程的调整。该步骤在图16中被标识成步骤108并被标注成“调整数据设计”。
此外,将输出数据与基准74比较来评估输出数据的完整性,该步骤在图16中示出为步骤110并标注为“确定APP的正确结果”。
应用14被调整以消除偏差到结果不同的程度,如图16所示的步骤98,它由文字“调整应用”标记。图16中由附图标号“112”标识并且用文字“将结果与预期结果比较”标注的步骤中执行是否存在偏差的确定。
在一些实施例中,数据提炼器32根据一个或多个子集构造规则提炼生产数据26。子集构造规则是使数据提炼器32识别更大的数据记录集中将被挑选的数据记录的子集的规则。因而,所产生的数据精华33在数量上比原始数据小,但具有较高测试逻辑密集度。这样最终导致了更加有效的测试,因为当应用14操作数据精华33时,以更低的数据量可以实现更高的代码覆盖率。
数据提炼器32依赖的子集构造规则可以在内部源自数据设计模块16中、源自数据驱动测试框架10中的其它地方或者源自外部源。
在一个示例中,逻辑提取器31提供子集构造规则,逻辑提取器31使用逻辑规范28去给出数据记录的侧写并根据所得侧写的分析制定子集构造规则。然后,这些子集构造规则被提供至数据提炼器32,之后,数据提炼器32使用它们去创建数据精华33。
在另一个示例中,子集构造规则来自结果分析模块72,结果分析模块72依赖于包含对特定测试数据执行完应用14的结果的信息。然后,数据子集构造器18基于这些结果的分析(例如,基于来自结果分析模块72的报告)制定子集构造规则。最终由数据提炼器32执行这些数据以创建数据精华33。
在另一个示例中,数据子集构造器18从外部源接收子集构造规则,而不是制定子集构造规则。在一些情况下,数据子集构造器18从实际坐在测试计算机12前并通过用户界面人工指定子集构造规则的用户处直接接收子集构造规则。在另一些情况下,数据子集构造器18通过让测试计算机12从非暂时性计算机可读存储介质(例如硬盘)中读取子集构造规则或让测试计算机12经由非暂时性计算机可访问传输介质(例如网络,包括广域网,如互联网)接收子集构造规则以获取它们。
无论是外部接收的还是内部产生的,子集构造规则都是原子性的或分子性的。原子性子集构造规则不能被进一步分解多个子集构造规则。分子性子集构造规则由两个或更多个原子性或分子性子集构造规则的组合构成。通常,布尔逻辑运算符结合原子性子集构造规则以形成分子性子集构造规则。
子集构造规则也可以是确定的或随机的。确定的子集构造规则的示例是使匹配特定标准的所有记录都被选择的规则。随机子集构造规则的示例是在匹配特定标准的所有记录中随机指定这些记录中的两个将被选择的规则。
在一些示例中,子集构造规则指定一个或多个目标数据字段,并指定每个目标数据字段的各特有值或值分类被包括在数据精华33中。为了实现该示例,数据提炼器32在数据记录中识别目标数据字段的各特有值并创建仅具有那些满足该子集构造规则的数据记录的数据精华33。
例如,可以将“状态”数据字段和“性别”数据字段识别为目标数据字段,“状态”数据字段具有对应五十个状态中的每个状态的特有值,“性别”数据字段具有两个特有值。在此情况下,数据提炼器32选择对应数据精华33的数据记录,使得数据精华33的至少一条数据记录中包括针对“状态”的五十个值中的每一个值和针对“性别”的两个值中的每一个值。
在一些示例中,数据子集构造器18在相同的数据记录集中或在不同的数据记录集之间实施子集构造规则,所述子集构造规则指定数据记录之间的关系的类型。在这些示例中,数据提炼器32基于数据记录和为子集所选的其它数据记录之间的关系选择数据记录。例如,数据提炼器32可以选择对于客户标识符数据字段共享公用值的多个数据记录包括在数据精华33中。
数据子集构造器18还可以实施依赖于过滤的子集构造规则。在这些情况下,数据提炼器32在数据精华33内包括在特定目标字段具有特定值的记录。例如,数据提炼器32可以选择记录,使得“状态”的每个个值至少被表示一次。或者,数据提炼器32可以通过考虑字段“人口”的值并选择数据记录来实施分配方案,使得具有值“状态”的记录的数量取决于与该状态相关的“人口”的值。
在一些示例中,用户(诸如数据分析师或应用开发人员)提供子集构造规则。例如,用户可以标识目标字段或指定各数据记录之间的关系,并且为数据子集构造器18提供这样的规范。
在另一些示例中,数据子集构造器18对数据记录进行侧写并执行侧写的分析,以便标识或制定合适的数据子集构造规则。为了执行侧写,数据子集构造器18访问相关的数据记录并分析它们的某些特征以生成数据记录的侧写。这些特征包括下述内容的一条或多条:单个数据集的各条数据记录、数据记录集中各数据字段之间的关系、以及在不同的数据记录集之间各数据字段之中的关系。
数据记录集的侧写是数据记录集中的数据的总结。可以一个字段一个字段地提供该总结。侧写可以包括特征话数据记录集中的数据的信息。这种信息的示例包括数据记录的多个数据字段中的一个或多个数据字段的基数、多个数据字段中的一个或多个数据字段的值的分类、各数据记录中的数据字段之间的关系以及数据记录之间的关系。数据记录集的侧写还可以包括特征话“伪字段(pseudofield)”的信息。伪字段是制造的数据字段,它已经用某些值的操作所确定的值所填充,所述某些值从相关数据记录中的一个或多个数据字段中取得。
基于所生成的数据记录的侧写,数据提炼器31识别数据记录的特征,这些特征与实现应用14的良好代码覆盖率的数据记录子集的选择相关。例如,基于数据记录的侧写,数据提炼器31可以识别可能与输入变量和应用的导出变量相关的一个或多个数据字段或数据字段的组合。在一些情况下,还可以基于从用户或计算机存储介质接收的输入和/或基于执行应用14的结果(例如,基于从结果分析模块72接收的输入)来制定子集构造规则。
数据子集构造器18可以基于不同的分析方法指定子集构造规则。在一些实施例中,数据子集构造器18基于各个数据记录中的数据字段的分析指定子集构造规则。在一个示例中,这包括确定哪个数据字段可能与应用14中的变量相关。在另一个示例中,数据子集构造器18基于字段的允许值的数量识别目标数据字段。例如,“性别”数据字段仅具有两个允许值,并且可以被识别成目标数据字段。另一方面,“电话号码”数据字段不能被识别成目标数据字段。
在另一些示例中,数据子集构造器18将填入了数据的伪字段识别为目标数据字段,所填入的数据由在一个或多个数据字段中的数据的操作生成。例如,“收入”数据字段中的数据可以被分成几类(例如,高、中或低),而用“收入”数据字段的分类所填充的伪字段可以被识别为目标数据字段。
在另一些示例中,数据子集构造器18基于侧写所指示的目标数据字段和相同记录中一个或多个其他数据字段之间的关系来识别目标数据字段。例如,侧写可以指示数据字段“状态”和“压缩代码(zip code)”不是独立的。基于这种依赖关系,数据子集构造器18可以仅考虑这些数据字段中的一个字段作为可能的目标数据字段。
数据子集构造器18还可以基于侧写所指示的数据记录集内和/或不同数据记录集之间的不同数据记录之间的关系的分析指定一个或多个子集构造规则。例如,侧写可以指示多个数据记录可以经由数据字段的公共值被链接。链接值的示例可以是客户ID数据字段的值。
一旦数据子集构造器18选择了数据记录的子集,并且一旦数据检验单元37已经确认了它们的有效性,则数据设计模块16将数据记录的子集提供至计算环境管理器44,计算环境管理器44最终做好准备以便数据记录的子集正在被测试的应用14进行操作。数据设计模块16提供包括数据精华33的数据记录或指示这些数据记录的数据。例如,数据设计模块16可以向计算环境管理器44提供包括数据精华33或数据记录的地址的数据记录的标识符。数据设计模块16还可以向计算环境管理器44提供包含数据记录的所选子集的文件。
执行之后,结果分析模块72生成覆盖率分析报告,该报告包含表明对数据精华33执行应用14的结果的数据。在一些做法中,结果分析模块72生成覆盖率分析报告,该覆盖率分析报告包括标识编译应用14的源代码的执行或未执行的部分的信息,或者标识编译应用14的源代码的各部分被执行了多少次的信息。在某些做法中,结果分析模块72生成覆盖率分析报告,该覆盖率分析报告包括标识应用14执行过或未执行过的规则的信息以及标识应用14执行各个规则的次数的信息。在其它做法中,结果分析模块72生成覆盖率分析报告,该覆盖率分析报告包括标识编译应用14的源代码的执行或未执行的部分以及编译应用14的源代码的所选部分的执行次数的信息。在其它做法中,结果分析模块72生成覆盖率分析报告,该覆盖率分析报告包括标识尝试执行编译应用14的源代码的特定部分时发生的错误的信息。在另一些做法中,结果分析模块72生成覆盖率分析报告,该覆盖率分析报告包括标识当应用14尝试执行特定规则时产生的错误的信息以及被执行时导致错误的那些规则的标识。
在一些做法中,结果分析模块72生成覆盖率分析报告,该覆盖率分析报告直接表示执行过或未执行过的那些规则。在另一些做法中,结果分析模块72生成覆盖率分析报告,该覆盖率分析报告包含关于执行应用14的附加信息,例如,每个逻辑规则的执行次数、执行期间应用的各个变量的值、或其它信息。
在另一些做法中,对于应用中未被执行的各个逻辑规则,结果分析模块72识别与该逻辑规则相关的应用14的一个或多个变量。在一些做法中,结果分析模块72还基于报告所包括的数据(例如,指示通过应用14的数据流的数据)或基于关于应用的预加载信息标识变量。在一些情况下,结果分析模块72还为本应引发逻辑规则执行的各个变量标识值或值的范围。一旦标识,数据设计模块16就在之后的数据记录的更新后子集的选择中使用输入数据字段和对应于变量的值或值的范围去指定附加的子集构造规则。
例如,如果标识的变量是直接对应于数据记录中数据字段之一的应用的输入变量,则数据设计模块16标识相应数据字段和针对该数据字段的值或值的范围。
例如,如果当输入变量大于某个阈值时应用14中的逻辑规则执行,则数据设计模块16确定出任何制造的或提炼的数据应当至少包括一条数据记录,对于该数据记录,输入变量具有大于阈值的值。基于该信息,数据设计模块16指定附加的子集构造规则,使得随后提供至应用14的数据记录将包括足以促使逻辑规则执行的数据,所述逻辑规则仅当用于该逻辑规则的输入变量超过阈值时执行。
在另一个示例中,标识的变量不直接对应数据记录的数据字段之一。这样的变量称作“导出变量”。在导出变量的情况下,数据设计模块16分析数据血统(data-lineage)以便通过应用14的逻辑追踪导出变量的推导(derivation)。该数据血统分析可以标识一个特定输入变量或多个特定输入变量,该标识的变量由该一个特定输入变量或多个特定输入变量导出。然后,数据设计模块16标识相应的一个数据字段或多个数据字段以及针对该数据字段的值或值的范围。
例如,如果当导出变量的值等于特定值时应用14中的逻辑执行,那么数据设计模块16执行用于数据血统分析的指令以确定确定导出值是从三个输入变量的逻辑组合导出的。通过遵循导出变量的逻辑推导,数据设计模块16确定这三个输入变量的所需值以实现特定的导出变量。
用于产生导出变量的期望值的值的确定确定被提供至数据子集构造器18,它指定附加的子集构造规则,使得数据精华33包括足以使导出变量达到期望值并因而触发相关逻辑规则的执行的数据。
在一些示例中,覆盖率分析的结果还提供给用户。作为回应,用户可以向数据子集构造器18提供附加的子集构造规则或可以调整之前提供的子集构造规则。
一些逻辑规则很少被触发,甚至完整的数据记录集也不可能(只是偶然地)包括足以使应用14执行实现该逻辑规则的代码的数据。为了在完整的数据集中识别这种不足,可以使用所有的数据记录作为输入来执行应用14一次或多次。无论被选择为输入的数据记录的子集是什么,所得的报告都标识没有被覆盖的规则。为了解决这一不足,数据驱动测试框架10使用正数据制造器22和/或负数据制造器24来制造所需数据。
在一些实施例中,数据设计模块16通过过滤执行数据子集构造(data-subsetting)。过滤可以是正的或负的。在正过滤中,人们从空集开始并且仅添加那些满足某种条件的数据记录。在负过滤中,人们从全数据集开始并且通过删除满足某种条件的数据记录来削减全数据集。
在另一些实施例中,数据设计模块16通过标识目标数据字段、确定各个这种字段的可能值并选择数据记录来执行数据子集构造,这样,对于每个目标数据字段,每个允许值至少出现一次,或出现指定的次数。
在另一些实施例中,数据设计模块16通过数据分类执行数据子集构造。这同标识目标数据字段的方法类似,但是用值的范围替换了实际的目标值。因而,如果目标数据字段表示用于风险评估的胆固醇含量,人们可以使用范围定义表示低、中、高收入的容器(bin)。在该情况下,可以选择数据记录使得每个容器或分类将具有某些预定数量的记录。
在其它实施例中,数据设计模块16通过依赖值的组合来执行数据子集构造。这可以通过考虑两个目标数据字段来理解:具有两个允许值的第一字段(例如,性别)和具有十二个允许值的第二字段(例如,出生月份)。如果人们仅想要确保每个可能的值各被呈现一次,那么可以仅用十二个记录来满足该要求。但是,也可以设想,有人可能希望具有这两个字段的所有可能组合。在该情况下,至少要选择24条记录。
上述方法的其它细节以及可以由数据子集构造器14实施的其它方法可以在题名为“数据记录选择”的专利公布中找到,该专利已经通过引用的方式并入。
数据设计模块16根据申请“数据生成”(本申请已经通过引用的方式并入)中提出的原则使用正数据制造器22、负数据制造器24和数据增强器20进行计算。
数据设计模块16生成特定类型的数据,用户可以指定该类型。示例性数据类型包括字符串、十进制整数、日期和时间。数据设计模块16为制造出的数据施加限制,例如用于制造的十进制或整数数据的允许值的范围、用于制造字符串数据的平均字符串长度、可以用在制造数据中的值或特征的集,以及其它特性。通过调整已有源记录的一个或多个字段中的值、在记录中创建并填入新字段来增强源记录、或创建全新的记录,数据设计模块16可以制造数据。在一些实例中,用户通过用户界面指定可配置选项。
数据设计模块16使用正数据制造器22来制造数据以通过应用14处理。它还可以使用数据增强器20调节或增强已有数据(诸如生产数据26)。例如,数据增强器20可以调节取自生产数据26的一个或多个字段的值,或者可以在生产数据26中创建并填入一个或多个新字段并将它们添加至已有数据记录中。使用正数据制造器22,数据设计模块16还可以制造全新的数据记录。在一些实施例中,这些新记录的格式基于生产数据26,但在另一些实施例中,外部代理(例如用户)将使用上文关于指定子集构造规则讨论的方法相同的方法来指定格式。
数据设计模块16制造将存储在目标中的数据。在一些示例中,数据设计模块16基于生产数据26制造数据。在另一些示例中,数据设计模块16从头开始制造数据。如本文所使用的,“从头开始”制造是指根据指定的特性制造,但不基于现有数据。
生产数据可以是文件、数据库、参数集或其他数据源。生产数据26可以包括一条或多条记录,每条记录具有一个或多个数据字段。例如,生产数据26可以是客户数据库,该客户数据库存储了零售店客户的客户记录。这种数据库的各条记录均表示单独的客户。每条记录可以具有多个字段。生产数据26可以具有指定各记录的格式的记录格式,例如,字段的数量、各字段中数据的类型以及各字段中数据的特性(例如,值的允许范围、最大标准值或允许特征列表)。在一些示例中,数据设计模块16从头开始生成数据。在这类情况下,不提供数据源。
数据设计模块基于配置数据制造数据,该配置数据可以储存在数据库中、文件中或其它数据结构中。配置数据可以指定待使用数据生成方法、内容生成模式、待制造数据的数据类型、对应待制造数据的内容标准以及关于待制造数据的其它配置信息。
在一些情况下,用户通过测试计算机12上可用的用户界面指定数据设计模块16用于制造数据的部分或全部配置数据。在另一些示例中,数据设计模块16确定部分或全部配置数据。在这些情况下,数据设计模块基于生产数据的分析或关于目标的期望属性的信息进行确定。
在一些示例中,通过根据配置数据调整生产数据26中已有源记录的一个或多个字段的值并且将调整后的记录储存在目标中,数据设计模块16可以使用数据增强器20为目标制造数据。在另一些示例中,数据设计模块16使用数据增强器20调整给定字段的所有值。例如,可以为每个记录的给定字段分配值,以便所有记录的特定字段的值的分布匹配由配置数据所指定的目标分布。用户或配置数据指定(或提供用于指定的信息)该目标分布。
在一些情况下,数据设计模块16调整的值少于给定字段的全部值。在这些情况中,数据设计模块16仅调整不符合由配置数据指定的特定标准的值。这种情况的示例是数据设计模块16调整给定字段的落在该字段特定允许值范围之外的任意值。
在一些示例中,通过使用数据增强器20根据配置数据用一个或多个新字段增强生产数据26的已有源记录并且在目标中储存这些增强过的记录,数据设计模块16可以制造数据。配置数据提供指令,以确定新字段的数量、数据类型与新字段的值以及新字段的其它特性提供指令。
在其它示例中,数据设计模块16使用由配置数据提供的信息来制造数据。该信息指定将基于生产数据的已有字段的数据来制造的新字段的值。可替代地,该信息指定将根据不基于任何已有源数据而是由配置数据指定的某些特性来制造的新字段的值。
在一些示例中,通过使用数据增强器20以根据配置数据用一个或多个新记录增强生产数据26的已有源记录并且在目标中储存增强过的记录(即,已有源记录和新记录),数据设计模块16可以制造数据。在一些实施例中,新记录与源记录具有相同的记录格式。
在其它示例中,配置数据提供用于确定确定以下一条或多条的任意组合的指令:新记录的数量、新记录的字段的值以及新记录的其它特性。在这些示例中,配置数据指定将从头开始制造新记录中一个或多个字段的值。
在一些其它的示例中,配置数据指定侧写并要求即将制造的新记录中一个或多个字段的值满足该侧写。在一个这样的示例中,侧写规定所有记录中特定字段的值共同满足指定特性。特性的示例是该值具有特定的平均值或特定的分布。例如,在客户数据库源中,配置数据可以要求制造记录,使得所有记录中“年龄”字段的值满足具有特定均值的泊松分布(poisson distribution)。
在一些示例中,配置数据要求数据设计模块16应用不止一种数据生成方法。对于一个这样的示例,数据设计模块16应用以下方法的任意组合:调整一个或多个字段的值、用一个或多个新字段增强源记录以及用一个或多个新记录增强源记录。
在一些示例中,目标仅储存制造的记录。在另一些示例中,用户指定源,数据设计模块16基于特性来制造记录。适当特性的示例是源的记录格式或源的一个或多个字段的侧写。
在另一些示例中,不指定源。在这样的示例中,数据设计模块16根据配置数据从头开始自动制造记录。
在一些示例中,源的记录格式映射(map)到目标。在一个这样的示例中,配置数据表明,源的记录格式将被目标采用。在另一个这样的示例中,配置数据要求源的记录格式应用于目标,并且要求通过数据设计模块16根据源的记录格式从头开始制造新记录。在另一些这样的示例中,数据设计模块19依赖多个源,并且每个源的记录格式被局部或完全映射到目标。在至少一个这样的示例中,每个源的感兴趣字段的格式被映射到目标。
在一些示例中,数据设计模块16将源的记录格式映射到目标并调整它。在这些示例中,配置数据使数据设计模块16改变字段的名称并且配置数据使所述字段从源中移除。
数据设计模块16在测试计算机12上提供用户界面,该用户界面具有源窗口,以使用户能够标识数据源。源窗口包括源类型菜单,它允许用户指定源类型(例如文件或数据库)以及源的标识符(例如到源的路径或者到数据库源的配置文件的路径)。在一些示例中,当源是数据库时,用户指定查询(例如SQL查询),它用于从数据库中获取源数据。源窗口提供选项让用户指示数据设计模块16是否将制造新记录,如果是,则指示制造多少。源窗口使用户能够查看并指定关于源的其它信息。例如,用户可以查看源的记录格式,指定定义了源的记录格式的文件、查看源数据或查看源数据的侧写。
在一些示例中,用户界面的源窗口允许用户在不指定源的情况下使数据设计模块16去制造数据。具体地,源窗口使用户能够选择制造数据作为源类型菜单中的源类型。选择制造数据作为源类型导致数据生成窗口显示在用户界面中。数据生成窗口使用户能够指定用来制造数据的方法并且指定待制造的新记录的数量。
用户界面还提供目标窗口,它使用户能够标识目标。目标窗口中的目标类型菜单使用户能够指定目标的类型。目标的示例包括文件或数据库。目标窗口还使用户能够指定目标的标识符(例如,到目标文件的路径或到用于目标数据库的配置文件的路径)。目标窗口提供运行按钮,一旦源和目标被标识,它就给用户提供访问用来生成数据的各种可配置选项。
数据设计模块16提供多种方法来制造数据。它们包括字段调整、字段创建、记录创建、使用已有源以及使用父数据集。为了访问可用的方法,用户依赖于用户界面的数据生成窗口。
在字段调整方法中,数据设计模块16调整源记录的一个或多个字段的值。在一些情况下,数据设计模块调整给定字段的所有值。在一些示例中,数据设计模块16调整字段的值,使得所有记录中的给定字段的值的分布匹配目标分布。在另一个示例中,数据设计模块16调整的值少于给定字段的全部值。在这些示例中,数据设计模块16仅调整不符合指定标准的值。例如,可以调整落到特定字段的特定允许值范围之外的任意值。
在字段创建方法中,数据设计模块16为已有记录创建一个或多个新字段。在一些示例中,数据设计模块16基于源数据中已有字段的数据为新字段制造值。在另一些示例中,数据设计模块16从头开始为新字段制造值。
在记录创建方法中,数据设计模块16制造新记录。用户指定新记录的数量和它们的格式中的至少一项。例如,如果用已有源记录和新制造的记录这二者填入目标,那么新记录的记录格式就与源记录的记录格式一样。如果仅用新制造的记录填入目标,那么用户指定将应用于制造数据的记录格式。记录格式包括字段的数量、各字段的数据类型、各字段的数据特性(例如,最大值、最小值、一组允许特征以及其它特性)以及记录格式的其它特征。
在已有数据集方法中,数据设计模块16为已有源记录中的每个键值制造指定数量的新记录。键值是已有源记录中感兴趣字段中的值。
在一个示例中,辅助源包含将用于填充目标记录的特定字段的数据。但是,辅助源不具有与源或目标的记录格式相匹配的记录格式。在该情况下,数据设计模块16将一个或多个感兴趣字段从辅助源映射到目标记录。在父数据集方法中,源是层级中的父数据集。在该情况下,设局涉及模块制造与父数据集相关的子数据集。在父数据集方法的一个示例中,父数据集(它充当源)是客户记录集;子数据集(它充当目标)是每个客户的一个或多个交易记录的集。键字段将子数据集中的记录链接至父集中相应的记录。例如,“客户ID”字段可以是链接客户记录和交易记录的关键字段。在一些情况下,数据设计模块16接收关于将制造多少子记录的规范。在另一些情况下,数据设计模块16接收关于不用于制造子记录的父代记录的百分比的规范。在另一些情况下,数据设计模块16接收子记录的数据格式的规范。
在一些示例中,数据设计模块16根据格式规范制造数据。格式规范指定待制造数据的格式。在一个示例中,格式规范指定待制造数据的数据类型。
在另一些示例中,数据设计模块16根据内容标准制造数据。内容标准限制了待制造数据的特性。内容标准的示例包括值的允许范围、最大允许值和允许特征列表。
在一些情况下,目标记录的记录格式指定了格式规范和内容标准。在另一些示例中,用户界面提供字段窗口,该字段窗口使用户能够指定字段的特性,例如格式规范或字段的内容标准。
用户界面还包括使用户能够编辑目标记录格式的记录格式窗口。这将包括编辑目标的一个或多个字段的数据特性。记录格式窗口显示目标记录格式的字段列表。该字段列表还指示各字段的数据类型。在一些示例中,目标记录格式的字段还表现为源记录格式。既表现为目标记录格式也表现为源记录格式的这些字段可选地被标注在字段列表中。在一些示例中,未标注字段仅表现为目标记录格式。在另一些示例中,表现为源记录格式但不表现为目标记录格式的字段不在字段列表中。
记录格式窗口使用户能够选择目标记录格式的一个或多个字段,以便向数据设计模块16传递数据生成特性。为了辅助用户保持追踪已选择的字段,用户界面包括目标记录格式的已选字段的选择列表。选择列表所列的字段是用户想要指定数据生成特性的目标记录格式的那些字段。
在一些示例中,选择列表是目标记录格式所有字段的字段列表的子集。如果用户仅想要为目标记录格式的一些字段指定数据生成特性,则会出现这种情况。
用户界面使用户能够编辑选择列表中所显示的所选字段中的每一个的记录格式。例如,对于每个所选字段,用户可以执行为字段指定数据类型、向字段分配内容生成模式以及为字段指定数据特性这些操作的任意组合。用户界面轮流为每个所选字段显示数据类型窗口、内容生成窗口和数据特性窗口中的一个或多个。这些窗口使用户能够为每个已选字段指定各种特征。
上述数据驱动测试框架10可以例如使用执行合适的软件指令的可编程计算系统来实现,或者可以在诸如现场可编程门阵列(FPGA)或一些混合形式的合适的硬件中实现。例如,在编程方法中,软件可以包括在一个或多个编程或可编程计算系统(其可以是诸如分布式、客户端/服务器或网格的各种架构)上执行的一个或多个计算机程序中的过程,每个计算系统包括至少一个处理器,至少一个数据存储系统(包括易失性和/或非易失性存储器和/或存储元件),至少一个用户界面(用于使用至少一个输入设备或端口接收输入,并且用于使用至少一个输出设备或端口提供输出)。软件可以包括例如提供与数据流图的设计、配置和执行相关的服务的较大程序的一个或多个模块。程序的模块(例如,数据流图的元素)可以被实现为符合存储在数据资料库中的数据模型的数据结构或其它组织形式的数据。
软件可以使用持续一段时间(例如,动态存储器装置(例如动态RAM)的刷新周期之间的时间)的介质的物理特性(例如,表面凹坑和平台、磁畴或电荷等)以非暂时性形式存储,例如被实施在易失性或非易失性存储介质或任何其它非暂时性介质中。在准备加载指令时,软件可以提供在有形、非暂时性介质上,例如CD-ROM或其他计算机可读介质(例如,可由通用或专用计算系统或设备读取),或者可以通过网络的通信介质被递送(例如,被编码成传播信号)到其被执行的计算系统的有形、非暂时性介质。可以在专用计算机上或使用诸如协处理器或现场可编程门阵列(FPGA)或特定的专用集成电路(ASIC)的专用硬件来执行处理中的一些或全部。处理可以以分布式方式实现,其中由软件指定的计算的不同部分由不同的计算元件执行。每个这样的计算机程序优选地存储在或下载到可由通用或专用可编程计算机访问的存储设备的计算机可读存储介质(例如,固态存储器或介质,或磁介质或光介质)上,用于当计算机读取存储设备介质以执行本文所述的处理时,配置和操作计算机。本发明的系统还可以被认为可实现为配置有计算机程序的有形的、非暂时性介质,其中如此配置的介质使得计算机以特定和预定义的方式操作以执行本文描述的一个或多个处理步骤。
已经描述了本发明的多个实施例。然而,应当理解,前述描述旨在说明而不是限制本发明的范围,本发明的范围由所附权利要求的范围限定。因此,其他实施例也在所附权利要求的范围内。例如,在不脱离本发明的范围的情况下可以进行各种修改。另外,上述的一些步骤可以是与顺序无关的,并且因此可以以与所描述的顺序不同的顺序来执行。
已经描述了本发明及其优选实施例,新的受专利证书保护的请求保护方案如权利要求所限定。
Claims (37)
1.一种用于测试应用的装置,所述装置包括:
数据处理机,包括存储器和可操作地耦接至所述存储器的处理器,所述数据处理机已经被配置为实施数据驱动测试框架,所述数据驱动测试框架包括数据设计模块、计算环境管理器和结果分析模块;
其中,所述数据设计模块配置为至少部分基于待测应用创建设计出的测试数据,所述至少部分基于待测应用创建设计出的测试数据包括:
通过所述待测应用的逻辑使用数据血统跟踪至少一个导出变量的推导;
识别至少一个输入变量,所述导出变量从所述至少一个输入变量导出;
将对应于所述导出变量的第二值的所述输入变量的第一值包括在所述设计出的测试数据中;
其中,所述计算环境管理器配置为控制计算环境,在所述计算环境中,所述应用对所述设计出的测试数据进行操作,其中在所述计算环境中所述输入变量和所述导出变量被访问;以及
其中,所述结果分析模块配置为将由于所述应用操作所述设计出的测试数据而产生的输出与预期输出比较。
2.根据权利要求1所述的装置,
其中,所述数据设计模块配置为提取生产数据的子集;
其中,所述子集被选择以实现指定的代码覆盖率,以及
其中,所述设计出的测试数据包括所述生产数据的所述子集。
3.根据权利要求1所述的装置,其中,所述数据设计模块包括用于从生产数据生成提炼后的数据的数据提炼器。
4.根据权利要求3所述的装置,其中,所述数据设计模块包括数据加强器,所述数据加强器用于从所述数据提炼器接收提炼后的数据并加强所述提炼后的数据。
5.根据权利要求1所述的装置,
其中,所述数据设计模块配置为至少部分基于所述待测应用生成数据;
其中,所生成的数据被选择以实现指定的代码覆盖率;
其中,所述设计出的测试数据包括所生成的数据。
6.根据权利要求1所述的装置,其中,所述数据设计模块还包括用于生成正数据的正数据制造器。
7.根据权利要求1所述的装置,其中,所述数据设计模块配置为至少部分基于待测应用生成数据,其中,生产数据中不存在所述数据。
8.根据权利要求1所述的装置,其中,所述数据设计模块还包括用于生成负数据的负数据制造器。
9.根据权利要求1所述的装置,其中,所述数据设计模块包括用于生成设计出的测试数据的装置。
10.根据权利要求1所述的装置,其中,所述数据设计模块包括完整性检查器,用于确定所述设计出的测试数据的引用完整性。
11.根据权利要求1所述的装置,其中,所述数据设计模块还配置为检测引用完整性中的错误。
12.根据权利要求1所述的装置,其中,所述数据设计模块包括再引用器,所述再引用器用于在输出数据作为设计出的测试数据之前校正所述数据中引用完整性的缺失。
13.根据权利要求1所述的装置,其中,所述数据设计模块还配置为校正数据中引用完整性的缺失。
14.根据权利要求1所述的装置,其中,所述数据设计模块包括检验单元,所述检验单元用于接收所述设计出的测试数据并使用户能够进行如下操作中的至少一种:查看所述设计出的测试数据以及对所述设计出的测试数据进行侧写。
15.根据权利要求1所述的装置,其中,所述数据测试模块包括数据检验单元,所述数据检验单元用于接收所述设计出的测试数据,并使用户能够查看所述设计出的测试数据。
16.根据权利要求1所述的装置,其中,所述数据设计模块包括侧写器,所述侧写器用于接收所述设计出的测试数据并使用户能够对所述设计出的测试数据进行侧写。
17.根据权利要求1所述的装置,其中,所述数据设计模块还配置为使用户能够对所述设计出的测试数据进行侧写。
18.根据权利要求1所述的装置,其中,所述数据设计模块还配置为使用户能够查看所述设计出的测试数据。
19.根据权利要求1所述的装置,其中,所述数据设计模块包括用于生成设计出的测试数据的多个装置,其中,至少部分基于与所述待测应用相关的信息生成用于生成设计出的测试数据的特定装置。
20.根据权利要求1所述的装置,其中所述数据设计模块包括数据加强器、数据提炼器、负数据制造器和正数据制造器,它们中的每一个均配置为提供形成所述设计出的测试数据的基础的数据。
21.根据权利要求1所述的装置,其中,所述数据设计模块包括逻辑提取器,所述逻辑提取器配置为识别所述待测应用中待测试的逻辑函数,并且将这些逻辑函数提供至数据提炼器。
22.根据权利要求1所述的装置,其中,所述数据设计模块还配置为识别所述待测应用中待测试的逻辑函数,并提供这些逻辑函数以使其用作用来获得生产数据子集的基础。
23.根据权利要求1所述的装置,其中,所述计算环境管理器包括用于自动创建并卸载计算环境的装置,将被测试的待测应用在所述计算环境中被测试。
24.根据权利要求1所述的装置,其中,所述计算环境管理器包括环境转换机;
其中,所述环境转换机配置为识别所述设计出的测试数据的源;以及
其中,所述环境转换机还配置为识别目标,由所述待测应用处理所述设计出的测试数据而获得的数据放置在所述目标中。
25.根据权利要求24所述的装置,其中,所述环境转换机还配置为将设计出的测试数据从第一资料库复制到所述源。
26.根据权利要求25所述的装置,其中,所述环境转换机还配置为将设计出的测试数据从所述目标复制到第二资料库。
27.根据权利要求1所述的装置,其中,所述计算环境管理器包括环境备份机和恢复机;
其中所述环境备份机配置为在将第一环境转换成第二环境之前备份所述第一环境;
其中,所述恢复机配置为用所述第一环境替换所述第二环境;以及
其中,所述第二环境是即将进行待测应用的测试的环境。
28.根据权利要求1所述的装置,其中,所述计算环境管理器包括执行器,其中,所述执行器配置为促使待测应用执行。
29.根据权利要求28所述的装置,其中,所述执行器配置为当促使所述应用执行时自动执行脚本。
30.根据权利要求1所述的装置,其中,所述计算环境管理器包括环境转换机、环境备份机、恢复机和执行器;
其中,所述环境转换机配置为识别所述设计出的测试数据的源;
其中,所述环境转换机还配置为识别目标,由所述待测应用处理所述设计出的测试数据而获得的数据放置在所述目标中;
其中,所述环境备份机配置为在将第一环境转换成第二环境之前备份所述第一环境;
其中,所述恢复机配置为用所述第一环境替换所述第二环境;
其中,所述第二环境是即将进行待测应用的测试的环境;以及
其中,所述执行器配置为启动所述待测应用的执行。
31.根据权利要求1所述的装置,其中,所述数据设计模块配置为提取已有数据的子集;
其中,所述数据设计模块还配置为增强所述子集,从而生产增强的数据;以及
其中,所述设计出的测试数据包括所述增强的数据。
32.根据权利要求31所述的装置,其中,附加数据被选择以实现指定的代码覆盖率。
33.根据权利要求31所述的装置,其中,所述增强的数据包括添加到所述子集的一个或多个记录的一个或多个字段。
34.根据权利要求33所述的装置,其中所述数据设计模块还配置为生成数据以基于一个或多个提供的规则填充已添加的一个或多个字段。
35.根据权利要求1所述的装置,其中所述数据设计模块配置为通过提炼已有数据创建设计出的测试数据,其中所述设计出的测试数据相比于所述已有数据具有更高的逻辑密集度。
36.一种在计算系统中处理数据的方法,所述方法包括:测试应用,其中测试应用包括通过输入装置和数据处理系统的端口之一接收表示待测应用的信息,以及处理所述接收到的信息;
其中,处理所述接收到的信息包括:
至少部分基于所述信息创建设计出的测试数据,包括;
通过所述待测应用的逻辑使用数据血统跟踪至少一个导出变量的推导;
识别至少一个输入变量,所述导出变量从所述至少一个输入变量导出;
将对应于所述导出变量的第二值的所述输入变量的第一值包括在所述设计出的测试数据中;
控制计算环境,所述应用在所述计算环境中操作所述设计出的测试数据,其中在所述计算环境中所述输入变量和所述导出变量被访问;及
将由于所述应用操作所述设计出的测试数据而产生的输出与预期输出比较;以及
输出表明所述比较的结果。
37.一种计算机可读介质,其中软件以非暂时性形式储存在所述计算机可读介质上以用于管理应用的测试,所述软件包括用于使计算系统执行处理步骤的指令,所述处理步骤包括:
至少部分基于待测应用创建设计出的测试数据,包括;
通过所述待测应用的逻辑使用数据血统跟踪至少一个导出变量的推导;
识别至少一个输入变量,所述导出变量从所述至少一个输入变量导出;
将对应于所述导出变量的第二值的所述输入变量的第一值包括在所述设计出的测试数据中;
控制计算环境,所述应用在所述计算环境中操作所述设计出的测试数据,其中在所述计算环境中所述输入变量和所述导出变量被访问;
将由于所述应用操作所述设计出的测试数据而产生的结果与预期输出比较;以及
输出所述比较的分析。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462047256P | 2014-09-08 | 2014-09-08 | |
US62/047,256 | 2014-09-08 | ||
PCT/US2015/048528 WO2016040154A1 (en) | 2014-09-08 | 2015-09-04 | Data-driven testing framework |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107077413A CN107077413A (zh) | 2017-08-18 |
CN107077413B true CN107077413B (zh) | 2021-01-15 |
Family
ID=54207705
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580048211.5A Active CN107077413B (zh) | 2014-09-08 | 2015-09-04 | 数据驱动的测试框架 |
Country Status (9)
Country | Link |
---|---|
US (1) | US10007598B2 (zh) |
EP (1) | EP3191963B1 (zh) |
JP (1) | JP6723989B2 (zh) |
KR (1) | KR102356771B1 (zh) |
CN (1) | CN107077413B (zh) |
AU (1) | AU2015315522B2 (zh) |
CA (1) | CA2960417C (zh) |
SG (1) | SG11201701822RA (zh) |
WO (1) | WO2016040154A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9710367B1 (en) * | 2015-10-30 | 2017-07-18 | EMC IP Holding Company LLC | Method and system for dynamic test case creation and documentation to the test repository through automation |
CN105389257B (zh) * | 2015-11-11 | 2017-12-12 | 中国建设银行股份有限公司 | 一种系统参数处理方法、装置及系统 |
US10642720B2 (en) * | 2016-09-15 | 2020-05-05 | Talend, Inc. | Test case generator built into data-integration workflow editor |
US20180293272A1 (en) * | 2017-04-05 | 2018-10-11 | Futurewei Technologies, Inc. | Statistics-Based Multidimensional Data Cloning |
CN107315681A (zh) * | 2017-06-09 | 2017-11-03 | 上海爱优威软件开发有限公司 | 应用程序自启动测试系统、媒质和方法 |
US10514898B2 (en) * | 2017-08-10 | 2019-12-24 | Raju Pandey | Method and system to develop, deploy, test, and manage platform-independent software |
US10417115B1 (en) * | 2018-04-27 | 2019-09-17 | Amdocs Development Limited | System, method, and computer program for performing production driven testing |
US11797427B2 (en) * | 2019-05-22 | 2023-10-24 | Oracle International Corporation | Automatic generation of unit tests while running an application |
US11055213B2 (en) | 2019-11-06 | 2021-07-06 | International Business Machines Corporation | Facilitating localization of code defect |
CN110928788B (zh) * | 2019-11-22 | 2023-09-19 | 泰康保险集团股份有限公司 | 服务验证方法及设备 |
CN111352846B (zh) * | 2020-03-06 | 2024-03-19 | 深圳前海微众银行股份有限公司 | 测试系统的造数方法、装置、设备及存储介质 |
US11321306B2 (en) | 2020-05-28 | 2022-05-03 | Bank Of America Corporation | Cloning of sanitized data records for use in data testing environments |
CN113342649B (zh) * | 2021-05-31 | 2023-11-14 | 上海创景信息科技有限公司 | 基于真实目标机实现单元测试的方法、介质和设备 |
CN114860575B (zh) * | 2022-03-31 | 2023-10-03 | 中国电信股份有限公司 | 测试数据生成方法及装置、存储介质及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006252158A (ja) * | 2005-03-10 | 2006-09-21 | Nomura Research Institute Ltd | 電文処理システムのテストデータの生成装置、方法、及びプログラム |
JP2009205239A (ja) * | 2008-02-26 | 2009-09-10 | Hitachi Ltd | ソフトウェア検証システム |
CN104077227A (zh) * | 2014-07-08 | 2014-10-01 | 大连海事大学 | 一种基于b/s架构的程序源代码的评判系统及方法 |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7117219B1 (en) * | 2000-05-05 | 2006-10-03 | Group 1 Software, Inc. | Method and apparatus for creating a lineage of a data field in a data flow system |
US7065677B1 (en) * | 2003-04-10 | 2006-06-20 | Microsoft Corporation | Method for testing operating system components |
US7366740B2 (en) * | 2004-05-03 | 2008-04-29 | Microsoft Corporation | Systems and methods for automatic maintenance and repair of enitites in a data model |
US7363616B2 (en) * | 2004-09-15 | 2008-04-22 | Microsoft Corporation | Systems and methods for prioritized data-driven software testing |
WO2007072238A1 (en) * | 2005-12-23 | 2007-06-28 | International Business Machines Corporation | Method and system for biometric authentication |
JP2007304778A (ja) * | 2006-05-10 | 2007-11-22 | Nec System Technologies Ltd | プログラムのテスト方法、プログラム、テスト装置、及びアプリケーション開発システム |
CN100547562C (zh) | 2006-10-18 | 2009-10-07 | 国际商业机器公司 | 自动生成可再现运行时问题的单元测试用例的方法和系统 |
JP2008226056A (ja) * | 2007-03-14 | 2008-09-25 | Hitachi Information Systems Ltd | テストデータ生成システム |
US8069129B2 (en) | 2007-04-10 | 2011-11-29 | Ab Initio Technology Llc | Editing and compiling business rules |
US8126831B2 (en) * | 2008-01-24 | 2012-02-28 | Nec Laboratories America, Inc. | System and method for dynamically inferring data preconditions over predicates by tree learning |
US9189233B2 (en) * | 2008-11-24 | 2015-11-17 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
US20100205153A1 (en) * | 2009-02-12 | 2010-08-12 | Accenture Global Services Gmbh | Data System Architecture to Analyze Distributed Data Sets |
WO2010116586A1 (ja) * | 2009-03-30 | 2010-10-14 | 株式会社野村総合研究所 | 動作検証装置、動作検証方法、および動作検証システム |
JP2010250669A (ja) * | 2009-04-17 | 2010-11-04 | Denso Corp | テストケース生成装置、オブジェクト検査装置、およびプログラム |
US10102398B2 (en) | 2009-06-01 | 2018-10-16 | Ab Initio Technology Llc | Generating obfuscated data |
WO2010144608A1 (en) | 2009-06-10 | 2010-12-16 | Ab Initio Technology Llc | Generating test data |
US8423965B2 (en) * | 2009-06-23 | 2013-04-16 | Microsoft Corporation | Tracing of data flow |
US8745592B1 (en) | 2010-01-08 | 2014-06-03 | Google Inc. | Input selection for automatic test suite generation |
US8510715B1 (en) | 2010-01-26 | 2013-08-13 | Google Inc. | Coverage analysis using sub-instruction profiling |
KR101781416B1 (ko) | 2010-06-22 | 2017-09-25 | 아브 이니티오 테크놀로지 엘엘시 | 관련 데이터세트의 처리 |
US8682910B2 (en) * | 2010-08-03 | 2014-03-25 | Accenture Global Services Limited | Database anonymization for use in testing database-centric applications |
AU2012211167B2 (en) * | 2011-01-28 | 2014-08-21 | Ab Initio Technology Llc | Generating data pattern information |
US10255152B2 (en) * | 2011-02-18 | 2019-04-09 | Entit Software Llc | Generating test data |
JP5651050B2 (ja) * | 2011-03-08 | 2015-01-07 | 株式会社富士通マーケティング | データ生成装置及びデータ生成プログラム |
US9026548B2 (en) | 2011-06-27 | 2015-05-05 | Tata Consultancy Services Limited | Database sampling |
US9886369B2 (en) * | 2011-11-13 | 2018-02-06 | International Business Machines Corporation | Dynamic data fabrication for database applications |
JP5703195B2 (ja) * | 2011-11-15 | 2015-04-15 | 株式会社日本総合研究所 | プログラムの新旧バージョンに対する差分比較テストシステム及びテスト方法 |
EP2597573B1 (en) * | 2011-11-28 | 2018-08-29 | Tata Consultancy Services Limited | Test data generation |
US8527813B2 (en) | 2011-12-19 | 2013-09-03 | Siemens Aktiengesellschaft | Dynamic reprioritization of test cases during test execution |
CN103176973B (zh) * | 2011-12-20 | 2016-04-20 | 国际商业机器公司 | 用于生成数据库的测试工作负载的系统和方法 |
US9659042B2 (en) * | 2012-06-12 | 2017-05-23 | Accenture Global Services Limited | Data lineage tracking |
US8996915B2 (en) * | 2012-06-29 | 2015-03-31 | International Business Machines Corporation | Test data generation and scale up for database testing |
EP2868037A4 (en) * | 2012-06-29 | 2016-01-20 | Hewlett Packard Development Co | AUTOMATED CONTROL-BASED TEST DATA GENERATION |
US9218269B2 (en) * | 2012-09-07 | 2015-12-22 | Red Hat Israel, Ltd. | Testing multiple target platforms |
US9892026B2 (en) | 2013-02-01 | 2018-02-13 | Ab Initio Technology Llc | Data records selection |
EP2779044A1 (en) * | 2013-03-14 | 2014-09-17 | Tata Consultancy Services Limited | System and method to provide management of test data at various lifecycle stages |
US9576036B2 (en) * | 2013-03-15 | 2017-02-21 | International Business Machines Corporation | Self-analyzing data processing job to determine data quality issues |
IN2013MU01495A (zh) * | 2013-04-22 | 2015-04-17 | Tata Consultancy Services Ltd | |
EP3084611A1 (en) | 2013-12-18 | 2016-10-26 | AB Initio Technology LLC | Data generation |
US9336100B2 (en) * | 2013-12-27 | 2016-05-10 | International Business Machines Corporation | Efficient debugging of memory miscompare failures in post-silicon validation |
GB2529842A (en) * | 2014-09-03 | 2016-03-09 | Ibm | Generating coverage metrics for black-box testing |
-
2015
- 2015-09-04 EP EP15771786.9A patent/EP3191963B1/en active Active
- 2015-09-04 CN CN201580048211.5A patent/CN107077413B/zh active Active
- 2015-09-04 JP JP2017513040A patent/JP6723989B2/ja active Active
- 2015-09-04 KR KR1020177009686A patent/KR102356771B1/ko active IP Right Grant
- 2015-09-04 CA CA2960417A patent/CA2960417C/en active Active
- 2015-09-04 SG SG11201701822RA patent/SG11201701822RA/en unknown
- 2015-09-04 WO PCT/US2015/048528 patent/WO2016040154A1/en active Application Filing
- 2015-09-04 US US14/845,772 patent/US10007598B2/en active Active
- 2015-09-04 AU AU2015315522A patent/AU2015315522B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006252158A (ja) * | 2005-03-10 | 2006-09-21 | Nomura Research Institute Ltd | 電文処理システムのテストデータの生成装置、方法、及びプログラム |
JP2009205239A (ja) * | 2008-02-26 | 2009-09-10 | Hitachi Ltd | ソフトウェア検証システム |
CN104077227A (zh) * | 2014-07-08 | 2014-10-01 | 大连海事大学 | 一种基于b/s架构的程序源代码的评判系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3191963B1 (en) | 2023-11-22 |
AU2015315522A1 (en) | 2017-04-20 |
US10007598B2 (en) | 2018-06-26 |
CN107077413A (zh) | 2017-08-18 |
KR20170052668A (ko) | 2017-05-12 |
JP6723989B2 (ja) | 2020-07-15 |
EP3191963A1 (en) | 2017-07-19 |
KR102356771B1 (ko) | 2022-01-27 |
CA2960417C (en) | 2023-12-19 |
WO2016040154A1 (en) | 2016-03-17 |
AU2015315522B2 (en) | 2019-08-29 |
CA2960417A1 (en) | 2016-03-17 |
US20160070641A1 (en) | 2016-03-10 |
SG11201701822RA (en) | 2017-04-27 |
JP2017531855A (ja) | 2017-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107077413B (zh) | 数据驱动的测试框架 | |
Szárnyas et al. | The Train Benchmark: cross-technology performance evaluation of continuous model queries | |
US10275601B2 (en) | Flaw attribution and correlation | |
US20200019494A1 (en) | Method and apparatus for performing test by using test case | |
D’Ambros et al. | Evaluating defect prediction approaches: a benchmark and an extensive comparison | |
US9411712B2 (en) | Generating test data | |
US8539282B1 (en) | Managing quality testing | |
US10013336B2 (en) | Information technology testing and testing data management | |
US7203671B1 (en) | System and method for validating the technical correctness of an OLAP reporting project | |
Thongtanunam et al. | Will this clone be short-lived? Towards a better understanding of the characteristics of short-lived clones | |
Silva Souza et al. | Monitoring strategic goals in data warehouses with awareness requirements | |
Grafberger et al. | Data distribution debugging in machine learning pipelines | |
EP2199905A1 (en) | Lifecycle management and consistency checking of object models using application platform tools | |
Agnelo et al. | Using orthogonal defect classification to characterize nosql database defects | |
Ostrand et al. | A Tool for Mining Defect-Tracking Systems to Predict Fault-Prone Files. | |
Kapfhammer | A comprehensive framework for testing database-centric software applications | |
Faragó | Connection between version control operations and quality change of the source code | |
Ye | An Evaluation on Using Coarse-grained Events in an Event Sourcing Context and its Effects Compared to Fine-grained Events | |
Musial et al. | Effect of data validity on the reliability of data-centric web services | |
Püroja | LDBC Social Network Benchmark Interactive v2 | |
Yoon et al. | Development of Online Egg Grading Information Management System with Data Warehouse Technique | |
Rajkumar | Enhancing Coverage and Robustness of Database Generators | |
Kaggwa et al. | Technology policy: Determining effects of incentives for industry competitiveness using system dynamics | |
CN111930606A (zh) | 资料处理流程测试报告的自动生成方法及相关装置 | |
Tanuska et al. | The Proposal of the Essential Strategies of DataWarehouse Testing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1242445 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |