Loading AI tools
Из Википедии, свободной энциклопедии
Стати́ческий ана́лиз ко́да (англ. static code analysis) — анализ исходного кода программного обеспечения, производимый без реального выполнения исследуемых программ (в отличие от динамического анализа). В большинстве случаев анализ производится над исходным кодом, хотя, иногда анализу подвергается объектный код, например P-код или код на MSIL. Термин обычно применяют к анализу, производимому специальным программным обеспечением (ПО), тогда как ручной анализ называют «program understanding», «program comprehension» (пониманием или постижением программы).
В зависимости от используемого инструмента глубина анализа может варьироваться от определения поведения отдельных операторов до анализа всего имеющегося кода. Способы использования полученной в ходе анализа информации также различны — от выявления мест, возможно содержащих ошибки (утилиты типа Lint), до формальных методов, позволяющих математически доказать какие-либо свойства программы (например, соответствие поведения спецификации).
В некоторых источниках программные метрики и обратное проектирование относятся к формам статического анализа. Получение метрик (англ. software quality objectives) и статический анализ часто совмещаются, особенно при создании встраиваемых систем.[1]
Стиль этой статьи неэнциклопедичен или нарушает нормы литературного русского языка. |
Примером простейшего синтаксического анализа являются генерируемые большинством компиляторов (например, GNU C Compiler) «предупреждения» (англ. warnings) — диагностические сообщения о потенциальной ошибочности синтаксически правильного кода. Например, для следующего кода на C может быть получено сообщение о неинициализированной переменной:
int x;
int y = x + 2; // Переменная x не инициализирована!
В связи с высокими требованиями к скорости компиляции и качеству машинного кода компиляторы проверяют код лишь на простейшие ошибки. Статические анализаторы предназначены для более детального исследования кода.
Object *p = getObject();
int pNum = reinterpret_cast<int>(p); // на x86-32 верно, на x64 часть указателя будет потеряна; следует использовать intptr_t
dest.x = src.x + dx;
dest.y = src.y + dx; // Опечатка: вместо dy указан dx
printf
) форматная строка может не соответствовать реальному количеству и типам параметров.std::wstring s;
printf("s is %s and d is %d", s);
void doSomething(bool flag) // flag всегда равен true
{
if (flag)
// какая-то логика
else
// код есть, но не задействован
}
...
doSomething(true);
...
Traverser *t = new Traverser(Name);
if (!t->Valid())
{
return FALSE; // return до освобождения памяти.
delete t;
}
std::string s;
...
s.empty(); // код ничего не делает; возможно, опечатка и должно быть s.clear()?
В последнее время статический анализ всё больше используется в верификации свойств ПО, используемого в компьютерных системах высокой надёжности, особенно критичных для жизни (safety-critical[англ.]). Также применяется для поиска кода, потенциально содержащего уязвимости (иногда это применение называется Static Application Security Testing, SAST).[3]
Статический анализ постоянно применяется для критического ПО в следующих областях:
По данным VDC на 2012 год, примерно 28 % разработчиков встраиваемого ПО применяют средства статического анализа, а 39 % собираются начать их использование в течение 2 лет.[8]
Список примеров в этой статье не основывается на авторитетных источниках, посвящённых непосредственно предмету статьи. |
В разделе не хватает ссылок на источники (см. рекомендации по поиску). |
Инструменты по анализируемым языкам, некоторый из которых выделяет CISO CLUB[9]:
C/C++:
C#:
Java:
JavaScript:
.NET:
PHP:
Ruby:
Другие:[источник не указан 2218 дней]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.