Описание тега static-analysis

"Статический анализ" относится к программным инструментам (или их использованию) для анализа кода приложения на предмет произвольных свойств, таких как ошибки (неинициализированные переменные, возможная атака с использованием SQL-инъекций, является ли этот код мертвым, может ли аргумент иметь значение null,...) или структура (каков граф вызовов для этого кода? есть ли повторяющийся код? какая информация передается между компонентами?).

Статический анализ относится к программным инструментам (или их использованию) для анализа кода приложения на предмет произвольных свойств, таких как ошибки (неинициализированные переменные, возможная атака с использованием SQL-инъекций, является ли этот код мертвым, есть ли повторяющийся код, может ли аргумент иметь значение null), или структура (каков граф вызовов для этого кода? какая информация передается между компонентами?).

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

(Напротив, динамический анализ относится к сбору данных об интересных свойствах, когда прикладная программа фактически выполняет, например, "переполнялась ли эта сумма во время выполнения?". В принципе, инструмент статического анализа может предоставить именно ту информацию, которую может дать динамический анализ, просто путем имитации выполнения программы, но создание такого симулятора требует много работы, когда уже есть компьютер, который готов сделать это без дополнительных усилий.)