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.)
Antworten:
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.
quelle
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.
quelle