Всем привет!
Просим любить и жаловать: Джефф Морган, он же Cheezy (@chzy). Джефф дал нам подробное интервью о его новой книге «Cucumber & Cheese» и лучших методах тестирования, поэтому… довольно предисловий — читайте и знакомьтесь!
1. Здравствуйте, Джефф (Cheezy)! Спасибо, что нашли время поговорить с нами. Вы довольно известная личность, например, в мире Agile и ATDD. Но не могли бы Вы рассказать немного о себе для тех, кто еще Вас не знает?
Моя страсть – написание программ, чем я и занимаюсь почти тридцать лет. Восемь с лишним лет назад я решил покинуть «корпоративную машину» и основал компанию, которая впоследствии стала известна под названием LeanDog. С тех пор я путешествую по Соединенным Штатам и Канаде и помогаю группам разработчиков работать эффективнее, внедряя методики Agile и Lean.
Я «торчу» от работы с командами, где разработчики не имеют представления, как писать чистый код, тестировщики выполняют скрипты вручную или делают только выборочные проверки, а у заказчика нет уверенности в том, что команда может предоставить качественный продукт. Здорово, когда за несколько месяцев удается развернуть такую команду на 180 градусов. Мне нравится наблюдать, как разработчики вникают в мастерство программирования, нравится учить их писать высококачественный код, внедряя такие методики, как TDD, парное программирование и правильные принципы проектирования. Мне нравится наблюдать, как тестировщики работают плечом к плечу с разработчиками и учатся писать код для автоматизации своих тестов. Как восстанавливается вера заказчика в команду. Видеть, когда команды начинают работать как часы. Вот чем я занимаюсь.
В начале своей «тренерской» карьеры я был разочарован состоянием профессии тестировщика, особенно в тех командах, с которыми я работал. Тестирование практически всегда было камнем преткновения и не давало команде полностью раскрыть свой потенциал. Увидев, как Кент Бек, Рон Джеффрис и другие сумели поднять планку профессионализма в сообществе разработчиков, я решил пойти тем же путем и повлиять на ситуацию в области тестирования. Я начал знакомить команды с ATDD, начал работать с тестировщиками и обучать их автоматизации тестирования с той же строгостью, с которой учу разработчиков писать код. Я начал расширять границы понятия совместной работы в Agile-команде. Поначалу многие мои идеи считали радикальными и бескомпромиссными, но со временем они получили признание и распространение.
2. Когда и как Вы познакомились с Ruby, и что Вам нравится в нем больше всего?
Мне нравятся все языки программирования. Люблю углубляться в тонкости языка, чтобы понять, что он может предложить. Когда есть выбор, я выбираю тот язык, который наилучшим образом решает проблему.
Таким способом я открыл для себя Ruby около шести лет назад. Rails был тогда еще в новинку и многие участники сообщества говорили о нем. Я начал изучать его, и мне понравилось — особенно простота языка в сочетании с такой мощной объектной моделью. Я подумал, что будет удобно использовать метапрограммирование, чтобы создавать высокоуровневые DSL для разработчиков. Вот в чем секрет Rails.
Пару лет спустя я работал с тестировщиками и пытался помочь им реализовать автоматизацию тестирования. Я начал присматриваться к существующим инструментам и был поражен их низким уровнем. Ruby показался мне хорошим решением. С помощью этого языка удалось написать код для построения высокоуровневых DSL, которые тестировщики могли использовать для построения наборов тестов. Впоследствии это привело к разработке ряда гемов Ruby.
3. Разработчики RoR, должно быть, очень рады Вашей книге, как и мы в команде RubyMine. Вы не могли бы рассказать подробнее, для кого эта книга?
Моя книга посвящена Cucumber. На заре появления Cucumber большинство людей использовали web steps, которые поставлялись с гемом, или другие гемы, например webrat. Эти инструменты обычно создавали не очень надежные наборы тестов, но с мелкими сайтами работали нормально, поскольку брали на себя работу, необходимую для запуска тестов. С развитием сайтов появилась потребность тестирования в разных браузерах, и мы быстро поняли, что наши дополнительные потребности не получится удовлетворить с помощью этих гемов.
В книге предприняты попытки осветить несколько тем. Прежде всего, она дает хорошее представление о Ruby и Cucumber. Она также знакомит читателя с рядом дополнительных гемов, которые можно использовать в Cucumber для написания надежных гибких наборов тестов. Также охвачены углубленные темы, в том числе управление тестовыми данными и масштабирование тестов. Хотя книга популярна прежде всего среди тестировщиков, я считаю, что разработчики тоже смогут найти в ней много полезного.
4. Почему Cucumber? Каковы преимущества этой среды тестирования?
Замечательная особенность Cucumber заключается в ее возможности выражать поведение программы естественным языком под названием gherkin. Я использую эту возможность, чтобы повысить уровень коллективной работы в командах, которые обучаю. Обычно все начинается с того, что product owner или заказчик составляет описание пользовательской истории на gherkin. Когда разработчик вник в суть пользовательской истории, мы проводим короткое обсуждение между product owner’ом, разработчиком и тестировщиком, оно должно длиться не более пяти-десяти минут. В ходе обсуждения мы рассматриваем описание на gherkin, убеждаемся, что достигли взаимопонимания, и если нужно, добавляем недостающие сценарии. Мы называем это «беседой трех амиго». После обсуждения разработчик начинает писать код, а тестировщик автоматизирует сценарии. Разработчик регулярно запускает тесты cucumber, чтобы сообщать о ходе работы и об оставшихся этапах. Тестировщик проводит исследовательское тестирование истории по мере завершении ее частей. История считается готовой, когда и разработчик, и тестировщик оба уверены, что код чист и не содержит дефектов. Это, разумеется, требует тесного сотрудничества между разработчиком и тестировщиком, а Cucumber как раз соответствует требованиям такого сотрудничества. Мы смогли отказаться от разделения рабочего процесса на этапы «разработки» и «тестирования». У нас есть просто этап разработки, а тестирование стало его неотъемлемой частью.
5. Вы разрабатываете гемы Ruby для усовершенствования тестирования. Можете рассказать подробнее о своих любимых гемах?
Это то же самое, что попросить выбрать любимого ребенка. Я люблю их все! На сегодняшний день самым популярным является мой гем page-object. Он позволяет создать абстракцию вокруг веб-страницы и изолировать остальной набор тестов от изменений на этих страницах. Еще несколько гемов, получивших признание в последнее время, — brazenhead и gametel. Они обеспечивают надежную платформу тестирования для приложений, написанных для устройств Android. Наконец, data_magic — это гем, который тесно работает с page-object, чтобы выделить и рандомизировать данные, используемые в ваших тестах. Это обязательный элемент для параллельного запуска тестов. Когда тесты запущены параллельно, вы теряете контроль над порядком выполнения. Если в нескольких тестах используются одни и те же тестовые данные, один тест может задействовать данные другого, и тогда происходит случайный сбой теста.
6. Какие еще инструменты тестирования Вы можете порекомендовать, кроме гемов?
Карточки для записей, хорошая среда разработки и git. Да, мне не по душе массивные процессы и инструменты. Я люблю, чтобы все было просто, без лишних сложностей.
7. Для нас большая честь, что в книге постоянно упоминается RubyMine. Как давно Вы пользуетесь RubyMine? Что Вам в ней нравится?
Я издавна, еще с 1980-х, пользуюсь emacs и командной строкой. RubyMine я для себя открыл сразу после первого ее выпуска. До этого я с удовольствием использовал несколько других инструментов JetBrains, а именно IntelliJ и ReSharper. И когда я рассказывал о Ruby в качестве платформы для тестирования командам, мне понадобилась полностью интегрированная среда разработки. RubyMine отвечала моим требованиям. С тех пор это мой любимый инструмент.
8. Есть ли функционал, которого Вам не хватает в RubyMine?
Я познакомил с RubyMine уже многих разработчиков и тестировщиков, и чаще всего я слышу от них лестные слова в адрес лучшего code completion для классов, которые строятся динамически. Я знаю, насколько непростая это задача, поэтому меня радует качество вашего инструмента и его непрерывное развитие. Продолжайте в том же духе.
9. Вы занимаетесь обучением, ведением блога и т. п. Откуда Вы черпаете вдохновение? Книги, блоги? Увлечения?
Когда я в дороге (а это примерно 90% времени), я коротаю вечера за написанием кода. В городах, куда я приезжаю, я посещаю пользовательские группы и пробую местное пиво. На выходных я живу совершенно другой жизнью. Мы часто выезжаем с семьей на природу и наслаждаемся нахлыстовой рыбалкой.
10. Благодарим за внимание, Джефф, мы ждем окончательного выхода Вашей книги. Есть ли какие-то события или темы, на которые Вы хотели бы обратить внимание читателей?
Я просто хотел бы призвать всех разработчиков вникать в тонкости и совершенствовать свое ремесло, и пожелать никогда не сдаваться на пути к намеченным целям!
Ваша команда JetBrains RubyMine
P.S. Оригинал интервью на английском языке можно прочитать на блоге RubyMine по адресу http://blog.jetbrains.com/ruby/2012/11/interview-with-jeff-cheezy-morgan/
Автор: SirReal