Как тестируют WhatsApp

Компоненты Test Automation в WhatsApp
Командный дух WhatsApp

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

Подход

В течение полутора лет, с конца 2021 года до середины 2023 года, я работал в команде Test Automation в лондонском офисе WhatsApp, и мне удалось очень близко, на личном опыте ознакомиться с тем, как тестируется приложение, установленное у более чем 2 млрд. пользователей.

Моя команда Test Automation отвечала за создание тестовой инфраструктуры, инструментов и фреймворков, позволяющих разработчикам писать тесты клиентских приложений WhatsApp (а это не только Android и iOS, но также веб-приложения и десктопные). Это была важнейшая задача нашей стратегии тестирования.

В каком-то смысле подходы WhatsApp вполне стандартные, как у любого другого мобильного приложения, ориентированного на массового потребителя, со всеми обычными уровнями тестовой пирамиды

Команды в WhatsApp предпочитают использовать инструменты с открытым кодом для написания автотестов, но также создают и применяют довольно большое количество «внутренних» инструментов (далее их называем также кастомными/особыми), созданных ранее в Meta/Facebook; команды работают в гибко настраиваемой инфраструктуре, с целью соблюдения утвержденной стратегии тестирования. 

При этом подход к тестированию в WhatsApp существенно отличается от обычного подхода в Meta, то есть в Facebook.

Далее расскажу о двух ключевых аспектах, которые обеспечили у нас высокую культуру автоматизации:

  • Фреймворки и инфраструктура
  • Специальные команды и разработчики

Тестовые инструменты и фреймворки

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

Что касается мобильных фреймворков, автоматизированные тесты пишутся на всех уровнях тестовой пирамиды; сравнительно много тестов в Espresso и XCUITest; и меньше E2E-тестов.

Android

iOS

  • Юнит-тесты: XCTest
  • Тесты интерфейса: XCUI
  • Снепшот-тесты: код на Гитхабе
  • E2E-тесты: Jest-based фреймворк

Тестовая инфраструктура

Meta предоставляет всю инфраструктуру, девайсы, и CI-инструменты.

Контроль тестового покрытия

  • Кастомная инфраструктура сбора данных о покрытии юнит- и UI-тестами
  • Кастомные дашборды визуализации трендов и тестовых метрик

Управление версиями

Вот это вполне стандартное:

  • Git
  • Mercurial

Тест-раннер

  • Самописный тест-раннер

Девайсы и эмуляторы

  • Парк девайсов и эмуляторы предоставляет Meta

Что по билдам

  • Android: Gradle
  • iOS: Xcode
  • Buck2, фейсбучная внутренняя билд-система, и здесь ее код

Репорты

  • Особая инфраструктура логов
  • Мониторинг тестов — в Scuba [тоже внутренняя система управления данными, здесь подробнее о ней]
  • Также особая инфраструктура репортов

CI

Тоже внутренняя CI-система Facebook (здесь описана)

Тестирование функций (фич)

Читая этот список, можете убедиться, что Meta — это компания с потрясающей инженерной культурой, которая публикует блоги о многих своих внутренних инструментах в открытых источниках и рассказывает о них. Если интересуетесь этим, рекомендую подписаться на наш блог DevInfra, и посмотреть код проектов на GitHub, может быть, какие-то реализации покажутся полезными.

Еще об инструментах и фреймворках

Итак, существует набор стандартных и внутренних инструментов и фреймворков, в большой масштабируемой инфраструктуре Meta. Таким образом, SDET-тестировщикам в Meta нет необходимости тратить время на поддержку инфраструктуры, они работают над своими тестами, будучи уверенными, что всё будет прекрасно работать и масштабироваться, если следовать рекомендуемым практикам.

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

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

Рассказ о процессах

Схема команд в WhatsApp
Они называют себя Test Avengers

Вы ознакомились с инструментами WhatsApp, а теперь, возможно, интересует вопрос, как организованы команды и какое распределение задач.

Кто пишет автотесты

В WhatsApp основную часть автоматизированных тестов разработчики пишут сами.

Они пишут код приложения, а также юнит-тесты, и UI-тесты (интерфейса) и, иногда, некоторые важнейшие E2E-тесты. Ранее я уже выкладывал небольшую заметку об этой практике.

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

Это хорошо тем, что разработчики несут ответственность за свои тесты (владеют ими), а также отвечают за любые SEV (критикалы и дефекты высокой серьезности). Поэтому они естественным образом мотивированы на написание автоматизированных тестов соответствующего уровня надежности, чтобы продуманно покрыть тестами собственный код и снизить риски.

У нас нет специальных команд QA-автоматизации, состоящих из SDET/SET (Software engineer in tests) , введенных в состав Feature-команд, которые бы занимались только написанием автоматизированных тестов. Хотя такая практика популярна и довольно часто встречается в стартапах и крупных компаниях.

В связи с этим возникают естественные вопросы:

  • Каковы позитивные стороны такого подхода?
  • А как же инструментарий и инфраструктура? Кто-то должен все это создавать и поддерживать?
  • Тесты, написанные разработчиками, более качественные по сравнению с тестами, написанными тестировщиками?

Плюсы и минусы такого подхода

  • Одним из преимуществ является то, что пишется много автоматизированных тестов и тестирование очень хорошо автоматизировано.
  • Если тесты оказываются некачественными (то есть нестабильными и ненадежными), то тестовая инфраструктура сама позаботится о том, чтобы исключить их из числа выполняемых, и уведомляет об этом автора теста в таск-менеджере.
  • Мы считаем, что плюсом является отсутствие отдельной команды именно тестировщиков для написания всех автотестов, которая иногда является «узким местом» в QA-процессах.
  • Наши сотрудники не утруждают себя созданием и поддержкой инструментов и инфраструктуры, а просто используют существующие инструменты Meta.
  • Нестабильные тесты исправляются быстрее (так как сразу обращают на себя внимание).
  • Сотрудники реально внедряют лучшие практики тестирования, и в данном случае лозунг «Качество — это ответственность каждого» воплощается в работающий принцип, а не остается стандартным плакатом на стене.

