Цикломатическая сложность в тестировании программного обеспечения (пример)
Что такое цикломатическая сложность Маккейба?
Цикломатическая сложность в тестировании программного обеспечения — это метрика тестирования, используемая для измерения сложности программы. Это количественная мера независимых путей в исходном коде программы. Цикломатическая сложность может быть рассчитана с использованием графов потоков управления или относительно функций, модулей, методов или классов в программе.
Независимый путь определяется как путь, имеющий хотя бы одно ребро, которое ранее не было пройдено ни на одном другом пути.
Эта метрика была разработана Томасом Дж. Маккейбом в 1976 году и основана на представлении потока управления программой. Поток управления изображает программу в виде графа, состоящего из узлов и ребер.
На графике узлы представляют задачи обработки, а ребра представляют поток управления между узлами.
Обозначение графа потока для программы
Нотация графа потока для программы определяет несколько узлов, соединенных ребрами. Ниже приведены блок-схемы для таких операторов, как 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;
График потока для этой программы будет
Математически вычисляя,
- В(Г) = 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) — максимальное количество независимых путей в графе
- В (Г) >= 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, для полного покрытия пути для приведенного выше примера необходимы три тестовых примера.
Действия, которые необходимо выполнить:
Для расчета цикломатической сложности и разработки тестовых примеров необходимо выполнить следующие шаги.
Шаг 1 – Построение графа с узлами и ребрами из кода
Шаг 2 – Идентификация независимых путей
Шаг 3 – Расчет цикломатической сложности
Шаг 4 – Разработка тестовых случаев
После того как базовый набор сформирован, ТЕСТОВЫЕ СЛУЧАИ должен быть написан для выполнения всех путей.
Подробнее о В (G)
Цикломатическую сложность можно рассчитать вручную, если программа небольшая. Автоматизированные инструменты необходимо использовать, если программа очень сложна, поскольку она включает в себя больше потоковых графов. На основании числа сложности команда может сделать вывод о действиях, которые необходимо предпринять для измерения.
В следующей таблице представлен обзор номера сложности и соответствующего значения v (G):
Сложность Число | Смысл |
---|---|
1-10 | Структурированный и хорошо написанный код
Высокая тестируемость Затраты и усилия меньше |
10-20 | Сложный код
Средняя тестируемость Затраты и усилия средние |
20-40 | Очень сложный код
Низкая тестируемость Стоимость и усилия высоки |
> 40 | Совсем не проверяемый
Очень высокие затраты и усилия |
Инструменты для расчета цикломатической сложности:
Доступно множество инструментов для определения сложности приложения. Некоторые инструменты расчета сложности используются для конкретных технологий. Сложность можно определить по количеству точек принятия решения в программе. Точками принятия решения являются операторы if, for, for-each, while, do, catch, case в исходном коде.
Примеры инструментов:
- OCLint – Статический анализатор кода для C и родственных языков.
- Надстройка Reflector — метрики кода для сборок .NET.
- GMetrics – Найдите показатели в Java связанные приложения
Использование цикломатической сложности:
Цикломатическая сложность может оказаться очень полезной в
- Помогает разработчикам и тестировщикам определять независимые пути выполнения.
- Разработчики могут заверить, что все пути были протестированы хотя бы один раз.
- Помогает нам больше сосредоточиться на открытых путях.
- Улучшить покрытие кода в Программная инженерия
- Оцените риск, связанный с приложением или программой.
- Использование этих показателей на ранних этапах цикла снижает риск программы.
Заключение
Цикломатическая сложность — это метрика программного обеспечения, полезная для структурированных или Белый Box Тестирование. В основном он используется для оценки сложности программы. Чем больше точек решения, тем больше сложность программы. Если программа имеет высокий номер сложности, то вероятность ошибки высока, а время обслуживания и устранения неполадок увеличивается.