Es scheint mir, dass Sie unmöglich eine Softwarespezifikation in Englisch schreiben können, die völlig frei von Mehrdeutigkeiten ist, einfach aufgrund des informellen Charakters der natürlichen Sprache - und daher muss eine wirklich eindeutige Spezifikation Code enthalten, der in einer formal spezifizierten Sprache geschrieben ist.
Ist das ein bekanntes Ergebnis oder fehlt mir etwas?
Antworten:
Haben Anwälte das nicht immer getan, um Unklarheiten zu vermeiden?
Das Ergebnis ist, dass sie auf unnatürlichste Weise schreiben. Der Versuch, ihre Papiere zu lesen, ist schwieriger als je zuvor, und trotzdem gibt es immer Inkonsistenzen und Unklarheiten.
Sie haben Recht, Sie können keine Software-Spezifikation schreiben, die völlig frei von Mehrdeutigkeiten ist, aber Sie werden es auch nicht schaffen, eine formal festgelegte Sprache zu implementieren.
Dies ist auch der Grund, warum wir unseren Code dokumentieren, da es manchmal schwierig ist, ihn für unsere Gedanken zu lesen.
Es macht keinen Sinn, Code mit einem anderen Code zu dokumentieren.
quelle
Unmöglich? Fragen wir zuerst, ob es wünschenswert ist. Wenn wir uns einig sind, dass dies unmöglich ist und es immer noch viele nützliche Software gibt, erscheint das Ziel einer eindeutigen Spezifikation akademisch.
Ich würde sagen, dass es unmöglich ist zu beweisen, dass alles perfekt und eindeutig ist, sowohl für die Spezifikation als auch für die Software.
Ich denke, es hängt von der Größe des Problems ab. Wenn das Problem klein genug ist, mathematischer Natur ist und vielleicht einige andere Kriterien fehlen, würde ich sagen, dass es möglich ist, eine Spezifikation zu schreiben, die funktioniert.
Je größer das Problem, desto breiter das Publikum, desto schwieriger ist es.
Avionik und andere komplexe Probleme legen jedoch nahe, dass es möglich ist, "gut genug" Spezifikationen auf Englisch zu schreiben, um große Probleme zu lösen.
quelle
Nun ... eine völlig eindeutige Spezifikation des Problems ist der eigentliche Code :)
Dies ist ein bekanntes Problem, und für spezielle geschäftskritische Systeme ist es zwingend erforderlich, eine eindeutige Spezifikation in einer formalen (Programmier-) Sprache zu schreiben und diese dann in einen Code umzuwandeln, der nachweislich das tut, was die Spezifikation sagt. Dies ist ein sehr enges Feld, 99,999% der Entwickler müssen solche Aufgaben nie erledigen, aber ich habe einmal mit einem Mann gesprochen, der dies für ein Verkehrskontroll- / Eisenbahnsystem getan hat.
quelle
Ich bin ein W3C-Anhänger und neige dazu, Artikel basierend auf ihren Spezifikationen zu schreiben. Meine Erfahrung zeigt mir, dass das Lesen einer Spezifikation ohne geschriebene Beispielcodes einfach Kopfschmerzen bereitet.
Ich stimme vollkommen zu und ich denke, der Hauptgrund ist, dass Entwickler dazu neigen, Code besser zu lesen und zu verstehen. Stellen Sie sich vor, Sie erhalten eine mathematische Arbeit ohne Formel.
oder:
Welches ist kürzer? Welches ist besser lesbar? Was bringt mehr Verständnis mit sich?
Gleiches gilt für Spezifikationen. Wenn Sie zu den technischen Teilen gelangen, kann das Schreiben einer Codezeile häufig einen langen Erklärungsabschnitt verdeutlichen.
quelle
Angenommen, es gibt eine formale Sprache, mit der eindeutige Spezifikationen geschrieben werden können. Dann schlage ich vor, dass es eine bijektive Zuordnung zu einer Teilmenge des Englischen geben sollte. Daher sollte es möglich sein, eindeutige Spezifikationen zu schreiben, wenn Sie sich an diese Teilmenge halten.
Aber jede formale Sprache, die ausdrucksstark genug ist, um etwas Interessantes zu tun, ist nicht frei von Inkonsistenzen (Gödel-Unvollständigkeit).
quelle
Spezifikationen sind mehrdeutig und ungenau, weil Menschen mehrdeutig und ungenau sind. Finden Sie eine perfekte Person und vielleicht können Sie dann eine perfekte Spezifikation erhalten.
Englisch, Suaheli, Sanskrit oder Babylonisch machen keinen Unterschied.
quelle
Mehrdeutigkeit ist in diesem Zusammenhang tatsächlich eine Stärke.
Um zu erklären , warum sie sich für einen Moment annehmen , dass es ist möglich , die englische Sprache in eine ganz eindeutigen Weise zu verwenden, so dass jedes Problem , die programmatisch gelöst werden kann , vollständig und eindeutig ausgedrückt werden. Wenn wir diese Variante des Englischen verwenden und unsere Beschreibung tatsächlich das vollständig und eindeutig zu schreibende Programm beschreibt, folgt logischerweise, dass es möglich sein muss, eine automatisierte Übersetzung in die Zielprogrammiersprache durchzuführen - mit anderen Worten, die Variante von Englisch, das wir uns vorgestellt haben, ist eigentlich eine Programmiersprache.
Leute, die Designdokumente lesen (insbesondere funktionale Designs), wollen diese Detailebene nicht wirklich - das Lesen der Quelle eines Programms, ob in C ++, Java oder eindeutigem Englisch, ist weit über dem Kopf eines durchschnittlichen Nicht-Programmierers. Hier kommen natürliche Sprachen ins Spiel: Sie ermöglichen es dem Verfasser einer Spezifikation, in beide Richtungen auf der Detailskala zu gleiten, irrelevante Implementierungsdetails in den Subtext zu verschieben oder sie vollständig nicht zu spezifizieren. Natürliche Sprachen sind voll von Hilfsmitteln, um die Bedeutung relativ klar zu vermitteln, obwohl Sie keine genaue Definition angeben (was Teil dessen ist, was automatisierte Übersetzungen so schwierig macht).
Das Ziel ist also normalerweise keine vollständige, korrekte und eindeutige Spezifikation. Das Ziel ist es, eine Spezifikation zu schreiben, die den Menschen klar zeigt, was Sie gerade bauen.
Wann immer Sie korrekt und eindeutig benötigen und die Dinge sowieso technisch werden, ist Pseudocode oft wertvoller als natürliche oder starre formale Sprachen - es kann immer noch irrelevante Details auslassen (durch Aufrufen nicht spezifizierter Funktionen / Prozesse), aber die Struktur ist eindeutig .
quelle
Sie vermissen nichts, außer dass die Dokumentation für Menschen zum Lesen geschrieben wurde. Eine gewisse Mehrdeutigkeit wird erwartet und ist sogar zu begrüßen, da knapper Text schwer zu lesen ist (= nicht für Menschen).
Die Angabe der Dokumentation für eine formale Sprache in einer weiteren formalen Sprache wäre eine Art Henne-Ei-Problem.
Wenn Sie wirklich eine formale Spezifikation benötigen, gibt es formale Möglichkeiten , Modelle zu überprüfen . Es ist ein aktives und sehr interessantes Forschungsgebiet, aber die Endbenutzer hier sind Maschinen, keine Menschen.
quelle
(Einige meiner Punkte wurden bereits in anderen Antworten erwähnt, aber ich habe das Gefühl, dass ich eine ausreichend andere Perspektive biete, damit dies eher eine Antwort als einen Kommentar wert ist.)
Bevor wir uns mit der Frage befassen, ob eine Spezifikation wirklich und vollständig eindeutig sein kann, müssen wir uns mit der Frage befassen, ob sie zumindest auf der Ebene, nach der Sie fragen, eindeutig sein sollte .
Lassen Sie mich dies aus der Perspektive eines Programmmanagers betrachten, der an einem kleinen bis mittleren Projekt oder einem Feature als Teil eines größeren Projekts arbeitet. Es gibt normalerweise zwei verschiedene Arten von Spezifikationen, die für ein solches Projekt geschrieben werden: eine funktionale (oder PM) Spezifikation und eine Design (oder Dev) Spezifikation:
Im Allgemeinen werden diese Details auf Implementierungsebene nicht in einem formalen Dokument erfasst, sondern per se im Code selbst einschließlich der Kommentare dokumentiert . Diese Mehrdeutigkeit ermöglicht es einem guten Entwickler, seine eigenen Fähigkeiten einzusetzen und die detailorientierten technischen Entscheidungen zu treffen, die das Markenzeichen eines guten einzelnen Entwicklers sind. Aus diesem Grund werde ich nicht zögern zu sagen, dass Mehrdeutigkeit in einer Spezifikation in der Tat eine gute Sache ist: Sie ermöglicht Entwicklern, ihre Arbeit zu erledigen, und erhebt sie über bloße "Code-Affen".
Dies bedeutet jedoch nicht, dass das gesamte Dokument mehrdeutig sein sollte. Auf hoher Ebene sollte es keine Unklarheiten über die Schnittstelle zum Kunden geben. Wenn die Funktion über eine öffentlich zugängliche API verfügt, sollte diese genau definiert werden. Wenn das System die Übergabe eines Datums für seine Arbeit benötigt, sollte dieses Datum in der lokalen Zeitzone oder UTC liegen? Welches Format wird benötigt? Muss es millisekundengenau sein oder ist die Minute in Ordnung?
Um auf die Frage zurückzukommen, ob mit natürlicher Sprache eindeutige Spezifikationen erstellt werden können, ist es wahr, dass es nicht sehr gut ist, dieses Maß an Klarheit zu erfassen. Ich habe es unter bestimmten Umständen gesehen, aber dies sind wahrscheinlich einzigartige Ausnahmen, die wir nicht universell anwenden können. In den meisten Fällen wird Mehrdeutigkeit mithilfe von Fachjargon, Diagrammen oder sogar Pseudocode behoben. Sobald Sie die Hilfe solcher Tools in Anspruch nehmen, ist die natürliche Sprache nicht mehr der einzige Deskriptor. Da diese Tools sogar eine völlig funktional eindeutige Spezifikation viel klarer machen können, würde ich sagen, dass ein solches Unterfangen nicht einmal versucht werden sollte.
Da die natürliche Sprache im Allgemeinen durch diese Tools ergänzt wird, um sie funktional eindeutig zu machen, ist es meiner professionellen Meinung nach nicht ausreichend, dass die natürliche Sprache allein nicht ausreicht, um in allen Fällen eindeutige Spezifikationen zu erstellen.
quelle
Man kann die natürliche Sprache relativ eindeutig machen, aber nur mit großen Schwierigkeiten.
Die Anwaltschaft braucht dringend eine Sprache, die so eindeutig wie möglich ist. Während vieles darüber, wie ein Gesetz angewendet wird, offen für Interpretationen sein kann, sollte das, was die Wörter bedeuten, nicht so sein.
Dies muss zur Erfindung der Rechtssprache führen. Wie weit willst du gehen?
quelle
Es gibt eine Reihe von Spezifikationen der offenen Gruppe, der ISO, der IETF und der ITU, die so eindeutig sind, dass wettbewerbsintensive Unternehmen recht erfolgreich zusammenarbeiten können. Es gibt eine Reihe von Spezifikationen, die die Grundlage für Verträge oder Gesetze bilden, bei denen es um Millionen von Dollar geht.
Daher sind die Spezifikationen möglicherweise nicht "perfekt". Das liegt jedoch daran, dass Menschen nicht perfekt sind. Zum Beispiel ist es eindeutig, dass HTTP einen "Referer" -Header verwenden sollte - die korrekte Schreibweise ist tatsächlich "Referrer".
Die englische Sprache kann eindeutig sein, aber Menschen können Fehler machen - einschließlich Mehrdeutigkeiten.
Darüber hinaus kann es hilfreich sein, bei Details, die noch nicht abgeschlossen sind oder in Zukunft aktualisiert werden müssen, absichtlich mehrdeutig zu sein. Zum Beispiel kann eine Spezifikation einen "Hash" angeben, anstatt md5, sha1, crc32 usw. spezifisch anzugeben.
quelle
Ich glaube, die richtige Antwort ist negativ. Folgende Fragen müssen unterschieden werden:
Der Unterschied zwischen der ersten und der zweiten Frage betrifft den Detaillierungsgrad, den Umfang der erforderlichen Interpretation und die Regeln für die Konstruktion von Sätzen in natürlicher Sprache zum Zwecke des Schreibens der Software oder der Softwarespezifikation.
Die Antwort auf die zweite Frage ist positiv. Bei einer entsprechend eingeschränkten Teilmenge einer natürlichen Sprache mit vereinbarten Regeln für die Satzkonstruktion und -bedeutung kann Code in grammatikalischen englischen Sätzen geschrieben werden. Beispielsweise erlaubt die folgende Sprache das Schreiben von Zuweisungsanweisungen eindeutig:
Das heißt, können wir systematisch Code übersetzen in der formalen Programmiersprachen in natürlichen Sprachen geschrieben von der Beschreibung jedes Verfahren. Auf der anderen Seite, eine Software - Spezifikation erfordert oft Interpretation. Ob eine Softwarespezifikation eindeutig angegeben werden kann, hängt daher vom Detaillierungsgrad der Spezifikation ab. Bei einer ausgewählten Domäne, über die sich die Spezifikation erstreckt, mit bestimmten Operationen für diese Domäne kann jedoch ein ähnlicher Übersetzungsprozess ausgeführt werden. Zum Beispiel:
wo die Aussagen
X
,Y
,Z
enthalten nur die Elemente in der Spezifikation des Vorwort erwähnt und sind in einem entsprechend formal geschrieben und vereinbarte Teilmenge einer natürlichen Sprache. Die Zweideutigkeiten werden dann betreffen , wie die Spezifikation zu implementieren - aber dies wird zu erwarten.quelle
Nein
Eine eindeutige Spezifikation einer Berechnung ist ein Computerprogramm.
quelle