Выбор подходящего инструмента для тестирования JavaScript |
20.03.2018 11:44 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Автор: Гойко Адзич (Gojko Adzic) Оригинал статьи: http://gojko.net/2018/02/25/javascript-testing-tools.html Перевод: Ольга Алифанова Как выбрать инструмент в экосистеме, которая генерирует фреймворки быстрее, чем плодится зерг, и убивает их с энтузиазмом Дарвина на амфетаминах? JavaScript, возможно, неоптимален для многих команд, но для большей части нашей отрасли он неизбежное зло. StackOverflow оценивает его как наиболее популярный язык программирования в течение последних пяти лет. Лет десять назад тестирование компонентов JavaScript шло сбоку-припеку и отдавалось на ручное тестирование. Сегодня это уже не побочная платформа, крутящая веб-виджеты, а ключевая часть потока бизнес-операций. Это означает, что большинству команд нужно очень серьезно подходить к вопросу тестирования JavaScript. Недавно я проводил опрос с целью узнать о предпочтениях и опыте разработчиков в разрезе JavaScript-тестирования. Типичная для всей экосистемы тирания выбора была довольно очевидной. Я получил 683 ответа, и оказалось, что люди пользуются более чем 50 фреймворками тест-автоматизации. При такой сборной солянке ни у кого нет времени на детальное исследование всех вариантов. Однако широта выбора также вызывает вопрос, нет ли в природе чего-то лучшего, нежели то, что мы сейчас используем. Как же выбрать правильные инструменты для так часто меняющегося фреймворка? Платформа развивается с такой скоростью, что инструменты устаревают за несколько лет, если их не поддерживает активное сообщество. Учитывая, что инструменты и фреймворки JavaScript живут меньше бабочек, наилучшим выбором будет инструмент с активным сообществом вокруг него. Теоретически это отражается в рейтингах популярности. Популярные инструменты значительно облегчают передачу знаний и вовлечение людей в разработку – как для коммерческих проектов, так и для работы над открытым исходным кодом. Однако популярность сама по себе – это не лучший критерий выбора. Из-за сурового дарвинизма в среде инструментов JavaScript те, кто существует дольше, будут, скорее всего, популярнее молодых инструментов. В то же самое время экосистема быстро развивается, и более новые инструменты пытаются покрыть более современные варианты использования и учесть недавние изменения платформы. В своем опросе я попросил людей оценить их опыт работы с инструментами. Некоторые вопросы рассматривали процессные выгоды – например, уверенность в частых релизах и предотвращении багов. Другие вопросы касались удобства использования – легкости работы с инструментами и простоту поддержки и понимания тест-кейсов. Комбинированные оценки этой группы вопросов неплохо демонстрируют уровень удовлетворенности инструментом. Конечно, процессные выгоды больше зависят от содержания кейсов, нежели от инструментов как таковых, однако большая разница в оценках по этому параметру может означать, что инструмент не подходит для какого-то ключевого рабочего потока. С этой точки зрения хорошим выбором будет инструмент, который:
Немного о точностиПеред тем, как перейти к цифрам, расскажу о точности данных. Для 683 ответов и с учетом последней оценки количества разработчиков в мире погрешность результатов опроса – 4% с 95% уровнем уверенности в них. Также стоит отметить, что вопросы о выгодах и удобстве использования формулировались так, что люди оценивали картину целиком, а не отдельный инструмент, что важно в ситуациях комбинации нескольких инструментов. Оригинальное исследование также содержало вопросы, касающиеся побочного инструментария – к примеру, средств запуска в браузерах и платформ непрерывной интеграции. Если вы хотите покопаться в данных или увидеть ответы на другие вопросы, скачайте результаты полностью. Наиболее популярные инструментыЕсли рассматривать популярность, то можно выделить тройку лидеров. Первые два инструмента не удивят никого работающего в отрасли больше пары лет, но бронзовая медаль была довольно неожиданной: Вот как пользователи оценили свой опыт работы с тройкой лидеров:
Mocha слегка выигрывает в плане позитивного влияния на процесс разработки, но прочие инструменты ушли недалеко – это означает, что, скорее всего, у тройки лидеров нет особых проблем. Jest лидирует по удобству использования – незначительно по сравнению с Mocha, но серьезно выигрывая у Jasmine. Прочие инструменты куда менее популярны. Внимательные читатели заметят, что проценты в сумме дают больше ста – многие команды пользуются несколькими инструментами (мы поговорим об этом подробно чуть позже). С другой стороны, примерно 12% респондентов вообще не пользуются инструментами автоматизации тестирования JavaScript-кода! Если убрать ответы команд, пользующихся несколькими инструментами, ранжирование не изменится:
Взрыв популярности Jest вызван, возможно, быстрым взлетом React: у них один и тот же источник. Согласно опросу, 80% пользователей Jest также пользуются React. Конечно, тип ПО, над которым вы работаете, очень значим для выбора инструментария. В области JavaScript это часто тесно связано с фреймворком фронт-энда. Вот список фрейморков, которыми пользуются респонденты: Вот как изменились цифры, если сфокусироваться на популярных типах приложений: ReactПримерно 43% респондентов используют React в работе. Jest и Mocha примерно одинаково популярны в этом случае, но Jest лидирует по удобству использования при тестировании React-приложений:
AngularОколо 34% респондентов пользуются той или иной версией Angular. В разработке Angular Jest исчезает с радаров, а бронзу берет другой инструмент: Cucumber JS. Jasmine – наиболее популярный вариант. Пользователи Cucumber выше оценивают его настройку, но в целом выводы по этим различиям делать рановато – мне понадобится больше данных, прежде чем что-либо тут
Приложения бэкэнда20% ответивших работают только с бэкэндом. К сожалению, тут цифрам уже нельзя на сто процентов доверять, но Mocha кажется значительнее популярнее остальных инструментов, и ее лучше оценивают. Прежде чем делать выводы, мне понадобится больше данных – возможно, вы сможете поучаствовать?
Комбинации инструментовКак я уже говорил, цифры в сумме дают больше ста процентов, потому что множество команд пользуется несколькими инструментами. Всего половина респондентов пользуется одним-единственным. Меня очень удивили результаты по популярным комбинациям:
Наиболее популярная комбинация – это, по всей видимости, Jasmine и Mocha. Это любопытно, потому что оба они решают одну и ту же проблему. Могу только предположить, что это связано с тем, что вначале люди пользовались одним из них, а потом подключили другой, и разные части приложения покрыты разными инструментами. Другой вариант (основанный на предыдущих наблюдениях за бэкэнд-тестированием и Angular) – это использование Mocha для бэкэнда, а Jasmine для фронтэнда. Однако это не самый интересный вывод из таблицы комбинирования инструментов. Смотрите, какая картина вырисовывается, если проранжировать инструменты по процессным выгодам: Cucumber JS сам по себе недостаточно популярен для тройки лидеров, но комбинация Cucumber с одним из более популярных инструментов, видимо, сильно влияет на предотвращение багов и уверенность в релизе. Cucumber + Mocha набрали 74% по шкале выгоды – выше, чем любой изолированный инструмент или любая другая комбинация. Похожая картина наблюдается при ранжировании по удобству использования: В плане поддержки, создания и понимания автотестов Cucumber и Jest совместно выигрывают с большим отрывом. Они набрали 70% - больше, чем любой отдельный инструмент и любая комбинация. ВыводыМы не пользуемся React, поэтому лично я раньше не рассматривал Jest, однако результаты опроса заставят меня подумать дважды, выбирая инструмент для последующих проектов. Jest выглядит как инструмент более общего назначения – 20% его пользователей не используют React. Этот инструмент довольно молод, но, учитывая корпоративную поддержку Facebook, он, скорее всего, метит в долгожители. Другой интересный вывод – комбинация Cucumber с любым популярным инструментом юнит-тестов повышает общий рейтинг значительным образом. Предположу, что Cucumber решает проблемы, отличающиеся от задач Jasmine, Mocha и Jest. Тройка наиболее популярных инструментов рассчитана на разработчиков, а Cucumber – на кросс-функциональную работу и взгляд на качество с более высокого уровня. Возможно, вынос более высокоуровневых тестов за рамки инструмента, ориентированного на разработчиков делает обе эти части чище и проще для работы. Многие ошибочно связывают Cucumber с тестированием интерфейса на уровне браузера – однако этот инструмент очень хорош для извлечения бизнес-сценариев, которые могут валидироваться доменными экспертами, поэтому он отлично подходит и для бэкэнда. Я делаю вывод, что комбинация Jest и Cucumber дает наилучший баланс между процессными выгодами и удобством использования. Если вы начинаете новый проект с чистого листа, это кажется неплохим выбором фреймворка. Сразу следом идут Mocha + Cucumber. Приведенные числа, однако, лишь немногим превышают погрешность результатов, поэтому я с удовольствием соберу больше данных, чтобы подтвердить свои предположения. Если вы работаете с JavaScript и не участвовали в исходном опросе, пожалуйста, помогите дополнить картину, заполнив небольшую форму. |