QA Interview Hub · База знань · Тести

Manual QA

Види тестування

smoke, regression, exploratory та інші

Функціональне і нефункціональне тестування — у чому різниця?

Функціональне — що робить система: логіка, бізнес-правила, відповідність вимогам.

Нефункціональне — як вона це робить: продуктивність (навантаження, стрес), безпека, зручність, доступність, сумісність, надійність, локалізація.

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

Чим відрізняються smoke, sanity і регресійне тестування?

ВидЩо перевіряєКоли
SmokeКритичні функції працюють, білд взагалі можна тестуватиНа кожному новому білді
SanityКонкретна зміна чи фікс працює, вузько й глибокоПісля невеликого фіксу
RegressionЗміни не зламали те, що працювало ранішеПеред релізом, після змін
На співбесіді: Smoke — широка поверхнева перевірка, що білд живий і основні функції працюють. Sanity — вузька перевірка конкретної зміни чи фіксу. Регресія — перевірка, що нові зміни не зламали вже існуючу функціональність, і вона найширша з трьох.

Чим ретест відрізняється від регресійного тестування?

Ретест — перевірка, що конкретний баг виправлено: проходимо ті самі кроки, що в баг-репорті.

Регресія — перевірка, що виправлення або нова фіча не зламали інше. Ретест перевіряє одне місце, регресія — все навколо.

На співбесіді: Ретест — це перевірка, що конкретний баг виправлений, за кроками з репорту. Регресія — перевірка, що цей фікс чи нова фіча нічого не зламали поруч. Після фіксу я роблю обидва: ретест самого бага і регресію пов'язаної функціональності.

Що таке black box, white box і grey box?

  • Black box — тестуємо за вимогами, не знаючи коду. Основний підхід manual QA.
  • White box — тестуємо, знаючи внутрішню структуру: покриття гілок, умов. Зазвичай розробники.
  • Grey box — частково знаємо внутрішню будову: схему бази, API, логи. Наприклад, після дії в UI перевіряємо запис у БД або запит у DevTools.
На співбесіді: Black box — тестування за вимогами без знання коду. White box — з повним знанням внутрішньої логіки. Grey box — посередині: я не читаю код, але перевіряю базу, API-запити й логи. Саме так я працюю найчастіше: дія в UI, потім перевірка запиту в DevTools і запису в базі.

Що таке exploratory testing і як його робити структуровано?

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

Щоб це не було хаотичним «поклацати», використовують сесії з чартером: мета («дослідити повернення коштів з частково оплаченими замовленнями»), фіксований час (60–90 хв), нотатки, результат — баги, питання й ідеї для нових кейсів.

На співбесіді: Exploratory — це коли я одночасно вивчаю продукт, придумую і виконую тести. Щоб це було керовано, я працюю сесіями: ставлю чартер з конкретною метою, обмежую час і веду нотатки, а наприкінці маю баги, питання до команди й ідеї для нових тест-кейсів.

Що таке alpha, beta і UAT?

  • Alpha — внутрішнє тестування командою або співробітниками до виходу назовні.
  • Beta — обмежена група реальних користувачів на реальному середовищі.
  • UAT — приймальне тестування замовником або бізнесом: чи відповідає продукт бізнес-потребам. QA часто готує сценарії й підтримує процес.
На співбесіді: Alpha — внутрішнє тестування до виходу назовні. Beta — реальні користувачі в обмеженій групі. UAT — приймання продукту бізнесом або замовником, і моя роль там — підготувати сценарії, середовище й дані та допомогти розібратися з тим, що знайдуть.

Чим інтеграційне тестування відрізняється від end-to-end?

Інтеграційне — перевірка взаємодії двох-трьох компонентів: фронтенд і API, сервіс і база, наш бекенд і платіжний провайдер. Можна з моками інших частин.

End-to-end — повний шлях користувача через усю систему: реєстрація → поповнення → переказ → виписка, з реальними інтеграціями.

