Black Box testing і White Box testing

Black Box testing і White Box testing — це два основних підходи до тестування програмного забезпечення, які відрізняються рівнем знання внутрішньої структури коду під час тестування.

Black Box Testing (тестування “чорної скриньки”)
Що це: Тестування, при якому тестувальник не має доступу до внутрішньої логіки або коду програми. Зосереджується лише на вхідних даних і очікуваних виходах.
Орієнтовано на:
Функціональні вимоги
Поведінку системи

Виконується ким: Зазвичай тестувальниками або користувачами, які не мають доступу до коду.
Приклади: Тестування UI, API, поведінки форми при введенні некоректних даних.
White Box Testing (тестування “білої скриньки”)
Що це: Тестування, при якому тестувальник має доступ до коду та знає його внутрішню структуру. Зосереджується на логіці, шляхах виконання, покритті коду.
Орієнтовано на:
Внутрішню логіку реалізації
Гілки, умови, цикли, покриття коду
Виконується ким: Зазвичай розробниками або технічними тестувальниками (ISTQB TTA).
Приклади: Unit testing, code coverage analysis, перевірка гілок.

Основна різниця між Black Box та White Box:

КритерійBlack Box TestingWhite Box Testing
Знання кодуНе потрібнеОбов’язкове
Рівень доступуЗовнішній (інтерфейс, API, UI)Внутрішній (структура, логіка, змінні)
ОцінюєтьсяФункціональність, вимогиВнутрішня логіка, шляхи виконання
Хто виконуєТестувальники, користувачіРозробники, технічні тестувальники
ПрикладиФункціональні, нефункціональні тестиUnit-тести, аналіз покриття, контроль гілок

Статичне тестування і динамічне тестування

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

Статичне тестування (Static Testing)
Що це: Тестування, яке виконується без запуску коду. Воно спрямоване на виявлення дефектів на ранніх етапах розробки.
Як виконується:  
Аналіз документації
Рев’ю коду
Статичний аналіз інструментами
Перевірка вимог, тест-кейсів, дизайну

Ціль: Знайти помилки у вимогах, логіці, синтаксисі до виконання програми.
Динамічне тестування (Dynamic Testing)
Що це: Тестування, яке виконується під час виконання коду. Воно перевіряє, як система поводиться в реальному середовищі.
Як виконується:
Запуск програмного забезпечення
Виконання тест-кейсів
Автоматизоване або ручне тестування

Ціль: Переконатися, що ПЗ працює правильно під час виконання, знаходити дефекти в поведінці.

Ключова різниця між статичним та динамічним тестуванням

ХарактеристикаСтатичне тестуванняДинамічне тестування
Чи виконується код?НіТак
Етапи SDLCРанній (аналіз, дизайн)Після реалізації (тестування)
ВиявляєСинтаксичні, логічні помилкиПоведінкові, функціональні помилки
ІнструментиCode review, аналізаториТестові фреймворки, емулятори

Ці підходи доповнюють один одного: статичне тестування дозволяє виявити дефекти ще до запуску ПЗ, а динамічне — перевіряє фактичну поведінку програми в дії.

Типи тестування (швидкий огляд)

Згідно з ISTQB, термін тип тестування (test type) визначається як:

“A group of test activities based on specific test objectives aimed at specific characteristics of a component or system.”
(Група тестових активностей, що базуються на певних цілях тестування, спрямованих на конкретні характеристики компонента або системи.)

Іншими словами, тип тестування визначає мету, характеристику, що перевіряється, і методи, які застосовуються під час тестування.

Основні типи тестування

КатегоріяТип тестуванняКоротка характеристика
За способом виконанняСтатичне тестуванняАналіз артефактів (код, документація) без виконання програми. Напр.: code review, static analysis.
Динамічне тестуванняТестування через виконання коду, щоб побачити реальну поведінку системи.
За метою тестуванняФункціональне тестуванняПеревірка, чи працює система згідно зі специфікацією (що система робить). Зазвичай black box.
Нефункціональне тестуванняПеревірка якості системи: продуктивність, безпека, зручність, надійність (як система працює).
За доступом до внутрішньої логікиBlack Box TestingТестування без знань про внутрішній код. Фокус на вхідних/вихідних даних.
White Box TestingТестування з використанням знань про внутрішню структуру коду. Напр.: unit testing, coverage analysis.
За напрямком тестування змінConfirmation Testing (Re-testing)Перевірка, що виправлений баг більше не проявляється. Виконуються ті ж кроки, що й при виявленні.
Regression TestingПеревірка, що нові зміни не зламали стару функціональність. Часто автоматизоване.
За швидкою перевіркою стану системиSmoke TestingПоверхнева перевірка, що основна функціональність системи працює, білд стабільний.
Sanity TestingПеревірка конкретного функціоналу, який нещодавно змінився або був виправлений.
За підходом до виконанняExploratory TestingНеструктуроване дослідницьке тестування, де тестувальник одночасно досліджує, проектує і виконує тести.

Як це все пов’язано?

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

Функціональне / нефункціональне — це що саме ми тестуємо: логіку чи якість.

Black box / White box — це яку інформацію ми маємо при тестуванні.

Confirmation / Regression — це тестування змін: чи щось виправилось, і чи щось інше не зламалось.

