VDM Vienna Development Method

Die Seite wird erstellt Vroni Fleischer
 
WEITER LESEN
Seminar in Software Engineering:
Spezifikationsverfahren

VDM
Vienna Development Method

Institut für Informatik, Universität Zürich

Prof. Dr. Martin Glinz
Nancy Schett

WS 2000/01
12. Dezember 2000

Autor:

Jens Balkausky
Poststrasse 67
8957 Spreitenbach

jens@balkausky.ch
VDM                                     Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                      WS 2000/01

Inhaltsverzeichnis:

1. Einleitung _______________________________________________________________ 3
2. VDM und VDM-SL _______________________________________________________ 3
3. Definition von Datentypen __________________________________________________ 4
  3.1. Einfache Datentypen __________________________________________________ 4
  3.2. Zusammengesetzte Datentypen__________________________________________ 5
    3.2.1. Mengen __________________________________________________________ 5
    3.2.2. Relationen ________________________________________________________ 5
    3.2.3. Folgen ___________________________________________________________ 6
    3.2.4. Records __________________________________________________________ 6
    3.2.5. Produkte__________________________________________________________ 7
    3.2.6. Vereinigungen _____________________________________________________ 7
4. Funktionen und Operationen _______________________________________________ 7
  4.1. Funktionen __________________________________________________________ 8
    4.1.1. Implizite Definition _________________________________________________ 8
    4.1.2. Explizite Definition _________________________________________________ 8
  4.2. Operationen _________________________________________________________ 9
    4.2.1. Definition eines Zustandes ___________________________________________ 9
    4.2.2. Implizite Definition _________________________________________________ 9
    4.2.3. Explizite Definition _________________________________________________ 9
  4.3. Zusätzliche Anweisungen______________________________________________ 10
  4.4. Vereinfachte Notationen ______________________________________________ 10
5. Module ________________________________________________________________ 11
6. Software Entwicklung mit VDM ____________________________________________ 12
  6.1. Verfeinerung ________________________________________________________ 12
  6.2. Übersetzung ________________________________________________________ 12
7. Beispiel: Insertion Sort____________________________________________________ 13
8. Vergleich mit Z __________________________________________________________ 13
9. Zusammenfassung _______________________________________________________ 14
10. Fazit__________________________________________________________________ 14
11. Literaturverzeichnis _____________________________________________________ 16

12.12.2000 / V1.3                                                                     Seite 2/16
VDM                                                 Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                                  WS 2000/01

1. Einleitung
Dieser Seminarbericht soll einen Einblick in die Verwendung der formalen Spezifikations-
methode VDM (Vienna Development Method) geben und die Grundlagen vermitteln, eine in
VDM-SL (VDM Specification Language) vorliegende Spezifikation zumindest in den
Grundzügen zu verstehen.
Hierzu wird zunächst auf die Geschichte von VDM und den allgemeinen Aufbau einer in
VDM-SL geschriebenen Spezifikation eingegangen (Kapitel 2). Des weiteren werden die
unterschiedlichen Datentypen der Sprache mit ihren Operatoren erläutert (Kapitel 3). Im
folgenden wird auf die Funktionen, Operationen und weiteren Anweisungen sowie Ver-
einfachungen der Notation eingegangen (Kapitel 4). Danach wird die Modularisierung einer
Spezifikation (Kapitel 5) und die Vorgehensweise für die Verfeinerung und Übersetzung der
Spezifikation in die für die spätere Implementation verwendete Programmiersprache dargelegt
(Kapitel 6). Abschliessend werden anhand eines Beispiels die wichtigsten Elemente von
VDM-SL nochmals repetiert (Kapitel 7) und ein kurzer Vergleich mit der formalen
Spezifikationssprache Z vorgenommen (Kapitel 8).

2. VDM und VDM-SL
VDM ist eine formale Spezifikationsmethode mit dem Ziel der Entwicklung von qualitativ
hochwertiger Software. Die Methode und die zugehörige Sprache VDM-SL wurde seit Mitte
der siebziger Jahre am IBM Forschungslabor in Wien entwickelt. Häufig wird der Begriff
VDM mit der Sprache VDM-SL gleichgesetzt, wobei eigentlich erstere die gesamte Methode
beschreibt. Sie ist insbesondere im englischsprachigen europäischen Raum eine der am
häufigsten verwendeten präzisen Spezifikationsmethoden. Die Spezifikationssprache ist
standardisiert, und zwar gemeinsam von der British Standards Institution (BSI) und der
International Standards Organisation (ISO).

