Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Обоснование [ править ]

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

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

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

  1. Медицинское программное обеспечение : Управление по санитарному надзору за качеством пищевых продуктов и медикаментов США (FDA) обнаружило использование статического анализа для медицинских устройств. [5]
  2. Ядерное программное обеспечение: В Великобритании Управление ядерного регулирования (ONR) рекомендует использовать статический анализ систем защиты реакторов . [6]
  3. Авиационное программное обеспечение (в сочетании с динамическим анализом ) [7]
  4. Автомобилестроение и машиностроение (функции функциональной безопасности являются неотъемлемой частью каждого этапа разработки автомобильной продукции, ISO 26262 , раздел 8).

Исследование, проведенное VDC Research в 2012 году, показало, что 28,7% опрошенных инженеров по встроенному ПО в настоящее время используют инструменты статического анализа, а 39,7% планируют использовать их в течение 2 лет. [8] Исследование 2010 года показало, что 60% опрошенных разработчиков в европейских исследовательских проектах хотя бы использовали свои базовые встроенные статические анализаторы IDE. Однако только около 10% использовали дополнительный другой (и, возможно, более продвинутый) инструмент анализа. [9]

В индустрии безопасности приложений также используется название « Статическое тестирование безопасности приложений» (SAST). SAST - важная часть жизненных циклов разработки безопасности (SDL), таких как SDL, определенная Microsoft [10], и распространенная практика в компаниях-разработчиках программного обеспечения. [11]

Типы инструментов [ править ]

OMG ( Object Management Group ) опубликовала исследование, касающееся типов анализа программного обеспечения, необходимого для измерения и оценки качества программного обеспечения . В этом документе «Как создать отказоустойчивые, безопасные, эффективные и легко изменяемые ИТ-системы в соответствии с рекомендациями CISQ» описаны три уровня анализа программного обеспечения. [12]

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

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

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

Формальные методы [ править ]

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

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

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

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

Статический анализ на основе данных [ править ]

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

См. Также [ править ]

  • Аудит кода
  • Генератор документации
  • Формальная семантика языков программирования
  • Формальная проверка
  • Список инструментов для статического анализа кода
  • Анализ формы (программное обеспечение)
  • Качество программного обеспечения
  • Гарантия качества программного обеспечения
  • ISO 26262
  • ISO 9126 (теперь серия ISO 25000)
  • Lint (программное обеспечение)

