N~ember 2004,Vo1.19No.6,PP.848—858
Model for Slicing JAVA Programs Hierarchicaly
J.Comput.S .& Technol
Bi—Xin Li‘’。,Xiao—Cong Fan ,Jun Pan。,and Jian—Jun Zhao
Department of Computer Science&Enginering,Southeast University,Nanjing 210096,P.R.China
2School of Information Science and Technology,PENNSTATE,University Park,PA 16802,U.S.A.
0CW I
, Kruislaan 413 1098 SJ Amsterdam,Netherlands
Department of Computer Science and Engineering,FIT,Fukuoka 811—02,Japan
E-nmil:Bx.Li@SeU.edu.cn;zfan@ist.psu.edu;Jun.Pang~cwi.hi;zhao@cs.fit.ac.Jp
KeywGcds Hierarchical model,program slicing,JAVA,stepwise Mgofithm,JATO.
一 种切片JAVA程序的层次模型
程序切片的初始概念出现在1979年Mark Weiser的博士论文中。从此其他研究者们也提出一些
程序切片,而这些程序切片的概念和计算方法与Weiser的比起来略有不同。一个重要的区别就是出
现了动态和静态之分,即前者考虑程序的特定输入,而后者不需要。直到2O世纪9O年代,由于面向
对象程序设计语言的兴起,那些基于传统的结构化语言的程序切片概念和计算方法又不能直接用于
面向对象的代码分析,所以研究者们又开始了切片面向对象程序的研究。从研究的方式来看,大家基
本上采用的是这样两种思路:一种思路是,在现有的程序切片概念和计算方法中引入面向对象概念,
使之能够处理面向对象的特征(如继承,多态等);另一种思路是引入新的基于面向对象的程序切片方
法。本文采用的策略是两者的结合——在局部层次上采用的计算方法是适合面向对象程序的、基于
依赖图的图形可达性算法;在总体上却是采用新引入的逐步求精计算方法。也就是基于JAvA程序
的内在层次特征,建立一种新的切片模型——层次切片模型。层次切片的主要思想就是按逐步求精
的方法,从包级到类级到方法级再到语句级来切片JAVA程序。具体地讲就是,为了切片JAVA程
序,我们先考虑包级信息,根据依赖关系删除那些与切片准则无关的包,只考虑与切片准则有关的包,
这样可以减少下一阶段需要考虑的包的个数,从而减少工作量和计算的复杂度。按照同样的思路,我
们可以处理类级,方法级,直到语句级的切片。这种方法的一个明显好处就是,在处理静态切片方面
很好地解决了多态性的问题(如文中例子),这是因为我们在处理类级切片时就已经删除了那些由于
继承关系而造成多态性的无关的类。本文的动机之一就是为了解决具有面向对象特征的程序切片问
题。动机之二是想突破传统的基于依赖图或数据流方程的程序切片模式,建立基于程序内在特征的
层次切片模型。本文的切片方法从模型和切片算法上都有突破。模型上采用的是层次切片模型(不
同于传统的依赖图或数据流方程),算法采用逐步求精和图形可达性相结合的