一种基于全局超级块支配图的插桩位置获取方法

文档序号:8942994阅读:301来源:国知局
一种基于全局超级块支配图的插桩位置获取方法
【技术领域】
[0001]本发明属计算机软件测试领域,特别涉及一种基于全局超级块支配图的插粧位置获取方法。
【背景技术】
[0002]程序插粧是在被测程序的特定位置插入探针代码,通过运行含有探针代码的程序来获取被测程序运行时数据的技术。该技术是软件测试和程序分析中的关键技术之一。使用插粧技术可以收集被测程序在执行过程的运行数据,如基本块覆盖信息、谓词覆盖信息、路径覆盖信息、函数调用信息等。目前在软件覆盖分析、测试用例自动生成、测试用例约简、软件性能分析、软件性能优化、程序不变量分析、软件自动调试、软件缺陷检测和软件缺陷修复等方面得到了广泛的关注。
[0003]但插入的探针会对被测程序产生负面影响,如使被测程序的代码量增加、执行效率降低等,因此如何设计合理的插粧策略、减少插入的探针对被测程序的影响,是软件测试和程序分析工具设计的关键问题之一。
[0004]现有技术中,减少插粧数量的方法主要有:(I)根据函数的控制流图生成函数的决策到决策的有向图,再分析该有向图中节点的依赖关系,获取需要插入探针的位置;但该方法中生成的决策到决策的有向图丢失了控制流图的部分信息,导致该有向图无法表示复杂的程序流信息,所应用的场景有限;(2)根据函数的控制流图生成函数超级块支配图,再分析该函数超级块支配图的超级块节点之间的依赖关系,以获取需要插入探针的位置。虽然该方法可以在一定程度上减少插入探针的数量,但是该方法只考虑了函数内部的控制流信息,忽略了函数之间的控制流信息,使得程序分析精度不高;而对超级块支配图的分析是基于对被测程序逻辑抽象出来的信息,如果抽象出来的信息丢失过多,会影响到超级块支配图的分析,从而通过分析超级块支配图获得的插粧位置数量无法降到最低,从而导致被测程序的代码规模大大增加。

【发明内容】

[0005]本发明技术解决问题:克服现有技术的不足,提供一种基于全局超级块支配图的插粧位置确定方法,用以解决现有插粧位置确定方法中获取的插粧位置数量没有降到最低以及丢失控制流信息导致程序分析精度不高的问题。
[0006]本发明技术解决方案:一种基于全局超级块支配图的插粧位置确定方法,其核心思想是:通过增加函数之间的控制流信息以解决现有插粧位置确定方法中插粧位置数量无法降到最低和程序分析精度不高的问题。步骤如下:
[0007]步骤1.由被测程序获取函数调用关系图,函数调用关系图分为非循环图和循环图,对于非循环图,对函数调用关系图进行拓扑排序,即:
[0008]I)遍历所述函数调用关系图,根据所述函数调用关系图中节点之间的关系计算每个节点的入度;
[0009]2)选取入度为O的节点输出;
[0010]3)将所有从步骤2)中输出的节点直接到达的节点的入度减I ;
[0011]4)重复2)和3)步骤,输出节点的序列即为所述函数调用关系图的有序序列。
[0012]通过连续合并排好序的局部超级块支配图生成全局超级块支配图,即根据排好序的局部超级块支配图,依次在所选局部超级块支配图中调用节点处添加到该节点所到目标局部超级块支配图的入口节点的边;对于循环图,利用所述函数调用关系图建立嵌套循环树,即对所有有出入弧的循环头做一次深度搜索,然后以相反的顺序检验相对应的循环来确定是否含有外部调用节点,同样自下而上的建立嵌套循环树;根据所述局部超级块支配图和所述嵌套循环树建立循环树支配图,简化所述循环树支配图生成所述全局超级块支配图,即根据嵌套循环树的节点之间的关系为所述局部超级块支配图添加其所到目标局部超级块支配图的边;
[0013]步骤2.遍历步骤I所述全局超级块支配图,生成所述全局超级块支配图中超级块节点与所述超级块节点在所述全局超级块支配图中子节点数量的超级块映射表,其中所述超级块映射表是由所述全局超级块支配图的超级块节点的唯一标识号和所述超级块节点在所述全局超级块支配图中的子节点个数组成,所述超级块映射表中超级块节点的唯一标识号为所述超级块映射表的键,而所述子节点个数为所述超级块映射表的值;
[0014]步骤3.遍历所述超级块映射表,将超级块映射表中映射值为空或一条目的超级块节点添加到插粧位置集合中;
[0015]步骤4.遍历所述超级块映射表,获得所述超级块映射表中的超级块节点,在所述全局超级块支配图中标记所述超级块节点的子节点为已覆盖;
[0016]步骤5.在所述全局超级块支配图中前向和后向遍历,如果全局超级块支配图的入口节点和出口节点已覆盖,则将所述超级块节点添加到插粧位置集合中。
[0017]上述五个步骤中涉及到的术语的说明如下:
[0018]所述超级块支配图是指由超级块以及超级块之间的关系构成的图,所述超级块为基本块支配图的强连通分量;
[0019]所述局部超级块支配图是指所述被测程序中函数的超级块支配图,由函数中的语句块以及语句块之间的关系构成的图;
[0020]所述全局超级块支配图是指所述被测程序的超级块支配图,由所述局部超级块支配图以及所述局部超级块支配图之间的关系构成的图;
[0021]所述嵌套循环树是指对所述函数调用关系图中所有有出入弧的循环头进行搜索,然后以相反的顺序检验相对应的循环确定是否含有外部调用节点,自下而上建立的树称为嵌套循环树;
[0022]所述循环树支配图是指根据嵌套循环树合并局部超级块支配图而成的图;
[0023]所述基本块支配图是指在支配树中添加蕴含树里与支配树相同节点的边而成的图;所述支配树是指由语句块以及语句块之间的支配关系构成的图,所述支配关系是指在有向图中入口节点到目标节点必须经过另外一个中间节点,则所述中间节点支配所述目标节点,如果所述中间节点是所有支配所述目标节点中离所述目标节点最近的节点,则称所述中间节点为所述目标节点的直接支配点;
[0024]所述蕴含树是指由语句块以及语句块之间的蕴含关系构成的图,其中蕴含关系是指在有向图中当前节点到达出口节点必须经过另外一个中间节点,则所述当前节点蕴含所述中间节点,如果所述当前节点是所有蕴含所述中间节点中离所述中间节点最近的节点,则称所述当前节点为所述中间节点的直接蕴含点。
[0025]本发明与现有技术相比的优点:本发明公开的基于全局超级块支配图的插粧位置获取方法,根据被测程序的函数调用关系图,生成全局超级块支配图,再分析该全局超级块支配图中超级块节点的支配关系以获取程序插粧位置,明显减少了插粧位置数量,从而提高了插粧后被测程序的运行效率。
【附图说明】
[0026]图1是本发明的插粧位置获取方法的总流程示意图;
[0027]图2是根据全局超级支配块图生成插粧位置的流程示意图。
【具体实施方式】
[0028]为使本发明实施例的方法和优点更加突出,下面将结合本发明实施例中的附图1和附图2,对本发明的插粧位置获取方法进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请的一个实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明具体实施
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1