当前位置: 首页 > 专利查询>刘尚国专利>正文

一种计算Java程序动态切片的方法、装置及可读存储介质制造方法及图纸

技术编号:19056649 阅读:18 留言:0更新日期:2018-09-29 12:08
本发明专利技术公开了一种计算Java程序动态切片的方法,该方法包括:对Java程序字节码插桩,跟踪Java程序方法的执行及调用,获得执行记录;根据所述执行记录建立Java动态系统依赖图,所述Java动态系统依赖图包括静态依赖图和动态依赖图;通过程序动态执行信息建立所述动态依赖图,过语法词法分析获得程序静态信息建立所述静态依赖图;采用后向遍历所述Java动态系统依赖图的切片算法获得Java程序动态切片。本申请通过跟踪程序方法的执行,利用程序动态执行信息和静态信息建立动态系统依赖图,并在动态系统依赖图上采用两步图可达性算法获得动态切片。本方法有效地提高了Java程序动态切片的效率。

【技术实现步骤摘要】
一种计算Java程序动态切片的方法、装置及可读存储介质
本专利技术涉及计算机语言
,具体涉及一种计算Java程序动态切片的方法、装置及可读存储介质。
技术介绍
Java语言的可移植、安全、健壮、简单、动态等特性使之成为目前非常流行的面向对象编程语言,随之出现了大量用Java编写的软件产品,相应地,对Java开发的大型软件系统的理解,维护,测试等工作变得尤为重要。程序切片作为一种用于分解程序的程序分析技术,极大地丰富了程序分析、程序理解、软件维护的理论基础,为软件工程的各个阶段提供理论和技术支持。由于面向对象程序的继承,封装,多态等特性,使得语句间的依赖关系复杂。构造面向对象系统依赖图的主要途径是对传统系统依赖图进行面向对象语言特性的扩充。Java语言的动态特性使Java程序更加的灵活,同时也为Java程序构造系统依赖图带来了困难。根据传入的对象类型不同,方法的调用情况也不同,具体情况只能通过程序的执行而获得,这使得构造静态系统依赖图非常复杂,从而造成切片结果的庞大、冗余。另外,Java程序中的一些动态信息只能在执行时确定,与静态切片相比,动态切片的结果会更加精确。但由于动态切片需要追踪程序的执行,其执行代价较高。在大型软件系统的动态切片计算过程中,常出现由于执行路径过长而导致需要大量的内存及时间构造动态系统依赖图。
技术实现思路
本专利技术的目的在于提供一种计算Java程序动态切片的方法、装置及可读存储介质,用以解决现有Java程序切片方法不适用于大型软件系统的问题。为实现上述目的,本专利技术的技术方案为:一种计算Java程序动态切片的方法,该方法包括以下步骤:对Java程序字节码插桩,跟踪Java程序方法的执行及调用,获得执行记录;根据所述执行记录建立Java动态系统依赖图,所述Java动态系统依赖图包括静态依赖图和动态依赖图;通过程序动态执行信息建立所述动态依赖图,过语法词法分析获得程序静态信息建立所述静态依赖图;采用后向遍历所述Java动态系统依赖图的切片算法获得Java程序动态切片。进一步的,所述对Java程序字节码插桩,跟踪Java程序方法的执行及调用,获得执行记录包括:通过Java程序字节码插桩收集方法执行路径,所述方法执行路径中包含了程序方法执行顺序信息及方法调用信息;进一步的,所述方法执行路径为建立所述Java动态系统依赖图提供以下信息:(1)类执行信息(CE):程序实际运行过程中被装载的类;(2)方法执行信息(ME):程序运行过程中被执行的方法;(3)方法调用信息(MCalI):程序执行过程中方法之问调用信息,可用于过滤静态方法依赖子图中的结点及依赖边。可选地,所述程序动态执行信息包含类执行信息,方法执行信息及方法调用信息。进一步的,所述根据所述执行记录建立Java动态系统依赖图包括:(1)提取程序静态信息通过对Java源程序的抽象语法树遍历实现,提取的信息采取树型的层次化结构保存;(2)构造动态类依赖图先建立类或接口与类之间的继承与实现关系,再建立类与成员方法、变量之间依赖关系;根据类执行信息、方法执行信息以及通过遍历Java源程序的抽象语法树获得的类静态信息建立所述动态类依赖图;(3)构造动态方法调用图根据方法调用信息构造动态方法调用图;(4)构造静态方法依赖子图根据静态信息为每个被执行的方法建立静态方法依赖子图;(5)过滤静态方法依赖子图利用方法调用中的执行信息对静态方法依赖子图进行过滤,消除静态依赖子图中冗余信息,并生成动态方法依赖子图;(6)构造方法依赖图根据动态方法调用图在调用点与被调用方法之间添加参数输入输出边及summary边生成动态方法依赖图。进一步的,所述根据所述执行记录建立Java动态系统依赖图还包括:建立方法依赖关系库,每次建立所述Java动态系统依赖图时,直接从所述方法依赖关系库中提取建立静念方法依赖子图的信息。进一步的,所述构造方法依赖图包括:将过滤后的静态方法依赖子图与方法调用图中方法调用结点一一对应生成动态方法依赖图,通过参数输入边,参数输出边,以及调用边将两个方法依赖子图中对应的结点连接起来;通过调用结点的静态信息确定调用点调用的方法,判断调用结点的调用关系是否与方法调用图中的调用关系一致;调用点的实参与被调用方法对应的形参之间添加实参到形参的参数输入边和形参到实参的参数输出边;根据实际输出参数对实际输入参数的数据依赖关系,再添加summary边。基于同一专利技术构思,本专利技术的另一方面还提供了一种计算Java程序动态切片的装置,该装置包括:程序插桩器,用于对Java字节码进行插桩操作,并执行插桩处理后的程序,获取程序的动态执行信息。执行信息提取器,用于分析收集到的程序执行信息,生成方法调用对信息和方法执行路径库。词法、语法分析器,用于通过词法和语法分析工具JavaCC分析Java源程序,生成源程序的抽象语法分析树(AST),主要是获取Java源程序的整个系统结构信息。静态信息存储库模块,用于利用JTB生成的访问器DepthFirstVisitor来遍历抽象语法树,并将相关的信息保存在自定义的类结构中。程序分析器:用于基于抽象语法树,并结合程序执行的方法调用对信息,构造动态类依赖图、动态类层次图、动态方法调用图、方法控制流图、方法控制依赖图、动态方法依赖子图、动态方法依赖图,最终构造程序的动态系统依赖图。动态类依赖图模块,用于通过分析Java源程序被执行的类,得到动态类依赖图。动态类层次图模块,用于通过分析执行类定义、数据成员定义及方法定义部分,得到Java源程序执行的父类、类、类成员、方法参数的层次关系。动态方法调用图模块,用于在调用方法与被调用方法之间建立调用依赖关系。方法控制流图模块,用于通过对Java源程序执行方法的分析,分析语句之间的控制关系,建立控制流边。方法控制依赖图模块,用于通过对Java源程序执行方法的分析,分析语句之间的控制依赖关系,建立控制依赖边。动态方法依赖子图模块,用于通过对Java源程序执行方法的分析,分析语句之间的控制、数据依赖关系,建立数据依赖边。动态方法依赖图模块,用于建立调用点和被调用方法问的数据流传递关系,及调用边,即调用点所在的方法和调用点调用的方法之问的数据依赖关系。方法依赖关系库模块,用于建立动态系统依赖图时,直接从方法依赖关系库中提取建立静态方法依赖子图的信息。切片生成器,用于根据给定的切片标准,依据动态系统依赖图,生成程序切片的中间表示。切片表示器,用于根据切片生成器产生的程序切片中间表示,用直观、简洁的方式将程序切片展现给用户。基于同一专利技术构思,本专利技术的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算Java程序动态切片程序,所述计算Java程序动态切片程序被处理器执行时实现上述的计算Java程序动态切片方法的步骤。本专利技术具有如下优点:本申请的计算Java程序动态切片的方法、装置及可读存储介质,通过跟踪程序方法的执行,利用程序动态执行信息和静态信息建立动态系统依赖图,并在动态系统依赖图上采用两步图可达性算法获得动态切片。本方法有效地提高了Java程序动态切片的效率。附图说明图1本专利技术实施例提供的一种计算Java程序动态切片的方法流程框图。图2本专利技术实施例提供的一种计算Java程本文档来自技高网...

