Как легко воспроизвести опубликованные результаты в моих собственных статьях, используя мой собственный код

15

Я написал программу / библиотеку, которую использовал для получения результатов в статье. (Вот и все , но мой вопрос общий.) У меня есть тесты, которые я регулярно использую ctest(для запуска требуется несколько минут). Чтобы воспроизвести некоторые таблицы или рисунки в статье, мне нужно создать скрипт или простую программу-драйвер, которая будет работать, может быть, 10 минут, иногда больше, поэтому я не хочу иметь эту часть обычного набора тестов. В то же время я хочу убедиться, что результаты статьи могут быть:

  • воспроизведено позже
  • убедитесь, что они продолжают давать те же / правильные результаты после того, как я продолжу разработку библиотеки

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

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

Лучший способ, который мне пришёл в голову, это иметь пример на Fortran (или C / C ++), который будет регулярно компилироваться (как часть библиотеки), но не запускаться в обычном тестовом наборе. Таким образом, по крайней мере, я знаю, что он компилируется нормально (и, следовательно, надеюсь, что также работает). И я протестирую несколько простых (меньших) примеров в рамках обычного набора тестов.

Каковы оптимальные способы решения этой проблемы?

Ондржей Чертик
источник
2
Отличный вопрос, моя первая реакция заключается в том, что вы должны разделить свои тесты на быстрые регрессии, которые можно быстро выполнить и выполнять перед каждым коммитом и более длинными регрессиями, которые вы хотели бы использовать в рамках непрерывной интеграции. Вы конкретно находитесь в ситуации, когда у вас есть только тесты первого сорта, и вы еще не разделили их?
Арон Ахмадиа
У меня есть много тестов, которые выполняются быстро, смотрите здесь: github.com/certik/hfsolver/tree/master/src/tests , но я не знаю, как обрабатывать фактические вычисления для статьи (например, 10 минут для каждой таблицы / цифра дает легко пару часов всего).
Ондржей Чертик
2
Запускайте длинные тесты автоматически каждую ночь (или еженедельно, ежемесячно и т. Д.), Используя сервер непрерывной интеграции. Поскольку вам не нужно обращать внимание ни на что, кроме результатов, вам будет все равно, сколько времени они займут.
Дэвид Кетчесон

Ответы:

6

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

Обновление: вышеприведенный текст был верным в 2012 году. Начиная с 2014 года, тестовый пакет сделка 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 , я правильно понял ? Таким образом, вы запускаете «обычные тесты» для каждой ревизии и «дорогие тесты» только для каждой пары ревизий?
Ондржей Чертик 26.12.12
Не совсем. Результаты дорогих тестов обычно не публикуются на сайте.
Вольфганг Бангерт
То есть вы запускаете их вручную, скажем, перед каждым выпуском? Как долго они бегут? Мне нравится ваш подход.
Ондржей Чертик 26.12.12
1
Да, вручную. Время от времени, до релизов точно. Для некоторых проектов они занимают час или больше, но поскольку они тестируют только небольшую часть библиотеки (они в основном тестируют надстройки для работы. II), не всегда стоит или возможно запускать их с каждой ревизией.
Вольфганг Бангерт
Есть ли у вас какие-либо параллельные тесты, которые можно запустить только на суперкомпьютерах, например, какие-либо масштабные тесты против p4est?
Арон Ахмадиа