vyvchy
    Теми розділу

    13 · Співбесіда

    Тестове завдання

    Зміст

    Тестове завдання (test assignment, home task) — це етап воронки найму, де компанія перевіряє не що ти знаєш, а як ти працюєш. Технічна секція показує ерудицію під тиском; тестове показує твій робочий продукт: як ти декомпонуєш недоописану задачу, що вважаєш важливим, як оформлюєш результат, коли ніхто не стоїть над душею. Для QA це майже ідеальний фільтр, бо саме це і є щоденна робота — узяти сиру фічу, вигадати перевірки, розставити пріоритети й віддати артефакт, зрозумілий іншим.

    Але тестове має два боки. Зроблене добре, воно витягує кандидата навіть після посередньої усної розмови — бо артефакт лишається й говорить сам за себе, коли емоції співбесіди вже забулись. Зроблене погано, воно з'їдає вихідні на тестування чужого продукту без жодного фідбеку. Ця глава — про те, як зробити тестове сильно й швидко, і де провести межу, за якою воно перетворюється на безкоштовну працю.

    Формати тестового: що саме просять

    Попри різноманіття формулювань, майже всі тестові для QA зводяться до трьох форматів. Розпізнати формат — перший крок, бо він диктує, який артефакт від тебе чекають.

    Тест-кейси або чекліст для фічі. Дають опис фічі, макет у Figma, посилання на демо-застосунок чи просто словесну постановку («форма реєстрації», «сторінка кошика») — і просять спроєктувати перевірки. Очікуваний артефакт: структурований набір тест-кейсів або чекліст, часто в Google Sheets чи документі. Це найпоширеніший формат для Manual QA junior.

    Пошук і оформлення багів. Дають навмисно зламаний білд, тестовий сайт або відео — і просять знайти дефекти та завести їх як багрепорти. Тут перевіряють не лише спостережливість, а й якість оформлення: чи є чіткі кроки відтворення, фактичний і очікуваний результат, severity, докази (скриншот, лог, HAR-файл із вкладки Network — див. «DevTools: вкладка Network і дебаг»).

    Автотест-проєкт для AQA. Дають публічний застосунок (класика — демо-магазини на кшталт saucedemo чи публічне REST API) і просять покрити його автотестами. Очікуваний артефакт: репозиторій з кодом, який рецензент клонує й запускає. Це найважчий формат за трудомісткістю й найпоказовіший, бо показує не тільки тест-дизайн, а й інженерну культуру.

    Іноді формати комбінують: спершу чекліст, потім автоматизація частини кейсів. Якщо формат із постановки неясний — це перше, що варто уточнити в рекрутера, а не вгадувати.

    Що насправді оцінюють

    Кандидати часто думають, що виграє той, хто написав більше кейсів або знайшов більше багів. Це хибний орієнтир. Рецензент зазвичай витрачає на одне тестове 10–20 хвилин і читає його як робочий артефакт від майбутнього колеги. Він шукає три речі.

    Покриття (coverage). Не кількість, а розподіл: чи є негативні перевірки й крайові значення, а не лише happy-path; чи видно, що за кейсами стоять техніки тест-дизайну — класи еквівалентності, граничні значення, таблиці рішень — навіть якщо ти їх не називаєш уголос. Форма реєстрації, покрита лише перевіркою «ввів валідні дані — зареєструвався», — це провал, хоч би яка гарна була таблиця.

    Пріоритезація (prioritization). Найважливіший і найрідший навик у junior. Порядок кейсів має говорити, що для тебе критичне: спершу критичний шлях (critical path) і сценарії з найбільшим ризиком, потім другорядне. Якщо всі 40 кейсів звалені в купу з однаковою вагою, рецензент не бачить твого мислення. Уміння сказати «ось ці 10 перевірок я пройшов би першими, якби мав годину» цінніше за 40 рівноцінних рядків.

    Оформлення. Артефакт має читатись без твоїх пояснень: єдиний формат кейсу, зрозумілі назви, які описують перевірку, а не дію, консистентність. Неохайне тестове читається як сигнал, що й баг-репорти в роботі будуть такими ж.

    КритерійСлабкоСильно
    ПокриттяЛише happy-pathПозитивні + негативні + крайові
    ПріоритезаціяУсе в купі, рівна вагаВидно критичний шлях і ризики
    ОформленняРізнобій, «клік туди-сюди»Єдиний формат, назва = перевірка
    ПрипущенняМовчазні здогадиЯвно виписані на початку

    Останній рядок — про те, чого не оцінюють прямо, але що вирізняє сильного кандидата: явно зафіксовані припущення. Тестове завжди недоописане навмисно. Той, хто на початку пише «припускаю, що поле email обов'язкове й валідується за RFC, ліміт 254 символи», показує аналітичне мислення краще, ніж той, хто просто вгадав і мовчки протестував.

    Скоуп і час: головна пастка тестового

    Тестове недоописане не через недбалість замовника, а свідомо: невизначеність — частина перевірки. І тут ховається головна пастка. Задачу «протестуйте форму логіну» можна розкрити на пів години, а можна закопатися в неї на два дні — локалі, таймзони, unicode, конкурентні сесії, доступність. Кандидат, який намагається покрити все, або вигорає й здає із запізненням, або віддає розмите полотно без фокусу.

    Тому дисципліна тут така сама, як у горящому релізі: зафіксуй скоуп сам, якщо його не зафіксували за тебе. Практично це означає почати артефакт не з кейсів, а з короткого блоку:

    • Припущення (assumptions) — що ти вважаєш правдою за браку вимог.
    • У скоупі / поза скоупом — що ти тестуєш, а що свідомо лишаєш (наприклад, «навантаження й безпека поза скоупом цього завдання»).
    • Питання, які я б поставив — те, що в реальній роботі уточнив би в аналітика. Це показує, що ти не вигадуєш вимоги мовчки.

    Далі — таймбокс (timebox). Постав собі ліміт (типово 2–4 години) і в кінці напиши, скільки часу витратив. Це не слабкість, а зрілість: рецензент бачить, що ти вмієш дати сфокусований результат у рамках, а не тонеш у переліку. Глибокий зріз одного критичного шляху майже завжди сильніший за поверхневе «все потроху». Краще п'ять продуманих кейсів логіну з негативами й межами, ніж тридцять рядків, де кожен — просто ще одна варіація happy-path.

    Тестове для AQA: проєкт, який запускається однією командою

    Для автотест-проєкту діє жорстке правило, про яке junior часто не здогадується: найперший фільтр — чи воно взагалі запускається. Рецензент — зайнятий інженер. Якщо він клонує репозиторій, а той не стартує, вимагає ручного налаштування бази чи падає на першій команді, він закриває вкладку, не дочитавши жодного тесту. Найелегантніший код нічого не важить, якщо до нього не дійшли.

    Ні

    Так

    Ні

    Так

    Рецензент відкриває репозиторій

    Є README з командою запуску?

    Закрив, наступний кандидат

    Клон, npm ci, одна команда

    Тести проходять?

    Читає структуру й рішення в коді

    Оцінка покриття і якості

    Ні

    Так

    Ні

    Так

    Рецензент відкриває репозиторій

    Є README з командою запуску?

    Закрив, наступний кандидат

    Клон, npm ci, одна команда

    Тести проходять?

    Читає структуру й рішення в коді

    Оцінка покриття і якості

    Звідси конкретні вимоги до проєкту.

    README — не формальність, а вхідні двері. Він має відповісти на чотири питання за 30 секунд: що це, як установити, як запустити, що покрито. Мінімальний, але повний README:

    # QA Test Assignment — Імʼя Прізвище
    
    ## Що це
    Автотести для демо-магазину на Playwright + TypeScript.
    
    ## Вимоги
    - Node.js 22+
    
    ## Запуск
        npm ci
        npm test
    
    ## Що покрито
    - Логін: валідний, заблокований юзер, порожні поля
    - Кошик: додавання, зміна кількості, оформлення замовлення
    
    ## Рішення й компроміси
    - Дані готую через API, не клікаю UI — швидше й стабільніше
    - Оплату лишив поза скоупом: залежить від зовнішнього провайдера
    
    ## Що додав би з більшим часом
    - Крос-браузерний прогін і візуальні перевірки

    Запуск однією командою. Ідеал — npm ci && npm test. У package.json пропиши скрипт, щоб npm test запускав npx playwright test; не змушуй читача гадати. Жодних кроків «спершу підніми Docker, потім заповни .env руками» без крайньої потреби. Якщо змінні оточення потрібні — дай .env.example зі значеннями за замовчуванням.

    Структура, яку видно. Навіть у трьох тестах покажи інженерну культуру: локатори за пріоритетом (getByRole, getByLabel, data-testid), а не крихкі XPath; сторінки як page object, а не копіпаст; підготовка стану через API замість кліків; жодних waitForTimeout із магічним числом — тільки web-first очікування. Один охайний тест каже про тебе більше, ніж двадцять скопійованих.

    import { test, expect } from '@playwright/test';
    
    test('заблокований юзер бачить помилку логіну', async ({ page }) => {
      await page.goto('/login');
      await page.getByLabel('Username').fill('locked_out_user');
      await page.getByLabel('Password').fill('secret_sauce');
      await page.getByRole('button', { name: 'Login' }).click();
    
      await expect(page.getByRole('alert')).toContainText(/locked out/i);
    });

    Головний принцип — маленьке й робоче замість великого й зламаного. Три-п'ять тестів, які запускаються з першого разу й покривають критичний шлях, б'ють недописаний «фреймворк» на 500 рядків, що падає на старті. Overengineering тут — не плюс, а червоний прапорець: ти вирішуєш проблеми, яких ще немає.

    Подача і обґрунтування

    Артефакт — лише половина. Друга половина — як ти його подаєш і захищаєш, бо тестове майже завжди має продовження: дзвінок, де питають «чому ти протестував це, а не те» і «що додав би, якби мав більше часу».

    Тому до самого артефакту додай короткий супровід: припущення, що і чому ти пріоритизував, відомі прогалини, план на «якби більше часу». Для автопроєкту це секції README; для чекліста — вступний абзац. Цей супровід перетворює твої свідомі компроміси з невидимих на прочитані. Різниця величезна: «оплату не покрив, бо це залежить від зовнішнього провайдера й потребує тестових карток — виніс поза скоуп» звучить як інженерне рішення, а мовчазна відсутність оплати — як недогляд.

    На захисті будь готовий обґрунтувати кожен вибір. Сильний хід — визнавати межі відкрито: «happy-path оформлення я не автоматизував свідомо, бо він найдорожчий у підтримці й найкрихкіший — я б покрив його вручну». Чесне «ось що я не встиг і чому» завжди сильніше, ніж удавана повнота, яку інтерв'юер за хвилину розколупає одним уточнювальним питанням.

    Межа розумного: коли це вже безкоштовна праця

    Не всяке «тестове» чесне. Частина завдань — це замаскована безкоштовна праця: тебе просять протестувати реальну продакшн-фічу компанії, скласти повну тест-стратегію їхнього продукту або написати автоматизаційний каркас, який вони потім заберуть. Junior особливо вразливий: він вкладає 15–20 годин, аби «точно взяли», а у відповідь отримує тишу.

    Ні

    Так

    Реальна прод-фіча компанії

    Демо або публічний застосунок

    Отримав тестове

    Скоуп і час обмежені?

    Ризик безкоштовної праці

    Ціль — реальний продукт чи демо?

    Роби, але в таймбоксі

    Уточни очікування, віддай обмежений зріз

    Ні

    Так

    Реальна прод-фіча компанії

    Демо або публічний застосунок

    Отримав тестове

    Скоуп і час обмежені?

    Ризик безкоштовної праці

    Ціль — реальний продукт чи демо?

    Роби, але в таймбоксі

    Уточни очікування, віддай обмежений зріз

    Ознаки чесного завдання: обмежений обсяг (реально 2–4 години), синтетична або публічна ціль (демо-застосунок, тренувальне API), чіткий бриф, і компанія готова дати фідбек. Ознаки сумнівного: тестуєш їхній реальний продукт із розмитим «знайдіть у нас баги й побачимо», необмежений скоуп, прохання зробити повноцінний фреймворк, кілька раундів безоплатної роботи поспіль.

    Що з цим робити — без конфронтації, але й без наївності. По-перше, таймбокс рятує в будь-якому разі: постав собі стелю годин незалежно від амбіцій завдання й віддай сфокусований зріз із поміткою «ось приблизно N годин роботи, радо обговорю решту на дзвінку». По-друге, доречно заздалегідь спитати рекрутера про очікуваний обсяг і час — адекватна компанія відповість спокійно, а роздратування у відповідь саме по собі є відповіддю. Систематичні тестові-експлуатація — це вже тема червоних прапорців процесу; докладніше — у главі «Червоні прапорці й відмови».

    Типові помилки

    • Тестую все підряд. Виглядає як ретельність, а насправді дає розмите полотно без пріоритетів — рецензент не бачить, що для тебе критичне.
    • Проєкт не запускається / немає README. Виглядає як «код же є», а насправді рецензент закриває репозиторій, не дочитавши жодного тесту.
    • Тільки happy-path. Виглядає як «основне покрито», а насправді відсутність негативних і крайових перевірок — головна ознака junior, який не володіє тест-дизайном.
    • Купа кейсів без пріоритету. Виглядає як велике покриття, а насправді ховає невміння відрізнити критичне від другорядного.
    • Мовчазні припущення. Виглядає як «я ж протестував», а насправді ти вгадав вимоги й не показав аналітичного мислення, яке й оцінюють.
    • Overengineering фреймворку. Виглядає як сильна інженерія, а насправді — недописаний каркас на 500 рядків, що падає на старті, замість трьох робочих тестів.
    • 15–20 годин на безкоштовне тестове. Виглядає як старанність, а насправді ти без таймбоксу тестуєш чужий продукт задарма, часто без гарантії навіть фідбеку.
    • Скопійоване чи повністю AI-згенероване рішення без розуміння. Виглядає як готова робота, а насправді валиться на першому ж «чому тут саме так» на захисті.

    Підсумок

    • Тестове перевіряє не обсяг знань, а робочий продукт: як ти декомпонуєш недоописану задачу й оформлюєш результат для інших.
    • Оцінюють три речі — покриття (позитив + негатив + межі), пріоритезацію (видно критичний шлях) і оформлення; кількість кейсів сама по собі не важить.
    • Скоуп фіксуй сам: припущення, у скоупі/поза скоупом, питання до аналітика й таймбокс — глибокий зріз б'є поверхневе «все потроху».
    • Для AQA перший фільтр — запуск однією командою з README; маленьке й робоче сильніше за велике й зламане.
    • Захист не менш важливий за артефакт: обґрунтуй компроміси відкрито, а безмежне тестове в таймбокс — щоб не працювати задарма.

    Що питають на співбесіді

    • «Чому ви протестували саме це, а не інше?» Дивляться на пріоритезацію й ризик-орієнтоване мислення: чи можеш ти назвати критичний шлях і пояснити вибір, а не «ну, встиг стільки».
    • «Що б ви додали / покрили ще, якби мали більше часу?» Дивляться, чи усвідомлюєш ти власні прогалини й чи є в тебе картина повного покриття понад зданий зріз.
    • «Скільки часу ви витратили і чому зупинилися?» Дивляться на зрілість роботи зі скоупом і таймбоксом, а не на готовність працювати нескінченно.
    • «Проведіть по своєму рішенню — які припущення ви зробили?» Дивляться на аналітику: чи виписав ти невизначеності явно, чи мовчки вгадав вимоги.
    • (Для AQA) «Чому така структура / такі локатори / чому саме тут мок?» Дивляться, чи розумієш ти власний код і рішення, чи скопіював їх без розуміння.

    Формат «протестуйте поле / форму / об'єкт», з якого часто виростає тестове, розібрано у главах «Технічна співбесіда Manual QA» і «Лайвкодинг для AQA». Де тестове стоїть у загальній воронці найму — у главі «Ринок і процес найму: від відгуку до офферу».

    Джерела

    • ISTQB® Certified Tester Foundation Level Syllabus v4.0 — розділ 4 «Test Analysis and Design» (техніки тест-дизайну й покриття) і розділ 5 (пріоритезація та ризики). Саме ці навички тестове й вимірює, хай і без згадки самого формату.
    • Playwright — Installation & Getting Started — офіційний старт проєкту: структура, конфіг і запуск, з якого зручно почати автотест-тестове.
    • npm ci — npm Docs — чому npm ci дає відтворюване, чисте встановлення залежностей за package-lock.json, і чому це правильна перша команда в README тестового.