- PVSM.RU - https://www.pvsm.ru -

Меня часто спрашивают о том, что почитать перед собеседованием на позицию тестировщика бэкенда. И в работе я сталкиваюсь с тем, что многие соискатели не всегда понимают, что будет на интервью, и приходят неподготовленными. Так родилась идея собрать полезную информацию в одной статье.
В FunCorp есть список тем с вопросами, которые мы задаём кандидатам. Я решил дополнить его, сделать более универсальным, разбить каждую тему по уровням (что нужно знать обязательно и что будет плюсом) и добавить ссылки на статьи и книги, которые можно почитать по этим темам.
Какие проблемы помогает решить этот текст: кандидату — подготовиться к интервью, любому тестировщику бэкенда — освежить знания, тестировщику фронтенда или мобильных приложений — расширить кругозор. Работодатели могут использовать список для составления требований в вакансиях.
Сразу сделаю ремарку: необходимые знания и навыки зависят от специфики вакансии. Если вакансия про тестирование API, где используется HTTP, то вам нужно очень хорошо знать HTTP и необязательно знать нюансы работы ОС. Если вы будете работать с Windows, то вам необязательно знать bash.
Также хочу обратиться и к работодателям: не стоит спрашивать про управление памятью в Linux кандидата на позицию Mobile QA Engineer, это вряд ли пригодится ему в работе.
Я не упоминаю языки программирования, потому что это сильно зависит от используемого стека. Но часто про них вообще ничего не спрашивают на собеседованиях тестировщиков (в противном случае указывают о необходимом уровне знания языка в описании вакансии).
По многим темам я буду давать ссылки, в том числе и на «Википедию». Да, пусть это не самый качественный источник информации, однако я считаю, что она вполне подходит для поверхностного изучения темы или освежения знаний и хороша тем, что в любой статье есть множество ссылок на другие статьи по конкретной предметной области. В любом случае, я привожу ссылки и на другие статьи и книги, так что каждый может сам для себя выбрать подходящий источник информации.
Начну, пожалуй, с самого очевидного, но не самого однозначного: некоторые тимлиды могут загонять вас по всем терминам и понятиям на собеседовании, некоторые не спросят вообще ничего.
Знание основных терминов, техник тест-дизайна, умение написать качественный баг-репорт.
Формально это сертификаты ISTQB.
Есть хорошая статья на Хабре [1] со всей необходимой информацией. Если же хочется более детально разобраться в теории тестирования, то можно почитать материалы ISTQB [2].
В зависимости от ОС нужно знать либо bash (sh, zsh и т.п., но нюансы вряд ли будут играть существенную роль), либо CMD и PowerShell.
Знание базовых команд.
Кандидат знает много команд, различные опции для них, их преимущества и недостатки, различные способы использования.
Про основные команды в Linux можно почитать в одной из моих предыдущих статей [3], а также есть очень крутой репозиторий c кучей примеров на GitHub [4]. Из книг я бы посоветовал «Операционная система UNIX» [5] Робачевского, Немнюгина и Стесик — она не только про команды, а про систему в целом.
Про команды CMD можно почитать здесь [6], а у PowerShell есть хорошая документация [7].
Очень часто в качестве основного протокола для клиент-серверной архитектуры выбирают HTTP, поэтому часто спрашивают именно про этот протокол. Однако может понадобиться знать IMAP, POP3, SMTP (если будете тестировать почту), Protobuf или MessagePack или другие протоколы.
Здесь всё зависит от распространённости протокола. Вряд ли вам будут давать бинарный дамп трафика и просить десериализовать его на бумажке из Protobuf, но если речь идёт об HTTP, то нужно знать его на хорошем уровне: структуру запроса и ответа, основные заголовки, методы, коды ответов, HTTPS.
Кандидат может ответить на вопросы про кеширование, сжатие данных, cookies и использование различных заголовков в HTTP. Для других протоколов всё более субъективно.
Про HTTP вся необходимая информация есть в «Википедии [8]». Про другие протоколы советую читать их документации и спецификации. Также не стоит забывать про HTTPS [9]. Ну и само собой, нужно всегда под рукой иметь ссылки на RFC 2616 [10] и RFC 7540 [11] (но есть и другие спецификации [12]).
Многие кандидаты не имеют представления о том, что находится под HTTP. Я считаю, что это не очень хорошо характеризует их, потому что тестировщик должен обладать пытливым умом и умеренной любопытностью, поэтому знать в общих чертах о сетевой модели OSI, безусловно, надо.
Кандидат должен знать, что существуют протоколы TCP, UDP и IP и понимать их суть.
Понимание механизма работы протокола TCP (three-way handshake, некоторые поля из заголовка, флаги, скользящее окно), кандидат может назвать недостатки и преимущества TCP и UDP, области их применения, общие знания IP. Будет круто, если кандидат расскажет в двух словах и про другие протоколы (например, ARP, ICMP, ICMPv6).
Базовые знания можно получить из статей в «Википедии»: сетевая модель OSI [13], TCP [14], UDP [15], IP [16], IPv6 [17], ICMP [18], ARP [19], ICMPv6 [20]. Если хочется погрузиться в эту тему, то можно почитать «Компьютерные сети» [21] Таненбаума.
Основные запросы в MySQL (всеми любимый JOIN).
Общие знания о разных СУБД, репликации, шардировании, о внутренеемустройстве СУБД, общие знания о нереляционных БД.
В общих чертах про базы данных можно почитать в документации конкретной СУБД. Если хочется разобраться с базами данных детально, то рекомендую соответствующие главы «Высоконагруженных приложений» [22] Клеппмана.
Знание основных принципов ООП.
Будет круто, если кандидат знает некоторые паттерны.
Про принципы можно почитать, например, здесь [23], про паттерны — здесь [24]. Также есть классная книга «Приёмы объектно-ориентированного программирования. Паттерны проектирования» [25] «банды четырёх».
Для большинства вакансий тестировщиков знание нюансов работы операционных систем нерелевантно.
Будет круто, если кандидат знает про управление памятью, ядро и стек, создание новых процессов и их шедулинг, файловые системы и прочее.
Вкратце можно прочитать в уже упомянутой книге «Операционная система UNIX» [5] Робачевского, Немнюгина и Стесик. Если тема заинтересует, то можно углубиться в неё с помощью, например, «Современных операционных систем» [26] Таненбаума. В общих чертах ознакомиться с темой можно с помощью «Википедии»: есть статьи про ядро Linux [27], виртуальную память [28], context switch [29] и прочие.
Для большинства вакансий тестировщиков знание нюансов работы процессоров, памяти и периферийных устройств нерелевантно.
Будет здорово, если кандидат знает в общих чертах про работу процессора, регистры, кеши, работу памяти и диска и прочее.
Поверхностно ознакомиться с «железом» можно с помощью «Википедии»: ЦПУ [30], режим работы процессора [31], микроархитектура [32] (в этой статье много ссылок на другие статьи по теме), кеш [33], АЛУ [34], конвейер [35], branch predictor [36], суперскалярность [37] и т.д. Более целостно и глубоко эту тему можно изучить, например, с помощью книги «Архитектура компьютера» [38] Таненбаума.
Вопросы по алгоритмам и структурам данных, скорее всего, не зададут (особенно если позиция не уровня Intern или Junior), но какие-то общие вещи знать всё равно надо. Лично меня только один раз на собеседовании спрашивали про двоичную кучу, сам я тоже не любитель спрашивать про это кандидатов. Поэтому никаких критериев вводить не буду и прикреплю лишь статью с хорошими картинками [39], можно распечатать их и положить на видном месте. Если захочется погрузиться в алгоритмы и структуры данных с головой, то смело начинайте читать «Алгоритмы. Руководство по разработке» [40] Скиены или «Алгоритмы. Построение и анализ» [41] Кормена.
Классическая задача, с помощью которой можно проверить, насколько глубоко кандидат разбирается в веб-технологиях в целом. Есть подробный разбор [57] этой задачи на Хабре, но я не рекомендую вчитываться в нюансы типа «небольшое количество тока отправляется по электросхеме клавиатуры».
Да, эту задачу часто задают и на собеседовании тестировщиков бэкенда. Задача классическая, поэтому будет круто, если кандидат немного пофантазирует и представит, что может быть за этой формочкой с кнопкой. Например, можно предположить, что из формы данные уходят на бэкенд, состоящий из нескольких серверов и базы данных, что бэкенд пишет логи и имеет конфиг — это сразу добавит много тест-кейсов более глубокого уровня, чем «введём слишком длинное значение в поле ввода». Например, можно с помощью tcpdump смотреть, точно ли трафик идёт на все сервера бэкенда; можно попробовать отправить SQL-инъекцию или битый JSON (естественно, если вдруг JSON вообще есть в контексте задачи); можно проверить, что будет, если логи займут всё свободное место на диске; можно проверить работу системы при зафайрволенном бэкенде [58], корректность добавления данных в базу и т.д. Таким образом кандидат покажет свой широкий кругозор, что, несомненно, пойдёт ему на пользу.
Вариация предыдущей задачи: например, есть сервис, который слушает порт и принимает на вход JSON, отвечает в таком же формате. Всё аналогично, только формочки нет, поэтому бояться её не нужно. Подключаемся к порту, используя telnet, а дальше всё то же самое.
И опять всё то же, только с HTTP (скорее всего). Здесь можно продемонстрировать знание протокола HTTP: например, проверить работу сервиса при наличии различных заголовков в запросе.
Конечно, универсальную методичку для подготовки тестировщика бэкенда с нуля составить нельзя: всё сильно зависит от специфики компании, специфики отдела и от тимлида. Да и технологии не стоят на месте: ещё недавно Docker активно не использовался, а сейчас опыт работы с ним может быть большим плюсом. Однако я постарался собрать базовые вещи в одном месте, и если это поможет подготовиться и найти работу хотя бы одному человеку, значит, я написал эту статью уже не зря.
P.S. Также рекомендую ознакомиться со статьёй моего коллеги «Образ современного тестировщика. Что нужно знать и уметь» [59], в ней в общих чертах описаны различные направления развития для тестировщиков.
Автор: azakharenko
Источник [60]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/testirovanie/348687
Ссылки в тексте:
[1] статья на Хабре: https://habr.com/ru/post/279535/
[2] материалы ISTQB: https://www.rstqb.org/ru/istqb-downloads.html
[3] одной из моих предыдущих статей: https://habr.com/ru/post/481398/
[4] репозиторий c кучей примеров на GitHub: https://github.com/jlevy/the-art-of-command-line
[5] «Операционная система UNIX»: https://www.litres.ru/olga-stesik/operacionnaya-sistema-unix-7068476
[6] здесь: https://ss64.com/nt/
[7] хорошая документация: https://docs.microsoft.com/ru-ru/powershell/?view=powershell-7
[8] «Википедии: https://ru.wikipedia.org/wiki/HTTP
[9] HTTPS: https://ru.wikipedia.org/wiki/HTTPS
[10] RFC 2616: https://tools.ietf.org/html/rfc2616
[11] RFC 7540: https://tools.ietf.org/html/rfc7540
[12] другие спецификации: https://www.w3.org/Protocols/Specs.html
[13] сетевая модель OSI: https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_OSI
[14] TCP: https://ru.wikipedia.org/wiki/Transmission_Control_Protocol
[15] UDP: https://ru.wikipedia.org/wiki/UDP
[16] IP: https://ru.wikipedia.org/wiki/IP
[17] IPv6: https://ru.wikipedia.org/wiki/IPv6
[18] ICMP: https://ru.wikipedia.org/wiki/ICMP
[19] ARP: https://ru.wikipedia.org/wiki/ARP
[20] ICMPv6: https://ru.wikipedia.org/wiki/ICMPv6
[21] «Компьютерные сети»: https://www.litres.ru/endru-tanenbaum/komputernye-seti-42227980/
[22] «Высоконагруженных приложений»: https://www.litres.ru/martin-kleppman-1733/vysokonagruzhennye-prilozheniya-programmirov-39100996/
[23] здесь: https://gos-it.fandom.com/wiki/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B_%D0%9E%D0%9E%D0%9F:_%D0%B8%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F,_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5,_%D0%BF%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC
[24] здесь: https://refactoring.guru/ru/design-patterns/catalog
[25] «Приёмы объектно-ориентированного программирования. Паттерны проектирования»: https://www.litres.ru/dzhon-vlissides/priemy-obektno-orientirovannogo-proektirovaniya-patterny-proektirovaniya-16419747
[26] «Современных операционных систем»: https://www.litres.ru/endru-tanenbaum/sovremennye-operacionnye-sistemy-42227045/
[27] ядро Linux: https://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D1%80%D0%BE_Linux
[28] виртуальную память: https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C
[29] context switch: https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0
[30] ЦПУ: https://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80
[31] режим работы процессора: https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B6%D0%B8%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0
[32] микроархитектура: https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0
[33] кеш: https://ru.wikipedia.org/wiki/%D0%9A%D1%8D%D1%88_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0
[34] АЛУ: https://ru.wikipedia.org/wiki/%D0%90%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D0%BA%D0%BE-%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE
[35] конвейер: https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BD%D0%B2%D0%B5%D0%B9%D0%B5%D1%80
[36] branch predictor: https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%BE%D0%B2
[37] суперскалярность: https://ru.wikipedia.org/wiki/%D0%A1%D1%83%D0%BF%D0%B5%D1%80%D1%81%D0%BA%D0%B0%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C
[38] Архитектура компьютера»: https://www.ozon.ru/context/detail/id/20032936/
[39] статью с хорошими картинками: https://habr.com/ru/post/188010/
[40] «Алгоритмы. Руководство по разработке»: https://www.ozon.ru/context/detail/id/6290126/
[41] «Алгоритмы. Построение и анализ»: https://www.ozon.ru/context/detail/id/33769775/
[42] Docker: https://habr.com/ru/post/310460/
[43] REST: https://ru.wikipedia.org/wiki/REST
[44] SOAP: https://ru.wikipedia.org/wiki/SOAP
[45] JSON : https://www.json.org/json-ru.html
[46] XML: https://www.w3schools.com/xml/
[47] Protocol Buffers: https://developers.google.com/protocol-buffers
[48] MessagePack: https://msgpack.org/index.html
[49] BSON: http://bsonspec.org/
[50] TLS: https://ru.wikipedia.org/wiki/TLS
[51] Git: https://githowto.com/
[52] Nginx: https://nginx.org/ru/docs/beginners_guide.html
[53] Apache: https://tproger.ru/articles/set-up-and-configure-an-apache-server/
[54] Библиотеки: https://en.wikipedia.org/wiki/Library_(computing)
[55] TeamCity: https://www.jetbrains.com/teamcity/documentation/
[56] Jenkins: https://jenkins.io/doc/
[57] подробный разбор: https://habr.com/ru/company/htmlacademy/blog/254825/
[58] зафайрволенном бэкенде: https://habr.com/ru/company/funcorp/blog/486136/
[59] «Образ современного тестировщика. Что нужно знать и уметь»: https://habr.com/ru/company/funcorp/blog/426759/
[60] Источник: https://habr.com/ru/post/491188/?utm_campaign=491188&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.