Я думал об использовании формальных методов, чтобы прояснить требования к инструменту как для моего клиента, так и для разработчиков.
Очень немногие разработчики имеют опыт формальных методов. Единственный раз, когда я видел клиентов с формальным обучением методам, были членами ZUG, когда мы портировали CADiZ на Windows.
Под формальными методами я имею в виду некоторую форму моделирования, возможно, что-то математическое. Некоторые из вещей, о которых я читал и которые рассматривают, включают Z (http://en.wikipedia.org/wiki/Z_notation), конечные автоматы, UML 2.0 (возможно, с расширениями, такими как OCL), сети Петри и некоторые вещи уровня кодирования, такие как контракты, а также пре и пост. условия. Есть ли что-то еще, что я должен рассмотреть?
Существует очень большой разрыв между Z, который является формальным методом, основанным на теории множеств, и UML, который является неформальной нотацией с помеченными некоторыми полуформальными нотациями (конечными автоматами).
Некоторым техническим клиентам, которые вы ожидаете найти с помощью инструмента требований к программному обеспечению, довольно удобно работать с UML.
Может иметь смысл создание Z-модели вашего домена, и может иметь значение создание модели пи-исчисления для обмена сообщениями между клиентом и сервером (или petri-net, но я считаю, что pi и проще, и мощнее ).
То, что дала бы Z-модель вашего домена, это независимый от реализации набор ограничений типа, выраженный более мощно, чем система типов любого общего языка реализации.
То, что формальная модель вашего обмена сообщениями даст вам, - это возможность проводить анализы, чтобы гарантировать, что вы не потеряете обновления, не получите конфликтов или тупиков.
То, что дает модель UML, представляет собой нотацию для разбиения большой системы на функциональные области (диаграммы пакетов), для демонстрации того, как классы в этих областях статически связаны друг с другом (диаграммы классов), для демонстрации того, как экземпляры этих классов динамически связаны (диаграммы последовательности, активности и взаимодействия) и показывают, как развертываются пакеты (диаграммы компонентов и развертывания). Они полезны для общения в команде и для того, чтобы немного прояснить идеи, но не имеют формально определенной семантики, которая позволяет проводить очень сложный анализ.
Специалисты по Z, с которыми я работал в 90-х годах, сочли идею задания CASE GUI для Z нелепой. Создание модели UML для такого графического интерфейса является обычным делом.
Я не использовал формальные предварительные и последующие условия разработки, хотя иногда добавляю их в комментарии, а часто и в утверждения, и я выполняю условия тестирования, которые могут их нарушать.