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

Формула

CC = 1
  + Count(If)        // включая ElseIf
  + Count(While)
  + Count(For)
  + Count(For Each)
  + Count(Try)       // Try…Except…EndTry

«Выбор/Когда» учитывайте по количеству независимых веток.

Пороговые значения

CC Статус Действия
≤ 10 OK без действий
11–15 Warning подумать о распиле
> 15 Refactor обязательная декомпозиция

Пример функции (канон маркеров)

// <doc>
 //   <summary>Подсчёт суммы положительных чисел в массиве</summary>   ✦
 //   <param i="1" name="Items" type="Array">Массив чисел</param>   ➤
 //   <returns>Number — сумма положительных</returns>   ⬅
 // </doc>

Функция SumPositive(Items) Экспорт   //⚙
    Сумма = 0;   //✏
    Для Каждого x Из Items Цикл   //⟳
        Если x > 0 Тогда   //⚡
            Сумма = Сумма + x;   //✏
        КонецЕсли;
    КонецЦикла;
    Возврат Сумма;   //↩
КонецФункции

Линтер и CI

for each Function in Module:
  cc = calc_cc(Function.Body)
  if has_doc(Function):
     cc_tag = read_cc_from_doc(Function.Doc)
     if cc_tag != cc:
        warn("CC mismatch", suggest=cc)
  if cc > 15:
     fail_build("CC > 15 in " + Function.Name)