Як легко відтворити опубліковані результати у власних статтях, використовуючи власний код


15

Я написав програму / бібліотеку, за допомогою якої я отримав результати у статті. (Тут є , але моє запитання взагалі.) У мене є тести , які я регулярно запускати з допомогою ctest(це займає кілька хвилин , щоб бігти). Для відтворення деяких таблиць або фігур у статті я повинен створити сценарій або просту програму драйверів, яка працює, можливо, 10 хвилин, а іноді і більше, тому я не хочу мати цю частину регулярного тестового набору. Водночас я хочу переконатися, що результати статті можуть бути:

  • відтворено пізніше
  • переконайтесь, що вони все ще дають ті самі / правильні результати після того, як я продовжую розвивати бібліотеку

В даний час я намагаюся створити невелику програму драйверів, яку я запускаю в рамках регулярного тестового набору, і якщо я хочу відтворити результати статті, я коментую деякі рядки. Звичайно, я ніколи не знаю, які саме лінії і якщо мені доведеться налаштувати деякі інші параметри, щоб отримати точно такі ж результати, як у статті.

Я також спробував створити сценарій Python, який обчислює точні цифри / таблиці із статті. Такий сценарій, як правило, припиняє роботу після оновлення в бібліотеці, оскільки він не запускається регулярно (займає занадто багато часу).

Найкращий метод, який мені прийшов у голову, - це мати приклад Fortran (або C / C ++), який буде регулярно збиратися (як частина бібліотеки), але не працювати в регулярному тестовому наборі. Таким чином, я, принаймні, знаю, що він складає добре (і, таким чином, сподіваюся, також працює). І я перевірю простий (менший) приклад як частину звичайного тестового набору.

Які оптимальні способи вирішити цю проблему?


2
Відмінне запитання, моя перша реакція полягає в тому, що ви повинні розділити свої тести на швидкі регресії, які можна запустити швидко і виконувати перед кожним вчиненням і більш тривалими регресіями, які ви хотіли б використовувати як частину безперервної інтеграції. Ви конкретно опиняєтесь у ситуації, коли у вас є лише тести колишнього сорту та ще не поділили їх?
Арон Ахмадія

У мене дуже багато тестів, які швидко запускаються, дивіться тут: github.com/certik/hfsolver/tree/master/src/tests , але я не знаю, як обробити фактичні розрахунки для статті (наприклад, 10 хв для кожної таблиці / цифра дає легко всього пару годин).
Ondřej Čertík

2
Проводьте довгі тести автоматично щоночі (або щотижня, щомісяця тощо) за допомогою сервера безперервної інтеграції. Оскільки вам не доведеться звертати увагу ні на що, окрім результатів, вам буде все одно, як довго вони займуться.
Девід Кетчесон

Відповіді:


6

У deal.II у нас є тестовий набір, який управляється звичайним Unix Makefile. У ньому є ціль за замовчуванням, яка виконує всі звичні тести, і окрема ціль для дорогих тестів. Запуск кожного тесту виконується за допомогою загального правила, але ціль за замовчуванням викликає загальне правило лише для певних тестів, а дорога цільова називає його для дорогих тестів. Оскільки це все робиться за допомогою загального правила, воно повинно бути оновленим у будь-який момент часу; що може застаріти, можуть бути лише списки назв тестів.

Оновлення: Текст вище був правильним у 2012 році. З 2014 року тестовий набір deal.II заснований на CTest, але загальна ідея залишається актуальною.


Спасибі! Ось посилання на документи: dealii.org/7.2.0/development/testsuite.html#regression_tests і ось результат "звичайних тестів": dealii.org/cgi-bin/regression_quick.pl і тут "дорогі тести": dealii.org/cgi-bin/regression.pl , я правильно зрозумів? Отже, ви виконуєте "звичайні тести" на кожній редакції та "дорогі тести" лише на кожну пару змін?
Ondřej Čertík

Не зовсім. Результати дорогих тестів зазвичай не публікуються на веб-сайті.
Вольфганг Бангерт

Отже, ви запускаєте їх вручну, скажімо перед кожним випуском? Скільки часу потрібно пробігти? Мені подобається ваш підхід.
Ondřej Čertík

1
Так, вручну. Раз у раз, перш ніж виходити напевно. Для деяких проектів вони займають годину або більше, але оскільки вони перевіряють лише невелику частину бібліотеки (вони в основному тестують додаткові проекти для вирішення. II), не завжди варто або можливо запускати їх з кожною редакцією.
Вольфганг Бангерт

Чи є у вас паралельні тести, які можуть працювати лише на суперкомп'ютерах, наприклад, будь-які масштабні тести проти p4est?
Арон Ахмадія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.