调试图的制作方法

文档序号:11450332阅读:268来源:国知局
调试图的制造方法与工艺

优先权申明

本申请要求提交于2014年11月5日的美国临时专利申请序列62/075,466的优先权,上述文献的全部内容通过引用而并入于此。



背景技术:

本说明书涉及调试图。

代码开发人员通常在整个开发处理中调试源代码。这样做时,可以利用可影响源代码的功能的调式代码来修改源代码。通常期望在调试结束时从源代码移除添加的调试代码,以恢复源代码的原始功能。



技术实现要素:

在一方面,一种方法,包括:接收包括组件和流的第一图,所述组件表示对数据记录进行的操作,所述流表示组件之间的数据记录的流动;接收与所述第一图分离的规范,所述规范定义一个或多个插入,所述一个或多个插入各自与所述第一图的流相关联;生成各自与所述一个或多个插入之一相对应的一个或多个组件;以及生成包括与所述第一图的组件和流中的至少一部分以及所生成的一个或多个组件相对应的组件和流的第二图。。

实现可以包括以下特征中的一个或多个。

在一些实现中,所生成的一个或多个组件之一是被配置为当数据记录通过所述第二图的组件之间时监视与该数据记录相关的数据的探测器。

在一些实现中,所述探测器被配置为存储与一个或多个数据记录相关的数据。

在一些实现中,所生成的一个或多个组件之一是被配置为向所述第二图的组件之一提供数据的测试源。

在一些实现中,所述方法还包括执行所述第二图。

在一些实现中,执行所述第二图的并非所有组件。

在一些实现中,所述第二图的被执行的组件包括操作影响所生成的对象中的一个或多个的组件。

在一些实现中,所生成的一个或多个组件之一是探测器,并且所述第二图的被执行的组件包括向该探测器提供数据的组件。

在一些实现中,不执行所述第二图的存在于所述探测器的下游的一个或多个组件。

在一些实现中,所生成的一个或多个组件之一是测试源,并且不执行所述第二图的存在于所述测试源的上游的一个或多个组件。

在一些实现中,所述方法还包括:修改与所述第二图的组件之一相关联的参数;判断修改后的组件在被执行时是否影响所生成的一个或多个组件中的任一个;以及重新执行所述第二图。

在一些实现中,如果所述修改后的组件在被执行时不会影响所生成的一个或多个组件中的任一个,则不重新执行所述修改后的组件。

在一些实现中,所生成的一个或多个组件之一是探测器,并且所述修改后的组件存在于与该探测器相关联的流的上游。

在一些实现中,所述第一图和所述规范存储在单独的文件中。

在一些实现中,所述第一图和所述第二图存储在单独的文件中。

在一些实现中,所述第二图是没有存储在文件中的shell脚本。

在一些实现中,在所述第二图中,所生成的一个或多个组件之一向与所述第一图中的从与该所生成的组件相关联的流接收数据的组件相对应的组件提供数据。

在一些实现中,在所述第二图中,所生成的一个或多个组件之一从与所述第一图中的向与该所生成的组件相关联的流提供数据的组件相对应的组件接收数据。

在一些实现中,在没有修改所述第一图的情况下生成所述第二图。

在一些实现中,生成所述第二图包括:生成所述第一图的至少一部分的副本;以及修改所述第一图的所述副本以包括所生成的一个或多个组件。

在另一方面,一种系统,包括:至少一个处理器;用于接收包括组件和流的第一图的部件,所述组件表示对数据记录进行的操作,所述流表示组件之间的数据记录的流动;用于接收与所述第一图分离的规范的部件,所述规范定义一个或多个插入,所述一个或多个插入各自与所述第一图的流相关联;用于生成各自与所述一个或多个插入之一相对应的一个或多个组件的部件;以及用于生成包括与所述第一图的组件和流中的至少一部分以及所生成的一个或多个组件相对应的组件和流的第二图的部件。

在另一方面,一种计算机系统,包括:处理器,其被配置为:从代码存储库接收包括组件和流的第一图,所述组件表示对数据记录进行的操作,所述流表示组件之间的数据记录的流动;以及通过用户接口来接收与所述第一图分离的规范,所述规范定义一个或多个插入,所述一个或多个插入各自与所述第一图的流相关联;编译器,其被配置为:生成各自与所述一个或多个插入之一相对应的一个或多个组件;以及生成包括与所述第一图的组件和流中的至少一部分以及所生成的一个或多个组件相对应的组件和流的第二图。

