Los programas al diván! Programas que analizan programas

40
Los programas al diván! Los programas al diván! Programas que analizan Programas que analizan programas programas Diego Garbervetsky Diego Garbervetsky Laboratorio Laboratorio Dependex Dependex int insomnio(int dias) { int tot=0; int i = 0; while(i<dias) { tot=tot+8; i++; } return tot; }

description

int insomnio(int dias) { int tot=0; int i = 0; while(i

Transcript of Los programas al diván! Programas que analizan programas

Page 1: Los programas al diván! Programas que analizan programas

Los programas al diván!Los programas al diván!Programas que analizan programasProgramas que analizan programas

Diego GarbervetskyDiego Garbervetsky

Laboratorio Laboratorio DependexDependex

int insomnio(int dias) { int tot=0; int i = 0; while(i<dias) { tot=tot+8; i++; } return tot;}

Page 2: Los programas al diván! Programas que analizan programas

AclaracionesAclaraciones

No soy Ingeniero de No soy Ingeniero de Software!Software! No tengo moto…No tengo moto…

No mato ratasNo mato ratas

No busco petróleoNo busco petróleo

No juego con perritosNo juego con perritos

Van a tener que ver Van a tener que ver muchos muchos programitas!programitas!

Page 3: Los programas al diván! Programas que analizan programas

Analizando programasAnalizando programasUna mirada “psicológica”Una mirada “psicológica”

void imprimir(int[] A) { ordenar(A); for(int i=0;i< a.length; i++) { ordenar(A); System.out.println(A[i]); ordenar(A); } ordenar(A); ordenar(A);}

Neurótico Obsesivo

Page 4: Los programas al diván! Programas que analizan programas

Qué es el análisis de programas?Qué es el análisis de programas?

Técnicas para Técnicas para predecirpredecir propiedades de los propiedades de los programas antes de ejecutarlos (o sea, saber de programas antes de ejecutarlos (o sea, saber de antemano cosas que pasarán al ejecutarlos) antemano cosas que pasarán al ejecutarlos)

Algunas propiedades que interesan:Algunas propiedades que interesan: Variables “vivas”Variables “vivas”

int noSoyOptimo(int n){ x = n; {n} acum = n; {acum} i = 0; {acum, i} while(i< 10) {acum, i} { k = i + 1; {acum, k} acum = acum + 1; {acum, k} i = k; {acum, i} } return acum; { acum }}

• Una variable está viva en una posición del programa si es USADA en alguna posición a partir de ese punto SIN SER REASIGNADA

• Una variable ASIGANDA pero no viva, puede ser eliminada junto con sus ASIGNACIONES

Page 5: Los programas al diván! Programas que analizan programas

Qué es el análisis de programas?Qué es el análisis de programas?

Técnicas para Técnicas para predecirpredecir propiedades de los propiedades de los programas antes de ejecutarlos (o sea, saber de programas antes de ejecutarlos (o sea, saber de antemano cosas que pasarán al ejecutarlos) antemano cosas que pasarán al ejecutarlos)

Algunas propiedades que interesan:Algunas propiedades que interesan: Variables “vivas”Variables “vivas” Expresiones usadas frecuentementeExpresiones usadas frecuentementeint noSoyOptimo(int n, int[] a)

{ acum = 0; for(int i=0; i< 10; i++) { a[2*n+i]=a[2*n+i]+1; acum = acum + a[2*n+i]; } return m;}

• Una expresión es usada frecuentemente si aparece varias veces en un programa y el valor que representa es siempre el mismo.

Page 6: Los programas al diván! Programas que analizan programas

Qué es el análisis de programas?Qué es el análisis de programas?

Técnicas para Técnicas para predecirpredecir propiedades de los propiedades de los programas antes de ejecutarlos (o sea, saber de programas antes de ejecutarlos (o sea, saber de antemano cosas que pasarán al ejecutarlos) antemano cosas que pasarán al ejecutarlos) Algunas propiedades que interesan:Algunas propiedades que interesan: Variables “vivas”Variables “vivas” Expresiones usadas frecuentementeExpresiones usadas frecuentemente InvariantesInvariantes Accesos correctos a Arrays, a referencias (punteros)Accesos correctos a Arrays, a referencias (punteros) Código alcanzableCódigo alcanzable Tiempo de ejecuciónTiempo de ejecución Y muchas más!Y muchas más!

int noSoyOptimo(int n){ { true } acum = n; { acum = n } for(int i=0; i< 10; i++) { {0≤ i<10 acum=n+i } acum = acum + 1; {0≤ i<10 acum=n+i+1 } } { i = 10 acum=n+10 } return acum; }

Invariante en un punto: Invariante en un punto: Relación entre variables que se Relación entre variables que se mantiene mantiene para cualquier para cualquier ejecución ejecución de un programade un programa

Page 7: Los programas al diván! Programas que analizan programas

Tipos de AnálisisTipos de Análisis

Dos enfoquesDos enfoques Estático: Se analiza el programa Estático: Se analiza el programa sin sin

ejecutarloejecutarlo. . Se deduce el comportamiento a partir del Se deduce el comportamiento a partir del TEXTOTEXTO del código. del código.

Dinámico: Se ejecuta el programa Dinámico: Se ejecuta el programa (varias veces)(varias veces)

Se deduce el comportamiento a partir de Se deduce el comportamiento a partir de datos obtenidos de las ejecuciones.datos obtenidos de las ejecuciones.

El TESTING es un tipo análisis dinámicoEl TESTING es un tipo análisis dinámico

Vamos a hablar de Análisis Estático

Page 8: Los programas al diván! Programas que analizan programas

MotivaciónMotivaciónPor qué analizar programas?Por qué analizar programas?

Generación de CódigoGeneración de Código CompilaciónCompilación OptimizaciónOptimización TransformaciónTransformación

VerificaciónVerificación Contra especificacionesContra especificaciones Bugs en códigoBugs en código Generación de casos de TestGeneración de casos de Test

ComprensiónComprensión Obtención de invariantesObtención de invariantes Obtención de modelos a partir de códigoObtención de modelos a partir de código

SeguridadSeguridad Buffer overflows…Buffer overflows…

Page 9: Los programas al diván! Programas que analizan programas

Por qué analizar programas?Por qué analizar programas?Generación de CódigoGeneración de Código

Compilar: Transformar un programa en Compilar: Transformar un programa en un lenguaje que nosotros “entendemos” un lenguaje que nosotros “entendemos” por algo que entiende la máquinapor algo que entiende la máquina

int ordenar(int[] A){ for(int i=0;i< a.size; i++) { swap(i, min(A,i) ); }}

ordenar Mov cx,0 L1: call minimo Mov bx, data[ax] Mov ex, data[cx] Mov data[cx], bx Mov data[ax], ex Inc cx; cmp cx,data[size] jnz L1

Page 10: Los programas al diván! Programas que analizan programas

Estructura de un CompiladorEstructura de un Compilador

Analizador Léxico

ParserAnalizador Semántico Optimizador

independientedel procesador

Generador de código

Optimizadorespecifico

para el procesador

Cadena de Tokens

Síntaxis Abstracta

Representación

Intermedia

Representación

IntermediaOptimizadaCódigo para

una máquina especifica

Código=Texto

Código optimizadopara una máquina específica

Page 11: Los programas al diván! Programas que analizan programas

Por qué analizar programas?Por qué analizar programas?OptimizarOptimizar

Optimizar: Hacer algo más eficiente según Optimizar: Hacer algo más eficiente según algún criterio…algún criterio…

Espacio!

Miss Gorda 2004 - Foto: Terra/Reuters Pampita - Foto: HardDisk E. Mockscos

Page 12: Los programas al diván! Programas que analizan programas

Por qué analizar programas?Por qué analizar programas?OptimizarOptimizar

Optimizar: Hacer algo más eficiente según Optimizar: Hacer algo más eficiente según algún criterioalgún criterio

int noSoyOptimo(int x){ int n = x; int h = 10; int m; for(int i=0; i< 1000; i++) { m = max(n,h); } return m;}

int soyOptimo(int x){ return max(x,10);}

•Espacio!

•N° de instrucciones ejecutadas!

•Velocidad!

Page 13: Los programas al diván! Programas que analizan programas

Optimizaciones TípicasOptimizaciones Típicas

Evitar cómputos redundantesEvitar cómputos redundantes Reusar resultados disponiblesReusar resultados disponibles Sacar de los “loops” los resultados que no Sacar de los “loops” los resultados que no

varían en ellosvarían en ellos

Evitar cómputos superfluosEvitar cómputos superfluos Resultados no necesariosResultados no necesarios Resultados calculables en tiempo de Resultados calculables en tiempo de

compilación (ej.:constantes)compilación (ej.:constantes)

Page 14: Los programas al diván! Programas que analizan programas

Reusar resultados disponiblesReusar resultados disponibles

int noSoyOptimo(int n, int[] a){ acum = 0; for(int i=0; i< 10; i++) { a[2*n+i]=a[2*n+i]+1; acum = acum + a[2*n+i]; } return m;}

int soyMasOptimo(int n, int[] a){ acum = 0; for(int i=0; i< 10; i++) { tmp = 2*n+i; a[tmp]=a[tmp]+1; acum = acum + a[tmp]; } return m;}

Primer cálculo

Cálculos repetidos

Page 15: Los programas al diván! Programas que analizan programas

Otros análisisOtros análisis

int noSoyOptimo(int x){ int n = x; int h = 10; int m; for(int i=0; i<1000; i++) { m = max(n,h); } return m;}

No depende del Loop

int noSoyOptimo(int x){ int n = x; int h = 10; int m; m = max(n,h);return m;}

h es constanten es siempre x

int noSoyOptimo(int x){ int n = x; { x } int h = 10; { x } int m; {x} m = max(x,10); {m}return m; {} }

n, h no están vivas!!

Resultados no necesariosResultados no necesariosResultados calculables en Resultados calculables en tiempo de compilaciòntiempo de compilaciòn

Instrucciones que no dependen Instrucciones que no dependen del loopdel loop

int casiOptimo(int x){ int m; m = max(x,10); return m;}

Page 16: Los programas al diván! Programas que analizan programas

Analizando programasAnalizando programasUna mirada “psicológica”Una mirada “psicológica”

void imprimir(int[] A){ System.out.println(A[i]); i=i-i; while(a.length<i); i = 0;}

Esquizofrénico!

Page 17: Los programas al diván! Programas que analizan programas

Por qué analizar programas?Por qué analizar programas? Verificar Verificar

Dos enfoquesDos enfoques 1) Ver si el programa cumple con lo 1) Ver si el programa cumple con lo

