CN105159835B - 一种基于全局超级块支配图的插桩位置获取方法 - Google Patents
一种基于全局超级块支配图的插桩位置获取方法 Download PDFInfo
- Publication number
- CN105159835B CN105159835B CN201510703492.5A CN201510703492A CN105159835B CN 105159835 B CN105159835 B CN 105159835B CN 201510703492 A CN201510703492 A CN 201510703492A CN 105159835 B CN105159835 B CN 105159835B
- Authority
- CN
- China
- Prior art keywords
- superblock
- dominating
- node
- global
- tree
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于全局超级块支配图的插桩位置获取方法,应用于计算机软件测试和软件可靠性保障领域。所述方法包括以下步骤:根据局部超级块支配图和函数调用关系图生成全局超级块支配图;对全局超级块支配图进行节点关系分析,最终获取最少数量的插桩位置。本发明可有效减少被测程序中插桩点的数量,从而显著提高插桩后被测程序的运行效率。
Description
技术领域
本发明属计算机软件测试领域,特别涉及一种基于全局超级块支配图的插桩位置获取方法。
背景技术
程序插桩是在被测程序的特定位置插入探针代码,通过运行含有探针代码的程序来获取被测程序运行时数据的技术。该技术是软件测试和程序分析中的关键技术之一。使用插桩技术可以收集被测程序在执行过程的运行数据,如基本块覆盖信息、谓词覆盖信息、路径覆盖信息、函数调用信息等。目前在软件覆盖分析、测试用例自动生成、测试用例约简、软件性能分析、软件性能优化、程序不变量分析、软件自动调试、软件缺陷检测和软件缺陷修复等方面得到了广泛的关注。
但插入的探针会对被测程序产生负面影响,如使被测程序的代码量增加、执行效率降低等,因此如何设计合理的插桩策略、减少插入的探针对被测程序的影响,是软件测试和程序分析工具设计的关键问题之一。
现有技术中,减少插桩数量的方法主要有:(1)根据函数的控制流图生成函数的决策到决策的有向图,再分析该有向图中节点的依赖关系,获取需要插入探针的位置;但该方法中生成的决策到决策的有向图丢失了控制流图的部分信息,导致该有向图无法表示复杂的程序流信息,所应用的场景有限;(2)根据函数的控制流图生成函数超级块支配图,再分析该函数超级块支配图的超级块节点之间的依赖关系,以获取需要插入探针的位置。虽然该方法可以在一定程度上减少插入探针的数量,但是该方法只考虑了函数内部的控制流信息,忽略了函数之间的控制流信息,使得程序分析精度不高;而对超级块支配图的分析是基于对被测程序逻辑抽象出来的信息,如果抽象出来的信息丢失过多,会影响到超级块支配图的分析,从而通过分析超级块支配图获得的插桩位置数量无法降到最低,从而导致被测程序的代码规模大大增加。
发明内容
本发明技术解决问题:克服现有技术的不足,提供一种基于全局超级块支配图的插桩位置确定方法,用以解决现有插桩位置确定方法中获取的插桩位置数量没有降到最低以及丢失控制流信息导致程序分析精度不高的问题。
本发明技术解决方案:一种基于全局超级块支配图的插桩位置确定方法,其核心思想是:通过增加函数之间的控制流信息以解决现有插桩位置确定方法中插桩位置数量无法降到最低和程序分析精度不高的问题。步骤如下:
步骤1.由被测程序获取函数调用关系图,函数调用关系图分为非循环图和循环图,对于非循环图,对函数调用关系图进行拓扑排序,即:
1)遍历所述函数调用关系图,根据所述函数调用关系图中节点之间的关系计算每个节点的入度;
2)选取入度为0的节点输出;
3)将所有从步骤2)中输出的节点直接到达的节点的入度减1;
4)重复2)和3)步骤,输出节点的序列即为所述函数调用关系图的有序序列。
通过连续合并排好序的局部超级块支配图生成全局超级块支配图,即根据排好序的局部超级块支配图,依次在所选局部超级块支配图中调用节点处添加到该节点所到目标局部超级块支配图的入口节点的边;对于循环图,利用所述函数调用关系图建立嵌套循环树,即对所有有出入弧的循环头做一次深度搜索,然后以相反的顺序检验相对应的循环来确定是否含有外部调用节点,同样自下而上的建立嵌套循环树;根据所述局部超级块支配图和所述嵌套循环树建立循环树支配图,简化所述循环树支配图生成所述全局超级块支配图,即根据嵌套循环树的节点之间的关系为所述局部超级块支配图添加其所到目标局部超级块支配图的边;
步骤2.遍历步骤1所述全局超级块支配图,生成所述全局超级块支配图中超级块节点与所述超级块节点在所述全局超级块支配图中子节点数量的超级块映射表,其中所述超级块映射表是由所述全局超级块支配图的超级块节点的唯一标识号和所述超级块节点在所述全局超级块支配图中的子节点个数组成,所述超级块映射表中超级块节点的唯一标识号为所述超级块映射表的键,而所述子节点个数为所述超级块映射表的值;
步骤3.遍历所述超级块映射表,将超级块映射表中映射值为空或一条目的超级块节点添加到插桩位置集合中;
步骤4.遍历所述超级块映射表,获得所述超级块映射表中的超级块节点,在所述全局超级块支配图中标记所述超级块节点的子节点为已覆盖;
步骤5.在所述全局超级块支配图中前向和后向遍历,如果全局超级块支配图的入口节点和出口节点已覆盖,则将所述超级块节点添加到插桩位置集合中。
上述五个步骤中涉及到的术语的说明如下:
所述超级块支配图是指由超级块以及超级块之间的关系构成的图,所述超级块为基本块支配图的强连通分量;
所述局部超级块支配图是指所述被测程序中函数的超级块支配图,由函数中的语句块以及语句块之间的关系构成的图;
所述全局超级块支配图是指所述被测程序的超级块支配图,由所述局部超级块支配图以及所述局部超级块支配图之间的关系构成的图;
所述嵌套循环树是指对所述函数调用关系图中所有有出入弧的循环头进行搜索,然后以相反的顺序检验相对应的循环确定是否含有外部调用节点,自下而上建立的树称为嵌套循环树;
所述循环树支配图是指根据嵌套循环树合并局部超级块支配图而成的图;
所述基本块支配图是指在支配树中添加蕴含树里与支配树相同节点的边而成的图;所述支配树是指由语句块以及语句块之间的支配关系构成的图,所述支配关系是指在有向图中入口节点到目标节点必须经过另外一个中间节点,则所述中间节点支配所述目标节点,如果所述中间节点是所有支配所述目标节点中离所述目标节点最近的节点,则称所述中间节点为所述目标节点的直接支配点;
所述蕴含树是指由语句块以及语句块之间的蕴含关系构成的图,其中蕴含关系是指在有向图中当前节点到达出口节点必须经过另外一个中间节点,则所述当前节点蕴含所述中间节点,如果所述当前节点是所有蕴含所述中间节点中离所述中间节点最近的节点,则称所述当前节点为所述中间节点的直接蕴含点。
本发明与现有技术相比的优点:本发明公开的基于全局超级块支配图的插桩位置获取方法,根据被测程序的函数调用关系图,生成全局超级块支配图,再分析该全局超级块支配图中超级块节点的支配关系以获取程序插桩位置,明显减少了插桩位置数量,从而提高了插桩后被测程序的运行效率。
附图说明
图1是本发明的插桩位置获取方法的总流程示意图;
图2是根据全局超级支配块图生成插桩位置的流程示意图。
具体实施方式
为使本发明实施例的方法和优点更加突出,下面将结合本发明实施例中的附图1和附图2,对本发明的插桩位置获取方法进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请的一个实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明具体实施方法如下:
图1、2所示为本发明的插桩位置获取方法的总流程示意图,包括:
步骤101,由所述被测程序生成所述函数调用关系图;
步骤102,判断所述函数调用关系图是否为循环图,如果所述函数调用关系图为非循环图,则转步骤103,如果所述函数调用关系图为循环图,则转步骤105;
步骤103,对所述函数调用关系图进行拓扑排序,即:
1)遍历所述函数调用关系图,根据所述函数调用关系图中节点之间的关系获取每个节点的入度;
2)选取入度为0的节点输出;
3)将所有从步骤2中输出节点直接到达的节点的入度减1;
4)重复2和3步骤,输出节点的序列即为所述函数调用关系图的有序序列。
步骤104,由所述被测程序获取所述局部超级块支配图;
步骤105,通过连续合并排好序的所述局部超级块支配图生成所述全局超级块支配图,即根据排好序的所述局部超级块支配图,依次在所选所述局部超级块支配图中调用节点处添加到该节点所到目标所述局部超级块支配图的入口节点的边;
步骤106,利用所述函数调用关系图建立嵌套循环树,即对所有有出入弧的循环头做一次深度搜索,然后以相反的顺序检验相对应的循环来确定是否含有外部调用节点,同样自下而上的建立嵌套循环树;
步骤107,根据所述局部超级块支配图和所述嵌套循环树建立循环树支配图,简化所述循环树支配图生成所述全局超级块支配图,即根据嵌套循环树的节点之间的关系为所述局部超级块支配图添加其所到目标局部超级块支配图的边;
步骤108,遍历所述全局超级块支配图,生成所述全局超级块支配图中超级块节点与子节点数量的超级块映射表,其中超级块映射表是由所述全局超级块支配图的超级块节点的地址和所述超级块节点在所述全局超级块支配图中的子节点个数组成,超级块映射表中超级块节点的地址为所述超级块映射表的键,而所述子节点个数为所述超级块映射表的值,其具体包括以下子步骤,如图2所示:
步骤1081,以深度搜索的方式遍历超级块映射表;
步骤1082,判断超级块映射表中映射值是否为空或1,是则转到1087,否则转到1083;
步骤1083,在所述全局超级块支配图中标记超级块节点的子节点为已覆盖;
步骤1084,在所述全局超级块支配图中从被访问的超级块开始前向遍历;
步骤1085,在所述全局超级块支配图中从被访问的超级块开始后向遍历;
步骤1086,判断所述全局超级块支配图的入口节点和出口节点是否已覆盖,如果是则转到1087;
步骤1087,添加被访问的超级块到插桩位置集合中。
步骤109,输出步骤108产生的插桩位置集合。
本实施例提供的基于全局超级块支配图的插桩方法,根据程序的函数调用关系图,生成全局超级块支配图,然后依据该全局超级块支配图获取插桩位置,明显减少了插桩位置的数量,显著提高了插桩后程序的执行效率。
应该指出的是,以上所述仅为本发明的一个实施案例,并不能因此而认为是对本发明的保护范围的限制,在不脱离本发明的核心思想的所有等效改进和润饰,均属于本发明的保护范围。
Claims (4)
1.一种基于全局超级块支配图的插桩位置获取方法,其特征在于:包括以下步骤:
步骤1:由被测程序获取函数调用关系图,函数调用关系图分为非循环图和循环图,对于非循环图,对函数调用关系图进行拓扑排序,通过连续合并排好序的局部超级块支配图生成全局超级块支配图;对于循环图,利用所述函数调用关系图建立嵌套循环树,根据所述局部超级块支配图和所述嵌套循环树建立循环树支配图,简化所述循环树支配图生成所述全局超级块支配图;所述全局超级块支配图是指所述被测程序的超级块支配图,由所述局部超级块支配图以及所述局部超级块支配图之间的关系构成的图;所述局部超级块支配图是指所述被测程序中函数的超级块支配图,由函数中的语句块以及语句块之间的关系构成的图;所述嵌套循环树是指对所述函数调用关系图中所有有出入弧的循环头进行搜索,然后以相反的顺序检验相对应的循环确定是否含有外部调用节点,自下而上建立的树称为嵌套循环树;所述循环树支配图是指根据嵌套循环树合并局部超级块支配图而成的图;
步骤2.遍历步骤1所述全局超级块支配图,生成所述全局超级块支配图中超级块节点与所述超级块节点在所述全局超级块支配图中子节点数量的超级块映射表;
步骤3.遍历所述超级块映射表,将超级块映射表中映射值为空或一条目的超级块节点添加到插桩位置集合中;
步骤4.遍历所述超级块映射表,获得所述超级块映射表中的超级块节点,在所述全局超级块支配图中标记所述超级块节点的子节点为已覆盖;
步骤5.在所述全局超级块支配图中前向和后向遍历,如果全局超级块支配图的入口节点和出口节点已覆盖,则将所述超级块节点添加到插桩位置集合中。
2.根据权利要求1所述的基于全局超级块支配图的插桩位置获取方法,其特征在于:在步骤1中,所述超级块支配图是指由超级块以及超级块之间的关系构成的图,所述超级块为基本块支配图的强连通分量。
3.根据权利要求2所述的基于全局超级块支配图的插桩位置获取方法,其特征在于:所述基本块支配图是指在支配树中添加蕴含树里与支配树相同节点的边而成的图;所述支配树是指由语句块以及语句块之间的支配关系构成的图,所述支配关系是指在有向图中入口节点到目标节点必须经过另外一个中间节点,则所述中间节点支配所述目标节点,如果所有支配所述目标节点的节点支配所述中间节点,则称所述中间节点为所述目标节点的直接支配点。
4.根据权利要求3所述的基于全局超级块支配图的插桩位置获取方法,其特征在于:所述蕴含树是指由语句块以及语句块之间的蕴含关系构成的图,其中蕴含关系是指在有向图中当前节点到达出口节点必须经过另外一个中间节点,则所述当前节点蕴含所述中间节点,如果所有蕴含所述中间节点的节点蕴含所述当前节点,则称所述当前节点为所述中间节点的直接蕴含点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510703492.5A CN105159835B (zh) | 2015-10-24 | 2015-10-24 | 一种基于全局超级块支配图的插桩位置获取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510703492.5A CN105159835B (zh) | 2015-10-24 | 2015-10-24 | 一种基于全局超级块支配图的插桩位置获取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105159835A CN105159835A (zh) | 2015-12-16 |
CN105159835B true CN105159835B (zh) | 2017-11-03 |
Family
ID=54800697
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510703492.5A Active CN105159835B (zh) | 2015-10-24 | 2015-10-24 | 一种基于全局超级块支配图的插桩位置获取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105159835B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105589730B (zh) * | 2015-12-29 | 2018-08-28 | 东南大学 | 一种基于离线约束图的指针分析方法 |
CN115617687B (zh) * | 2022-10-31 | 2023-08-25 | 清华大学 | 程序插桩方法、装置、设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103116540A (zh) * | 2013-01-23 | 2013-05-22 | 电子科技大学 | 基于全局超级块支配图的动态符号执行方法及其装置 |
CN103593291A (zh) * | 2013-11-18 | 2014-02-19 | 北京邮电大学 | 用于包括多个函数测试模块的单元测试方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101192193A (zh) * | 2006-11-27 | 2008-06-04 | 国际商业机器公司 | 用于实现观察点的方法和系统 |
-
2015
- 2015-10-24 CN CN201510703492.5A patent/CN105159835B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103116540A (zh) * | 2013-01-23 | 2013-05-22 | 电子科技大学 | 基于全局超级块支配图的动态符号执行方法及其装置 |
CN103593291A (zh) * | 2013-11-18 | 2014-02-19 | 北京邮电大学 | 用于包括多个函数测试模块的单元测试方法及装置 |
Non-Patent Citations (2)
Title |
---|
基于超级块支配图插装的软件测试工具设计与实现;徐晓峰 等;《计算机应用研究》;20100331;第27卷(第3期);第923-927页 * |
基于路径覆盖插桩的可执行代码测试工具实现;王轶 等;《计算机工程》;20120331;第38卷(第5期);第35-40页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105159835A (zh) | 2015-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102073589B (zh) | 一种基于代码静态分析的数据竞争检测方法及系统 | |
CN103294594B (zh) | 一种基于测试的静态分析误报消除方法 | |
CN105138335B (zh) | 一种基于控制流图的函数调用路径提取方法及装置 | |
CN103577324B (zh) | 移动应用中隐私信息泄露的静态检测方法 | |
CN104732152B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
CN105243018B (zh) | 一种面向对象的类测试数据生成方法 | |
CN110543421A (zh) | 基于测试用例自动生成算法的单元测试自动执行方法 | |
CN103728552B (zh) | 芯片管脚连接关系检测方法及系统 | |
CN102750223B (zh) | 一种基于面向对象程序切片谱的错误定位方法 | |
CN102073588A (zh) | 一种基于代码静态分析的多线程死锁检测方法及系统 | |
CN102222035A (zh) | 基于符号执行技术的软件行为检测系统及检测方法 | |
CN109446107A (zh) | 一种源代码检测方法及装置、电子设备 | |
CN105159835B (zh) | 一种基于全局超级块支配图的插桩位置获取方法 | |
CN106295346A (zh) | 一种应用漏洞检测方法、装置及计算设备 | |
CN105117336B (zh) | 一种动态标记处理控制依赖的方法 | |
CN106021116B (zh) | 复杂系统中不可达函数调用路径检测方法 | |
CN108363660B (zh) | 一种测试程序生成方法和装置 | |
CN105183642A (zh) | 基于插桩的程序行为获取及结构分析方法 | |
CN108021507A (zh) | 符号执行的并行路径搜索方法及装置 | |
CN103914372B (zh) | 基于程序切片的代码缺陷静态检测的并行化方法及装置 | |
CN101661409B (zh) | 并行程序通信模式的提取方法及系统 | |
CN103744776B (zh) | 一种基于符号化函数摘要的静态分析方法及系统 | |
CN104156308B (zh) | 一种基于用户执行踪迹重放的移动应用测试方法 | |
CN105487983A (zh) | 基于智能路径引导的敏感点逼近方法 | |
CN105242958B (zh) | 一种虚拟试验系统与hla仿真系统数据交换方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210915 Address after: 1709-a145, No.9, North Fourth Ring Road West, Haidian District, Beijing, 100190 Patentee after: BEIJING INTELLIGENT FULLY ELECTRIC INFORMATION TECHNOLOGY Co.,Ltd. Address before: 100191 No. 37, Haidian District, Beijing, Xueyuan Road Patentee before: BEIHANG University |
|
TR01 | Transfer of patent right |