在另一方面,一种存储计算机程序的计算机可读装置,所述计算机程序包括用于使计算机进行以下操作的可执行指令:接收包括组件和流的第一图,所述组件表示对数据记录进行的操作,所述流表示组件之间的数据记录的流动;接收与所述第一图分离的规范,所述规范定义一个或多个插入,所述一个或多个插入各自与所述第一图的流相关联;生成各自与所述一个或多个插入之一相对应的一个或多个组件;以及生成包括与所述第一图的组件和流中的至少一部分以及所生成的一个或多个组件相对应的组件和流的第二图。

在另一方面,一种方法,包括:识别第一版本的计算机程序的数据处理元件,所述数据处理元件被配置为从第一数据元件接收数据、或者向第一数据元件提供数据;生成表示第二数据元件的组件;以及生成第二版本的至少一部分计算机程序,所述第二版本的计算机程序包括所识别出的数据处理元件,其中,所述第二版本的计算机程序包括所生成的组件,使得所述第二版本的计算机程序中的所识别出的数据处理元件从所生成的组件接收数据、或者向所生成的组件提供数据。

实现可以包括以下特征中的一个或多个。

在一些实现中,所述方法还包括接收所述第一版本的计算机程序。

在一些实现中,生成所述第二版本的至少一部分计算机程序包括:生成所述计算机程序的该部分的副本。

在一些实现中,所述方法还包括修改所述计算机程序的该部分的副本以包括所生成的组件。

方面可以包括以下优点中的一个或多个。

可以在代码生成开始时创建与所定义的插入相对应的对象并将其作为一般组件添加到图中,同时保持该图与定义插入的覆盖规范相分离。正因如此,开发人员可以修改并调试图,同时避免无意中破坏原始图的风险。

此外,没有编辑图的权限的开发人员可以使用插入来修改图。

根据以下描述和权利要求书,本发明的其它特征和优点将变得显而易见。

附图说明

图1是图的示例。

图2是覆盖规范的示例。

图3示出用于在单执行模式(single-executionmode)下执行插入定义的典型系统。

图4a-d是包括插入组件的图的示例。

图5示出用于在保存状态模式下执行插入定义的典型系统。

图6是用于调试图的系统的框图。

图7是典型图调试过程的流程图。

具体实施方式

图可以由一个人来编写并且由另一人来测试。为了完全测试该图,测试人员可能需要在数据流过图时访问该数据。例如,测试人员可能希望在数据从图的一个组件流到另一组件时验证该数据。在一些实现中,测试人员可能已经适当地验证了上游处理功能,但是尚未验证下游处理的功能。在一些实现中,上游处理可能需要相对较长的时间来执行,从而导致低效的测试。如果测试人员可以用先前证实过的数据来代替先前证实过的上游操作的执行,则测试效率可以提高。

在传统的开发环境中,测试人员通常将需要修改图,以便添加观察点或者用预先证实的数据来代替上游组件。然而,一旦已经编辑了图,测试人员就无法确定他是否已经修改了原始图的功能。在一些环境中,测试人员可能缺少必要的编辑图的权限。

可以使用与图分离的覆盖文件(例如,覆盖规范)来调试和测试基于图的处理。覆盖规范可以是定义一个或多个插入的单独文件。插入可以由与图的流相关联的组件来表示。与插入相对应的组件可以是探测器或测试源。探测器可以在图执行时监视组件之间的数据传递,并且可以使数据被保存以备稍后检查或再使用。测试源可以向图的组件提供数据,例如使得不需要为图的每次执行再运行上游计算。

与覆盖规范中所定义的插入相对应的组件可被包括在图中,而不成为原始图的一部分。当编译原始图时,编译器考虑覆盖文件,并生成包括与插入(这里有时也称为插入组件)相对应的组件的第二图。第二图(例如,图4a-d所示的图400a-d)包括与原始图的组件和流中的至少一部分相对应的组件和流。第二图还包括与覆盖规范中所定义的插入相对应的组件。第二图可以是第二版本的原始图100、或者原始图100的副本。在一些实现中,生成第二图包括:生成原始图100的至少一部分的副本并修改该副本以包括与插入相对应的一个或多个组件。在一些实现中,第二图是shell(外壳)脚本,并且不存储在文件中。在一些实现中,第二图和第一图存储在单独的文件中。

重要的是要注意,将插入组件并入到第二图中不会修改正在调试的原始图。作为替代,插入定义保持在单独的文件(例如,单独的覆盖规范)中,并且可以在代码生成开始时变为普通图组件以包含在第二图中。正因如此,在调试期间不存在无意间破坏原始图的风险。

图1示出可被调试或测试的图100的示例。图100包括通过流连接的数据处理组件。包括一个或多个数据记录的数据集102连接至过滤组件103。两个组件之间的连接表示来自第一组件(在该示例中为数据集102)的输出记录被传递到第二组件(在该示例中为过滤组件103)。一般来说,过滤组件过滤或移除不满足预定标准的记录。例如,过滤组件103可以使居住在俄亥俄州的客户的数据记录通过,并拒绝其它记录数据。过滤组件103连接至(例如,通过与客户相关联的邮政编码)对过滤后的数据记录进行排序的排序组件104。排序组件104连接至创建数据记录的副本、使得可以以两种不同的方式处理数据记录的复制组件106。复制组件连接至重定格式组件108和按表达式进行过滤组件110。例如,将居住在俄亥俄州的客户的按邮政编码进行排序的数据记录的一个实例发送到重定格式组件108,并且将数据记录的另一实例发送到按表达式进行过滤组件110。重定格式组件108将数据记录的格式改变为不同的数据格式,并且按表达式进行过滤组件110基于与数据记录相关联的表达式来移除数据记录。重定格式组件108和按表达式进行过滤组件110连接至结合所接收到的数据记录的收集组件312,并且该收集组件连接至输出数据宿组件114(例如,数据库)。虽然图100在组件之间包括多个流,但是在该示例中,对复制-重定格式流116和收集-输出数据宿流118特别感兴趣。

图100的测试人员可能希望调试图100以便验证其功能。例如,测试人员可能希望在数据从一个组件流到另一组件时监视并验证该数据。可选地,测试人员可能希望防止图100中的一个或多个上游组件执行,并且作为替代向将以其它方式从上游组件接收数据的组件(例如,下游组件)提供数据。这样做时,出于各种原因,可能期望不修改图。例如,测试人员可能不希望冒破坏图的功能的风险。在一些实现中,测试人员可能已经限制了图或者尚未访问图(例如,测试人员可能缺少必要的编辑图的权限)。

可以使用覆盖来生成可用于测试目的的第二图中所包括的插入组件。图2示出定义覆盖的覆盖规范200的示例。覆盖规范200可以存储在与可以与存储图的文件分离的文件中。覆盖规范定义了一个或多个插入。当编译图时,与插入相对应的组件可被生成并添加到第二图中,而不成为原始图的一部分。第二图还包括与原始图的组件和流中的至少一部分相对应的组件和流。第二图中的插入组件各自与原始图的流相关联。插入组件可以是探测器或测试源。

探测器

在一些实现中,当在第二图的组件之间传递数据时,探测器监视该数据。例如,可以监视、保存数据以备稍后检查,或者可以在第二图执行时保存数据以备再使用。覆盖规范200可以定义与原始图的特定流相关联的探测器。第二图可以包括与原始图的特定流相对应的流。第二图还可以包括与原始图中关联于该特定流的组件相对应的组件。第二图的流表示要监视的、有时还要由探测器保存的组件之间的数据流。探测器可被配置为报告特定值、或者报告特定值在预定范围以内或以外的情况。可以保存探测器所监视的数据以供稍后分析或使用。在一些实现中,可以将数据存储在平面文件或关系数据库中。

测试源

在一些实现中,可能先前已经验证了原始图中的高达某一点(例如,特定组件的位置)的执行结果。在这样的情况下,每当原始图执行时,上游组件再处理上述功能可能是低效的。覆盖规范200可以定义与原始图的特定流相关联的测试源。第二图可以包括与原始图的特定流相对应的流。第二图还可以包括与原始图中关联于该特定流的组件相对应的组件。测试源可以向第二图中的与原始图中关联于特定流的组件相对应的组件提供数据(例如,先前验证过的数据)。在一些实现中,测试源可被配置为向下游组件传递先前保存的数据。以这种方式,可以忽略先前执行的图的整个部分。

