Código fuente oficial de Java de Sun
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.
Jacks
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/unnamed Bag
¿Se burlan?
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 válido 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).
interfaz de sincronización javac 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í.
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