Was versteht man unter Spezifikation?
Eine
Spezifikation
ist eine
vollständige, detailierte
und
unzweideutige
Problembeschreibung.
[INFO2002]
Die Spezifikation ist mehr oder weniger eine natürlichsprachliche Implementation.
Das heißt, das, was Sie spezifizieren, wird im Idealfalle eins zu eins in
Programm−Code
übertragen
(implementiert).
Der
Entwurf
wird in der Spezifikationsphase genauer definiert.
Deshalb nennt man die Spezifikation auch den
verfeinerten Entwurf.
Dabei entsteht ein Dokument, welches als Vorgabe für den Programmierer dient.
Beispielsweise stellt eine spezifizierte Funktion in der Regel eine
(kleine)
Programmieraufgabe für den Programmierer dar.
/* ======================================
* Beispiel einer spezifizierten Funktion
* ======================================
*
* Die Fakultätsfunktion n! aus der Stochastik.
* Im Falle (-1 < n < 16) soll n! zurückgegeben werden,
* ansonsten -1.
*/
long faculty(int n)
{
/* ... hier fehlt noch die Implementation ... */
} |
Während der Spezifikationsphase beschreibt man die Einzelheiten aller erforderlichen Methoden,
wohingegen beim Entwurf die Methoden nebensächlich sind.
Die aus dem Entwurf hervorgehenden Module, Klassen und Objekte erhalten in der Spezifikationsphase möglichst exakt beschriebene Methoden.
Die Signaturen der Methoden werden mit den erforderlichen Übergabeparametern sowie Rückgabetypen vervollständigt.
In den Beschreibungen muss die Bedeutung der jeweiligen Methoden sowie Parameter klar hervorgehen.
Dabei muss das gewünschte Verhalten jeder Methode genau dokumentiert werden,
sonst weiß nämlich der Programmierer während der
Implementation
nicht genau, worum es geht.
In der späteren Phase
Verifikation
wird normalerweise
(hoffentlich!)
jede Methode gemäß dem spezifizierten Verhalten auf Korrektheit getestet.
Was bedeutet Korrektheit?
Ein Programm funktioniert genau dann
korrekt,
wenn es sich gemäß der Spezifikation verhält,
das heißt, jede einzelne Methode des Systems muss sich gemäß ihrer Spezifikation verhalten.
Umgekehrt ausgedrückt, ist ein Programm nicht korrekt, wenn es nicht das tut
(Implementation),
was man von ihm erwartet
(Spezifikation).
Dokumentation
Zur Spezifikation gehört natürlich eine ausführliche und unzweideutige Beschreibung der Methoden,
so dass jeder Programmierer sich ohne Umstände ans Werk machen kann.
Spezifiziert man mit speziellen Spezifikationstools wie z. B. mit
Together,
dann kann idealerweise direkt mit
javadoc
dokumentiert werden
(keine Implementation!).
So kann man einer doppelten Dokumentation aus dem Wege gehen,
was eine erhebliche Erleichterung für die Konsistenzerhaltung der
(widerspruchsfreien)
Beschreibungen bedeutet.
Das Dokument, welches dabei entsteht, ist die vollständige und detailierte Beschreibung aller Klassen insbesondere deren Methoden.
Dieses Dokument kann als Auftragsliste für die Programmierer betrachtet werden.
Zudem können die Headerinformationen wie zum Beispiel die Klassengerüste mit den dazugehörigen Methodenköpfen
automatisch für die Implementation vorgeneriert werden.
Der Programmierer kann sich dabei lästige Tipparbeit sparen.
Praktisch gesehen, liefert die Spezifikation alle dokumentierten Headerinformationen des Softwareproduktes.
Plausibilität
In dieser Phase dürfen die Entwickler den Überblick über das gesamte entstehende Softwareprodukt
trotz des Entwurfs nicht verlieren.
Eine permanente Plausibilitätskontrolle während der Entwicklung ist erforderlich.
Der kritische Blick auf den Entwurf kann dabei helfen, den Überblick nicht zu verlieren
und gegebenenfalls Fehler im Entwurf aufzudecken.
In der Folgephase
Implementation
wird nämlich die Nachspezifikation teuer, möglicherweise muss bereits implementierter Programmcode vernichtet werden.
Mangelnder Entwurf
Wenn Sie bei der Spezifikation bemerken, dass Sie ein und dasselbe mehrfach spezifizieren müssen,
so ist das ein Indiz für Redundanz,
was aller Wahrscheinlichkeit nach eine Verbesserung des Entwurfs nach sich ziehen sollte
(mangelhafte Abstraktion).
Vollständigkeit
Erkennt man als Entwickler in einer späteren Phase, dass zentrale Funktionen nicht spezifiziert sind,
liegt eine unvollständige Spezifikation vor.