На співбесіді: Інтеграційне перевіряє стик кількох компонентів, наприклад як наш бекенд працює з платіжним провайдером. End-to-end — увесь шлях користувача через систему від початку до кінця. Інтеграційних тестів більше й вони точніше вказують на місце проблеми, а e2e перевіряють найважливіші сценарії цілком.

Exploratory testing

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

Session-based testing структурує цей процес: сесія має обмежений час, зазвичай 60–120 хвилин, і конкретний charter. Charter — це місія сесії, наприклад «Дослідити оформлення замовлення з різними способами оплати, щоб знайти проблеми з валідацією». Під час сесії ведуться нотатки: що перевірено, які баги й питання знайдено.

Після сесії проводиться debrief з тімлідом або командою. Для ідей використовують евристики: граничні значення, переривання флоу, зміна мережі, паралельні дії, «тури» по продукту.

Functional, integration, system testing

Functional testing перевіряє, що система робить те, що описано у вимогах, без огляду на внутрішню реалізацію. Наприклад, фільтр товарів за ціною повертає лише товари в заданому діапазоні. Це тип тестування, а не рівень, і він застосовується на всіх рівнях.

Integration testing перевіряє взаємодію між модулями або сервісами. Наприклад, після оформлення замовлення сервіс замовлень коректно передає дані в сервіс оплати і сервіс сповіщень. Тут шукаємо проблеми на стиках: формати даних, контракти API, таймаути.

System testing перевіряє всю систему цілком у середовищі, максимально наближеному до продакшну. Наприклад, повний шлях користувача від реєстрації до отримання листа з підтвердженням замовлення. Сюди входять і функціональні, і нефункціональні перевірки.

Регресія vs ретест і скоуп регресії

Ретест — повторна перевірка конкретного виправленого бага за тими самими кроками. Регресія — перевірка, що зміни не зламали вже працюючий функціонал. Ретест завжди прив'язаний до бага, регресія — до змін у коді.

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

Допомагає розмова з розробником про те, що саме змінювалось, і аналіз git diff. Усе стабільне й повторюване бажано покривати автотестами, а мануальний час витрачати на нові та ризикові зони.

UAT

User Acceptance Testing — фінальний рівень тестування, де замовник або кінцеві користувачі перевіряють, що система відповідає їхнім бізнес-потребам. Питання тут не «чи немає багів», а «чи вирішує продукт нашу задачу». Проводиться після system testing на середовищі, близькому до продакшну.

Виконують його бізнес-користувачі, PO або представники замовника, а не QA. Роль QA — підготувати середовище й тестові дані, допомогти скласти UAT-сценарії, пояснити, як користуватися системою. Також QA фіксує та трасує знайдені проблеми й відділяє дефекти від запитів на зміни.

Різновиди: alpha і beta testing, operational acceptance, contract acceptance. Результат UAT — рішення про приймання продукту або sign-off.

Види навантажувального тестування і JMeter

Load testing перевіряє поведінку системи під очікуваним навантаженням, наприклад 1000 одночасних користувачів у пікові години. Мета — переконатися, що час відповіді й кількість помилок у межах SLA. Stress testing навантажує систему понад норму, щоб знайти точку відмови і перевірити, як вона відновлюється.

Spike testing — різкий короткочасний стрибок навантаження, як під час розпродажу чи розсилки. Також існують soak або endurance testing — тривале навантаження годинами для пошуку витоків пам'яті, та scalability testing. Ключові метрики: час відповіді (середній і перцентилі p95, p99), throughput, відсоток помилок, використання CPU і пам'яті.

У JMeter основа — Test Plan, у ньому Thread Group задає кількість віртуальних користувачів, ramp-up і кількість ітерацій. Sampler — сам запит, наприклад HTTP Request. Assertions перевіряють відповідь: статус-код, текст чи час. Listeners збирають і показують результати, наприклад Summary Report. Також важливі Config Elements (CSV Data Set Config, HTTP Header Manager), Timers для пауз і запуск у non-GUI режимі для реальних тестів.