Comment reproduire facilement les résultats publiés dans mes propres articles en utilisant mon propre code

15

J'ai écrit un programme / bibliothèque que j'ai utilisé pour obtenir des résultats dans un article. (Ici , il est , mais ma question est générale.) J'ai des tests que j'exécuté en utilisant régulièrement ctest(il faut quelques minutes à courir). Afin de reproduire certains tableaux ou figures de l'article, je dois construire un script ou un programme de pilote simple, qui peut durer 10 minutes, parfois plus, donc je ne veux pas avoir cette partie de la suite de tests régulière. En même temps, je veux m'assurer que les résultats de l'article peuvent être:

  • reproduit plus tard
  • assurez-vous qu'ils donnent toujours les mêmes résultats / corrects après avoir continué à développer la bibliothèque

Actuellement, j'essaie d'avoir un petit programme de pilote que j'exécute dans le cadre de la suite de tests régulière, et si je veux reproduire les résultats de l'article, je décommente quelques lignes. Bien sûr, je ne sais jamais quelles lignes exactes et si je dois modifier quelques autres paramètres afin d'obtenir précisément les mêmes résultats que dans l'article.

J'ai également essayé d'avoir un script Python qui calcule les chiffres / tableaux exacts de l'article. Un tel script cesse généralement de fonctionner après une mise à jour de la bibliothèque, car il n'est pas exécuté régulièrement (prend trop de temps).

La meilleure méthode qui m'est venue à l'esprit est d'avoir un exemple Fortran (ou C / C ++), qui sera régulièrement compilé (dans le cadre de la bibliothèque), mais pas exécuté dans une suite de tests régulière. De cette façon, au moins je sais qu'il compile bien (et donc, espérons-le, fonctionne également). Et je vais tester un exemple simple (plus petit) dans le cadre d'une suite de tests régulière.

Quels sont les moyens optimaux pour gérer ce problème?

Ondřej Čertík
la source
2
Grande question, ma première réaction est que vous devez diviser vos tests en régressions rapides pouvant être exécutées rapidement et effectuées avant chaque validation et régressions plus longues que vous souhaitez utiliser dans le cadre d'un effort d'intégration continue. Êtes-vous spécifiquement dans la situation où vous n'avez que des tests de l'ancienne variété et que vous ne les avez pas encore divisés?
Aron Ahmadia
J'ai beaucoup de tests qui s'exécutent rapidement, voir ici: github.com/certik/hfsolver/tree/master/src/tests , mais je ne sais pas comment gérer les calculs réels de l'article (par exemple 10 min pour chaque table / figure donne facilement quelques heures au total).
Ondřej Čertík
2
Exécutez les longs tests automatiquement tous les soirs (ou chaque semaine, chaque mois, etc.) à l'aide d'un serveur d'intégration continue. Puisque vous n'avez à faire attention à rien d'autre qu'aux résultats, peu vous importe le temps qu'ils prennent.
David Ketcheson

Réponses:

6

Dans deal.II, nous avons une suite de tests pilotée par un Makefile Unix standard. Il a une cible par défaut qui exécute tous les tests habituels et une cible distincte pour les tests coûteux. L'exécution de chaque test se fait à l'aide d'une règle générique, mais la cible par défaut n'appelle la règle générique que pour certains tests et la cible coûteuse l'appelle pour les tests coûteux. Parce que tout se fait à l'aide d'une règle générique, elle doit être à jour à tout moment; ce qui peut devenir obsolète ne peut être que les listes de noms de tests.

Mise à jour: Le texte ci-dessus était correct en 2012. Depuis 2014, la suite de tests deal.II est basée sur CTest, mais l'idée générale reste valable.

Wolfgang Bangerth
la source
Merci! Voici le lien vers les documents: dealii.org/7.2.0/development/testsuite.html#regression_tests et voici le résultat des "tests habituels": dealii.org/cgi-bin/regression_quick.pl et ici du "tests coûteux": dealii.org/cgi-bin/regression.pl , ai-je bien compris? Vous exécutez donc des "tests habituels" à chaque révision et des "tests coûteux" uniquement toutes les deux révisions?
Ondřej Čertík
Pas assez. Les résultats des tests coûteux ne sont généralement pas publiés sur le site Web.
Wolfgang Bangerth
Vous les exécutez donc manuellement, disons avant chaque version? Combien de temps faut-il pour courir? J'aime ton approche.
Ondřej Čertík
1
Oui, manuellement. De temps en temps, avant les sorties à coup sûr. Pour certains projets, cela prend une heure ou plus, mais comme ils ne testent qu'une petite partie de la bibliothèque (ils testent principalement des projets complémentaires pour traiter.II), il n'est pas toujours utile ou possible de les exécuter à chaque révision.
Wolfgang Bangerth
Avez-vous des tests parallèles qui ne peuvent s'exécuter que sur des superordinateurs, par exemple, des tests à grande échelle contre p4est?
Aron Ahmadia