За да разберем цикломатичната сложност, нека първо разберем -
Какво е софтуерна метрика?
Измерването не е нищо друго освен количествено посочване на размер / размер / капацитет на атрибут на продукт / процес. Софтуерната метрика се определя като количествена мярка на атрибут, който софтуерната система притежава по отношение на разходите, качеството, размера и графика.
Пример-
Мярка - брой грешкиПоказатели - Брой открити грешки на човек
В този урок ще научите -
- Какво е софтуерна метрика?
- Какво е цикломатична сложност?
- Обозначение на графика на потока за програма:
- Как да изчислим цикломатичната сложност
- Свойства на цикломатичната сложност:
- Как този показател е полезен за тестване на софтуер?
- Повече за V (G):
- Инструменти за изчисляване на цикломатичната сложност:
- Употреба на цикломатична сложност:
Цикломатична сложност при тестване на софтуер
Цикломатичната сложност при тестване на софтуер е показател за тестване, използван за измерване на сложността на софтуерна програма. Това е количествена мярка за независими пътища в изходния код на софтуерна програма. Цикломатичната сложност може да бъде изчислена чрез използване на графики на контролния поток или по отношение на функции, модули, методи или класове в рамките на софтуерна програма.
Независимата пътека се дефинира като пътека, която има поне един ръб, който не е преминаван преди в други пътища.
Тази метрика е разработена от Томас Дж. Маккейб през 1976 г. и се основава на представяне на контролния поток на програмата. Контролният поток изобразява програма като графика, която се състои от възли и ръбове.
В графиката възлите представляват задачи за обработка, докато ръбовете представляват контролен поток между възлите.
Обозначение на графика на потока за програма:
Нотация на графика на потока за програма дефинира няколко възли, свързани през ръбовете. По-долу са показани диаграми на потока за изявления като if-else, While, while и нормална последователност на потока.
Как да изчислим цикломатичната сложност
Математическо представяне:
Математически той е зададен от независими пътеки през графичната диаграма. Сложността на кода на програмата може да бъде определена с помощта на формулата -
V (G) = E - N + 2
Където,
E - Брой ръбове
N - Брой възли
V (G) = P + 1
Където P = Брой предикатни възли (възел, който съдържа условие)
Пример -
i = 0;п = 4; // N-Брой възли, присъстващи в графикатадокато (iГрафик на потока за тази програма ще бъде
Изчислявайки математически,
- V (G) = 9 - 7 + 2 = 4
- V (G) = 3 + 1 = 4 (Възлови възли са 1,2 и 3 възли)
- Basis Set - Набор от възможен път за изпълнение на програма
- 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 може да бъде брой тестови случаи за постигане на покритие на клонове (Upper Bound)
- М може да бъде брой пътища през графиките. (Долна граница)
Помислете за този пример -
Ако (условие 1)Изявление 1ИначеИзявление 2Ако (условие 2)Изявление 3ИначеИзявление 4Цикломатичната сложност за тази програма ще бъде 8-7 + 2 = 3.
Тъй като сложността е изчислена като 3, са необходими три тестови случая за пълното покритие на пътя за горния пример.
Стъпки, които трябва да се следват:
Следват стъпките по-долу за изчисляване на цикломатичната сложност и проектирането на тестови случаи.
Стъпка 1 - Изграждане на графика с възли и ръбове от кода
Стъпка 2 - Идентифициране на независими пътища
Стъпка 3 - Изчисляване на цикломатичната сложност
Стъпка 4 - Проектиране на тестови случаи
След като се формира основният набор, трябва да се напишат TEST CASES, за да се изпълнят всички пътеки.
Повече за V (G):
Цикломатичната сложност може да се изчисли ръчно, ако програмата е малка. Трябва да се използват автоматизирани инструменти, ако програмата е много сложна, тъй като това включва повече графики на потока. Въз основа на номера на сложността, екипът може да направи заключение относно действията, които трябва да бъдат предприети за мярка.
Следващата таблица дава преглед на номера на сложността и съответното значение на v (G):
Номер на сложността Значение 1-10 Структуриран и добре написан код Високата проверимост Разходите и усилията са по-малко 10-20 Комплексният код Средна изпробваемост Разходите и усилията са средни 20-40 Много сложен код Ниската изпробваемост Разходите и усилията са високи > 40 Изобщо не подлежи на проверка Много висока цена и усилие Инструменти за изчисляване на цикломатичната сложност:
Налични са много инструменти за определяне на сложността на приложението. Някои инструменти за изчисляване на сложността се използват за специфични технологии. Сложността може да се намери по броя на точките за решение в програмата. Точките за вземане на решение са, ако, за всеки, докато, do, catch, case изявления в изходния код.
Примери за инструменти са
- OCLint - Анализатор на статичен код за C и сродни езици
- Добавяне на рефлектор - метрики на кода за .NET сглобки
- GMetrics - Намерете показатели в приложения, свързани с Java
Употреба на цикломатична сложност:
Цикломатичната сложност може да се окаже много полезна при
- Помага на разработчиците и тестерите да определят независими изпълнения на пътя
- Разработчиците могат да се уверят, че всички пътища са тествани поне веднъж
- Помага ни да се съсредоточим повече върху непокритите пътеки
- Подобрете кодовото покритие в софтуерното инженерство
- Оценете риска, свързан с приложението или програмата
- Използването на тези показатели в началото на цикъла намалява по-голям риск от програмата
Заключение:
Cyclomatic Complexity е софтуерна метрика, полезна за структурирано или White Box тестване. Използва се главно за оценка на сложността на програмата. Ако точките за вземане на решения са повече, тогава сложността на програмата е повече. Ако програмата има много сложен номер, тогава вероятността за грешка е голяма с увеличено време за поддръжка и отстраняване на неизправности.