Number of called functions exceeds threshold

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

Описание

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

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

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