Beim Entwurf von Software mit VDM beginnt man wie beim objektorientierten Entwurf mit
der Konstruktion eines Datenmodells. Die Datentypen, die Klassen in einem System, werden
mit Hilfe einer abstrakten Syntax in einer textbasierten Notation erstellt. Diese ist ähnlich zu
der Grammatik einer Programmiersprache.

Jede VDM Spezifikation besteht aus den Blöcken Typen, Werte, Funktionen, Operationen
und Zustände, wobei diese in beliebiger Reihenfolge stehen können und nicht unbedingt alle
enthalten sein müssen. Falls vorhanden, ist es jedoch nötig, dass sie mit dem entsprechenden
Schlüsselbegriff beginnen.

                              types
                                       ... type definitions ...
                              values
                                      ... value definitions ...
                              functions
                                      ... function definitions ...
                              operations
                                      ... operation definitions ...

                                       ... state definition ...

                              Abb. 1: Aufbau einer Spezifikation [Harry96]

12.12.2000 / V1.3                                                                                 Seite 3/16
VDM                                          Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                           WS 2000/01

Zur Modellierung wird eine kleine Anzahl von Datentypen verwendet. Dies sind, neben den
üblichen einfachen Datentypen wie z. B. die natürlichen Zahlen, die zusammengesetzten
Datentypen wie Mengen, Relationen, Folgen, Records und Varianten.

Anschliessend werden die Funktionen und Operationen entwickelt und deren Schnittstellen
und Eigenschaften festgelegt. [Schm00] [Rol92]

3. Definition von Datentypen
In den folgenden Unterkapiteln werden nun die einzelnen in VDM-SL verfügbaren Daten-
typen und ihre entsprechenden Operatoren im einzelnen erläutert.

Die einfachste Darstellungsform einer Typendefinition lautet wie folgt [Harry96]:

                                             z. B.

Id ist ein beliebiger Bezeichner und T dessen Typ, im Beispiel die Menge der natürlichen
Zahlen. Das Symbol wird anstatt von = verwendet, wenn es sich hierbei um eine Definition
handelt.

3.1. Einfache Datentypen

Die kleinste Einheit jeder Anweisung ist ein einfacher Datentyp, welcher nicht mehr weiter
zerlegt werden kann. Diese sind vergleichbar zu denen in üblichen Programmiersprachen:
                                                 z. B.

Einfache Datentypen können mit folgenden Operatoren zu Ausdrücken kombiniert werden:

Numerische Operatoren                            Vergleichsoperatoren

12.12.2000 / V1.3                                                                          Seite 4/16
VDM                                          Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                           WS 2000/01

Boolean Operatoren                              Prädikatenlogische Operatoren

Zusätzlich gibt es die Operatoren floor, welcher den ganzzahligen Anteil einer Zahl, und abs,
welcher den Absolutbetrag liefert.

3.2. Zusammengesetzte Datentypen
Nebst den einfachen Datentypen bietet VDM-SL die Möglichkeit, durch Kombination der
einfachen Datentypen zusammengesetzte Datentypen zu erhalten. Diese sind bekannt als
Mengen, Relationen, Folgen, Records, Produkte und Vereinigungen.

3.2.1. Mengen
                                                T steht hierbei für einen einfachen Datentyp.
                                                z. B.                       oder

Operatoren

                                                z. B.

                                                z. B.

                                                z. B.

                                                z. B.

3.2.2. Relationen
Eine Relation kann z. B. in Form einer Menge dargestellt werden, wobei jeweils zusammen-
hängende Elemente aufgelistet werden:
                                                        z. B.

Der dom (domain) und rng (range) Operator liefern die linken bzw. rechten Elemente eines
Paares. Dies entspricht dem Definitions- bzw. Wertebereich:
                                             bzw.

                                                z. B.
                                                Jedem Namen ist eine Telefonnummer zugeordnet.
                                                z. B.
                                                Jedem Zeichen ist genau ein Wert zugeordnet und umgekehrt.
                                                z. B.
                                                Jeder natürlichen Zahl bis vier wird ihrem Quadrat zugeordnet.

