Как тестируют в Google - Каролло Джефф 4 стр.


В итоге качество достигается предотвращением, а не выявлением багов. Качество часть разработки, а не тестирования. Интегрируя тестирование в разработку, мы создали поэтапный процесс, в котором можно легко откатить изменение, в котором слишком много багов. Так мы предотвращаем возникновение проблем у пользователей и сокращаем количество выделенных тестировщиков, которые выявляют баги, ставящие под угрозу выпуск продукта. В Google тестирование определяет, насколько хорошо мы предотвращаем ошибки.

Наш подход к созданию продуктов подразумевает слияние разработки и тестирования. Это подтверждают комментарии к коду типа «где твои тесты, чувак?», развешенные в туалетах плакаты с правилами тестирования[7] и многое другое. Тестирование должно стать неотделимым от разработки. Качество родится только тогда, когда разработка и тестирование начнут жить вместе.

На заметку

Тестирование должно стать неотделимым от разработки. Качество родится только тогда, когда разработка и тестирование начнут жить вместе.

Роли

Чтобы девиз «Сам построил, сам и ломай» работал (и работал долго), вам нужна не только традиционная роль разработчика кода, но и другие роли. Конкретнее, должны появиться инженеры, которые помогут разработчикам тестировать эффективно и правильно. Они часто скромничают, называя себя тестировщиками, но на самом деле обеспечивать продуктивность вот их основная задача. Тестировщики нужны для того, чтобы разработчики работали более продуктивно. Причем рост продуктивности основан на предотвращении появления ошибок из-за небрежной разработки. Так качество становится частью этой продуктивности. Все эти роли мы подробно рассмотрим в следующих главах, а пока обойдемся кратким описанием.

Роль разработчика (Software Engineer, SWE) всем знакома и привычна. Он пишет код функциональности приложений, который поставляется пользователям. Он создает проектную документацию, определяет структуры данных и общую архитектуру, а большую часть времени пишет код и проводит код-ревью[8]. Разработчик пишет много тестового кода, например во время написания тестов для TDD и юнит-тестирования, и, как будет показано дальше в этой главе, участвует в создании малых, средних и больших тестов. Разработчик отвечает за качество всего кода, к которому он прикасается: пишет, исправляет или вносит изменения. Да, все верно: если разработчик должен изменить функцию и его изменение нарушает существующий тест или требует написания нового, он должен написать этот тест. Практически 100 % рабочего времени разработчик пишет программный код.

Роль разработчика в тестировании (Software Engineer in Test, SET) тоже связана с разработкой, но фокусируется на тестируемости кода и создании инфраструктуры тестирования. Разработчик в тестировании анализирует архитектуру, уделяет особое внимание качеству кода и рискам проекта. Он выполняет рефакторинг, чтобы сделать код тестируемым, пишет фреймворки юнит-тестирования и средства автоматизации. Разработчик в тестировании работает с тем же кодом, что и разработчик, но больше заинтересован в улучшении качества и тестового покрытия, чем в добавлении новых фич или повышении производительности. Разработчик в тестировании тоже проводит почти 100 % своего времени за написанием кода, но делает это ради повышения качества, а не для реализации фич для пользователей.

На заметку

Разработчик в тестировании работает с тем же кодом, что и разработчик, но занимается скорее повышением качества и тестовым покрытием, чем добавлением новых фич или повышением производительности. Разработчик в тестировании пишет код, который помогает разработчику тестировать написанные им фичи.

Роль инженера по тестированию (Test Engineer, TE) связана с ролью разработчика в тестировании, но здесь на первом месте находятся пользователи и только на втором разработчики. Некоторые инженеры по тестированию в Google пишут много кода для автотестов и управления сценариями использования и даже для имитации действий пользователя. Кроме того, именно они организуют работу по тестированию, которую выполняют другие инженеры, управляют выполнением тестов и интерпретируют их результаты тестов. Особенно важна их работа на поздних стадиях проекта, когда напряжение с приближением выпуска растет. Инженеры по тестированию это эксперты продукта, консультанты по качеству и специалисты по анализу рисков. Одни пишут много кода, другие мало[9].

На заметку

Инженеры по тестированию фокусируются на тестировании с точки зрения пользователя. Они занимаются общей организацией контроля качества, управляют выполнением тестов, интерпретируют их результаты и строят сквозную автоматизацию тестирования.

Итак, с точки зрения качества разработчики отвечают за фичи приложения и их качество отдельно от всего остального. Они ответственны за то, чтобы архитектура была устойчивой к ошибкам, приложение восстанавливалось после сбоев, отвечают за TDD, юнит-тесты и вместе с разработчиками в тестировании пишут код для тестирования фич.

