Skip to content

Latest commit

 

History

History
71 lines (62 loc) · 6.21 KB

CyclomaticComplexity.md

File metadata and controls

71 lines (62 loc) · 6.21 KB

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

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

Цикломатическая сложность программного кода является одной из наиболее старых метрик, впервые она была упомянута в 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

Источники