Цикломатична складність у тестуванні програмного забезпечення (приклад)

Що таке цикломатична складність Маккейба?

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

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

Цей показник був розроблений Томасом Дж. Маккейбом у 1976 році, і він базується на представленні потоку керування програмою. Потік керування зображує програму як граф, який складається з вузлів і ребер.

На графіку вузли представляють завдання обробки, а ребра представляють потік керування між вузлами.

Цикломатична складність Маккейба

Нотація потокового графіка для програми

Нотація Flow Graph для програми визначає кілька вузлів, з’єднаних ребрами. Нижче наведено блок-схеми для таких операторів, як if-else, While, until і звичайної послідовності потоку.

Нотація потокового графіка для програми

Як розрахувати цикломатичну складність

Математичне представлення:

Математично, це набір незалежних шляхів через графову діаграму. Складність коду програми можна визначити за формулою –

V(G) = E - N + 2

Де

E – кількість ребер

N – кількість вузлів

V (G) = P + 1

Де P = кількість предикатних вузлів (вузол, який містить умову)

Приклад -

i = 0;
n=4; //N-Number of nodes present in the graph

while (i<n-1) do
j = i + 1;

while (j<n) do

if A[i]<A[j] then
swap(A[i], A[j]);

end do;
j=j+1;

end do;

Потоковий графік для цієї програми буде

Розрахувати цикломатичну складність

Математичні обчислення,

  • V(G) = 9 – 7 + 2 = 4
  • V(G) = 3 + 1 = 4 (вузли умов — 1,2, 3 і XNUMX вузли)
  • Базовий набір – набір можливих шляхів виконання програми
  • 1, 7
  • 1, 2, 6, 1, 7
  • 1, 2, 3, 4, 5, 2, 6, 1, 7
  • 1, 2, 3, 5, 2, 6, 1, 7

Властивості цикломатичної складності

Нижче наведено властивості цикломатичної складності:

  1. V (G) — максимальна кількість незалежних шляхів у графі
  2. V (G) >=1
  3. G матиме один шлях, якщо V (G) = 1
  4. Мінімізуйте складність до 10

Чим цей показник корисний для тестування програмного забезпечення?

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

Ця метрика корисна через властивості цикломатичної складності (M) –

  1. M може бути кількістю тестів для досягнення покриття гілок (верхня межа)
  2. M може бути кількістю шляхів через графіки. (Нижня межа)

Розглянемо цей приклад –

If (Condition 1)
Statement 1

Else
Statement 2

If (Condition 2)
Statement 3

Else
Statement 4

Цикломатична складність для цієї програми буде 8-7+2=3.

Оскільки складність розрахована як 3, для повного покриття шляху для наведеного вище прикладу необхідні три тести.

Кроки, яких слід виконати:

Для обчислення цикломатичної складності та розробки тестових випадків необхідно виконати наступні кроки.

крок 1 – Побудова графа з вузлами та ребрами з коду

крок 2 – Виявлення незалежних шляхів

крок 3 – Розрахунок цикломатичної складності

крок 4 – Дизайн тестових випадків

Коли основний набір сформований, ТЕСТОВІ КЕЙСИ слід записати для виконання всіх шляхів.

Більше про V (G)

Цикломатичну складність можна розрахувати вручну, якщо програма невелика. Автоматизовані інструменти потрібно використовувати, якщо програма дуже складна, оскільки вона передбачає більше графів потоку. Виходячи з рівня складності, команда може зробити висновок про дії, які необхідно виконати для заходу.

У наступній таблиці наведено огляд числа складності та відповідного значення v (G):

Номер складності Сенс
1-10 Структурований і добре написаний код

Висока тестованість

Витрати та зусилля менші

10-20 Комплексний код

Середня тестованість

Вартість і зусилля середні

20-40 Дуже складний код

Низька тестоздатність

Вартість і зусилля високі

> 40 Зовсім не перевіряється

Дуже висока вартість і зусилля

Інструменти для розрахунку цикломатичної складності:

Для визначення складності програми доступно багато інструментів. Деякі інструменти розрахунку складності використовуються для конкретних технологій. Складність можна визначити за кількістю точок прийняття рішень у програмі. Точками прийняття рішення є оператори if, for, for-each, while, do, catch, case у вихідному коді.

Прикладами інструментів є

  • OCLint – Статичний аналізатор коду для C і споріднених мов
  • Reflector Add In – метрики коду для збірок .NET
  • GMetrics – Знайти показники в Java пов'язані програми

Використання цикломатичної складності:

Цикломатична складність може виявитися дуже корисною в

  • Допомагає розробникам і тестувальникам визначити незалежне виконання шляху
  • Розробники можуть запевнити, що всі шляхи були протестовані принаймні один раз
  • Допомагає нам більше зосередитися на незакритих шляхах
  • Покращити покриття коду в Розробка програмного забезпечення
  • Оцініть ризик, пов’язаний із додатком або програмою
  • Використання цих показників на початку циклу зменшує ризик програми

Висновок

Цикломатична складність — програмна метрика, корисна для структурованих або білий Box Тестування. В основному використовується для оцінки складності програми. Чим більше точок прийняття рішень, тим більше складність програми. Якщо програма має високий номер складності, то ймовірність помилки висока із збільшенням часу на обслуговування та усунення несправностей.