Number of local nonstatic variables exceeds threshold

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

Описание

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

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

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

Риск

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

  • Функция чрезмерно долга.

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

Эти факторы делают модуль трудным обеспечить и отладить.

Фиксация

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

  • Рассмотрите разделение функции в меньшие модули, которая выполняет определенную задачу.

  • Рассмотрите связывающиеся переменные, которые имеют подобную роль в контейнеры, такие как классы, структуры, векторы или карты.

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

Примеры

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

#include <string>
void foo(void){//Noncompliant
	
	int Value1,Value2,Value3,Value4,Value5,Value6,Value7,Value8,Value9,Value10,Value11;
	std::string Name1,Name2,Name3,Name4,Name5,Name6,Name7,Name8,Name9,Name10,Name11;
	//....
	
}

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

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

Одна возможная коррекция должна связать связанные данные в контейнеры. Например, в этом коде данные связываются в std::map контейнер, который затем перенесен в класс. Затем в коде, необходимо объявить только одну локальную переменную и использовать переменную, чтобы сохранить, управлять, и получить доступ к данным. Этот код легче обеспечить, протестировать, и отладить.

#include <string>
#include <map>
class Instance{
	public:
	Instance();
	Instance(int, std::string);
	protected:
	addData(int,std::string);
	getValue(std::string);
	//...
	private:
	std::map<std::string, int> DataMap;
	
};
void foo(void){//Compliant
	
	Instance A;
	//....
	A.addData(5,"Name");
	
}

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

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