especificado. especificado. Testing… (dinámico)Testing… (dinámico) Descubrir invariantes y comparar (estática o Descubrir invariantes y comparar (estática o dinámicamente)dinámicamente)

2) Evitar la mayor cantidad errores en tiempo 2) Evitar la mayor cantidad errores en tiempo de ejecuciónde ejecución

chequeo de accesos indebidos a arrays, chequeo de accesos indebidos a arrays, A[i] con i mayor a la dimensión del array o negativo!A[i] con i mayor a la dimensión del array o negativo!

punteros nulos, punteros nulos, variables no inicializadas…variables no inicializadas…

WARNING!Ingeniería

de Software

Page 18: Los programas al diván! Programas que analizan programas

Verificación EjemplosVerificación Ejemplos

PolySpace aplica técnicas análisis PolySpace aplica técnicas análisis estático para la verificación de estático para la verificación de programas “críticos”programas “críticos”Verificó una aplicación de Verificó una aplicación de sincronización de los trenes de alta sincronización de los trenes de alta velocidad TGV (Francia)velocidad TGV (Francia)15.000 líneas de código15.000 líneas de códigoDescubrió (sin ejecutar) los Descubrió (sin ejecutar) los siguientes tipos de errores:siguientes tipos de errores:

Acceso a variables no inicializadasAcceso a variables no inicializadas Divisiones por zeroDivisiones por zero Acceso fuera de límites de ArraysAcceso fuera de límites de Arrays Acceso concurrente a variables Acceso concurrente a variables

