Number of local static variables exceeds threshold

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

Описание

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

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

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

Риск

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

Фиксация

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

  • Инкапсулируйте и постройте из модулей независимые данные или код.

  • Свяжитесь между функциями при помощи локальных переменных вместо глобальных или статических переменных.

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

Примеры

развернуть все

void foo(void){//Noncompliant
	
	static int a;
	static int b;
	static int c;
	static int d;
	static int e;
	static int f;
	static int g;
	//...
}

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

Коррекция — инкапсулирует связанные данные

Одна возможная коррекция должна инкапсулировать связанные данные в структурах или классах. В этом коде связанные целочисленные переменные инкапсулируются в структуру. Функциональный foo теперь содержит только одну статическую копию структуры..

typedef struct {
	int a;
	int b;
	int c;
	int d;
	int e;
	int f;
	int g;
} data_vars;
void foo(void){//Compliant
	
	static data_vars A;
	//...
}

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

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