Разработчики в тестировании отвечают за фичи тестирования. Они настраивают среду для изолированного выполнения кода с помощью имитации реального рабочего окружения. Для этого они создают такие компоненты, как заглушки (stubs), подставные объекты (mocks) и имитации (fakes),  мы рассмотрим их позже. Настроить очередь для управления отправкой кода в репозиторий тоже их задача. Другими словами, разработчики в тестировании пишут код, который помогает разработчикам тестировать написанные ими фичи. Большую часть тестирования выполнит сам разработчик. Разработчики в тестировании в основном следят за тем, чтобы функциональность можно было легко протестировать, а разработчики не ленились писать тест-кейсы.

Получается, что разработчики в тестировании работают для разработчиков. Их конечная цель качество кода и отдельных фич. Для этого они создают разработчикам удобную среду для тестирования кода. О пользователях думают тестировщики.

Если разработчики провели модульное и функциональное тестирование хорошо, то следующая задача понять, насколько хорошо их исходный код вместе с данными будет работать на благо пользователей. Тестировщики проверяют добросовестность разработчиков дважды. Любые очевидные баги свидетельствуют о том, что тестирование раннего цикла было недостаточным или небрежным. Если таких багов мало, тестировщик переходит к своей основной задаче убедиться в том, что продукт выполняет пользовательские сценарии, соответствует ожиданиям по производительности, что он надежен, правильно локализован и т. д. Тестировщики много тестируют сами и вдобавок обеспечивают координацию с другими инженерами, внешними тестировщиками-подрядчиками, тестировщиками из сообщества, внутренними пользователями, бета и ранними внешними пользователями. Они сводят воедино все риски, которые могут сыграть из-за недочетов в базовой архитектуре, сложности функциональности и отказов в системе предотвращения сбоев. Как только тестировщики взялись за дело, их работе не видно конца.

Организационная структура

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

 О, разумеется!  с жаром воскликнул Долли.

 Это часто только лишняя обуза для любящих сердец.

 Несомненно,  отвечал Долли.

 Я даже в этом уверен!  сказал старый плут.  Впрочем, Адольфус, я вовсе не ханжа. Я не восстаю против пользование земными благами, против блогодетельного влияния богатства на окружающую нас среду. Это наполняет и украшает жизнь! Вы имеете намерение застраховать свою жизнь?

 Если Анастасия этого захочет  отвечал несколько ошеломленный крошка.

 Это мы после обсудим вместе,  спокойно сказал дантист.  Вы, конечно, знаете, Адольфус, что моя дочь получит свою часть только после моей смерти?

Великодушный простофиля отвечал:

 Нет, я не знал этого, но это мне все равно; у нас будет чем жить.

 Благородно сказано! Благородно, прочувствовано! Я горжусь вами!  вскрикнул дантист с неподдельным энтузиазмом.  Вы вполне заслуживаете счастья, Адольфус. Но говоря о счастье, я вспоминаю, что все мы (глубокий вздох) игрушки рока. Вы намерены укрепить за Анастасией какой нибудь капитал?

 Ей принадлежит все, что у меня есть,  ответил Долли.

 Подобные чувства возвышают вас еще более в моих глазах, Адольфус, но я полагаю, вы сами будете спокойнее, когда укрепите что-нибудь за Анастасией; вы будете уверены, что сохрани Бог!  если случится какое нибудь несчастье, ваша жена и дети будут обеспечены. И потом войдите в положение отца и матери: я не в состоянии буду сомкнуть глаз, думая о будущем дочери, предоставленном всем случайностям рока!

Сентиментальный маленький простофиля отвечал:

 Я рад сделать все, чтобы успокоить родителей моей Анастасии!

 Бог да блогословит вас, Адольфус!  воскликнул дантист, давая волю своим взволнованным чувствам.  Но теперь надо еще уломать Анастасию: она будет всеми силами этому противиться, я знаю!.. Вы назначите ей 600 фунтов в год, и я, пожалуй, буду одним из доверителей. Ну, идем же к ней!

Милая красавица видимо просияла при появлении своего избранного; она еще не оправилась после недавней сцены и в глазах её выражалась тихая печаль.

 Вы хотели видеть меня, Долли?  сказала она, взяв его руку и лаская своею так нежно, что он не мог ответить ей слова от волнения. Он только собрался с духом говорить, когда она оставила его руку.

Как предсказывал старый де-Кад, так и вышло. Едва только Долли произнес слова: "укрепить капитал", она закачала головою, сдвинула с негодованием брови и закричала:

 Нет! нет! нет! никогда! Довольно об этом! Я отказываю! Я несогласна!

 Но, милая, милая! подумайте о случайностях мы все подвержены  бормотал Долли, восхищенный её бескорыстием.  Может случиться несчастье, может придти бедность

 Я буду делить с вами нищету!  воскликнул блогородный ангел, поднимая глаза вверх.