compartidas sin sincronizarcompartidas sin sincronizar

POTENCIALES ERRORES EN EJECUCION!

!!!!!CHOQUES!!!!!!

WARNING!Ingeniería

de Software

Page 19: Los programas al diván! Programas que analizan programas

Limites del AnálisisLimites del Análisis

El problema de la Parada…El problema de la Parada…

Sea “Tusam” un programa que dado otro Sea “Tusam” un programa que dado otro programa nos dice si este para o no.programa nos dice si este para o no.

Tusam(P) =Tusam(P) =SI SI si P parasi P para

NONO si P se “cuelga”si P se “cuelga”

Existe el programa Existe el programa TusamTusam??

Page 20: Los programas al diván! Programas que analizan programas

Limites del AnálisisLimites del Análisis

Supongamos que existe Supongamos que existe TusamTusam

Sea “TonyKamo” otro programa Sea “TonyKamo” otro programa

TonyKamo(P) =TonyKamo(P) =Se cuelga Se cuelga si Tusam(P) = SI si Tusam(P) = SI

OKOK si Tusam(P) = NO si Tusam(P) = NO

Que pasa si corremos TonyKamo(TonyKamo)?Que pasa si corremos TonyKamo(TonyKamo)?1)1) Si se cuelga, entonces Tusam(TonyKamo)=SI, entonces Si se cuelga, entonces Tusam(TonyKamo)=SI, entonces

Tonykamo para!, pero se colgó…Tonykamo para!, pero se colgó…2)2) Si da OK, entonces Tusam(TonyKamo) =NO, entonces Si da OK, entonces Tusam(TonyKamo) =NO, entonces

TonyKamo se cuelga, pero dio OK!TonyKamo se cuelga, pero dio OK!

Absurdo!Absurdo!

Page 21: Los programas al diván! Programas que analizan programas

ConsecuenciasConsecuencias

El problema de la parada no es computableEl problema de la parada no es computable

Lamentablemente muchos problemas tampoco Lamentablemente muchos problemas tampoco lo son. Ejemplos:lo son. Ejemplos: Decidir si un punto del programa es alcanzable por Decidir si un punto del programa es alcanzable por

alguna ejecución o no (código muerto)alguna ejecución o no (código muerto) Calcular (exactamente) cuanta memoria necesita un Calcular (exactamente) cuanta memoria necesita un

programa para ejecutarseprograma para ejecutarse Saber si dos variables refieren al mismo objeto Saber si dos variables refieren al mismo objeto

(aliasing)(aliasing)

Page 22: Los programas al diván! Programas que analizan programas

AproximacionesAproximaciones

No dar el resultado exacto (ya vimos que a veces es No dar el resultado exacto (ya vimos que a veces es imposible)imposible)Dar una aproximación conservativaDar una aproximación conservativa

Tener en cuenta para que vamos a usar el resultado del Tener en cuenta para que vamos a usar el resultado del análisisanálisis

Tiene que ofrecer datos SEGUROS según la transformación Tiene que ofrecer datos SEGUROS según la transformación que hagamosque hagamos

Copiar Constantes Variables Vivas

= Espacio aproximado= Espacio de soluciones exacto

Page 23: Los programas al diván! Programas que analizan programas

Analizando programasAnalizando programasUna mirada “psicológica”Una mirada “psicológica”

Narcisista…

