Number of called functions exceeds threshold

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

Описание

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

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

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

Риск

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

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

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

  • Модуль может содержать неожиданную или незапланированную разработку.

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

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

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

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

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

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

Примеры

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

class A{
	//..
};
class B{
	//...
};
void transform1(A &a, B &b){
	//...
}
void transform2(A &a, B &b){
	//...
}
void transform3(A &a, B &b){
	//...
}
void transform4(A &a, B &b){
	//...
}
void transform5(A &a, B &b){
	//...
}
void transform6(A &a, B &b){
	//...
}
void transform7(A &a, B &b){
	//...
}
void transform8(A &a, B &b){
	//...
}
void main(){//Noncompliant
	A a; 
	B b;
	transform1(a,b);
	transform2(a,b);
	transform3(a,b);
	transform4(a,b);
	transform5(a,b);
	transform6(a,b);
	transform7(a,b);
	transform8(a,b);
}

В этом примере функция main вызывает восемь различных функций, что больше заданного порога вызовов функций. Отладка main трудно, поскольку эта проблема может быть вызвана любой из этих восьми функций. Polyspace

Коррекция - Проект функций для выполнения конкретных задач

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

class A{
	//..
};
class B{
	//...
};
void transform1(A &a, B &b){
	//...
}
void transform2(A &a, B &b){
	//...
}
void transform3(A &a, B &b){
	//...
}
void transform4(A &a, B &b){
	//...
}
void transform5(A &a, B &b){
	//...
}
void transform6(A &a, B &b){
	//...
}
void transform7(A &a, B &b){
	//...
}
void transform8(A &a, B &b){
	//...
}
void FirstStep(A &a, B &b){
	transform1(a,b);
	transform2(a,b);
	transform3(a,b);
}
void SecondStep(A &a, B &b){
	transform4(a,b);
	transform5(a,b);
	transform6(a,b);
}
void ThirdStep(A &a, B &b){
	transform7(a,b);
	transform8(a,b);
}
void main(){//Compliant
	A a; 
	B b;
	FirstStep(a,b);
	SecondStep(a,b);
	ThirdStep(a,b);
}

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

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