testing - serp - test seo tags
Flujo de trabajo de prueba Haskell (4)
El paquete de prueba marco es realmente increíble. Puede integrar fácilmente las pruebas HUnit y QuickCheck, y obtener ejecutables que ejecutan suites especificadas solamente, basadas en indicadores de línea de comando, con múltiples objetivos de salida.
Sin embargo, las pruebas y los perfiles son bestias diferentes. Para crear perfiles, configuré un archivo ejecutable independiente que enfatiza solo la sección que desea perfilar, y solo miro con cuidado los resultados de creación de perfiles y ejecuciones (con -prof-auto-all para compilación y + RTS -p para un tiempo de ejecución bandera).
Empecé un nuevo proyecto Haskell y quería establecer un buen flujo de trabajo de prueba desde el principio. Parece que Haskell tiene muchas herramientas de prueba excelentes y únicas y muchas formas diferentes de integrarlas.
He investigado:
Todos parecen funcionar muy bien en sus dominios, pero estoy buscando un enfoque integral para las pruebas y me preguntaba qué ha funcionado bien para otras personas.
El enfoque es abogado en RWH ch 11 y en XMonad es aproximadamente:
- Indique todas las propiedades del sistema en QuickCheck
- Mostrar cobertura de prueba con HPC.
- Confirme el comportamiento del espacio con el análisis de heap .
- Confirme el comportamiento de hilo / paralelo con ThreadScope .
- Confirme el comportamiento de microbenchmark con Criterion .
Una vez que sus principales invariantes se establecen a través de QuickCheck, puede comenzar la refactorización, moviendo esas pruebas al tipo invariantes.
Prácticas para apoyar sus esfuerzos:
- Ejecute una regresión QuickCheck simplificada en cada confirmación.
- Publica los detalles de la cobertura de HPC.
Obtener las pruebas unitarias, la cobertura del código y los puntos de referencia correctos consiste principalmente en elegir las herramientas adecuadas.
- test-framework ofrece una ventanilla única para ejecutar todos sus HUnit prueba HUnit y propiedades QuickCheck , todo desde un solo arnés.
- La cobertura del código está integrada en GHC en la forma de la herramienta HPC .
- Criterion proporciona una maquinaria de benchmarking bastante grande
Utilizaré como ejemplo de ejecución un paquete que recién comencé a habilitar con pruebas unitarias, cobertura de código y puntos de referencia:
http://github.com/ekmett/speculation
Puede integrar sus pruebas y puntos de referencia directamente en su archivo cabal agregando secciones para ellos y enmascararlos detrás de indicadores para que no lo hagan de modo que todos los usuarios de su biblioteca tengan acceso (y deseen usarlo por sí mismos) ) la versión exacta de las herramientas de prueba que ha elegido.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Luego, puede decirle a cabal cómo ejecutar su banco de pruebas. Como la prueba cabal todavía no existe, ¡tenemos un estudiante trabajando en ella para el código de verano de este año! - el mejor mecanismo que tenemos es Aquí está cómo usar el mecanismo de gancho de usuario de cabal. Esto significa cambiar a una compilación ''Custom'' con cabal y configurar un testHook. Un ejemplo de testHook que ejecuta un programa de prueba escrito con test-framework, y luego aplica hpc al perfil, se puede encontrar aquí:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
Y luego puede usar test-framework para agrupar las pruebas QuickCheck y HUnit en un solo programa:
http://github.com/ekmett/speculation/blob/master/Test.hs
El archivo cabal allí tiene cuidado de encender -fhpc para habilitar la prueba de cobertura de código, y luego testHook en Setup.lhs ejecuta hpc manualmente y escribe su salida en su directorio de distribución.
Para la evaluación comparativa, la historia es un poco más manual, no hay una opción de "punto de referencia cabal". Puede conectar sus puntos de referencia en su gancho de prueba, pero me gusta ejecutarlos a mano, ya que Criterion tiene tantas opciones de informes gráficos. Puedes agregar tus puntos de referencia al archivo cabal como se muestra arriba, darles banderas de compilación separadas, esconderlas detrás de una bandera de Cabal, y luego usar Criterion para hacer todo el trabajo pesado:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
A continuación, puede ejecutar sus puntos de referencia desde la línea de comandos y obtener ventanas emergentes de KDE con resultados de referencia, etc.
Como en la práctica estás viviendo en cabal de todas formas mientras desarrollas el código Haskell, tiene mucho sentido integrar tu cadena de herramientas con él.
Editar : El soporte de prueba Cabal ahora existe. Consulte http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
Para las pruebas, confío en las propiedades HUnit y QuickCheck y uso el Haskell Test Framework para recopilar todas las pruebas unitarias y todas las propiedades QuickCheck de forma automática.
Descargo de responsabilidad: soy el principal desarrollador del marco de prueba de Haskell.