exponenta event banner

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

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

Описание

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

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

При импорте комментариев из предыдущих анализов с помощью 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 является трудным, поскольку проблема может быть вызвана любой из этих восьми функций. Полипространство

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

Одной из возможных корректировок являются функции проектирования, выполняющие определенные задачи. В этом случае отдельные задачи уже делегированы различным функциям, но 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