Як писати хороші тест-кейси та баг-репорти

Тест-кейс

Що робить тест-кейс хорошим

Хороший тест-кейс — документ, який будь-який інший тестувальник може виконати без додаткових запитань і отримати той самий результат.


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

ПолеОписПриклад
TC IDУнікальний ідентифікаторAUTH-TC-001
Назва[Дія] + [умова] + [об'єкт]Успішний вхід з валідними email та паролем
ПріоритетHigh / Medium / LowHigh
ПередумовиТочний стан системи до початкуАкаунт зареєстрований і активований
Тестові даніКонкретні значенняuser@test.com / Pass123!
КрокиНумерований список, 1 крок = 1 дія1. Ввести email...
Очікуваний результатВимірюваний стан системиРедирект на /dashboard
Фактичний результатЗаповнюється при виконанніPass / Fail + опис

Поганий vs хороший тест-кейс

❌ Поганий

Назва: Тест логіну
Передумови: —
Кроки:
  1. Відкрити сайт
  2. Натиснути логін
  3. Ввести дані
  4. Перевірити результат
Очікуваний результат: Логін працює

Проблеми:

  • Назва не говорить що саме тестується
  • Немає передумов — невідомо який акаунт потрібен
  • «Ввести дані» — які саме?
  • «Логін працює» — це що? Де опиняється користувач?

✅ Хороший

TC ID: AUTH-TC-001
Назва: Успішний вхід з валідними email та паролем
Пріоритет: High

Передумови:
  - Акаунт user@test.com / Pass123! зареєстрований і активований
  - Відкрита сторінка /login

Тестові дані:
  - Email: user@test.com
  - Password: Pass123!

Кроки:
  1. У поле Email ввести: user@test.com
  2. У поле Password ввести: Pass123!
  3. Натиснути кнопку «Увійти»

Очікуваний результат:
  - Виконується редирект на /dashboard
  - Відображається «Привіт, user@test.com»
  - Сесія активна (токен у cookies)

Правила написання кроків

  • Один крок = одна атомарна дія
  • Завжди: дієслово + об'єкт + значення
  • Натиснути кнопку «Зберегти»
  • Зберегти
  • У поле «Ім'я» ввести: Іван
  • Ввести ім'я

Правила очікуваного результату

  • Завжди вимірюваний і однозначний
  • Відображається повідомлення «Пароль змінено успішно»
  • Все ок
  • URL змінюється на /dashboard
  • Перехід на нову сторінку

Баг-репорт

Мета баг-репорту

Розробник повинен без жодного запитання:

  1. Відтворити баг
  2. Зрозуміти що пішло не так
  3. Зрозуміти що повинно було статись

Золоте правило: Уяви, що передаєш репорт незнайомому розробнику о 23:00 перед релізом.


Структура баг-репорту

ПолеОпис
IDУнікальний номер (BUG-0142)
Заголовокде + що відбувається + наслідок
SeverityТехнічна серйозність (визначає QA)
PriorityТерміновість виправлення (визначає менеджер)
StatusOpen / In Progress / Fixed / Closed / Reopen
СередовищеStaging / Production + версія
Браузер/ОСChrome 124 / Windows 11
ПередумовиСтан системи до відтворення
Кроки відтворенняМінімальна послідовність
Фактичний результатЩо сталося (факти, не оцінки)
Очікуваний результатЩо мало статися
ДодатковоСкріншот, відео, логи, HAR

Приклад хорошого баг-репорту

ID: BUG-0142
Заголовок: Кнопка «Оплатити» активна при порожньому кошику — HTTP 500

Severity: Critical
Priority: High
Status: Open

Середовище: Staging v2.14.3
Браузер: Chrome 124 / Windows 11

Передумови:
  - Авторизований акаунт user@test.com
  - Кошик порожній (жодного товару)
  - Відкрита сторінка /cart

Кроки відтворення:
  1. Перейти на /cart при порожньому кошику
  2. Переконатись що список товарів порожній
  3. Натиснути кнопку «Оплатити»

Фактичний результат:
  Сервер повертає HTTP 500.
  У консолі: TypeError: Cannot read properties of undefined (reading 'items')
  Сторінка зависає, користувач не отримує повідомлення про помилку.

Очікуваний результат:
  Кнопка «Оплатити» неактивна (disabled) при порожньому кошику.
  АБО відображається: «Кошик порожній, додайте товари перед оплатою».

Додатково:
  - Відтворюється на 100%
  - Скріншот і HAR-файл додано
  - Пов'язаний тест-кейс: CART-TC-008
  - Регресія: у v2.13.0 кнопка була задізейблена

Severity vs Priority

Це різні поняття — найпопулярніше питання на співбесіді.

SeverityPriority
Що означаєНаскільки серйозна проблема технічноНаскільки терміново виправляти
Хто визначаєQA тестувальникМенеджер / Product Owner

Рівні Severity

РівеньОписПриклад
BlockerСистема повністю непрацездатнаДодаток не запускається
CriticalОсновна функція зламана, обхідного шляху немаєОплата завершується з помилкою
MajorВажлива функція некоректна, є workaroundСортування дає неправильний порядок
MinorНезначне відхилення від вимогФільтр не скидається кнопкою Reset
TrivialКосметичні дефектиОпечатка в тексті

Приклади коли Severity ≠ Priority

СитуаціяSeverityPriorityЧому
Опечатка в назві компанії на головнійTrivialHighБачать всі клієнти
Критичний баг в рідкісній функціїCriticalLowТоркається 0.1% юзерів
Зламаний імпорт застарілого форматуMajorLowВідкласти до наступного спринту

Типові помилки в баг-репортах

❌ «Не працює кнопка»

Не вказано що сталось, де, за яких умов. Правильно: що очікували vs що отримали.

❌ Кілька багів в одному репорті

«Кнопка не працює, текст обрізається і фото не завантажується» — це три окремих репорти. Один баг = один звіт.

❌ Відсутні передумови

«Зайти на сторінку і натиснути» — з яким акаунтом? З якими правами? Без цього розробник відповість «не відтворюється».

❌ Оціночні судження замість фактів

  • ❌ «Система дуже повільна»
  • ✅ «Відповідь сервера 8400мс при нормі ≤2000мс»
  • ❌ «Відображається якась помилка»
  • ✅ «Відображається текст: Error code 403»

❌ Нерепродукований баг без відсотку

Якщо баг відтворюється не завжди — вказуй: «Відтворюється у ~3 з 5 випадків».


Формула хорошого заголовку баг-репорту

[де] + [що відбувається] + [наслідок]

Приклади:

  • Сторінка /cart: кнопка «Оплатити» активна при порожньому кошику → HTTP 500
  • Форма реєстрації: поле Email приймає рядок без @ → акаунт створюється
  • Мобільна версія: кнопка «Далі» перекрита клавіатурою на iOS → недоступна
  • Помилка на сторінці
  • Баг з кнопкою

Питання на співбесіді

«Яка різниця між severity і priority?»

Severity — технічна серйозність дефекту, визначає QA. Priority — терміновість виправлення, визначає менеджер. Вони можуть не збігатися: косметична помилка на головній сторінці має Low severity, але High priority — бо її бачать всі клієнти.

«Що обов'язково повинно бути в баг-репорті?»

Заголовок (де+що+наслідок), середовище і версія, передумови, кроки відтворення, фактичний і очікуваний результат, severity і priority. Плюс скріншот або відео.

«Що таке хороший тест-кейс?»

Тест-кейс, який будь-який тестувальник може виконати без додаткових запитань і отримати той самий результат. Конкретні тестові дані, атомарні кроки, вимірюваний очікуваний результат.