tipos tecnicas software que pruebas prueba plan metodologias istqb ejemplos casos caso unit-testing parsing

unit testing - tecnicas - Generación de casos de prueba de gramática BNF



tipos de pruebas de software (4)

¿Alguien tiene alguna experiencia con una herramienta que genera cadenas de prueba a partir de una gramática BNF que luego podría alimentar a una prueba unitaria?


Si, por ejemplo, está desarrollando un compilador, es probable que tenga un tipo de datos de árbol de sintaxis abstracta. Si es así, entonces podría escribir una función para generar un AST aleatorio; con eso, puede imprimirlo en una cadena y alimentarlo a su prueba unitaria. Se garantiza que es un programa válido de esta manera, desde que comenzó con su AST.

Si estuviera escribiendo un compilador en Haskell o ML, esto es lo que haría, usando QuickCheck .


He hecho exactamente lo que hazzen comentado (usando un DSL incorporado en un lenguaje de scripting). Fue un ejercicio ligeramente interesante, pero a excepción de las pruebas más básicas de, por ejemplo, análisis sintáctico, no fue terriblemente útil. La mayoría de mis pruebas más interesantes tienen que ver con relaciones más sofisticadas de las que uno puede expresar fácilmente en BNF (o cualquier otra gramática libre de contexto).


No tengo una respuesta a la pregunta de la herramienta, pero diré que es bastante fácil en cualquier lenguaje de procesamiento de texto (perl / python / etc) generar oraciones aleatorias a partir de una gramática BNF, y un poco más detallado en un lenguaje más grande ( Java / C / etc), pero no debería ser demasiado difícil de ejecutar el suyo.

El problema con esto, por supuesto, es que solo puede generar cadenas en la gramática, y a menos que su gramática sea muy simple, el espacio de prueba es infinitamente grande.


Gramtest es una de esas herramientas que puede generar cadenas a partir de gramáticas BNF arbitrarias definidas por el usuario. Puede leer más detalles sobre el algoritmo detrás de Gramtest aquí y algunos consejos prácticos sobre la herramienta están disponibles aquí .