12.12.2000 / V1.3                                                                                     Seite 5/16
VDM                                          Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                           WS 2000/01

Operatoren

                                                z. B.

                                                z. B.

                                                z. B.

                                                z. B.

                                                z. B.

                                                z. B.
                                                z. B.

                                                z. B. aus                     folgt
                                                z. B.

3.2.3. Folgen

                                                T steht hierbei für einen einfachen Datentyp.
                                                z. B.

Der erste Typ lässt auch leere Folgen zu, wobei in einer nicht-leeren Folge zumindest ein
Element enthalten sein muss.

Operatoren
                                                z. B.

Um Folgen miteinander zu verketten, gibt es einerseits den obigen Operator und andererseits
den conc Operator, der alle Elemente einer Folge verknüpft:

                                             bzw.

VDM-SL kennt ausserdem einen Operator um Folgen zu verändern. Sq ist hierbei eine Folge
und St eine Menge von Relationen, welche den jeweiligen Index der Folge mit dem neuen
Wert verknüpft.
                                                z. B.

3.2.4. Records
Ein Record fast mehrere einfache Datentypen zu einem neuen Verbund zusammen. Er kann
mit VDM-SL auf zwei verschiedene Arten dargestellt werden:

                                             bzw.

12.12.2000 / V1.3                                                                               Seite 6/16
VDM                                          Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                           WS 2000/01

Beide Schreibweisen sind äquivalent. Id ist wieder beliebiger Bezeichner und T ein einfacher
Datentyp. Ein einfaches Beispiel lautet:

Bei der Deklaration eines Records werden automatisch die beiden Funktionen mk_Id und
is_Id definiert, welche dazu dienen, einzelne Felder des Records zu setzen bzw. zu lesen. Um
im obigen Beispiel die Adresse mit Werten zu füllen lautet der Syntax wie folgt:

Es ist ausserdem möglich direkt auf die einzelnen Felder des Records R.Id zuzugreifen:

Records können nur auf Gleichheit (=) bzw. Ungleichheit (? ) geprüft werden. Um ein grosse
Anzahl von Feldern zu verändern, steht des weiteren der µ-Operator zur Verfügung:

                                                z. B.

3.2.5. Produkte
Produkte dienen dazu Zahlentuppel der Form T1 × T 2 × ... Tn zu erzeugen. Sie werden in
Funktionen verwendet, um mehr als einen Parameter übergeben zu können:

Diese Funktion führt zum Beispiel eine Berechung mit zwei natürlichen Zahlen aus und
gibt eine natürliche Zahl zurück. Wie bei den Records wird automatisch eine Funktion
mk_(E1, E2, ..., En) definiert, wobei hier jedoch ein Bezeichner fehlt. Produkte können
ebenfalls nur auf Gleichheit (=) bzw. Ungleichheit (? ) geprüft werden:

3.2.6. Vereinigungen
Eine Vereinigung vom Typ T1 | T2 entspricht der Vereinigung der Werte aus den Datentypen
T1 und T2. Wie aus der Mengenlehre bekannt, enthält eine Vereinigung alle Werte, welche in
beiden Teilmengen vorkommen:

4. Funktionen und Operationen
Um eine Spezifikation in VDM-SL in einzelne Teile zerlegen zu können und bis zu einem
gewissen Grad zu modularisieren, benötigt man Funktionen und Operationen. Diese Zer-
legung in eine Serie von Teilproblemen ermöglicht es, eine Spezifikation einfacher zu
schreiben, zu verstehen und zu vervollständigen. [Harry96]
VDM-SL erlaubt es, Funktionen und Operationen implizit, explizit oder einer Mischform
innerhalb der gleichen Spezifikation zu definieren. Alle Parameter, welche Funktionen und

12.12.2000 / V1.3                                                                          Seite 7/16
VDM                                                 Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                                  WS 2000/01

Operationen übergeben werden, sind ausschliesslich Werte und keine Variablen. Alle
Parameter können nur als Ergebnis einer Funktion zurückgegeben werden. Es handelt sich
somit um Wert- und nicht Referenzsemantik.
Grundsätzlich ist es nicht nötig, eine Funktion oder Operation vor der Verwendung zu
definieren, zumal alle Deklarationen für die gesamte Spezifikation gelten. Sie können also an
einer beliebigen Stelle stehen. Verschiedene Werkzeuge, welche zur Erstellung einer
Spezifikationen herangezogen werden können, setzen jedoch häufig eine vorhergehenden
Referenzierung voraus. [Harry96] [Jones90]

