Чтобы понять цикломатическую сложность, давайте сначала поймем -
Что такое метрика программного обеспечения?
Измерение - это не что иное, как количественное указание размера / размера / мощности атрибута продукта / процесса. Метрика программного обеспечения определяется как количественная мера атрибута, которым обладает программная система в отношении стоимости, качества, размера и графика.
Пример-
Мера - количество ошибокПоказатели - количество обнаруженных ошибок на человека
В этом руководстве вы узнаете:
- Что такое метрика программного обеспечения?
- Что такое цикломатическая сложность?
- Обозначение потокового графа для программы:
- Как рассчитать цикломатическую сложность
- Свойства цикломатической сложности:
- Чем полезна эта метрика для тестирования программного обеспечения?
- Подробнее о 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
Свойства цикломатической сложности:
Ниже приведены свойства цикломатической сложности:
- V (G) - максимальное количество независимых путей в графе
- V (G)> = 1
- G будет иметь один путь, если V (G) = 1
- Минимизировать сложность до 10
Чем полезна эта метрика для тестирования программного обеспечения?
Тестирование базового пути - это один из методов белого ящика, который гарантирует выполнение хотя бы одного оператора во время тестирования. Он проверяет каждый линейно независимый путь в программе, что означает , что количество тестовых примеров будет эквивалентно цикломатической сложности программы.
Эта метрика полезна из-за свойств цикломатической сложности (M) -
- M может быть количеством тестовых примеров для достижения покрытия ветки (верхняя граница)
- 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
Использование цикломатической сложности:
Цикломатическая сложность может оказаться очень полезной в
- Помогает разработчикам и тестировщикам определять независимое выполнение пути
- Разработчики могут гарантировать, что все пути были протестированы хотя бы один раз.
- Помогает нам больше сосредоточиться на открытых путях
- Улучшение покрытия кода в программной инженерии
- Оценить риск, связанный с приложением или программой
- Использование этих показателей на ранних этапах цикла снижает риск программы.
Вывод:
Цикломатическая сложность - это программная метрика, полезная для структурированного тестирования или тестирования методом белого ящика. В основном он используется для оценки сложности программы. Чем больше точек принятия решения, тем сложнее программа. Если программа имеет высокий номер сложности, то вероятность ошибки высока с увеличением времени на обслуживание и поиск неисправностей.