void imprimir(int[] A){ for(int i=0;i< A.length; i++) { System.out.println("Soy groso!“ +A[i]); } }

Page 24: Los programas al diván! Programas que analizan programas

Que estamos haciendo?Que estamos haciendo?

Nos interesan los programas que Nos interesan los programas que corren en “aparatitos” (sistemas corren en “aparatitos” (sistemas embebidos)embebidos) Limitaciones de espacio y poder de Limitaciones de espacio y poder de

computocomputo Aplicaciones “generalmente” críticasAplicaciones “generalmente” críticas

También nos interesan los También nos interesan los sistemas de tiempo realsistemas de tiempo real Necesitamos predictibilidad Necesitamos predictibilidad

temporal (saber que cierto proceso temporal (saber que cierto proceso SIEMPRE tarda menos que X SIEMPRE tarda menos que X tiempo)tiempo)

Page 25: Los programas al diván! Programas que analizan programas

Problemas en sistemas embebidosProblemas en sistemas embebidos

Son generalmente críticos y de tiempo Son generalmente críticos y de tiempo realreal

Usan lenguajes de programación de bajo Usan lenguajes de programación de bajo nivelnivel

Difíciles de programar y propensos a erroresDifíciles de programar y propensos a errores Muy difíciles de verificarMuy difíciles de verificar

Es un quilombo! Es un quilombo!

Tenemos que buscar formas de trabajar Tenemos que buscar formas de trabajar con lenguajes más modernos y con lenguajes más modernos y “cómodos”.“cómodos”.

Programador de embebidos

www.Soypelado.com.ar

Page 26: Los programas al diván! Programas que analizan programas

Análisis de Memoria en lenguajes Análisis de Memoria en lenguajes orientados a Objetosorientados a Objetos

Los lenguajes orientados a objetos tienen Los lenguajes orientados a objetos tienen muchas ventajas:muchas ventajas: Abstracción, encapsulación, Modularidad, Reuso, etc.Abstracción, encapsulación, Modularidad, Reuso, etc. Muchos programadores y diseñadores “conocen” Muchos programadores y diseñadores “conocen”

POOPOO

Casi no usados para sistemas críticos o de Casi no usados para sistemas críticos o de tiempo real... tiempo real... Problemitas:Problemitas: Garbage Collector (recolección de objetos ya no Garbage Collector (recolección de objetos ya no

utilizados)utilizados) Binding dinámico y polimorfismoBinding dinámico y polimorfismo

•No son predecibles!! No son predecibles!! •Muy difícil analizarlos!!!Muy difícil analizarlos!!!

Page 27: Los programas al diván! Programas que analizan programas

Modelo de Memoria en Lenguajes Modelo de Memoria en Lenguajes ModernosModernos

void usoMemoria(int n){ Carita v; for(int i=0;i<n;i++) { v = dameObjeto(); System.out.print(v); }}

Carita dameObjeto(){ Carita ret = new Carita() return ret;}

v

Page 28: Los programas al diván! Programas que analizan programas

Modelo de Memoria en Lenguajes Modelo de Memoria en Lenguajes ModernosModernos

void usoMemoria(int n){ Carita v; for(int i=0;i<n;i++) { v = dameObjeto(); System.out.print(v); }}

Carita dameObjeto(){ Carita ret = new Carita() return ret;}

v

Señor Garbage Collector

Page 29: Los programas al diván! Programas que analizan programas

ProblemaProblema

No sabemos cuando actua el GCNo sabemos cuando actua el GC

No sabemos cuanto va a tardarNo sabemos cuanto va a tardar

El GC es Malo… (para nosotros!)El GC es Malo… (para nosotros!)

Tenemos que eliminarlo!!!!Tenemos que eliminarlo!!!!

SOY MALO!!!

Page 30: Los programas al diván! Programas que analizan programas

Modelo de Memoria en Lenguajes OOModelo de Memoria en Lenguajes OO

Nosotros podemos darnos cuenta Nosotros podemos darnos cuenta que los objetos dejan de estar que los objetos dejan de estar “Apuntados”“Apuntados”

Analizando el Código!Analizando el Código!v

Entonces podemos modificar Entonces podemos modificar el código para hacer lo mismo el código para hacer lo mismo que el Garbage Collector…que el Garbage Collector…

Cuando y de la forma que querramos!Cuando y de la forma que querramos!

El programador NI SE ENTERA!El programador NI SE ENTERA!

Page 31: Los programas al diván! Programas que analizan programas

Más cosas sobre la memoriaMás cosas sobre la memoria

Recordemos que nos interesa la predictibilidad Recordemos que nos interesa la predictibilidad y que tenemos poco espacio (aparatitos!)y que tenemos poco espacio (aparatitos!)

Nos interesa mucho administrar bien la memoriaNos interesa mucho administrar bien la memoria

Necesitamos:Necesitamos: Entender como trabajan los programas con la Entender como trabajan los programas con la

memoria (tiempo de vida de los objetos que memoria (tiempo de vida de los objetos que alocamos)alocamos)

Administrar bien la memoria Administrar bien la memoria Mecanismo eficiente y predictivo sin el GC!Mecanismo eficiente y predictivo sin el GC!

Poder aproximar el consumo!!Poder aproximar el consumo!!

Page 32: Los programas al diván! Programas que analizan programas

Más cosas…Más cosas…Análisis de InvariantesAnálisis de Invariantes

Invariante: Relación entre variables que Invariante: Relación entre variables que debe cumplirse siempredebe cumplirse siempre

Nos explican que pasa con el programa Nos explican que pasa con el programa en determinados puntosen determinados puntos

Sirven para entender Sirven para entender

Para verificarPara verificar

Y para estimar consumo de memoria!Y para estimar consumo de memoria!

Page 33: Los programas al diván! Programas que analizan programas

ret =1

x != 1

ret =x

return ret

x > y

ret = y

Análisis de Invariantes EstáticoAnálisis de Invariantes Estático

int maximoPrieto(int x, int y){1: int ret = 1:

2: if(x!=1) {

3: if(x>y)

4: ret = x;

else5: ret = y; }

6: return ret; }

{ no se nada…}

{ ret = 1 }

{ ret = 1 x!=1 }

{ ret = 1 x!=1 x > y }

{ ret = x x!=1 x > y }

{ ret = 1 x!=1 x ≤ y }

{ ret = y x!=1 x ≤ y }

{ (x!=1 ((x > y ret = x) (x ≤ y ret = y)) ) (x = 1 ret = 1) }

{ ret = 1 x= 1 }

Page 34: Los programas al diván! Programas que analizan programas

Análisis Invariantes DinámicoAnálisis Invariantes Dinámico

int maximoPrieto(int x, int y){1: int ret = 1:

2: if(x!=1) {

3: if(x>y)

4: ret = x;

else5: ret = y; }

6: return ret; }

1: (ret=1, x=3, y=4) 2: (ret=1, x=3, y=4) 3: (ret=1, x=3, y=4)5: (ret=4, x=3, y=4)6: (ret=4, x=3, y=4)

1: (ret=1, x=5, y=4) 2: (ret=1, x=5, y=4) 3: (ret=1, x=5, y=4)4: (ret=5, x=5, y=4)6: (ret=5, x=5, y=4)

1: (ret=1, x=6, y=4) 2: (ret=1, x=6, y=4) 3: (ret=1, x=6, y=4)4: (ret=6, x=6, y=4)6: (ret=6, x=6, y=4)

1: (ret=1, x=4, y=4) 2: (ret=1, x=4, y=4) 3: (ret=1, x=4, y=4)5: (ret=4, x=4, y=4)6: (ret=4, x=4, y=4)

Se deduce un valor según las trazas de ejecución

Y si nunca ejecutamos con x=1??

Se deduce que en 6: ret = Maximo(x,y)

Page 35: Los programas al diván! Programas que analizan programas

Otras cosas: Otras cosas: Analisis de consumo de Analisis de consumo de memoria en Javamemoria en Java

Dado un método (función o procedimiento) Dado un método (función o procedimiento) obtenemos un obtenemos un polinomiopolinomio en función de sus en función de sus parámetros que sobre aproxima la cantidad de parámetros que sobre aproxima la cantidad de memoria que necesita para corrermemoria que necesita para correr

void usoMemoria(int n){ for(int i=0;i<n;i++) { for(int j=0;j<i;j++) { C v = new C(); } }}

P(n) = ½ n2 + ½n

Inv ={ 0≤i<n 0≤j<i }

Mago Capria

Page 36: Los programas al diván! Programas que analizan programas

DePendex - Laboratorio de investigación DePendex - Laboratorio de investigación en Software Confiableen Software Confiable

Si, Victor es Groso!Alfred Olivero Sergio Yovine

Chapa Nico Yo

Andran “Guru” Eclipse Diego “Invariante” Piemonte

Page 37: Los programas al diván! Programas que analizan programas

Que hacemos en DEPENDEX?Que hacemos en DEPENDEX?

Modelado y análisis de sistemas de tiempo realModelado y análisis de sistemas de tiempo real Lenguajes gráficos para describir requerimientos Lenguajes gráficos para describir requerimientos

temporalestemporales Model CheckingModel Checking Extracción de modelos a partir de diseñosExtracción de modelos a partir de diseños

Predicción de uso de memoriaPredicción de uso de memoria Análisis de “tiempo de vida” de los objetosAnálisis de “tiempo de vida” de los objetos Transformación de códigoTransformación de código Calculo de InvariantesCalculo de Invariantes

Programación orientada a AspectosProgramación orientada a Aspectos

Page 38: Los programas al diván! Programas que analizan programas

Dependex – Proyectos / AplicacionesDependex – Proyectos / AplicacionesModelado, análisis y verificación de Sistemas de Modelado, análisis y verificación de Sistemas de Tiempo RealTiempo Real

VInTimeVInTime: Un tool-suite para la verificación de sistemas de : Un tool-suite para la verificación de sistemas de tiempo real tiempo real

LapsusLapsus: Herramienta para diseño de sistemas de tiempo real: Herramienta para diseño de sistemas de tiempo realVTSVTS: Un lenguaje grafico para la especificación de requerimientos: Un lenguaje grafico para la especificación de requerimientosObsSliceObsSlice: Un reductor “exacto” de sistemas de tiempo real: Un reductor “exacto” de sistemas de tiempo realZeusZeus: Un “model checker” distribuido basado en KRONOS.: Un “model checker” distribuido basado en KRONOS.

TraceIt!TraceIt!: Generador de trazas de eventos para sistemas de : Generador de trazas de eventos para sistemas de tiempo real distribuidos  tiempo real distribuidos 

Herramientas que operan sobre programasHerramientas que operan sobre programas JScoperJScoper: Un plug-in para Eclipse que facilita la traducción de : Un plug-in para Eclipse que facilita la traducción de

aplicaciones Java estándar a Java Real Timeaplicaciones Java estándar a Java Real Time JMemoryJMemory: Un estimador simbólico del consumo de memoria de : Un estimador simbólico del consumo de memoria de

aplicaciones javaaplicaciones java JInvariantJInvariant: Un generador automático de invariantes poliédricos : Un generador automático de invariantes poliédricos

para programas Javapara programas Java SetPointSetPoint: Una heramienta para Programación Orientada a : Una heramienta para Programación Orientada a

Aspectos basada en poincuts semánticosAspectos basada en poincuts semánticos

Page 39: Los programas al diván! Programas que analizan programas

FIN!FIN!

PREGUNTAS?

Page 40: Los programas al diván! Programas que analizan programas

Quedo algo de vino?