程序切片的起源与发展

程序切片的起源与发展
程序切片技术是一种分解程序的程序分析技术。其常用于软件测试、运行维护等方面。
  • 产生
    1979年,美国Mark Weise首次在他的博士论文中提出了程序切片思想。

  • 用途
    程序切片技术在计算机学科的很多方面都产生了丰硕的结果;此外在软件开发的各个阶段、各种计算机语言的分析、形式化模型的分析以及软件测试方面都发挥了不可低估的作用。

  • 原理
    通过对源代码进行规划,可识别由于受到修改而影响的代码。

  • 发展
    程序切片的起源与发展将按照如下图1所示顺序进行介绍
    程序切片的起源与发展_第1张图片

初始定义
对程序P的切片准则C=(N,V)得到的切片S是从P中删去与N点处变量无关的指令和控制谓词所剩下的部分。
切片S与源程序P对于切片准则C的语义是一致的。

基础方法
M.Weiser提出程序切片的基本概念以后,接下来是如何计算程序切片。于是M.Weiser在当时比较流行的程序控制流图(CFG)的基础上建立了数据流方程。通过求解数据流方程来获得相应的程序切片;称为数据流方程算法。
1984年,K.J.Ottenstein 和 L.M.Ottenstein进一步改进(具体缘由后面给予说明),提出了程序依赖图(PDG),产生了基于PDG的图可达性算法;后来进一步改进,提出了系统依赖图(SDG),提出了基于SDG的两步遍历图可达性算法。基础算法的发展如图2所示。
程序切片的起源与发展_第2张图片
在给出扩展方法之前先介绍一下基础方法的优缺点以及其适用范围。如图3所示。
程序切片的起源与发展_第3张图片

  1. 数据流方程算法的优缺点:
    优点:产生了程序切片。
    缺点:1、效率不高;此方法需要求解一系列的迭代方程,消耗的时间和空间多,且会导致误差累加。2、此方法只能解决基本结构的程序,对于含有过程的程序(特别是含有多个过程的程序)无法求解得到程序切片。

  2. 基于PDG的图可达性算法优缺点:
    在这里插入图片描述
    优点:此种方法的出现是计算程序切片方法的重大突破;不仅能够计算含有过程的程序切片,而且使程序切片的计算过程变的简单且可视化。
    缺点:只能计算一个过程内的后向切片问题,不能计算含有多个过程的程序切片。

  3. 基于SDG的两步遍历图可达性算法
    解决了含多个过程程序的切片计算问题,基本趋于成熟。

扩展方法
在基于SDG的两步遍历图可达性算法出现之后,又产生了添加对象特征等的其他切片方案,大致顺序如图4所示。
程序切片的起源与发展_第4张图片

国内方面
国内在这方面的研究起步较晚,主要代表人物有徐宝文、张迎周和李必信等,他们的大致研究方向如图5所示。
程序切片的起源与发展_第5张图片

程序切片的类别
随着时间的推移,程序切片产生了许多的类别,此处所说的类别并非严格按照时间产生顺序来说明,仅从概念上进行区分,并以概念对的形式给出。首先说一下可执行的程序切片与不可执行的程序切片。

  1. 可执行与不可执行程序切片
    最早由M.Weiser博士定义的程序切片是可执行的程序,他认为切片与源程序对某个特定的变量(包含在切片准则中的变量)而言,在程序的某个特定地方的语义是一致的。
    一般而言,认为满足一下两个条件的程序切片称为M.Weiser程序切片:
    1、一个程序切片对应一个特定的切片准则,记为,其中V表示在n定义或使用变量的集合,n指程序中的某个点(一般指某条语句);
    2、程序P的切片S可通过从P中删除零条或多条语句得到,但要保证程序P和切片S关于切片准则的行为相同。
    程序切片的起源与发展_第6张图片
    后来的研究者们对这一定义进行了推广,他们把一些不可执行的程序也包含进来,从而丰富了程序切片的内涵。定义程序切片的典型方法为:
    给定某个程序P,程序切片准则,程序P关于切片准则的程序切片是由程序P中所有在n点对变量v属于V的值有影响的语句和控制谓词构成。
    显然,通过这种方式定义的程序切片不一定是可执行的。

  2. 静态切片、动态切片与有条件切片
    根据程序切片的定义可知,切片准则是求程序切片的关键信息。对于切片准则而言,n表示程序P中的某个兴趣点,V代表程序P中在n点定义或使用的变量。由不同的切片准则,可得到不同的切片。所以对切片准则进行研究,得到了静态切片、动态切片以及有条件切片。
    对于以上讨论的准则,他没有考虑程序的具体输入是什么;即考虑的是所有可能的输入。若要考虑程序的某一个特定的输入Io情况下所有影响V在n点的值的语句和谓语组成的集合,称为动态切片,其准则是一个三元数组Io>。
    有条件切片是位于静态切片与动态切片之间的一种形式,是考虑满足某个谓词表达式的所有可能输入Ic,对应的切片准则为Ic>。
    静态切片、动态切片与有条件切片三者之间的关系为:静态切片包含动态切片;静态切片包含有条件切片。
    程序切片的起源与发展_第7张图片

  3. 后向切片与前向切片
    根据切点(感兴趣点n)在切片S中的位置分为后向程序切片与前向程序切片。
    后向切片是为了寻找与程序P中那些对某个兴趣点的变量有影响的语句和控制谓词,即应当在程序P中兴趣点的前面。
    前向切片是为了寻找程序P中有哪些语句和谓词会受到n点的变量V的值的影响,即应当在程序P中兴趣点的后面。
    程序切片的起源与发展_第8张图片

你可能感兴趣的:(程序切片技术)