Он долго пробовал уговаривать, но она все отвечала: никогда!

 Для меня, для моего спокойствие, согласитесь.

 Кончим этот разговор!  сказала она, сурово сдвигая брови.

 Для успокоение ваших родителей, Анастасия!  сказал он, пробуя последнее средство.

Это ее поколебало. Она пролепетала: «милая, милая маменька!» и склонила молча голову. Это равнялось высказанному согласию.

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

 Анастасия, я больше не буду настаивать.

 Милая, милая мамаша!  слабо пролепетал встревоженный ангел.

 Я более не скажу об этом ни слова!

 Добрый, любящий папаша!  вздохнул еще более встревоженный ангел.

 Довольно об этом,  сказал он решительно.

 О, как я неблогодарна!  вскрикнул ангел почти в ужасе.

 Ни слова более!  сказал он мрачно.

 Если вы думаете, Долли, что это необходимо  вскрикнул ангел в отчаянии.

 Я ничего не думаю!

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

 Это была не моя мысль, а здесь не при чем!  был сокрушающий ответ.

 Наши малютки станут, быть может, упрекать меня  пролепетала стыдливая дева.

 Они не будут терпеть ни в чем нужды!  гордо отвечал мистер Икль.

 Я сделаю это для вас, Адольфус, воскликнуло преданное существо, закрывая лицо руками при таком признании и холодея от смертельного страха потерять 600 фунтов.  Милый, великодушный друг! я признаюсь, что вам я ни в чем не могу отказать!

Она схватила его руку и поцеловала ее в порыве страстной нежности.

Прежде, чем были готовы пригласительные свадебные билеты, интересная бумага, закрепляющая за любящею невестою 600 фунтов в год, была засвидетельствована где следует.

* * *

Накануне свадьбы Долли совсем меня замучил. То он боялся, что не принесут вовремя подарков, купленных для невесты, то приходил в отчаяние, что свадебные панталоны не поспеют к сроку.

 Господи! какое ужасное положение!  тихонько восклицал он, ходя в волнении по комнатам.

Он не дал мне ни на минуту сомкнуть глаз, опасаясь проспать и опоздать в церковь, и целую ночь только дремал и пронзительно вскрикивал.

* * *

Блумсберийская красавица была бесподобна в подвенечном уборе. Это было какое-то атласное божество: бела как заново выбеленный потолок, чиста, как сама невинность! Казалось, даже легкое прикосновение только что вымытого пальца запятнит ее изящные, волнующиеся одежды!

Жених был до того растерян, что старый де-Кад спросил меня, не пьян ли он.

Шесть подружек невесты дали волю своим чувствам и совершенно попортили себе завязки у шляпок; с мистрисс де-Кад едва не сделался припадок.

Возвращение домой и завтрак были торжественны, старый де-Кад заботился (под внушением гордости, вполне извинительной), чтобы свадьба произвела впечатление во всем приходе. Каждый сапожник на площади и на улицах знали, что дочь дантиста выходит замуж за очень богатого джентльмена. Это было недурно рассчитано на тот случай, чтоб соседи знали, куда нужно будет нести деньги, если у них заболят зубы, или нужно будет вставить новые.

Неудивительно, поэтому, что когда шесть экипажей подъехали к дверям,  каждое окно на площади было раскрыто, и наше возвращение приветствовали в этих окнах головы всякой величины и всякого возраста.

Украшением завтрака была, без сомнение, речь доктора Ле-Дерта. Лучшего проявления ораторских способностей я никогда не слыхал, даже в нашем клубе. Женщины до того растрогались, что желе было разбито на куски от рыданий тех особ, которые его брали. В то время, как он говорил о будущем счастии господствовала тишина, такая тишина, что когда я украдкой разбил ложечкой яйцо, то звук прогремел как громовой удар! все с ужасом на меня оглянулись; утешения любящим родителям, которые он представлял, вызвали громкие вопли, и потоки слез быстро полились со всех сторон.

Наконец, наступила та страшная минута, когда безумно любящее сердце матери должно было облиться кровью,  и когда должен был пострадать карман обожаемого отца, если отец обладает какой-нибудь долей душевного величия. Забывая о новом чепце, мамаша скрывает свое лицо в шляпке чада и целует милые щечки, теперь принадлежащие другому,  щечки, которыми она так страстно любовалась. Тут же невдалеке стоит и папаша, ожидая когда эти милые щечки освободятся, чтоб и самому запечатлеть сердечный поцелуй на их атласной поверхности. Взгляните, в его руке сверток, и когда любимое дитя поворачивает личико к милому папа, он кладет скрытое сокровище в её ожидающую ручку. "Спрячь в карман", шепчет он и отвертывается в другую сторону.

Когда Анастасия взглянула в таинственный сверток, она была неприятно поражена, увидев, что чек был только в пять фунтов.

Назад Дальше