Como reproduzir facilmente resultados publicados em meus próprios artigos usando meu próprio código

15

Eu escrevi um programa / biblioteca que usei para obter resultados em um artigo. (Aqui está , mas minha pergunta é geral.) Eu tenho testes que eu executo regularmente usando ctest(leva alguns minutos para executar). Para reproduzir algumas tabelas ou figuras no artigo, eu tenho que construir um script ou um programa de driver simples, que execute talvez 10 minutos, às vezes mais, para que eu não queira ter essa parte do conjunto de testes regular. Ao mesmo tempo, quero garantir que os resultados do artigo possam ser:

  • reproduzido mais tarde
  • verifique se eles ainda fornecem os mesmos / resultados corretos depois de eu continuar desenvolvendo a biblioteca

Atualmente, tento ter um pequeno programa de driver que execute como parte do conjunto de testes regular e, se quiser reproduzir os resultados do artigo, descomente algumas linhas. Obviamente, nunca sei quais linhas exatas e se preciso ajustar alguns outros parâmetros para obter exatamente os mesmos resultados que no artigo.

Eu também tentei ter um script Python que calcula as figuras / tabelas exatas do artigo. Esse script geralmente para de funcionar após uma atualização na biblioteca, porque não está sendo executado regularmente (leva muito tempo).

O melhor método que me ocorreu é ter um exemplo de Fortran (ou C / C ++), que será compilado regularmente (como parte da biblioteca), mas não executado no conjunto de testes regular. Dessa forma, pelo menos eu sei que ele compila bem (e, portanto, esperamos que também seja executado). E testarei um exemplo simples (menor) como parte de um conjunto de testes regular.

Quais são as melhores maneiras de lidar com esse problema?

Ondřej Čertík
fonte
2
Ótima pergunta, minha primeira reação é que você deve dividir seus testes em regressões rápidas que podem ser executadas rapidamente e são realizadas antes de cada confirmação e regressões mais longas que você deseja usar como parte de um esforço de integração contínuo. Você está especificamente na situação em que você só tem testes da variedade anterior e ainda não os dividiu?
Aron Ahmadia
Tenho muitos testes que são executados rapidamente, veja aqui: github.com/certik/hfsolver/tree/master/src/tests , mas não sei como lidar com os cálculos reais do artigo (por exemplo, 10 minutos para cada tabela / figura dá facilmente duas horas no total).
Ondřej Čertík
2
Execute os testes longos automaticamente todas as noites (ou semanalmente, mensalmente etc.) usando um servidor de integração contínua. Como você não precisa prestar atenção em nada além dos resultados, não se importa com o tempo que eles levam.
David Ketcheson

Respostas:

6

Em deal.II, temos um testinguite que é dirigido por um Unix Makefile comum. Ele tem um destino padrão que executa todos os testes usuais e um destino separado para testes caros. A execução de cada teste é feita usando uma regra genérica, mas o destino padrão chama a regra genérica apenas para determinados testes e o destino caro a chama para os testes caros. Como tudo é feito usando uma regra genérica, ela deve estar atualizada a qualquer momento; o que pode ficar desatualizado pode ser apenas a lista de nomes de testes.

Atualização: o texto acima estava correto em 2012. Desde 2014, o deal.II testsuite é baseado no CTest, mas a ideia geral permanece válida.

Wolfgang Bangerth
fonte
Obrigado! Aqui está o link para os documentos: dealii.org/7.2.0/development/testsuite.html#regression_tests e aqui está o resultado dos "testes usuais": dealii.org/cgi-bin/regression_quick.pl e aqui o "testes caros": dealii.org/cgi-bin/regression.pl , eu acertei ? Então você executa "testes usuais" em cada revisão e "testes caros" apenas a cada duas revisões?
Ondřej Čertík 26/12/12
Nem tanto. Os resultados de testes caros geralmente não são publicados no site.
Wolfgang Bangerth
Então você os executa manualmente, digamos antes de cada lançamento? Quanto tempo eles levam para correr? Eu gosto da sua abordagem.
Ondřej Čertík
11
Sim manualmente. De vez em quando, antes dos lançamentos, com certeza. Para alguns projetos, eles levam uma hora ou mais, mas porque testam apenas uma pequena parte da biblioteca (geralmente testam projetos complementares para lidar.II) nem sempre vale a pena ou é possível executá-los com todas as revisões.
Wolfgang Bangerth
Você tem testes paralelos que só podem ser executados em supercomputadores, por exemplo, testes em larga escala p4est?
Aron Ahmadia