Control Flow Testing (тестування керування потоком) — це один із підходів до структурного (white-box) тестування, який фокусується на логічному потоці виконання програми або окремої функції. Мета — перевірити всі можливі шляхи, якими може пройти виконання програми, щоб виявити помилки в логіці, умовах або переходах.
Основні терміни:
- Control Flow Graph (CFG) — граф керування потоком, у якому вузли представляють блоки коду (наприклад, оператори або групи інструкцій), а ребра — можливі переходи між цими блоками залежно від умов.
- Блок (Basic Block) — послідовність інструкцій, що виконується без розгалужень.
Основні види контрольного тестування потоку:
- Statement Coverage (Покриття операторів):
- Перевіряє, чи всі інструкції коду були виконані хоча б один раз.
- Branch Coverage (Покриття гілок / умов):
- Перевіряє, чи всі можливі гілки (true/false) умов були пройдені.
- Path Coverage (Покриття шляхів):
- Перевіряє всі можливі унікальні шляхи виконання коду. Найглибший рівень, але часто складний для реалізації через велику кількість можливих шляхів.
Мета Control Flow Testing:
- Виявити:
- логічні помилки;
- помилки умовного переходу;
- пропущені шляхи;
- нескінченні цикли або недосяжний код.
Приклад:
def absolute_value(x):
if x >= 0:
return x
else:
return -x
Для цього прикладу Control Flow Testing має охопити два шляхи:
- коли x >= 0 (гілка if);
- коли x < 0 (гілка else).
Переваги:
- Дає глибоке розуміння внутрішньої логіки програми.
- Допомагає виявити складні, умовно-залежні помилки.
Підбиваючи підсумок, Control Flow Testing — це ефективний підхід до внутрішнього тестування логіки програмного забезпечення, що дозволяє виявити помилки, які можуть залишитися непоміченими при тестуванні лише на основі вимог або специфікацій (тобто без доступу до коду).