Herramienta para generar todas las combinaciones de un espacio de parámetros (para pruebas)

Supongamos que he escrito una aplicación que se puede invocar de la siguiente manera:

my_magic_app --foo=yes --bar=5003 --baz=best_baz_ever

Ahora supongamos que quiero probarlo haciendo que el rango de barras de un número a otro, sea sí o no, y baz sean todas las cadenas hasta una cierta longitud o cadenas de un diccionario determinado que tengo en un archivo. Además, no quiero todas las combinaciones, pero solo sujeto a una cierta condición (por ejemplo, la barra no puede ser superior a 5000 si foo es negativo).

Podría escribir un guión para hacer esta generación, aplicar la condición, etc., pero me preguntaba si ya existe algo así.

Requisitos:

  • Para sistemas operativos similares a Unix
  • Licencia gratuita
  • Gratis
  • Realmente no me importa si es un script o un binario
  • Se prefieren lenguajes no arcanos (por ejemplo, bash, python, perl)
Siempre terminé haciendo esto con secuencias de comandos ad-hoc, por lo que es una pregunta interesante para mí. Un par de notas rápidas: 1) tenga cuidado con el tamaño del espacio de prueba: es sorprendentemente fácil obtener una cantidad incontrolable de pruebas; 2) en general, encontrará que es mejor especificar los rangos usted mismo (foo en sí, no); 3) los resultados esperados son difíciles de generar, especialmente con condiciones como la que das (no quieres pasar de tener un problema a tener dos).
1. Sí, lo sé. Punto doloroso 3. Tengo un código para generar los resultados esperados en mi caso (y a veces no hay resultados esperados, excepto que no fallan, o los resultados son siempre los mismos), pero sí, en general, esto es un problema.
Esto se puede hacer con una lista de comprensión.
@dramzy: Estoy buscando un software existente, no un enfoque para implementar esta funcionalidad...

Respuestas (2)

El método de partición de categorías describe este tipo de generación de prueba basada en restricciones. TSLGenerator es una utilidad que puede generar pruebas para usted, dadas las restricciones. La salida tiene la forma de una especificación de prueba; son fáciles de leer, si desea desarrollar su propia forma de analizarlos en stubs o comandos de prueba unitaria.

El método y el software se describen en este módulo de un curso de posgrado de GATech.

Puede considerar una combinación de pruebas de todos los pares y pruebas de límites. La prueba de todos los pares es un método para reducir el número de vectores de prueba a aquellos que ejercitan todos los pares de combinaciones. Puede reducir en gran medida el número de casos de prueba, sin reducir apreciablemente la cobertura de la prueba. Obviamente, tendrá que satisfacer sus requisitos de prueba, pero este es realmente un gran método cuando puede usarlo. Cuando se prueban rangos de números, por lo general solo es realmente interesante verificar los límites. Por ejemplo, si una entrada puede ser 0-5000, los casos de prueba interesantes serán -1, 0, 1, 4999, 5000 y 5001.

Lo que he hecho en el pasado para las pruebas es armar un script que usa todos los pares para parámetros que tienen distintas opciones y pruebas de límites para parámetros numéricos.

No creo que pueda evitar escribir algún tipo de guión, pero ciertamente puede usar herramientas que otras personas han desarrollado. James Bach, un probador de software "famoso", ha escrito una herramienta de todos los pares que podría usar.

Si bien esta sugerencia puede (o no) ser relevante para la forma en que realizo las pruebas, todavía no es lo que pedí... Necesito probar todo el espacio. Una cuadrícula que lo cubra parcialmente podría ser relevante, pero no los extremos. Aún así, +1 por el esfuerzo.
El autor de la pregunta indicó claramente que necesitan probar TODAS las combinaciones. Ninguna herramienta puede adivinar automáticamente qué combinación no vale la pena probar, especialmente sin conocer los aspectos internos del programa probado. La herramienta que sugiere "creará pruebas que emparejen cada valor de cada una de las variables con cada valor de cada otra variable al menos una vez", lo cual no está bien.
En mi experiencia como probador de software, encuentro que todos los pares es una herramienta útil para proporcionar un alto grado de cobertura, al tiempo que reduce la cantidad de casos de prueba. La técnica es bien conocida en el mundo de las pruebas de software y he oído hablar de ella en conferencias y en libros. Sin embargo, la mayoría de los probadores con los que he trabajado no lo saben porque se les metió en el papel. Lo ofrecí como sugerencia porque es una alternativa viable en muchos casos que podrían no haber sido considerados.
Nuevamente, es justo, su experiencia es perfectamente válida.
La reducción del número de casos de prueba generalmente se realiza bajo la expectativa de que los desarrolladores de software implementen el código solo una vez. He observado demasiadas veces que el código fue copiado/pegado, lo que resultó en fallas que no esperaba, porque ya lo probé. Desde entonces, felizmente pruebo más combinaciones de las que normalmente necesito. (Trabajo en control de calidad y no estoy de acuerdo con el ISTQB en este caso) Esto se aplica a las pruebas de caja negra