- Las pruebas basadas en propiedades son un raro ejemplo de investigación académica que logró volverse parte de la corriente principal en menos de 30 años.
- Bajo el eslogan "no escribas pruebas, genéralas", han recibido apoyo en comunidades de muchos lenguajes de programación.
- La página de Wikipedia de QuickCheck, originalmente una biblioteca de Haskell, enumera 57 reimplementaciones en otros lenguajes.
Investigación sobre bibliotecas de pruebas basadas en propiedades
- Se investigaron las bibliotecas de pruebas basadas en propiedades más usadas actualmente y se compararon con el estado del arte de hace 15 años (2009).
- La mayoría de las bibliotecas no ofrecen las funciones más avanzadas de pruebas basadas en propiedades.
¿Por qué las bibliotecas de pruebas basadas en propiedades están en un estado tan triste?
Las pruebas basadas en estado y en paralelo no son tan útiles como las pruebas puras
- El modelado basado en estado requiere capacitación.
- Se plantea que el código cerrado ayuda a la adopción industrial.
El modelado basado en estado requiere capacitación
- Las pruebas basadas en estado y en paralelo exigen una forma de pensar distinta a la de las pruebas comunes.
- Al ofrecer estas herramientas a usuarios nuevos, se necesita una capacitación adecuada.
Se plantea que el código cerrado ayuda a la adopción industrial
- Se argumenta que el código abierto no funcionó y que los productos de código cerrado junto con servicios relacionados ayudan a la adopción.
Lo que podemos hacer
- Proporcionar implementaciones cortas de código abierto para pruebas basadas en propiedades con estado y en paralelo.
- Hacer más sencilla la parte de especificación formal para que requiera menos capacitación de los desarrolladores.
Resumen de las pruebas basadas en propiedades puras
- Probar una nueva función o característica se considera una buena práctica.
- Por ejemplo, si escribiste una función
reverse para invertir una lista enlazada, tiene sentido probarla con algunas listas, como la lista vacía.
- Generar entradas aleatorias es la función principal de las pruebas basadas en propiedades.
- La idea es que las entradas aleatorias eventualmente encontrarán casos extremos.
Pruebas de propiedades basadas en estado
- Al probar componentes con estado, la misma entrada no produce la misma salida.
- En las pruebas basadas en estado, se generan secuencias de entradas para probar cómo cambia el sistema con el tiempo.
- El estado se describe explícitamente usando una implementación de referencia en memoria (modelo).
Ejemplo: contador
- Se implementa un contador usando una variable global mutable.
- El modelo se representa como un entero.
- La prueba genera y ejecuta una secuencia de comandos para comparar la salida real con la salida del modelo.
Pruebas basadas en propiedades en paralelo
- Las pruebas en paralelo reutilizan el modelo de pruebas basadas en estado para detectar condiciones de carrera.
- Las pruebas en paralelo usan un modelo secuencial de máquina de estados para realizar pruebas paralelas mediante linearizabilidad.
Conclusión y trabajo futuro
- Para mejorar el estado de las pruebas basadas en propiedades, es necesario ofrecer implementaciones de código abierto y facilitar las especificaciones formales.
Opinión de GN⁺
- Este artículo explica bien la historia y el estado actual de las pruebas basadas en propiedades.
- Destaca la importancia de las pruebas basadas en estado y en paralelo, y plantea la necesidad de implementaciones de código abierto.
- Propone formas de hacer que las pruebas basadas en propiedades sean más accesibles.
- Otros proyectos con funciones similares incluyen Hypothesis (Python) y PropEr (Erlang).
- Enfatiza que al adoptar nuevas tecnologías o proyectos de código abierto se necesita capacitación y soporte.
1 comentarios
Comentarios en Hacker News
clojure.spec.alphaytest.checkfue buenahypothesisde Python porque no podía manejar conjuntos de datos grandesproptestStateModelrequiere código adicional de framework, por lo que no es eficiente