So reproduzieren Sie auf einfache Weise veröffentlichte Ergebnisse in meinen eigenen Artikeln mithilfe meines eigenen Codes

15

Ich habe ein Programm / eine Bibliothek geschrieben, mit der ich in einem Artikel Ergebnisse erzielt habe. (Hier ist , aber meine Frage ist allgemein.) Ich habe Tests , dass ich regelmäßig laufen mit ctest(es dauert ein paar Minuten zu laufen). Um einige Tabellen oder Abbildungen im Artikel zu reproduzieren, muss ich ein Skript oder ein einfaches Treiberprogramm erstellen, das möglicherweise 10 Minuten, manchmal auch länger, ausgeführt wird, sodass ich diesen Teil der regulären Testsuite nicht haben möchte. Gleichzeitig möchte ich sicherstellen, dass die Ergebnisse des Artikels:

  • später wiedergegeben
  • Stellen Sie sicher, dass sie immer noch die gleichen / richtigen Ergebnisse liefern, nachdem ich die Bibliothek weiterentwickle

Derzeit versuche ich, ein kleines Treiberprogramm zu haben, das ich als Teil der regulären Testsuite ausführe. Wenn ich die Ergebnisse des Artikels reproduzieren möchte, kommentiere ich einige Zeilen dort aus. Natürlich weiß ich nie, welche Zeilen genau sind und ob ich andere Parameter anpassen muss, um genau die gleichen Ergebnisse wie im Artikel zu erzielen.

Ich habe auch versucht, ein Python-Skript zu haben, das die genauen Zahlen / Tabellen aus dem Artikel berechnet. Ein solches Skript funktioniert normalerweise nach einem Update der Bibliothek nicht mehr, da es nicht regelmäßig ausgeführt wird (zu lange dauert).

Die beste Methode, die mir in den Sinn gekommen ist, ist ein Fortran (oder C / C ++) - Beispiel, das regelmäßig kompiliert wird (als Teil der Bibliothek), aber nicht in einer regulären Testsuite ausgeführt wird. Auf diese Weise weiß ich zumindest, dass es gut kompiliert (und somit hoffentlich auch läuft). Und ich werde ein einfaches (kleineres) Beispiel als Teil einer regulären Testsuite testen.

Wie kann dieses Problem optimal gelöst werden?

Ondřej Čertík
quelle
2
Gute Frage, meine erste Reaktion ist, dass Sie Ihre Tests in schnelle Regressionen aufteilen sollten, die schnell ausgeführt werden können und vor jedem Commit und vor längeren Regressionen durchgeführt werden, die Sie als Teil einer kontinuierlichen Integrationsbemühung verwenden möchten. Befinden Sie sich speziell in der Situation, dass Sie nur Tests der früheren Sorte haben und diese noch nicht geteilt haben?
Aron Ahmadia
Ich habe viele Tests, die schnell laufen, siehe hier: github.com/certik/hfsolver/tree/master/src/tests , aber ich weiß nicht, wie ich mit den tatsächlichen Berechnungen für den Artikel umgehen soll (z. B. 10 Minuten für jede Tabelle) / Zahl gibt leicht paar Stunden insgesamt).
Ondřej Čertík
2
Führen Sie die langen Tests automatisch jede Nacht (oder wöchentlich, monatlich usw.) mit einem Continuous Integration Server aus. Da Sie nur auf die Ergebnisse achten müssen, ist es Ihnen egal, wie lange sie dauern.
David Ketcheson

Antworten:

6

In deal.II haben wir eine Testsuite, die von einem regulären Unix-Makefile gesteuert wird. Es hat ein Standardziel, das alle üblichen Tests ausführt, und ein separates Ziel für teure Tests. Die Ausführung jedes Tests erfolgt mit einer generischen Regel, aber das Standardziel ruft die generische Regel nur für bestimmte Tests auf und das teure Ziel ruft sie für die teuren Tests auf. Da dies alles nach einer allgemeinen Regel erfolgt, muss es zu einem bestimmten Zeitpunkt auf dem neuesten Stand sein. Was möglicherweise nicht mehr aktuell ist, können nur die Namen der Tests sein.

Update: Der obige Text war im Jahr 2012 korrekt. Seit 2014 basiert die deal.II-Testsuite auf CTest, die allgemeine Idee bleibt jedoch gültig.

Wolfgang Bangerth
quelle
Vielen Dank! Hier ist der Link zu den Dokumenten: dealii.org/7.2.0/development/testsuite.html#regression_tests und hier ist das Ergebnis der "üblichen Tests": dealii.org/cgi-bin/regression_quick.pl und hier der "teure Tests": dealii.org/cgi-bin/regression.pl , habe ich es richtig verstanden? Sie führen also "normale Tests" für jede Revision und "teure Tests" nur für einige Revisionen durch?
Ondřej Čertík
Nicht ganz. Ergebnisse für teure Tests werden normalerweise nicht auf der Website veröffentlicht.
Wolfgang Bangerth
Sie führen sie also vor jedem Release manuell aus. Wie lange brauchen sie, um zu rennen? Ich mag deine Herangehensweise.
Ondřej Čertík
1
Ja, manuell. Hin und wieder, vor Veröffentlichungen sicher. Bei einigen Projekten dauern sie eine Stunde oder länger, aber da sie nur einen kleinen Teil der Bibliothek testen (meistens testen sie Add-On-Projekte, um sich zu befassen. II), lohnt es sich oder ist es nicht immer möglich, sie bei jeder Revision auszuführen.
Wolfgang Bangerth
Haben Sie parallele Tests, die nur auf Supercomputern ausgeführt werden können, z. B. Tests in großem Maßstab p4est?
Aron Ahmadia