Цикломатическая сложность Маккабе: вычисление с помощью потоковой диаграммы (пример)

Содержание:

Anonim

Чтобы понять цикломатическую сложность, давайте сначала поймем -

Что такое метрика программного обеспечения?

Измерение - это не что иное, как количественное указание размера / размера / мощности атрибута продукта / процесса. Метрика программного обеспечения определяется как количественная мера атрибута, которым обладает программная система в отношении стоимости, качества, размера и графика.

Пример-

Мера - количество ошибокПоказатели - количество обнаруженных ошибок на человека

В этом руководстве вы узнаете:

  • Что такое метрика программного обеспечения?
  • Что такое цикломатическая сложность?
  • Обозначение потокового графа для программы:
  • Как рассчитать цикломатическую сложность
  • Свойства цикломатической сложности:
  • Чем полезна эта метрика для тестирования программного обеспечения?
  • Подробнее о V (G):
  • Инструменты для расчета цикломатической сложности:
  • Использование цикломатической сложности:

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

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

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

Эта метрика была разработана Томасом Дж. МакКейбом в 1976 году и основана на представлении программы в потоке управления. Поток управления представляет программу в виде графа, состоящего из узлов и ребер.

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

Обозначение потокового графа для программы:

Обозначение потокового графа для программы определяет несколько узлов, соединенных ребрами. Ниже приведены блок-схемы для таких операторов, как if-else, While, until и нормальная последовательность выполнения.

Как рассчитать цикломатическую сложность

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

Математически это набор независимых путей через диаграмму графа. Сложность кода программы можно определить по формуле -

V (G) = E - N + 2

Где,

E - Количество ребер

N - количество узлов

V (G) = P + 1

Где P = количество узлов предиката (узел, содержащий условие)

Пример -

я = 0;n = 4; // N-количество узлов, присутствующих в графев то время как (я <п-1) делатьj = i + 1;в то время как (j 

График для этой программы будет

Математические вычисления,

  • V (G) = 9-7 + 2 = 4
  • V (G) = 3 + 1 = 4 (узлы условий - это 1,2 и 3 узла)
  • Базовый набор - набор возможных путей выполнения программы.
  • 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 может быть количеством путей через графы. (Нижняя граница)

Рассмотрим этот пример -

Если (Условие 1)Положение 1ЕщеПоложение 2Если (Условие 2)Положение 3.ЕщеПоложение 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

Использование цикломатической сложности:

Цикломатическая сложность может оказаться очень полезной в

  • Помогает разработчикам и тестировщикам определять независимое выполнение пути
  • Разработчики могут гарантировать, что все пути были протестированы хотя бы один раз.
  • Помогает нам больше сосредоточиться на открытых путях
  • Улучшение покрытия кода в программной инженерии
  • Оценить риск, связанный с приложением или программой
  • Использование этих показателей на ранних этапах цикла снижает риск программы.

Вывод:

Цикломатическая сложность - это программная метрика, полезная для структурированного тестирования или тестирования методом белого ящика. В основном он используется для оценки сложности программы. Чем больше точек принятия решения, тем сложнее программа. Если программа имеет высокий номер сложности, то вероятность ошибки высока с увеличением времени на обслуживание и поиск неисправностей.