Come riprodurre facilmente i risultati pubblicati nei miei articoli usando il mio codice


15

Ho scritto un programma / libreria che ho usato per ottenere risultati in un articolo. (Qui è , ma la mia domanda è generale.) Ho le prove che ho eseguito regolarmente utilizzando ctest(ci vogliono pochi minuti per l'esecuzione). Per riprodurre alcune tabelle o figure nell'articolo, devo costruire uno script o un semplice programma driver, che dura forse 10 minuti, a volte di più, quindi non voglio avere questa parte della normale suite di test. Allo stesso tempo, voglio assicurarmi che i risultati dell'articolo possano essere:

  • riprodotto più tardi
  • assicurarsi che continuino a fornire gli stessi / corretti risultati dopo che continuo a sviluppare la libreria

Attualmente provo ad avere un piccolo programma driver che eseguo come parte della normale suite di test, e se voglio riprodurre i risultati dell'articolo, rimuovo il commento ad alcune righe. Certo, non so mai quali linee esatte e se devo modificare alcuni altri parametri per ottenere esattamente gli stessi risultati dell'articolo.

Ho anche provato ad avere uno script Python che calcola le cifre / tabelle esatte dell'articolo. Uno script di questo tipo in genere smette di funzionare dopo un aggiornamento della libreria, perché non viene eseguito regolarmente (richiede troppo tempo).

Il metodo migliore che mi è venuto in mente è di avere un esempio Fortran (o C / C ++), che verrà regolarmente compilato (come parte della libreria), ma non eseguito in una normale suite di test. In questo modo, almeno so che si compila bene (e quindi spero anche che funzioni). E testerò alcuni semplici esempi (più piccoli) come parte di una normale suite di test.

Quali sono i modi ottimali per gestire questo problema?


2
Ottima domanda, la mia prima reazione è che dovresti dividere i tuoi test in regressioni rapide che possono essere eseguite rapidamente e vengono eseguite prima di ogni commit e regressioni più lunghe che vorresti utilizzare come parte di uno sforzo di integrazione continua. Sei specificamente nella situazione in cui hai solo test della varietà precedente e non li hai ancora divisi?
Aron Ahmadia,

Ho molti test che vengono eseguiti rapidamente, vedi qui: github.com/certik/hfsolver/tree/master/src/tests , ma non so come gestire i calcoli effettivi per l'articolo (ad esempio 10 minuti per ogni tabella / figura dà facilmente un paio d'ore in totale).
Ondřej Čertík,

2
Esegui i test lunghi automaticamente di notte (o settimanalmente, mensilmente, ecc.) Utilizzando un server di integrazione continua. Dal momento che non devi prestare attenzione a nient'altro che ai risultati, non ti importa quanto tempo impiegano.
David Ketcheson,

Risposte:


6

In deal.II, abbiamo una suite di test che è guidata da un normale Makefile Unix. Ha un target predefinito che esegue tutti i normali test e un target separato per test costosi. L'esecuzione di ciascun test viene eseguita utilizzando una regola generica ma la destinazione predefinita chiama la regola generica solo per determinati test e la destinazione costosa la chiama per i test costosi. Poiché è tutto fatto utilizzando una regola generica, deve essere aggiornato in qualsiasi momento; ciò che può non essere aggiornato può essere solo l'elenco dei nomi dei test.

Aggiornamento: il testo sopra riportato è stato corretto nel 2012. Dal 2014, l'affare.II testing suite si basa su CTest, ma l'idea generale rimane valida.


Grazie! Ecco il link ai documenti: dealii.org/7.2.0/development/testsuite.html#regression_tests ed ecco il risultato dei "soliti test": dealii.org/cgi-bin/regression_quick.pl e qui del "test costosi": dealii.org/cgi-bin/regression.pl , ho capito bene? Quindi esegui "test abituali" su ogni revisione e "test costosi" solo ogni paio di revisioni?
Ondřej Čertík,

Non proprio. I risultati per test costosi non vengono generalmente pubblicati sul sito Web.
Wolfgang Bangerth,

Quindi li esegui manualmente, diciamo prima di ogni versione? Quanto tempo impiegano a correre? Mi piace il tuo approccio.
Ondřej Čertík,

1
Sì, manualmente. Di tanto in tanto, prima delle versioni di sicuro. Per alcuni progetti richiedono un'ora o più, ma poiché testano solo una piccola parte della libreria (per lo più testano i progetti aggiuntivi da trattare.II) non sempre vale o è possibile eseguirli ad ogni revisione.
Wolfgang Bangerth,

Hai dei test paralleli che possono essere eseguiti solo su supercomputer, ad esempio test su larga scala contro p4est?
Aron Ahmadia,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.