4.1. Funktionen
Funktionen dienen hauptsächlich dazu, übergebene Parametern zu verarbeiten und das daraus
entstehenden Ergebnis zurückzuliefern. Im Gegensatz zu Operationen erlauben Funktionen
keine Seiteneffekte, d. h. es ist nicht möglich sich auf Werte ausserhalb ihres Geltungs-
bereiches (Scope) zu beziehen oder diese zu verändern. Eine Funktion muss immer einen
Wert zurückgeben, auch dann, wenn dieser konstant sein sollte. Funktionen lassen sich auf
zwei Arten definieren: implizit und explizit.

4.1.1. Implizite Definition
                                                      -- berechne das Maximum von drei natürlichen Zahlen

Ids1, ..., Ids 3 stehen jeweils für einen oder mehrere Bezeichner vom Typ T. Idr repräsentiert
einen Bezeichner für das zurückzuliefernde Ergebnis der Funktion. B und B’ definieren die
Vor- und Nachbedingung, wobei die Vorbedingung nicht unbedingt vorhanden sein muss. Es
ist ausserdem möglich, rekursive Funktionen zu definieren, indem in der Nachbedingung
wiederum die Funktion aufgerufen wird.
                              -- summiere eine Folge natürlicher Zahlen

4.1.2. Explizite Definition
                                                      -- berechne das Maximum von drei natürlichen Zahlen

Id1, Id2, ..., Idn sind die Bezeichner der übergebenen Parameter und T1, T2, ..., Tn deren
Typen. E entspricht einem Ausdruck vom selben Typ T wie derjenige des zurückzugebenden
Funktionswertes. B ist wiederum eine freiwillige Vorbedingung.

Explizite Funktionen benötigen allerdings noch eine Signatur welche die Typen der Variablen
definiert, welche ihr als Parameter übergeben werden und welche sie zurückliefert. Normaler-
weise steht diese direkt vor der Funktion:

                                                        z. B.
                                                        z. B.

                                                        z. B.

12.12.2000 / V1.3                                                                                           Seite 8/16
VDM                                             Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                              WS 2000/01

4.2. Operationen
Die grundlegende Idee von Operationen ist, dass sie Einfluss auf den aktuellen Zustand eines
Systems nehmen und sich einerseits darauf beziehen und andererseits diesen verändern
können. Die in einer Spezifikation verwendeten Zustandsvariablen sind somit globale Werte,
wobei immer auch die vorhergehenden Inhalte berücksichtigt werden müssen. Zunächst folgt
wie ein Zustand in VDM-SL definiert wird und danach die implizite und explizite Darstellung
einer Operation.

4.2.1. Definition eines Zustandes
In einer Spezifikation muss zunächst der Anfangszustand eines Systems bestimmt werden.
Dies beinhaltet die Definition der Startwerte aller Variablen welche benutzt werden:

                                        z. B.

Die Invarianten- und Initialisierungsklauseln können auch weggelassen werden. Invarianten
sind Eigenschaften, die durch Anwendung beliebiger Operationen nicht verändert werden. Zu
beachten ist, dass der Zustandsbezeichner Id und alle Zustandsvariablen für die gesamte
Spezifikation gelten.

4.2.2. Implizite Definition
Mit Hilfe einer impliziten Operation legt man fest, welche Eigenschaften nach dem Ausführen
der Operation erfüllt sein müssen (Nachbedingung).
                                                   -- berechne das Maximum von drei natürlichen Zahlen

Idr und dessen Typ T sind unnötig, falls die Operation keine Werte zurückliefert. Die Vor-
bedingung ist ebenfalls freiwillig. Auf externe Variablen wird mit Hilfe der ext Klausel
zugegriffen, wobei nur Lesezugriff (rd) oder Schreib- und Lesezugriff (wr) erlaubt werden
kann.

Um zwischen dem Zustand einer Variable vor und nach einer Operation unterscheiden zu
können, wird das hook Symbol verwendet:
                                                   -- ersetzte max durch n falls n > max

Im Beispiel muss nach der Operation entweder der alte Wert von max oder n in max stehen.

