Site hosted by Angelfire.com: Build your free website today!
Visita la página de Compiladores e Intérpretes 

Slicing de Programas

(Program Slicing)
Esta página intenta ser de ayuda para todo aquel que esté interesado en el slicing de programas (program slicing).
Si tiene alguna consulta, recomendación o desea que le informe cada vez que actualizo esta página, envíeme un mail.

Indice


Breve introducción al slicing de programas

    El término slice fue acuñado por Mark Weiser en su tesis doctoral [Wei79], junto con su definición y un algoritmo para calcularlo.

    Weiser sostiene que los programadores, mientras depuran los programas, los dividen en piezas coherentes que usualmente no son textualmente contiguas. Los slices se corresponden con esas abstracciones que los programadores construyen mentalmente mientras buscan la causa de un error.

    Informalmente, un slice brinda la respuesta a la siguiente pregunta ¿Qué sentencias del programa afectan potencialmente el valor de la variable v en la sentencia s? Rápidamente salta a la vista que, bajo este enfoque, el slice tiene siempre un punto de referencia -la sentencia- y una variable de interés. Este par ordenado (sentencia, variable) recibe el nombre de criterio de slicing. Todos los elementos -sentencias, predicados, declaraciones- de un programa que directa o indirectamente afectan los valores calculados en un criterio determinado conforman el slice con respecto a ese criterio.

    Formalmente, el slice de un programa P, con respecto a una variable var, y una posición, pos, es un subprograma P' de P tal que P' calcula el mismo valor de var en la posición pos que el que calcula P [Wei84].

    Expresado en otros términos, puede considerarse que para una sentencia s y una variable v, el slice S del programa P con respecto al criterio (s,v) es cualquier programa ejecutable que cumple con las siguientes propiedades:

Ejemplo:
 
Programa Slice con criterio (9,i)
[01]    int i 
[02]    int sum 
[03]    sum := 0 
[04]    i := 1 
[05]    while (i<11) do 
[06]        sum := sum + i 
[07]        i := i + 1 
[08]    wend 
[09]    print (i) 
[10]    print (sum)
[01]    int i 
 

[04]    i := 1 
[05]    while (i<11) do 

[07]        i := i + 1 

[09]    print (i) 
 

 
    La actividad consistente en calcular slices se conoce como slicing de programas. Las herramientas que de manera automática descomponen o reducen programas en slices con respecto a un criterio de slicing se denominan slicers.
 

Aplicaciones del Slicing de Programas

    La aplicación natural del slicing fue la de auxiliar a los programadores en las tareas de debugging (depuración de programas). El mismo Weiser sugirió en [Wei79] que esta técnica se incorporase en ambientes de debugging. Sin embargo, una vez reconocida su utilidad, se percibió que también podía resultar beneficiosa su aplicación en otras áreas tales como testing [BH92], integración [HPR89], comprensión [HDS95a] [LA94] y mantenimiento de programas [GL91], paralelismo [Wei84], obtención de métricas [Wei84], reuso [LV96], ingeniería reversa [BE93], etc. Cada una de estas áreas requiere slices con ciertas características o propiedades especiales, lo que ha provocado desde entonces el surgimiento de varias nociones y definiciones de slice que difieren en mayor o menor grado con la original, cada una acompañada a su vez con sus correspondientes métodos de cálculo.

Links a otras páginas sobre slicing de programas

  Atención: si conoces otras páginas relacionadas con el slicing de programas, envíame un mail.



Página mantenida por Salvador Cavadini (scavadini@hotmail.com) - Santiago del Estero, Argentina
Última actualización: 29/03/99

Nota: gran parte del contenido de éste sitio está basado en la página sobre slicing de programas de Jens Krinke.