在探测程序时探针优化的方法和系统的制作方法

文档序号:6546102阅读:295来源:国知局
专利名称:在探测程序时探针优化的方法和系统的制作方法
背景技术
覆盖范围分析(coverage analysis)是由许多软件开发者用来确保一致、高质量的验证结果的方法。代码覆盖范围分析工具可被安装来提供对特定程序的覆盖范围分析。覆盖范围分析工具可在用于获取覆盖范围信息的范围和方法上各不相同。
本质上,覆盖范围分析基于设计者的测试套件对于一组客观度量的测量。设计者基于其设计阶段、作出覆盖范围测量的成本和设计组对于特定度量的有用性的经验来选择度量。代码覆盖范围度量通常是要采用的第一个度量,因为它们可以用相对较低的成本用自动化工具来实现,并提供直截了当的结果。
代码覆盖范围探测(instrumentation)的一种方法涉及在程序代码的逻辑流内的每一块或弧上放置“探针(probe)”。“探针”指的是记录关于该代码的数据的一组指令。例如,探针可报告程序的特定部分的使用数据用于分析。在程序中放置探针提供了一种用于探测程序的强大方法。
性能是在用户需要增加代码来收集额外数据的任何情况下的一个问题。探测/探针所利用的额外开销可能超过代码覆盖范围分析的收益。由于提供的数据的覆盖级别,基于探针的分析的性能成本可能是相当大的。需要的是一种探测程序的方法,它提供了与由基于探针的分析所提供的可比较的数据级别,同时改进了性能成本。

发明内容
本发明提供了一种通过优化探针插入来探测程序的方法和系统。优化探针插入通过降低代码覆盖范围数据收集额外开销提高了探测的代码的性能。代码的控制流连同弧—块关系一起来分析,以构建“后支配者树(post-dominator tree)”。后支配者树指的是第一代码段和第二代码段之间的关系。如果第一代码段必须在第二代码段能够执行之前执行,则第二代码段被称为第一代码段的“后支配者”。相应地,在同一示例中,第一代码段被称为第二代码段的“支配者”。
采用计算的后支配者树,可通过生成优化映射来计算代码的探针插入点。优化映射提供了探针的插入点,以获取完整的代码覆盖范围信息,同时最小化插入到代码中的探针数。一旦探针被插入,可运行代码的二进制代码(binary)以获取探针输出数据。探针输出数据然后可被重叠到优化映射上,以将探针输出数据与探针位置相关联。将探针输出数据与优化映射重叠用代码中每一探针的相关联的弧和块解析了探针输出数据,以产生代码覆盖范围数据。


