Саймон Стюарт о частоте выхода релизов Selenium

Мы решили, что сухие сводки о выходе новых версий читать не слишком интересно, поэтому решили периодически публиковать заметки, которые приоткрывают внутреннюю кухню разработки Selenium – почему в нём появляются или исчезают те или иные функции, почему некоторые функции разработчики упорно не хотят делать, несмотря на то, что их постоянно об этом просят, почему приняты те или иные архитектурные решения. Мы надеемся, что это будет служить хорошим дополнением к документации, позволит вам почувствовать “дух” Selenium и благодаря этому вы сможете использовать его более осознанно и эффективно.

Автор: Simon Stewart, главный архитектор и разработчик Selenium

Оригинал: Explaining the Speed of Selenium Updates

После выхода первой официальной версии Selenium 2 мы стали выпускать обновления и релизы существенно чаще, чем было до этого. Первоначально мы планировали выпускать релизы еженедельно, но в итоге промежуток между релизами установился приблизительно две-три недели. И это таки весьма часто. Почему мы так сделали?

Первая причина – быстрое развитие продукта. Например, в течение недели, предшествовавшей написанию этой статьи (с 14 по 21 июля), в репозиторий было сделано 94 коммита. Это была довольно продуктивная неделя. Предыдущая была поспокойнее. Всего 84 коммита. Каждый из них – это либо уточнение существующей функциональности, либо багфикс, либо (гораздо реже) какая-то новая функциональная возможность. И мы хотим, чтобы эти новые функции или исправления известных дефектов стали доступны пользователям как можно быстрее.

Вторая причина – наше желание обеспечить поддержку самых последних версий браузеров. Новые версии браузера Internet Explorer выходят примерно раз в год. А вот для браузеров Chrome и Firefox новые “мажорные” версии появляются каждые шесть недель. Шесть недель! И для каждой из этих новых версий как правило требуется выпустить обновление Selenium.

Теоретически, Selenium спроектирован таким образом, что интерфейс WebDriver API позволяет отделить релизный цикл клиентских библиотек от релизного цикла драйверов, привязанного к релизному циклу браузеров. Это уже достаточно давно произошло с браузером Chrome, с тех пор, как команда Chrome сама стала поддерживать драйвер chromedriver (ура!). Opera поддержала это начинание, и релизы opera driver с самого начала выпускаются независимо от релизов Selenium. Начиная с версии 2.25 аналогичный механизм реализован и для браузера Internet Explorer.

Остается Firefox.

Если бы мы сочли достаточным использование только синтезированных событий, мы могли бы расслабиться и не выпускать обновления Selenium для каждой версии Firefox. Но мы не считаем это достаточным, и наши пользователи солидарны с нами. На данный момент для эмуляции событий на уровне операционной системы используются бинарные компоненты, разработанные в рамках проекта Selenium. Эти компоненты реализованы таким образом, что их приходится перекомпилировать для каждой “мажорной” версии Firefox. Раньше это означало “почти никогда”. Сейчас это означает “каждые шесть недель”. Это довольно утомительно для нас. Я уверен, что это довольно утомительно и для Mozilla. И наверняка это утомительно и для наших пользователей.

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

Ещё одна интересная вещь, над которой работает Mozilla – это проект Marionette. Это реализация WebDriver API, которая будет встроена непосредственно в браузер Firefox (а также в его мобильные версии, а также в Firefox OS) и будет поддерживаться непосредственно командой Mozilla. Когда это случится, Selenium наконец-то полностью отделит релизные циклы клиентских библиотек от релизных циклов драйверов.

Это отделение будет весьма удобно, потому что мы сможем выпускать более “сфокусированные” обновления. Скажем, если нужно исправить дефект, затрагивающий только браузер Internet Explorer, мы сможем выпустить новую исправленную версию драйвера Internet Explorer и пользователям будет достаточно обновить только этот драйвер.

Ну что ж, посмотрим, что получится.