Этапы собеседования

Тестовое задание: как сделать, сдать и защитить

Обновлено 8 мин чтения от 2 до 8 часов работы, срок сдачи обычно 3-7 дней Задание выдаёт рекрутер, проверяют инженеры команды, защита с тимлидом или разработчиком
Содержание
  1. Коротко
  2. Что проверяют
  3. Как проходит
  4. Когда дают тестовое
  5. Сколько времени тратить
  6. Как уточнять условия
  7. Что оценивают в тестовом
  8. README и тесты: что в них положить
  9. Как отказаться или договориться
  10. Защита тестового
  11. Вопросы из базы
  12. Частые ошибки
  13. Чек-лист подготовки
  14. Как тренировать
  15. Частые вопросы
Коротко

Тестовое задание проверяет, как вы пишете код в спокойной обстановке: структуру, читаемость, тесты и умение довести работу до конца. Разумный объём: от 2 до 8 часов. Уточните условия до старта, сдайте с README и тестами и готовьтесь объяснить каждое решение на защите.

Что проверяют

  • Понимаете ли вы задачу и задаёте ли уточняющие вопросы
  • Структура проекта: можно ли быстро разобраться в коде
  • Читаемость: имена, размер функций, отсутствие мёртвого кода
  • Тесты на ключевую логику и краевые случаи
  • Обработка ошибок и пустых состояний
  • README: как запустить, что сделано, какие компромиссы
  • Умение уложиться в срок и честно описать, что не успели

Как проходит

  1. 1

    Получение задания

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

  2. 2

    Уточнение условий

    Вы задаёте вопросы по неясным местам и договариваетесь о сроке, если он не подходит.

  3. 3

    Работа

    Делаете минимальную рабочую версию, потом улучшаете. Коммитите по шагам, а не одним куском.

  4. 4

    Сдача

    Отправляете ссылку на репозиторий с README. Коротко пишете, что сделано и что нет.

  5. 5

    Проверка

    Инженеры смотрят код по своему чек-листу. Обычно это занимает от пары дней до недели.

  6. 6

    Защита

    На отдельном звонке вас просят объяснить решения, иногда доработать что-то при них. Подробнее в разделе лайвкодинг.

Когда дают тестовое

Тестовое чаще встречается у junior и в небольших компаниях, где нет отдельной секции алгоритмов. Крупные компании чаще заменяют его лайвкодингом. Иногда тестовое выдают до первого технического звонка, чтобы отсеять поток откликов.

СитуацияЧего ждать
Junior без коммерческого опытаТестовое почти наверняка: код заменяет опыт в резюме
Middle в продуктовую командуТестовое или лайвкодинг, иногда на выбор
SeniorЧаще system design и разбор опыта, тестовое реже
Аналитик, QAЗадание на SQL, тест-кейсы, баг-репорты или ТЗ
ДизайнерКейс или разбор портфолио
Если тестовое прислали до того, как с вами поговорил хоть один человек, спросите про вилку и этапы. Тратить вечер на задание в компанию, где вилка вам не подходит, обидно.

Сколько времени тратить

Хорошее тестовое делается за вечер или выходной. Если по ощущениям нужно больше двух полных дней, это повод обсудить объём. Время, которое вы тратите, никто не видит. Видят результат и то, как вы о нём рассказываете.

Объём заданияЧто делать
До 4 часовДелайте целиком, с тестами и README
4-8 часовНормально, но заранее решите, что отрежете, если не успеете
Больше 8 часовПредложите сократить объём или сделать часть
Похоже на реальную задачу продуктаСпросите об оплате или откажитесь

Поставьте себе лимит и следите за ним. Лучше сдать аккуратные 80% с честным списком «что бы я доделал», чем все 100% с кашей в коде.

Как уточнять условия

Вопросы до старта показывают зрелость. Задавайте их одним письмом, а не по одному в день. Если ответа нет, сами примите решение и запишите его в README.

  • Какой срок и можно ли его сдвинуть на пару дней
  • Какие технологии обязательны, а какие на ваш выбор
  • Нужны ли тесты и какое покрытие ожидают
  • Что важнее: полнота функций или качество кода
  • Можно ли использовать готовые библиотеки
  • Как сдавать: публичный репозиторий, приватный, архив
  • Будет ли защита и в каком формате
Письмо с уточнениями

Здравствуйте! Спасибо за задание. Пара вопросов перед стартом: можно ли использовать библиотеку для работы с датами и нужны ли тесты на UI или достаточно тестов логики? Планирую сдать в четверг вечером, это подходит?

Что оценивают в тестовом

У проверяющих почти всегда есть чек-лист. Он похож от компании к компании. Вот что в нём обычно стоит и как это выглядит хорошо и плохо.

КритерийХорошоПлохо
ЗапускОдна команда из README, всё работаетНужно угадывать версии и переменные
СтруктураЛогика отделена от ввода-вывода и UIВсё в одном файле на 600 строк
ИменаПо имени понятно, что делает функцияdata, temp, handle2
ОшибкиПустые данные и сбои сети обработаныПадает на пустом списке
ТестыКлючевая логика и краевые случаиТестов нет или один для вида
ИсторияПонятные коммиты по шагамОдин коммит «done»
READMEЧто сделано, что нет, почему такПусто или шаблон фреймворка

Сложная архитектура «на вырост» обычно не плюс. Проверяющие ищут простое решение, которое легко менять. Лишние слои и паттерны ради паттернов читаются как неумение выбирать.

README и тесты: что в них положить

README это ваш голос, когда вас нет рядом. Многие проверяющие начинают с него и по нему решают, насколько внимательно читать код.

  1. Как запустить: команды установки, запуска и тестов
  2. Что сделано: список функций по пунктам задания
  3. Решения: почему выбрали этот подход и библиотеки
  4. Компромиссы: что упростили и почему
  5. Что бы доделал: 3-5 пунктов при наличии времени

