Но технологии не стояли на месте, поэтому правила разработки и тестирования быстро менялись. Эпоха статического веб-контента уходила в прошлое. Автоматизация не успевала за и без того отстающими браузерами. Взваливать тестирование на разработчиков в то время, когда они столкнулись с серьезными технологическими сдвигами, было неразумно. Мы не могли организовать нормальное тестирование этих приложений даже в ручном режиме, не говоря уже об автоматизации.
Команды разработчиков испытывали сильное давление. Google начал покупать компании со своими веб-приложениями (YouTube, Google Docs и прочие), которые только усиливали нагрузку на нашу внутреннюю инфраструктуру. Проблемы, с которыми я сталкивался в тестировании, не уступали проблемам, с которыми сталкивались разработчики при написании кода. Я пытался решить проблему тестирования, которую просто невозможно было решить отдельно от разработки. Рассматривать тестирование и разработку как обособленные дисциплины или даже как разнородные задачи было в корне неверно, и мы не могли решить ни одну из проблем. Улучшение команды тестирования стало бы всего лишь временным успехом.
Но все-таки положительные сдвиги начались. Полезно нанимать умных людей они могут сами исправить ситуацию. К 2007 году позиции дисциплины тестирования укрепились. Мы неплохо справлялись с завершающей фазой цикла выпуска. Команды разработки знали, что могут рассчитывать на нас как на партнеров в производстве. Правда, наше существование как команды поддержки позднего цикла ограничивало нас рамками традиционной модели контроля качества. Несмотря на неплохие результаты, мы все еще не достигли состояния, в котором я хотел бы оказаться. Я разобрался с проблемой найма, тестирование двигалось в нужном направлении, но мы все еще слишком поздно включались в процесс.
Наша концепция «Тест-сертификации» делала успехи (вы прочитаете про нее дальше в книге). Мы общались с командами разработчиков и помогали улучшить чистоту кода и внедрить юнит-тестирование на ранней стадии. Мы разрабатывали инструменты и обучали команды основам непрерывной интеграции, чтобы наши продукты всегда были готовы к тестированию. Бесчисленные мелкие усовершенствования и приемы, многие из которых описаны в книге, развеяли скептицизм. Тем не менее чего-то не хватало. Разработка все еще была разработкой, а тестирование так и оставалось тестированием. Все ингредиенты для изменения культуры присутствовали, но нам был нужен катализатор, который смог бы запустить объединение дисциплин.
Глядя на организацию, которая выросла из моей идеи о привлечении разработчиков на позиции тестирования, я понял, что тестирование было лишь частью нашей работы. У нас были команды, которые создавали все инструменты от репозиториев исходного кода до инфраструктуры для багтрекинговой системы. Среди нас были инженеры по тестированию, инженеры по выпуску продуктов, разработчики инструментов и консультанты. Меня поражало, как сильно тот аспект нашей работы, который не являлся непосредственно тестированием, влиял на производительность. Возможно, наша команда называлась «службой тестирования», но наши обязанности были намного шире.
Поэтому я решил оформить все официально и сменил название команды на «направление продуктивности разработки». Смена названия привела к культурному сдвигу. Люди начали говорить не о контроле качества и тестировании, а о производительности. Повышение производительности наша работа, а тестирование и контроль качества работа всех, кто пишет код. Это означает, что и тестирование, и контроль качества входят в обязанности разработчика. Команда продуктивности разработки должна заботиться о том, чтобы разработчик мог заниматься этими двумя вещами.
На первых порах идея была абстрактной, а наш девиз «Ускоряем Google» поначалу звучал наигранно. Со временем мы выполнили обещание. Наши инструменты ускорили темпы разработки, мы переходили от одного бутылочного горлышка к другому, расчищали пути и решали проблемы, с которыми сталкивались разработчики. Наши инструменты помогли разработчикам писать тесты и наблюдать их результаты при каждой сборке. Тестовые сценарии уже не выполнялись локально на компьютере тестировщика. Их результаты публиковались на информационных панелях и собирались от версии к версии, так что в итоге они становились частью общедоступных данных о готовности приложения к выпуску. Мы не просто требовали участия разработчиков, мы упрощали его. Разница между тестированием и обеспечением продуктивности наконец-то стала ощутимой: Google мог создавать новое с меньшими затратами и обходиться без накопления технического долга.
Результаты? Пожалуй, я не буду предвосхищать содержание книги, потому что ее написали для того, чтобы рассказать о них миру. Авторы приложили огромные усилия, чтобы на основании собственной работы и опыта своих коллег из Google свести наш секретный рецепт успеха к конкретному набору практических методов. Мы добились успеха во многих отношениях от сокращения времени сборки до автоматизированного тестирования в формате «запустил и забыл» и публикации в опенсорс новаторских инструментов тестирования. Когда я писал это вступление, в направлении продуктивности разработки работало около 1200 специалистов, что немногим больше численности всего технического персонала в 2005 году, когда я пришел в Google. Бренд «продуктивности» укрепился, а наше стремление ускорить Google стало неотъемлемой частью нашей технической культуры. С того первого дня, когда я сидел озадаченный и неуверенный на пятничной встрече, наша команда проделала путь длиной во много световых лет. Единственное, что не изменилось с тех пор, моя трехцветная кепка с пропеллером. Она лежит у меня на столе и напоминает о том, как далеко мы ушли.
Патрик Коупленд старший директор направления продуктивности разработки, вершина пирамиды тестирования в Google. Все тестировщики в компании подчиняются Патрику, а его руководителем, кстати, является Ларри Пейдж, соучредитель и исполнительный директор Google. Карьере Патрика в Google предшествовала почти десятилетняя работа в Microsoft на должности директора по тестированию. Он часто выступает публично и известен как архитектор используемой в Google технологии быстрой разработки, тестирования и развертывания ПО.
Предисловие
Разрабатывать программные продукты сложно. Тестировать эти продукты тоже сложно. Когда кто-то говорит о разработке и тестировании в масштабах веб, он подразумевает Google. Если вы хотите узнать, как в одной из самых известных интернет-компаний решаются проблемы тестирования в грандиозных рамках всей Сети, то вы держите в руках правильную книгу.
В Google ежедневно тестируются и выпускаются сотни миллионов строк кода, распределенного по миллионам исходных файлов. Миллиарды операций по сборке запускают выполнение миллионов автоматизированных тестов в сотнях тысяч экземплярах браузеров ежедневно. Операционные системы строятся, тестируются и выпускаются в пределах одного календарного года. Браузеры собираются ежедневно. Веб-приложения выпускаются почти непрерывно. В 2011 году сто новых фич Google+ были выпущены за сто дней.
Таковы масштабы и скорость Google они же масштабы развития веб. О том, как Google организовал тестирование в таких условиях, расскажет эта книга. Мы покажем, как проектировалась, внедрялась и сопровождалась эта инфраструктура. Мы познакомим вас с людьми, которые повлияли как на разработку основных концепций этой структуры, так и на ее реализацию.
Выкурив с Бобом десяток трубок, я пришел проведать пациента. Он не спал и тер щеку.
Больно? спросил я.
Он поднял глаза вверх и скромно ответил:
Очень!
Но все-таки лучше, чем зубная боль? сказал я в утешение.
О, хуже! ответил он.
После краткого молчание, он проговорил:
Как они добры как добры и внимательны ко мне!
Необыкновенно добры и внимательны! ответил я.
Какая у них прелестная дочь! продолжал Долли. Она, я полагаю, с меня ростом, а?
С него ростом! Девица Анастасия была ростом полных шесть футов, и стоя рядом, могла на него глядеть, как на садовую дорожку! Мы, мидльсекские, прозвали ее «блумсберийской красавицей», о чем я его и уведомил.
Это совершенно справедливо! ответил невинный Долли. Великолепное создание!
Я объявил дамам, что пациент проснулся, и они тотчас же удостоили его визитом. Мисс Анастасия была еще пленительнее в легком, развевающемся, воздушном платье. Чувствительный Адольфус чуть не ахнул при её появлении. Кружева обертывали ее, словно облака и вились около нея, и трепетали как крылья, а сквозь этот прозрачный материал, сквозила вышитая шемизетка. Голова пораженного Адольфуса склонилась на сторону, рот слегка раскрылся: он был побежден!
Они вступили в разговор. Мисс Анастасия села около него на софе, распустив свои роскошные облака и скрыв ими Долли почти совершенно.
Она чрезвычайно мило и сочувственно относилась к его страданием, симпатично вздыхала, трогательно взглядывала. Иногда его речь так сильно ее потрясала, что она на мгновение закрывала лицо надушенным платком и испускала тихие восклицание.
Что особенно заставило вас так страдать? спросила она с глубоким интересом.
Я полагаю, отвечал очарованный Адольфус: что инструмент был слишком велик для моего рта
А! ужасно! меня это бы убило! пролепетала Анастасия. Но милой девице не угрожала вовсе опасность: её ротик, хотя и классический, был достаточно широк и вместителен.
Старый де-Кад пригласил меня и Долли остаться обедать. Адольфус, к моему великому огорчению, отказался, говоря что не может теперь ничего есть.
Но мистрисс де-Кад стала его уговаривать, а мисс де-Кад воскликнула:
О, останьтесь!
И при этом так очаровательно вспыхнула, что Адольфус забыл свою рану и согласился.
Когда радужный лакей доложил, что кушать подано, Адольфус храбро предложил руку прелестной очаровательнице, и я заметил, что он ей как раз по пояс. Она приняла его руку с милейшею улыбкою и поплыла держась за него, как за дорогой ридикюль.
Как она была внимательна и добра, бесценная девушка!
Не утомляет ли вас лестница? нежно спросила она Долли, спускаясь в столовую. Не отдохнете ли вы?
Бедный Долли, который подпрыгивал, стараясь идти на цыпочках, отвечал с невинностью младенца:
О, я могу идти! Ноги у меня не болят, болит только во рту!
Глава II. Голубки
Что может быть интереснее возникающей любви? Что может быть любопытнее постепенного прогресса нежного чувства? Блаженная страсть!
Я понимаю волнение влюбленного человека, но я тоже вхожу и в чувства спекулирующей матери и ценю блогородные страдания отца.
Обед в Блумсбери-сквере внушил мисс Анастасии некоторые мысли, затмил Долли последний рассудок и подал мистрисс де-Кад самыя лестные надежды.
Поведение маленького обожателя много обещало; два раза он попробовал сказать комплимент (которой совершенно бы пропал, если бы мистрисс де-Кад не поспешила его искусно выяснить); он не сводил с красавицы глаз и в то же время трепетал, боясь что она это заметит; он чувствовал нервную дрожь и улыбался; желая для контенансу[2], положить себе молодого картофелю, он рассыпал его по полу; он метался до тех пор на своем кресле, пока не запутался в роскошных складках воздушного платья и, стараясь выпутаться, разорвал сверху до низу два полотнища.
Но все были светло и счастливо настроены, и Долли был успокоен прежде, чем краска смущение успела сбежать с его лица. Я сравнил молодой картофель с бильярдными шариками, а великолепная Анастасия, улыбаясь божественной улыбкою, сказала (я опасаюсь, не совсем чистосердечно), что она бесконечно рада погибели этого противного платья: она именно его терпеть не могла и обещалась отдать его горничной.
Я потом видел его самое платье на её младшей сестре, много обещающей в будущем девочке; она носила его по воскресеньям.
Возбужденное состояние Блумсбери-сквера достигло высшей степени, когда Долли на другой день снова явился, "показать свой рот", объяснил он; но опытную мать, как мистрисс де-Кад, не проведешь такими жалкими уловками.
Долли явился слишком рано, и потому его визит произвел большую суматоху; мисс Анастасия не успела еще облечься во всеоружие брани. Положение было критическое, но генерал не потерялся. Радужный лакей был отправлен к главе семейства с запиской смотреть Долли в рот, пока мисс Анастасия будет готова.
С этого дня надо одеваться как можно раньше, моя милая, говорила взволнованная мать. Нельзя рисковать Такой клад не скоро сыщешь! Теперь с утра надо надевать персиковое шелковое платье оно очень эффектно
Свидание Анастасии и Долли не удалось: не утешило нежных родителей и не развеселило красавицу. Войдя, Долли увидал божественное создание, глубоко погруженное в чтение книги (она держала ее вверх ногами); она вздрогнула при его неожиданном появлении и сказала, что это очень любезно с его стороны.
Радужному лакею было отдано приказание доложить мамаше, что пожаловал мистер Икль, но мамаша, слушавшая под дверями, сочла за лучшее не мешать разговору молодых людей. Она терпеливо ждала, и когда Долли уехал, кинулась к детищу, повторяя задыхающимся голосом:
Что? Что? Что?
Анастасия была раздражена. Она презрительно ответила:
У нас был преприятный разговор: мы, главным образом, толковали о его рте.
Господь Бог мой! воскликнула мамаша. Что за умовредный человек! Но каков он был вообще?
Он точно боялся меня и думал как бы сбежать. Я напрасно старалась переменить разговор: он всё сводил его к своему мизерному рту!
Она была так сердита, что не будь у Долли 1.200 фунтов годового дохода, она отправила бы недогадливого простачка на все четыре стороны.
Но побежден окончательно Долли был при втором свидании. Я это понял, как только пришел к нему и взглянул на него. Он быть ласков донельзя, шерри явилось передо мною в мгновенье ока; я молча сидел и ждал его исповеди. Он не знал, как завести речь, и начал ходить взад и вперед по комнате, ступая по пестрому ковру так, чтобы нога непременно попадала только в голубую клетку. Нервные люди, когда чем-нибудь сильно взволнованы, всегда прибегают к каким-нибудь противоволнующим средствам. Один мой знакомый, говоря мне о болезни ребенка, съел весь ноготь большого пальца; другой знакомый, в случае сильного возбуждения чувств, таскает себя неистово за бакенбарды. Некоторые дергают себя жестоко за нос; другие кусают себе губы; у иных бывают конвульсии. Долли так старался попадать в голубые клетки, что ослабел от усилий и на лбу у него показались капли нота. Ножки его выделывали разные быстрые па, и скользили, как угри; его лицо было торжественно, как у мусульманина. Напрасно я, время от времени, говорил: "какова сегодня жара, Долли, а?" или спрашивал: "что нового, Долли?" Он, казалось, не слыхал меня и не замечал. К счастью он, наконец, сбился с голубой клетки и опомнился.
Тогда он покраснел и начал:
Да, сегодня очень жарко; новостей нет; но я хочу попросить у вас совета, дорогой мой Джек. А вы, пожалуйста, надо мной не смейтесь!
Самое верное средство заставить человека смеяться это попросить его не смеяться.
Начинайте, дружище, ответил я, совершенно готовый надорвать бока от хохоту.