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

    01 · Основи тестування

    Тест-кейси, чеклисти і тест-сюїти

    Зміст

    «З чого складається тест-кейс?» — питання, з якого починається чи не кожна співбесіда trainee QA. Воно здається подарунком: перелічив поля — і готово. Але одразу за ним іде друге, на якому й відсіюють: «а коли ти напишеш чеклист замість тест-кейсів?» або «навіщо кейсу передумови, якщо все можна описати кроками?». Тут завчений перелік полів уже не рятує — треба розуміти, навіщо кожен елемент існує і яку проблему розвʼязує.

    У роботі це болить ще конкретніше. Набір тест-кейсів — не документ «щоб був», а інструмент, яким команда користується щодня: за ним проходять регресію, ним онбордять новачка, з нього збирають смоук перед релізом, на нього дивляться, коли менеджер питає «а що взагалі перевірено?». Погано організований набір мстить швидко: у прогоні 800 кейсів, половина застаріла, назви на кшталт «Перевірка форми — 3», і ніхто вже не ризикує щось видалити. Ця глава — про те, як писати кейси, якими можна користуватися, і тримати набір живим.

    Звідки береться тест-кейс

    Тест-кейс не виникає з повітря — він завершує ланцюжок, що починається з вимоги. З вимоги чи acceptance criteria (глава про вимоги) виводяться тестові умови (test conditions) — те, що треба перевірити: «система не пускає з неправильним паролем», «після трьох невдалих спроб акаунт блокується». З тестової умови народжується тест-кейс — те, як саме це перевірити: конкретні кроки, дані й очікуваний результат. У STLC це фаза дизайну тестів.

    За ISTQB, тест-кейс (test case) — це набір передумов, вхідних даних, дій, очікуваних результатів і постумов, розроблений на основі тестових умов. Формальні шаблони тестової документації описує стандарт ISO/IEC/IEEE 29119-3 — наступник класичного IEEE 829; на практиці ж структуру полів зазвичай диктує TMS або конвенція команди.

    Вимога / AC

    Тестова умова:
    що перевірити

    Високорівневий кейс:
    логіка без конкретних даних

    Низькорівневий кейс:
    кроки + конкретні дані

    Прогін:
    passed / failed / blocked

    Вимога / AC

    Тестова умова:
    що перевірити

    Високорівневий кейс:
    логіка без конкретних даних

    Низькорівневий кейс:
    кроки + конкретні дані

    Прогін:
    passed / failed / blocked

    Цей ланцюжок важливий не для краси — він дає трасування (traceability). Змінилася вимога — ти знаходиш усі кейси, які її перевіряють; впав кейс — знаєш, яка вимога під загрозою. Без цього звʼязку набір перетворюється на купу перевірок, про які невідомо, навіщо вони існують.

    Структура тест-кейсу

    Мінімальний робочий склад полів:

    ПолеНавіщо воно
    IDОднозначне посилання: у баг-репорті, у звіті, у розмові
    НазваПошук і тріаж: із назви видно, що перевіряється
    ПередумовиСтан системи до початку кроків
    КрокиПронумеровані дії, по одній на крок
    Очікуваний результатОракул: із чим порівнюємо фактичну поведінку
    ПріоритетКритерій потрапляння у скорочені прогони
    Посилання на вимогуТрасування

    Три частини несуть основний зміст.

    Передумови (preconditions) — усе, що має бути істинним до першого кроку: існує зареєстрований користувач, у кошику лежить товар, тестові дані підготовлені. Правило просте: те, що не є предметом перевірки, але без чого вона неможлива, — у передумови, а не в кроки. Це не педантизм: передумови відділяють підготовку від самої перевірки, і саме підготовку найчастіше виконують в обхід UI — через API чи базу даних, і руками, і в автотестах.

    Кроки (steps) — послідовність дій. Один крок — одна дія, без розгалужень «якщо зʼявилося вікно — закрити». Розгалуження означає, що в одному кейсі живуть два сценарії.

    Очікуваний результат (expected result) — найважливіше поле і головний маркер якості кейсу. Він має бути конкретним і перевірним: не «система працює коректно», а «зʼявляється повідомлення про помилку; користувач лишається на сторінці логіну; сесія не створюється». Зверни увагу: очікуваний результат описує і те, що має статися, і те, що статися не має. Зі статусами прогону — passed/failed/blocked/skipped — кейс порівнюється саме через це поле (глава про виконання тестів).

    Приклад цілого кейсу:

    ID: TC-042 Назва: Логін з неправильним паролем: показується помилка, сесія не створюється Передумови: існує зареєстрований користувач user@example.com; користувач розлогінений. Кроки:

    1. Відкрити сторінку /login.
    2. Ввести email user@example.com і пароль WrongPass1!.
    3. Натиснути «Увійти».

    Очікуваний результат: зʼявляється повідомлення «Неправильний email або пароль»; користувач лишається на /login; кука сесії не встановлюється.

    Іноді додають постумови (postconditions) — стан після виконання: акаунт не заблоковано, тестові дані прибрано. У ручному тестуванні поле часто пропускають, в автоматизації воно перетворюється на teardown.

    Атрибути хорошого кейсу

    • Назва описує перевірку, а не дію. «Логін з неправильним паролем: помилка, сесія не створюється» краще за «Перевірити логін», бо в результатах прогону на 300 кейсів видно лише назви — і з назви того, що впав, має бути зрозуміло, що саме зламалося.
    • Атомарність: один кейс — одна перевірка. Кейс «логін, зміна пароля і видалення акаунта» при падінні на другому кроці не скаже нічого про третій — і статус такого кейсу неможливо інтерпретувати.
    • Незалежність. Кейс не покладається на те, що перед ним виконали інший кейс. Залежні ланцюжки розсипаються, щойно прогін виконують частково або в іншому порядку.
    • Відтворюваність. Два різні тестувальники, виконавши кейс за описом, отримують той самий результат. Якщо результат залежить від «мається на увазі» — кейс недописаний.
    • Трасованість. З кейсу видно, яку вимогу він перевіряє.
    • Написаний для читача. Кейс читатимуть новачок в онбордингу, колега під час регресії і ти сам за пів року. Скорочення й контекст «у голові автора» вбивають цінність.

    Скільки деталей класти в кроки — окреме рішення, і воно залежить від виконавця й тривалості життя кейсу; глибше про рівень деталізації та антипатерни — у розділі «Тест-дизайн».

    Високорівневі vs низькорівневі кейси

    ISTQB розрізняє два ступені конкретності. Високорівневий (логічний, high-level) кейс описує перевірку без конкретних значень: «ввести валідний email», «завантажити файл дозволеного формату». Низькорівневий (конкретний, low-level) — з точними даними: «ввести user@example.com», «завантажити invoice.pdf розміром 2 МБ».

    ВисокорівневийНизькорівневий
    ДаніАбстрактні класи значеньКонкретні значення
    Стійкість до змінВисока: дрібні зміни UI не ламаютьНизька: застаріває швидше
    Свобода виконавцяВелика: сам добирає даніМінімальна
    Хто може виконатиТой, хто знає продуктБудь-хто, включно з новачком
    Готовність до автоматизаціїПотребує доопрацюванняМайже пряме перетворення на скрипт

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

    Чеклист vs тест-кейс

    Чеклист (checklist) — перелік того, що перевірити, без розписаних кроків: «логін валідними даними», «логін з протермінованим паролем», «межі довжини поля email». Кожен пункт — по суті тестова умова, а як її перевірити, вирішує виконавець.

    ЧеклистТест-кейс
    ДеталізаціяЩо перевіритиЩо, як і з якими даними
    Час на створенняХвилиниДесятки хвилин на кейс
    Вартість підтримкиНизькаВисока: кроки застарівають
    Вимоги до виконавцяЗнає продукт і технікиМоже виконати новачок
    ВідтворюваністьЗалежить від виконавцяВисока
    Слід для аудитуСлабкийПовний

    Ключове: чеклист — це не «лінивий тест-кейс», а окремий інструмент зі своєю нішею. Там, де виконавець знає продукт, розписані кроки — баласт, який застаріє за місяць і який ніхто не читає. Чеклист-тестування (checklist-based testing) ISTQB відносить до досвідних технік — воно спирається на компетенцію тестувальника, і в цьому і сила, і межа: без досвіду пункт «перевірити валідацію email» перетворюється на одну поверхову спробу.

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

    Тест-сюїти й організація набору

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

    Репозиторій кейсів: структура за фічами

    TC-001 Логін валідними даними

    TC-014 Скидання пароля

    TC-027 Оплата картою

    Смоук-сюїта

    Регресійна сюїта

    Репозиторій кейсів: структура за фічами

    TC-001 Логін валідними даними

    TC-014 Скидання пароля

    TC-027 Оплата картою

    Смоук-сюїта

    Регресійна сюїта

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

    В автоматизації та сама ідея реалізується тегами — кейс належить кільком сюїтам без дублювання:

    // Playwright: один тест у двох сюїтах через теги
    test('логін валідними даними: користувач бачить дашборд',
      { tag: ['@smoke', '@regression'] },
      async ({ page }) => {
        // кроки кейсу
      });

    Прогін смоук-сюїти — це просто фільтр: npx playwright test --grep @smoke.

    Підтримка набору в актуальному стані

    Кейси старіють — це закон, а не чиясь недбалість. Фіча змінилася — кроки брешуть. Фічу видалили — кейси-сироти лишилися. Два тестувальники описали одну перевірку різними словами — дублікат, який роздуває регресію. Кейс роками проходить і нічого не ловить — парадокс пестицидів у чистому вигляді.

    Що тримає набір живим:

    • Актуалізація — частина роботи над фічею. Кейси оновлюються разом зі зміною, а не «колись потім»: definition of done фічі включає оновлені тести.
    • Життєвий цикл кейсу. Статуси draft → актуальний → deprecated дають чесну картину: що можна виконувати, а що чекає ревізії. Кейс без статусу — кейс, якому не можна довіряти.
    • Ревізія за підсумками регресії. Кожен прогін підсвічує хворі місця: кейси, які всі пропускають, кейси зі «своєю інтерпретацією», кейси, що падають через застарілі кроки, а не через баги.
    • Сміливість видаляти. Мертвий кейс гірший за відсутній: він створює ілюзію покриття, зʼїдає час прогону і підриває довіру до всього набору.

    TMS оглядово

    TMS (test management system) — система керування тестуванням. Мінімальний набір того, що вона дає: зберігання кейсів з історією змін, збирання сюїт і прогонів, фіксація результатів по кожному кейсу, звʼязування кейсів з вимогами (трасування) і з баг-репортами (про них — наступна глава), метрики на кшталт pass rate і динаміки прогонів.

    Поширені інструменти: TestRail, Zephyr і Xray (плагіни до Jira), Qase, TestLink, Azure Test Plans. Вибір — питання інтеграцій і бюджету, а не пошуку «правильної» TMS: малому проєкту на старті вистачає таблиці, і це нормально. Важливіше, що лежить у системі, ніж яка це система.

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

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

    • Виглядає як «чим детальніший кейс, тим він якісніший», а насправді деталізація — це вартість: надмірно розписані кроки застарівають першими, а їх підтримка зʼїдає час, який мав піти на тестування. Рівень деталей — свідомий вибір під виконавця і час життя кейсу.
    • Виглядає як нормальний очікуваний результат — «система працює коректно», а насправді це відсутність оракула: два тестувальники поставлять такому кейсу різні статуси. Очікуваний результат або перевірний, або його немає.
    • Виглядає як «чеклист — це чернетка, яку потім розпишемо в кейси», а насправді це окремий інструмент зі своєю нішею: для досвідченого виконавця на мінливому продукті чеклист краще детальних кейсів, і розписувати його — марна робота.
    • Виглядає як «сюїта — це папка: кейс лежить або в смоуку, або в регресії», а насправді сюїта — вибірка під ціль прогону, і той самий кейс входить у кілька сюїт. Копіювання кейсів по «папках» гарантує розсинхрон копій.
    • Виглядає як «набір готовий — 100% кейсів passed, реліз безпечний», а насправді зелений прогін застарілого набору перевіряє вчорашній продукт: кейси, які давно нічого не ловлять, — привід для ревізії набору, а не для впевненості.

    Підсумок

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

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

    • «З чого складається тест-кейс?» Чекають не перелік полів, а розуміння, навіщо кожне: передумови відділяють підготовку від перевірки, очікуваний результат — оракул. Сильна відповідь показує це на власному прикладі кейсу.
    • «Чим чеклист відрізняється від тест-кейсу? Коли обереш чеклист?» Перевірка контекстного мислення. Провал — «чеклист це коли лінь писати кейси»; сильна відповідь — критерії вибору: досвід виконавця, швидкість змін продукту, вимоги до відтворюваності й аудиту.
    • «Який тест-кейс — хороший?» Очікують атомарність, незалежність, конкретний очікуваний результат, назву, з якої видно перевірку. Бонус — розуміння, що деталізація має ціну.
    • «Передумови чи кроки: куди покласти логін?» Питання на розуміння межі: якщо перевіряється сам логін — це кроки; якщо логін лише готує стан для перевірки чогось іншого — це передумова.
    • «Що таке високорівневий і низькорівневий кейс?» Дивляться, чи розумієш тредоф: стійкість до змін і свобода виконавця проти відтворюваності й готовності до автоматизації.
    • «Як організуєш регресійний набір на проєкті?» Чекають два виміри: зберігання за фічами, виконання через сюїти за пріоритетами; згадка про смоук як підмножину і про пріоритезацію за ризиком — плюс.
    • «Кейс три роки проходить і нічого не знаходить — що з ним робити?» Перевірка на парадокс пестицидів і зрілість: переглянути цінність, оновити дані чи видалити — але не тримати «для покриття».
    • «З якими TMS працював?» Назви цікавлять менше, ніж розуміння, що TMS дає процесу: історія прогонів, трасування до вимог і багів, спільна картина ручного й автоматизованого покриття.

    Джерела

    • ISTQB CTFL Syllabus 4.0 — глава покриває розділи 1.4.3 «Testware» і 1.4.4 (трасування між тест-базисом і тестовими артефактами); чеклист-тестування — розділ 4.4.3.
    • ISTQB Glossary — канонічні означення: test case, high-level test case, low-level test case, test suite, test condition, checklist-based testing.
    • Playwright — Tag tests — офіційна документація про теги й анотації: механіка збирання сюїт в автоматизації.