exponenta event banner

Число вызывающих функций превышает пороговое значение

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

Описание

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

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

При импорте комментариев из предыдущих анализов с помощью 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