«SDET (Software Development Engineer in Test) — одна из ролей (тайтлов) в команде, разработчик в должности тестировщика, то есть квалифицированный разработчик, выполняющий задачи тестировщика, отвечающий за качество продукта на более высоком уровне и более квалифицированный. Эта роль была придумана в Microsoft и сейчас присутствует во многих крупных IT-корпорациях.
Чаще всего в SDET выдвигают самых перспективных тестировщиков-автоматизаторов, или же, при нехватке тестировщиков или нежелании расширять штат, главные задачи QA выполняют разработчики.
SDET работают с разработчиками и продакт-менеджерами, стараясь обеспечить отсутствие ошибок в ПО, его функциональность и соответствие пользовательским требованиям и стандартам. SDET выявляют и устраняют проблемы до того, как их заметят потребители.
SDET должен обладать достаточно большим набором скиллов, и приспосабливаться к различным обстоятельствам, уметь преодолевать препятствия. Эффективная работа в роли SDET предполагает весьма разнообразные технические навыки, а особенно умение легко «переключаться» по обстоятельствам, подобно хорошему полузащитнику в футболе.
Поскольку эта роль предполагает высокую квалификацию (и большую нагрузку), она везде хорошо вознаграждается.
Здесь я делюсь дорожной картой SDET в соответствии с моим собственным опытом. Возможно, эта карта несовершенная и ее нужно дополнить. Итак,
Кликабельно; но может быть плохо видно; здесь прямая ссылка на несжатую картинку
Методы тестирования
★ Функциональное тестирование — процесс проверки функциональности различных приложений. Черный ящик, серый ящик, белый ящик и в целом методы QA.
★ Нефункциональное тестирование — проверка других аспектов приложения, помимо его непосредственных функций. В первую очередь производительность, безопасность, юзабельность и т.д.
★ Автоматизация — без владения автоматизацией тестирования на должном уровне нельзя даже мечтать о должности SDET.
Главные инструменты автоматизации в QA:
★ Mocking — мокинг это репликация («воссоздание») окружения, в котором будет работать приложение. Используется для концентрации на тестируемом сейчас коде, а не на его поведении или внешних зависимостях. Популярные инструменты: WireMock, Mockito, SoapUI, Postman, MockServer и др.
Языки программирования и Middleware
★ Язык(и) программирования — SDET должен очень хорошо владеть языками программирования и т.н. DSA (структуры данных + алгоритмы). В первую очередь объектно-ориентированными языками, такими как Java, Python, JS.
Большой гайд по языкам программирования тестировщика
Большой гайд по структурам данных для тестировщика
★ Управление тестовыми данными — SDET должен владеть TMS-инструментами (Test Data Management) и технологиями управления данными. А также иметь понятие о базах данных и SQL/NoSQL. Должен знать разницу, например, между RDBMS и NoSQL и подобного уровня вопросы.
Большой гайд по базам данных для QA
★ Навыки отладки — отладка, или в просторечии дебаг, или просто проверка кода, иногда может быть одной из рабочих задач SDET, поскольку она позволяет «чинить» не только код разработчика с багами, но и код автотестов других тестировщиков. Умение читать логи, владение соответствующими инструментами, Kibana и т. д. Также требуется знание инструментов мониторинга и наблюдения за состоянием системы («обсервабилити»), в первую очередь это Grafana.
★ Контроль версий, или системы управления версиями, или Source Control, или управление исходным кодом. Системы для обслуживания кода и отслеживания изменений. Используются и для других типов файлов — документы, рисунки и т. д. Инструменты, разумеется, GitHub, BitBucket и т. Д.
★ API Integration & Frameworks — Знание API Integration необходимо для SDET. Платформы/фреймворки интеграции API используются для обмена данными с другими приложениями и системами. Чтобы лучше понимать всю тестируемую систему, SDET должен разбираться в API как концепции, в соответствующих фреймворках тестирования API, и тестировании пользовательских путей (user flows) между системами, чтобы избегать проблем на верхних уровнях из-за изменений на нижних.
QAOPs — TestOps — SDETOps
★ CI-CD Pipeline & Build Tools — Инструменты непрерывной интеграции и непрерывного развертывания. Они ускоряют и упорядочивают цикл разработка → тестирование → развертывание. Распространенными инструментами являются Jenkins и Sonar для создания CI/CD-конвейера («пайплайна») и достижения нужного уровня покрытия тестами.
★ Контейнеры — виртуализируют ОС и помогают развернуть приложение в любом удобном месте, например в облаке или в локальном тестовом окружении. Контейнеры помогают решить проблему чистоты окружения деплоя и упрощают автоматизацию QA. Распространенными контейнерами являются Docker (здесь быстрый гайд) и Kubernetes.
★ Развертывание/Релиз — Иногда задача SDET может состоять также в том, чтобы тестировать production-релиз в production-среде, если компания работает по схеме DTFR (Deploy on Single Server → Test on Deployed Server → Full Rollout on Production).
Цикл QAOps — теперь Operation (Ops) входит в задачи SDET
Софт-скиллы
★ Problem Solving (умение решать поставленные задачи и преодолевать препятствия)
★ Критическое мышление
★ Аналитическое и стратегическое мышление
★ Адаптивность и гибкость
★ Управление тестированием
★ Командная работа и сотрудничество (коллаборация)
Подробнейший гайд по софт-скиллам тестировщика
Дополнительно
★ Умение плодотворно сотрудничать с продакт-менеджером, бизнесом и разработчиками
★ Экспертность в предметной области
★ Умение делать презентации (для бизнеса, клиентов)
★ Знание Agile и его церемоний
★ Планирование тестирования
Дополнительные хард-скиллы
★ Облака — AWS, GCP. Azure, гибридные
★ Queues — Владение Kafka, RabbitMQ, Solace и др.
★ LB/Proxy — Nginx, F5, Kong и другие прокси-серверы и балансировщики нагрузки
AI/ML/DS
★ Gen AI (генерация изображений, текста, звука и видео) — самая хайповая тема в индустрии
★ Cognitive Computing
★ Компьютерное зрение
★ Нейронные сети
★ Глубокое обучение (DL)
★ Машинное обучение (ML)
★ Обработка естественного языка (NLP)
Упоминание скилла в списке не означает, что SDET должен владеть им в превосходной степени, или владеть всеми без исключения. Он должен разбираться в них, чтобы претендовать на роль хорошего, надежного связующего звена — между бизнесом, продуктом (приложением), разработчиками и клиентами. Примерно так:
SDET как бы балансирует сущности цифрового мира»