Статический анализ программы

редактировать

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

Термин обычно применяется к анализу, выполняемому автоматизированный инструмент, в котором человеческий анализ называется пониманием программы, пониманием программы или анализом кода. Проверки программного обеспечения и пошаговые руководства программного обеспечения также используются в последнем случае.

Содержание
  • 1 Обоснование
  • 2 Типы инструментов
  • 3 Формальные методы
  • 4 Статический анализ на основе данных
  • 5 См. Также
  • 6 Ссылки
  • 7 Дополнительная литература
  • 8 Внешние ссылки
Обоснование

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

Программные метрики и обратный инжиниринг можно описать как формы статического анализа. Получение показателей программного обеспечения и статический анализ все чаще используются вместе, особенно при создании встроенных систем, путем определения так называемых целей качества программного обеспечения.

Все более широкое коммерческое использование статического анализа проявляется в проверке свойств программного обеспечения, используемого в критически важные для безопасности компьютерные системы и обнаружение потенциально уязвимого кода. Например, следующие отрасли определили использование статического анализа кода как средства повышения качества все более изощренного и сложного программного обеспечения:

  1. Медицинское программное обеспечение : США Управление по санитарному надзору за качеством пищевых продуктов и медикаментов ( FDA) выявило использование статического анализа для медицинских устройств.
  2. Ядерное программное обеспечение: В Великобритании Управление ядерного регулирования (ONR) рекомендует использовать статический анализ для систем защиты реакторов.
  3. авиации программное обеспечение (в сочетании с динамическим анализом )

Исследование, проведенное 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» описаны три уровня анализа программного обеспечения.

Уровень единицы
Анализ, выполняемый в рамках конкретной программы или подпрограммы, без подключения к контексту этой программы.
Технологический уровень
Анализ, который учитывает взаимодействие между единичными программами, чтобы получить более целостное и семантическое представление всей программы, чтобы найти проблемы и избежать очевидных ложных срабатываний. Например, можно статически проанализировать стек технологий Android, чтобы найти ошибки разрешений.
Уровень системы
Анализ, который учитывает взаимодействие между отдельными программами, но не ограничивается одним конкретным технология или язык программирования.

Можно определить следующий уровень анализа программного обеспечения.

Миссия / бизнес-уровень
Анализ, который учитывает условия, правила и процессы уровня бизнеса / миссии, которые реализованы в системе программного обеспечения для ее работы как части деятельности уровня предприятия или программы / миссии. Эти элементы реализуются, не ограничиваясь одной конкретной технологией или языком программирования, и во многих случаях распределены по нескольким языкам, но статически извлекаются и анализируются для понимания системы для обеспечения выполнения миссии.
Формальные методы

Формальные методы - термин, применяемый к анализу программного обеспечениякомпьютерного оборудования ), результаты которого получены исключительно с помощью строгих математических методов. Используемые математические методы включают денотационную семантику, аксиоматическую семантику, операционную семантику и абстрактную интерпретацию.

путем простого сокращения до остановив проблему, можно доказать, что (для любого полного по Тьюрингу языка), обнаружив все возможные ошибки времени выполнения в произвольной программе (или, в более общем смысле, любое нарушение спецификации на конечный результат программы) неразрешимый : не существует механического метода, который всегда мог бы правдиво ответить, может или не может произвольная программа проявлять ошибки времени выполнения. Этот результат восходит к работам Черча, Гёделя и Тьюринга в 1930-х годах (см.: Проблема остановки и теорема Райса ). Как и в случае со многими неразрешимыми вопросами, можно попытаться дать полезные приблизительные решения.

Некоторые из методов реализации формального статического анализа включают:

  • Абстрактная интерпретация, чтобы моделировать влияние, которое каждый оператор оказывает на состояние абстрактной машины (т. Е. Он «выполняет» программное обеспечение на основе математических свойств каждого оператора и объявления). Эта абстрактная машина переоценивает поведение системы: абстрактная система, таким образом, упрощается для анализа за счет неполноты (не все свойства, истинные для исходной системы, верны для абстрактной системы). Однако, если все сделано правильно, абстрактная интерпретация является правильной (каждое истинное свойство абстрактной системы может быть отображено на истинное свойство исходной системы). Плагин анализа значений Frama-C и Polyspace в значительной степени полагаются на абстрактную интерпретацию.
  • Анализ потока данных, метод на основе решетки для сбора информации о возможном множестве значений;
  • логика Хоара, формальная система с набором логических правил для строгого рассуждения о правильности компьютерных программ. Существует инструментальная поддержка некоторых языков программирования (например, язык программирования SPARK (подмножество Ada ) и Java Modeling Language —JML - с использованием ESC / Java и ESC / Java2, плагин Frama-C WP (слабое предварительное условие ) для языка C, расширенный с помощью ACSL (язык спецификаций ANSI / ISO C )).
  • Проверка модели, рассматривает системы, которые имеют конечное состояние или могут быть переведены в конечное состояние с помощью абстракции ;
  • Символьное выполнение, как используется для получения математических выражений, представляющих значение измененных переменных в определенных точках кода.
Статический анализ, управляемый данными

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

См. Также
Ссылки
Дополнительная литература
  • Ayewah, Nathaniel; Ховемейер, Дэвид; Моргенталер, Дж. Дэвид; Пеникс, Джон; Пью, Уильям (2008). «Использование статического анализа для поиска ошибок». Программное обеспечение IEEE. 25 (5): 22–29. CiteSeerX 10.1.1.187.8985. DOI : 10.1109 / MS.2008.130. S2CID 20646690.
  • Брайан Чесс, Джейкоб Уэст (Fortify Software) (2007). Безопасное программирование со статическим анализом. Эддисон-Уэсли. ISBN 978-0-321-42477-8.
  • Флемминг Нильсон; Ханне Р. Нильсон; Крис Ханкин (2004-12-10). Принципы анализа программ (изд. 1999 г. (исправлено 2004 г.)). Springer. ISBN 978-3-540-65410-0.
  • «Абстрактная интерпретация и статический анализ» Международная зимняя школа по семантике и приложениям 2003, Дэвид А. Шмидт
Внешние ссылки
Последняя правка сделана 2021-06-09 10:04:01
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте