论文部分内容阅读
程序切片是一种重要的程序分析理解方法,用于从源程序中抽取对程序中特定点上的特定变量有影响的语句和控制条件,组成新的程序(称作切片),然后通过分析切片来分析源程序的行为.二十多年来,人们对它进行了广泛而深入的研究,取得了许多研究成果,使得它在软件调试、测试、维护、度量、程序变换、软件逆向工程与再工程等方面得到广泛应用,受到广大软件研究、开发人员的高度重视.论文主要工作包括:(1)通过对切片理论的研究,一定程度上解决了当前在大型程序切片、面向对象程序切片、并发程序切片及动态切片等方面存在的一些问题,提高了切片的效率和精确度;(2)进一步拓宽了切片技术的应用范围,将依赖性分析及程序切片技术应用于软件可测试性分析、测试覆盖率分析、类内聚度度量等方面;(3)对系统实现的若干问题进行了探索.论文工作的主要成果表现在以下几个方面:1.对传统的依赖性分析方法进行了改进,提出了一种新的子程序依赖性分析方法.在此方法中,依赖图的计算以子程序为单位,子程序间相对独立,内部数据、语句之间的依赖关系对外不可见,仅提供参数间的依赖关系作为对外接口.2.为了解决目前大型程序切片效率低的问题,提出了一种渐增式依赖性分析方法,根据用户需要逐渐建立依赖图,而不是预先建立整个系统的依赖图.与此对应,我们提出了部分切片的概念,可以只对感兴趣的部分进行切片,而非针对整个程序.3.为了有效描述面向对象程序的特性,提出了一种新的面向对象程序切片方法.在此方法中,类的依赖图由组成类的方法的依赖图组成,它们与类的方法一一对应.当构建子类的依赖图时,父类的依赖图无需重建,子类直接继承其父类的依赖图.在此基础上进一步提出了一些关于对象切片、类切片、类层次切片以及类粗粒度切片的概念和方法.4.为了提高动态切片的追踪效率,提出了一种利用静态分析的结果来减少动态追踪的信息量方法.5.为了简洁、有效地描述并发程序,提出了一种并发程序流图.基于这种表示,建立了并发程序依赖性分析模型.由于充分分析了各种并发行为,并考虑了并发和同步的语义,所构建的并发程序依赖图比已有其它方法都精确.在此基础上,提出来一种新的并发程序切片方法,它可以在多项式时间内分析得到较精确的并发程序切片.6.将程序切片技术应用于软件可测试性分析,提出了一种模块级的可测试性分析方法,使得它更能适用于黑盒测试.7.提出了一种利用程序切片计算关于变量测试覆盖率分析的方法,在计算覆盖率时,只考虑与这些变量有关的代码,结果更加准确.8.为了克服了现有方法只分析某个方面的不足,提出了一种基于依赖性分析的类内聚度度量方法,并证明了它满足优良的内聚度度量方法应该具有的性质,为综合评价类内聚度提供了指南.