Перейти к содержанию
bslls:CyclomaticComplexity

Цикломатическая сложность (CyclomaticComplexity)

  • Тип: Дефект кода
  • Важность: Критичный
  • Включена по умолчанию: Да
  • Теги: brainoverload

Описание диагностики

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

Цикломатическая сложность увеличивается на 1 за каждую конструкцию

  • Для ... По .. Цикл
  • Для каждого ... Из ... Цикл
  • Если ... Тогда
  • ИначеЕсли ... Тогда
  • Иначе
  • Попытка ... Исключение ... КонецПопытки
  • Перейти ~Метка
  • Бинарные операции И ... ИЛИ
  • Тернарный оператор
  • Процедура
  • Функция

Примеры

Функция СерверныйМодульМенеджера(Имя)                                                   // 1
    ОбъектНайден = Ложь;                                                                // 0
                                                                                        // 0
    ЧастиИмени = СтрРазделить(Имя, ".");                                                // 0
    Если ЧастиИмени.Количество() = 2 Тогда                                              // 1
                                                                                        // 0
        ИмяВида = ВРег(ЧастиИмени[0]);                                                  // 0
        ИмяОбъекта = ЧастиИмени[1];                                                     // 0
                                                                                        // 0
        Если ИмяВида = ВРег("Константы") Тогда                                          // 1
            Если Метаданные.Константы.Найти(ИмяОбъекта) <> Неопределено Тогда           // 1
                ОбъектНайден = Истина;                                                  // 0
            КонецЕсли;                                                                  // 0
        ИначеЕсли ИмяВида = ВРег("РегистрыСведений") Тогда                              // 1
            Если Метаданные.РегистрыСведений.Найти(ИмяОбъекта) <> Неопределено Тогда    // 1
                ОбъектНайден = Истина;                                                  // 0
            КонецЕсли;                                                                  // 0
        Иначе                                                                           // 1
            ОбъектНайден = Ложь;                                                        // 0
        КонецЕсли;                                                                      // 0
    КонецЕсли;                                                                          // 0
                                                                                        // 0
    Если Не ОбъектНайден Тогда                                                          // 1
        ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(      // 0
            НСтр("ru = 'Объект метаданных ""%1"" не найден,                             // 0
                       |либо для него не поддерживается получение модуля менеджера.'"), // 0
            Имя);                                                                       // 0
    КонецЕсли;                                                                          // 0
    УстановитьБезопасныйРежим(Истина);                                                  // 0
    Модуль = Вычислить(Имя);                                                            // 0
    F = ?(Условие, ИСТИНА, НЕОПРЕДЕЛЕНО);                                               // 1
    А = ?(Условие, ИСТИНА, ?(Условие2, ЛОЖЬ, НЕОПРЕДЕЛЕНО));                            // 2
    M = ИСТИНА ИЛИ 7;                                                                   // 1
    Возврат Модуль;                                                                     // 0
КонецФункции                                                                            // итог 12

Источники

Соответствие стандартам

Нет подтверждённых связей со стандартами.

Источник диагностики