Это вопрос, близкий к моему сердцу (я исследователь в области проверки программного обеспечения с использованием формальной логики), поэтому вы, вероятно, не будете удивлены, когда я скажу, что эти методы имеют полезное место и еще не являются достаточно используемых в промышленности.
Существует множество уровней «формальных методов», поэтому я предполагаю, что вы имеете в виду те, кто опирается на строгую математическую основу (в отличие от, скажем, следуя примеру 6-сигма-стиля). Некоторые типы формальных методов имели большой успех - системы типов, являющиеся одним из примеров. Статические аналитические инструменты, основанные на анализе потока данных, также популярны, проверка модели почти повсеместна в аппаратном дизайне, а вычислительные модели, такие как Pi-Calculus и CCS, по-видимому, вдохновляют некоторые реальные изменения в практическом дизайне языков для параллелизма. Анализ терминации - это тот, который недавно был прессой - проект SDV в Microsoft и работа Байрона Кука - это недавние примеры исследования/практики кроссовера в формальных методах.
Hoare Reasoning пока не сделал больших успехов в отрасли - это по многим причинам, чем я могу перечислить, но я подозреваю, что в основном это связано со сложностью написания, а затем доказывает спецификации для реальных программ (они, как правило, получают big, и не могут выразить свойства многих сред реального мира). Различные подполя в этом типе рассуждений в настоящее время вносят большой вклад в эти проблемы - разделяющая логика - одна.
Это частично характер текущих (твердых) исследований. Но я должен признаться, что мы, как теоретики, полностью не смогли обучить отрасль тому, почему наши методы полезны, чтобы они соответствовали отраслевым потребностям и чтобы они были доступны для разработчиков программного обеспечения. На каком-то уровне это не наша проблема - мы исследователи, часто математики, и практическое использование не является главным в наших умах. Кроме того, разрабатываемые методы часто слишком эмбриональны для использования в крупномасштабных системах - мы работаем над небольшими программами, на упрощенных системах, получаем математику и двигаемся дальше. Я не так много покупаю эти оправдания, хотя - мы должны быть более активными в продвижении наших идей и получении обратной связи между отраслью и нашей работой (одна из основных причин, по которой я вернулся к исследованиям).
Это, вероятно, хорошая идея для меня, чтобы воскресить мой блог, и сделать еще несколько сообщений на этом материале ...
Некоторые легкие чтения: http://formalmethods.wikia.com/wiki/Z_notation –
Я изучил Zed или «Z» в колледже. Класс был очень забавным, но мне не приходилось применять больше, чем базовые знания, полученные в этом классе, ко всему, что было в этой отрасли. Ваш критически важный комментарий по программному обеспечению интригует, но я думаю, что (исправьте меня, если не так) большинство будет больше полагаться на инструменты статического анализа кода, интенсивные обзоры и проверки кода и другие подобные вещи для проверки программного обеспечения. –
Спасибо, я посмотрю :) – AraK