Количество циклов графика вызовов для одной или нескольких функций
Метрика предоставляет количественную оценку количества циклов рекурсии в вашем проекте. Метрика является суммой:
Количество прямых рекурсий (самокурсивные функции или функции, вызывающие себя).
Количество сильно связанных компонентов, образованных циклами косвенной рекурсии в вашем проекте. Если вы рассматриваете циклы рекурсии как ориентированный граф, график сильно связан, если существует путь между всеми парами вершин.
Чтобы вычислить количество сильно связанных компонентов:
Нарисуйте циклы рекурсии в коде.
Например, циклы рекурсии в этом примере показаны ниже.
volatile int checkStatus; void func1() { if(checkStatus) { func2(); } else { func3(); } } func2() { func1(); } func3() { func1(); }
Определите количество сильно связанных компонентов, образованных циклами рекурсии.
В предыдущем примере существует один сильно связанный компонент. Можно переместиться из любой вершины в другую, следуя путям в графике.
В списке событий под метрикой показан один из циклов рекурсии в сильно связанном компоненте.
Вызовы через указатель на функцию не рассматриваются.
Рекомендуемый верхний предел для этой метрики равен 0. Чтобы избежать возможности превышения доступного пространства стека, не используйте рекурсии в коде. Рекурсии могут иметь тенденцию легко вытеснять пространство стека. См. примеры роста размера стека с рекурсиями, описанными для этого правила CERT-C, которое запрещает рекурсии.
Чтобы обнаружить использование рекурсий, проверяйте на нарушения одного из MISRA C:2012 Rule 17.2
, MISRA C®:: Правило 16.2 2004 года, MISRA C++:2008 Rule 7-5-4
или JSF® Правило 119. Обратите внимание, что:
Шашки правил сообщают о каждой функции, которая вызывает себя, прямо или косвенно. Даже если несколько функций участвуют в одном цикле рекурсии, каждая функция сообщается индивидуально.
Проверки правил рассматривают только явные вызовы функций. Для образца, в Коды С++, проверяющие правила игнорируют неявные вызовы конструкторов во время создания объекта. Однако при расчете метрики рассматриваются как неявные, так и явные вызовы.
Для обеспечения пределов на метрики смотрите Compute Code Complexity Metrics.
Группа: Проект |
Акроним: AP_CG_CYCLE |
ЕГО Метрика: Да |