(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:
- Die Funktionsspezifikation hat die Aufgabe zu beschreiben, was das Projekt oder die Funktion tun soll, häufig aus Sicht des Kunden. Es sollte im Allgemeinen nicht beschrieben werden, wie dies getan werden sollte. Abhängig von der Art des Projekts ist es dem Kunden vielleicht wichtig, wie die nach außen gerichtete API aussieht. Ist es dem Kunden jedoch wichtig, ob Klasse A von Klasse B erbt oder Schnittstelle C implementiert? Er sollte nicht. Und die Funktionsspezifikation sollte es auch nicht. Dies führt bereits zu einer Mehrdeutigkeitsebene: der des technischen Designs.
- Die Entwurfsspezifikation hat die Aufgabe zu beschreiben, wie die funktionalen Anforderungen aus Sicht des Architekten oder technischen Designers des Merkmals oder Projekts erfüllt werden sollten. Es ist beabsichtigt, die allgemeinen Unklarheiten des technischen Designs zu beseitigen. Dies enthält die Details, die Sie in der Funktionsspezifikation nicht wollten, wie z. B. die Architektur der Lösung, einschließlich Klassenstruktur, Vererbung, möglicherweise sogar einzelne Funktionen und Methoden, je nach Umfang und Umfang des Projekts. Interessiert es den Architekten, wie Sie Ihre temporären Variablen nennen oder ob Sie eine Liste oder ein Array für einen internen Datentyp verwenden? Angenommen, sie vertraut ihren Entwicklern, sollte sie nicht und auch nicht die Designspezifikation. Dies führt eine zweite Ebene der Mehrdeutigkeit ein: die der Implementierung.
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.