Тесты пишите на то, что может сломаться: расчёты, фильтры, обработку ошибок, граничные значения. Не обязательно покрывать всё. Важно показать, что вы понимаете, что именно стоит проверять. Про стратегию тестирования есть урок Тестирование и вопрос Стратегия тестирования проекта.

История коммитов тоже читается. Маленькие осмысленные коммиты показывают, как вы работаете в команде. Освежите основы в уроке Git.

Как отказаться или договориться

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

  • Предложите показать свой проект на GitHub вместо задания
  • Попросите сократить объём до ключевой части
  • Предложите лайвкодинг на час вместо недели работы
  • Для большого задания спросите про оплату
Вежливый отказ с альтернативой

Спасибо за задание. По оценке оно займёт у меня 3-4 полных дня, сейчас я не могу выделить столько времени. Могу предложить два варианта: сделать только модуль расчёта с тестами или пройти лайвкодинг с вашим инженером. Если подходит, буду рад продолжить.

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

Защита тестового

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

Почему вы выбрали такую структуру проекта?

Что проверяют
Проверяют, было ли решение осознанным.
Как отвечать
Назовите альтернативу и причину выбора. Свяжите с объёмом задачи.
Пример ответа
Задача маленькая, поэтому я не стал делить на слои. Логику расчёта вынес в отдельный модуль, чтобы её можно было тестировать без UI.

Что бы вы сделали иначе, будь у вас больше времени?

Что проверяют
Проверяют самокритику и понимание слабых мест.
Как отвечать
Назовите 2-3 конкретных пункта, лучше из README. Не ругайте весь код целиком.
Тезисы ответа и тренировка вслух

Как этот код поведёт себя на большом объёме данных?

Что проверяют
Проверяют понимание сложности и узких мест.
Как отвечать
Оцените сложность ключевой операции и предложите, что изменить: индекс, пагинация, кеш.

Добавьте при нас ещё одно поле или правило.

Что проверяют
Проверяют, легко ли ваш код меняется и как вы работаете под наблюдением.
Как отвечать
Проговаривайте шаги вслух, сначала найдите место, потом поправьте тест.

Расскажите, как вы тестировали решение.

Что проверяют
Проверяют подход к качеству.
Как отвечать
Опишите, какие случаи покрыли тестами и что проверили руками.
Тезисы ответа и тренировка вслух

Перед защитой перечитайте свой код целиком. За неделю детали забываются, а вопрос «зачем здесь эта проверка?» без ответа выглядит плохо. Рассказ о своём решении тренируется так же, как рассказ о проектах.

Вопросы из базы Техпрогона

Частые вопросы этого этапа с ответом и разбором. Откройте любой и попробуйте ответить сами.

Частые ошибки

  • Начать без уточнений и сделать не то, что просили
  • Тратить неделю на задание, которое рассчитано на вечер
  • Сдать без README и инструкции запуска
  • Оставить закомментированный код, console.log и TODO без объяснений
  • Один коммит на всё решение
  • Усложнить архитектуру слоями «как в большом проекте»
  • Не перечитать свой код перед защитой
  • Молча не сдать и пропасть вместо честного отказа

Чек-лист подготовки

  • Задал уточняющие вопросы одним письмом
  • Определил лимит времени и что отрежу при нехватке
  • Сделал рабочую версию, потом улучшил
  • Написал тесты на ключевую логику и краевые случаи
  • Обработал пустые данные и ошибки
  • Убрал отладочный и мёртвый код
  • Написал README: запуск, решения, компромиссы, что доделать
  • Проверил запуск с нуля на чистой копии репозитория
  • Перечитал код за день до защиты
  • Подготовил ответы на «почему так» и «что бы изменил»

Как тренировать этот этап в Техпрогоне

  • Уроки треков роли закрывают пробелы, которые всплывают в тестовом: тесты, Git, структура кода
  • Задачи с автопроверкой приучают писать код, который проходит скрытые краевые случаи
  • Устные вопросы с чек-листом тезисов тренируют защиту: «почему так», «что изменить»
  • Лестница стресса: шаг «Вслух» записывает голос на устройстве, слышно, где вы путаетесь в объяснении
  • Живой мок по ссылке: друг задаёт вопросы по вашему решению, как на защите
  • Трекер собесов: отмечайте этап тестового, а после защиты заполните анкету, слабые темы уйдут в план повторений

Частые вопросы

Сколько времени нормально тратить на тестовое?
Обычно от 2 до 8 часов. Если задание явно требует нескольких полных дней, обсудите сокращение объёма или оплату.
Можно ли отказаться от тестового задания?
Да. Вежливо объясните причину и предложите альтернативу: свой открытый проект, сокращённую часть задания или лайвкодинг.
Нужны ли тесты, если о них ничего не сказано?
Да, хотя бы на ключевую логику. Тесты почти всегда есть в чек-листе проверяющих, даже если в задании о них молчат.
Что делать, если не успеваю к сроку?
Предупредите заранее и попросите пару дней. Или сдайте то, что готово, и честно опишите в README, что не успели и как бы доделали.
Можно ли пользоваться готовыми библиотеками?
Обычно да, если задание не запрещает. Объясните выбор в README. Если суть задания в самой логике, не заменяйте её библиотекой.
Почему после тестового отказали без объяснений?
Часто проверяющие не успевают писать развёрнутый отзыв. Попросите короткий фидбек, как это сделать, описано на странице про отказ.

Отрепетируйте тестовое задание до собеса

Уроки, билеты, устные вопросы с тезисами и мок вслух с таймером. Бесплатный тариф без ограничения по времени.

Другие этапы и разделы