Интервью с Джеффом «Cheezy» Морганом

Просим любить и жаловать: Джефф Cheezy Морган Джефф Морган, он же Cheezy (@chzy). Джефф дал нам подробное интервью о 
его новой книге «Cucumber
&
Cheese»
 и лучших методах тестирования, поэтому… довольно предисловий — читайте и знакомьтесь!

Здравствуйте, Джефф! Спасибо, что нашли время
поговорить с нами. Вы довольно известная личность, например, в мире
Agile и ATDD. Но не могли бы Вы рассказать немного о себе для тех, кто
еще Вас не знает?

Моя страсть – написание программ, чем я и занимаюсь почти тридцать лет.
Восемь с лишним лет назад я решил покинуть «корпоративную машину» и
основал компанию, которая впоследствии стала известна под названием LeanDog. С тех пор я путешествую по
Соединенным Штатам и Канаде и помогаю группам разработчиков работать
эффективнее, внедряя методики Agile и Lean.

Я «торчу» от работы с командами, где разработчики не имеют
представления, как писать чистый код, тестировщики выполняют скрипты
вручную или делают только выборочные проверки, а у заказчика нет
уверенности в том, что команда может предоставить качественный продукт.
Здорово, когда за несколько месяцев удается развернуть такую команду на
180 градусов. Мне нравится наблюдать, как разработчики вникают в
мастерство программирования, нравится учить их писать высококачественный
код, внедряя такие методики, как TDD, парное программирование и
правильные принципы проектирования. Мне нравится наблюдать, как
тестировщики работают плечом к плечу с разработчиками и учатся писать
код для автоматизации своих тестов. Как восстанавливается вера заказчика
в команду. Видеть, когда команды начинают работать как часы. Вот чем я
занимаюсь.

В начале своей «тренерской» карьеры я был разочарован состоянием
профессии тестировщика, особенно в тех командах, с которыми я работал.
Тестирование практически всегда было камнем преткновения и не давало
команде полностью раскрыть свой потенциал. Увидев, как Кент Бек, Рон
Джеффрис и другие сумели поднять планку профессионализма в сообществе
разработчиков, я решил пойти тем же путем и повлиять на ситуацию в
области тестирования. Я начал знакомить команды с ATDD, начал работать с
тестировщиками и обучать их автоматизации тестирования с той же
строгостью, с которой учу разработчиков писать код. Я начал расширять
границы понятия совместной работы в Agile-команде. Поначалу многие мои
идеи считали радикальными и бескомпромиссными, но со временем они
получили признание и распространение.

Когда и как Вы познакомились с Ruby, и что Вам
нравится в нем больше всего?

Мне нравятся все языки программирования. Люблю углубляться в тонкости
языка, чтобы понять, что он может предложить. Когда есть выбор, я
выбираю тот язык, который наилучшим образом решает проблему.

Таким способом я открыл для себя Ruby около шести лет назад. Rails был
тогда еще в новинку и многие участники сообщества говорили о нем. Я
начал изучать его, и мне понравилось — особенно простота языка в
сочетании с такой мощной объектной моделью. Я подумал, что будет удобно
использовать метапрограммирование, чтобы создавать высокоуровневые DSL
для разработчиков. Вот в чем секрет Rails.

Пару лет спустя я работал с тестировщиками и пытался помочь им
реализовать автоматизацию тестирования. Я начал присматриваться к
существующим инструментам и был поражен их низким уровнем. Ruby
показался мне хорошим решением. С помощью этого языка удалось написать
код для построения высокоуровневых DSL, которые тестировщики могли
использовать для построения наборов тестов. Впоследствии это привело к
разработке ряда гемов Ruby.

Разработчики RoR, должно быть, очень рады
Вашей книге, как и мы в команде RubyMine. Вы не могли бы рассказать
подробнее, для кого эта книга?

Моя книга посвящена Cucumber. На
заре появления Cucumber большинство людей использовали web steps,
которые поставлялись с гемом, или другие гемы, например webrat. Эти
инструменты обычно создавали не очень надежные наборы тестов, но с
мелкими сайтами работали нормально, поскольку брали на себя работу,
необходимую для запуска тестов. С развитием сайтов появилась потребность
тестирования в разных браузерах, и мы быстро поняли, что наши
дополнительные потребности не получится удовлетворить с помощью этих
гемов.

В книге предприняты попытки осветить несколько тем. Прежде всего, она
дает хорошее представление о Ruby и Cucumber. Она также знакомит
читателя с рядом дополнительных гемов, которые можно использовать в
Cucumber для написания надежных гибких наборов тестов. Также охвачены
углубленные темы, в том числе управление тестовыми данными и
масштабирование тестов. Хотя книга популярна прежде всего среди
тестировщиков, я считаю, что разработчики тоже смогут найти в ней много
полезного.

