Качество ≠ Тестирование
Роли
Организационная структура
Ползти, идти, бежать
Виды тестов
Глава 2. Разработчик в тестировании
A — значит Attribute
C — значит Component
C — значит Capability
Риск
Анализ рисков
Снижение рисков
Напоследок о рисках
Пользовательские сценарии
Краудсорсинг
Пишем тест-кейсы
Интересные факты из жизни багов
Немного подробнее о Buganizer
Жизненный путь бага
Как мы нанимаем инженеров по тестированию
Как отличить тестировщика от разработчика в
тестировании
Собеседование с инженерами по тестированию
Управление тестированием в Google
Управление «пиратским кораблем» для чайников
Тестирование в режиме сопровождения
Пример режима сопровождения: Google Desktop
Эксперимент с Quality Bots
Сингулярность:[54] легенда о происхождении ботов
Bots: детство, отрочество и масштабирование на весь
интернет
Эксперимент BITE
Обзор тем
Анализ рисков
Непрерывное тестирование каждой сборки
Ежедневное тестирование лучших сборок
Тестирование перед выпуском
Ручное и автоматизированное тестирование
Разработка и качество тестов
Каналы выпуска
Обратная связь
Репозитории тест-кейсов
Панели мониторинга тестов
Виртуализация
Производительность
Нагрузочное тестирование, продолжительное
тестирование и тестирование стабильности
Фреймворк выполнения тестов Autotest
Производители железа
Лаборатория проверки оборудования
Фермы для сквозных автотестов
Тестирование AppManager в браузере
Тестируемость браузера
Оборудование
График
Ключевые моменты тестирования
Необходимые документы и ресурсы
Приложение Б. Тестовые туры для Chrome
Тур покупателя
Тур студента
Инструменты в Chrome
Тур неблагополучных районов
Полнота
Скорость
Действенность
Польза
notes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Дж. Уиттакер, Дж. Арбон, Дж. Каролло
Как тестируют в Google
Всем тестировщикам из Google, Microsoft и всех
остальных компаний, которые заставили меня
мыслить нестандартно.
Джеймс А. Уиттакер
Джейсон Арбон
Джефф Каролло
Предисловие к русскому изданию
Я пришла в тестирование в 2006 году маленьким тестировщиком
на большой аутсорсный проект. Сначала я научилась тестировать,
заводить баги и общаться с разработчиками и менеджерами. Со
временем я стала писать тесты, научилась планировать и управлять
тестированием. У меня появилась своя команда.
И чем дальше, тем больше мне становилось понятно, что
тестировщики только находят проблемы, но не могут их исправить.
Они не могут сделать так, чтобы проблема больше не повторилась. И я
чувствовала, что тестирование может приносить больше пользы.
Я начала ездить на конференции, читала книги и статьи по
тестированию, общалась с коллегами по индустрии. Везде учили, как
лучше тестировать, как находить больше ошибок, как быстрее находить
ошибки. Тестировщики не хотели выходить за рамки своей профессии.
Им как будто нравилось чувствовать собственную важность от того, что
они нашли много багов.
Ответы на свои вопросы я нашла в статьях и докладах Джеймса
Уиттакера. Его основная идея в том, что тестирование должно
перестать просто предоставлять информацию и начать влиять на
качество. Главная задача тестирования, говорил Уиттакер, — это
уменьшение количества ошибок в процессах разработки. Тогда
улучшится качество выпускаемого продукта.
Создать процесс, в котором сложно допустить ошибку, — вот
настоящая цель тестирования. Мы не можем полностью избавиться от
ошибок, но можем построить работу так, что сделать сразу правильно
будет легче, чем ошибиться.
В Google пошли именно в эту сторону, отказавшись от
тестирования, которое просто сообщало об ошибках. «Служба
тестирования» трансформировалась в «Направление продуктивности
разработки», которое помогает разработчикам и менеджерам делать
меньше ошибок и получать обратную связь как можно раньше.
Тестировщики в Google влияют на качество, потому что встраивают его
на всех этапах разработки программных продуктов.
Книга «Как тестируют в Google» рассказывает, как тестировщики в
Google пришли к пониманию, что нужно меняться, как строили новые
процессы, каких результатов достигли и как видят дальнейшее развитие
тестирования. Очень здорово, что компания Google настолько открыта
и делится своим опытом. Но все же, я думаю, что именно приход
Уиттакера в Google послужил катализатором процесса написания этой
книги. Слишком уж много у него энергии и желания делиться знаниями
с внешним миром.
Я начала переписываться с Уиттакером в 2009 году, а в марте 2010-
го познакомилась с ним лично на конференции Swiss Testing Day. Он
оказался очень простым в общении. С ним можно было обсудить
тренды мирового тестирования и посмеяться над тестировщиками-
консерваторами. Джеймс очень остроумный и харизматичный оратор. В
2011-м я слушала его мастер-класс «Как тестируют в Google» на
конференции EuroSTAR. Он легко парировал реплики из зала вроде «в
авиационном софте не получится сделать так, как в Google» простой
фразой «так вы даже не пробовали».
Эта книга повторяет легкий и остроумный стиль общения
Джеймса. Вы почувствуете характер Уиттакера, читая ее. Мы очень
старались сохранить в переводе эту легкость и живость. Я хотела,
чтобы текст получился таким, как будто его написал кто-то очень
знакомый: наш коллега, который говорит на том же языке, что и мы. В
итоге книга получилась не похожей на большинство технических книг
на русском языке, переведенных сухо и формально.
Если вы начинающий тестировщик — прочитайте книгу сейчас, а
потом еще раз через год. Если вы опытный тестировщик — дайте ее
почитать вашим разработчикам и менеджерам. Если они не загорятся
идеей сделать тестирование «как в Google», задумайтесь, стоит ли с
ними работать. Если вы менеджер или разработчик — прочитайте и
сравните с тем, как работает тестирование в вашей компании.
Пожалуйста, будьте осторожны. Не нужно следовать советам ребят
из Google вслепую: то, как у них реализованы процессы, лишь частный
случай. Вычлените из книги главное: тестирование как выделенная
проверка не работает, тестировать должен каждый участник проекта,
качество нужно встраивать на все уровни разработки. Если применить
эти принципы в вашей компании, скорее всего, вы получите
совершенно другую реализацию.
Думайте, «как в Google», а не делайте «как в Google». Приятного
чтения!
Спасибо всем ребятам, кто помогал в начале проекта: Илье
Фомину, Ане Якшиной, Наташе Курашкиной, Леше Лянгузову, Севе
Лотошникову, Игорю Любину, Ване Федорову, Жене Ткаченко, Илье
Шубкину. Спасибо «Иннове» и Геворку, что этот проект состоялся.
Спасибо Ксюше Развенской и Сергею Сурганову, что помогали
вычитывать финальный вариант.
Юля Нечаева
Джеймс Уиттакер
Джейсон Арбон
Джефф Каролло
Киркленд, штат Вашингтон
Благодарности
Мы благодарим всех технических специалистов Google, неустанно
улучшающих качество продуктов. Мы восхищены открытой и
распределенной культурой управления и организации технической
работы в Google, которая позволила нам свободно исследовать и
экспериментировать по ходу формирования практики и методологии
тестирования.
Мы особо выделим следующих ребят, которые тратили свои силы
и даже рисковали, чтобы привести тестирование к желаемому виду:
Алексис О. Торрес, Джо Мухарски, Даниэль Дрю, Ричард Бустаманте,
По Ху, Джим Рирдон, Теджас Шах, Джули Ральф, Эриэл Томас, Джо
Михаил и Ибрагим Эль Фар.
Спасибо нашим редакторам, Крису Гузиковски и Крису Зану,
стоически переносившим наш технический жаргон.
Спасибо собеседникам, поделившимся своими взглядами и опытом
в интервью: Анкиту Мехта, Джоэлу Хиноски, Линдсей Уэбстер, Эппл
Чоу, Марку Стрибеку, Нилу Норвицу, Трейси Бялик, Руссу Руферу, Теду
Мао, Шелтону Мару, Ашишу Кумару, Суджай Сани, Брэду Грину,
Саймону Стюарту и Хунг Дан.
Отдельное спасибо Альберто Савоя, убедившему нас в
преимуществах метода быстрого создания прототипа и итераций.
Спасибо Google, персоналу кафетерия и шеф-поварам за отличную еду
и кофе. Спасибо за благожелательные отзывы Филу Валигоре, Алану
Пейджу и Майклу Бахману. И наконец, спасибо Пату Коупленду,
который нас всех собрал и обеспечил финансирование такой
энергичной и талантливой группы специалистов в области качества.
Об авторах
Джеймс Уиттакер — технический директор Google,[4]
ответственный за тестирование Chrome, Maps и веб-приложений
Google. Перешел в компанию из Microsoft, имеет профессорскую
степень. Джеймс — один из самых известных в мире специалистов в
области тестирования.
Джейсон Арбон — инженер по тестированию в Google,
ответственный за Google Desktop, Chrome и Chrome OS. Он выступал в
роли руководителя разработки многих тестовых инструментов с
открытым кодом и внутренних экспериментов по персонализации. До
прихода в Google работал в Microsoft.
Джефф Каролло — разработчик в тестировании, ответственный за
тестирование Google Voice, Toolbar, Chrome и Chrome OS. Он
консультировал десятки групп разработки Google, помогая им
повышать качество кода. В 2010 году перешел в разработчики, сейчас
руководит разработкой Google+ API. До прихода в Google тоже работал
в Microsoft.
Глава 1. Первое знакомство с
организацией тестирования в Google
Есть один вопрос, который я слышу чаще других. В какой бы
стране я ни был, на какой бы конференции ни выступал, этот вопрос
обязательно всплывает. Даже наши новобранцы задают его сразу же
после прохождения вводного курса: «Так как же Google тестирует
ПО?».
Не знаю, сколько раз я уже отвечал на этот вопрос и как много
разных вариантов ответа дал. Мои ответы постоянно меняются — чем
дольше я работаю в Google, тем больше узнаю всевозможных
тонкостей нашего подхода к тестированию. Меня давно посещали
мысли, что стоит зафиксировать свои знания на бумаге. Когда Альберто
(который часто грозит переработать все книжки по тестированию в
подгузники для взрослых, чтобы они принесли хоть какую-то пользу)
предложил мне написать книгу, я понял, что никуда от этого не денусь.
И все-таки я хотел подождать. Во-первых, я не считал себя самым
подходящим автором. Было много людей, которые работали в Google
намного дольше меня, и я хотел дать им возможность первыми
написать о своем опыте. Во-вторых, я был директором по
тестированию Chrome и Chrome OS (кстати, сейчас эту должность
занимает один из моих бывших подчиненных), поэтому видел
организацию тестирования в Google только с одной стороны. Мне
нужно было узнать еще много всего о тестировании в Google.
В Google тестирование ПО — часть централизованной системы,
которую мы называем направлением продуктивности разработки. Она
охватывает инструменты для разработки, тестирования (от юнит-
уровня до исследовательского) и организации процессов выпуска
программных продуктов. Мы создаем и поддерживаем множество
общих инструментов и тестовую инфраструктуру для веб-проектов
поиска, рекламной платформы, мобильных приложений,
видеосервисов. Короче, для всего, что Google делает в интернете. В
Google решены проблемы производительности и масштабирования, что
позволяет нам, несмотря на огромные размеры компании, выпускать
программы со скоростью стартапа. Как верно заметил Патрик Коупленд
в предисловии к книге, этой магией мы во многом обязаны именно
команде тестирования.
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
Ни один проект не получит ресурсы тестирования просто
так. Команды разработки обращаются к тестировщикам за
помощью, убеждая их в том, что проект по-настоящему
интересен и перспективен.
Структура команды
Разработчики часто глубоко погружены в код, который пишут, и
сосредоточены на одной фиче продукта или даже ее части. Они
принимают все решения исходя из локальной пользы, воспринимая
продукт очень узко. Хороший разработчик в тестировании должен
делать ровно наоборот: смотреть на продукт широко и держать в голове
общую картину продукта, со всеми его фичами. Более того, он должен
понимать, что разработчики приходят, делают свою работу и уходят, а
продукт должен продолжать жить дальше.
Проектам типа Gmail или Chrome суждено пройти через много
версий. Над ними будут трудиться сотни разработчиков. Представим,
что разработчик присоединился к команде на третьей версии продукта.
Если этот продукт хорошо задокументирован и пригоден к
тестированию, если у него есть стабильный работоспособный
механизм автоматизации тестов, если есть процессы, по которым легко
добавить новый код, — считайте, что те ранние разработчики в
тестировании сработали хорошо.
Со всем этим постоянным наращиванием функциональности,
выпуском новых версий и патчей, переименованием и переработкой
бывает трудно понять, когда работа над продуктом завершается. Но
совершенно точно у каждого продукта есть четкая отправная точка.
Здесь, в начале, мы формируем свои цели, планируем и пробуем. Мы
даже пытаемся документировать то, что, как мы думаем, мы будем
делать. Мы стремимся принимать такие решения, которые будут
жизнеспособны в долгосрочной перспективе.
Чем больше экспериментов, прикидок и набросков планов мы
сделали до начала реализации проекта, тем сильнее наша уверенность в
долгой и успешной жизни проекта. Но надо знать меру. С одной
стороны, мы не хотим планировать настолько мало, что потом это нам
аукнется. С другой стороны, не хочется потратить несколько недель
только на то, чтобы в конце понять, что условия изменились или
оказались совсем не такими, какими их представляли. Поэтому на
ранней фазе разумно вести документацию и структурировать процессы,
но объем этой работы определяют сами инженеры из команды проекта.
Сначала в команде разработки нового продукта появляется
ведущий инженер и еще несколько других технических ролей. В Google
неформальное звание «ведущий инженер» получает специалист,
который отвечает за выбор технического направления работ,
координирует проект и становится его главным техническим
представителем для других команд. Он знает ответы на все вопросы о
проекте или может перенаправить их правильному человеку. Ведущим
инженером продукта обычно становится разработчик или любой другой
инженер, который выступает в роли разработчика.
Ведущий инженер со своей командой начинает с набросков
первого проектного документа (об этом мы расскажем в следующем
разделе). Постепенно документ растет, а это значит, что пора
привлекать инженеров разных специализаций. Многие команды просят
разработчика в тестировании еще на старте, несмотря на то что их
мало.
Проектная документация
У каждого проекта в Google есть основной проектный документ.
Это живой документ, он развивается вместе с проектом. Вначале этот
документ описывает цель проекта, предпосылки его создания,
предполагаемый список участников и архитектурных решений. На
раннем этапе участники команды вместе дополняют этот документ. В
больших проектах может понадобиться создать более мелкие
проектные документы для основных подсистем. К концу этой стадии
набор проектных документов должен стать основой для плана всех
будущих работ. Документ могут помочь проанализировать ведущие
инженеры других команд из предметной области проекта. Когда все
дополнения и замечания собраны, фаза проектирования завершается и
официально начинается стадия реализации.
Очень хорошо, если разработчики в тестировании присоединяются
к проекту на раннем этапе. Тогда они сделают важную работу, которая
заметно повлияет на результаты. Если они правильно разыграют карты,
то упростят жизнь участников проекта, ускорив ход работы. У
разработчиков в тестировании есть очень важное преимущество в
команде: по сравнению с другими инженерами они обладают самым
широким представлением о продукте. Хороший разработчик в
тестировании добавляет свою ценность к работе
узкоспециализированных разработчиков и влияет на весь проект в
целом, а не просто пишет код. Не разработчики, а именно разработчики
в тестировании обычно выявляют общие схемы для повторного
использования кода и взаимодействия компонентов. Оставшаяся часть
этого раздела как раз и рассказывает о том, какую ценную работу могут
выполнять разработчики в тестировании на ранней стадии проекта.
На заметку
На заметку
На заметку
На заметку
На заметку
На заметку
Большие тесты
Малые тесты
На заметку
На заметку
На заметку
Хорошему кандидату на роль разработчика в
тестировании не нужно напоминать, что написанный им код
нужно тестировать. Он должен считать тестирование частью
решения.
На заметку
На заметку
На заметку
На заметку
На заметку
A — значит Attribute
На заметку
На заметку
C — значит Component
На заметку
C — значит Capability
На заметку
Возможности — это действия системы, которые она
выполняет под руководством пользователя. Это реакция
программы на ввод данных, ответы на запросы и все
операции, которые выполняет приложение по запросу
пользователя.
На заметку
Анализ рисков
Уровни BITE
Как и любое приложение, внутренние проекты всегда нужно
делать расширяемыми. В BITE есть возможность размещения
произвольных сценариев и их внедрения в тестируемую страницу. То
есть в архитектуре есть несколько логических уровней: один из них, к
примеру, позволяет разработчику удалять элементы со страницы в
поисках причины бага. Уровни могут включаться и отключаться со
специальной консоли. Мы исследуем, какие еще полезные уровни
можно добавить. Сейчас, например, мы работаем над включением
сценариев от команды безопасности.
BITE был создан как универсальное средство помощи всем
тестировщикам. Сначала его фичи были реализованы отдельными
расширениями, но команда решила, что целое — это не просто
совокупность частей, и мы потратили немало усилий на то, чтобы
эффективно свести все воедино в BITE.
Как и в случае с другими экспериментами, команда надеется
вскоре открыть доступ к проекту широкому сообществу тестирования.
Проект BITE был переведен на модель открытого кода (подробнее
в приложении В). Первым техническим руководителем был Алексис О.
Торрес; сейчас проектом руководит Джейсон Стредвик. С ним работают
Джо Мухарски, По Ху, Дэниел Дрю, Джулия Ральф и Ричард
Бастаманте, когда им удается выкроить минутку в своих текущих
проектах. На момент написания книги некоторые внешние компании
внедряли BITE в свою инфраструктуру. Сейчас мы работаем над
добавлением поддержки Firefox и Internet Explorer.
Google Test Analytics
Несмотря на то что анализ рисков нужен разработке как воздух,
этот процесс часто происходит как попало. Если данным вообще
удается покинуть головы участников команды, то часто они просто
фиксируются в таблицах. Что в этом плохого?
— У данных нет единой схемы, потому что каждая таблица
создается под конкретную ситуацию. Данные нельзя связать между
собой, а это очень неудобно, если вы следите за несколькими
проектами.
— Простые, но важные вещи, например четырехбалльная шкала
оценки и общая схема названий из ACC-анализа, порой теряются при
попытках сократить количество полей в таблицах.
— Данные не хранятся централизованно, поэтому недоступны
всегда и всем. Командам приходится запрашивать друг у друга
информацию устно при каждой необходимости.
— Разработка скриптов, которые связали бы анализ рисков с
метриками продукта, обычно обходится дорого, поэтому редко
сочетается с таблицами.
Google Test Analytics (GTA) — наша попытка решить эти
проблемы. В интерфейс GTA встроены методы ACC-анализа, это
простое приложение упрощает ввод данных и работу с рисками. Все
данные представлены по одной схеме — менеджеры и директора могут
легко получить сводку рисков по всем своим проектам, чтобы
перераспределить ресурсы в более опасные области.
Итак, GTA поддерживает модель анализа рисков ACC. Атрибуты и
компоненты вводятся в простые формы и формируют таблицы (рис.
3.42 и 3.43), а интерфейс позволяет добавлять возможности в ячейки
при планировании тестирования (рис. 3.44). Чтобы добавить риск,
нужно просто выбрать частоту и степень воздействия из выпадающих
списков для каждой возможности. Все эти значения сводятся в общую
витрину рисков. Итоговый риск для каждой области (рис. 3.45)
считается простым усреднением рисков по ней.[59]
Рис. 3.42. Test Analytics: ввод атрибутов для Google+