TGViewer
Unity Architect: архитектура unity проектов Unity Architect: архитектура unity проектов @uniarchitect · 5.23K subscribers
Post #47 4.07K
КОГНИТИВНАЯ СЛОЖНОСТЬ

В 2009 было опубликована статья.
В ней взяли все типы сложности ПО (см. Table 1, стр. 5), расписали критерии их измерения, написали несколько программ, получили данные и сравнили их по значимости.

Для понимания выводов нужно пояснить:
🔸 Символьная сложность (symbolic complexity, definition. 7, стр. 7) — кол-во строк кода
🔸 Операционная сложность (operational complexity) — сумма весов сложности базовых операций (if, switch, for, while, do-while, function call и т.д. Table. 3, стр. 14)
🔸 Архитектурная сложность (architectural complexity, definition 22, стр. 16) — сумма весов всех аргументов, возвращаемых значений и локальных переменных
🔸 Когнитивная сложность одного объекта (unit of cognitive complexity, definition 24, стр. 17) — произведение операционной и архитектурной сложности объекта
Если совсем просто: все операции объекта, помноженные на все его переменные
🔸 Когнитивная сложность ПО (cognitive complexity) — сумма когнитивных сложностей всех объектов системы
🔸 Сложность связей проекта (relational complexity, definition 25, стр. 20) — произведение кол-ва объектов проекта и кол-ва связей объекта с самым большим кол-вом связей
Т.е. как будто все объекты системы одинаково сложны

Вот несколько сухих выводов оттуда:
1️⃣ Минимальная когнитивная сложность — символьная сложность. Когда архитектурная и операционная сложность = 1.
Т.е. проект без циклов, ветвлений, объектов, вызовов методов и т.д.
2️⃣ Максимальная когнитивная сложность — все объекты одинаково сложны
3️⃣ Когнитивная сложность находится между минимальным и максимальным значениями (corollary 4, стр. 21)
4️⃣ Зависимость между минимальной и максимальной сложностью — квадратичная
Т.е. условные 10 строк кода могут создать максимальную сложность в 100. Если каждая из строк будет вынесена в отдельный класс, в отдельный метод с одним аргументом и одним возвращаемым значением

Душно, да? Давайте своими словами:
🔹 Выделение логики в отдельный метод не всегда равно упрощение
Т.е. если метод с 2мя for'ами разбить на 2 метода по 1 for в каждом, то сложность объекта увеличится в 2 раза 🤷‍♂️
🔹 Сделать объект проще = уменьшить его архитектурную и операционную сложность
Т.е. выделить аргументы в 1 объект, избавиться от возвращаемого значения, уменьшить кол-во локальных переменных и уменьшить кол-во операций
🔹 Уменьшение архитектурной сложности ведет к увеличению сложности связей
Т.е. суммарная когнитивная сложность проекта остается такой же
🔹 Когнитивная сложность проекта всегда растет

#software_engineering@UniArchitect
  • 👍 20
More from @uniarchitect
  1. Jul 24, 2026Post #199
  2. Jul 12, 2026AI НЕ ДЕЛАЕТ ВАС ПРОДУКТИВНЕЕ Незыблемый факт: AI уже очень хорош в маленьких задачах. Нап…
  3. Jul 9, 2026Post #196
  4. Jul 7, 2026UNITY BUILD PIPELINE ПО КИРПИЧИКАМ Полгода назад я решил попробовать активность в блоге, г…
  5. Jul 4, 2026ПРОКЛЯТИЕ ПЕРЕИСПОЛЬЗУЕМОСТИ Делюсь болью. Я последние 5 лет на разных уровнях у разработч…
  6. Jun 29, 2026AI КАК РЕДАКТОР, А НЕ АВТОР Это вторая статья из серии про AI. Первая тут. Когда я запуска…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →