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). Не кількість, а розподіл: чи є негативні перевірки й , а не лише ; чи видно, що за кейсами стоять техніки тест-дизайну — , граничні значення, — навіть якщо ти їх не називаєш уголос. Форма реєстрації, покрита лише перевіркою «ввів валідні дані — зареєструвався», — це провал, хоч би яка гарна була таблиця.

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

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

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

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

    Наша практика (не канон). Число «10–20 хвилин на одне тестове» — наша оцінка з розмов із рецензентами, а не вимір: скільки часу рецензент витрачає на артефакт, не міряло жодне джерело. Так само наш і сам набір трьох критеріїв із таблицею «слабко / сильно» — канон вище підпирає лише перший із них.

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

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

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

    • Припущення (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; сторінки як , а не копіпаст; підготовка стану через API замість кліків; жодних waitForTimeout із магічним числом — тільки web-first очікування. Один охайний тест каже про тебе більше, ніж двадцять скопійованих.

    import { test, expect } from '@playwright/test';
    
    test('заблокований юзер бачить помилку логіну', async ({ page }) => {
      await page.goto('/login');
      await page.getByLabel('Username').fill('blocked_user');
      await page.getByLabel('Password').fill('ValidPass123');
      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.1 — звідки береться сам критерій «покриття, а не кількість»: техніки тест-дизайну допомагають отримати «relatively small, but sufficient» набір кейсів систематично (§4.1).

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

    • ISTQB® Certified Tester Foundation Level Syllabus v4.0.1 — канонічна підстава свідомо звуженого скоупу: неможливе, тож замість нього should be used техніки, пріоритизація тест-кейсів і ризик-орієнтоване тестування (§1.3, принцип 2).

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

    • npm Docs — npm ci — чому саме npm ci: команда призначена для автоматизованих середовищ, вимагає наявний , виходить з помилкою при розбіжності з package.json, сама видаляє node_modules і ніколи не переписує маніфест чи локи.
    • Playwright — Installation (Getting Started) — що дає офіційний стартер: одна команда або створює проєкт, або додає Playwright до наявного; дефолти — TypeScript, тека tests, GitHub Actions із позначкою recommended for CI і встановлення браузерів; повторний запуск не перезаписує наявні тести.
    • Playwright — Best Practices — чому в прикладі саме такі локатори й жодного waitForTimeout: орієнтовані на користувача локатори, ізоляція тестів і web-first перевірки замість ручних пауз.

    Пояснення

    «Поясни» працює з власним API-ключем Anthropic: запит іде з вашого браузера прямо до Anthropic.

    Свій API-ключ (BYOK)

    Вставте власний ключ Anthropic — пояснення працюватиме на реальній моделі. Ключ зберігається лише у вашому браузері (localStorage), нікуди не надсилається, крім api.anthropic.com, і не логується.