Статический анализ программы - это анализ компьютерного программного обеспечения, который выполняется без фактического выполнения программ, в отличие от динамического анализа, который анализирует программы во время их выполнения. В большинстве случаев анализ выполняется на некоторой версии исходного кода , а в других случаях - на некоторой форме объектного кода.
Термин обычно применяется к анализу, выполняемому автоматизированный инструмент, в котором человеческий анализ называется пониманием программы, пониманием программы или анализом кода. Проверки программного обеспечения и пошаговые руководства программного обеспечения также используются в последнем случае.
Сложность анализа, выполняемого инструментами, варьируется от анализа, учитывающего только поведение отдельных операторов и деклараций, до тех, которые включают полный исходный код программа в их анализе. Использование информации, полученной в результате анализа, варьируется от выделения возможных ошибок кодирования (например, инструмент lint ) до формальных методов, которые математически подтверждают свойства данной программы (например, ее поведение соответствует его спецификации).
Программные метрики и обратный инжиниринг можно описать как формы статического анализа. Получение показателей программного обеспечения и статический анализ все чаще используются вместе, особенно при создании встроенных систем, путем определения так называемых целей качества программного обеспечения.
Все более широкое коммерческое использование статического анализа проявляется в проверке свойств программного обеспечения, используемого в критически важные для безопасности компьютерные системы и обнаружение потенциально уязвимого кода. Например, следующие отрасли определили использование статического анализа кода как средства повышения качества все более изощренного и сложного программного обеспечения:
Исследование, проведенное VDC Research в 2012 году, показало, что 28,7% опрошенных инженеров по встроенному программному обеспечению в настоящее время используют инструменты статического анализа, а 39,7% планируют использовать их в течение 2 лет. Исследование 2010 г. обнаружили, что 60% опрошенных разработчиков в европейских исследовательских проектах хотя бы использовали свои базовые встроенные статические анализаторы IDE. Однако только около 10% использовали дополнительный другой (и, возможно, более продвинутый) инструмент анализа.
В безопасности приложения в Кроме того, используется название Static Application Security Testing (SAST). SAST - важная часть жизненных циклов разработки безопасности (SDL), таких как SDL, определенная Microsoft, и распространенная практика в компаниях-разработчиках программного обеспечения.
OMG (Object Management Group ) опубликовал исследование, касающееся типов анализа программного обеспечения, необходимого для измерения и оценки качества программного обеспечения. В этом документе «Как создать отказоустойчивые, безопасные, эффективные и легко изменяемые ИТ-системы в соответствии с рекомендациями CISQ» описаны три уровня анализа программного обеспечения.
Можно определить следующий уровень анализа программного обеспечения.
Формальные методы - термин, применяемый к анализу программного обеспечения (и компьютерного оборудования ), результаты которого получены исключительно с помощью строгих математических методов. Используемые математические методы включают денотационную семантику, аксиоматическую семантику, операционную семантику и абстрактную интерпретацию.
путем простого сокращения до остановив проблему, можно доказать, что (для любого полного по Тьюрингу языка), обнаружив все возможные ошибки времени выполнения в произвольной программе (или, в более общем смысле, любое нарушение спецификации на конечный результат программы) неразрешимый : не существует механического метода, который всегда мог бы правдиво ответить, может или не может произвольная программа проявлять ошибки времени выполнения. Этот результат восходит к работам Черча, Гёделя и Тьюринга в 1930-х годах (см.: Проблема остановки и теорема Райса ). Как и в случае со многими неразрешимыми вопросами, можно попытаться дать полезные приблизительные решения.
Некоторые из методов реализации формального статического анализа включают:
Статический анализ, управляемый данными, использует большие объемы кода для вывода правил кодирования. Например, можно использовать все пакеты Java с открытым исходным кодом на GitHub, чтобы изучить хорошую стратегию анализа. Для вывода правил можно использовать методы машинного обучения. Например, было показано, что когда кто-то слишком сильно отклоняется в способе использования объектно-ориентированного API, это, скорее всего, является ошибкой. Также можно извлечь уроки из большого количества прошлых исправлений и предупреждений.