参考图2,覆盖规范200可以包括一个或多个插入定义。在该示例中,覆盖规范200包括一个测试源定义201和一个探测器定义213。覆盖规范200以指定插入定义可以对应的图的3行标题开始。标题之后是测试源定义201,其中该测试源定义201包括名称202、上游端口204、下游端口206、插入类型208、原型路径210、以及布局参数212。

测试源定义201的上游端口204引用图100中的端口,具体地,引用复制组件106的输出。下游端口206指向重定格式组件108的输入。因此,当执行第二图时,测试源向与图100的重定格式组件108相对应的组件提供数据。

插入类型208定义插入是测试源还是探测器。值“0”定义测试源,而值“1”定义探测器。由于插入是测试源,因此插入类型208的值为“0”。

原型路径210表示插入的类型。在该示例中,由于该插入是测试源,因此原型路径210指定输入文件组件。原型路径210指向包含定义特定类型的插入的文件。布局参数212定义包含测试源将提供的数据的源文件的位置。在一些实现中,该位置是文件路径。在第二图中包括测试源的情况下,将源文件中的数据提供至重定格式组件108的输入。

在一些实现中,源文件中的数据可以与图100的正常执行期间组件之间将会传递的数据相同。然而,通过使用第二图中的测试源来提供数据,可以不处理第二图的上游组件。例如,与图中的其它组件相比,诸如复制组件106等的上游组件可能需要大量的系统资源来处理数据,或者可能需要相对较长的时间来处理数据。正因如此,可以向第二图的组件提供已知的数据(例如,图100的正常执行期间组件之间将会传递的相同数据),以节省时间或节约系统资源。

测试源定义201之后的是探测器定义213,其中,探测器定义213包括名称214、上游端口216、下游端口218、插入类型220、以及原型路径222。

探测器定义213的上游端口216引用图100中的端口,具体地,引用收集组件112的输出。探测器定义213的下游端口218引用输出数据宿组件114的输入。因此,当执行图时,探测器监视在第二图中的与收集组件112相对应的组件的输出和第二图中的与输出数据宿组件114相对应的组件的输入之间所传递的数据。

探测器定义213的插入类型220定义插入是测试源还是探测器。值“1”定义探测器。由于该插入是探测器,因此插入类型220的值为“1”。

原型路径222表示插入的类型。在该示例中,由于该插入是探测器,因此原型路径222指定输出文件组件。原型路径222指向包含定义了特定类型的插入的代码的文件。

在一些实现中,将探测器所要监视的数据存储在系统自动创建的文件中。可以将文件存储在系统自动确定的位置中。在一些实现中,可以在存储数据之前监视该数据。

如上所述,编译器可以考虑覆盖规范200,同时编译原始图以生成第二图。编译器可以接受覆盖规范200作为输入。生成并在第二图中包括与覆盖规范200中所定义的插入相对应的一个或多个组件。所生成的插入组件各自与覆盖规范200中所包含的插入定义相对应。插入组件可以连同与原始图100的组件和流中的至少一部分相对应的组件和流一起包括在第二图(例如,图4a-d中所示的图400a-d)中。插入组件可以通过一个或多个有向流而连接到其它组件或其它插入组件。覆盖规范200或存储该覆盖规范的文件保持与包含图100的文件相分离。

可以使用以下至少两种模式之一来执行覆盖规范中所定义的插入组件:单执行模式和保存状态模式。

单执行模式

图3示出用于在单执行模式下执行插入组件的典型系统。在该示例中,客户端302生成或引用图304、或者定义插入的覆盖文件306(例如,覆盖规范)。例如,覆盖文件306可以是图2中的覆盖规范200。图304由编译器308来编译。编译器308考虑覆盖文件306,并创建包括覆盖文件306所定义的插入组件的第二图。然后可以执行第二图。在一些实现中,编译和执行可以同时发生。如果要再次执行第二图,则必须重复该处理。即,将需要重新指定、重新编译图304,并且将需要重新执行第二图。

图4a-d示出包括一个或多个插入组件的图400a-d的示例。图400a-d可以是上述的第二图的示例。第二图可以是第二版本的原始图100。在这些示例中,已经编译了图1中的图100以创建包括插入的图400a-d之一。在图2的覆盖规范200中定义插入。在图4a中,图400a包括测试源插入422。在图4b中,图400b包括探测器插入420。在图4c中,图400c包括测试源插入422和探测器插入420两者。测试源插入422可以与测试源定义201相对应,并且探测器插入420可以与探测器定义213相对应。

