Тест-кейси, чеклисти і тест-сюїти
Зміст
«З чого складається тест-кейс?» — питання, з якого починається чи не кожна співбесіда trainee QA. Воно здається подарунком: перелічив поля — і готово. Але одразу за ним іде друге, на якому й відсіюють: «а коли ти напишеш чеклист замість тест-кейсів?» або «навіщо кейсу передумови, якщо все можна описати кроками?». Тут завчений перелік полів уже не рятує — треба розуміти, навіщо кожен елемент існує і яку проблему розвʼязує.
У роботі це болить ще конкретніше. Набір тест-кейсів — не документ «щоб був», а інструмент, яким команда користується щодня: за ним проходять регресію, ним онбордять новачка, з нього збирають смоук перед релізом, на нього дивляться, коли менеджер питає «а що взагалі перевірено?». Погано організований набір мстить швидко: у прогоні 800 кейсів, половина застаріла, назви на кшталт «Перевірка форми — 3», і ніхто вже не ризикує щось видалити. Ця глава — про те, як писати кейси, якими можна користуватися, і тримати набір живим.
Звідки береться тест-кейс
Тест-кейс не виникає з повітря — він завершує ланцюжок, що починається з вимоги. З вимоги чи acceptance criteria (глава про вимоги) виводяться тестові умови (test conditions) — те, що треба перевірити: «система не пускає з неправильним паролем», «після трьох невдалих спроб акаунт блокується». З тестової умови народжується тест-кейс — те, як саме це перевірити: конкретні кроки, дані й очікуваний результат. У STLC це фаза дизайну тестів.
За ISTQB, тест-кейс (test case) — це набір передумов, вхідних даних, дій, очікуваних результатів і постумов, розроблений на основі тестових умов. Формальні шаблони тестової документації описує стандарт ISO/IEC/IEEE 29119-3 — наступник класичного IEEE 829; на практиці ж структуру полів зазвичай диктує TMS або конвенція команди.
Цей ланцюжок важливий не для краси — він дає трасування (traceability). Змінилася вимога — ти знаходиш усі кейси, які її перевіряють; впав кейс — знаєш, яка вимога під загрозою. Без цього звʼязку набір перетворюється на купу перевірок, про які невідомо, навіщо вони існують.
Структура тест-кейсу
Мінімальний робочий склад полів:
| Поле | Навіщо воно |
|---|---|
| ID | Однозначне посилання: у баг-репорті, у звіті, у розмові |
| Назва | Пошук і тріаж: із назви видно, що перевіряється |
| Передумови | Стан системи до початку кроків |
| Кроки | Пронумеровані дії, по одній на крок |
| Очікуваний результат | Оракул: із чим порівнюємо фактичну поведінку |
| Пріоритет | Критерій потрапляння у скорочені прогони |
| Посилання на вимогу | Трасування |
Три частини несуть основний зміст.
Передумови (preconditions) — усе, що має бути істинним до першого кроку: існує зареєстрований користувач, у кошику лежить товар, тестові дані підготовлені. Правило просте: те, що не є предметом перевірки, але без чого вона неможлива, — у передумови, а не в кроки. Це не педантизм: передумови відділяють підготовку від самої перевірки, і саме підготовку найчастіше виконують в обхід UI — через API чи базу даних, і руками, і в автотестах.
Кроки (steps) — послідовність дій. Один крок — одна дія, без розгалужень «якщо зʼявилося вікно — закрити». Розгалуження означає, що в одному кейсі живуть два сценарії.
Очікуваний результат (expected result) — найважливіше поле і головний маркер якості кейсу. Він має бути конкретним і перевірним: не «система працює коректно», а «зʼявляється повідомлення про помилку; користувач лишається на сторінці логіну; сесія не створюється». Зверни увагу: очікуваний результат описує і те, що має статися, і те, що статися не має. Зі статусами прогону — passed/failed/blocked/skipped — кейс порівнюється саме через це поле (глава про виконання тестів).
Приклад цілого кейсу:
ID: TC-042 Назва: Логін з неправильним паролем: показується помилка, сесія не створюється Передумови: існує зареєстрований користувач
user@example.com; користувач розлогінений. Кроки:
- Відкрити сторінку
/login.- Ввести email
user@example.comі парольWrongPass1!.- Натиснути «Увійти».
Очікуваний результат: зʼявляється повідомлення «Неправильний 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) — набір кейсів, зібраних для виконання разом. Ключова думка, яку часто пропускають: сюїта — це вибірка під ціль прогону, а не папка в дереві. Той самий кейс «логін валідними даними» живе одночасно у смоуку і в повній регресії — про різницю цих прогонів є окрема глава.
Тому в наборі два незалежні виміри. Перший — де кейс лежить: структура репозиторію, зазвичай за фічами чи модулями продукту, бо саме так кейс шукають. Другий — коли він виконується: сюїти під цілі — смоук, регресія, приймальний прогін релізу, перевірка конкретної платформи. Перший вимір — ієрархія, другий — теги й вибірки. Пріоритет кейсу — головний критерій потрапляння у скорочені прогони; як вирішувати, що перевіряти за браку часу, — тема глави про ризик-орієнтоване тестування.
В автоматизації та сама ідея реалізується тегами — кейс належить кільком сюїтам без дублювання:
// 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 — офіційна документація про теги й анотації: механіка збирання сюїт в автоматизації.
З чого складається тест-кейс?
За ISTQB тест-кейс — набір передумов, вхідних даних, дій, очікуваних результатів і постумов, розроблений на основі тестових умов. Практичний мінімум полів: ID, назва, передумови, кроки, очікуваний результат, пріоритет і посилання на вимогу. Сильна відповідь — не перелік, а «навіщо кожне»: ID дає однозначне посилання в баг-репорті й розмові, назва працює на пошук і тріаж, передумови відділяють підготовку від перевірки, кроки — пронумеровані дії по одній на крок, очікуваний результат — оракул, з яким порівнюють фактичну поведінку, пріоритет вирішує, чи потрапить кейс у скорочений прогін. Формальні шаблони описує стандарт ISO/IEC/IEEE 29119-3 (наступник IEEE 829), але в реальності структуру диктує TMS або конвенція команди — тож завчений шаблон цінний менше, ніж розуміння ролі кожного поля.
Навіщо кейсу передумови, якщо все можна описати кроками?
Передумови — це стан системи, який має бути істинним до першого кроку: існує зареєстрований користувач, у кошику лежить товар, дані підготовлені. Правило межі просте: те, що не є предметом перевірки, але без чого вона неможлива, — у передумови, а не в кроки. Це не педантизм, а розділення підготовки й самої перевірки: підготовку найчастіше виконують в обхід UI — через API чи базу даних, і руками, і в автотестах. Якщо запхати все в кроки, кейс роздувається, довше виконується і брехливо звітує: падіння на «підготовчому» кроці виглядає так само, як падіння самої перевірки.
Куди покласти логін — у передумови чи в кроки?
Залежить від того, що перевіряється, — це питання на розуміння межі між підготовкою і перевіркою. Якщо предмет кейсу — сам логін (наприклад, «логін з неправильним паролем показує помилку»), то введення даних і натискання «Увійти» — кроки. Якщо логін лише готує стан для перевірки чогось іншого (наприклад, редагування профілю), то «користувач залогінений» — передумова, і виконувати її можна як завгодно: через UI, API чи готову сесію. В автоматизації ця межа видна буквально: передумова-логін живе у фікстурі або setup, а не в тілі тесту.
Яким має бути очікуваний результат? Чому «система працює коректно» — не результат?
Очікуваний результат — найважливіше поле кейсу і його оракул: саме з ним порівнюють фактичну поведінку, коли ставлять статус passed чи failed. Він має бути конкретним і перевірним: не «система працює коректно», а «зʼявляється повідомлення про помилку; користувач лишається на сторінці логіну; сесія не створюється». «Працює коректно» — це відсутність оракула: два тестувальники поставлять такому кейсу різні статуси, бо кожен порівнює з власним уявленням про «коректно». Важлива деталь, яку часто пропускають: хороший очікуваний результат описує і те, що має статися, і те, що статися не має, — «кука сесії не встановлюється» не менш цінне, ніж «зʼявляється помилка».
Який тест-кейс — хороший?
Атомарний: один кейс — одна перевірка, бо кейс «логін, зміна пароля і видалення акаунта» при падінні на другому кроці нічого не каже про третій. Незалежний: не покладається на те, що перед ним виконали інший кейс, — залежні ланцюжки розсипаються при частковому прогоні чи іншому порядку. Відтворюваний: два різні тестувальники за описом отримують той самий результат; якщо щось «мається на увазі» — кейс недописаний. З назвою, яка описує перевірку, а не дію: у результатах прогону на 300 кейсів видно лише назви, і з назви впалого має бути ясно, що саме зламалося. Трасований до вимоги і написаний для читача — новачка в онбордингу, колеги на регресії, тебе самого за пів року. Бонус сильної відповіді — розуміння, що деталізація має ціну: надмірно розписані кроки застарівають першими.
Що поганого в кейсі «логін, зміна пароля і видалення акаунта»?
Це порушення атомарності: у кейсі живуть три перевірки, і його статус неможливо інтерпретувати. Впав на другому кроці — що з видаленням акаунта: воно зламане, не перевірене, заблоковане? У звіті це одна клітинка «failed», яка ховає стан двох інших перевірок. Ще гірше з частковими прогонами: не можна перевірити тільки видалення, не проганяючи все попереднє. Правильно — три окремі кейси, кожен зі своїми передумовами: для зміни пароля користувач уже залогінений (передумова), а не логіниться кроками.
Чим чеклист відрізняється від тест-кейсу? Коли обереш чеклист?
Чеклист фіксує, що перевірити, тест-кейс — що, як і з якими даними; кожен пункт чеклиста — по суті тестова умова, а спосіб перевірки вирішує виконавець. Звідси всі тредофи: чеклист пишеться за хвилини і дешевий у підтримці, але відтворюваність і слід для аудиту залежать від виконавця; кейс дорогий і застаріває кроками, зате його виконає новачок, і через місяць видно, як саме перевіряли. Провальна відповідь на співбесіді — «чеклист це коли лінь писати кейси»: ISTQB відносить чеклист-тестування (checklist-based testing) до досвідних технік, і воно спирається на компетенцію тестувальника — у цьому і сила, і межа. Чеклист обираю, коли виконавці знають продукт, а продукт швидко змінюється: розписані кроки там — баласт, який застаріє за місяць. Кейси — для критичних флоу, довгоживучої регресії, онбордингу і всюди, де потрібен аудит. Зріла команда комбінує: чеклисти для нових фіч і дослідницьких проходів, детальні кейси для критичних сценаріїв.
Що таке високорівневий і низькорівневий тест-кейс і коли який доречний?
Високорівневий (логічний) кейс описує перевірку без конкретних значень — «ввести валідний email»; низькорівневий (конкретний) — з точними даними: «ввести user@example.com». Це тредоф, а не «правильний і неправильний» варіанти. Високорівневий стійкий до змін і лишає виконавцю свободу добирати дані, але вимагає знання продукту; низькорівневий виконає будь-хто, і він майже напряму перетворюється на автотест, зате застаріває швидше. Високорівневі працюють у досвідчених команд на мінливому продукті, низькорівневі — де потрібна точна відтворюваність: онбординг, розподілені команди, регульовані домени, передача набору на автоматизацію. Типовий робочий компроміс — високорівневий кейс плюс окремо описані набори тестових даних.
Звідки береться тест-кейс? Що таке тестова умова і навіщо трасування?
Кейс завершує ланцюжок: з вимоги чи acceptance criteria виводяться тестові умови — що треба перевірити («після трьох невдалих спроб акаунт блокується»), а з тестової умови народжується кейс — як саме це перевірити: кроки, дані, очікуваний результат. У STLC це фаза дизайну тестів. Ланцюжок дає трасування (traceability): змінилася вимога — знаходиш усі кейси, які її перевіряють; впав кейс — знаєш, яка вимога під загрозою. Без цього звʼязку набір перетворюється на купу перевірок, про які невідомо, навіщо вони існують, — і які страшно видаляти.
Що таке тест-сюїта? Чи може один кейс бути одночасно у смоуку і в регресії?
Тест-сюїта — набір кейсів, зібраних для виконання разом, і ключова думка, яку часто пропускають: сюїта — це вибірка під ціль прогону, а не папка в дереві. Тому так, кейс «логін валідними даними» живе одночасно у смоуку і в повній регресії — це нормально і правильно. Уявлення «сюїта = папка» веде до копіювання кейсів по «папках», а копії гарантовано розсинхронізуються. В автоматизації та сама ідея реалізується тегами: тест позначається @smoke і @regression, а прогін сюїти — просто фільтр на кшталт npx playwright test --grep @smoke.
Як організуєш регресійний набір на проєкті?
У наборі два незалежні виміри, і сильна відповідь називає обидва. Перший — де кейс лежить: структура репозиторію за фічами чи модулями продукту, бо саме так кейс шукають. Другий — коли він виконується: сюїти під цілі прогону — смоук, повна регресія, приймальний прогін релізу, перевірка конкретної платформи; це вже не ієрархія, а теги й вибірки. Пріоритет кейсу — головний критерій потрапляння у скорочені прогони: коли часу мало, женуть критичне, і рішення «що перевіряти за браку часу» — тема ризик-орієнтованого тестування. Плюс до відповіді — згадати, що смоук — підмножина регресії, а не окрема копія кейсів.
Наскільки детальними мають бути кроки тест-кейсу?
Це свідомий вибір під виконавця і час життя кейсу, а не «чим детальніше, тим якісніше». Деталізація — це вартість: надмірно розписані кроки застарівають першими, і їхня підтримка зʼїдає час, який мав піти на тестування. Для досвідченої команди на мінливому продукті детальні кроки — баласт; для онбордингу, розподілених команд чи передачі на автоматизацію — необхідність. Технічний мінімум незалежно від рівня деталей: один крок — одна дія, без розгалужень «якщо зʼявилося вікно — закрити», бо розгалуження означає два сценарії в одному кейсі.
Кейс три роки проходить і нічого не знаходить — що з ним робити?
Це питання на парадокс пестицидів: тести, які ганяють без змін, з часом перестають знаходити нові дефекти — продукт навколо них уже «імунний». Правильна реакція — переглянути цінність кейсу: можливо, оновити дані чи сценарій, можливо, чесно видалити. Провальна відповідь — «нехай лишається для покриття»: мертвий кейс гірший за відсутній, бо створює ілюзію покриття, зʼїдає час прогону і підриває довіру до всього набору. Важливий нюанс зрілості: вічно зелений кейс — не доказ якості продукту, а привід для ревізії набору; зелений прогін застарілих кейсів перевіряє вчорашній продукт.
Як тримати набір тест-кейсів в актуальному стані?
Кейси старіють за замовчуванням — це закон, а не чиясь недбалість: фіча змінилася — кроки брешуть, фічу видалили — лишилися кейси-сироти, два тестувальники описали одну перевірку різними словами — дублікат роздуває регресію. Тримає набір живим чотири практики. Актуалізація — частина роботи над фічею: definition of done включає оновлені тести, а не «колись потім». Життєвий цикл кейсу — статуси draft → актуальний → deprecated: кейс без статусу — кейс, якому не можна довіряти. Ревізія за підсумками регресії: кожен прогін підсвічує кейси, які всі пропускають, кейси зі «своєю інтерпретацією» і кейси, що падають через застарілі кроки, а не через баги. І сміливість видаляти — див. попереднє питання.
З якими TMS працював і що взагалі дає TMS?
Назви тут цікавлять менше, ніж розуміння, що TMS (test management system) дає процесу, — і сильна відповідь починає саме з цього. Мінімальний набір: зберігання кейсів з історією змін, збирання сюїт і прогонів, фіксація результатів по кожному кейсу, звʼязування кейсів з вимогами (трасування) і баг-репортами, метрики на кшталт pass rate і динаміки прогонів. Поширені інструменти: TestRail, Zephyr і Xray як плагіни до Jira, Qase, TestLink, Azure Test Plans — вибір визначають інтеграції і бюджет, а не пошук «правильної» TMS; малому проєкту на старті вистачає таблиці, і це нормально. Окрема цінність для команд з автоматизацією — єдина точка правди: результати автопрогонів з CI публікуються туди ж, де живуть ручні прогони, і картина покриття стає повною, а не розірваною на «наші кейси» й «їхні тести».
Прогін показує 100% passed — реліз безпечний?
Ні, і це питання на розуміння, що саме вимірює зелений прогін: він каже, що продукт відповідає набору кейсів, — але нічого не каже про якість самого набору. Якщо набір застарілий, зелений прогін перевіряє вчорашній продукт: кейси, які роками нічого не ловлять, — парадокс пестицидів у чистому вигляді і привід для ревізії, а не для впевненості. Плюс 100% passed мовчить про те, чого в наборі немає взагалі: нові фічі без кейсів, непокриті ризики, сценарії, які ніхто не додав. Сильна відповідь розводить два питання: «чи пройшли наявні перевірки» і «чи достатні самі перевірки» — і другий пункт зеленим кольором не вимірюється.
Три кейси з буднів роботи з тестовою документацією: рефакторинг кейсу, яким неможливо користуватися, таблиця рішень «чеклист чи тест-кейси» під конкретні ситуації та збирання сюїт тегами в Playwright — один тест у двох прогонах без дублювання.
Кейс 1. Рефакторинг: з «Перевірка форми — 3» у кейс, яким можна користуватися
Типовий кейс зі старого набору, який дістався у спадок:
ID: TC-113 Назва: Перевірка форми — 3 Кроки:
- Залогінитися.
- Перейти в профіль і змінити пароль; якщо зʼявиться попередження — закрити його.
- Вийти й зайти з новим паролем.
Очікуваний результат: система працює коректно.
Тут зібрані одразу всі антипатерни глави. Після рефакторингу — два окремі кейси; перший виглядає так:
ID: TC-113 Назва: Зміна пароля залогіненим користувачем: показується підтвердження Передумови: існує зареєстрований користувач
user@example.comз паролемOldPass1!; користувач залогінений. Кроки:
- Відкрити сторінку профілю, розділ «Безпека».
- Ввести старий пароль
OldPass1!і новийNewPass2!.- Натиснути «Зберегти».
Очікуваний результат: зʼявляється повідомлення «Пароль змінено»; користувач лишається залогіненим.
А «вийти й зайти з новим паролем» — окремий кейс TC-114 зі своєю передумовою «пароль користувача змінено на NewPass2!».
Що виправлено і чому:
- Логін пішов у передумови. Предмет перевірки — зміна пароля, а не вхід; логін лише готує стан, тож виконувати його можна як завгодно — через UI, API чи готову сесію.
- Розгалуження «якщо зʼявиться попередження» зникло. Розгалуження в кроці означає, що в кейсі живуть два сценарії, — і виконавці підуть різними гілками, отримавши різні результати.
- Кейс розпиляно за атомарністю. «Змінити пароль і перелогінитися» при падінні на другому етапі не каже нічого про перший: одна клітинка failed ховає стан другої перевірки. Два кейси — два незалежні статуси.
- Зʼявився оракул. «Система працює коректно» — це не результат: два тестувальники поставлять такому кейсу різні статуси. Тепер результат перевірний і описує й те, що статися не має (сесія не розривається).
- Назва описує перевірку. У прогоні на 300 кейсів видно лише назви — «Перевірка форми — 3» у списку впалих не каже нічого, нова назва каже все.
Кейс 2. Таблиця рішень: чеклист чи тест-кейси
Питання «що заводити під фічу — чеклист чи кейси?» вирішується не смаком, а контекстом. Робоча таблиця:
| Ситуація | Інструмент | Чому |
|---|---|---|
| Нова фіча, тестує той, хто її знає, продукт змінюється щотижня | Чеклист | Розписані кроки застаріють за місяць; виконавцю досить переліку «що перевірити» |
| Дослідницький прохід перед релізом | Чеклист | Спирається на досвід виконавця — це його сила; кроки лише заважали б |
| Критичний флоу (оплата, реєстрація), довгоживуча регресія | Детальні тест-кейси | Потрібні відтворюваність і слід для аудиту: через місяць має бути видно, як саме перевіряли |
| Онбординг новачка на проєкт | Низькорівневі кейси | Виконає будь-хто без знання продукту; конкретні дані знімають «мається на увазі» |
| Передача набору на автоматизацію | Низькорівневі кейси | Кейс із точними даними майже напряму перетворюється на скрипт |
| Регульований домен (фінтех, медицина) | Низькорівневі кейси | Точна відтворюваність і повний слід для аудиту — вимога, а не побажання |
Що дивитися і чому:
- Критерії, а не «правильний» інструмент. У кожному рядку рішення диктують три чинники: досвід виконавця, швидкість змін продукту, вимоги до відтворюваності й аудиту. Це і є сильна відповідь на співбесіді замість «чеклист — коли лінь».
- Зріла команда комбінує. Чеклисти для нових фіч і дослідницьких проходів, детальні кейси для критичних сценаріїв — це не суперечність, а нормальний розподіл інструментів.
- Компроміс для мінливого продукту. Якщо потрібні й стійкість до змін, і конкретика — високорівневий кейс плюс окремо описані набори тестових даних.
Кейс 3. Playwright: один кейс у двох сюїтах через теги
Той самий принцип «сюїта — вибірка, а не папка» в автоматизації реалізується тегами. Файлова структура за фічами — це «де тест лежить»; теги — «коли він виконується»:
// tests/auth/login.spec.ts — файл за фічею: вимір «де лежить»
import { test, expect } from '@playwright/test';
// критичний позитивний сценарій: і у смоуку, і в регресії
test('логін валідними даними: користувач бачить дашборд',
{ tag: ['@smoke', '@regression'] },
async ({ page }) => {
await page.goto('/login');
await page.getByLabel('Email').fill('user@example.com');
await page.getByLabel('Пароль').fill('CorrectPass1!');
await page.getByRole('button', { name: 'Увійти' }).click();
await expect(page).toHaveURL(/\/dashboard/);
});
// негативний сценарій: лише повна регресія
test('логін з неправильним паролем: помилка, сесія не створюється',
{ tag: ['@regression'] },
async ({ page, context }) => {
await page.goto('/login');
await page.getByLabel('Email').fill('user@example.com');
await page.getByLabel('Пароль').fill('WrongPass1!');
await page.getByRole('button', { name: 'Увійти' }).click();
await expect(page.getByText('Неправильний email або пароль')).toBeVisible();
await expect(page).toHaveURL(/\/login/);
// очікуваний результат описує й те, що статися НЕ має
const cookies = await context.cookies();
expect(cookies.find((c) => c.name === 'session')).toBeUndefined();
});
Прогін сюїти — просто фільтр:
npx playwright test --grep @smoke # смоук перед деплоєм
npx playwright test --grep @regression # повна регресія
Що дивитися і чому:
- Тест входить у кілька сюїт без дублювання. Перший тест позначений і
@smoke, і@regression— жодних копій файлу в папкахsmoke/іregression/, які гарантовано розсинхронізуються. - Два виміри видно буквально. Шлях
tests/auth/login.spec.ts— структура за фічами (так тест шукають), теги — вибірки під ціль прогону (так його женуть). Це прямий аналог репозиторію кейсів і сюїт у TMS. - Асерт на «не має статися». Перевірка, що кука сесії не встановилася, — переклад конкретного очікуваного результату з кейсу TC-042 глави в код; без неї тест мовчки пропустить створення сесії при показаній помилці.
- Назви тестів — назви кейсів. У репорті прогону видно лише назви, тож вони описують перевірку («помилка, сесія не створюється»), а не дію («перевірити логін»).
Структура тест-кейсу
- Знаю ланцюжок вимога → тестова умова → тест-кейс → прогін і можу пояснити, що трасування вздовж нього дає в обидва боки: змінилася вимога — видно кейси, впав кейс — видно вимогу під загрозою.
- Можу перелічити мінімальні поля кейсу (ID, назва, передумови, кроки, очікуваний результат, пріоритет, посилання на вимогу) і пояснити, навіщо кожне, а не просто назвати.
- Знаю правило межі передумов і кроків: те, що не є предметом перевірки, але без чого вона неможлива, — у передумови; підготовку часто виконують в обхід UI — через API чи базу.
- Розумію, що очікуваний результат — оракул кейсу: конкретний і перевірний, описує і те, що має статися, і те, що статися не має; «система працює коректно» — це відсутність оракула.
- Знаю, що постумови в ручному тестуванні часто пропускають, а в автоматизації вони перетворюються на teardown.
Атрибути хорошого кейсу
- Можу пояснити атомарність: один кейс — одна перевірка; статус кейсу «логін, зміна пароля і видалення акаунта» неможливо інтерпретувати.
- Знаю, чому кейс має бути незалежним: залежні ланцюжки розсипаються, щойно прогін виконують частково або в іншому порядку.
- Розумію, чому назва описує перевірку, а не дію: у результатах прогону на 300 кейсів видно лише назви, і з назви впалого має бути ясно, що зламалося.
- Знаю, що деталізація кроків — це вартість, а не якість: рівень деталей обирається під виконавця і час життя кейсу, а надмірно розписані кроки застарівають першими.
- Памʼятаю технічний мінімум кроків: один крок — одна дія, без розгалужень «якщо зʼявилося вікно — закрити».
Чеклист vs тест-кейс, рівні кейсів
- Знаю різницю чеклист vs тест-кейс: «що перевірити» проти «що, як і з якими даними» — і можу назвати критерії вибору: досвід виконавця, швидкість змін продукту, вимоги до відтворюваності й аудиту.
- Можу пояснити, чому чеклист — не «лінивий тест-кейс»: ISTQB відносить чеклист-тестування до досвідних технік, його сила і межа — компетенція виконавця.
- Знаю різницю високорівневого (логічного) і низькорівневого (конкретного) кейсу і тредоф: стійкість до змін і свобода виконавця проти відтворюваності й готовності до автоматизації.
- Знаю типовий компроміс: високорівневий кейс плюс окремо описані набори тестових даних.
Сюїти й організація набору
- Розумію, що сюїта — вибірка під ціль прогону, а не папка: той самий кейс живе одночасно у смоуку і в регресії, а копіювання кейсів по «папках» гарантує розсинхрон.
- Знаю два незалежні виміри набору: де кейс лежить (структура за фічами — так його шукають) і коли виконується (сюїти, теги, пріоритети — так його женуть).
- Можу показати, як в автоматизації сюїти збираються тегами (
@smoke,@regression) і фільтром на кшталт--grep @smoke.
Підтримка набору і TMS
- Знаю чотири практики, що тримають набір живим: актуалізація як частина definition of done фічі, статуси життєвого циклу (draft → актуальний → deprecated), ревізія за підсумками регресії, сміливість видаляти.
- Розумію, чому мертвий кейс гірший за відсутній (ілюзія покриття, час прогону, підрив довіри) і чому вічно зелений кейс — парадокс пестицидів і привід для ревізії, а не для впевненості.
- Можу пояснити, що TMS дає процесу: історія змін кейсів, сюїти й прогони, трасування до вимог і багів, метрики — і чому «що лежить у системі» важливіше за «яка це система».
Що з переліченого — тестова умова, а не тест-кейс?
Питання
Ланцюжок від вимоги до прогону — які ланки і що він дає?