Eine Methode, die für Cleanroom typisch ist und die formale Spezifikation mit der schrittweisen Verfeinerung verbindet, ist die Spezifikation und der Entwurf mit Kastenstrukturen (box structures). Dabei gibt es drei Sichten auf eine Softwarekomponente: Die reine Spezifikation (black box view), die Zustandsbeschreibung (state box view) und die Prozeßbeschreibung (clear box view). Die Bezeichnung Kastenstruktur weist darauf hin, daß jede dieser Beschreibungen in sich abgeschlossen ist.
Die black box view beschreibt die Reaktionen der Komponente ausschließlich über Eingabehistorien. Sie ist völlig implementationsunabhängig und betrachtet die Softwarekomponente als mathematische Funktion.
Die state box view stellt demgegenüber zumindest einen Teil der Eingabehistorien durch innere Zustände der Komponente dar und modelliert die Ausgaben als Reaktion auf momentane Eingaben und Zustände. Dies ist der erste Schritt auf dem Weg zu einer Implementation.
Die clear box view komplettiert einen Verfeinerungsschritt im Entwurf, indem die Ausgaben beschrieben werden über gegenwärtige Eingaben, Zustände und die Benutzung von black box views der Teilkomponenten niedrigerer Verfeinerungsstufen.
Für verschiedene Aspekte des Softwareentwurfs haben die datenorientierte Zustandsbeschreibung oder die vorgangsorientierte Prozeßbeschreibung Vorteile gegenüber der jeweils anderen. Es ist deshalb günstig, daß in dieser Vorgehensweise beide Methoden vereint werden.
Ein Verfeinerungsschritt geht also in folgenden Teilschritten vor sich:
Das folgende Beispiel soll einen groben Eindruck davon vermitteln, wie diese fortgesetzte Verfeinerung vor sich geht und wie sie mit der Verifikation zusammenspielt. Das Beispiel ist natürlich ein reines Spielzeugbeispiel. In einer wirklichen Anwendung von Cleanroom wären die einzelnen Verfeinerungschritte umfangreicher und der Anwendungsfall auch komplizierter. Das Beispiel verzichtet auch völlig auf eine state box, weil es sich nur um ein Prädikat handelt, zu dessen Realisierung kein Zustand nötig ist.
black box 1: dreieckstyp (a,b,c)
Vorbedingung: a, b, c sind positive reelle Zahlen
Nachbedingung: Liefert GLEICHSEITIG bzw. GLEICHSCHENKLIG
bzw. SONSTIGES bzw. KEINDREIECK, wenn das Tripel (a,b,c)Seitenlängen eines gleichseitigen bzw. nichtgleichseitigen
gleichschenkligen bzw. eines nichtgleichschenkligen Dreiecks
bezeichnet bzw. überhaupt nicht ein Tripel von Seitenlängen eines
Dreiecks sein kann.
clear box 1: dreieckstyp (a,b,c)
IF alle seiten erfüllen dreiecksungleichung (a,b,c)
THEN Liefere echter dreieckstyp (a,b,c)
ELSE Liefere KEINDREIECK
black box 2: alle seiten erfüllen
dreiecksungleichung (a,b,c)
Vorbedingung: a, b, c sind positive reelle Zahlen.
Nachbedingung: True, falls jede Seite kürzer als die Summe der
beiden anderen; False andernfalls.
black box 3: echter dreieckstyp (a,b,c)
Vorbedingung: (a, b, c) sind die Seitenlängen eines echten Dreiecks
Nachbedingung: Liefert GLEICHSEITIG bzw. GLEICHSCHENKLIG
bzw. SONSTIGES, wenn das Tripel (a,b,c) die
Seitenlängen eines gleichseitigen bzw. nichtgleichseitigen
gleichschenkligen bzw. eines nichtgleichschenkligen Dreiecks
bezeichnet.
Verifikation clear box 1:
Die drei Seiten können genau dann ein Dreieck bilden, wenn die beiden
kürzeren, sagen wir x und y, zusammen länger sind als die längste, z.
Dann nämlich können sie einen Winkel bilden, dessen Enden von einem
Ende von z zum anderen reicht.
z < x+y (also: ,,Dreiecksungleichung gilt für die Seite z``) ist also
hinreichend, damit ein Dreieck vorliegt.
Außerdem ist die Geltung der Dreiecksungleichung notwendig für
jede Seite, damit ein Dreieck vorliegt.
z < x+y gilt insbesondere, falls die Dreiecksungleichung für jede
Seite gilt.
Damit liefert alle seiten erfüllen dreiecksungleichung die
Aussage, daß es sich wirklich um ein Dreieck handelt, die
Vorbedingung von echter dreieckstyp wird erfüllt, und clear box
1 ist korrekt.
Ende von Verfeinerungsschritt 1.
clear box 2: alle seiten erfüllen
dreiecksungleichung (a,b,c)
Liefere (a < b+c AND b < a+c AND c < a+b)
Verifikation clear box 2:
3 verschiedene, korrekte Fälle geprüft, UND-verknüpft;
ist offensichtlich korrekt.
Ende von Verfeinerungsschritt 2.
clear box 3: echter dreieckstyp (a,b,c)
IF a = b = cTHEN Liefere GLEICHSEITIG
ELSE IF a = b OR a = c OR b = cTHEN Liefere GLEICHSCHENKLIG
ELSE Liefere SONSTIGES
Verifikation clear box 3:
SONSTIGES ist als NOT gleichschenklig korrekt geprüft laut black box
1.
gleichseitig ist ein Spezialfall von gleichschenklig und muß deshalb
zuerst geprüft werden, dies geschieht hier.
Deshalb ist clear box 3 korrekt.
Ende von Verfeinerungsschritt 3.