图400a-d还包括与原始图100的组件和流中的至少一部分相对应的组件和流。在一些实现中,第二图中的相应组件和流可以具有与它们在原始图100中的对应物具有相同或相似的属性。在一些实现中,相应组件和流和它们在原始图100中的对应物相同。例如,原始图100的排序组件104可以是图400a的排序组件404的第二实例。

在这些示例中,当编译器编译图100时,生成插入组件。虽然图4a-d示出包括插入组件的图400a-d,但是原始图100保持未修改。

参考图4a和4c,探测器插入420定位在表示从收集组件412的输出到输出数据宿组件414的输入的数据流动的流418上。流418、收集组件412和输出数据宿组件414分别与图1的原始图100的流118、收集组件112和输出数据宿组件114相对应。探测器插入420的位置基于(图2所示的)探测器定义213中所定义的上游端口216和下游端口218。当执行图400a、400c时,由探测器插入420来监视从收集组件412流动至输出数据宿组件414的数据。在一些实现中,还由探测器插入420将该数据存储在系统自动创建的文件中。如上所述,如果要再次执行第二图,则将需要重新指定、重新编译该图,并且将需要重新执行第二图。如果要再次执行第二图,则将用数据重新填充探测器插入420。

参考图4b和4c,测试源插入422定位在表示到重定格式组件408的输入的数据流动的流416上。流416和重定格式组件408分别与图1的原始图100的流116和重定格式组件108相对应。测试源插入422的位置基于测试源定义中所定义的上游端口204和下游端口206。当执行图400b、400c时,来自通过测试源定义201中的布局参数212所识别的源文件的数据流动至重定格式组件408。该数据连同从按表达式进行过滤组件410流出的数据一起流动至收集组件412。从收集组件412流出的数据最终存储在可以作为数据库的输出数据宿414中。

在一些实现中,测试人员可能想要在不将数据写入诸如输出数据宿414等的数据库的情况下使用探测器插入420来监视该数据。例如,测试人员可能想要在没有破坏数据库的风险的情况下使用实验数据来测试图。参考图4d,图400d包括测试源插入422和探测器插入420两者。当执行图400d时,来自通过测试源定义201中的布局参数212所识别的源文件的实验数据流动至重定格式组件408。该数据连同从按表达式进行过滤组件410流出的数据一起流动至收集组件412。由探测器插入420监视从收集组件412流出的数据。在一些实现中,还由探测器插入420来将该数据存储在系统自动创建的文件中。

保存状态模式

图5示出用于利用保存状态管理器508在保存状态模式下执行插入组件的典型系统。在该示例中,客户端502生成或引用图504、或者定义插入的覆盖文件506(例如,覆盖规范)。例如,图504可以是图1中的图100,并且覆盖文件506可以是图2中的覆盖规范200。保存状态存储库510由保存状态管理器508和编译器512来管理。保存状态管理器508还可以识别保存状态数据在保存状态存储库510内的位置。图504由编译器512来编译。编译器512考虑覆盖文件506,并创建包括覆盖文件506所定义的插入组件的第二图。然后可以执行第二图。在一些实现中,编译和执行同时发生。

保存状态模式与单执行模式的不同之处在于保存状态模式使得第二图能够执行多次、同时保存执行之间的信息。例如,参考图4a-d,如果使用保存状态模式来执行插入组件,则在第二次执行第二图的期间可以无需重新填充第一次执行时所填充的探测器插入420。在一些实现中,探测器插入420在第二次执行时可以在内部转换为测试源。换句话说,由于探测器插入420是在第一次执行第二图时填充的,因此探测器插入420可以向第二图的组件(例如,图4a和4c的输出数据宿组件414)提供所填充的数据。

可以存在于保存状态管理器目录中的保存状态管理器508管理保存状态。保存状态存储库510中可以保存的信息的示例包括与探测器相关的信息、与测试源相关的信息、与覆盖文件506相关的信息、以及与图组件相关联的参数(例如,属性)及其它信息。

在一些实现中,当执行图时,仅执行图的特定部分(例如,仅执行图的特定组件)。在一些实现中,执行图的并非所有组件。在图包括插入组件(例如,在图4a-d的图400a-d中)的实现中,该图可能仅执行操作不会影响插入组件的组件。例如,图可能仅执行图的包括向探测器提供数据的组件的一部分。在一些实现中,可以无需执行存在于探测器下游的组件。

