Caso de análisis de código fuente gratuito
El concepto detrás del desarrollo de Jacks es simplificar las pruebas que se ejecutan en múltiples compiladores o múltiples configuraciones de compiladores (por ejemplo, un conjunto de pruebas en Jikes de Javac y las dos últimas versiones del JDK). Si lo hace manualmente, debe configurar repetidamente las variables de entorno y luego comparar los resultados de la prueba con los resultados esperados. Al usar Jacks, solo necesita cambiar al directorio donde están almacenadas sus pruebas, llamar al marco de Jacks e indicar qué configuración del compilador debe usarse.
El fracaso de Sun en cumplir su promesa a los desarrolladores de Java inspiró al equipo de Jikes a poner en marcha Project Jacks. Sun ha declarado repetidamente que entregará Java JCK (Java Compatibility Kit) y las tecnologías Java relacionadas a un organismo estándar. Sin embargo, debido a que esto no se ha realizado, los desarrolladores que trabajan en proyectos Java no pueden utilizar las pruebas de regresión de J. CK para el desarrollo diario. . Cuando se enfrentan a una escasez de código artificial causada por restricciones de licencia irrazonables, tienden a reemplazar los sistemas antiguos por sistemas nuevos y más completos. Esta es la historia de lo que pasó con Jacks (aunque Jacks está alojado en desarrolladorWorks, está cubierto por la GPL en lugar de la licencia pública de IBM).
Uso de Jacks
Jacks está escrito en Tcl, por lo que debes asegurarte de tener Tcl (necesitarás una versión para asegurarte de tener la extensión tcltest y compatibilidad con Unicode, ambas). de los cuales son jotas). Puede descargar el instalador para Windows y el RPM para Red Hat x, y puede compilarlo desde el código fuente de manera más conveniente. Si no sabe dónde descargarlo, consulte la sección Recursos más adelante en este artículo. Si estás usando Red Hat, probablemente tengas Tcl instalado.
Después de instalar Tcl, necesita sacar Jacks de CVS y luego configurar Jacks incluyendo el nombre de ruta del compilador en el archivo de configuración Jacks _setup para el compilador que desea probar. Para cada configuración que desee admitir, necesitará un archivo _setup; por ejemplo, Jacks tiene un archivo javac_setup que debe editarse para configurarlo para javac. Path Eric Blake dijo que la parte más difícil fue descubrir cómo probar Jikes ya que ya tenía JIKESPATH configurado en el entorno, pero descubrí qué cambiar en el archivo de configuración jikes_setup y todo salió bien.
Obtenga el código fuente de Jacks del módulo CVS
setenv CVS root:pserver:anon CVS @:/usr/CVS/jikes CVS login
paswsd anoncvs
cvs cajero?
Los jacks se pueden utilizar con un número ilimitado de compiladores o configuraciones de compiladores. Para eliminar la configuración de un compilador, simplemente elimine su archivo _setup.
Después de obtener el código fuente de CVS, debe incluir el directorio Jacks de nivel superior en la ruta para poder ejecutar el script de shell de Jacks. Para pecar de cauteloso, debe ejecutar el script de shell inicialmente sin ningún argumento para asegurarse de que todo esté configurado correctamente.
%jack
Si todo está bien, verás una lista de opciones de línea de comando aceptadas por el script de Jacks. Si recibe un error, verifique si el ejecutable tclsh se puede encontrar en la ruta. Los usuarios de Windows deben ejecutar TCLSH directamente y pasarle el parámetro jacks tcl antes del indicador general. También debería considerar instalar la capa de compatibilidad Cygwin Unix para uso de Unix.
Puede utilizar el script de shell proporcionado para ejecutar Jacks. Las siguientes instrucciones suponen que está utilizando un script de shell.
Para los ejemplos de prueba, necesita usar el compilador Jikes para ejecutar todos los comandos de prueba en un subdirectorio determinado de la siguiente manera
% cd tests/jls/package/package-declaration/un Paquetes con nombre
% jacks jikes?
Desarrollar nuevas pruebas de regresión
Desarrollar un nuevo caso de prueba de Jacks es muy sencillo. Según Eric Blakes, básicamente se diseña un archivo fuente simple para probar el problema, se coloca en un formato Jacks específico y luego se ejecuta Jacks. Si los resultados del compilador difieren del resultado esperado, imprime un error. A continuación se muestra un ejemplo de cómo agregar un nuevo caso de prueba al tutorial en la página de inicio de Jacks.
//Interfaz de sincronización de archivos interfaz de sincronización pública java interfaz de sincronización {}? La compilación con Jikes produce el siguiente error.
Interfaz de sincronización java de % jikes
Se encontró un error semántico en la interfaz de sincronización apilada java:
Interfaz de sincronización pública interfaz de sincronización {}
& lt& gt
***Error: sincronizado no es un modificador de interfaz válido
Si echas un vistazo rápido a la sección JLS, verás que sincronizado no es un modificador legal. modificador en este contexto. Si intenta compilar la misma clase usando el compilador Javac en una versión anterior del JDK, no generará un error (el error se solucionará en una versión futura).
% javac synchronization interface java
Ahora que el problema ha vuelto a surgir, puede agregar casos de prueba de regresión al conjunto de pruebas de Jacks siguiendo los pasos a continuación.
Comprenda en qué directorio se deben colocar los casos de prueba.
Escribir pruebas de regresión
Ejecutar nuevas pruebas en el marco Jacks
El formato de las pruebas de regresión en el marco tcltest es
tcltest: : nombre de la prueba descripción {MANDS
} resultados_esperados?
Esta es la primera sección de prueba en JLS, por lo que el nombre es
Los casos de prueba se encuentran en el directorio tests/JLS/interfaces/interface declaraciones/interfaz modificadores (la ubicación es basado en el nombre de la sección JLS).
La descripción puede ser la que quieras.
La sección MANDS contiene todos los comandos Tcl, pero en la mayoría de los casos solo se necesitan los métodos saveas y pile en Jacks.
El comando saveas tiene dos parámetros, el nombre del archivo y los datos que se guardarán en el archivo.
¿Guardar como SynchronizedInterface java \ {Interfaz pública sincronizada SynchronizedInterface {}}? El comando pile acepta cualquier número de argumentos de la línea de comando y los pasa al compilador de Java. Devolverá PASS FAIL o WARN para indicar el estado de salida del compilador.
EXPECTED_RESULT es el resultado que espera del comando de pila.
En este ejemplo de interfaz, la compilación no debería tener éxito, por lo que la prueba de regresión completa debería verse así.
TCL test::test {debería generar un error en la interfaz sincronizada} { guardar como interfaz sincronizada Java \
{interfaz síncrona interfaz sincronizada{}}
Pila ¿Falló la interfaz de sincronización java
}? Resultados de las pruebas
La ejecución de pruebas y la verificación de resultados están completamente automatizadas, por lo que puedes tomarte un descanso y ver qué sucede. El marco Jacks desciende recursivamente en el directorio de pruebas y ejecuta todas las pruebas que encuentra.
Si todo está bien no se imprimirá ningún mensaje. Si la prueba falla, se imprimirá una descripción del fallo, como lo muestra Modron en el listado.
Este ejemplo demuestra el error causado por el primer constructor que llama al segundo constructor en Javac y el segundo constructor que llama al primer constructor. El JLS establece que esto es ilegal (sección), por lo que el compilador de Java debe señalar un error si se detecta esto.
Veamos cómo Jikes hace el mismo caso de prueba. En la lista, usaremos algunas características en Jacks que le permitirán pasar el patrón como tercer argumento del script de Jacks y omitir aquellos casos de prueba cuyos nombres no coincidan con el patrón. En este pequeño ejemplo, el patrón es el nombre del caso de prueba. En este caso, observe cómo pasa el caso de prueba que nos interesa y cómo se omiten otros casos de prueba. El resultado anterior muestra que el error encontrado en el compilador Javac no existe en Jikes.
Aunque los resultados legibles por humanos son muy útiles, si tiene muchos casos de prueba que procesar, rápidamente pueden volverse muy inmanejables. Jacks celebró recientemente un hito importante y ahora incluye más de un caso de prueba independiente de JLS. Con tantos casos de prueba, nadie puede recordar qué casos de prueba pasaron y cuáles fallaron en un momento determinado, pero no tengas miedo, Jacks incluye una serie de registros y resultados de pruebas. El análisis de resultados puede rastrear los resultados de las pruebas a lo largo del tiempo, lo cual es una característica clave porque proporciona a los desarrolladores de compiladores Java una forma de rastrear el estado de las correcciones de errores y posibles regresiones.
Cómo escribir Jacks y por qué usar Tcl
Al implementar un conjunto de pruebas como Jacks, un lenguaje de scripting es una elección natural y las razones para usar Tcl son las siguientes.
Tcl es de código abierto, por lo que seguirá existiendo durante algún tiempo.
Fácil de instalar, no es necesario compilar scripts
Lenguaje de scripting fácil de leer y más fácil de dominar que C/C++
Cadena fácil de usar funciones de procesamiento y expresión regular
Altamente portátil y puede ejecutarse en más plataformas que Java.
Se ha utilizado con éxito en miles de organizaciones durante la última década.
La ironía es que solía ser un proyecto de Sun :)
Mo Dejiong dijo que una de las características más llamativas de Jacks es la documentación autogenerada. En la página de inicio de Jacks puede encontrar un enlace a la página de índice de casos de prueba, que enumera todos los casos de prueba disponibles. Se puede indexar y hacer referencias cruzadas de varias formas útiles, y los casos de prueba se pueden encontrar fácilmente por nombre, así como pruebas existentes para ver qué tan completo está el contenido de un capítulo de JLS. Las características del lenguaje altamente dinámico de Tcl facilitan la implementación de casos de prueba autodocumentados.
Hasta ahora, Jacks admite los siguientes compiladores de Java.
JDK (también disponible dentro y fuera de fecha)
Compilador Java de código abierto de Jikes IBM
Kaffe utiliza el compilador Kopi.
Interfaz de Java de GCJ a gcc
Mejorando los compiladores de Java en todas partes
Jacks inicialmente se centró únicamente en proporcionar pruebas de compilador para el proyecto Jikes. El objetivo original era reemplazar el sistema de prueba casero creado para Jikes, pero se abandonó porque era demasiado difícil de construir y utilizar. Rápidamente se descubrió que si el conjunto de pruebas se volviera más regular, podría usarse en otros proyectos de compiladores de Java, lo que conduciría a un aumento en el número de casos de prueba enviados. Al menos haga que otros expertos en Java evalúen la corrección de los casos de prueba.
El proyecto Jikes naturalmente utiliza Jacks ampliamente, pero ¿qué pasa con los proyectos compiladores GCJ y Kopi? Tom Tromey, líder permanente de Java en Red Hat, reconoció el papel del desarrollo de Jack en el proyecto GCJ. El gato tiene implicaciones prácticas para el proyecto GCJ. Ejecuto Jacks cada vez que hago cambios en el compilador de front-end y periódicamente uso Jacks para encontrar errores en GCJ. Creo que agregar pruebas es pan comido. El marco es muy fácil de usar y reflexivo.
Lishi Xinzhi/Article/program/Java/Javascript/201311/25464