CN108304317A - 一种基于路径执行频率的单过程程序静态切片方法及系统 - Google Patents
一种基于路径执行频率的单过程程序静态切片方法及系统 Download PDFInfo
- Publication number
- CN108304317A CN108304317A CN201711453574.4A CN201711453574A CN108304317A CN 108304317 A CN108304317 A CN 108304317A CN 201711453574 A CN201711453574 A CN 201711453574A CN 108304317 A CN108304317 A CN 108304317A
- Authority
- CN
- China
- Prior art keywords
- slice
- path
- node
- weighting
- src
- 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.)
- Granted
Links
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/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- 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/3644—Software debugging by instrumenting at runtime
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于路径执行频率的单过程程序静态切片方法,通过对单过程程序进行结构解析构建其程序依赖图,并利用程序执行的路径频率对依赖关系的强弱进行精确评估,最后按照给定的切片准则,利用精确的依赖关系迭代计算静态切片,切片中包含所有与切片准则相关的代码,及其相关程度。本发明方法利用程序路径的执行频率信息获得加权静态切片,以提供更准确的切片结果,降低基于静态切片的程序分析和测试技术的应用成本。本发明还公开了一种基于路径执行频率的单过程程序静态切片系统。
Description
技术领域
本发明涉及一种单过程程序静态切片技术,属于软件工程中的切片技术领域。
背景技术
程序切片技术(Program Slicing)是对程序进行分析和分解的重要技术手段之一。它一般通过分析程序内部的代码和变量依赖关系,构建程序的依赖关系图;进而在具体切片需求发生时,按照所指定的切片准则在程序中的位置,按照依赖关系图计算与切片准则相关的所有代码。计算的结果称为“切片(Slice)”,通过过滤程序中与切片准则无关的内容,减少分析范围,降低理解难度,提高使用效率。
目前的切片技术普遍采用的策略是把切片作为一个程序代码的集合,其中包含的代码均视为与切片准则相关,而忽略其相关程度的差异。
发明内容
本发明所要解决的技术问题是:针对背景技术的缺陷,提供一种基于路径执行频率的单过程程序静态切片方法,利用程序路径的执行频率信息来自动计算程序依赖图中依赖关系的权重,能够生成加权依赖图并计算加权静态切片,指示切片的代码集合中各个元素与切片准则的相关程度差异。
本发明为解决上述技术问题采用以下技术方案:
一种基于路径执行频率的单过程程序静态切片方法,其特征在于,通过路径频率对程序内部的依赖关系进行加权,以区分依赖关系的强弱来获得静态切片;该方法包括如下步骤:
步骤1)、通过静态分析程序源码获知单过程程序P中每个节点Ni,及Ni的定义变量集合{di}、使用变量集合{ui};
步骤2)、采用静态程序分析技术从程序P的内部结构中分析依赖关系,构建程序依赖图;
步骤3)、通过反复多次执行程序P,获得各条执行路径pathi及其频率freqi,其中pathi由节点的序列所构成,freqi是路径pathi的执行次数在所有执行次数中的占比;
步骤4)、通过各条执行路径pathi及其频率freqi对程序依赖图进行优化,获得依赖关系加权后的加权依赖图,依赖关系权重计算方法为:
其中depa,b是任意的控制依赖Cdepa,b或数据依赖Ddepa,b;
步骤5)、在所述步骤4)中计算得到的加权依赖图基础上,对于给定的切片准则Nc,按照依赖关系传递的方式,迭代计算与Nc相关的节点集合{Nslice}及权重,获得加权切片slice,其中切片节点权重计算方法为:
进一步的,本发明的程序静态切片方法中,所述步骤2)中构建程序依赖图具体包含如下步骤:
201、从各个节点的执行次序中获取节点之间的控制依赖关系:Cdepa,b:Na→Nb,其中Cdep表示控制依赖关系,Cdepa,b表示节点Nb控制依赖于Na;
202、从各个节点的定义和使用变量中分析数据依赖关系:Ddepa,b:Na→xNb,其中Ddep表示数据依赖关系,Ddepa,b表示节点Nb所使用的变量ux数据依赖于Na所定义的变量dx;
203、综合节点、控制依赖和数据依赖关系,构建程序依赖图,图中的节点是程序的入口、分支和语句组成元素,依赖图的有向边为控制或数据依赖关系。
进一步的,本发明的程序静态切片方法中,步骤4)中加权依赖图计算过程如下:
①输入:
程序依赖图G=<N,E>,N是G中节点的集合,E是G中边的集合;
路径剖析结果Profile={<path,freq>},该集合包含的元素是由执行路径path和该路径的执行频率freq所组成的二元组;
②处理过程:
a.对E中每条边ei=<srci,tagi>,即该边从节点srci指向节点tagi,将其权值设置为w(ei)=0;
b.对于Profile中的每条路径pathj,如果pathj中tagi先于srci出现,那么将pathj的执行频率freqj累加到ei的权值之中w(ei)+=freqj;
c.重复步骤b直至所有路径分析完毕,构建与ei对应的加权边ei’=<srci,tagi,w(ei)>;
d.重复步骤a-c,直至E中所有元素分析完毕;
③输出:
加权依赖图G’=<N,E’>,图G’的节点与G相同,E’中的每条边由E中对应的边加权所得。
进一步的,本发明的程序静态切片方法中,步骤5)中加权切片计算过程如下:
①输入:
加权依赖图G’=<N,E’>;
切片准则Nsc,Nsc是节点集合N中的元素;
②处理过程:
A、初始化加权切片初始化当前切片计算位置集合将Nsc加入slice_seed,并将其权值设置为w(Nsc)=1;
B、对于slice_seed中每个元素Ni,从E’中检索Ni的所有入边ej=<srcj,Ni>,如果w(ej)>0,那么:
2.1如果srcj不包含于slice_seed之中且不包含于slice之中,那么将srcj加入slice_seed,并将srcj权值设置为w(srcj)=w(ej)*w(Ni);
2.2如果srcj包含于slice_seed之中或包含于slice之中,则将srcj权值更新为w(srcj)+=w(ej)*w(Ni);
2.3重复2.1和2.2步,直至Ni的所有入边计算完毕;
2.4将Ni加入slice,并从slice_seed中删去Ni;
C、重复步骤B,直至slice_seed中没有元素为止;
③输出:
加权切片slice。
本发明还提出一种基于路径执行频率的单过程程序静态切片系统,包括:
静态程序分析组件,通过分析目标程序的源码,获取相关的控制流信息和数据流信息,进而通过分析控制流信息和数据流信息得出程序依赖图;
依赖强弱分析组件,基于程序执行过程中的路径频率信息对依赖关系进行加权,将程序依赖图转化为加权依赖图;
加权切片组件,在加权依赖图的基础上,针对程序中的切片准则,迭代计算与切片准则相关的代码及相关性权重,最终得到静态的加权切片。
作为上述切片系统进一步的优化方案,静态程序分析组件进一步包括:
源码分析单元,用于通过静态分析程序源码获知单过程程序P中每个节点,及节点的定义变量集合、使用变量集合;
控制依赖关系获取单元,用于从各个节点的执行次序中获取节点之间的控制依赖关系;
数据依赖关系分析单元,用于从各个节点的定义和使用变量中分析数据依赖关系;
程序依赖图构建单元,用于综合节点、控制依赖和数据依赖关系,构建程序依赖图,图中的节点是程序的入口、分支和语句组成元素,依赖图的有向边为控制或数据依赖关系。
作为上述切片系统进一步的优化方案,依赖强弱分析组件进一步包括:
输入单元,其被配置以输入:程序依赖图G=<N,E>,N是G中节点的集合,E是G中边的集合;以及路径剖析结果Profile={<path,freq>},该集合包含的元素是由执行路径path和该路径的执行频率freq所组成的二元组;
加权处理单元,其被配置以执行以下步骤:
a.对E中每条边ei=<srci,tagi>,即该边从节点srci指向节点tagi,将其权值设置为w(ei)=0;
b.对于Profile中的每条路径pathj,如果pathj中tagi先于srci出现,那么将pathj的执行频率freqj累加到ei的权值之中w(ei)+=freqj;
c.重复步骤b直至所有路径分析完毕,构建与ei对应的加权边ei’=<srci,tagi,w(ei)>;
d.重复步骤a-c,直至E中所有元素分析完毕;
输出单元,其被配置以输出:加权依赖图G’=<N,E’>,图G’的节点与G相同,E’中的每条边由E中对应的边加权所得。
作为上述切片系统进一步的优化方案,加权切片组件进一步包括:
输入模块,其被配置以输入:加权依赖图G’=<N,E’>,以及切片准则Nsc,其中Nsc是节点集合N中的元素;
处理模块,其被配置以执行以下步骤:
A、初始化加权切片初始化当前切片计算位置集合将Nsc加入slice_seed,并将其权值设置为w(Nsc)=1;
B、对于slice_seed中每个元素Ni,从E’中检索Ni的所有入边ej=<srcj,Ni>,如果w(ej)>0,那么:
2.1如果srcj不包含于slice_seed之中且不包含于slice之中,那么将srcj加入slice_seed,并将srcj权值设置为w(srcj)=w(ej)*w(Ni);
2.2如果srcj包含于slice_seed之中或包含于slice之中,则将srcj权值更新为w(srcj)+=w(ej)*w(Ni);
2.3重复2.1和2.2步,直至Ni的所有入边计算完毕;
2.4将Ni加入slice,并从slice_seed中删去Ni;
C、重复步骤B,直至slice_seed中没有元素为止;
输出模块,其被配置以输出:加权切片slice。
本发明通过结合程序路径的执行频率信息获得加权静态切片,与现有静态切片技术相比,具有以下技术效果:
(1)信息分析更全面。结构维度和功能维度分别刻画了程序的静态和动态意义。原有的静态切片技术仅从结构出发的静态程序分析技术能够提供更加保守、安全的分析结果,但是精度较低。本发明结合动态执行信息能够提供更加精确的结果。
(2)程序依赖图更完整。程序依赖图包含程序内部各个代码之间的依赖关系的位置、方向和类型,是对于程序进行切片的基础模型。现有方法构建的程序依赖图仅明确代码之间是否存在依赖,而忽略实际中依赖的强弱。本发明通过路径频率对依赖关系进行加权,权重可以评估依赖关系在程序实际执行过程中是否常见。补充了权重信息后,程序依赖图中的内容更加丰富,模型更完整。
(3)结果更精确。现有方法一般以切片准则为起点、通过迭代传递依赖关系扩充的方式进行静态切片的计算。本发明在迭代传递依赖关系的过程中,利用加权依赖图中的依赖关系权重,对切片中代码与切片准则的联系强弱进行定量分析,最终得到加权切片。在调试、测试和度量等切片应用领域中,切片中各个元素的权重可以对处理优先程序进行排序,提高效率。
附图说明
图1为本发明方法的流程图。
图2是本发明的加权依赖图,用于说明对依赖关系权重的计算方式。
图3是本发明的加权切片图,用于说明切片及其中代码权重的计算方式。
图4是本发明的实施例构建的程序依赖图。
具体实施方式
下面结合附图对本发明的技术方案做进一步的详细说明:
在具体使用中,往往程序中各个部分的依赖关系通过传递运算而增强或减弱。量化切片内部的代码相关程度能够指示处理的优先级别,进一步提升实用性。本发明考虑基于程序的实际执行路径对依赖图中的依赖关系进行加权,进而改进静态切片算法,在传递依赖、计算切片的过程中引入依赖传递运算,最终得到加权切片。
一、体系结构
图1给出了基于路径执行频率的单过程程序静态切片技术设计体系结构。下面给出几个主要部分的功能说明。
1、静态程序分析组件
本组件的功能为:通过分析目标程序的源码,获取相关的控制流信息和数据流信息,进而通过分析控制流信息和数据流信息得出程序依赖图。
目前切片技术领域中普遍采用基于控制流图的最小生成树算法构建控制依赖关系,基于变量的定义-使用路径构建数据依赖关系,可以完成构建程序依赖图的工作。程序依赖图的内容可以表示为G=<N,E>,其中E∈N×N,N是代码节点的集合,E是从某一代码指向其他代码的有向边的集合,由控制依赖边和数据依赖边组成(当两个语句之间存在多个变量导致的同方向多重数据依赖时,仅使用一条数据依赖边进行表示)。
2、依赖强弱分析组件
本组件的主要功能是基于程序执行过程中的路径频率信息对依赖关系进行加权,将程序依赖图转化为加权依赖图,为进一步获取加权切片做准备。
加权依赖图的内容可以表示为G’=<N,E’>,其中E’∈N×N×Q+,Q+表示非负有理数集合。程序依赖图转换为加权依赖图后,原有的节点集合N不变,边的位置和方向不变,每条边增加了一个非负有理数的权值。该权值通过程序的路径频率得出。
参考图2所示,加权依赖图计算过程如下:
输入:
1.程序依赖图G=<N,E>,N是G中节点的集合,E是G中边的集合;
2.路径剖析结果Profile={<path,freq>},该集合包含的元素是由执行路径path和该路径的执行频率freq所组成的二元组。
处理过程:
1.对E中每条边ei=<srci,tagi>(该边从节点srci指向节点tagi),将其权值设置为w(ei)=0;
2.对于Profile中的每条路径pathj,如果pathj中tagi先于srci出现,那么将pathj的执行频率freqj累加到ei的权值之中w(ei)+=freqj;
3.重复第2步至所有路径分析完毕,构建与ei对应的加权边ei’=<srci,tagi,w(ei)>;
4.重复第1-3步至E中所有元素分析完毕。
输出:
加权依赖图G’=<N,E’>,图G’的节点与G相同,E’中的每条边由E中对应的边加权所得。
3、加权切片组件
本组件的主要功能是基于加权依赖图计算加权切片。在加权依赖图的基础上,针对程序中的切片准则(slice criterion),迭代计算与切片准则相关的代码及相关性权重,最终得到静态的加权切片。参考图3所示,加权切片计算过程如下
输入:
1.加权依赖图G’=<N,E’>;
2.切片准则Nsc,Nsc是节点集合N中的元素;
处理过程:
1.初始化加权切片初始化当前切片计算位置集合将Nsc加入slice_seed,并将其权值设置为w(Nsc)=1;
2.对于slice_seed中每个元素Ni,从E’中检索Ni的所有入边ej=<srcj,Ni>,如果w(ej)>0,那么:
2.1如果srcj不包含于slice_seed之中且不包含于slice之中,那么将srcj加入slice_seed,并将srcj权值设置为w(srcj)=w(ej)*w(Ni);
2.2如果srcj包含于slice_seed之中或包含于slice之中,并将srcj权值更新为w(srcj)+=w(ej)*w(Ni);
2.3重复2.1和2.2步,直至Ni的所有入边计算完毕;
2.4将Ni加入slice,并从slice_seed中删去Ni;
3.重复第2步,直至slice_seed中没有元素为止。
输出:加权切片slice。
二、具体实施过程:
本发明方法利用程序路径的执行频率信息来自动计算程序依赖图中依赖关系的权重,生成加权依赖图并计算加权静态切片,具体过程为:
第一步,通过静态分析程序源码获知单过程程序P中每个节点Ni,及Ni的定义变量集合{di}、使用变量集合{ui}。节点由P中的代码所生成,每个节点均对应程序中的一个代码行或者一条语句。特别的,如果一个代码行中存在两条或多条语句,那么需要有两个或多个节点与该代码行对应;如果一个代码行中没有语句且在不具有分辨执行过程的意义,那么不需要有节点与该代码行对应。
第二步,采用现有的静态程序分析技术从程序P的内部结构中分析依赖关系,构建程序依赖图。采用的方法是切片领域中广泛使用的经典技术,由Jeanne Ferrante等人于1987年在论文《The Program Dependence Graph and Its Use In Optimization》中提出。
第三步,通过生成程序输入,反复多次执行程序P,获得P的路径执行频率。具体做法是记录每次P执行的路径pathi,然后在所有路径执行完毕后,通过比对相同路径来统计每条路径执行的次数,最终计算每条路径执行次数在总执行次数中的占比作为各个路径的执行频率freqi。目前Whole Program Paths、ProfilingAll Paths等方法可以完成这一工作。
第四步,通过各条执行路径pathi及其频率freqi对程序依赖图进行优化,按照本发明中的加权依赖图计算过程获得加权依赖图。
第五步,在加权依赖图基础上,对于给定的切片准则,按照本发明中的加权切片计 算过程获得加权切片。
三、实施例
为了方便描述,假定有如下简化的应用实例:目标程序源码如下所示,共有11行代码。
根据前面提到的计算步骤,依次实施:
第一步,通过静态分析程序源码获知单过程程序中每个节点及节点的定义和使用变量。结果如表1所示。
表1.目标程序的代码节点和变量定义和使用情况
节点 | 对应代码行 | 定义变量 | 使用变量 |
N0 | 0 | nPosX,nPosY | |
N1 | 1 | nPosX | |
N2 | 2 | nSum | nPosX,nPosY |
N3 | 3 | nSum | |
N4 | 4 | nPosX | |
N5 | 5 | nPosY | |
N6 | 6 | nSum | |
N7 | 7 | nPosX | |
N8 | 8 | nPosX | |
N9 | 9 | ||
N10 | 10 |
第二步,通过静态分析程序源码获知程序依赖图。相应的程序依赖关系如表2所示,构建的程序依赖图如图4所示。程序中标为0~10的行分别对应图中的节点N0~N10(其中N0是参数入口节点,N1、N3和N6是判定节点,N9和N10是空节点(没有对应任何可执行实体),N2、N4、N5、N7和N8为语句节点)。
表2.目标程序的控制依赖和数据依赖关系
第三步,通过反复多次执行目标程序,获得各条执行路径pathi及其频率freqi。随机生成不大于5的随机数作为nPosX和nPosY的值,反复执行程序10000次,得到的执行路径和频率统计如表3所示。
表3.目标程序的执行路径频率
路径 | 频率 |
path1:0-1-2-3-4-5-9-1-2-3-4-5-9-1-2-3-4-5-9-1-2-8-9-10 | freq1:0.0779 |
path2:0-1-2-3-4-5-9-1-2-3-4-5-9-1-2-8-9-10 | freq2:0.1592 |
path3:0-1-2-3-4-5-9-1-2-3-4-5-9-1-2-3-4-5-9-10 | freq3:0.0829 |
path4:0-1-2-8-9-10 | freq4:0.0389 |
path5:0-1-2-3-4-5-9-1-2-3-4-5-9-10 | freq5:0.1202 |
path6:0-1-2-3-4-5-9-1-2-8-9-10 | freq6:0.1175 |
path7:0-1-2-3-4-5-9-10 | freq7:0.1577 |
path8:0-1-2-3-4-5-9-1-2-3-4-5-9-1-2-3-4-5-9-1-2-3-4-5-9-10 | freq8:0.0407 |
path9:0-10 | freq9:0.205 |
第四步,通过各条执行路径pathi及其频率freqi对程序依赖图进行优化,获得图中依赖关系加权后的加权依赖图。如对于控制依赖关系Cdep0,1,所有九条路径中均出现节点0在节点1之前执行的情况,所以Cdep0,1的权重为1;而对于数据依赖关系Ddep5,2,有六条路径path1、path2、path3、path5、path6和path8中出现节点5在节点2之前执行的情况,所以Ddep5,2的权重为这六条路径频率的累加。所有依赖关系的权重如表2所示。
第五步,在加权依赖图基础上,给定的切片准则Nc=N5,按照加权切片算法计算加权切片{<Nx,wx>}。具体计算过程为:
1.N5加入切片,且其权重w(N5)=1;
2.加权依赖图中指N5的依赖关系只有Cdep3,5,将N3加入切片,且其权重:
w(N3)=w(N5)*w(Cdep3,5)=0.7561;
3.加权依赖图中指N3的依赖关系有Cdep1,3和Ddep2,3,将N1和N2加入切片,且其权重:
w(N1)=w(N3)*w(Cdep1,3)=0.5717,
w(N2)=w(N3)*w(Ddep2,3)=0.5717;
4.加权依赖图中指N1和N2的(权重非0)依赖关系有Cdep0,1、Ddep0,1、Ddep4,1、Ddep4,2、Ddep0,2和Cdep1,2,将N0和N4加入切片,且其权重:
w(N0)=w(N1)*w(Cdep0,1)+w(N1)*w(Ddep0,1)+w(N2)*w(Ddep0,2)=1.7151,
w(N4)=w(N1)*w(Ddep4,1)+w(N2)*w(Ddep4,2)=0.6842
N1已在切片中,更新N1权重:
w(N1)=0.5717+w(N2)*w(Cdep1,2)=1.0262;
5.加权依赖图中指N0和N4的(权重非0)依赖关系有Cdep3,4,N3已在切片中,更新N3权重:
w(N3)=0.7561+w(N4)*w(Cdep3,4)=1.2734;
至此,没有新的节点加入切片,计算完毕。整个过程如表4所示:
表4.以N5为准则的加权切片计算过程
N0 | N1 | N2 | N3 | N4 | N5 | |
1. | 1 | |||||
2. | 0.7561 | 1 | ||||
3. | 0.5717 | 0.5717 | 0.7561 | 1 | ||
4. | 1.7151 | 1.0262 | 0.5717 | 0.7561 | 0.6842 | 1 |
5. | 1.7151 | 1.0262 | 0.5717 | 1.2734 | 0.6842 | 1 |
最终加权切片结果为:
slice(N5)={<N0,1.7151>,<N1,1.0262>,<N2,0.5717>,<N3,1.2734>,<N4,0.6842>,<N5,1>}。
四、应用举例
本发明方法主要是利用程序路径的执行频率信息获得加权静态切片,以提供更准确的切片结果,降低基于静态切片的程序分析和测试技术的应用成本。在软件工程的多个方面可以获得应用,优化现有技术的效果或结果。举例如下:
1.基于静态切片的程序调试技术。静态切片是从依赖关系的视角对程序的内部结构进行分解的一项技术。以程序故障位置为切片准则,进行切片计算,可以帮助相关人员快速排除不相关的程序部分,减少人工分析范围,提高效率和准确度。本发明方法给出了加权切片结果,与传统静态切片相比,切片内部的权重能够更好地指示各个元素与切片准则的关联紧密程度,指示人工分析的优先顺序,进一步提高调试的效率和准确度。
2.基于静态切片的耦合度量技术。耦合度量是对于软件内部各个模块之间的联系紧密程度进行定量分析,高度的耦合能够有效揭示软件设计不良、难以维护等问题。基于切片进行的耦合度量一般采用切片的大小和范围进行计算,由于未能考虑切片内部联系紧密程度的差异,这种耦合计算过程比较粗糙,具有较高的失准风险。本发明方法给出的加权切片弥补了这一缺点,有助于优化耦合度量结果,提高检测可信度。
3.基于静态切片的程序理解技术。程序理解技术是在缺少文档说明的情况下、对于遗产系统或维护不当的系统进行功能、结构等方面的理解,以实现系统维护和软件复用等需求。由于静态切片能够指示系统内部的依赖结构,可以用于对某个系统模块进行理解时,定位该模块和系统其它部分的联系,辅助理解过程。由于传统静态切片没有对这种模块之间的联系进行量化,不能指示模块之间各种联系的紧密程度和关键与否。本发明方法给出的加权切片可以在辅助程序理解的过程提示紧密、关键的模块间联系,能够帮助相关人员从主要侧面入手,提高理解效率。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种基于路径执行频率的单过程程序静态切片方法,其特征在于,通过路径频率对程序内部的依赖关系进行加权,以区分依赖关系的强弱来获得静态切片;该方法包括如下步骤:
步骤1)、通过静态分析程序源码获知单过程程序P中每个节点Ni,及Ni的定义变量集合{di}、使用变量集合{ui};
步骤2)、采用静态程序分析技术从程序P的内部结构中分析依赖关系,构建程序依赖图;
步骤3)、通过反复多次执行程序P,获得各条执行路径pathi及其频率freqi,其中pathi由节点的序列所构成,freqi是路径pathi的执行次数在所有执行次数中的占比;
步骤4)、通过各条执行路径pathi及其频率freqi对程序依赖图进行优化,获得依赖关系加权后的加权依赖图,依赖关系权重计算方法为:
其中depa,b是任意的控制依赖Cdepa,b或数据依赖Ddepa,b;
步骤5)、在所述步骤4)中计算得到的加权依赖图基础上,对于给定的切片准则Nc,按照依赖关系传递的方式,迭代计算与Nc相关的节点集合{Nslice}及权重,获得加权切片slice,其中切片节点权重计算方法为:
2.根据权利要求1所述的基于路径执行频率的单过程程序静态切片方法,其特征在于,所述步骤2)中构建程序依赖图具体包含如下步骤:
201、从各个节点的执行次序中获取节点之间的控制依赖关系:Cdepa,b:Na→Nb,其中Cdep表示控制依赖关系,Cdepa,b表示节点Nb控制依赖于Na;
202、从各个节点的定义和使用变量中分析数据依赖关系:Ddepa,b:Na→xNb,其中Ddep表示数据依赖关系,Ddepa,b表示节点Nb所使用的变量ux数据依赖于Na所定义的变量dx;
203、综合节点、控制依赖和数据依赖关系,构建程序依赖图,图中的节点是程序的入口、分支和语句组成元素,依赖图的有向边为控制或数据依赖关系。
3.根据权利要求1所述的基于路径执行频率的单过程程序静态切片方法,其特征在于,步骤4)中加权依赖图计算过程如下:
①输入:
程序依赖图G=<N,E>,N是G中节点的集合,E是G中边的集合;
路径剖析结果Profile={<path,freq>},该集合包含的元素是由执行路径path和该路径的执行频率freq所组成的二元组;
②处理过程:
a.对E中每条边ei=<srci,tagi>,即该边从节点srci指向节点tagi,将其权值设置为w(ei)=0;
b.对于Profile中的每条路径pathj,如果pathj中tagi先于srci出现,那么将pathj的执行频率freqj累加到ei的权值之中w(ei)+=freqj;
c.重复步骤b直至所有路径分析完毕,构建与ei对应的加权边ei’=<srci,tagi,w(ei)>;
d.重复步骤a-c,直至E中所有元素分析完毕;
③输出:
加权依赖图G’=<N,E’>,图G’的节点与G相同,E’中的每条边由E中对应的边加权所得。
4.根据权利要求3所述的基于路径执行频率的单过程程序静态切片方法,其特征在于,步骤5)中加权切片计算过程如下:
①输入:
加权依赖图G’=<N,E’>;
切片准则Nsc,Nsc是节点集合N中的元素;
②处理过程:
A、初始化加权切片初始化当前切片计算位置集合将Nsc加入slice_seed,并将其权值设置为w(Nsc)=1;
B、对于slice_seed中每个元素Ni,从E’中检索Ni的所有入边ej=<srcj,Ni>,如果w(ej)>0,那么:
2.1如果srcj不包含于slice_seed之中且不包含于slice之中,那么将srcj加入slice_seed,并将srcj权值设置为w(srcj)=w(ej)*w(Ni);
2.2如果srcj包含于slice_seed之中或包含于slice之中,则将srcj权值更新为w(srcj)+=w(ej)*w(Ni);
2.3重复2.1和2.2步,直至Ni的所有入边计算完毕;
2.4将Ni加入slice,并从slice_seed中删去Ni;
C、重复步骤B,直至slice_seed中没有元素为止;
③输出:
加权切片slice。
5.一种基于路径执行频率的单过程程序静态切片系统,其特征在于,包括:
静态程序分析组件,通过分析目标程序的源码,获取相关的控制流信息和数据流信息,进而通过分析控制流信息和数据流信息得出程序依赖图;
依赖强弱分析组件,基于程序执行过程中的路径频率信息对依赖关系进行加权,将程序依赖图转化为加权依赖图;
加权切片组件,在加权依赖图的基础上,针对程序中的切片准则,迭代计算与切片准则相关的代码及相关性权重,最终得到静态的加权切片。
6.根据权利要求5所述的一种基于路径执行频率的单过程程序静态切片系统,其特征在于,静态程序分析组件进一步包括:
源码分析单元,用于通过静态分析程序源码获知单过程程序P中每个节点,及节点的定义变量集合、使用变量集合;
控制依赖关系获取单元,用于从各个节点的执行次序中获取节点之间的控制依赖关系;
数据依赖关系分析单元,用于从各个节点的定义和使用变量中分析数据依赖关系;
程序依赖图构建单元,用于综合节点、控制依赖和数据依赖关系,构建程序依赖图,图中的节点是程序的入口、分支和语句组成元素,依赖图的有向边为控制或数据依赖关系。
7.根据权利要求5所述的一种基于路径执行频率的单过程程序静态切片系统,其特征在于,依赖强弱分析组件进一步包括:
输入单元,其被配置以输入:程序依赖图G=<N,E>,N是G中节点的集合,E是G中边的集合;以及路径剖析结果Profile={<path,freq>},该集合包含的元素是由执行路径path和该路径的执行频率freq所组成的二元组;
加权处理单元,其被配置以执行以下步骤:
a.对E中每条边ei=<srci,tagi>,即该边从节点srci指向节点tagi,将其权值设置为w(ei)=0;
b.对于Profile中的每条路径pathj,如果pathj中tagi先于srci出现,那么将pathj的执行频率freqj累加到ei的权值之中w(ei)+=freqj;
c.重复步骤b直至所有路径分析完毕,构建与ei对应的加权边ei’=<srci,tagi,w(ei)>;
d.重复步骤a-c,直至E中所有元素分析完毕;
输出单元,其被配置以输出:加权依赖图G’=<N,E’>,图G’的节点与G相同,E’中的每条边由E中对应的边加权所得。
8.根据权利要求7所述的一种基于路径执行频率的单过程程序静态切片系统,其特征在于,加权切片组件进一步包括:
输入模块,其被配置以输入:加权依赖图G’=<N,E’>,以及切片准则Nsc,其中Nsc是节点集合N中的元素;
处理模块,其被配置以执行以下步骤:
A、初始化加权切片初始化当前切片计算位置集合将Nsc加入slice_seed,并将其权值设置为w(Nsc)=1;
B、对于slice_seed中每个元素Ni,从E’中检索Ni的所有入边ej=<srcj,Ni>,如果w(ej)>0,那么:
2.1如果srcj不包含于slice_seed之中且不包含于slice之中,那么将srcj加入slice_seed,并将srcj权值设置为w(srcj)=w(ej)*w(Ni);
2.2如果srcj包含于slice_seed之中或包含于slice之中,则将srcj权值更新为w(srcj)+=w(ej)*w(Ni);
2.3重复2.1和2.2步,直至Ni的所有入边计算完毕;
2.4将Ni加入slice,并从slice_seed中删去Ni;
C、重复步骤B,直至slice_seed中没有元素为止;
输出模块,其被配置以输出:加权切片slice。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711453574.4A CN108304317B (zh) | 2017-12-28 | 2017-12-28 | 一种基于路径执行频率的单过程程序静态切片方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711453574.4A CN108304317B (zh) | 2017-12-28 | 2017-12-28 | 一种基于路径执行频率的单过程程序静态切片方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108304317A true CN108304317A (zh) | 2018-07-20 |
CN108304317B CN108304317B (zh) | 2021-01-05 |
Family
ID=62867947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711453574.4A Active CN108304317B (zh) | 2017-12-28 | 2017-12-28 | 一种基于路径执行频率的单过程程序静态切片方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108304317B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109815153A (zh) * | 2019-02-19 | 2019-05-28 | 北京天诚同创电气有限公司 | Plc程序及电机启停控制程序的静态切片方法和装置 |
CN109977005A (zh) * | 2019-02-13 | 2019-07-05 | 网易(杭州)网络有限公司 | 端到端测试方法、介质、装置和计算设备 |
CN110795327A (zh) * | 2018-08-01 | 2020-02-14 | 中国矿业大学 | 一种基于加权依赖图的并发程序执行轨迹静态简化方法 |
CN111552843A (zh) * | 2020-04-23 | 2020-08-18 | 中国电子科技集团公司第五十四研究所 | 一种基于加权因果依赖图的故障预测方法 |
CN112800425A (zh) * | 2021-02-03 | 2021-05-14 | 南京大学 | 一种基于图计算的代码分析的方法和装置 |
CN114648409A (zh) * | 2020-12-18 | 2022-06-21 | 北京天德科技有限公司 | 一种区块链交易建块方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102789420A (zh) * | 2012-07-24 | 2012-11-21 | 中国矿业大学 | 基于程序执行轨迹的动态切片系统 |
US20150363305A1 (en) * | 2013-10-14 | 2015-12-17 | Xi'an Jiaotong University | Method for test case reduction based on program behavior slices |
-
2017
- 2017-12-28 CN CN201711453574.4A patent/CN108304317B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102789420A (zh) * | 2012-07-24 | 2012-11-21 | 中国矿业大学 | 基于程序执行轨迹的动态切片系统 |
US20150363305A1 (en) * | 2013-10-14 | 2015-12-17 | Xi'an Jiaotong University | Method for test case reduction based on program behavior slices |
Non-Patent Citations (2)
Title |
---|
XI GUO: "Path Sensitive Analysis based on Dataflow Information and Program Slicing", 《2014 IEEE WORKSHOP ON ADVANCED RESEARCH AND TECHNOLOGY IN INDUSTRY APPLICATIONS (WARTIA)》 * |
王璐璐: "过程间循环路径剖析方法", 《计算机学报》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110795327A (zh) * | 2018-08-01 | 2020-02-14 | 中国矿业大学 | 一种基于加权依赖图的并发程序执行轨迹静态简化方法 |
CN110795327B (zh) * | 2018-08-01 | 2021-07-30 | 中国矿业大学 | 一种基于加权依赖图的并发程序执行轨迹静态简化方法 |
CN109977005A (zh) * | 2019-02-13 | 2019-07-05 | 网易(杭州)网络有限公司 | 端到端测试方法、介质、装置和计算设备 |
CN109815153A (zh) * | 2019-02-19 | 2019-05-28 | 北京天诚同创电气有限公司 | Plc程序及电机启停控制程序的静态切片方法和装置 |
CN109815153B (zh) * | 2019-02-19 | 2024-01-26 | 北京天诚同创电气有限公司 | Plc程序及电机启停控制程序的静态切片方法和装置 |
CN111552843A (zh) * | 2020-04-23 | 2020-08-18 | 中国电子科技集团公司第五十四研究所 | 一种基于加权因果依赖图的故障预测方法 |
CN111552843B (zh) * | 2020-04-23 | 2023-03-31 | 中国电子科技集团公司第五十四研究所 | 一种基于加权因果依赖图的故障预测方法 |
CN114648409A (zh) * | 2020-12-18 | 2022-06-21 | 北京天德科技有限公司 | 一种区块链交易建块方法 |
CN112800425A (zh) * | 2021-02-03 | 2021-05-14 | 南京大学 | 一种基于图计算的代码分析的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108304317B (zh) | 2021-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108304317A (zh) | 一种基于路径执行频率的单过程程序静态切片方法及系统 | |
Ter Braak et al. | A theory of gradient analysis | |
Zapata-Cuartas et al. | Probability distribution of allometric coefficients and Bayesian estimation of aboveground tree biomass | |
Whittaker | Structural equation modeling | |
CN105183714A (zh) | 句子相似度计算方法及装置 | |
CN101231614A (zh) | 一种基于执行轨迹块相似度的软件缺陷定位方法 | |
CN102750223B (zh) | 一种基于面向对象程序切片谱的错误定位方法 | |
CN103995780B (zh) | 一种基于语句频度统计的程序错误定位方法 | |
CN111581086B (zh) | 一种基于RankNet的混合软件错误定位方法及系统 | |
CN109459399A (zh) | 一种光谱水质cod、浊度检测方法 | |
CN103197183A (zh) | 一种修正电磁干扰分离中独立分量分析法不确定度的方法 | |
CN104572474A (zh) | 一种基于动态切片的轻量级错误定位技术实现方法 | |
CN103678123A (zh) | 一种适用于处理器系统单粒子软错误脆弱点识别方法 | |
CN110232130A (zh) | 元数据管理谱系生成方法、装置、计算机设备和存储介质 | |
CN116149992B (zh) | 航空机载软件安全性分析规则的关联推送方法及其系统 | |
CN106198433A (zh) | 基于lm‑ga算法的红外光谱定性分析方法 | |
CN106383984A (zh) | 基于mmtd的大数据数据质量有效性评价方法 | |
CN109739746A (zh) | 一种基于原语句占优分析的变异测试方法 | |
CN110489602A (zh) | 知识点能力值预估方法、系统、设备及介质 | |
CN106909508A (zh) | 一种信息系统运行测试方法及系统 | |
Zhao et al. | Bug localization with semantic guidance using pseudo-Siamese network | |
CN101840372A (zh) | 应用符号分析的软件测试方法 | |
Olszewska et al. | Specification metrics for Event-B developments | |
Yucel et al. | Imputation of categorical variables using Gaussian-based routines | |
Agostinelli et al. | Robust estimation of the generalized loggamma model. The R Package robustloggamma |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |