Number of calling functions exceeds threshold

Количество отдельных вызывающих абонентов функции больше заданного порога

Описание

Этот дефект возникает для функции, когда количество отдельных вызывающих абонентов функции больше заданного порога проверки. Для получения дополнительной информации о том, как Polyspace вычисляет количество вызова функций, смотрите Number of Calling Functions.

Polyspace® использует порог по умолчанию 5, если вы не задаете порог. Чтобы задать файл выбора, в котором можно задать порог, используйте Set checkers by file (-checkers-selection-file). Также см. «Уменьшение сложности программного обеспечения при помощи Polyspace Checkers».

Когда вы импортируете комментарии из предыдущих анализов при помощи polyspace-comments-importPolyspace копирует любую рецензирующую информацию о метрике кода Number of Calling Functions в предыдущем результате этой проверки в текущем результате. Если текущий результат содержит ту же метрику кода, информация проверки также копируется в метрику кода.

Риск

Нарушение этой проверки может указать, что:

  • Проблемы, возникающие в маркированной функции, могут распространиться, чтобы оказать неожиданное влияние во многих местах.

  • Поток данных в файле свернут, и найти первопричину проблемы может оказаться трудно.

  • Функция с флагом может выполнять несколько задач.

Эти факторы затрудняют обслуживание и отладку модуля.

Зафиксировать

Чтобы исправить эту проверку, либо измените код, либо измените порог проверки. При рефакторинге кода спроектируйте функции в вашем коде так, чтобы:

  • Каждая функция выполняет одну конкретную задачу.

  • Функции имеют минимальные побочные эффекты на другие функции.

Лучшая практика состоит в том, чтобы проверить сложность модуля на ранних стадиях разработки, чтобы избежать дорогостоящего рефакторинга после разработки.

Примеры

расширить все

void utilityFunc(){//Noncompliant
	//...
}

void task1(){
	utilityFunc();
	//...
}
void task2(){
	utilityFunc();
	//...
}
void task3(){
	utilityFunc();
	//...
}
void task4(){
	utilityFunc();
	//...
}
void task5(){
	utilityFunc();
	//...
}
void task6(){
	utilityFunc();
	//...
}
void task7(){
	utilityFunc();
	//...
}

В этом примере функция utilityFunc вызывается семью различными функциями. Это может указать, что utilityFunc выполняет несколько задач. Проблема, возникающая в utilityFunc может оказать неожиданное влияние на любую из семи функций, вызывающих utilityFunc. Такая взаимозависимость затрудняет поддержание и отладку кода. Polyspace помечает функцию utilityFunc как несоответствующий.

Коррекция - рефактор функции

Одной из возможных коррекций является рефактор функции. Например, делегируйте различные задачи, требуемые различными задачами, в две служебные функции вместо одной.

void utilityFuncA(){//Compliant
	//...
}
void utilityFuncB(){//Compliant
	//...
}

void task1(){
	utilityFuncA();
	//...
}
void task2(){
	utilityFuncA();
	//...
}
void task3(){
	utilityFuncA();
	//...
}
void task4(){
	utilityFuncB();
	//...
}
void task5(){
	utilityFuncB();
	//...
}
void task6(){
	utilityFuncB();
	//...
}
void task7(){
	utilityFuncB();
	//...
}

Проверяйте информацию

Группа: Комплексность программного обеспечения
Язык: C | C++
Акроним: SC04
Порог по умолчанию: 5
Введенный в R2021a