Pregunta

Mantengo un programa de Python que proporciona consejos sobre ciertos temas. Lo hace aplicando un algoritmo complicado a los datos de entrada.

El código del programa se cambia regularmente, tanto para resolver errores recién encontrados como para modificar el algoritmo subyacente.

Quiero usar pruebas de regresión. El problema es que no hay forma de saber cuál es la salida "correcta" para una determinada entrada, aparte de ejecutar el programa (e incluso entonces, solo si no tiene errores).

Describo a continuación mi proceso de prueba actual. Mi pregunta es Ya sea que haya herramientas para ayudar a automatizar este proceso (y, por supuesto, si hay algún otro comentario sobre lo que estoy haciendo).

La primera vez que el programa parecía ejecutarse correctamente para todos mis casos de entrada, guardé sus salidas en una carpeta que designé para salidas "validadas". "Validado" significa que la salida es, que yo sepa, corregir una versión determinada de mi programa.

Si encuentro un error, hago los cambios que creo que lo solucionarían. Luego vuelvo a ejecutar el programa en todos los conjuntos de entrada y comparo manualmente las salidas. Cada vez que cambia la salida, hago todo lo posible para revisar informalmente esos cambios y averiguar si:

  1. Los cambios se deben exclusivamente a la corrección de errores, o
  2. Los cambios se deben, al menos en parte, a un nuevo error que introduje

En el caso 1, incremento el contador de la versión interna. Marco el archivo de salida con un sufijo igual al contador de la versión y lo muevo a la carpeta "validada". Luego cometo los cambios en el repositorio mercurial.

Si en el futuro, cuando esta versión ya no es actual, decido ramificarla, necesitaré estas salidas validadas como las "correctas" para esta versión en particular.

En el caso 2, por supuesto, trato de encontrar el error recién introducido y solucionarlo. Este proceso continúa hasta que creo que los únicos cambios versus la versión validada anterior se deben a las correcciones de errores previstas.

Cuando modifico el código para cambiar el algoritmo, sigo un proceso similar.

¿Fue útil?

Solución

Aquí está el enfoque que probablemente usaré.

  1. Haga que Mercurial administre el código, los archivos de entrada y las salidas de prueba de regresión.
  2. Comience desde una determinada revisión de los padres.
  3. Hacer y documentar (preferiblemente lo menos posible) modificaciones.
  4. Ejecutar pruebas de regresión.
  5. Revise las diferencias con la salida de la prueba de regresión de la revisión de los padres.
  6. Si estas diferencias no coinciden con las expectativas, intente ver si se introdujo un nuevo error o si las expectativas eran incorrectas. Se solucione el nuevo error y vaya a 3, o actualice las expectativas y vaya a 4.
  7. Copie la salida de las pruebas de regresión a la carpeta designada para salidas validadas.
  8. Comprometer los cambios a Mercurial (incluido el código, los archivos de entrada y los archivos de salida).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top