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:
-
S puede obtenerse eliminando cero o más sentencias de P.
-
Si P se detiene con la entrada E, entonces el valor de v
en la sentencia s cada vez que s se ejecuta en P es
el mismo en P que en S. Si P no termina normalmente,
s puede ejecutarse más veces en S que en P,
pero P y S calculan los mismos valores cada vez que s
se ejecuta en P [BG96].
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.