Cómo reproducir fácilmente los resultados publicados en mis propios artículos utilizando mi propio código

15

Escribí un programa / biblioteca que usé para obtener resultados en un artículo. (Aquí está , pero mi pregunta es general). Tengo pruebas que ejecuto regularmente ctest(me toma unos minutos ejecutarlas). Para reproducir algunas tablas o figuras en el artículo, tengo que construir un script o un programa de controlador simple, que ejecute unos 10 minutos, a veces más, por lo que no quiero tener esta parte del conjunto de pruebas regular. Al mismo tiempo, quiero asegurarme de que los resultados del artículo puedan ser:

  • reproducido más tarde
  • asegúrese de que sigan dando los mismos resultados / correctos después de seguir desarrollando la biblioteca

Actualmente trato de tener un pequeño programa de controlador que ejecuto como parte del conjunto de pruebas regular, y si quiero reproducir los resultados del artículo, descomento algunas líneas allí. Por supuesto, nunca sé qué líneas exactas y si tengo que ajustar algunos otros parámetros para obtener exactamente los mismos resultados que en el artículo.

También intenté tener un script de Python que calcule las figuras / tablas exactas del artículo. Dicha secuencia de comandos generalmente deja de funcionar después de una actualización de la biblioteca, porque no se ejecuta de forma regular (lleva demasiado tiempo).

El mejor método que se me ocurrió es tener un ejemplo de Fortran (o C / C ++), que se compilará regularmente (como parte de la biblioteca), pero no se ejecutará en el conjunto de pruebas regular. De esa manera, al menos sé que se compila bien (y con suerte también se ejecuta). Y probaré algún ejemplo simple (más pequeño) como parte de un conjunto de pruebas regular.

¿Cuáles son las formas óptimas de manejar este problema?

Ondřej Čertík
fuente
2
Gran pregunta, mi primera reacción es que debe dividir sus pruebas en regresiones rápidas que puedan ejecutarse rápidamente y que se realicen antes de cada confirmación y regresiones más largas que desee utilizar como parte de un esfuerzo de integración continua. ¿Está específicamente en la situación en la que solo tiene pruebas de la variedad anterior y aún no las ha dividido?
Aron Ahmadia
Tengo muchas pruebas que se ejecutan rápidamente, vea aquí: github.com/certik/hfsolver/tree/master/src/tests , pero no sé cómo manejar los cálculos reales del artículo (por ejemplo, 10 minutos para cada tabla / figura da fácilmente un par de horas en total).
Ondřej Čertík
2
Ejecute las pruebas largas automáticamente todas las noches (o semanalmente, mensualmente, etc.) utilizando un servidor de integración continua. Como no tiene que prestar atención a nada más que a los resultados, no le importará cuánto tiempo tardan.
David Ketcheson

Respuestas:

6

En deal.II, tenemos un paquete de prueba que es manejado por un Unix Makefile regular. Tiene un objetivo predeterminado que ejecuta todas las pruebas habituales y un objetivo separado para pruebas costosas. La ejecución de cada prueba se realiza mediante una regla genérica, pero el objetivo predeterminado llama a la regla genérica solo para ciertas pruebas y el objetivo costoso lo llama para las pruebas costosas. Como todo se hace utilizando una regla genérica, debe estar actualizado en cualquier momento; lo que puede quedar desactualizado solo puede ser la lista de nombres de pruebas.

Actualización: el texto anterior era correcto en 2012. Desde 2014, el paquete de pruebas deal.II se basa en CTest, pero la idea general sigue siendo válida.

Wolfgang Bangerth
fuente
¡Gracias! Aquí está el enlace a los documentos: dealii.org/7.2.0/development/testsuite.html#regression_tests y aquí está el resultado de las "pruebas habituales": dealii.org/cgi-bin/regression_quick.pl y aquí del "pruebas costosas": dealii.org/cgi-bin/regression.pl , ¿lo hice bien? ¿Entonces ejecuta "pruebas habituales" en cada revisión y "pruebas costosas" solo cada dos revisiones?
Ondřej Čertík
No exactamente. Los resultados de las pruebas costosas no suelen publicarse en el sitio web.
Wolfgang Bangerth
Entonces, ¿los ejecutas manualmente, digamos antes de cada lanzamiento? ¿Cuánto tardan en correr? Me gusta tu enfoque.
Ondřej Čertík
1
Si, manualmente. De vez en cuando, antes de los lanzamientos, seguro. Para algunos proyectos toman una hora o más, pero debido a que solo prueban una pequeña parte de la biblioteca (en su mayoría prueban proyectos complementarios para tratar. II) no siempre vale la pena o es posible ejecutarlos con cada revisión.
Wolfgang Bangerth
¿Tiene alguna prueba paralela que solo pueda ejecutarse en supercomputadoras, por ejemplo, alguna prueba a gran escala en contra p4est?
Aron Ahmadia