Онлайн-тестирование создало новую проблему: кандидаты всё чаще используют ChatGPT, копируют решения из интернета или просят помочь коллег. Как убедиться, что результаты теста отражают реальный уровень кандидата?
Насколько распространено читерство
По данным рекрутинговых опросов, около 30% кандидатов признают, что использовали внешнюю помощь при прохождении онлайн-тестов. Ещё больше делают это, не считая нарушением («я же смотрю документацию»).
Читерство — системная проблема, не решаемая моральными призывами. Нужны структурные меры.
Признаки нечестного прохождения
Технические маркеры
Слишком быстрое решение: если задача на оконные функции занимает у опытного кандидата 5–7 минут, а кандидат сдал за 40 секунд — это подозрительно.
Нестандартный стиль кода: ChatGPT пишет запросы в определённом стиле (комментарии на английском, специфические отступы, объяснения в коде). Если стиль сильно отличается от ответов на другие вопросы — стоит насторожиться.
Идеальный код с первого раза: реальные кандидаты делают опечатки, исправляют, пробуют. Идеально чистый финальный запрос без следов отладки — подозрительно.
Поведенческие маркеры
Не может объяснить своё решение: на разборе задач кандидат говорит «ну, тут вот JOIN», не понимая, почему выбран именно такой подход.
Разрыв между тестом и интервью: на тесте 90%, на живом собеседовании не может написать базовый запрос. Это почти всегда читерство.
Методы защиты
1. Live-кодинг как финальный этап
Самый надёжный метод — попросить кандидата решить задачу в реальном времени при наблюдении. Инструменты:
- Google Meet / Zoom с демонстрацией экрана
- Общий SQL-редактор (например, через веб-интерфейс БД)
- Разрешить пользоваться документацией, но не AI
Важно: live-кодинг стрессовее для кандидата. Это нормально для Middle/Senior, но может несправедливо отсеять хороших Junior-кандидатов.
2. Задачи с уникальными данными
Если каждый кандидат получает тест с уникальными значениями (разные названия таблиц, разные условия), скопировать решение сложнее.
-- Вместо стандартной таблицы 'orders' используйте
-- 'purchases_q1_2026' с уникальными полями
-- Это затрудняет поиск готового решения в интернете
3. Включение «заминированных» задач
Добавьте задачу, в которой стандартное решение содержит распространённую ошибку:
-- Задача выглядит простой, но кандидат должен заметить ловушку
-- Таблица payments содержит NULL в поле customer_id
-- Задача: найдите клиентов, у которых НЕТ платежей
-- ChatGPT часто выдаёт небезопасный NOT IN:
SELECT * FROM customers
WHERE id NOT IN (SELECT customer_id FROM payments);
-- Если customer_id содержит NULL → результат пуст! Это ошибка.
-- Правильный ответ должен использовать NOT EXISTS или IS NOT NULL
Кандидат, который не заметил ловушку и не может её объяснить, скорее всего, просто скопировал.
4. Разбор решений как обязательный этап
Введите правило: после тестового задания всегда проводится 15-минутный созвон для разбора. Объявите об этом заранее:
«После теста мы созваниваемся на 15 минут для обсуждения ваших решений».
Это снижает мотивацию к читерству — если придётся объяснять чужой код, проще написать свой.
5. Вопросы на объяснение
В ходе разбора задайте специфические вопросы:
- «Почему вы выбрали LEFT JOIN, а не INNER JOIN?»
- «Что произойдёт, если добавить ещё одно условие в HAVING?»
- «Как можно переписать этот запрос, чтобы он работал быстрее?»
Кандидат, написавший код сам, ответит на эти вопросы. Тот, кто скопировал, — будет мяться.
Как реагировать на подозрения
Прямые обвинения в читерстве — плохая практика. Вместо этого:
- Дайте похожую задачу на live-кодинге — если кандидат не справляется, результат говорит сам за себя
- Задайте углублённые вопросы — искренне интересуйтесь ходом мысли, а не ловите
- Не принимайте оффер на основе одного теста — всегда комбинируйте с интервью
Баланс между защитой и опытом кандидата
Избыточный античит создаёт плохой опыт для честных кандидатов. Помните:
- Разрешение пользоваться документацией — это нормально (в реальной работе все так делают)
- Ограничение AI — обоснованно (это проверка навыков, а не умения промптить)
- Прокторинг с камерой — избыточно для большинства позиций
Цель — не поймать читера, а убедиться, что вы нанимаете человека с нужными навыками.
Предложите кандидатам честно подготовиться к тесту на SQLlab.ru — там тысячи задач, которые готовят именно к таким техническим скринингам.