Имеет ли смысл тестировать с промежуточными версиями 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 - тогда тестирование нескольких версий относительно дешево. Таким образом, вы также можете получить столько информации об изменениях окружающей среды, сколько вы ожидаете увидеть "в дикой природе", насколько это возможно.