4.2.3. Explizite Definition
                                                   -- ersetzte max durch n falls n > max

Es kann wie bei impliziten Operationen auf externe Variablen zugegriffen werden, wobei hier
allerdings keine ext Klausel benötigt wird. Der Typ und die Zugriffsrechte ergeben sich aus
12.12.2000 / V1.3                                                                                        Seite 9/16
VDM                                          Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                           WS 2000/01

der Angabe der Operation und der Umgebung. Die Vorbedingung B ist wieder freiwillig. Das
Schlüsselwort skip bewirkt, dass keine weiteren Handlungen erfolgen, sofern die Bedingung
nicht erfüllt wird.
Wie bei den expliziten Funktionen benötigen auch explizite Operationen eine Signatur,
welche die Typen der Variablen definiert, die ihr als Parameter übergeben werden und welche
sie zurückliefert. Üblicherweise steht diese direkt vor der Operation.
                                                -- erhöhe den aktuellen Wert um eins

4.3. Zusätzliche Anweisungen
Wie von den üblichen Programmiersprachen her bekannt, kennt VDM-SL ebenfalls die if-
und case- Anweisung. Bn sind hierbei Bedingungen, En Ausdrücke und Psn Marken.

                                             bzw.

Iterationen können mit Hilfe von for- und while-Schlaufen realisiert werden. Id steht für
einen beliebigen Bezeichner und St für eine beliebige Aussage.
                                             bzw.

4.4. Vereinfachte Notationen
Des weiteren kennt VDM-SL drei Notationen um eine bessere Struktur und Lesbarkeit in die
Spezifikation zu bringen. Die erste Notation ist die sogenannte Deklarationspräambel, welche
es ermöglicht, einzelne lokale Bezeichner zu definieren. Dies ist allerdings nur in expliziten
Operationen zulässig.

Ein weitere Vereinfachung ist die def-Anweisung, welche mehrere lokale Definitionen zu
einem Ausdruck zusammenfasst. Dies kann in Funktionen und Operationen verwendet
werden.

Als letztes folgt die let-Anweisung, welche es ermöglicht, alle nachfolgenden Bezeichner
durch einen bestimmten Ausdruck zu ersetzen. Dies kann ebenfalls in Funktionen und
Operationen verwendet werden.

12.12.2000 / V1.3                                                                         Seite 10/16
VDM                                             Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                              WS 2000/01

5. Module
Um grosse Systeme beschreiben können, wurden sogenannte Module eingeführt, um die
gesamte Spezifikation in unabhängige Einheiten mit eigenen Definitionen, Funktionen,
Operationen und Zuständen zerlegen zu können. Jedes Modul besteht aus zwei Hauptteilen:

                                        1. Interface-Block
                                        2. Definitions-Block

Diese werden wie folgt weiter aufgegliedert:

                                z. B.

An Anfang steht ein beliebiger Modulname. Der Interface-Block besteht einerseits aus dem
import Abschnitt, in dem alle Datentypen, Funktionen und Operationen angegeben werden,
welche von externen Modulen importiert werden und andererseits aus dem export Abschnitt,
in welchem Angaben über die zur Verfügung stellenden Elemente stehen. Der Definitions-
Block hat den üblichen Aufbau einer Spezifikation (vgl. Abbildung 1, Seite 3).

Es gibt noch zwei optionale Abschnitte im Interface-Block: den parameters und den
instantiations Abschnitt. Im ersteren kann definiert werden, ob das Modul für verschiedene
Datentypen und Werte verwendet werden kann (Polymorphismus):

Im Beispiel ist das Modul somit für die Datentypen Key, Element und Product verwendbar.

Der instantiations Abschnitt dient dazu, Module in Modulen aufzurufen und sie entsprechend
zu instanzieren:

Im Beispiel wird das Modul Ext_List als Index instanziert. Unter types und functions wird
wie im vorhergehenden export Abschnitt angegeben, welche Datentypen, Funktionen und
Operationen aus diesem Modul verwendet werden sollen. [Schi97] [Harry96] [Fitz97]

12.12.2000 / V1.3                                                                            Seite 11/16
VDM                                               Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                                WS 2000/01