Ссылки [ править ]

  1. ^ Wichmann, BA; Консервирование, AA; Clutterbuck, DL; Уинсбарроу, Луизиана; Уорд, штат Нью-Джерси; Марш, DWR (март 1995 г.). «Промышленная перспектива статического анализа» (PDF) . Журнал программной инженерии . 10 (2): 69–75. DOI : 10.1049 / sej.1995.0010 . Архивировано из оригинального (PDF) 27 сентября 2011 года.
  2. ^ Эгеле, Мануэль; Шольте, Теодур; Кирда, Энгин; Крюгель, Кристофер (2008-03-05). «Обзор методов и инструментов автоматизированного динамического анализа вредоносных программ» . ACM Computing Surveys . 44 (2): 6: 1–6: 42. DOI : 10.1145 / 2089125.2089126 . ISSN 0360-0300 . 
  3. ^ «Цели качества программного обеспечения для исходного кода». Архивировано 4 июня 2015 г. в Wayback Machine (PDF). Материалы: Конференция по встроенному программному обеспечению и системам реального времени 2010 , ERTS2010.org, Тулуза, Франция: Патрик Бриан, Мартин Броше, Тьерри Камбуа, Эммануэль Кутенто, Оливье Гетта, Даниэль Майнберте, Фредерик Мондо, Патрик Мунье, Лоик Нури, Филипп Спозио, Фредерик Retailleau.
  4. ^ Повышение безопасности программного обеспечения с помощью точного статического анализа и анализа времени выполнения. Архивировано 5 июня2011 г. в Wayback Machine (PDF), Бенджамин Лившиц, раздел 7.3 «Статические методы обеспечения безопасности». Докторская диссертация в Стэнфорде, 2006 г.
  5. ^ FDA (08.09.2010). «Исследование безопасности программного обеспечения инфузионного насоса в FDA» . Управление по контролю за продуктами и лекарствами. Архивировано 01 сентября 2010 года . Проверено 9 сентября 2010 .
  6. ^ Компьютерные системы безопасности - техническое руководство по оценке программных аспектов цифровых компьютерных систем защиты, "Компьютерные системы безопасности" (PDF) . Архивировано из оригинального (PDF) 4 января 2013 года . Проверено 15 мая 2013 года .
  7. ^ Позиционный документ CAST-9. Соображения для оценки подходов к обеспечению безопасности к Software Assurance. Архивировано 06 октября 2013 г. на Wayback Machine // FAA, Certification Authorities Software Team (CAST), январь 2002 г .: «Проверка. Комбинация статического и динамического анализа должна быть указана заявитель / разработчик и подал заявку на программное обеспечение ".
  8. ^ Исследования VDC (2012-02-01). «Автоматическое предотвращение дефектов для обеспечения качества встроенного программного обеспечения» . VDC Research. Архивировано 11 апреля 2012 года . Проверено 10 апреля 2012 .
  9. ^ Prause, Кристиан Р., Рене Reiners и Silviya Денчева. «Эмпирическое исследование инструментальной поддержки в сильно распределенных исследовательских проектах». Global Software Engineering (ICGSE), 5-я Международная конференция IEEE, 2010 г., посвященная. IEEE, 2010 г. http://ieeexplore.ieee.org/ielx5/5581168/5581493/05581551.pdf
  10. ^ М. Ховард и С. Липнер. Жизненный цикл разработки безопасности: SDL: процесс разработки значительно более безопасного программного обеспечения. Microsoft Press, 2006. ISBN 978-0735622142. 
  11. ^ Ахим Д. Брукер и Уве Содан. Развертывание статического тестирования безопасности приложений в крупном масштабе. Архивировано 21 октября 2014 г. на Wayback Machine . В GI Sicherheit 2014. Конспект лекций по информатике, 228, страницы 91-101, GI, 2014.
  12. ^ «Архивная копия» (PDF) . Архивировано (PDF) из оригинала 28 декабря 2013 года . Проверено 18 октября 2013 . CS1 maint: заархивированная копия как заголовок ( ссылка )
  13. ^ Бартель, Александр; Кляйн, Жак; Монперрус, Мартин; Ле Траон, Ив (1 июня 2014 г.). «Статический анализ для извлечения проверок разрешений крупномасштабной платформы: проблемы и решения для анализа Android» . IEEE Transactions по разработке программного обеспечения . 40 (6): 617–632. arXiv : 1408.3976 . DOI : 10.1109 / tse.2014.2322867 . S2CID 6563188 . 
  14. Виджай Д'Сильва; и другие. (2008). «Обзор автоматизированных методов формальной проверки программного обеспечения» (PDF) . Сделки по CAD. Архивировано (PDF) из оригинала 04.03.2016 . Проверено 11 мая 2015 .
  15. ^ Джонс, Пол (2010-02-09). «Основанный на формальных методах подход к проверке программного обеспечения медицинского устройства» . Проектирование встроенных систем. Архивировано из оригинального 10 июля 2011 года . Проверено 9 сентября 2010 .
  16. ^ a b «Учиться на чужих ошибках: анализ кода на основе данных» . www.slideshare.net .
  17. ^ О, Хакжу; Ян, Хонгсок; Йи, Квангкын (2015). «Изучение стратегии адаптации программного анализа с помощью байесовской оптимизации». Труды Международной конференции 2015 ACM SIGPLAN по объектно-ориентированному программированию, системам, языкам и приложениям - OOPSLA 2015 . С. 572–588. DOI : 10.1145 / 2814270.2814309 . ISBN 9781450336895. S2CID  13940725 .
  18. ^ Монперрус, Мартин; Мезини, Мира (2013). «Обнаружение пропущенных вызовов методов как нарушения правила большинства» . ACM Transactions по программной инженерии и методологии . 22 (1): 1–25. arXiv : 1306.0762 . DOI : 10.1145 / 2430536.2430541 . S2CID 1212778 . 

Дальнейшее чтение [ править ]

  • Айева, Натаниэль; Ховемейер, Дэвид; Моргенталер, Дж. Дэвид; Пеникс, Джон; Пью, Уильям (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 г., Дэвид А. Шмидт

Внешние ссылки [ править ]

  • Улучшение качества кода - проверка соответствия стандартам кодирования (DDJ)
  • Конкурс по верификации программного обеспечения (SV-COMP)
  • Эпизод 59: Интервью по статическому анализу кода ( подкаст ) на Software Engineering Radio
  • Внедрение автоматизированного управления для стандартов кодирования. Объясняет, почему и как интегрировать статический анализ кода в процесс сборки.
  • Интегрируйте статический анализ в процесс разработки программного обеспечения
  • Проект SAMATE , ресурс для инструментов автоматического статического анализа.
  • Практическое введение в статический анализ кода
  • Sonarlint от SonarSource - бесплатное расширение IDE