在一些实现中,在第一次执行图时填充探测器。在执行之间,一个或多个图组件的参数可以发生改变。组件的参数定义该组件如何工作。通过跟踪与组件相关联的参数,编译器512可以判断组件中何时发生参数改变。最新值表跟踪与图组件相关联的参数。当图运行时,将最新值表与组件的当前参数进行比较以判断运行之间是否改变了任何参数。当发生参数改变时,这种改变可能影响或者可能不影响探测器所存储的数据。编译器512判断组件的改变是否将会影响在下一次执行图时探测器将存储的数据。如果探测器将存储的数据受到改变的影响,则可以在下一次执行图的期间重新执行改变后的组件以及从改变后的组件接收数据的组件。换句话说,如果改变后的组件影响从改变后的组件接收数据、并且(直接或间接地)向探测器提供数据的特定组件的执行,则可以重新执行该特定组件,并且该特定组件影响探测器所存储的数据。在一些实现中,如果探测器将存储的数据不受到改变的影响,则可以无需重新执行组件。

图6示出可以使用上述技术的典型数据处理系统600。系统600包括可以包括诸如存储装置或者到在线数据流的连接等的一个或多个数据源的数据源602,其中,该一个或多个数据源中的每一个可以以多种格式中的任一种(例如,数据库表、电子表格文件、纯文本文件、或者主机所使用的本机格式)来存储或提供数据。在诸如unix操作系统的版本等的适当操作系统的控制下,执行环境604或开发环境618可以例如托管在一个或多个通用计算机上。例如,执行环境604可以包括多节点并行计算环境,该多节点并行计算环境包括使用多个中央处理单元(cpu)或处理器核心的计算机系统的配置,其中,该多个中央处理单元(cpu)或处理器核心是本地的(例如,诸如对称多处理(smp)计算机)、或本地分布的(例如,连接作为集群或大规模并行处理(mpp)系统的多个处理器)、或远程的、或远程分布的(例如,经由局域网(lan)和/或广域网(wan)而连接的多个处理器)、或其任意组合。

执行环境604从数据源602读取数据并生成输出数据。提供数据源602的存储装置可以在执行环境604本地(例如,存储在连接至托管执行环境604的计算机的存储介质(例如,硬盘驱动器608)上),或者可以在执行环境604远处(例如,托管在通过(例如,云计算基础架构所提供的)远程连接与托管执行环境604的计算机进行通信的远程系统(例如,主机610)上)。数据源602可以包含测试源定义(例如,图2的测试源定义201)中所定义的数据。即,测试源定义201的布局参数212可以指向数据源602中的源文件的位置。

输出数据可以存储回数据源602中或者执行环境604可访问的数据存储系统616中,或者以其它方式使用。数据存储系统616还可由开发环境618访问,其中,在开发环境618中,开发人员620能够开发、调试并测试图。在一些实现中,开发环境618是用于将应用开发为包括通过顶点(表示数据处理元件或数据集)之间的有向流(表示工作元素即数据的流动)而连接的顶点的图的系统。例如,在通过引用而并入于此的名为“managingparametersforgraph-basedapplications”的美国公开号2007/0011668中更详细地描述了这样的环境。在通过引用而并入于此的名为“executingcomputationsexpressedasgraphs”的美国专利5,966,072中描述了用于执行这样的基于图的计算的系统。根据本系统制作的图提供了用于将信息输入至图组件所表示的各个处理中并从中输出信息、用于使信息在处理之间移动以及用于定义处理的运行顺序的方法。该系统包括从任何可用方法中选择处理间通信方法(例如,根据图中的流的通信路径可以使用tcp/ip或unix域套接字或者使用共享内存来在处理间传递数据)的算法。

开发环境618包括用于存储源代码的代码存储库622。源代码和覆盖规范(例如,图2中的覆盖规范220)可以由通过例如用户界面来访问开发环境的开发人员620开发。在一些实现中,图和覆盖规范可以存储在代码存储库622中。在一些实现中,图存储在代码存储库622中,而覆盖规范存储在单独的覆盖存储库624中。