6. Software Entwicklung mit VDM
Wie zu Beginn des Berichtes bereits festgehalten, handelt es sich bei VDM nicht nur um eine
Spezifikationssprache, sondern auch um eine Methode, welche es ermöglicht einen verwend-
baren Programmcode aus der Spezifikation zu erhalten. Dieses Kapitel soll nun einen kleinen
Einblick in die Vorgehensweise geben.

Ausgehend von einer abstrakten Spezifikation besteht das grundsätzliche Vorgehen aus zwei
elementaren Schritten: Der Verfeinerung (Refinement) und der Übersetzung (Translation).

6.1. Verfeinerung
Jeder Stufe des Verfeinerung führt zu einer konkreteren Stufe der Spezifikation. Da es sich
um einen algebraischen Prozess handelt, kann die Korrektheit mit Hilfe von Regeln und
Axiomen bewiesen werden.
Grundsätzlich besteht eine formale Spezifikation aus zwei Teilen: Datentypen und
Funktionen/Operationen. Somit kann die Verfeinerung in zwei Teilprozesse zerlegt werden:
der Umwandlung von abstrakten Datentypen in konkrete Datenstrukturen (data reification)
und der Umwandlung von Funktionen und Operationen in konkrete Algorithmen (operation
decomposition). [Harry96] [Fitz97]

                        Abb. 2: Verfeinerung [Harry96]

6.2. Übersetzung

Die Übersetzung ist die Umwandlung der letzten Verfeinerungsstufe, welche sich immer noch
in der Notation der formalen Sprache befindet, in einen konkreten Quelltext der zu verwen-
denden Programmiersprache. Dieser kann auf einem Computer ausgeführt werden.
Die Korrektheit dieses Schrittes kann allerdings nicht formal mit VDM bewiesen werden, da
er sehr stark von der Semantik der Spezifikationssprache und der Programmiersprache
abhängt.
Eine Lösung wäre, die Semantik der Programmiersprache in VDM-SL zu formulieren. Dies
würde zu einer Übereinstimmung der Spezifikation und der Implementation führen. In den
meisten Fällen sind die Programmiersprachen allerdings überhaupt nicht oder nur sehr
schlecht formal spezifiziert worden.

12.12.2000 / V1.3                                                                              Seite 12/16
VDM                                          Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                           WS 2000/01

7. Beispiel: Insertion Sort
Anhand dieses Beispiels soll nun eine vollständige in VDM-SL verfasste Spezifikation mit
den wichtigsten Elementen erläutert werden. Der Algorithmus liefert als Ergebnis eine
aufsteigend sortierte Folge von reellen Zahlen. Dabei wird jeweils beginnend mit der zweiten
Stelle ein Wert aus der Folge entfernt, alle grösseren Elemente auf der linken Seite nach
rechts verschoben und der Wert an der freien Stelle wieder eingefügt. Dies wird für alle
Elemente der Folge fortgeführt.

                                                -- Definiere PosReal als reelle Zahl

                                                -- DoSort erhält eine Folge von reellen Zahlen und
                                                -- liefert eine entsprechende Folge zurück
                                                -- Rückkehr bei leerer Folge

                                                -- Ersetze sorted durch DoSort(Listenende)
                                                -- Rekursiver Aufruf mit Listenkopf und DoSort

                                                -- InsertSorted erhält eine reelle Zahl und eine Folge
                                                -- von reellen Zahlen und lieferte eine Folge zurück

                                                -- Falls Folge leer, gib i zurück
                                                -- Falls i kleiner als kleinstes Element von l gib
                                                -- verknüpfte Folge zurück, ansonsten rekursiver
                                                -- Aufruf mit nächst kleineren Folge

8. Vergleich mit Z
Gemeinsamkeiten
VDM-SL und Z gehören beide zu den modelbasierten Spezifikationssprachen, d. h. sie
versuchen beide den Systemzustand in Form eines mathema tisches Modells zu beschreiben.
Somit werden sie eingesetzt zur Beschreibung sequentieller, dynamischer und zustands-
orientierter Systeme.
Sie obliegen dem formalen Kalkül, d. h. sie sind Spezifikationssprachen mit formal definierter
Syntax und einer formal definierter Semantik, womit primär dem funktionalen Aspekt von
Anforderungen Rechnung getragen wird. Sie basierend auf Mengen, Relationen und
prädikatenlogischen Ausdrücken. Beide sind standardisiert und im kommerziellen Bereich
relativ weit verbreitet. Spezifikationen werden im Prinzip durch Kombination von flexiblen
Datentypen erstellt, wobei die Ähnlichkeiten zur linearen Algebra, insbesondere der
Mengenlehre, klar erkennbar sind.
Mit beiden Sprachen wird versucht, die Zusammenhänge zwischen Mengen durch Relationen
und Funktionen zu definieren. Des weiteren stehen Konstrukte zur Zusicherung und
Veränderung des Systemzustandes zur Verfügung. Eine Spezifikation in jeder dieser Sprachen
ist immer eindeutig, da die Semantik formal definiert wurde. Es können mathematische
Beweise zur Überprüfung von Eigenschaften geführt werden.