图1示出了可在本发明的一个示例性实施例中使用的示例性计算设备。
图2示出了依照本发明的示例性控制流图和弧—块映射。
图3示出了依照本发明对应于图2的控制流图和弧—块映射的示例性后支配者树和优化映射。
图4示出了依照本发明通过最优地将探针插入到程序中来探测程序的过程的示例性操作流程图。
图5示出了依照本发明构建优化映射的过程的示例性操作流程图。
具体实施例方式
现在将参考附图更完整地描述本发明,附图形成了本发明的一部分,并作为说明示出了用于实施本发明的特定示例性实施例。然而,本发明可以用许多不同的形式来实施,并不应当被解释为限于此处所述的实施例;相反提供了这些实施例使得本发明是全面和完整的,并且可以向本领域的技术人员完整地传达本发明的范围。本发明可被实施为方法或设备等等。因此,本发明可采用完全硬件实施例、完全软件实施例或组合软件和硬件方面的实施例的形式。因此以下详细描述不应当被认为是限制的意义。
说明性操作环境图1示出了可包括在用于实现本发明的系统100中的示例性计算装置。计算装置100示出了可应用于本发明的通用操作环境。在十分基本的配置中,计算装置100通常包括至少一个处理单元102和系统存储器104。处理单元102包括现有的物理处理器、设计中的处理器、共同运作的多处理器、虚拟处理器以及能够解释二进制可执行指令的任何其它设备或软件程序。根据计算装置的确切配置和类型,系统存储器104可以是易失性(如RAM)、非易失性(如ROM、闪存等)或两者的某一组合。系统存储器104通常包括操作系统105、一个或多个应用程序106,并且可包括程序数据107。这一基本配置在图1中由虚线108内的组件示出。
计算装置100可具有另外的特征或功能。例如,计算装置100也可包括另外的数据存储设备(可移动和/或不可移动),如磁盘、光盘或磁带。这类另外的存储在图1中由可移动存储109和不可移动存储110示出。计算机存储介质可包括以用于储存如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法和技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器104、可移动存储109和不可移动存储110都是计算机存储介质的示例。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存期望的信息并可由计算装置100访问的任一其它介质。任一这类计算机存储介质可以是装置100的一部分。计算装置100也可具有(多个)输入设备112,如键盘、鼠标、输入笔、语音输入设备、触摸输入设备等等。也可包括(多个)输出设备114,如显示器、扬声器、打印机等等。所有这些设备在本领域中是已知的,因此不需要在此详细讨论。
计算装置100也包含允许装置如通过网络与其它计算装置118进行通信的通信连接116。通信连接116是通信介质的一个示例。通信介质通常可以诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据实施,并包括任一信息传送介质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信介质包括有线介质,如有线网络或直接连线连接,以及无线介质,如声学、RF、红外和其它无线介质。本发明使用的术语计算机可读介质包括存储介质和通信介质。
探针优化本发明一般针对用于在探测程序时优化探针插入的系统和方法。探针指的是被插入到程序中以从代码中检索诸如关于代码覆盖范围的数据等数据的一组指令。用于探测程序的先前的方法设计对控制流图的每一弧插入探针。然而,探针在长度上为指定数量的比特,并且向程序添加大量的探针会增加探测程序的额外开销。当插入探针来运行程序二进制代码时,探针可向二进制代码的执行周期添加相当大量的时间。本发明优化了探针插入点,由此减少了插入到程序中的探针数,并减少了用于探测系统的额外开销。采用某些程序测试套件将花费数周的时间来执行,因此本发明提供的额外开销的减少可提供显著的时间节省。
图2示出了依照本发明的示例性控制流图和弧—块映射。控制流图210提供了程序执行的流程。函数的块(或节点)(如,1、2、3、4、5、6)按弧(如,A、B、C、D、E、F)指示的顺序执行。控制流图210是为程序随计算的控制流的一个示例,其它控制流图可能要复杂得多。
控制流图210也可依照表示弧和块的数据条目来表示,而非用图形表示。一个示例由弧—块映射220来提供。弧—块映射220提供了控制流图210内每一弧的块(或节点)关系。与程序处理的特定路径相关的代码块可通过检查弧—块映射220来解析。
在所示的示例中,程序执行可采用从节点1开始的两条不同的路径,以到达节点6处的程序末端。在一条路径中,代码块的执行流过弧B和D,而在另一路径中,代码块的执行流过弧C和E。为获取由控制流图210表示的程序的覆盖范围数据,考虑对程序执行可用的各种路径。也考虑了未包括在从节点1到节点6的路径内的程序的其它方面。例如,某些程序可具有所谓的“后向边(back edge)”。后向边由弧H表示,并对应于节点何时与另一节点具有相互依赖的关系。由于后向边,节点4与节点2具有相互依赖的关系。后向边示出了为使节点2能够执行,节点4必须执行。然而,在执行的正常流中,为使节点4能够执行,节点2必须执行。由此,节点2和节点4具有由后向边H生成的相互依赖关系。在代码覆盖范围的一个实施例中,后向边被插入探针,因为它们表示程序的正常范围之外的过程。
对程序流考虑的另一方面是函数调用,或对程序的其它部分的调用的存在。调用由弧G表示。对应于弧G的调用对节点50调用,并指令函数215执行,并可能返回一值。在代码覆盖范围的一个实施例中,对程序的其它部分或其它函数的调用通常被插入探针,使得代码覆盖范围数据包括调用。
对程序的控制流考虑的又一方面是外部数据入口点。例如,外部入口点75通过弧J向节点1提供了数据。外部入口点表示来自外部源的数据,如来自用户的输入的入口点,代码块(如,节点1)使用该数据来执行。在代码覆盖范围的一个实施例中,外部入口点被插入探针,使得代码覆盖数据包括这些数据外部入口。
弧—块映射220可根据额外地通过控制流图210来修改,以包括后向边、调用和外部入口点的条目。因此,在一个实施例中,探针条目的优化包括生成完整的代码覆盖范围数据,同时最小化所使用的探针数。下文图3-5示出了最小化用于探测程序的探针数的图形方法和过程。
图3示出了依照本发明对应于图2的控制流图和弧—块映射的示例性后支配者树和优化映射。后支配者树310示出了图2所示的控制流图210内块及其相关联的弧的后支配者关系。后支配者指的是第一代码块和第二代码块之间的关系。如果第一代码块必须在第一代码块能够执行之前执行,则第二代码块被称为第一代码块的“后支配者”。相应地,在同一示例中,第一代码块被称为第二代码块的“支配者”。
后支配者树的计算提供了对于作为后支配者树中的“叶节点”的代码块的确定。叶节点指的是后支配者树的终点,或没有子节点的节点。其它代码块必须执行以使叶节点块能够执行,但是其它代码块不依赖于叶节点的执行。在本示例中,后支配者树310包括单个叶节点X、Y和Z。节点6是叶节点,因为没有其它代码块依赖于其执行。节点3和4也是叶节点,因为这些节点不必要在节点3和4之后的节点(如,节点5和6)的执行之前执行。
一旦发现了后支配者树的叶节点,生成一优化映射。优化映射包括对应于后支配者树的叶节点的条目,以及遍历通过后支配者树以到达叶节点的弧。在本示例中,优化映射320包括用于三个叶节点(X、Y、Z)及其与经遍历来到达每一特定叶节点的弧(如,A、B、C、F)的关系的条目。将探针插入点限制到对应于优化映射条目的点,而非与程序相关联的每一弧,能够优化用于探测程序的探针插入。
在另一实施例中,对程序所计算的探针被插入到后支配者树310中。将探针插入到后支配者树中提供了一种更紧凑的映射,因为如果当跟踪叶节点的父节点时遇到另一探针,则映射可以停止。因此,已被示出为由探针覆盖的节点和弧并非也由另一探针覆盖。为后向边、调用和外部入口点生成的探针也可以包括在树中,用于映射节点时的进一步细化(refine)。
尽管弧和块在图2和3中分别由字母和数字来引用,然而可使用其它标识符,包括所有的数字,用于区分每一弧和块。
图4示出了依照本发明通过最优地将探针插入到程序来探测程序的过程的示例性操作流程图。过程400在起始块402开始,其中选择一程序来探测。处理在操作块404继续。
在操作块404,对程序计算控制流图。控制流图可以类似于图2所示的控制流图。一旦生成了控制流图,处理前进到操作块406。
在操作块406,根据控制流图构建弧一块映射。在一个实施例中,弧—块映射类似于图2所示的弧—块映射。在另一实施例中,弧—块映射是单独的存储器条目。每一存储器条目列出了对应于该程序的所有块和弧。在块的存储器条目中,对应于特定弧的块被标记为与该特定弧有关。在弧的存储器条目中,每一弧用其对应的块来标记。因此,弧和块是交叉引用的,使得获取关于弧或块的覆盖范围数据的信息允许相应地解析相关的块和弧的覆盖范围数据。处理在操作块408继续。
在操作块408,为程序构建后支配者树。该后支配者树可以类似于图3所示的后支配者树,或可以是表示后支配者树的数据。一旦计算了后支配者树,处理移至操作块410。
在操作块410,构建对应于后支配者树的优化映射。优化映射对应于用于后支配者树的叶节点的条目。优化映射也包括要对其在程序中插入探针的条目。构建后支配者树的过程在下文图5的讨论中描述。一旦生成了优化映射,处理移至操作块412。
在操作块412,对应于优化映射条目的探针被插入到程序中。优化插入到程序中的探针数,以减少探针数,同时仍提供整个程序的代码覆盖范围数据。处理在操作块414继续。
在操作块414,运行具有探针的程序的二进制代码。当程序运行时,探针返回表示在执行期间使用了程序的哪些部分的数据。处理在操作块416继续。
在操作块416,当运行二进制代码或一旦从探针返回了数据,则将返回的数据叠加到优化映射上。在优化映射上叠加数据将探针与程序的弧相关。换言之,使用优化映射,返回表示代码执行的数据的探针与该探针相关联的弧相匹配。一旦通过叠加优化映射将每一探针与其相关联的弧关联,处理在操作块418继续。
在操作块418,使用优化映射与每一探针相关联的每一弧使用弧—块映射再次被映射回相关联的块。因此,每一探针与它报告代码执行的相应的块相关联。映射回块级和弧级给出了程序的弧和块覆盖范围数据。弧和块覆盖范围数据提供了程序的覆盖范围数据。一旦提供了代码覆盖范围,处理移至中止块420,过程400结束。
图5示出了依照本发明构建优化映射的过程的示例性操作流程图。过程500在进入块502进入,在那里图4所示的过程400进入操作块410。处理在操作块504继续。
在操作块504,在优化映射内为先前计算的后支配者数的叶节点生成映射条目。后支配者数的每一叶节点导致优化映射中的一个条目。相应地,优化映射中的每一条目导致插入到程序中的一个探针。通过插入与后支配者树的叶节点相关的探针而非与控制流图的每一弧相关的探针,很大程度上减少了必需的探针数。一旦在优化映射中生成了对应于后支配者树的叶节点的条目,处理在判别块506继续。
在判别块506,另一次通过程序的控制流,以确定是否在代码执行流中存在后向边。如上所述,后向边可创建程序内两个或多个代码块之间的相互依赖性。如果不存在后向边,处理前进到判别块510。然而,如果在程序中存在后向边,则处理移至操作块508。
在操作块508,将表示位于程序的执行流中的每一后向边的条目添加到优化映射中。后向边表示位于程序的正常流之外的步骤,因此被插入探针以寻找覆盖范围信息。向优化映射添加用于每一后向边的条目确保了对发现的每一后向边收集了覆盖范围数据。在添加了条目之后,处理在判别块510继续。
在判别块510,另一次通过程序的控制流以确定在代码的执行流中是否存在任何调用。调用可导致其它函数或其它代码部分被执行。如果不存在调用,则处理前进到判别块514。然而,如果程序内存在调用,则处理移至操作块512。
在操作块512,向优化映射添加表示位于程序的执行流中的每一条目。调用表示程序的正常流之外的步骤,因此被插入探针以寻找覆盖范围数据。向优化映射用于每一调用的条目确保了为发现的每一调用收集覆盖范围数据。在添加了条目之后,处理在判别块514继续。
在判别块514,另一次通过程序的控制流以确定在程序的执行流内是否存在任何外部入口点。在一个实施例中,外部入口点位于代码的正常执行路径之外,并且不由后支配者树的叶节点来表示。如果不存在任何外部入口点,处理前进到返回块518,在那里过程500返回到图4所示的操作块412。然而,如果存在关于程序的外部入口点,则处理移至操作块516。
在操作块516,向优化映射添加表示位于程序的执行流中的每一外部入口点的条目。如上所述,外部入口点表示程序的正常流之外的步骤,因此被插入探针以寻找覆盖范围信息。向优化映射添加用于每一外部入口点的条目确保了为发现的每一外部入口点收集覆盖范围数据。在添加了条目之后,处理前进到中止块518,在那里过程500返回到图4所示的操作块412。
上述说明书、示例和数据提供了本发明的组成部分的制作和使用的完整描述。由于可以在不脱离本发明的精神和范围的情况下作出本发明的许多实施例,因此本发明驻留在所附权利要求书中。
权利要求
1.一种用于探测程序的计算机实现的方法,其特征在于,包括检查与程序的函数相关联的后支配者树;依照所述后支配者树确定对程序的探针插入;将所述探针插入到程序中。
2.如权利要求1所述的计算机实现的方法,其特征在于,还包括从与所述程序相关联的控制流图中生成所述后支配者树。
3.如权利要求2所述的计算机实现的方法,其特征在于,还包括从所述控制流图中构建弧—块映射,使得当从所述探针接收数据时,所述数据被叠加到所述弧—块映射上,以发现所述程序的弧和块覆盖范围数据。
4.如权利要求1所述的计算机实现的方法,其特征在于,还包括依照所述候支配者树构建优化映射,其中,所述优化映射包括对应于所述探针的条目。
5.如权利要求4所述的计算机实现的方法,其特征在于,还包括检查所述程序以寻找后向边,并将对应于所述后向边的条目插入到所述优化映射中,使得作出对应于所述程序中后向边的位置的第二探针插入。
6.如权利要求4所述的计算机实现的方法,其特征在于,还包括检查所述程序以寻找调用,并将对应于所述调用的条目插入到优化映射中,使得作出对应于所述程序中所述调用的位置的第二探针插入。
7.如权利要求4所述的计算机实现的方法,其特征在于,还包括检查所述程序以寻找外部入口点,并将对应于所述外部入口点的条目插入到所述优化映射中,使得作出对应于所述程序中所述外部入口点位置的第二探针插入。
8.如权利要求4所述的计算机实现的方法,其特征在于,还包括将从所述探针接收的数据叠加到所述优化映射上,以为所述探针确定弧关系,其中,所述弧关系提供了所述程序的代码覆盖范围数据。
9.如权利要求1所述的计算机实现的方法,其特征在于,所述探针对应于所述后支配者树内存在的叶节点。
10.一种包括用于探测程序的计算机可执行指令的计算机可读介质,其特征在于,包括检查与程序的函数相关联的后支配者树;构建对应于所述后支配者树的优化映射,其中,所述优化映射包括对应于所述后支配者树中的叶节点的条目;以及将对应于所述优化映射的每一条目的探针插入到所述程序中。
11.如权利要求10所述的计算机可读介质,其特征在于,还包括从与所述程序相关联的控制流图中生成所述后支配者树。
12.如权利要求11所述的计算机可读介质,其特征在于,还包括从所述控制流图中构建弧—块映射,使得当从所述探针接收数据时,所述数据被叠加到所述弧—块映射上以发现所述程序的弧和块覆盖范围数据。
13.如权利要求10所述的计算机可读介质,其特征在于,还包括检查所述程序以寻找后向边,并将对应于所述后向边的条目添加到所述优化映射中,使得插入到程序中的某些探针是对应于所述程序中所述后向边的位置来插入的。
14.如权利要求10所述的计算机可读介质,其特征在于,还包括检查所述程序以寻找调用,并将对应于所述调用的条目插入到所述优化映射中,使得插入到所述程序中的某些探针是对应于所述程序中所述调用的位置来插入的。
15.如权利要求10所述的计算机可读介质,其特征在于,还包括检查所述程序以寻找外部入口点,并将对应于所述外部入口点的条目插入到所述优化映射中,使得插入到所述程序中的某些探针是对应于所述程序中所述外部入口点的位置来插入的。
16.如权利要求10所述的计算机可读介质,其特征在于,还包括将从所述探针接收的数据叠加到所述优化映射上,以为所述探针确定弧关系,其中,所述弧关系提供了所述程序的代码覆盖范围数据。
17.一种用于探测程序的系统,其特征在于,包括一包括应用程序的计算装置,所述应用程序被配置成计算对应于所述程序的控制流图;构建对应于所述控制流图的后支配者树;构建对应于所述后支配者树的优化映射,其中,所述优化映射包括对应于所述后支配者树中的叶节点的条目;将对应于所述优化映射的每一条目的探针插入到所述程序中;以及将在执行所述程序之后从所述探针接收的数据叠加到所述优化映射上以提供所述程序的代码覆盖范围数据。
18.如权利要求17所述的系统,其特征在于,所述应用程序还被配置成检查所述程序以寻找后向边,并将对应于所述后向边的条目添加到所述优化映射中,使得插入到所述程序中的某些探针是对应于所述程序中所述后向边的位置来插入的。
19.如权利要求17所述的系统,其特征在于,所述应用程序还被配置成检查所述程序以寻找调用,并将对应于所述调用的条目添加到所述优化映射中,使得插入到所述程序中的某些条目是对应于所述程序中所述调用的位置来插入的。
20.如权利要求17所述的系统,其特征在于,所述应用程序还被配置成检查所述程序以寻找外部入口点,并将对应于所述外部入口点的条目添加到所述优化映射中,使得插入到所述程序中的某些条目是对应于所述程序中所述外部入口点的位置来插入的。
21.如权利要求17所述的系统,其特征在于,所述应用程序还被配置成构建一弧映射和一块映射,其每一个都对应于所述控制流图,使得所述弧映射和块映射交叉引用所述控制流图的弧—块关系。
22.如权利要求21所述的系统,其特征在于,所述应用程序还被配置成将所述数据叠加到所述弧映射和块映射的优化映射上,以细化所述程序的代码覆盖范围数据。
23.如权利要求21所述的系统,其特征在于,所述探针被包括在所述后支配者树中,以使防止映射到代码的弧和块的探针重复。
全文摘要
提供了一种通过优化探针插入来探测程序的方法和系统。通过提供最优探针插入点减少了插入到探测的代码中的探针数。分析代码的控制流以及弧-块关系以构建后支配者树。从后支配者树生成提供最优探针插入点的优化映射。一旦插入了探针并通过运行表示代码和探针的二进制代码收集了数据,可将该数据叠加到优化映射和弧-块关系上,以提供代码覆盖范围数据。
文档编号G06F11/28GK1694075SQ20051006508
公开日2005年11月9日 申请日期2005年4月6日 优先权日2004年4月7日
发明者K·K-B·马, S·C·舍尔茨 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1