Number of calling functions exceeds threshold

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

Описание

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

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

Когда вы импортируете комментарии из предыдущих исследований при помощи polyspace-comments-import, Polyspace копирует любую информацию об анализе о метрике кода 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