Это детская штука по сравнению с винтажным КОБОЛом 1970-х, над которым я работал несколько лет назад. Мы использовали оригинальный инструмент McCabe для графического отображения CC для некоторой части кода. Распечатка была чисто черной, потому что линии, показывающие функциональные пути, были очень плотно упакованы и напоминали спагетти. У меня нет цифры, но она должна быть намного выше 171.
Согласно Код завершен (первое издание):
Если оценка:
Было бы неплохо написать модульные тесты, поскольку вы разбиваете исходную процедуру.
Это для кода C / C ++, поставляемого в настоящее время в продукте:
наивысшее значение CC, которое я мог надежно определить (т.е. я не подозреваю, что инструмент ошибочно добавляет значения сложности для несвязанных экземпляров main (...)):
Существует также тестовая подпрограмма с CC = 339, но она не является строго частью отгружаемого продукта. Это заставляет меня задуматься, как можно на самом деле проверить реализованные там тестовые примеры ...
и да, имена функций были подавлены, чтобы защитить виновных :)
Как это изменить:
Уже предпринимаются попытки решить эту проблему. Проблемы в основном вызваны двумя первопричинами:
. ] Основной метод - это выявление связанных частей спагетти (потяните за нить :)) и разбиение длинных функций на более короткие. Часто существуют сопоставления или преобразования, которые можно извлечь в функцию или вспомогательный класс / объект. Переход на использование STL вместо контейнеров и итераторов ручной сборки также может сократить объем кода. Очень помогает использование std :: string вместо C-строк.
Основной метод - выявление связанных частей спагетти (потянуть за нить :)) и разбить длинные функции на более короткие. Часто существуют сопоставления или преобразования, которые можно извлечь в функцию или вспомогательный класс / объект. Переход на использование STL вместо контейнеров и итераторов ручной сборки также может сократить объем кода. Очень помогает использование std :: string вместо C-строк.
Основной метод - это выявление связанных частей спагетти (потянуть за нить :)) и разбить длинные функции на более короткие. Часто существуют сопоставления или преобразования, которые можно извлечь в функцию или вспомогательный класс / объект. Переход на использование STL вместо контейнеров и итераторов ручной сборки также может сократить объем кода. Очень помогает использование std :: string вместо C-строк.