Цикломатична сложност при тестване на софтуер (пример)
Каква е цикломатичната сложност на Маккейб?
Цикломатична сложност при тестване на софтуер е показател за тестване, използван за измерване на сложността на софтуерна програма. Това е количествена мярка за независими пътища в изходния код на софтуерна програма. Цикломатичната сложност може да се изчисли чрез използване на графики на контролен поток или по отношение на функции, модули, методи или класове в софтуерна програма.
Независим път се дефинира като път, който има поне един ръб, който не е бил преминаван преди в други пътища.
Този показател е разработен от Thomas J. McCabe през 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
Свойства на цикломатичната сложност
Следват свойствата на цикломатичната сложност:
- V (G) е максималният брой независими пътища в графиката
- V (G) >=1
- G ще има един път, ако V (G) = 1
- Минимизирайте сложността до 10
Как този показател е полезен за тестване на софтуер?
Тестването на базовия път е една от техниката на бялата кутия и гарантира изпълнението на поне един оператор по време на тестването. Той проверява всеки линейно независим път през програмата, който означава брой тестови случаи, ще бъде еквивалентен на цикломатичната сложност на програмата.
Този показател е полезен поради свойствата на цикломатичната сложност (M) –
- M може да бъде брой тестови случаи за постигане на покритие на клон (горна граница)
- M може да бъде броят на пътищата през графиките. (Долна граница)
Помислете за този пример –
If (Condition 1) Statement 1 Else Statement 2 If (Condition 2) Statement 3 Else Statement 4
Цикломатичната сложност за тази програма ще бъде 8-7+2=3.
Тъй като сложността е изчислена като 3, три тестови случая са необходими за пълното покритие на пътя за горния пример.
Стъпки, които трябва да се следват:
Трябва да се следват следните стъпки за изчисляване на цикломатична сложност и дизайн на тестови случаи.
Стъпка – Изграждане на граф с възли и ребра от кода
Стъпка – Идентифициране на независими пътища
Стъпка – Изчисляване на цикломатична сложност
Стъпка – Дизайн на тестови случаи
След като се формира основният набор, ТЕСТОВИ СЛУЧАИ трябва да се напише за изпълнение на всички пътища.
Още за 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 Тестване. Използва се главно за оценка на сложността на програма. Ако точките за решение са повече, тогава сложността на програмата е по-голяма. Ако програмата има висок номер на сложност, тогава вероятността от грешка е висока с увеличено време за поддръжка и отстраняване на проблеми.


.png)
.png)