Формальная проверка - Formal verification

Что касается оборудования и программные системы, формальная проверка это акт доказывая или опровергая правильность предполагаемого алгоритмы лежащий в основе системы по отношению к определенному формальная спецификация или собственность, используя формальные методы из математика.[1]

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

Проверка этих систем осуществляется путем предоставления формальное доказательство на аннотации математическая модель системы, соответствие между математической моделью и природой системы иначе известно из конструкции. Примеры математических объектов, часто используемых для моделирования систем: конечные автоматы, маркированные переходные системы, Сети Петри, системы сложения векторов, синхронизированные автоматы, гибридные автоматы, алгебра процессов, формальная семантика языков программирования, таких как операционная семантика, денотационная семантика, аксиоматическая семантика и Логика Хоара.[2]

Подходы

Один подход и формирование - это проверка модели, который состоит из систематически исчерпывающего исследования математической модели (это возможно для конечные модели, но также и для некоторых бесконечных моделей, в которых бесконечные множества состояний могут быть эффективно представлены с помощью абстракции или симметрии). Обычно это состоит из исследования всех состояний и переходов в модели с использованием умных и зависящих от предметной области методов абстракции для рассмотрения целых групп состояний за одну операцию и сокращения времени вычислений. Методы реализации включают перечисление пространства состояний, символическая нумерация пространства состояний, абстрактная интерпретация, символьное моделирование, уточнение абстракции.[нужна цитата ] Проверяемые свойства часто описываются в темпоральная логика, Такие как линейная темпоральная логика (LTL), Язык спецификации свойств (PSL), SystemVerilog Утверждения (SVA),[3] или же вычислительная древовидная логика (CTL). Большим преимуществом проверки модели является то, что она часто полностью автоматическая; его основной недостаток в том, что он не масштабируется до больших систем; символические модели обычно ограничены несколькими сотнями битов состояния, в то время как явное перечисление состояний требует, чтобы исследуемое пространство состояний было относительно небольшим.

Другой подход - дедуктивная проверка. Он состоит из генерации на основе системы и ее спецификаций (и, возможно, других аннотаций) набора математических доказательство обязательств, истинность которых подразумевает соответствие системы ее спецификации, и выполнение этих обязательств с использованием либо помощники доказательства (интерактивные программы доказательства теорем) (например, HOL, ACL2, Изабель, Coq или же ПВС ), автоматические средства доказательства теорем, в том числе в частности выполнимость по модулю теорий (SMT) решатели. Недостаток этого подхода состоит в том, что он обычно требует от пользователя детального понимания того, почему система работает правильно, и передачи этой информации в систему проверки либо в форме последовательности теорем, которые необходимо доказать, либо в форме спецификаций ( инварианты, предварительные условия, постусловия) компонентов системы (например, функций или процедур) и, возможно, подкомпонентов (таких как циклы или структуры данных).

Программного обеспечения

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

Другой дополнительный подход: вывод программы, в котором эффективный код создается из функциональный спецификации серией сохраняющих корректность шагов. Примером такого подхода является Формализм Берда-Меертенса, и этот подход можно рассматривать как еще одну форму правильность по конструкции.

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

Верификация и валидация

Проверка - это один из аспектов проверки соответствия продукта своему назначению. Валидация - дополнительный аспект. Часто весь процесс проверки называют V & V.

  • Проверка: «Мы пытаемся сделать то, что нужно?», Т.е. соответствует ли продукт реальным потребностям пользователя?
  • Проверка: «Мы сделали то, что пытались сделать?», Т.е. соответствует ли продукт спецификациям?

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

Автоматизированный программный ремонт

Ремонт программы выполняется в отношении оракул, охватывающий желаемую функциональность программы, которая используется для проверки сгенерированного исправления. Простым примером является набор тестов - пары ввода / вывода определяют функциональность программы. Используются различные методы, в первую очередь использование выполнимость по модулю теорий (SMT) решатели,[4] и генетическое программирование,[5] использование эволюционных вычислений для создания и оценки возможных кандидатов на исправления. Первый метод является детерминированным, а второй - рандомизированным.

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

Промышленное использование

Рост сложности проектов увеличивает важность формальных методов проверки в аппаратная промышленность.[6][7] В настоящее время формальная проверка используется большинством или всеми ведущими производителями оборудования,[8] но его использование в индустрия программного обеспечения все еще томится.[нужна цитата ] Это может быть связано с большей потребностью в индустрии оборудования, где ошибки имеют большее коммерческое значение.[нужна цитата ] Из-за потенциально тонких взаимодействий между компонентами становится все труднее реализовать реалистичный набор возможностей с помощью моделирования. Важные аспекты проектирования оборудования поддаются автоматизированным методам проверки, что упрощает внедрение формальной проверки и делает ее более продуктивной.[9]