Unterschiede
Allerdings stehen in VDM-SL viel mehr Möglichkeiten zur Verfügung, die einer Program-
miersprache entsprechen, um auch Algorithmen beschreiben zu können. Es ist deshalb
leichter möglich von einer VDM-SL Spezifikation zu einer konkreten Implementierung zu

12.12.2000 / V1.3                                                                                        Seite 13/16
VDM                                           Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                            WS 2000/01

gelangen. In Z wurden solche Konstrukte auf ein Minimum reduziert. Sie eignet sich somit
eher zur Beschreibung von Systemzuständen. Sie bietet damit jedoch mehr Freiheiten für die
effektive Implementierung, weil nicht zu viele Details bereits festgelegt werden können.
[Harry96]
Die mathematische Semantik beschreibt die zu Grunde liegenden Konzepte, das Deduktions-
system und die Mechanismen welche verwendet werden können. Einige Vorgehensweisen
legen besonderen Wert auf die konzeptuellen Aspekte, wie z. B. Z, andere auf die Folgerungs-
aspekte, wie z. B. VDM-SL.
VDM-SL und Z beinhalten ein Paket von flexiblen Datentypen welche während des
Schreibens der Spezifikation kombiniert werden müssen. Dagegen werden in algebraischen
Spezifikationen die Eigenschaften des zu entwickelnden Systems mit Hilfe eines kleinen
vordefinierten Kerns festgelegt.
Z basiert vollständig auf Mengen. Alles, insbesondere Funktionen, Relationen, Folgen und
Bags, sind im Grunde Mengen mit speziellen, definierenden Eigenschaften. Es ist ausserdem
sehr wirksam, alle Mengenoperatoren zu jeder Zeit verfügbar zu haben, wenn die Spezifi-
kation aus bereits bestehenden Teilen gebildet wird. Im Vergleich dazu besitzt VDM-SL
zahlreichere einfache Datentypen. Insbesondere sind Funktionen von Mengen unabhängig.
[Gaud94]
VDM besitzt eine eigene Drei-Werte Logik, welche es erlaubt einen undefinierten Zustand zu
behandeln. Z dagegen basiert auf einer Zwei-Werte Logik. [Mano97]

9. Zusammenfassung
VDM ist eine formale Spezifikationsmethode, welche eine sehr präzise Beschreibung von
komplexen Systemen erlaubt. Sie beinhaltet die zugehörige Sprache VDM-SL welche aus klar
definierten Datentypen und einer exakten Beschreibungen der möglichen Funktionen und
Operationen besteht. Sie soll eine formale Grundlage bieten, welche dazu genutzt werden
kann, mit Hilfe von Axiomen mathematische Beweise zu führen, um somit die Fehlerfreiheit
der Spezifikation zu garantieren.

Ist ein System erst vollständig beschrieben, ist es möglich, innerhalb von zwei Schritten, der
Verfeinerung und der Übersetzung, zu einem auf einem Computer lauffähigen Programm zu
gelangen.

10. Fazit
Stärken
Eine in VDM-SL geschriebene Spezifikation ist immer eindeutig, da die Semantik formal
definiert wurde und es kann somit die Widerspruchsfreiheit formal überprüft werden. Die
Erfüllung gewisser Eigenschaften z. B. Sicherheitsanforderungen über die Nichterreichbarkeit
gefährlicher Zustände ist ebenfalls beweisbar. Eine VDM-SL Spezifikation ist lösungsneutral,
Programme können formal verifiziert werden und die Modelle sind z. B. in Form von
Petrinetzen simulier- bzw. animierbar.

