Ist es üblich, Anforderungsspezifikationen in Prädikatenlogik für die funktionale Programmierung umzuwandeln?

8

Ich wurde kürzlich beauftragt, an einem kleinen Projekt zu arbeiten, das in Haskell umgesetzt wird. Ich komme aus einem OO / imperativen Hintergrund und bin es gewohnt, Anforderungen / User-Storys vor dem Codieren in Anwendungsfälle und Sequenzdiagramme umzuwandeln.

Bei dem Haskell-Projekt, dem ich zugewiesen wurde, zieht das Team es jedoch vor, die Benutzeranforderungen in Prädikatenlogiksätze / -anweisungen umzuwandeln. Ich war mir bewusst, dass Logik in sicherheitskritischen Systemen und formalen Methoden für das Software-Engineering verwendet wird, aber nicht so sehr in der täglichen Programmierung. Ist dies im FP-Bereich üblich? Wo kann ich mehr darüber erfahren?

Es scheint eine natürliche Möglichkeit zu sein, die Anforderungen zu "modellieren" und die "Funktionen" aus den Prädikaten abzuleiten und die erforderlichen Typspezifikationen für die zu bearbeitenden Funktionen aufzuschreiben. Aber wird das in der Praxis so gemacht / empfohlen oder ist es etwas Besonderes für mein Team?

(Ich habe versucht, ausgiebig zu suchen, bevor ich diese Frage hier gestellt habe. Die Suche nach "Anforderungsspezifikation in der funktionalen Programmierung" (und verschiedenen Schlüsselwortsynonymen und -kombinationen) führt zu nichts Sinnvollem.)

PhD
quelle

Antworten:

1

Ich werde sagen, dass es nicht auf funktionale Programmierung beschränkt ist, sondern eher mit dem Ziel des Projekts zusammenhängt. Mithilfe der Prädikatenlogik (Logik höherer Ordnung) können Sie einen Beweis für die in der Anforderung verwendete Logik erstellen. Die Übersetzung der Logik in funktionale Sprachen ist wahrscheinlich einfacher. Es ist auch möglich, die bewährte Implementierung der funktionalen Sprache in prozedurale Sprachen zu übersetzen, um eine bewährte Art der Implementierung zu erhalten.

Wenn wir das Programm beweisen können, müssen wir es nicht testen. Selbst wenn ein Programm 1000 Tests bestanden hat, ist es immer noch nicht bewiesen. Offensichtlich ist es nicht einfach, die Beweise zu erstellen, also erstellen wir stattdessen nur Tests.

Vielleicht möchten Sie auch nach dem Theorembeweiser isabelle / hol suchen.

imel96
quelle
-1

Das ist eine Möglichkeit, mit funktionaler Programmierung umzugehen. Es fällt tendenziell aus den Flussdiagrammen und Datenflussdiagrammen der "alten Tage" heraus. Anstatt in Objekten zu denken, konzentriert sich die funktionale Programmierung in der Regel darauf, welche Aktionen ausgeführt werden müssen. Die Daten werden zufällig, Flusenstücke zum Mitnehmen, um an dem festzuhalten, was Sie versuchen zu tun.

Joe Sewell
quelle
Dies liest sich eher wie ein Kommentar, siehe Antwort
Mücke
2
Es tut uns leid. Der Kommentar einer Person ist die Antwort einer anderen Person. Dies ist nicht mein erstes Stack Exchange Rodeo.
Joe Sewell
Ich bin mir nicht sicher, ob ich damit einverstanden bin. Die Frage selbst wird Meinungen sammeln, also gibt es vielleicht Probleme mit der Frage, aber die Antwort, von der ich glaube, dass sie tatsächlich die gestellte Frage anspricht. Flussdiagramme und Datenflüsse sind ein wichtiger Bestandteil der Geschäftsanforderungsspezifikationen.
maple_shaft