MIT OpenCourseWare


6.170 Curso práctico en Ingeniería del Software.

Página principal
¿Qué es OCW?
Ayuda
Feedback
Preguntas frecuentes
Glosario
 
 
Página principal del curso
Programa
Calendario
Material de clase
Trabajos
Exámenes
  Lecturas obligatorias
Otras fuentes
  Prácticas
  Grupos/Clases de repaso
  Herramientas
  Proyectos

   MIT

   
 

Otras fuentes

Boletín S3: Detector del invariante Daikon

Contenidos:

Visión global

El detector del invariante Daikon informa de las propiedades que seguramente sean válidas en ciertos puntos de un programa. Las propiedades relatadas son ecuaciones aritméticas como las que usted mismo podría encontrar en una sentencia assert, una precondición (cláusula "requires") o una poscondición (cláusula "effects"); por ejemplo, "x == abs(y)" o"i < myArray.length". Estos invariantes pueden ser útiles en la compresión del programa y en multitud de otras aplicaciones. Daikon funciona ejecutando el programa y examinando los valores que computa, buscando patrones y relaciones entre esos valores.

Cómo ejecutar Daikon

Daikon está a su disposición a través del curso 6.170. Al ejecutar daikon sin ningún argumento, se visualizará la información de uso:

  Athena% daikon

  Usage: daikon [OPTIONS] <MAIN CLASS> [MAIN ARGUMENTS]

  Options:

    -o, --output FILE   Save invariants in FILE.inv

    ...

Como mínimo, debe facilitar el nombre de una clase "main" que proporcione el método "public static void main(String[] args)". Daikon ejecutará esta clase para ejecutar su programa. Consulte la sección de opciones de la línea de comando para obtener más detalles sobre las opciones disponibles para Daikon.

Opciones de la línea de comando

-o, --output FILE
Salva los invariantes en un FICHERO.inv y la fuente en un FICHERO.src.tar.gz. Si no se le da ningún nombre, automáticamente se genera y utiliza uno.

-t, --textfile
Guarda un listado textual de los invariantes en un archivo .txt.

-v, --verbose
Exhibe mensajes de progreso durante la ejecución.

-c, --cleanup
Elimina los archivos que hayan quedado de una sesión interrumpida antes de comenzar. Este comando debería ser utilizado únicamente cuando Daikon detecta archivos sobrantes y le ordena que use esta opción.

-n, --nogui
Crea el archivos de los invariantes (y el archivo .txt , si - t se ha facilitado), pero no arranca la interfaz gráfica de usuario (GUI).

Cómo comprender los invariantes

La GUI muestra una vista de árbol con los resultados. En el primer nivel, muestra una lista de las clases que están siendo revisadas. A medida que cada clase se expande, se exhibe una lista con los puntos del programa.

Puntos del programa

Un punto del programa se asocia normalmente con un lugar específico del código fuente. Por ejemplo, el punto ENTER bajo el nodo foo() representa las precondiciones tras la entrada al método foo().

Los puntos del programa ENTER y EXIT identifican los puntos a la entrada y a la salida de un método específico. El punto del programa OBJECT indica los invariantes de representación (conocidos también como invariantes del objeto) que se dan en cualquier objeto de una clase específica, desde el punto de vista de un cliente o usuario. Estas propiedades se dan a la entrada a y a la salida de cada método público de la clase. El punto del programa CLASS es como el punto del programa OBJECT, pero sólo para las variables estáticas.

Sintaxis del invariante

Es posible que unas pocas partes de la sintaxis de los invariantes visualizados resulten confusas.

En la salida, la aplicación de orig(x) a una variable x hace referencia al valor original de un parámetro formal. Las variables orig() aparecen sólo en los puntos del programa EXIT.

Los índices negativos del array cuentan hacia atrás a partir de la longitud del array; por ejemplo, a[-1] indica el último elemento del array a; es simplemente una forma de tratamiento sintáctico para a[a.length-1].

Cómo ejecutar Daikon manualmente

Aunque el método explicado arriba puede ser suficiente para la mayoría de los usuarios, tal vez algunos deseen indagar más. Esta sección describe cómo usar Daikon sin la ayuda del script wrapper. Una razón por la que usted podría estar interesado en esto es porque le permite controlar la detección del invariante (por ejemplo, qué clases son examinadas y cuáles ignoradas). Otro de los beneficios es que usted puede editar y reinstrumentar algunos ficheros sin arrancar cada vez el proceso completo. Finalmente, al seguir los pasos uno por uno, obtendrá un mejor entendimiento de lo que sucede en segundo plano.