А есть и минусы:

  • В тестах случаются некоторые проблемы с robust assertions (о твердых, или robust assertions — почитать здесь).
  • Бывает много дублирующегося кода, из-за того что у нас мало абстракций. Наши разработчики рассматривают написание тестов просто как очередную задачу в своем чек-листе перед отправкой фичи, они не уделяют должного внимания созданию хороших многократно используемых абстракций.
  • Создается довольно-таки много нестабильных и избыточных/перекрывающихся тестов.

Инфра-команды создают инструменты и фреймворки

В WhatsApp за создание и поддержку тестовых инструментов/фреймворков отвечают специальные Infra-команды.

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

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

Необходимость создавать такие специальные инфра-команды — совершенно очевидна. У SDET-разработчика, плотно занятого работой над фичами и, далее, их автоматизированным тестированием, практически не остается времени на создание системных решений для тестирования, которые бы хорошо масштабировались. Infra-разработчик не беспокоится о написании тестов и ежедневной доставке разрабатываемых функций, и может сосредоточиться исключительно на создании и поддержке инструментов и инфраструктуры. Поскольку они создают инструменты для многих команд параллельно, это приводит к появлению очень универсальных решений, которые потом могут использоваться в других проектах.

Ключевой момент — наличие понимающего руководства, которое поддерживает такое разделение обязанностей и видит его ценность, обеспечивает продвижение инициатив, и финансирование. Без этого подобная команда не сможет работать продуктивно, и в WhatsApp нам повезло, что за этой практикой стояли сильные лидеры, не боящиеся экспериментировать.

ProdOps-команда обслуживает инфра-команды

Наши Infra-разработчики это опытные инженеры-программисты, некоторые из них ранее работали в качестве штатных разработчиков в мобайле и бэкенде. И кстати — очень редко они приходили из сферы именно тестирования (не были QA Engineer), в прошлом они почти всегда были разработчиками.

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

Команда ProdOps — команда, которая восполняет этот пробел. В ней работают инженеры, называемые у нас TQS (Technical Quality Specialists).

Эта команда в некотором смысле похожа на стандартную QA-команду, отвечающую за соблюдение нашей хартии качества по всему продукту. Этой группе также приданы несколько разработчиков Android/iOS.

ProdOps-разработчики отвечают за ряд важных задач:

  • Являются экспертами в области исследовательского тестирования и глубоко понимают продукт и его пользовательские пути (flows). Они фокусируются на первоочередных функциях приложения и обеспечивают чтобы все было отлично с точки зрения QA и QC, работая над features в WhatsApp; их компетенция это например WhatsApp-каналы, аватарки и т.д.
  • Они оказывают поддержку Infra- и Feature-командам в следующем:
    • Выполняют базовый тест-дизайн и предиктивно предлагают тест-кейсы; также определяют их приоритетность (с точки зрения важности).
    • Обеспечивают качество тестовых наборов, путем обновления, а также поиска и удаления ставших ненужными тест-кейсов
    • Поддержка тестирования на проде и прочих экспериментов
    • Принятие дефектов от клиентов, доведение фидбека клиентов до продакт-менеджеров, и ранжирование полученных дефектов по приоритетам
    • Создание дашбордов, отражающих текущее состояние качества продукта
    • Иногда они также пишут автоматизированные E2E-тесты и помогают в анализе причин нестабильности тестов.

Они являются ценной ключевой командой, укомплектованной сотрудниками с весьма высоким уровнем скиллов, они обеспечивают культуру качества в WhatsApp, и, по моему мнению, именно они являются клеем, который связывает все воедино и позволяет системе работать. Эта команда (ProdOps/TQS) пользуется сильной поддержкой со стороны руководства.

Лиды в Feature-командах

В дополнение к этому WhatsApp назначила разработчика из каждой Feature-команды на роль специального Test Lead, который отвечает за анализ плана тестирования на текущий квартал, выявляет области, в которых не хватает тестового покрытия, и раздает задачи по написанию тестов для этих областей. Кроме того, они работают с командами, развивая их знания об инструментах и фичах находящихся в разработке, и способствуют повышению соответствующих скиллов в командах.

Регулярно проводятся совещания, на которых эти тест-лиды представляют свои тест-планы, получают фидбек, а затем помогают в реализации функций.

Весь проект контролируется Leadership SWE компании WhatsApp.

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

Итак

Подведем итоги:

  • WhatsApp широко использует автоматизацию для повышения качества и расширения тестового покрытия
  • При этом разработчики в WhatsApp сами пишут тесты, не только юнит-, но и вплоть до самого высокого уровня пирамиды: e2e, и даже занимаются monkey и exploratory тестированием
  • Команда автоматизации (SDET) помогает другим в создании инфраструктуры и инструментов
  • Команда ProdOps QA поддерживает команды Infra и Feature, контролируя соблюдение хартии качества
  • Выделенный менеджмент (thought leadership), склонный к экспериментам в SDET и ProdOps, обеспечивает эти практики
  • Поддержка этих команд со стороны высшего менеджмента и ввод в состав команд талантливых сеньоров помогает двигаться в правильном направлении.

Все команды работают над общей целью — быстрее выпускать качественный код. Как видите, автоматизации и обеспечению качества в WhatsApp уделяется очень большое внимание со стороны руководства компании.»

Источник


Автоматизация в Телеграме

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас