Какова самая высокая Цикломатическая Сложность какой-либо функции, которую Вы поддерживаете? И как Вы пошли бы о рефакторинге его?

sudo apt-get install python3

Затем

python3
14
задан 2 revs 23 May 2017 в 12:19
поделиться

2 ответа

Это детская штука по сравнению с винтажным КОБОЛом 1970-х, над которым я работал несколько лет назад. Мы использовали оригинальный инструмент McCabe для графического отображения CC для некоторой части кода. Распечатка была чисто черной, потому что линии, показывающие функциональные пути, были очень плотно упакованы и напоминали спагетти. У меня нет цифры, но она должна быть намного выше 171.

Что делать

Согласно Код завершен (первое издание):

Если оценка:

  • ] 0-5 - процедура, вероятно, в порядке
  • 6-10 - начать думать о способах упрощения процедуры
  • 10+ - разбить часть процедуры на вторую процедуру и вызвать ее из первой процедуры

Было бы неплохо написать модульные тесты, поскольку вы разбиваете исходную процедуру.

18
ответ дан 1 December 2019 в 12:52
поделиться

Это для кода C / C ++, поставляемого в настоящее время в продукте:

наивысшее значение CC, которое я мог надежно определить (т.е. я не подозреваю, что инструмент ошибочно добавляет значения сложности для несвязанных экземпляров main (...)):

  • функция обработки изображений: 184
  • загрузчик элементов базы данных с проверкой: 159

Существует также тестовая подпрограмма с CC = 339, но она не является строго частью отгружаемого продукта. Это заставляет меня задуматься, как можно на самом деле проверить реализованные там тестовые примеры ...

и да, имена функций были подавлены, чтобы защитить виновных :)

Как это изменить:

Уже предпринимаются попытки решить эту проблему. Проблемы в основном вызваны двумя первопричинами:

  1. спагетти-код (без инкапсуляции, много копипаста)
  2. код, предоставленный группе продуктов некоторыми учеными, не имеющими реальной подготовки в области конструирования / проектирования / столярного дела

. ] Основной метод - это выявление связанных частей спагетти (потяните за нить :)) и разбиение длинных функций на более короткие. Часто существуют сопоставления или преобразования, которые можно извлечь в функцию или вспомогательный класс / объект. Переход на использование STL вместо контейнеров и итераторов ручной сборки также может сократить объем кода. Очень помогает использование std :: string вместо C-строк.

Основной метод - выявление связанных частей спагетти (потянуть за нить :)) и разбить длинные функции на более короткие. Часто существуют сопоставления или преобразования, которые можно извлечь в функцию или вспомогательный класс / объект. Переход на использование STL вместо контейнеров и итераторов ручной сборки также может сократить объем кода. Очень помогает использование std :: string вместо C-строк.

Основной метод - это выявление связанных частей спагетти (потянуть за нить :)) и разбить длинные функции на более короткие. Часто существуют сопоставления или преобразования, которые можно извлечь в функцию или вспомогательный класс / объект. Переход на использование STL вместо контейнеров и итераторов ручной сборки также может сократить объем кода. Очень помогает использование std :: string вместо C-строк.

3
ответ дан 1 December 2019 в 12:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: