Введение

Мера структурной сложности программного обеспечения.

Цикломатическая сложность – это программная метрика, используемая для оценки сложности программы. Это количественная мера числа линейно независимых путей в исходном коде программы. Она была разработана Томасом Дж. Маккейбом-старшим в 1976 году. Цикломатическая сложность вычисляется на основе графа потока управления программы. Узлы графа соответствуют неделимым блокам команд программы, а направленное ребро соединяет два узла, если вторая команда может быть выполнена непосредственно после первой. Цикломатическая сложность может также применяться к отдельным функциям, модулям, методам или классам внутри программы. Одна из стратегий тестирования, предложенная Маккейбом и называемая тестированием базовых путей, заключается в тестировании каждого линейно независимого пути в программе. В этом случае количество тестовых случаев будет равно цикломатической сложности программы.

Ограничение сложности в процессе разработки

Одним из первоначальных применений метода Маккейба было ограничение сложности подпрограмм в процессе разработки программы. Он рекомендовал программистам вычислять сложность разрабатываемых модулей и разделять их на более мелкие, если цикломатическая сложность модуля превышала 10.

Измерение "структурированности" программы

Раздел VI статьи Маккейба 1976 года посвящен определению структуры графов потока управления (CFG) неструктурированных программ с точки зрения подграфов, выделенных Маккейбом. (Подробности см. в теореме о структурированных программах.) Маккейб завершил этот раздел, предложив численную оценку близости программы к идеалу структурированного программирования, то есть ее "структурированности". Маккейб назвал разработанную им меру "существенной сложностью". Если программа структурирована, то процесс редукции/конденсации Маккейба сводит ее к единственному узлу CFG. В отличие от этого, если программа неструктурирована, итеративный процесс выявит ее необратимую часть. Мера существенной сложности, предложенная Маккейбом, представляет собой просто цикломатическую сложность этого необратимого графа, поэтому она будет равна 1 для всех структурированных программ, но больше единицы для неструктурированных программ. Некоторые исследования выявили положительную корреляцию между цикломатической сложностью и дефектами: функции и методы с наибольшей сложностью, как правило, содержат больше всего дефектов. Однако многократно демонстрировалась корреляция между цикломатической сложностью и размером программы (обычно измеряемым в строках кода). Лес Хэттон утверждал, что сложность обладает такой же прогностической силой, как и количество строк кода. Исследования, контролирующие размер программы (то есть сравнивающие модули с разной сложностью, но схожим размером), как правило, дают менее однозначные результаты: многие из них не обнаруживают значимой корреляции, в то время как другие – обнаруживают. Некоторые исследователи ставят под сомнение достоверность методик, использованных в исследованиях, не выявивших корреляции. Хотя эта взаимосвязь, вероятно, существует, ее сложно применить на практике. Поскольку размер программы не является контролируемым параметром коммерческого программного обеспечения, полезность числа Маккейба подвергается сомнению.