关键词:
软件分析
数据依赖
控制依赖
系统依赖图
异常处理
控制流
数据流
程序切片
摘要:
程序切片是一种分析和理解程序的技术,通过分析程序语句之间的依赖性关系自动分解源程序。程序切片技术在软件工程领域有广泛的应用,例如程序理解、调试、维护、测试以及反向工程等。Java系统依赖图(JSDG)可以用来表示Java程序,在Java系统依赖图中,结点表示语句或者谓词,边表示控制和数据依赖关系。利用Java系统依赖图,我们可以有效地计算程序切片。
Exception是一类用于错误处理的特殊对象,它在Java方法出错时被创建,并利用try/catch/finally机制抛出、检测和处理异常。当前的程序切片算法都不能正确有效地处理异常结构,因为它们没有或不能正确的考虑异常引入的附加数据和控制依赖关系。
在本文中讨论了异常结构对程序控制依赖和数据依赖的影响,采用了一种新的策略来处理异常结构。新策略将try、catch、finally块视为方法,并将可能抛出异常的调用点视为谓词结点,这样可以表示异常对象附加的数据和控制依赖关系,构造出包含异常处理结构的Java系统依赖图。本文还提出了另外一种方法,为每个调用点增加正常返回结点,对于可能抛出异常的调用点增加异常返回结点;为每个方法增加正常退出结点,对于可能抛出异常的方法增加异常退出结点,并将异常调用的返回结点视为谓词结点,用这种方法构造的系统依赖图更加精确。文章还给出了适合这种系统依赖图构造的一些相关算法。
本文还给出了一种源程序分析框架,利用JavaCC和JTB生成语法分析器和访问器,实现对源程序信息的提取,并定义了一系列层次化的类结构保存源程序信息。这些类结构能够保存源程序的结构信息,包括类之间关系,类与方法之间关系,类与语句之间关系等。
最后,本文还实现了一个Java程序切片原型系统,为Java程序提供了软件分析平台。通过这个平台,我们可以得到类层次图、方法调用图、方法控制流图、方法控制依赖图、方法数据依赖图和程序切片。