В информатике формальные методы — это математически строгие методы спецификации , разработки, анализа и проверки программных и аппаратных систем. [1] Использование формальных методов для проектирования программного и аппаратного обеспечения мотивировано ожиданием того, что , как и в других инженерных дисциплинах, выполнение соответствующего математического анализа может способствовать надежности и устойчивости проекта. [2]
Формальные методы используют различные теоретические основы компьютерной науки , включая логические исчисления, формальные языки , теорию автоматов , теорию управления , семантику программ , системы типов и теорию типов . [3]
Формальные методы могут применяться на различных этапах процесса разработки .
Формальные методы могут использоваться для формального описания разрабатываемой системы на любом желаемом уровне детализации. Дальнейшие формальные методы могут зависеть от этой спецификации для синтеза программы или проверки правильности системы.
В качестве альтернативы спецификация может быть единственным этапом, на котором используются формальные методы. Написав спецификацию, можно обнаружить и разрешить неясности в неформальных требованиях. Кроме того, инженеры могут использовать формальную спецификацию в качестве справочного материала для руководства процессами разработки. [4]
Необходимость в формальных системах спецификаций отмечалась годами. В отчете ALGOL 58 [5] Джон Бэкус представил формальную нотацию для описания синтаксиса языка программирования , позже названную нормальной формой Бэкуса , а затем переименованную в форму Бэкуса–Наура (БНФ). [6] Бэкус также написал, что формальное описание смысла синтаксически допустимых программ ALGOL не было завершено вовремя для включения в отчет, заявив, что оно «будет включено в последующую статью». Однако ни одна статья, описывающая формальную семантику, так и не была выпущена. [7]
Синтез программ — это процесс автоматического создания программы, которая соответствует спецификации. Дедуктивные подходы синтеза опираются на полную формальную спецификацию программы, тогда как индуктивные подходы выводят спецификацию из примеров. Синтезаторы выполняют поиск по пространству возможных программ, чтобы найти программу, соответствующую спецификации. Из-за размера этого пространства поиска разработка эффективных алгоритмов поиска является одной из основных проблем в синтезе программ. [8]
Формальная верификация — это использование программных средств для доказательства свойств формальной спецификации или для доказательства того, что формальная модель реализации системы удовлетворяет своей спецификации.
После разработки формальной спецификации ее можно использовать в качестве основы для доказательства свойств спецификации и, как следствие, свойств реализации системы.
Проверка подписи — это использование формального инструмента проверки, который пользуется большим доверием. Такой инструмент может заменить традиционные методы проверки (инструмент может быть даже сертифицирован). [ необходима цитата ]
Иногда мотивом доказательства правильности системы является не очевидная потребность в подтверждении правильности системы, а желание лучше понять систему. Следовательно, некоторые доказательства правильности производятся в стиле математического доказательства : рукописные (или набранные) с использованием естественного языка , с использованием уровня неформальности, обычного для таких доказательств. «Хорошее» доказательство — это то, которое может быть прочитано и понято другими людьми.
Критики таких подходов указывают на то, что неоднозначность, присущая естественному языку, позволяет не обнаружить ошибки в таких доказательствах; часто тонкие ошибки могут присутствовать в низкоуровневых деталях, которые обычно упускаются из виду такими доказательствами. Кроме того, работа, связанная с созданием такого хорошего доказательства, требует высокого уровня математической сложности и опыта.
Напротив, растет интерес к созданию доказательств корректности таких систем с помощью автоматизированных средств. Автоматизированные методы делятся на три общие категории:
Некоторые автоматизированные доказательные машины теорем требуют руководства относительно того, какие свойства достаточно «интересны», чтобы их изучать, в то время как другие работают без вмешательства человека. Проверщики моделей могут быстро увязнуть в проверке миллионов неинтересных состояний, если им не предоставлена достаточно абстрактная модель.
Сторонники таких систем утверждают, что результаты имеют большую математическую достоверность, чем доказательства, полученные человеком, поскольку все утомительные детали были алгоритмически проверены. Обучение, необходимое для использования таких систем, также меньше, чем то, которое требуется для создания хороших математических доказательств вручную, что делает эти методы доступными для более широкого круга практиков.
Критики отмечают, что некоторые из этих систем подобны оракулам : они провозглашают истину, но не дают объяснений этой истины. Существует также проблема « проверки верификатора »; если программа, которая помогает в проверке, сама по себе не проверена, могут возникнуть причины сомневаться в надежности полученных результатов. Некоторые современные инструменты проверки моделей создают «журнал проверки», подробно описывающий каждый шаг в их доказательстве, что позволяет выполнять, при наличии подходящих инструментов, независимую проверку.
Главной особенностью подхода абстрактной интерпретации является то, что он обеспечивает надежный анализ, т. е. не возвращает ложных отрицательных результатов. Более того, он эффективно масштабируется путем настройки абстрактной области, представляющей анализируемое свойство, и применения расширяющих операторов [9] для получения быстрой сходимости.
Формальные методы включают в себя ряд различных приемов.
Проект вычислительной системы может быть выражен с использованием языка спецификаций, который является формальным языком, включающим систему доказательств. Используя эту систему доказательств, формальные инструменты проверки могут рассуждать о спецификации и устанавливать, что система придерживается спецификации. [10]
Бинарная диаграмма решений — это структура данных, которая представляет собой булеву функцию . [11] Если булева формула выражает, что выполнение программы соответствует спецификации, бинарная диаграмма решений может быть использована для определения того, является ли она тавтологией; то есть всегда ли она оценивается как ИСТИНА. Если это так, то программа всегда соответствует спецификации. [12]
Решатель SAT — это программа, которая может решать проблему выполнимости булевых уравнений , проблему поиска назначения переменных, которое заставляет данную пропозициональную формулу оцениваться как истинную. Если булева формула выражает, что определенное выполнение программы соответствует спецификации, то определение того, что она невыполнима, эквивалентно определению того, что все выполнения соответствуют спецификации. Решатели SAT часто используются при проверке ограниченной модели, но также могут использоваться при проверке неограниченной модели. [13]
Формальные методы применяются в различных областях аппаратного и программного обеспечения, включая маршрутизаторы , коммутаторы Ethernet , протоколы маршрутизации , приложения безопасности и микроядра операционных систем , такие как seL4 . Есть несколько примеров, в которых они использовались для проверки функциональности аппаратного и программного обеспечения, используемого в центрах обработки данных . IBM использовала ACL2 , доказатель теорем, в процессе разработки процессора AMD x86. [ требуется цитата ] Intel использует такие методы для проверки своего оборудования и прошивки (постоянное программное обеспечение, запрограммированное в память только для чтения ) [ требуется цитата ] . Dansk Datamatik Center использовал формальные методы в 1980-х годах для разработки системы компилятора для языка программирования Ada , который впоследствии стал долгоживущим коммерческим продуктом. [14] [15]
Существует несколько других проектов NASA , в которых применяются формальные методы, такие как Система воздушного транспорта следующего поколения [ требуется ссылка ] , Интеграция беспилотных авиационных систем в Национальную систему воздушного пространства [16] и Бортовое координированное разрешение и обнаружение конфликтов (ACCoRD). [17] Метод B с Atelier B [ 18] используется для разработки автоматизмов безопасности для различных метрополитенов, установленных по всему миру компаниями Alstom и Siemens , а также для сертификации Common Criteria и разработки моделей систем компаниями ATMEL и STMicroelectronics .
Формальная проверка часто использовалась в оборудовании большинством известных поставщиков оборудования, таких как IBM, Intel и AMD. Существует много областей оборудования, где Intel использовала формальные методы для проверки работы продуктов, таких как параметризованная проверка протокола кэш-когерентности, [19] проверка механизма выполнения процессора Intel Core i7 [20] (с использованием доказательства теорем, BDD и символической оценки), оптимизация для архитектуры Intel IA-64 с использованием средства доказательства теорем HOL Light, [21] и проверка высокопроизводительного двухпортового гигабитного контроллера Ethernet с поддержкой протокола PCI Express и передовой технологии управления Intel с использованием Cadence. [22] Аналогичным образом, IBM использовала формальные методы для проверки силовых вентилей, [23] регистров, [24] и функциональной проверки микропроцессора IBM Power7. [25]
В разработке программного обеспечения формальные методы представляют собой математические подходы к решению проблем программного обеспечения (и оборудования) на уровнях требований, спецификаций и проектирования. Формальные методы, скорее всего, будут применяться к критически важному для безопасности или критически важному для защиты программному обеспечению и системам, таким как программное обеспечение авионики . Стандарты обеспечения безопасности программного обеспечения, такие как DO-178C , допускают использование формальных методов посредством дополнения, а Общие критерии предписывают формальные методы на самых высоких уровнях категоризации.
Для последовательного программного обеспечения примерами формальных методов являются B-метод , языки спецификаций, используемые при автоматическом доказательстве теорем , RAISE и Z-нотация .
В функциональном программировании тестирование на основе свойств позволило математически специфицировать и тестировать (если не исчерпывать) ожидаемое поведение отдельных функций.
Язык ограничений объектов (и такие специализации, как язык моделирования Java ) позволил формально специфицировать объектно-ориентированные системы, хотя и не обязательно формально проверять их.
Для параллельного программного обеспечения и систем сети Петри , алгебра процессов и конечные автоматы (которые основаны на теории автоматов ; см. также виртуальный конечный автомат или управляемый событиями конечный автомат ) позволяют выполнять спецификацию исполняемого программного обеспечения и могут использоваться для создания и проверки поведения приложений.
Другой подход к формальным методам в разработке программного обеспечения заключается в написании спецификации в некоторой форме логики — обычно вариации логики первого порядка — и затем в непосредственном выполнении логики, как если бы это была программа. Язык OWL , основанный на логике описания , является примером. Также ведется работа по автоматическому отображению некоторой версии английского языка (или другого естественного языка) в логику и из нее, а также по непосредственному выполнению логики. Примерами являются Attempto Controlled English и Internet Business Logic, которые не стремятся контролировать словарь или синтаксис. Особенностью систем, которые поддерживают двунаправленное отображение английский–логика и прямое выполнение логики, является то, что их можно заставить объяснять свои результаты на английском языке на деловом или научном уровне. [ необходима цитата ]
Полуформальные методы — это формализмы и языки, которые не считаются полностью «формальными». Это откладывает задачу завершения семантики на более поздний этап, который затем выполняется либо с помощью человеческой интерпретации, либо с помощью интерпретации с помощью программного обеспечения, например, генераторов кода или тестовых случаев . [26]
Некоторые специалисты считают, что сообщество формальных методов переоценило полную формализацию спецификации или проекта. [27] [28] Они утверждают, что выразительность задействованных языков, а также сложность моделируемых систем делают полную формализацию сложной и дорогостоящей задачей. В качестве альтернативы были предложены различные легкие формальные методы, которые подчеркивают частичную спецификацию и целенаправленное применение. Примерами такого легкого подхода к формальным методам являются нотация моделирования объектов Alloy , [29] синтез Денни некоторых аспектов нотации Z с разработкой, основанной на вариантах использования , [30] и инструменты CSK VDM . [31]
Существует множество формальных методов и обозначений.
Многие проблемы в формальных методах являются NP-трудными , но могут быть решены в случаях, возникающих на практике. Например, проблема булевой выполнимости является NP-полной по теореме Кука–Левина , но решатели SAT могут решать множество больших примеров. Существуют «решатели» для множества проблем, которые возникают в формальных методах, и существует множество периодических соревнований для оценки состояния дел в решении таких проблем. [33]
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь )