论文部分内容阅读
程序切片是一种程序分析技术,它是通过把程序减少到只包含与某个特定计算相关的那些语句来分析程序的。切片回答了这样一个问题“哪些程序语句潜在地影响变量v 在语句s 的值?”Mark Weiser 引入程序切片概念,因为他观察到程序员在调试过程中脑海中就有关于程序的某种抽象。人们在调试一个程序的时候总是从错误语句s 开始,并沿着依赖关系跟踪到它影响的程序部分。程序切片自动计算这些依赖,在程序理解、程序分析、调试、测试、软件维护、程序集成和软件质量保证等方面对程序员有所帮助。在过去的几年中面向对象程序设计语言越来越吸引了人们的注意,因为它使得人们能够写出更加灵活、可复用和易维护的程序。然而,类、对象、继承、多态、动态定连等概念的出现,向静态程序分析提出新的挑战。它们使得为命令语言程序开发的表示技术和分析技术不足以表示面向对象程序。本文试图研究面向对象的程序切片技术及其在面向对象软件度量和复用方面的应用。本文创造性的研究工作如下: 文中提出一种对传统的系统依赖图进行面向对象扩充的方案。通过把传统的系统依赖图(SDG)和类依赖子图(ClDS)、类层次子图(CHS) 以及虚函数调用图(VFCG)相结合,从而构成了适合描述面向对象程序的面向对象系统依赖图(OOSDG)。并详细说明了对系统依赖图进行面向对象语法、语义扩充的过程,同时给出了构造面向对象系统依赖图的一般算法以及应用分析等。基于系统依赖图是计算面向对象程序切片的一种有效方法。但是系统依赖图的缺点是太复杂,而且在建立系统依赖图的过程中容易出错,一旦出现错误就可能导致切片结果的不准确。文中对系统依赖图了进行简化,得到简化的系统依赖图(SSDG)。简化的系统依赖图省略掉了那些表示输入参数和输出参数的结点和概括边,使图形更加简洁、清晰;同时还定义了一种面向对象程序的粗粒度切片概念,讨论了它的性质,分析了它与细粒度切片的关系,并基于简化的系统依赖图计算面向对象程序的粗粒度切片,最后还讨论了切片技术的简单实现。文中提出一种新的适合面向对象程序的分层切片方法,讨论了分层切片方法和逐步求精算法的主要思想,最后还阐述了该切片算法的应用。在研究面向对象的度量问题时,人们通过简单的统计方法和基于信息流的方法来度量其中的一些特征,例如基本度量,CK 度量和AoKi 度量等。本文采用一种基于程序切片的方法来度量JAVA 的耦合性问题,通过对JAVA 源程序中存在的耦合关系的度量,我们得到了一种比传统方法更精确的耦合度量方法。本中建立了抽象数据切片和类内切片的概念,然后基于这两种切片讨论了JAVA 语言中存在的内聚问题,通过分析这些切片与数据、方法、类之间的关系来度量数据、方法以及类的内聚性问题。我们从程序切片着手,根据测试人员的需要,通过对源程序进行分层切片来分解程序,把对整个程序的测试按照一定的规则转化成只对程序切片的测试。而且可以保证,两种测试的效果是等价的。以切片为基础来测试程序比单纯的利用数据流分析和控制流分析进行测试要优越得多。