La detección de invariantes implica tres pasos:

  1. Instrumentar el programa para añadir instrucciones que den como salida valores de variable.
  2. Ejecutar el programa (utilizando probablemente un conjunto de pruebas) para crear los ficheros de rastreo de datos.
  3. Ejecutar el detector del invariante Daikon sobre los ficheros de rastreo de datos para detectar los invariantes.

Paso 1: Instrumentación

La interfaz de usuario (front end) modifica el programa de modo que, además de realizar su tarea original, también escribe valores de variable en un fichero de rastreo de datos. La interfaz de usuario trabaja en códigos Java™ que correspondan a cualquier versión del lenguaje Java™, desde la 1.0 a la 1.3.

Ejecute dfej, el Extremo Frontal de Daikon para Java, en sus archivos de fuente Java™:


      dfej filename1.java filename2.java ...

El Extremo Frontal Daikon para Java™ lleva a cabo dos tareas:
  1. dfej escribe las versiones de los archivos a los que se añadieron instrucciones en un directorio daikon-java/.
  2. dfej crea archivos de declaración llamados filename1.decls, en un directorio daikon-output/.

Únicamente los archivos Java™ especificados tendrán instrucciones añadidas; otros ficheros se ejecutarán sin añadir instrucciones, lo que permitirá controlar el alcance de la detección del invariante.

Compile los ficheros generados, ej.


        javac daikon-java/*.java

Paso 2: Cómo ejecutar el programa

Ejecute el programa utilizando algún conjunto de pruebas para crear una colección de archivos de rastreo de datos. Puede ejecutar el programa con las instrucciones añadidas, como lo hizo antes; el único cambio de comportamiento consistirá en escribir un archivo .dtrace en el subdirectorio daikon-output/ (que será creado si no existe ya). Sólo se crea un fichero .dtrace, incluso si múltiples ficheros .decls podrían haber sido creados (uno para cada fichero fuente) cuando se añadieron instrucciones al programa.

Una vez añadidas las instrucciones, existen dos versiones del programa: la original y la versión donde se añadieron las instrucciones que aparece en el directorio daikon-java/. Asegúrese de que el directorio daikon-java/ aparece en el path de su clase antes que el directorio que contiene el código Java™ original. Puede hacer esto ejecutando el programa desde ese directorio si "." (el directorio actual) aparece antes en su path de clase. Otra opción sería añadir explícitamente el directorio daikon-java/ a su path de clase.

Después de ejecutar su aplicación Java™ , ejecute modbit-munge.pl sobre el archivo.dtrace resultante:


    modbit-munge.pl myprog.dtrace

Este paso arregla algunos posibles problemas que pueden aparecer en el fichero de rastreo.

Paso 3: Detectar los invariantes en los archivos de rastreo de datos.

Ejecute el detector del invariante Daikon a través del comando


    java daikon.Daikon decl-files... trace-files...

Los decl-files son archivos de declaración (.decl) creados en el momento de añadir las instrucciones. Los trace-files son ficheros de rastreo de datos (.dtrace) creados al ejecutar el programa al que se añadieron las instrucciones. Asegúrese de incluir todos los archivos declaración que sean necesarios para el archivo especial de rastreo de datos; el modo más sencillo consiste en incluir todos los archivos de declaración creados al añadir instrucciones al programa que es leído.

Daikon produce por defecto, un listado textual de los invariantes a la salida estándar (el terminal); sin embargo, también puede originar un archivo que puede ser cargado en la GUI, mediante la opción -o:


    java daikon.Daikon -o foo.inv decl-files... trace-files...

Luego, usted puede ejecutar la GUI sobre ese archivo:

    java daikon.gui.InvariantsGUI foo.inv

Página principal del curso de Daikon

Volver arriba

Información Jurídica | Privacidad
Todo uso del sitio de MIT OpenCourseWare y sus materiales de curso queda sujeto a las condiciones y términos de uso detallados
en la sección sobre Información Jurídica
Contacta con nosotros: Usuarios | Empresas-Instituciones-Medios comunicación
Código Ético | Aviso Legal | Política de confidencialidad | Quiénes somos: Sala de Prensa