Schwächen
Die Erstellung einer solchen Spezifikation ist jedoch sehr aufwendig und die Prüfung bzw.
der Nachweis der Vollständigkeit wird nicht einfacher. Die gesamte Spezifikation ist nicht
ohne profunde Ausbildung lesbar, d. h. eine Prüfung der Adäquatheit durch den Kunden ist
nur schwer möglich. Es fehlen Mittel zur Dekomposition, d. h. grosse Spezifikationen sind
12.12.2000 / V1.3                                                                          Seite 14/16
VDM                                           Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                            WS 2000/01

auch für Fachleute nur schwer verstehbar. Dies hat zur Folge das die Fehlererkennung, die
Prüfung auf Adäquatheit der Anforderungen und die korrekte Umsetzung der Anforderungen
im Entwurf sehr kompliziert wird. Ein formale Spezifikation ist teilweise einseitig
ausgerichtet, insbesondere auf Funktionen wie z. B. bei einer algebraischen Spezifikation oder
auf das Verhalten wie z. B. bei Petrinetzen. Aspekte wie z. B. eine Benutzerschnittstelle sind
praktisch nicht modellierbar und die Beschreibung von Ausnahmefällen gestaltet sich sehr
schwierig. Zum Teil muss perfekte bzw. abstrakte Technologie angenommen werden. Es
eignet sich somit eher für kleine, kritische Teile einer Spezifikation in denen hohe Präzision
besonders wichtig ist. [Glinz98]

Die zur Verfügung stehende Literatur ist sehr mathematisch und häufig verlieren sich die
Autoren in vielen Details. Vielfach besteht der Grossteil eines Buches nicht aus der effektiven
Beschreibung der Sprache, sondern in der Erklärung von allgemeinen Beweismethoden mit
deren Hilfe die Richtigkeit einer VDM-SL Spezifikation überprüft werden kann.

12.12.2000 / V1.3                                                                          Seite 15/16
VDM                                             Seminar in Software Engineering: Spezifikationsverfahren
Jens Balkausky                                                                              WS 2000/01

11. Literaturverzeichnis
[Fitz97]         John Fitzgerald: VDM Frequently-Asked Questions (V1.5, 20.08.1997)
                 Centre for Software Reliability (CSR)
                 Department of Computing Science, University of Newcastle upon Tyne
                 Newcastle upon Tyne (GB), 1997
                 http://www.csr.ncl.ac.uk/vdm

[Gaud94]         M.C. Gaudel: Formal Specification Techniques
                 Proceedings 16th International Conference on Software Engineering, S. 223-227
                 Sorrento (I), 1994

[Glinz98]        Martin Glinz: Teilskript zur Vorlesung «Requirements Engineering»
                 Formale Spezifikation, WS 1998/99
                 Institut für Informatik, Universität Zürich
                 Zürich (CH), 1998

[Harry96]        Andrew Harry: Formal Methods Fact File - VDM and Z
                 John Wiley & Sons, West Sussex (GB), 1996

[Jones90]        Cliff B. Jones: Systematic Software Development using VDM (Second Edition)
                 Prentice Hall International (UK) Ltd, Hertfordshire/London (GB), 1990

[Mano97]         D. M. Manoranjan: Formal Specification Using Z
                 Faculty of Engineering and Applied Science
                 Memorial University of Newfoundland
                 St. John's, Newfoundland (CND), 1997
                 http://www.engr.mun.ca/~moorthy/slides/soft/tsld001.htm

[Rol92]          F. D. Rolland: Programming with VDM
                 The Macmillan Press Ltd, Hampshire/London (GB), 1992

[Schi97]         Christian Schiestl: The Vienna Development Method (VDM)
                 Course in Specification Based Program Construction, University of Klagenfurt
                 Klagenfurt (A), 1997
                 http://www.edu.uni-klu.ac.at/~cschiest

[Schm00]         Uwe Schmidt: Objektorientierte Software-Entwicklung mit der
                 VDM Class Library
                 Fachhochschule Wedel, F&E-Projekt «Objektorientierte Softwareentwicklung»
                 Wedel (D), 2000
                 http://www.fh-wedel.de/infos/infrastruktur/spezielle_ab/vdm/vdm-class-lib.html

12.12.2000 / V1.3                                                                            Seite 16/16
Sie können auch lesen