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

Что такое цикломатическая сложность Маккейба?

Цикломатическая сложность в тестировании программного обеспечения — это метрика тестирования, используемая для измерения сложности программы. Это количественная мера независимых путей в исходном коде программы. Цикломатическая сложность может быть рассчитана с использованием графов потоков управления или относительно функций, модулей, методов или классов в программе.

Независимый путь определяется как путь, имеющий хотя бы одно ребро, которое ранее не было пройдено ни на одном другом пути.

Эта метрика была разработана Томасом Дж. Маккейбом в 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

Свойства цикломатической сложности

Ниже приведены свойства цикломатической сложности:

  1. V(G) — максимальное количество независимых путей в графе
  2. В (Г) >= 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 – Разработка тестовых случаев

После того как базовый набор сформирован, ТЕСТОВЫЕ СЛУЧАИ должен быть написан для выполнения всех путей.

Подробнее о В (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 Тестирование. В основном он используется для оценки сложности программы. Чем больше точек решения, тем больше сложность программы. Если программа имеет высокий номер сложности, то вероятность ошибки высока, а время обслуживания и устранения неполадок увеличивается.