代码存储库622和覆盖存储库624之一或全部两者可以与编译器626进行通信。编译器626可以(例如,从代码存储库622)检索图,并将图编译到可执行图628中。可执行图的示例包括图4a-d中所示的图400a-d。可执行图628可以与从代码存储库622中检索到的原始图分离。作为编译的一部分,编译器626可以考虑覆盖规范。编译器可以接受覆盖规范作为输入,编译器被配置为生成各自与覆盖规范中所定义的插入相对应的一个或多个组件。可执行图包括与原始图的组件和流中的至少一部分相对应的组件和流。可执行图还包括所生成的插入组件。

开发环境618可以包括用于执行可执行图628的测试执行环境630。一旦编译器626编译图,就可以执行可执行图628。执行可执行图628可以包括:当数据(例如,工作元素或数据记录)在组件之间流动时,执行与可执行图628的组件、插入和有向流相关联的组件。在一些实现中,测试执行环境630在不修改存储在代码存储库622中的原始图的源代码或者存储在覆盖存储库624中的源代码的情况下执行可执行图628。测试执行环境可以是可通过开发环境618的接口而访问的,或者可以具有其自身的接口。接口可被配置为显示与执行相关的信息。接口还可被配置为显示与插入相关的信息(例如,探测器正在监视或保存的数据、或者测试源正在插入的数据)。测试执行环境630可以使得开发人员620能够多次执行可执行图628并在执行之间修改可执行图628的各方面。

在一些实现中,开发人员620从代码存储库622选择图1中的图100。开发人员620还从覆盖存储库624选择图2中的覆盖规范200。在一些实现中,代替选择覆盖规范200,开发人员620可以从覆盖存储库624中的多个覆盖规范选择插入定义。开发人员620指示编译器626编译图。作为编译的一部分,编译器626考虑覆盖规范200并创建可执行图628。可执行图628的示例是图4a-d中的图400a-d,其包括覆盖规范200中所定义的插入。然后在测试执行环境620中执行可执行图628。

在执行期间或之后,开发人员620可以观察与可执行图628组件、插入和流的执行相关的信息。例如,简要地参考图4a-d,开发人员620可以观察到探测器插入420所监视和存储的数据是不正确的或不期望的。开发人员620可以从覆盖存储库624选择定义被配置为监视从重定格式组件408流出的数据的探测器的探测器插入定义、以及定义被配置为监视从按表达式进行过滤组件410流出的数据的探测器的探测器插入定义。开发人员620可以分析这两个探测器所采集到的数据来判断是从重定格式组件408输出的数据还是从按表达式进行过滤组件410输出的数据导致了从收集组件112输出的数据是不正确的或不期望的。

继续该示例,开发人员620可以判断为从按表达式进行过滤组件410输出的数据是不正确的或不期望的。与其调试存在于按表达式进行过滤组件410上游的所有组件(例如,过滤组件403、排序组件404、以及复制组件406)来判断不正确数据的原因,开发人员620可以作为替代而选择向收集组件412提供经验证的数据(例如,被验证为正确的数据)。开发人员620可以从覆盖存储库624选择定义被配置为向收集组件112提供数据的测试源的测试源插入定义。如果开发人员620关注于调试图400ad-d中的位于按表达式进行过滤组件410下游的组件,则该方法可以是适当的。这种方法可以通过减少图组件的重复执行来节省系统资源。

在一些实现中,覆盖规范不会作为文件永久地存储在代码存储库622或覆盖存储库624中。相反,由开发人员620(例如,通过用户界面)开发覆盖文件中通常将会包括的信息(例如,插入定义),并且将该信息临时地存储在存储器中。然后将覆盖信息传递至编译器(例如,图3中的308)或保存状态管理器(例如,图5中的508)。

图7是示出调试过程700的流程图。接收第一图(例如,图1中的图100)(702)。第一图包括组件和流。组件表示对数据记录进行的操作,并且流表示组件之间的数据记录的流动。组件可以包括图1所示的过滤组件103、排序组件104、复制组件106、重定格式组件108、按表达式进行过滤组件110、以及收集组件112。流可以包括复制-重定格式流116和收集-输出数据宿流118。

接收定义一个或多个插入的规范(例如,覆盖规范)(704)。规范可以是图2所示的覆盖规范200。规范可以包括一个或多个插入定义(例如,测试源定义201和探测器定义213)。插入定义可以包括(针对测试源定义的)名称、上游端口、下游端口、插入类型、原型路径以及布局参数。上述一个或多个插入各自与第一图的流相关联。插入可以是探测器和测试源。

