Введение

Анализ компьютерных программ без их выполнения

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

Типы инструментов

OMG (Object Management Group) опубликовала исследование, касающееся типов анализа программного обеспечения, необходимых для измерения и оценки его качества. В этом документе под названием "Как создавать отказоустойчивые, безопасные, эффективные и легко изменяемые ИТ-системы в соответствии с рекомендациями CISQ" описываются три уровня анализа программного обеспечения. Анализ на уровне модуля, который выполняется внутри конкретной программы или подпрограммы, без учета контекста этой программы. Анализ технологического уровня, учитывающий взаимодействие между модулями программ для получения более целостного и семантического представления о программе в целом, с целью выявления проблем и избежания ложных срабатываний. Анализ на уровне системы, учитывающий взаимодействие между модулями программ, но не ограничивающийся конкретной технологией или языком программирования. Можно выделить и дополнительный уровень анализа программного обеспечения – анализ на уровне миссии/бизнеса, который учитывает термины, правила и процессы, относящиеся к бизнес-целям или задачам миссии, реализованные в программной системе для обеспечения ее функционирования в рамках деятельности предприятия или программы/миссии. Эти элементы реализуются без привязки к конкретной технологии или языку программирования и во многих случаях распределены между несколькими языками, однако они статически извлекаются и анализируются для понимания системы и обеспечения ее надежности.

Статический анализ на основе данных

Статический анализ, основанный на данных, использует большие объемы кода для выведения правил кодирования. Например, можно использовать все Java-пакеты с открытым исходным кодом на GitHub для изучения эффективной стратегии анализа. Для выведения правил могут применяться методы машинного обучения. Также возможно обучение на большом количестве прошлых исправлений и предупреждений.