基于程序执行轨迹的动态切片系统技术方案

技术编号:7996261 阅读:200 留言:0更新日期:2012-11-22 05:06
本发明专利技术涉及一种基于程序执行轨迹的动态切片系统,包括系统获得程序的执行路径信息、对Java的.class文件进行静态分析、对程序执行轨迹中每个序列的每条语句的附加变量集进行分析、对源程序中每条语句直接控制依赖结点的获取、对程序执行轨迹中每个序列的每条语句进行附加控制依赖工作及完成对Java过程内程序进行动态切片的功能。在程序切片的过程中不需要对程序进行回溯,大大提高了算法的效率,根据控制依赖关系和变量的定义引用信息提高了切片的精度。?

【技术实现步骤摘要】

本专利技术涉及一种在软件开发过程中进行程序切片的方法,尤其是不仅可以有效处理复杂大型程序,而且可以提高切片精度的基于程序执行轨迹的动态切片系统
技术介绍
随着软件规模的日益增大,传统的调试技术不能够有效的处理复杂大型程序。大型应用系统通常有数百行的代码,程序开发人员往往不能够快速的理解程序中的代码,这给程序的调试和维护工作带来了很大的困难。而程序切片是一种程序分析技术,用来将大程序分解成小片段,删除一些与兴趣点不相关的语句,帮助开发人员从中提取感兴趣的部分。其概念和原理由M. Weiser于1979年首次建立。使用程序切片技术,将简化程序分析和理解的难度,加速程序的测试和调试工作,缩短程序的开发和维护时间。 程序P中的切片准则可以表示成一个二元组〈P,V〉,其中P是程序中的一条语句,V是在η处定义或引用的变量集合。关于该切片准则的切片将包含哪些影响和控制P处变量V的值得语句。程序切片的计算可以看作一个图的可达性问题,是在系统依赖上找出可达节点。系统依赖图由一个或多个程序依赖图组成。每个过程依赖图表示一个过程内的控制依赖和数据依赖关系。在系统依赖图中,每个过程的依赖图被连接起来,这些边表示过程间的数据依赖和控制依赖。程序切片可以分为静态程序切片和动态程序切片。针对给定的切片准则,两者主要的差异在于进行切片时所需要的信息不同,静态程序切片仅需要程序的静态信息,即源程序;而动态程序切片需要根据程序的输入,记录程序的整个执行轨迹。静态程序切片考虑的是程序所有的执行情况,而动态切片仅考虑程序针对某一输入的特定执行情况。因此,动态切片包含的语句更少,结果更精确些。然而,动态程序切片需要的程序执行轨迹在获取和储存方面都受到时间和空间的限制。优化过的动态切片算法需要数分钟到几十分钟,其前期的准备时间更长,所以动态切片的算法优化是一个很重要的问题。
技术实现思路
为了克服现有的动态切片算法其效率和精度较低的问题,本专利技术提供一种基于程序执行轨迹的动态切片系统,该动态切片系统依据堆栈跟踪进行切片的方法,首先利用调试器的信息记录程序执行轨迹,找出该次执行中涉及的语句;在记录程序执行轨迹的同时计算程序的控制依赖关系得到程序切片,在程序切片的过程中不需要对程序进行回溯,大大提闻了算法的效率,根据控制依赖关系和变量的定义引用 目息提闻了切片的精度。本专利技术解决其技术问题所采用的技术方案是 本系统使用eclipse进行开发,可以对Java程序进行动态程序切片。依据程序动态执行轨迹进行程序切片需要依据以下六步进行 (O系统获得程序的执行路径信息,即Path Analysis,获取当前执行语句的信息。在得到当前执行语句的信息,对这些信息进行数据依赖分析,即DefVars or UseVarsAnalysis,得到当前执行语句的定义变量集和使用变量集。模块核心功能是获得待分析语句一次完整执行的执行序号ExecutionNum和语句行号LineNum。执行序号比较好分析,它是从I开始,并每次加I的执行序列,即I2 3 4…η,其中η表不最后执行的序号。每个执行序号对应一个语句行号,表不程序第ExecutionNum执行语句LineNum,因为分析过程内程序,不需要考虑不同的类、不同的方法。语句行号需要从虚拟机获取。在处理ThreadStartEvent时,即程序即将开始执行,设置StepRequest,虚拟机开始单步执行程序。单步执行的效果是在每条语句执行前,单步执行事件StepEvent发生,执行语句的线程被挂起,调试器获得当前的执行位置信息Location,通过其模块可以获得当前执行的行号信息。信息获取完成后,恢复挂起的线程。(2)对Java的.class文件进行静态分析,实现了对Java源文件中每条语句中定义变量集DefVars和使用变量集UseDefs的获取功能。(2a)首先,初始化Soot,完成Soot的初始设置工作。Soot是一种用于Java优化的框架,它为不同的分析目的提供了四种不同的中间表示,这里需要做的是对Soot中的Jimple这一中间表示进行分析。Jimple是一种基于类型的3地址格式语句的中间表示,是一种介于Java源代码和Java字节码的中间表示。该模块是对中间表示Jimple进行分析,获得源文件的信息,因此在初始化工作中,需要进行一些设置,如Jimple中间表不的行号为源代码中行号,Jimple中间表不的变量名为源代码中变量名。只有通过这些设置,模块才可以获得完整、准确的源代码信息,对源代码完成 DefVars or UseVars Analysis 工作。(2b)完成Soot初始化工作后,接着需要做的便是获取需要分析的类和方法。因为DynamicSlicer4j系统分析目标是Java过程内程序,因此,只需获取类中的main方法 即可。Soot会对待分析的类和方法分别建立自己的Soot类和Soot方法,即SootClass和SootMethod,并为Soot方法建立方法体SootBody,这样就可利用Soot各个类提供的方法进行分析,大大提高分析的效率。(2c)通过SootBody,模块可以获得该方法中任一语句,Jimple中间表示的Soot实例,用Unit表示。Unit保存了该语句的所有信息,模块只需从中获取需要的信息就可以了,即该语句的行号或该语句中的定义集合和使用集合,这样,模块即可实现DefVars orUseVars Analysis 功倉泛。(2d) Unit中的信息并非即得即用的,Unit保存的是Jimple中间表示的每一条语句,而源代码中往往一条语句会有多条Jimple代码,因此,如何将多条Jimple代码获得的信息集中到各自相应的Java源代码,是一个需要处理的问题。还有,模块通过调用Unit中的方法,可以轻易获取Unit中的定义集合和使用集合,模块需要的定义变量集合Def Vars和使用变量集合Use Vars就包含其中,如果把它们从中剥离出来,也是一个需要处理的问题。而且在处理获得定义变量集合Def Vars和使用变量集合Use Vars时,还需要将在Jimple中间表示中产生的不属于Java源代码的临时变量去除掉。通过步骤(2a)、(2b)、(2c)及(2d)的处理,才能获得完整的、准确的定义变量集合Def Vars和使用变量集合Use Vars,由此完成执行DefVars or UseVars Analysis功能。(3)对程序执行轨迹中每个序列的每条语句的附加变量集进行分析,该附加变量集包括 DefVars 和 UseVars。该模块对 Path Analysis 和 DefVars or UseVars Analysis两个模块的结果进行解析,分别获取必须的信息,并将这些信息按结构有规律、有顺序的组合在一起,形成可供中间分析的结果。(3a)路径变量分析Variable Types Analysis模块实现对程序执行轨迹中每个序列的每条语句的附加变量集进行DefVars和UseVars处理工作。该模块对Path Analysis和DefVars or UseVars Analysis两个模块的结果进行解析,分别获取必须的信息,并将这些信息按结构有规律、有顺序的组合在一起,形本文档来自技高网
...

【技术保护点】
基于程序执行轨迹的动态切片系统,其特征是:包括如下步骤:(1)系统获得程序的执行路径信息,即Path?Analysis,获取当前执行语句的信息;在得到当前执行语句的信息,对这些信息进行数据依赖分析,即DefVars?or?UseVars?Analysis,得到当前执行语句的定义变量集和使用变量集;(2)对Java的.class文件进行静态分析,实现了对Java源文件中每条语句中定义变量集DefVars和使用变量集UseDefs的获取功能;(3)对程序执行轨迹中每个序列的每条语句的附加变量集进行分析,该附加变量集包括DefVars和UseVars;该模块对Path?Analysis和DefVars?or?UseVars?Analysis两个模块的结果进行解析,分别获取必须的信息,并将这些信息按结构有规律、有顺序的组合在一起,形成可供中间分析的结果;(4)控制依赖分析Control?Dependence?Analysis模块是基于Soot开发的一个模块,它对java的.class文件进行静态分析,实现了对源程序中每条语句直接控制依赖结点的获取功能;(5)对程序执行轨迹中每个序列的每条语句进行附加控制依赖工作;该模块对Variable?Type?Analysis和Control?Dependence?Analysis两个模块的结果进行解析,分别获取必须的信息,并将这些信息按结构有规律、有顺序的组合在一起,形成可供切片的最终中间结果;(6)系统完成对Java过程内程序进行动态切片的功能;该模块对Intermediate?Analysis的结果进行解析,获取切片必要的信息。...

【技术特征摘要】

【专利技术属性】
技术研发人员:姜淑娟王兴亚李海洋张艳梅李威
申请(专利权)人:中国矿业大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1