基于idUCf五元结构的过程间静态切片提取方法【专利说明】[0001]
技术领域:
[0002]本发明涉及计算机程序分析领域,特别涉及一种基于idUCf五元结构的过程间静态切片提取方法。【
背景技术:
】[0003]程序切片技术是一种重要的程序分析和理解技术,广泛应用于程序调试、测试及软件维护中。其原理和方法最早出现在MarkWeiser的博士论文中,Weiser根据数据流方程的迭代解对程序切片进行了定义,并提出了基于控制流图(ControlFlowGraph,CFG)的计算过程内程序切片的算法,但此方法所消耗的时间和空间均比较多,计算所得的程序切片准确性也不是很好。K.J.Ottenstein等人引入了基于程序依赖图(ProgramDependenceGraph,TOG)的图形可达性算法,用于计算过程内切片,但此算法只能计算一个过程内的切片问题,含有多个过程但程序切片计算问题并未得到解决。后来S.Horwitz等人通过把TOG扩展为系统依赖图(SDG)以计算过程间切片,根据系统依赖图,将函数间的切片问题转化为图的可达性问题,从而解决了包含多个过程程序的切片计算问题。[0004]目前,计算程序静态切片主要使用的方法是基于依赖图的遍历算法。系统依赖图能够充分表示程序的数据依赖、控制依赖信息以及函数调用信息,但是SDG数据流分析的复杂度较高,而且,生成系统依赖图的过程中,需要计算与切片无关的数据依赖,这些不必要的计算造成了时间和空间资源的浪费,并严重影响了切片计算的效率。类似地,传统的动态切片算法使用动态依赖图,复杂性也很高,针对这一点,Gyimothy提出利用D/U表达式计算动态切片的方法,不需要使用动态依赖图,可以同时计算程序的控制依赖和数据依赖,空间开销较小。但传统的利用D/U表达式计算动态切片的方法,只考虑了直接控制依赖关系没有考虑多层嵌套的情况,而且由于未考虑函数调用的情况,只能用于过程内动态切片的计算中。【
发明内容】[0005]本发明解决的问题是现有切片计算方法占用计算机时间和空间大,切片提取效率低;为解决所述问题,本发明提供一种基于idUCf五元结构的过程间静态切片提取方法。[0006]本发明所提供的基于idUCf五元结构的过程间静态切片提取方法,包括:对程序中的静态切片按照变量的类型、静态切片的位置进行表达,建立表达式;依据对变量的赋值,在所述表达式中进行倒推式搜索;提取所述变量的值等于所述赋值的所有静态切片。[0007]进一步,本发明所提供的基于idUCf五元结构的过程间静态切片提取方法,包括:步骤一、对程序进行词法分析,生成TOKEN序列以及函数列表;步骤二、在TOKEN序列基础上,建立复合语句控制结构信息表,所述复合语句控制结构信息表记录程序中所有复合语句的开始、结束位置;步骤三、根据TOKEN序列和复合语句控制结构信息表,建立idUCf五元结构,所述idUCf五元结构是程序中定义变量、变量使用、变量控制依赖关系、函数调用关系的表达式;步骤四、利用基于idUCf五元结构的过程间静态切片算法,提取静态切片。[0008]进一步,所述步骤四,包括:步骤4-1),为所述idUCf五元结构中的变量赋值;步骤4-2),反向搜索静态切片,提取变量值等于所述赋值的所有静态切片。[0009]进一步,搜索反向静态切片包括搜索赋值语句和搜索函数调用语句。[0010]进一步,搜索赋值语句包括在静态切片中搜索等于所述赋值的变量,并提取对应的静态切片。[0011]进一步,搜索函数调用语句包括静态切片中的搜索函数调用语句,在函数调用语句与等于所述赋值的变量相关时,提取对应的静态切片。[0012]本发明提出的基于idUCf五元结构的过程间静态切片计算方法,既保留了程序的数据依赖、控制依赖以及函数调用信息,充分考虑了选择、循环结构的多层嵌套情况,又不需要使用SDG,无须计算与切片无关的数据依赖、控制依赖以及不相关函数。[0013]本发明的优点包括:本文建立了idUCf五元结构的过程间静态切片模型,主要包括以下四个部分:1.通过词法分析生成TOKEN序列以及函数列表。函数列表中记录了各个函数的函数名,函数返回值类型,参数个数,参数类型以及此函数在TOKEN序列中的位置。将程序转换为TOKEN序列,降低了程序分析的复杂度。函数列表为实现切片计算过程中函数调用的实参-形参之间的转换奠定基础。[0014]2.TOKEN序列缺少程序的结构化信息,因而不能很好的表示变量间的依赖关系,系统依赖图的复杂度较高,针对这一点,本文定义了CNT,精简了控制流关系,利用CNT,在TOKEN序列上进行分析,可根据程序切片的需要选择性计算控制流关系,避免了无关控制依赖的计算,不仅能够达到与控制流图等同的功能,充分表达控制依赖关系,还降低了时间与空间复杂度。[0015]3.影响切片点变量值的直接操作是赋值语句以及函数调用语句,因此,本文在控制语句结构列表的基础上,提出了利用赋值语句和函数调用语句生成idUCf五元结构,充分考虑了数据依赖、控制依赖以及函数调用信息。[0016]4.应用基于idUCf五元结构的过程间静态切片算法,得到过程间静态切片。【附图说明】[0017]图1为本发明实施例所提供的基于idUCf五元结构的过程间静态切片提取方法的流程示意图。[0018]实施方式下面具体实施例,进一步阐述本发明。[0019]本发明提供一种基于idUCf五元结构的过程间静态切片提取方法,静态切片是由程序中的一些语句和控制谓词组成的集合,它包含了所有可能影响兴趣变量的语句,考虑了程序中所有可能的执行路径。根据切片方向的不同,可分为前向切片和后向切片。前向切片是指所有受兴趣点变量的值影响的语句的集合;后向切片是指程序中所有能够影响兴趣点变量的值的语句的集合。本文所描述的是后向切片。[0020]本发明提供一种基于idUCf五元结构的过程间静态切片提取方法,包括:步骤一、对程序进行词法分析,生成TOKEN序列以及函数列表;步骤二、在TOKEN序列基础上,建立复合语句控制结构信息表,所述复合语句控制结构信息表记录程序中所有复合语句的开始、结束位置;复合语句控制结构信息表是记录程序P中的所有复合语句(选择、循环)的开始、结束位置等关键信息的集合,它能够精简的记录程序的所有控制依赖关系,以下简称CNT(compoundnodetable)。其结构定义如表1所不。[0021]表1【主权项】1.一种基于idUCf五元结构的过程间静态切片提取方法,其特征在于,包括:对程序中的静态切片按照变量的类型、静态切片的位置进行表达,建立表达式;依据对变量的赋值,在所述表达式中进行倒推式搜索;提取所述变量的值等于所述赋值的所有静态切片。2.依据权利要求1所述的基于idUCf?五元结构的过程间静态切片提取方法,其特征在于,包括:步骤一、对程序进行词法分析,生成TOKEN序列以及函数列表;步骤二、在TOKEN序列基础上,建立复合语句控制结构信息表,所述复合语句控制结构信息表记录程序中所有复合语句的开始、结束位置;步骤三、根据TOKEN序列和复合语句控制结构信息表,建立idUCf?五元结构,所述idUCf五元结构是程序中定义变量、变量使用、变量控制依赖关系、函数调用关系的表达式;步骤四、利用基于idUCf五元结构的过程间静态切片算法,提取静态切片。3.依据权利要求2所述的基于idUCf?五元结构的过程间静态切片提取方法,其特征在于,所述步骤四,包括:步骤4-1),为所述idUCf五元结构中的变量赋值;步骤4-2),反向搜索静态切片,提取变量值等于所述赋值的所有静态切片。4.依据权利要求3所述的基于idUCf五元结构的过程间静态切片提取方法,其特征在于,搜索反向静态切片包括搜索赋值语句和搜索函数调用语句。5.依据权利要求4所述的基于idUCf?五元结构的过程间静态切片提取方法,其特征在于,搜索赋值语句包括在静态切片中搜索等于所述赋值的变量,并提取对应的静态切片。6.依据权利要求4所述的基于idUCf五元结构的过程间静态切片提取方法,其特征在于,搜索函数调用语句包括静态切片中的搜索函数调用语句,在函数调用语句与等于所述赋值的变量相关时,提取对应的静态切片。【专利摘要】本发明公开了一种基于idUCf五元结构的过程间静态切片提取方法,包括:对程序中的静态切片按照变量的类型、静态切片的位置进行表达,建立表达式;依据对变量的赋值,在所述表达式中进行倒推式搜索;提取所述变量的值等于所述赋值的所有静态切片。通过本发明可以提高计算机空间和时间的利用率,提高切片提取效率。【IPC分类】G06F11-36【公开号】CN104699599【申请号】CN201310666216【发明人】龚丹丹,陈春萍,蒋坚鸿【申请人】上海精密计量测试研究所【公开日】2015年6月10日【申请日】2013年12月10日