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


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?
— Арон Ахмадиа
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.