生成各自与所定义的一个或多个插入之一相对应的一个或多个组件(706)。插入组件的示例包括图4a-d中的测试源插入422和探测器插入420。测试源插入422与图100的复制-重定格式流116相关联,并且探测器插入420与图100的收集-输出数据宿流118相关联。

生成包括与第一图的组件和流中的至少一部分相对应的组件和流的第二图。第二图还包括生成的一个或多个的组件。图4a-d所示的图400a-d是第二图的示例。所生成的组件各自与第一图的特定流相关联。第二图包括与这些特定流相对应的流,并且所生成的组件各自与其在第二图中的各个相应流相关联。例如,参考图400a-d,测试源插入422与流416相关联,其中,流416与图1的第一图100的流116相对应。测试源插入422向重定格式组件408提供数据,其中,重定格式组件408与第一图100的重定格式组件108相对应。探测器插入420与流418相关联,其中,流418与第一图100的流118相对应。探测器插入420监视从收集组件412传递的数据,其中,收集组件412与第一图100的收集组件112相对应。在不修改第一图100的情况下生成并执行第二图。

虽然我们描述了可以编译图和覆盖规范以创建包括覆盖文件所定义的插入的第二图的的编译器(例如,图3的编译器308和图5的编译器512),但是在一些实现中,不编译图和覆盖规范。例如,可以直接执行图和覆盖规范,而无需编译。解释器可以通过将每个语句翻译为已经编译成机器代码的一个或多个子例程的序列来执行图和覆盖规范。

虽然我们描述了探测器和测试源形式的插入,但是在一些实现中,插入可以呈现其它形式。插入可以广泛地用于在图的某一点上注入数据,并从图的某一点拉取数据。例如,插入可被设计为监视传递通过图的流的数据的质量。如果数据质量降到阈值以下,则用户可以接收自动化警告。可以在美国申请序列xyz(代理人案卷07470-0322001)中找到插入的更多描述,其内容通过引用而全文并入于此。

上述的调试方法可以使用执行合适软件的计算系统来实现。例如,该软件可以包括在一个或多个编程或可编程计算系统(可以具有诸如分布式、客户端/服务器或网格式等的各种架构)上执行的一个或多个计算机程序中的过程,其中该一个或多个编程或可编程计算系统各自包括至少一个处理器、至少一个数据存储系统(包括易失性和/或非易失性存储器和/或存储元件)、至少一个用户接口(用于使用至少一个输入装置或端口来接收输入,并且用于使用至少一个输出装置或端口来提供输出)。该软件可以包括例如提供与图的设计、配置和执行有关的服务的较大程序的一个或多个模块。可以将程序的模块(例如,图的元素)实现为数据结构或符合数据存储库中所存储的数据模型的其它有组织数据。

可以将软件设置在诸如(利用通用或专用可编程计算机可读取的)cd-rom或其它计算机可读介质等的有形、非暂时性介质上、或者经由网络的通信介质(例如,以编码在传播信号中的形式)传递至执行该软件的计算系统的有形、非暂时性介质。可以在专用计算机上、或者使用诸如协处理器或现场可编程门阵列(fpga)或专用特定用途集成电路(asic)等的专用硬件来进行一些处理或所有功能。可以以利用不同的计算元件来进行软件所指定的计算的不同部分的分布式方式来实现该处理。优选将每一个这种计算机程序存储在通用或专用可编程计算机可读取的存储装置的计算机可读存储介质(例如,固态存储器或介质、或者磁性或光学介质)上或者下载至该存储介质,以在利用计算机读取存储装置介质以进行这里所述的处理的情况下配置计算机并使该计算机进行工作。本发明的系统还可被视为作为配置有计算机程序的有形、非暂时性介质来实现,其中如此配置成的介质使计算机以特定的预定义方式进行工作,以进行这里所述的处理步骤中的一个或多个。

已经描述了本发明的许多实施例。然而,应当理解,前述描述旨在示出而不是限制本发明的范围,该范围由所附权利要求书的范围限定。因此,其它实施例也在所附权利要求书的范围内。例如,可以在不偏离本发明的范围的情况下作出各种修改。另外,上述步骤中的一些可以是与顺序无关的,因此可以按照与所描述的顺序不同的顺序执行。

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