На Software Engineering Stack Exchange я увидел
такой вопрос: «Что мешает широкому внедрению формальных методов?» Вопрос был закрыт как предвзятый, а большинство ответов представляли собой комментарии типа «Слишком дорого!!!» или «Сайт — это не самолёт!!!» В каком-то смысле это верно, но мало что объясняет. Я написал эту статью, чтобы дать более широкую историческую картину формальных методов (FM), почему они на самом деле не используются и что мы делаем для исправления ситуации.
Прежде чем начать, нужно сформулировать некоторые условия. На самом деле существует не так много формальных методов: всего
несколько крошечных групп. Это означает, что разные группы по-разному применяют термины. В широком смысле есть две группы формальных методов:
формальная спецификация изучает запись точных, однозначных спецификаций, а
формальная проверка — методы доказательства. Сюда входят и код, и абстрактные системы. Мало того, что мы используем разные термины для кода и систем, мы часто используем разные инструменты для их верификации. Чтобы ещё больше всё запутать, если кто-то говорит, что создаёт формальную спецификацию,
обычно это означает и верификацию дизайна. А если кто-то говорит, что делает формальную верификацию,
обычно это относится к верификации кода.