Path Testing

Path Testing (тестування шляхів) — це метод структурного тестування (white-box testing), при якому тестувальник аналізує всі можливі логічні шляхи через програму з метою створення тестів, що забезпечують максимальне покриття коду. Він базується на аналізі графа потоку управління (Control Flow Graph, CFG) програми.

Основні терміни

1. Граф потоку управління (Control Flow Graph, CFG)

  • Представляє структуру виконання програми у вигляді графа.
  • Вузли (nodes) — окремі інструкції, блоки або умовні оператори.
  • Ребра (edges) — можливі переходи між вузлами, залежно від умов або порядку виконання.

2. Шлях (Path)

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

3. Типи шляхів:

  • Простий шлях (Simple Path): шлях, у якому вузли не повторюються.
  • Циклічний шлях (Cyclic Path): шлях, що містить цикл (наприклад, while або for).
  • Лінійно незалежний шлях: шлях, що містить хоча б одну нову гілку, якої немає в інших шляхах.
  • Базисний шлях (Basis Path): мінімальний набір незалежних шляхів, що дозволяє досягти повного покриття гілок.

Мета Path Testing

  • Перевірити всі можливі варіанти проходження програми.
  • Виявити:
    • логічні помилки,
    • пропущені гілки або умови,
    • мертвий код,
    • небажані петлі (infinite loops),
    • некоректну обробку умов.

Алгоритм проведення Path Testing

  1. Побудова графа потоку управління (CFG) для цільового фрагменту коду.
  2. Ідентифікація всіх можливих логічних шляхів у графі.
  3. Вибір набору незалежних шляхів (як правило, базисних шляхів).
  4. Створення тестових випадків, які дозволяють пройти ці шляхи.
  5. Виконання тестів і аналіз результатів.

Приклад

def max_of_three(a, b, c):
    if a > b:
        if a > c:
            return a
        else:
            return c
    else:
        if b > c:
            return b
        else:
            return c

Граф потоку управління:

          [Start]
        |
     a > b?
     /    \
   T/      \F
 [a > c?] [b > c?]
   / \      / \
 T/   \F  T/   \F
[a] [c] [b]   [c]

Можливі шляхи:

  1. a > b і a > c → return a
  2. a > b і a <= c → return c
  3. a <= b і b > c → return b
  4. a <= b і b <= c → return c

Для повного покриття шляхів потрібно 4 тест-кейси:

  • max_of_three(5, 2, 1) → шлях 1
  • max_of_three(5, 2, 9) → шлях 2
  • max_of_three(2, 5, 1) → шлях 3
  • max_of_three(2, 5, 9) → шлях 4

Переваги Path Testing

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

Недоліки

  • Неможливість повністю охопити всі шляхи, якщо програма велика або має багато циклів (може бути нескінченна кількість шляхів).
  • Висока складність, якщо код заплутаний або має багато умовних конструкцій.

Path Testing — це один із найточніших методів тестування програмної логіки.

Він дає змогу:

  • виявити логічні помилки,
  • досягти глибокого покриття коду,
  • забезпечити якість критичних функцій.

Його доцільно використовувати при тестуванні окремих функцій, модулів, алгоритмів або життєво важливих систем, де необхідна висока точність і передбачуваність поведінки.

Leave a Reply

Your email address will not be published. Required fields are marked *