По состоянию на 2011 г., несколько операционных систем прошли формальную проверку: NICTA Secure Встроенное микроядро L4, продается как seL4 от OK Labs;[10] Операционная система реального времени ORIENTAIS на базе OSEK / VDX от Восточно-китайский педагогический университет;[нужна цитата ] Green Hills Software's Операционная система Integrity;[нужна цитата ] и SYSGO с PikeOS.[11][12]

В 2016 году профессора Йельского и Колумбийского университета Чжун Шао и Ронгхуэй Гу разработали формальный протокол проверки для блокчейна под названием CertiKOS.[13] Программа является первым примером формальной проверки в мире блокчейнов и примером формальной проверки, явно используемой в качестве программы безопасности.[14]

С 2017 года формальная проверка применяется к проектированию больших компьютерных сетей.[15] через математическую модель сети,[16] и как часть новой категории сетевых технологий, сети на основе намерений.[17] Поставщики сетевого программного обеспечения, предлагающие формальные решения для проверки, включают: Cisco[18] Форвардные сети[19][20] и Veriflow Systems.[21]

В Компилятор CompCert C - это официально проверенный компилятор C, реализующий большую часть ISO C.

Смотрите также

Рекомендации

  1. ^ Сангхави, Алок (21 мая 2010 г.). «Что такое формальная проверка?». EE Times Asia.
  2. ^ Введение в формальную проверку, Berkeley University of California, последнее посещение - 6 ноября 2013 г.
  3. ^ Коэн, Бен; Венкатараманан, Шринивасан; Кумари, Аджита; Пайпер, Лиза (2015). Справочник по утверждениям SystemVerilog (4-е изд.). Независимая издательская платформа CreateSpace. ISBN  978-1518681448.
  4. ^ Фавио ДеМарко; Цзифэн Сюань; Даниэль Ле Берр; Мартин Монперрус (2014). Автоматическое исправление ошибки при возникновении условий и пропущенных предварительных условий с помощью SMT. Труды 6-го Международного семинара по ограничениям в тестировании, верификации и анализе программного обеспечения (CSTVA 2014). С. 30–39. arXiv:1404.3186. Дои:10.1145/2593735.2593740. ISBN  9781450328470.
  5. ^ Ле Гуэ, Клэр; Нгуен, ТханьВу; Форрест, Стефани; Веймер, Уэстли (январь 2012 г.). «GenProg: универсальный метод автоматического восстановления программного обеспечения». IEEE Transactions по разработке программного обеспечения. 38 (1): 54–72. Дои:10.1109 / TSE.2011.104.
  6. ^ Харрисон, Дж. (2003). «Формальная проверка в Intel». 18-й ежегодный симпозиум IEEE по логике в компьютерных науках, 2003 г. Труды. С. 45–54. Дои:10.1109 / LICS.2003.1210044. ISBN  978-0-7695-1884-8.
  7. ^ Формальная проверка конструкции оборудования в реальном времени. Portal.acm.org (27 июня 1983 г.). Проверено 30 апреля, 2011.
  8. ^ «Формальная проверка: важный инструмент для проектирования современных СБИС, Эрик Селигман, Том Шуберт и М. В. Ачута Киранкумар». 2015.
  9. ^ «Формальная проверка в промышленности» (PDF). Получено 20 сентября, 2012.
  10. ^ «Абстрактная формальная спецификация API seL4 / ARMv6» (PDF). Архивировано из оригинал (PDF) 21 мая 2015 г.. Получено 19 мая, 2015.
  11. ^ Кристоф Бауман, Бернхард Бекерт, Хольгер Бласум и Торстен Бормер Составляющие корректности операционной системы? Уроки, извлеченные при формальной проверке PikeOS
  12. ^ "Все правильно" Джек Гэнссл
  13. ^ Харрис, Робин. «Незащищенная ОС? CertiKOS позволяет создавать защищенные системные ядра». ZDNet. Получено 10 июня, 2019.
  14. ^ «CertiKOS: Йельский университет разрабатывает первую в мире операционную систему, устойчивую к хакерам». International Business Times UK. 15 ноября 2016 г.. Получено 10 июня, 2019.
  15. ^ Хеллер, Брэндон. «В поисках истины в сети: от тестирования к проверке». Форвардные сети. Получено 12 февраля, 2018.
  16. ^ Скрокстон, Алекс. «Для Cisco создание сетей на основе намерений знаменует будущие потребности в технологиях». Computer Weekly. Получено 12 февраля, 2018.
  17. ^ Лернер, Эндрю. «Сеть на основе намерений». Gartner. Получено 12 февраля, 2018.
  18. ^ Керравала, Зевс. «Cisco привносит сети на основе намерений в центры обработки данных». NetworkWorld. Получено 12 февраля, 2018.
  19. ^ «Прямые сети: ускорение сетевых операций и снижение рисков». Insights Success. Получено 12 февраля, 2018.
  20. ^ «Основываясь на намерениях = сети, основанные на намерениях» (PDF). NetworkWorld. Получено 12 февраля, 2018.
  21. ^ "Veriflow Systems". Bloomberg. Получено 12 февраля, 2018.