Smoke / Sanity — це швидкі перевірки, але з різним охопленням.

Exploratory — це гнучкий і креативний підхід, який може доповнювати будь-який інший тип тестування.

Висновок:

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

SDLC та STLC

Життєвий цикл програмного забезпечення — це процес, який охоплює всі етапи розробки ПЗ: від ідеї до релізу і супроводу. Існує кілька підходів до організації цього циклу, найвідоміші з яких —  Agile, Scrum.

SDLC (Software Development Life Cycle) — Життєвий цикл розробки ПЗ
SDLC — це структурований підхід до розробки програмного забезпечення, який охоплює весь процес від ідеї до завершення проєкту.
Основні етапи SDLC:    
1. Збір вимог (Requirements Analysis) — спілкування з клієнтами, визначення того, що потрібно зробити.    
2. Проєктування (Design) — архітектура системи, вибір технологій, UI-макети.    
3. Розробка (Implementation/Development) — написання коду.    
4. Тестування (Testing) — перевірка якості, відповідності вимогам.    
5. Впровадження (Deployment) — реліз продукту.    
6. Супровід (Maintenance) — підтримка, оновлення, виправлення багів.
SDLC — основа всіх моделей розробки (включає і Waterfall, і Agile).

Agile

Agile — гнучка методологія розробки ПЗ
Agile — це підхід, що передбачає ітераційну розробку, постійну взаємодію з клієнтом, швидкі зміни та адаптацію.
Ключові принципи Agile:    
• Розвиток через короткі цикли (ітерації).    
• Регулярні демо клієнту.    
• Мінімізація документації.    
• Співпраця між командами.    
• Зміни вітаються навіть на пізніх етапах.
В основі Agile — Маніфест гнучкої розробки ПЗ (Agile Manifesto).

Scrum

Scrum — фреймворк у межах Agile
Scrum — один з найпопулярніших Agile-фреймворків.
Основні ролі в Scrum:    
• Product Owner — формує вимоги та пріоритети.    
• Scrum Master — організовує процес, слідкує за Scrum-правилами.    
• Team — виконує роботу.

Ключові терміни Scrum

ПоняттяОпис
SprintІтерація (1–4 тижні), в якій реалізується частина функціоналу.
BacklogСписок завдань (функцій, багів, задач).
Sprint PlanningПланування спринту.
Daily ScrumЩоденна 15-хв. зустріч команди.
Sprint ReviewДемонстрація результатів після спринту.
RetrospectiveАналіз, що пройшло добре / що покращити.

STLC

STLC (Software Testing Life Cycle) — Життєвий цикл тестування
STLC — це послідовність кроків, що визначають процес тестування ПЗ.
Основні етапи STLC:    
1. Аналіз вимог — визначення, що саме потрібно тестувати.    
2. Планування тестування — створення тест-плану, ресурсів, інструментів.    
3. Розробка тест-кейсів — створення сценаріїв тестування.    
4. Підготовка середовища — налаштування систем для тестування.    
5. Виконання тестування — ручне або автоматизоване тестування.    
6. Завершення — звітність, аналіз дефектів, ретроспектива.
STLC може проходити паралельно з SDLC.

Тестування (QA, QC, Testing)

Тестування (QA, QC, Testing)
Тестування (QA, QC, Testing) — це сукупність процесів, спрямованих на забезпечення якості програмного продукту. Ці процеси допомагають виявити помилки, дефекти або невідповідності очікуваному функціоналі ще до того, як продукт потрапить до користувача.
Testing (тестування)
Testing (тестування) – це безпосередній процес перевірки програмного забезпечення з метою виявлення помилок. Тестування відповідає на запитання: “Працює чи ні?”    
• Може бути ручним (manual) або автоматизованим (automated).    
• Включає планування, розробку тест-кейсів, перевірку функціональності, UI, безпеки, продуктивності тощо.    
• Наприклад: тестувальник відкриває форму реєстрації та перевіряє, що при введенні неправильного email з’являється повідомлення про помилку.

QA (Quality Assurance — забезпечення якості)

QA (Quality Assurance — забезпечення якості)
QA (Quality Assurance — забезпечення якості) – це процес організації та управління всією системою якості продукту. QA фокусується на попередженні дефектів ще до того, як вони з’являться.    
• Включає розробку стандартів, процесів, документації, аудитів.    
• QA — це процес, а не дія.    
• Відповідає на запитання: “Як зробити, щоб помилок не було?”

QC (Quality Control — контроль якості)

QC (Quality Control — контроль якості)
QC (Quality Control — контроль якості) – це процес перевірки результату розробки, щоб переконатися, що продукт відповідає вимогам.    
• QC  фокусується на виявленні дефектів.    
• Включає перевірку на відповідність технічним вимогам, специфікаціям.    
• Відповідає на запитання: “Чи відповідає продукт вимогам?”

Взаємозв’язок між QA, QC та Testing

ПоняттяФокусМетаТип діяльності
QAПроцесиЗапобігти дефектамПроактивна
QCПродуктВиявити дефектиРеактивна
TestingФункціональністьЗнайти помилкиПрактична

Висновок

Якщо коротко:
QA — створює умови, QC — контролює якість результату, Testing — перевіряє, чи все працює правильно.