alexandre d. salcianu and martin c. rinard. definiciones un método es puro si no “muta”...

24
PURITY AND SIDE EFFECT ANALYSIS FOR JAVA PROGRAMS Alexandre D. Salcianu and Martin C. Rinard

Upload: hilario-correira

Post on 28-Jan-2016

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

PURITY AND SIDE EFFECT ANALYSIS FOR JAVA PROGRAMS

Alexandre D. Salcianu and Martin C. Rinard

Page 2: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Definiciones

Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a la invocación del método.

Page 3: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Para qué?

Cómo input para algunos análisis de programas

Para entender y documentar el programa

Para reducir el trabajo de los model checkers

Page 4: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Idea

Método para analizar la pureza de programas Java (no anotados).

Construido sobre una mejora de “combined pointer and escape analysis method” (Rinard-Whaley)

Chequea si un método es puro, en el sentido de que no cambia ningún objeto existente en el pre-estado.

Page 5: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Mejoras

Se distingue entre objetos existentes en el pre-estado y objetos nuevos (creado por el método)

La información adicional generada por el método sirve para obtener información útil sobre efectos colaterales.

El método fue probado (correctitud), implementado y utilizado en variedad de tareas.

Page 6: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Generalizaciones de Pureza Parámetros Read-Only : el método no

cambia ningún objeto alcanzable desde el parámetro.

Parámetros Seguros (safe): parámetros read-only el método no crea ningún camino externo

visible en el heap hacia objetos alcanzables desde el parámetro.

Page 7: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Resumen hasta acá

Análisis para detectar métodos puros en programas Java no anotados

Presenta mejoras con respecto a análisis anteriores Permite la alocación de objetos nuevos

en el heap Detecta read-only and safe parameters.

Page 8: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Revisión del análisis

Para cada método m y cada punto del programa dentro de m el análisis computa un points-to graph que modela la parte del heap que el método m accede antes de ese punto.

Page 9: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Revisión del Análisis

Un objeto “escapa” si es alcanzable desde afuera del método analizable (ej: desde uno de los parámetros)

En otro caso, el objeto está “capturado”

Un eje externo siempre termina en un load node

Page 10: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Revisión del Análisis Para cada método m el análisis

computa un conjunto Wm que contiene los campos abstractos modificados que son visibles externamente.

Un campo abstracto es un campo para un nodo específico.

Page 11: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Revisión del Análisis

El análisis examina métodos empezando desde las hojas.

Se realiza sin conocer el contexto en que se llamó el método (análisis composicional)

Obtiene un único resultado parametrizable El resultado es luego instanciado en cada

lugar que se invoque el método m. Normalmente, el análisis procesa cada

método una única vez. Métodos recursivos requieren varias pasadas

hasta llegar a un punto fijo.

Page 12: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Ejemplo: Cell Constructor

Page 13: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Ejemplo: List.add

Page 14: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Descanso??????

Page 15: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Continuando el Análisis Cada points-to graph registra los nodos

que “escapan globalmente” , es decir, aquellos nodos que son potencialmente accesibles por código que desconocemos.

Cualquier nodo alcanzable desde estos nodos también escapa globalmente

El análisis debe ser muy conservativo con respecto a estos nodos, en particular, porque pueden ser mutados por código no conocido.

Se utiliza un nodo especial para otros nodos desconocidos que escapan globalmente

Page 16: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Análisis Intraprocedural

Page 17: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Análisis Interprocedural Por cada llamada (call) del tipo

vR = v0.s(v1, … , vj)

el análisis usa el points-to graph G anterior a la llamada y el points-to graph Gcalle (gráfico final del método invocado) para computar un points-to graph posterior a la invocación del método.

Si hay múltiples posibles invocaciones, el análisis las considera a todas y mergea el conjunto de resultados de los points to graph

Page 18: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Paso 1

El análisis computa un mapeo, que relaciona los parámetros y los nodos cargados del método invocado, con los nodos que representan

Incluir gráfico

Page 19: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Paso 2

Page 20: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Análisis de Efectos

Este análisis se realiza sobre el análisis descripto anteriormente.

El análisis propaga efectos interprocedurales de las siguiente forma: cuando el análisis del método m encuentra una invocación, se utiliza el mapeo de nodos intraprocedural para proyectar los efectos del método invocado e incluir esos efectos en el conjunto Wm.

Page 21: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Pureza del Método

Se computa el conjunto A de nodos que son alcanzables en G, desde nodos parámetros, utilizando ejes externos.

El método m es puro si y sólo si para todo n perteneciente a A:

1. n no escapa globalmente 2. Ningún campo de n es alterado

Nombre de usuario
Tiene que ser nodos parametros?
Page 22: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Parámetros read-Only

Para chequear si el parámetro p es read-only:

Considerar el nodo correspondiente np

Determinar el conjunto S1 que contiene a np y todos los load nodes alcanzables desde np utilizando ejes externos

El parámetro p es read-only si y solo si:1. No hay ningún campo abstracto

perteneciente a Wm tal que n pertenece a S1

2. Ningún nodo de S1 escapa globalmente

Page 23: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Parámetros Safe

Para chequear si un p parámetro es safe: Se computa el conjunto S1

Se computa el conjunto S2 de nodos alcanzables desde nodos parámetros y/o desde nodos retornados, utilizando ejes externos o internos.

Para chequear la ausencia de un nuevo camino hacia un objeto alcanzable desde p, basta con chequear que ningún eje interno vaya desde un nodo en S2 a un nodo en S1

Page 24: Alexandre D. Salcianu and Martin C. Rinard. Definiciones  Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a

Write effects

Nombre de usuario
No se como explicarlo alguna ayuda.Me parece que metiendo todo el analisis no se va a enternder. La mejor idea seria meter un ejemplo grafico para que no sea tan complicado, pero no hay en nignuno de los dos papers