Number of local static variables exceeds threshold

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

Описание

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

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

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