【技术保护点】
1.一种计算Java程序动态切片的方法,其特征在于,所述方法包括以下步骤:对Java程序字节码插桩,跟踪Java程序方法的执行及调用,获得执行记录;根据所述执行记录建立Java动态系统依赖图,所述Java动态系统依赖图包括静态依赖图和动态依赖图;通过程序动态执行信息建立所述动态依赖图,过语法词法分析获得程序静态信息建立所述静态依赖图;采用后向遍历所述Java动态系统依赖图的切片算法获得Java程序动态切片。

【技术特征摘要】
1.一种计算Java程序动态切片的方法,其特征在于,所述方法包括以下步骤:对Java程序字节码插桩,跟踪Java程序方法的执行及调用,获得执行记录;根据所述执行记录建立Java动态系统依赖图,所述Java动态系统依赖图包括静态依赖图和动态依赖图;通过程序动态执行信息建立所述动态依赖图,过语法词法分析获得程序静态信息建立所述静态依赖图;采用后向遍历所述Java动态系统依赖图的切片算法获得Java程序动态切片。2.根据权利要求1所述的一种计算Java程序动态切片的方法,其特征在于,所述对Java程序字节码插桩,跟踪Java程序方法的执行及调用,获得执行记录包括:通过Java程序字节码插桩收集方法执行路径,所述方法执行路径中包含了程序方法执行顺序信息及方法调用信息。3.根据权利要求1所述的一种计算Java程序动态切片的方法,其特征在于,所述方法执行路径为建立所述Java动态系统依赖图提供以下信息:(1)类执行信息:程序实际运行过程中被装载的类;(2)方法执行信息:程序运行过程中被执行的方法;(3)方法调用信息:程序执行过程中方法之问调用信息,可用于过滤静态方法依赖子图中的结点及依赖边。生成动态方法依赖图。4.根据权利要求1所述的一种计算Java程序动态切片的方法,其特征在于,所述根据所述执行记录建立Java动态系统依赖图包括:(1)提取程序静态信息通过对Java源程序的抽象语法树遍历实现,提取的信息采取树型的层次化结构保存;(2)构造动态类依赖图先建立类或接口与类之间的继承与实现关系,再建立类与成员方法、变量之间依赖关系;根据类执行信息、方法执行信息以及通过遍历Java源程序的抽象语法树获得的类静态信息建立所述动态类依赖图;(3)构造动态方法调用图根据方法调用信息构造动态方法调用图;(4)构造静态方法依赖子图根据静态信息为每个被执行的方法建立静态方法依赖子图;(5)过滤静态方法依赖子图利用方法调用中的执行信息对静态方法依赖子图进行过滤,消除静态依赖子图中冗余信息,并生成动态方法依赖子图;(6)构造方法依赖图根据动态方法调用图在调用点与被调用方法之间添加参数输入输出边及summary边生成动态方法依赖图。5.根据权利要求4所述的一种计算Java程序动态切片的方法,其特征在于,所述根据所述执行记录建立Java动态系统依赖图还包括:建立方法依赖关系库,每次建立所述Java动态系统依赖图时,直接从所述方法依赖关系库中提取建立静念方法依赖子图的信息。6.根据权利要求4所述的一种计算Java程序动态切片的方法,其特征在于,所述构造方法依赖图包括:将过滤后的静态方法依赖子图与方法调用图中方法调用结点一一对应生成动态方法依赖图,通过参数输入边、参数...

【专利技术属性】
技术研发人员:刘尚国董利军
申请(专利权)人:刘尚国
类型:发明
国别省市:上海,31

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

1