Análisis de Regresión

Los resultados se encuentran en los archivos del directorio ./results. Estos resultados pueden ser comparados con los resultados del directorio ./expected usando 'diff'. (El guión (script) del test hace esto por usted, y deja las diferencias en ./regression.diffs.)

Los archivos pueden no corresponderse de forma exacta. El guión del test informará deuna diferencia como "failure" (fallo), pero la diferencia puede deberse a pequeñas variaciones entre plataformas en los mensajes de error, comportamiento de la librería matemáica, etc. "Fallos" de este estilo no indican necesariamente un problema con Postgres.

Por tanto, es necesario examinar las diferencias de cada test "fallido" con el fin de determinar si existe un problema realmente. Los siguientes puntos intentan proporcionar una guía para determinar si una diferencia es significativa o no.

Diferencias en los mensajes de error

Alguno de los tests de regresión incluyen intencionadamente valores de entrada no válidos. Los mensajes de error pueden venir tanto del código de Postgres como de las rutinas de sistema de la plataforma en la que nos encontremos. En el último caso, los mensajes pueden variar entre plataformas, pero deben reflejar información similar. Estas diferencias en los mensajes darán como resultado un test "fallido" que puede ser validado mediante una inspección.

Diferencias en fechas y horas

Muchos de los resultados de fecha y hora son dependientes del entorno de la zona horaria. Los achivos de referencia están generados para la zona horaria PST8PDT (Berkeley, California) y aparentemente pueden parecer fallos si los tests no se ejecutan con esta zona horaria establecida. El programa que ejecuta los tests de regresión establece la variable de entorno PGTZ a PST8PDT para asegurar resultados parecidos.

Parece que algunos sistemas no aceptan la sintaxis recomendada para establecer explicitamente las reglas de la zona horaria local; puede ser que necesite usar una forma distinta para establecer PGTZ en estas máquinas.

Algunos sistemas que usan librerias antiguas de zonas horarias fallan al aplicar las correciones de ahorro de luz solar en las fechas anteriores a 1970, causando que las horas de esas fechas aparezcan en PST a pesar de todo. Esto dará pie a diferencias localizadas en los resultados de los tests.

Diferencias en punto flotante

Algunos de los tests implican calcular números de 64-bits (float8) a partir de las columnas de una tabla. Se han observado diferencias en los resultados que devuelven funciones matemáticas en columnas de tipo float8. Los tests con float8 y de geometría son particularmente propensos a pequeñas diferencias entre plataformas. Se precisa una comparación con lupa por parte humana para determinar diferencias que normalmente se encuentran 10 posiciones a la derecha del punto decimal.

Algunos errores de señales del sistema con pow() y exp() difieren de los mecanismos que espera el actual código de Postgres.

Diferencias en polígonos

Varios de los tests incluyen operaciones con coordenadas sobre el callejero de Oakland/Berkley CA. Los datos de este mapa vienen expresados como polígonos cuyos vértices están representados en pares de números float8 (latitud y longitud decimal). Inicialmente, se crean y llenan algunas tablas con coordenadas, después se crean algunas vistas (Views) haciendo el Join de dos tablas usando el operador de intersección de polígonos (##), y despúes se realiza un Select sobre la vista. Cuando comparamos los resultados de diferentes plataformas, las diferencias aparecen en el segundo o tercer lugar a la derecha del punto decimal. Las instrucciones SQL donde se dan estos problemas son las siguientes:

        QUERY: SELECT * from street;
        QUERY: SELECT * from iexit;
       

Diferencias aleatorias

Hay al menos un caso de test en random.out que esta diseñado para producir resultados aleatorios. Esto causa que random falle el test de regresión cada vez. Escribir

         diff results/random.out expected/random.out
        
debe producir una o unas pocas líneas de diferencias por esta razón, pero otras variaciones en punto flotante o en arquitecturas distintas pueden causar más diferencias.

Los archivos "expected"

Los archivos ./expected/*.out fueron adaptados del monolítico archivo original expected.input proporcionado por Jolly Chen. Versiones más modernas de estos archivos generadas en varias máquinas de desarrollo han sido sustituidas después de una cuidadosa (?) inspección. Muchas de estas máquinas de desarrollo están ejecutando variantes del Unix OS (FreeBSD, Linux, etc) en hardware Ix86. El archivo original expected.input fue creado en un sistema SPARC Solaris 2.4 usando el código de postgres5-1.02a5.tar.gz. Fue comparado con un archivo creado en un sistema I386 Solaris 2.4 y las diferencias fueron solamente en los polígonos de punto flotante en el tercer dígito a la derecha del punto decimal. (vea más arriba) El archivo original sample.regress.out se obtuvo de la entrega 1.01 de postgres construida por Jolly Chen y se incluye aquí para referencia. Tendría que haberse ejecutado con una máquina DEC ALPHA ya que el Makefile.global en la version 1.01 de postgres tiene PORTNAME=alpha.