Имеет ли смысл тестировать с промежуточными версиями Ruby?

Если проект проходит тестирование в Ruby 2.0.0-p648 и Ruby 2.3.1, имеет ли смысл также проводить тестирование с такими версиями, как 2.1.8 и 2.2.3?

Существовали ли какие-либо языковые функции, которые работали в Ruby 2.0 и Ruby 2.3, но временно не работали или работали иначе, например, в Ruby 2.2?

1 ответ

Решение

Вы должны протестировать свой код для сред, в которых вы намереваетесь его использовать. Версия на языке Ruby может варьироваться. Вы также можете подумать о тестировании на JRuby и Rubinius, если ваш код должен его поддерживать - например, он предоставляется как публичный гем.

Логично, что тестирование в самых ранних и последних версиях должно охватывать большинство сценариев сбоев в отношении языковых возможностей (хотя не обязательно все языковые ошибки, поскольку могут быть введены новые). Насколько я знаю, не было ни одной функции Ruby, которая была намеренно добавлена ​​или удалена в одной версии, а затем это решение было отменено в более поздней версии. Если только: Возможно, в вашем производственном коде вы обнаруживаете существование функции, а затем используете ее полностью - в этом случае может произойти сбой промежуточной версии Ruby, которая имеет функцию, но не в ее последнем состоянии.

Могут быть и другие предостережения, и с философской точки зрения, когда вы начинаете тестирование, вы хотите избежать слишком логичного "это должно работать, потому что..." мышления. Цель тестирования состоит в том, чтобы продемонстрировать, что ваш код не терпит неудачу такими способами, которые вы уже рассмотрели (что ж, в этом есть большая глубина, но ответ будет слишком длинным, если он углубится в принципы тестирования). Если вы хотите объявить "работает во всех версиях Ruby MRI от 2.0.0 до 2.3.1", тогда вам будет удобнее делать это заявление, если вы действительно его проверили. Фактически, когда я делаю такое заявление в публичном месте, я обычно просто говорю что-то более близкое к необработанному факту - "протестировано в версиях 2.0.0, 2.1.4 и 2.3.1".

Очевидно, что есть убывающие доходы. Если у вас нет проблем в 2.1.9, очень маловероятно, что у вас будут проблемы в 2.1.10 - в какой-то момент вам будет стоить дороже проверить каждую незначительную вариацию, даже просто посмотреть на результаты теста, чем выгоду дополнительного покрытия.

Обычный ответ на эту проблему состоит в том, чтобы протестировать столько вариантов, сколько может выдержать ваша автоматизированная тестовая среда, и вы можете быть обеспокоены настройкой и обслуживанием. Если использование нескольких версий Ruby выполняется для вас параллельно вашим поставщиком услуг тестирования - например, вы используете Travis - тогда тестирование нескольких версий относительно дешево. Таким образом, вы также можете получить столько информации об изменениях окружающей среды, сколько вы ожидаете увидеть "в дикой природе", насколько это возможно.

Другие вопросы по тегам