Почему Cucumber? Каковы преимущества этой
среды тестирования?

Замечательная особенность Cucumber заключается в ее возможности выражать
поведение программы естественным языком под названием gherkin. Я
использую эту возможность, чтобы повысить уровень коллективной работы в
командах, которые обучаю. Обычно все начинается с того, что product
owner или заказчик составляет описание пользовательской истории на
gherkin. Когда разработчик вник в суть пользовательской истории, мы
проводим короткое обсуждение между product owner’ом, разработчиком и
тестировщиком, оно должно длиться не более пяти-десяти минут. В ходе
обсуждения мы рассматриваем описание на gherkin, убеждаемся, что
достигли взаимопонимания, и если нужно, добавляем недостающие сценарии.
Мы называем это «беседой трех амиго». После обсуждения разработчик
начинает писать код, а тестировщик автоматизирует сценарии. Разработчик
регулярно запускает тесты cucumber, чтобы сообщать о ходе работы и об
оставшихся этапах. Тестировщик проводит исследовательское тестирование
истории по мере завершении ее частей. История считается готовой, когда и
разработчик, и тестировщик оба уверены, что код чист и не содержит
дефектов. Это, разумеется, требует тесного сотрудничества между
разработчиком и тестировщиком, а Cucumber как раз соответствует
требованиям такого сотрудничества. Мы смогли отказаться от разделения
рабочего процесса на этапы «разработки» и «тестирования». У нас есть
просто этап разработки, а тестирование стало его неотъемлемой частью.

Вы разрабатываете гемы Ruby для
усовершенствования тестирования. Можете рассказать подробнее о своих
любимых гемах?

Это то же самое, что попросить выбрать любимого ребенка. Я люблю их все!
На сегодняшний день самым популярным является мой гем page-object. Он
позволяет создать абстракцию вокруг веб-страницы и изолировать остальной
набор тестов от изменений на этих страницах. Еще несколько гемов,
получивших признание в последнее время, — brazenhead и gametel. Они
обеспечивают надежную платформу тестирования для приложений, написанных
для устройств Android. Наконец, data_magic — это
гем, который тесно работает с page-object, чтобы выделить и
рандомизировать данные, используемые в ваших тестах. Это обязательный
элемент для параллельного запуска тестов. Когда тесты запущены
параллельно, вы теряете контроль над порядком выполнения. Если в
нескольких тестах используются одни и те же тестовые данные, один тест
может задействовать данные другого, и тогда происходит случайный сбой
теста.

Какие еще инструменты тестирования Вы можете
порекомендовать, кроме гемов? 

Карточки для записей, хорошая среда разработки и git. Да, мне не по душе
массивные процессы и инструменты. Я люблю, чтобы все было просто, без
лишних сложностей.

Для нас большая честь, что в книге постоянно
упоминается RubyMine. Как давно Вы пользуетесь RubyMine? Что Вам в ней
нравится?

Я издавна, еще с 1980-х, пользуюсь emacs и командной строкой. RubyMine я
для себя открыл сразу после первого ее выпуска. До этого я с
удовольствием использовал несколько других инструментов JetBrains, а
именно IntelliJ и ReSharper. И когда я рассказывал о Ruby в качестве
платформы для тестирования командам, мне понадобилась полностью
интегрированная среда разработки. RubyMine отвечала моим требованиям. С
тех пор это мой любимый инструмент.

Есть ли функциональность, которой Вам не
хватает в RubyMine?

Я познакомил с RubyMine уже многих разработчиков и тестировщиков, и чаще
всего я слышу от них лестные слова в адрес лучшего code completion для
классов, которые строятся динамически. Я знаю, насколько непростая это
задача, поэтому меня радует качество вашего инструмента и его
непрерывное развитие. Продолжайте в том же духе.

Вы занимаетесь обучением, ведением блога и т.
п. Откуда Вы черпаете вдохновение? Книги, блоги? Увлечения?

Когда я в дороге (а это примерно 90% времени), я коротаю вечера за
написанием кода. В городах, куда я приезжаю, я посещаю пользовательские
группы и пробую местное пиво. На выходных я живу совершенно другой
жизнью. Мы часто выезжаем с семьей на природу и наслаждаемся нахлыстовой
рыбалкой.

Благодарим за внимание, Джефф, мы ждем
окончательного выхода Вашей книги. Есть ли какие-то события или темы, на
которые Вы хотели бы обратить внимание читателей?

Я просто хотел бы призвать всех разработчиков вникать в тонкости и
совершенствовать свое ремесло, и пожелать никогда не сдаваться на пути к
намеченным целям!

Впервые опубликовано на Хабре.
Оригинал интервью на английском языке можно прочитать в блоге RubyMine.