5. Stand der Wissenschaft und Technik

5.1. Formale Methoden

Zu formalen Methoden der Softwaretechnik gibt es umfangreiche Literatur. Wir beschränken uns hier auf einen sehr knappen Abriß unter Betonung der Arbeiten, die für diese Projekt relevant sind, und verweisen im übrigen auf den Sammelband des BMFT-Vorprojekts KORSO [BJ 94], insbesondere das Kapitel über den KORSO Methodik-Rahmen [PW 94], sowie die annotierte Bibliographie des EG-Projekts COMPASS [Kri 90b, BKLOS 91].

5.1.1. Spezifikation sequentieller Systemkomponenten

Die Spezifikation sequentieller Systemkomponenten wird heute meist mit der Spezifikation von Software-Moduln als Abstrakte Datentypen gleichgesetzt: Typen von Werten und Operationen über diesen werden zusammen spezifiziert. Die abstrakte Schnittstelle enthält nur das, was nach außen sichtbar sein soll, die Implementierung ist versteckt (dieser Ansatz läßt sich in abgewandelter Form natürlich auch auf kommunizierende, verteilte Systeme anwenden, vgl. Abschnitt 5.1.2).

Die historisch frühere und eine immer noch weit verbreitete Form ist die der modell-orientierten Spezifikation. Hier wird ein System mithilfe von bekannten Datenstrukturen wie Tupeln, Listen, Mengen, endlichen Abbildungen etc. modelliert, vgl. die Vienna Definition Method VDM sowie ihren Ableger Raise, ferner die mengentheoretische Spezifikationssprache Z [Spi 89], die an der Universität Oxford entwickelt wurde. Z hat sich in einer Reihe von Fallstudien [Hay 87], auch im industriellen Kontext, bewährt. Dazu trägt insbesondere der Z-Schema-Kalkül zur Modularisierung größerer Spezifikationen bei.

Der Vorteil der anschaulichen Modellierung wird damit erkauft, daß man immer ein konkretes Modell spezifiziert; es fällt so oft schwer, die Äquivalenz zu einem anderen Modell zu zeigen. Demgegenüber versucht man mit mehr axiomatischen bzw. algebraischen Spezifikationsmethoden, zunächst nur die notwendigen Eigenschaften eines Systems (oder Abstrakten Datentyps) festzuhalten; Überspezifikationen werden so vermieden und Freiheitsgrade für die Implementierung offen gehalten. Die erste formale Anforderungsspezifikation ist so oft noch nicht ausführbar, ermöglicht aber schon, formale Aussagen über das zu entwickelnde System abzuleiten. Sie wird schrittweise durch Verfeinerung über konkretere Entwurfsspezifikationen zu einer Implementierung entwickelt. Beispiele sind in [BKLOS 91] zu finden; ein Repräsentant ist das im BMFT-Vorprojekts KORSO entwickelte SPECTRUM (vgl. Beiträge in [BJ 94]).

Das Überprüfen von Spezifikationen in bezug auf das gewünschte Verhalten, spezielle Eigenschaften, etc. wird als Validieren bezeichnet (vgl. Abschnitt 5.2.3); man kann es auch als a-priori-Testen einer Spezifikation betrachten, gegenüber dem a-posteriori Testen eines Programms nach seiner Entwicklung. Hier sind die formalen Spezifikationen eine wesentliche Grundlage. Aus ihnen können nicht nur (oft zur Abnahme noch verlangte) a-posteriori Tests erzeugt werden, sie sind auch Eingabe für Prototypgeneratoren oder Animations- bzw. Simulationswerkzeuge. Eine besondere Rolle spielen hier direkt ausführbare Spezifikationen, z.B. operationell definierte aber noch ineffiziente Entwurfsspezifikationen; vgl. auch neuere Arbeiten zu "higher-order logic programming" [Qian 94] bzw. generell funktionale bzw. logische Programmiersprachen.

5.1.2. Spezifikation kommunizierender, verteilter Systeme

Reaktive oder kommunizierende Systeme interagieren fortwährend mit ihrer Umgebung und sind häufig über mehrere Komponenten verteilt. Eine Bahnsteuerung besteht z.B. aus Sensoren und Aktuatoren an der Bahnstrecke, den fahrenden Zügen und einer Leitzentrale, die alle miteinander in geeigneter Weise kommunizieren müssen, um die Züge schnell und sicher zu ihren Zielen zu geleiten.

Der Entwurf von kommunizierenden, verteilten Systemen ist schwierig, weil gleichzeitig Phänomene wie Nebenläufigkeit, kausale Abhängigkeiten, Synchronisation, interne und externe Aktionen sowie Nichtdeterminismus beherrscht werden müssen. Dieses macht die Frage nach der Korrektheit solcher Systeme um so dringlicher. Um diese Schwierigkeiten zu meistern, sind viele Spezifikations-Formalismen für kommunizierende Systeme vorgeschlagen worden, die sich nach dem Abstraktionsgrad gruppieren lassen, mit dem sie die Details der Kommunikation und der verteilten Organisation wiedergeben:

* Eine "Black Box"-Sicht beschreiben logische Sprachen wie zum Beispiel Temporale Logik [MP 91] oder Prädikatenlogik [Heh 84, Hoa 85b, Bro 92].

* Mehr Details beschreiben Petri-Netze [Rei 85] und State Charts [Har 87] oder auch Action Systems [Bac 90, Lam 91], UNITY-Programme [CM 88] und Input/Output-Automaten [LT 89].

* Eine "Glas Box"-Sicht beschreiben Programmiersprachen wie CSP [Hoa 85a] und OCCAM [IN 88] oder Hardware-Entwürfe.

Da Entwürfe von kommunizierenden Systemen meistens mehrere solcher Abstraktionsebenen involvieren, muß der semantische Zusammenhang und der korrekte Übergang zwischen diesen Ebenen nachgewiesen werden. Diesem Ziel widmet sich insbesondere das ESPRIT-Grundlagenprojekt ProCoS (Provably Correct Systems) [Bjo 89, ProCoS 94].

Spezifikation von Realzeitanforderungen

Bei Realzeitsystemen kommt es darauf an, daß die Systemkomponenten zur Verarbeitung anfallender Daten ständig derart betriebsbereit sind, daß die Verarbeitungsergebnisse innerhalb einer vorgegebenen Zeitspanne verfügbar sind. Insbesondere handelt es sich bei der Steuerung von Verkehrssystemen wie Bahnen und Flugzeugen um solche Realzeitsysteme.

Die wissenschaftlichen Anstrengungen zur formalen Behandlung solcher Systeme sind in letzter Zeit stark angewachsen. Dieses läßt sich insbesondere an Konferenzen ablesen, die sich speziell diesem Thema widmen, z.B. [BHRR 92, LRV 94].

Zur formalen Spezifikation von Realzeitsystemen ist häufig die Erweiterung der unter Abschnitt 5.1.2 genannten Spezifikationsmethoden um einen expliziten Parameter für die Zeit vorgeschlagen worden. Diese in [AL 92] als "old-fashioned recipe" bezeichnete Vorgehensweise findet sich z.B. in dem Verifikationskalkül von [Hoo 91] für zeitkritische kommunizierende Programme.

Erweiterte Temporale Logiken zur automatischen Verifikation von Automaten mit Zeitbedingungen werden in [AD 92, ACD 90] betrachtet. Ansätze der Prozeßalgebra für die Spezifikation von Realzeitabläufen werden in [BB 90] und [NSY 91] vorgeschlagen.

Diese Ansätze stellen den Verifikationsaspekt von fertigen Systemen in den Vordergrund. Wie diese Systeme aus gegebenen Anforderungen schrittweise entwickelt werden können, wird nicht behandelt. Methoden für diese Aufgabe werden u.a. im ProCoS-Projekt entwickelt.

Eine spezielle Logik zur Spezifikation von Realzeitsystemen ist der Duration Calculus [ZHR 92]. Der Duration Calculus basiert auf einem sehr einfachen semantischen Modell, dem der zeitabhängigen Zustandsvariablen. Der Kalkül selber kombiniert Intervall-Temporal-Logik mit dem Integral-Kalkül zur Bestimmung von Zeitdauern. Dadurch ergeben sich Ausdrucksmöglichkeiten, die in herkommlichen Temporalen Logiken für Zeit nicht gegeben sind. Besonders hervorzuheben ist, daß im Duration Calculus die Zeit nicht mehr als expliziter Parameter auftritt.

Im ProCoS-Projekt wird der Duration Calculus zur Spezifikation von Systemanforderungen eingesetzt und dient dann als Ausgangspunkt zur schrittweisen Entwicklung einer Implementierung [RRH 93, ProCoS 94]. Der Ansatz einer schrittweisen Verfeinerung von Realzeitsystemen wird auch in [SZH 94] verfolgt.

5.1.3. Strukturierung, Komposition heterogener Spezifikationen

Strukturierung von Spezifikationen und Programmen

Es hat sich gezeigt, daß die Strukturierung von Spezifikationen und Programmen in der Praxis eine große Rolle spielt, um mit der Komplexität fertig zu werden und sich auf Teilaspekte konzentrieren zu können. Bei formalen, insbesondere axiomatisch algebraischen Spezifikationsmethoden, ist oft die Struktur einer Anforderungsspezifikation wesentlich verschieden von der der Entwurfsspezifikationen oder fertigen Programme. Man versucht, eine Spezifikation aus (Teilen von) anderen zusammenzusetzen bzw. sie aus abstrahierten Schemata durch Parametrisierung abzuleiten (Wiederverwendung). So entsteht ein Geflecht von Vererbungsrelationen, das dem aus objekt-orientierten Sprachen ähnlich ist, hier aber sehr viel stärker semantische Verwandtschaften repräsentiert.

Die Spezifikationssprache SPECTRALSPECTRAL [KS 91] ist ein Ansatz, um mit möglichst wenig Konzepten sowohl Spezifikation im kleinen (einzelne Moduln) als auch Spezifikation im großen (Komposition) zu behandeln. Sie ist eigentlich eine Sprachfamilie, denn sie dient als Rahmen, in der verschiedene Logiken im kleinen realisert werden können, und damit auch heterogene Spezifikationen beschrieben werden können.

Multi-Logik Systeme

Bei dem Einsatz formaler Methoden zur Entwicklung korrekter Software sind oft mehrere verschiedene Logiken gleichzeitig oder in verschiedenen Phasen der Entwicklung im Spiel. So sind die Kombination von einzelnen Systemteilen mit formalen Spezifikationen in unterschiedlichen Logiken (z. B. Duration Calculus oder CSP für Nebenläufigkeit, Z oder algebraische Gleichungslogik für abstrakte Datentypen) oder die Bearbeitung einer Spezifikation mit verschiedenen Werkzeugen, die nur für eine eingeschränkte Logik anwendbar sind oder verschiedene Notationen verwenden, sehr reale praktische Probleme; ihre Lösung ist eine Herausforderung an die theoretischen Grundlagen. Bei der Entwicklung korrekter Software durch Transformation (s.u. Abschnitt 5.1.4) sind oft 4 Logiken im Spiel, die alle verschieden sein können: für die Beschreibung der Theorien in der verwendeten Spezifikationssprache, für die Formulierung (und den Beweis) von Eigenschaften von Spezifikationen, für die Beschreibung der Semantik der verwendeten Spezifikationssprache, für die Beschreibung von Anwendungsbedingungen für eine Transformationsregel, etc. Es wäre schön, wenn man z.B. die Korrektheit einer Transformationsregel nicht für jede Objektsprache neu beweisen müßte, sondern sie allgemein beweisen könnte, indem man von der speziellen Semantik (Logik) der unterliegenden Objektsprache durch Parametrisierung mit den geforderten semantischen Eigenschaften abstrahiert.

Die Forderung nach einem logischen Rahmenwerk, in dem Logiken so abstrakt beschrieben werden können, daß Strukturierung und Komposition ("Entwicklung im großen") unabhängig von den verschiedenen Logiken der Komponenten ("im kleinen") definierbar wird, liegt nahe. Zusätzlich soll die abstrakte Beschreibung sowohl für die Belange einer geeigneten Semantikdefinition als auch die Belange des Beweisens (von Hand oder mit Systemunterstützung) geeignet sein. Ferner sollte die Strukturierung von Spezifikationen auch zu einer davon abgeleiteten Strukturierung von Beweisen führen, um Einzelbeweise möglichst getrennt voneinander führen und evtl. wiederverwenden zu können (analog zur getrennten Übersetzung). Zusammengefaßt entsteht also der Bedarf nach multi-logischen Systemen, nach gegeigneten Abbildungen zwischen Logiken zum Notations- (evtl. Semantik- oder Paradigmen-) Wechsel und nach Abstraktion durch Parametrisierung. Liu hat, aus praktischen Erfahrungen im PROSPECTRA-Projek motiviert, in [Liu 94] ein solches logisches Rahmenwerk entwickelt, allgemeine Eigenschaften bewiesen und es als Erweiterung eines Logical Frameworks definiert. Im Unterschied zu "institutions" [GB 84, 92] basiert sein Ansatz zur Logikunabhängigkeit nicht auf der Erfüllbarkeitsrelation sondern der Konsequenzrelation; damit kann er sowohl modell-basierte semantische als auch Beweisaspekte abdecken.

Zusätzlich zu einer reinen Logikpräsentation, also der Darstellung einer Logik in einer Meta-Logik, wie sie in Logical Frameworks vorliegt (z.B. [HHP 87]) werden Logikmorphismen definiert. Die Strukturierung der Theoriepräsentation führt zu einer Strukturierung der Beweiskonstruktion, damit zu getrennter Beweisführung und Wiederverwendbarkeit. Wichtig ist vor allem auch die Definitionsmöglichkeit von anwendungsspezifischen Verfeinerungsrelationen zwischen strukturierten Theorien; so kann ein korrekter Entwicklungsschritt anwendungsabhängig von spezifischen Logiken definiert werden, auch von einer (abstrakteren) Logik in eine andere (konkretere), z.B. als Transformationsschritt von einer nicht-ausführbaren in eine ausführbare Spezifikation (vgl. Duration Calculus und CSP). Eine Verfeinerungsrelation zwischen Komponenten einer Spezifikation kann zu einer Verfeinerungsrelation auf der gesamten Spezifikation erweitert werden.

Es wird erwartet, daß sich durch die Strukturierungsmöglichkeiten, z.B. Verfeinerung und Parametrisierung, das Problem der Kombination von Methoden bzw. der unterliegenden Logiken strukturieren und leichter lösen läßt. So ist z.B. zur Kombination von zwei Semantiken (bzw. Logiken) nicht unbedingt (wie im klassischen Ansatz) die Konstruktion einer gemeinsamen Semantik notwendig, sondern nur die axiomatische Spezifikation der Gemeinsamkeiten; beide Logiken müssen dann diese Spezifikation im Sinne der Verfeinerungsrelation erfüllen.

5.1.4. Formale Entwicklungen, Transformationskalkül

Korrekte Entwicklungsschritte

Aus einer formalen Anforderungsspezifikation wird ein ausführbares Programm schrittweise durch Verfeinerung konstruiert und optimiert (vgl. den KORSO Methodik-Rahmen [PW 94]). Die Korrektheit eines Entwicklungsschritts kann entweder a-posteriori durch Verifikation der Korrektheit der verfeinerten gegenüber der ursprünglichen Spezifikation (also z.B. eines konkreten Entwurfs gegenüber den formalen Anforderungen) oder durch Anwendung einer bereits a-priori korrekt bewiesenen formalisierten Transformationsregel sichergestellt werden. Im allgemeinen muß noch die Anwendbarkeit einer Regel oder eines kompakten taktischen Transformationsprogramms aus mehreren Regeln bewiesen werden.

Programmentwicklung durch Transformation

Die Programmentwicklung durch Transformation entspricht dem Arbeiten eines Ingenieurs, der ausgehend von einem mathematischen Modell (d.h. der Spezifikation) Formeln, etwa zum Lösen von Differentialgleichungen, verwendet, deren Korrektheit bewiesen wurde. Transformationen sind, ähnlich wie in einer Formelsammlung, in einer Bibliothek dokumentiert und sollen systemunterstützt, interaktiv durch den Entwickler aufgrund seiner Zielvorgaben und Erfahrung, angewandt werden. Für den praktischen Einsatz ist es dabei wichtig, daß der Begriff der Transformation auch technisch nicht nur die einzelne kleine Transformationsregel sondern auch umfassende Transformationsprogramme mit automatisierten Anwendungstaktiken sowie parametrisierbare Methoden als schematische Lösungsansätze umfaßt. Ziel ist ein System, das in einer Bibliothek von wiederverwendbaren Bausteinen und Entwicklungen die gesammelte Expertise für die Entwicklung korrekter Software bereit hält.

Aufbauend auf den Erfahrungen des ESPRIT Projekts PROSPECTRA (siehe [Kri 90a, 91, KKLT 91, KKT 92] sowie den Sammelband [HK 93]) wurde im Bremer Teil des BMFT-Vorprojekts KORSO (siehe [Kri 94a, b]) ein einheitlicher semantischer Rahmen für Transformation und Verifikation entwickelt, der nicht nur den Beweis der Korrektheit einer Transformationsregel (analog zu einer Beweisregel) auf der Meta-Ebene erlauben soll, sondern auch eine Strukturierung durch Abstraktion von der unterliegenden speziellen Semantik/Logik der Objektsprache (vgl. die Multi-Logik Systeme in Abschnitt 5.1.3); Ziel ist, daß so nicht der gesamte Satz von Transformationsregeln für jede Objektsprache neu entwickelt und bewiesen werden muß, sondern nur die korrekte Instantiierung bzgl. einer speziellen Objektsprache.

Wiederverwendbarkeit von Entwicklungen

Im Vordergrund steht die Formalisierbarkeit von transformationellen Entwicklungen: Nur ein sehr leistungsfähiger Transformationsbegriff ermöglicht es, durch Abstraktion von der Transformations-Anwendungsstelle die Wiederverwendbarkeit von Entwicklungen mit dem Ziel des späteren "Nachspielens" für ähnliche Fälle und der Verallgemeinerung zu einer Entwicklungs-Methode zu unterstützen. Damit werden auch Entwicklungsprozesse wiederverwendbar (vgl. auch Abschnitt 5.3.5).

Transformations-Kalkül

Es wurde eine Transformations-Kalkül mit einem vereinheitlichten Transformationsbegriff entwickelt, der verallgemeinerte strukturelle Anwendung ("extended matching" [SW 93, 94, Shi 94a, b]), automatische Überprüfung kontext-sensitiver Vorbedingungen zur Steigerung der Effizienz sowie (higher-order-) Taktiken der Anwendung und Strategien der Auswahl bei mehrfacher Anwendbarkeit erlaubt [KLWS 93, KLSW 94, WS 94, BK 95]. Er bildet die Grundlage für die Abstraktion von einer konkreten Entwicklung zu einer schematischen Methode.

Meta-Entwicklung, effiziente Transformationsprogramme

Erfahrungen mit einem recht umfangreichen Satz von Transformationen zeigen, daß die Effizienz beim interaktiven Einsatz wichtig ist [HK 93]. Einerseits sollen Kontextbedingungen effizient durch inkrementelle Berechnung von Attributen in Regeln und taktischen Termen überprüft werden [Wolff 94, Mey 94], andererseits sind Transformationsregeln und geeignete Anwendungs-Taktiken, analog zu Spezifikationen, Ausgangspunkt für die korrekte Entwicklung von effizienten Transformations-Programmen in dem Transformations-Kalkül selbst. Bei der Entwicklung werden geeignete algebraische Eigenschaften der taktischen Kombinatoren und auch hier wieder Transformationen, auf einer Meta-Ebene, eingesetzt.

Normalform-Übersetzer

Ein kompaktes Transformationsprogramm, das aus mehreren Regeln mit automatisierter taktischer Anwendung besteht, nennen wir auch Übersetzer.

Eine erfolgreich angewandte Methode, Programme in Maschinencode oder sogar Hardware zu transformieren, ist der "Normalform-Ansatz" aus Oxford [HHS 93, HZ 93]. Die Idee ist, in der Programmiersprache eine Normalform zu definieren, die quasi direkt in der gewählten Maschinensprache oder Hardware zu realisieren ist. Anschließend sind Transformationen anzugeben, die ein beliebiges Programm der Programmiersprache in kompositioneller Weise in diese Normalform bringen. Die taktische Kombination dieser Transformationen liefert dann einen Übersetzer von Programmen in Maschinencode bzw. Hardware.

5.1.5. CASE Methoden

CASE (Computer Aided Software Engineering) Methoden mit unterstützenden Werkzeugen haben in den letzten 15 Jahren zunehmende Verwendung in der Software entwickelnden Industrie gefunden. Merkmale dieser Methoden sind die Kombination nicht-formaler Spezifikationselemente (natürlich-sprachlicher Texte) mit syntaktisch und zum Teil auch semantisch formalen Elementen (z.B. Datenbeschreibungssprachen, Datenflussdiagrammen), sowie eine Konzentration auf grafische Beschreibungstechniken. CASE Methoden werden daher häufig als semi-Formale Methoden klassifiziert.

Die ursprüngliche Motivation für CASE bestand in der Auffassung, daß semi-formale Beschreibungstechniken die mangelnde Präzision natürlich-sprachlicher Dokumente deutlich verbessern würden, ohne eine "Hemmschwelle" für Software-Entwickler darzustellen, wie sie etwa bei der Anwendung rein mathematischer Spezifikationssprachen festzustellen ist.

Nach anfänglicher CASE-Euphorie in den 80er Jahren ist heute ein deutliche Ernüchterung bei den Industrieanwendern eingetreten. Hierfür sind vor allem folgende Gründe zu nennen:

* Die von den CASE-Tool Vertreibern versprochenen Produktivitätssteigerungen (man sagte ursprünglich Steigerungen um etwa einen Faktor 5 voraus) sind drastisch geringer ausgefallen als erwartet (man spricht heute von etwa 15%-20%)

* Die Unzufriedenheit der Entwickler bei der Anwendung der Methoden is groß. Ein wichtige Ursache hierfür besteht darin, daß der semi-formale Charakter der Methoden an vielen Stellen der Spezifikation Eindeutigkeit suggeriert, in Wirklichkeit jedoch semantisch unscharf ist. Praktisch resultiert dies in Mißverständnissen zwischen den Entwicklern und zwischen Hersteller und Kunde, wenn diese das CASE-Dokument als Kommunikationsgrundlage verwenden.

* Die Anschaffungs- und Wartungskosten für etablierte CASE-Werkzeuge sind so hoch, daß die tatsächlich zu erwartende Produktivitätssteigerung erst sehr spät zu einem Return of Investment führt.

Mit dem Ziel einer Produktivitätsverbesserung werden heute mehrere objekt-orientierte Varianten der CASE-Methoden weiter verfolgt.

Um den Nachteil der unzureichenden Präzision zu überwinden, sind in den letzten Jahren in der Forschung Anstrengungen unternommen worden, CASE Methoden durch Kombination mit formalen Methoden zu semantisch eindeutigen Beschreibungssprachen zu machen. Für die bekanntesten CASE Methoden sind etwa folgende Arbeiten zu nennen:

* In [Br 91] wurden Bestandteile der CASE Methode SDL (Specification and Description Language) formalisiert. SDL wird hauptsächlich im Telekommunikationsbereich angewandt.

* Für Harels State-&Activitycharts wurden Semantiken in [HPPSS 87, KP 92, Hu 91] definiert. State-&Activitycharts werden heute zunehmend bei der Entwicklung von embedded Systems angewandt.

* Für Strukturierte Methoden (Strukturierte Analyse, Real-Time Analysis, Information Modelling, Strukturiertes Design, [DeM 79, HP 88, WM 85]) wurden Formalisierungen durch die Antragsteller entwickelt, vgl. Abschnitt 6. Strukturierte Methoden sind heute im industriellen Bereich die am weitesten verbreiteten CASE Verfahren.

Derzeit fehlen dem Anwender noch entscheidende Möglichkeiten, diese Forschungsergebnisse zu nutzen:

* Bei der Verwendung mehrerer Methoden im Projekt ist die Konsistenz der zugrunde liegenden Semantiken nicht nachgewiesen. Andererseits spielt die Methodenkombination eine wichtige Rolle, um die optimierte Durchführung einzelner Entwicklungsschritte zu ermöglichen.

* Die verfügbaren Semantiken können noch nicht auf die Randbedingungen des zu entwickelnden Zielsystems angepaßt werden. Damit wird die Spezifikation des Systems häufig sehr viel komplexer, als dies bei einer optimal angepaßten Spezifikationssemantik erforderlich wäre.

5.1.6. Bezug zu Vorgehensmodellen

Vorgehensmodelle enthalten Regeln für die systematische Abwicklung von Software-Entwicklungsvorhaben. Mit der Anwendung eines Vorgehensmodells und der damit verbundenen Standardisierung der Rollen, Arbeitsabläufe und Teilproduktinhalte werden vor allem folgende Zielsetzungen verfolgt:

* Optimierung des Entwicklungsprozesses

* Erhöhung der Prozeßqualität

* objektive Zertifizierbarkeit des Entwicklungsprozesses, etwa im Sinne der DIN ISO 9000 Teil 3 [ISO 9000].

Vorgehensmodelle werden heute als notwendige Vervollständigung von Software-Entwicklungsmethoden angesehen: Spezifikations- und Entwurfssprachen und zugehörige Werkzeuge können erst dann optimal genutzt werden, wenn die Arbeitsschritte für ihre Anwendung im Projekt sinnvoll festgelegt sind.

Für viele Anwendungen industrieller Software-Entwicklung ist heute das V-Modell [VMOD] des Bundesinnenministeriums akzeptierter Standard. Während im CASE-Bereich die Projektabwicklung auf Grundlage des V-Modells bereits von manchen Werkzeugen unterstützt wird, ist die systematische Anwendung formaler Methoden im Software-Entwicklungsprozeß bisher noch nicht ausreichend untersucht worden. Erst recht fehlt die Einbettung formaler Methodenanwendung in das V-Modell.

5.2. Entwicklungswerkzeuge für Formale Methoden

Es gibt eine Vielzahl von Werkzeugen zur Unterstützung der Entwicklung mit formalen Methoden; wir führen nur einige auf, die für dieses Projekt relevant sind. Wichtig ist, gerade bei dem Einsatz formaler Methoden, auch die allgemeine Unterstützung durch eine auf sie zugeschnittene Entwicklungsumgebung (s. u. Abschnitt 5.3).

5.2.1. Beweissysteme

Seit den 60er Jahren umfaßt die Forschung im Bereich Theorembeweisen Systeme für den interaktiven Aufbau von mathematischen Theorien, u.a. Theorien für die Programmkorrektheit. So wurde zum Beispiel 1969 die "Logic of Computable Functions" von Scott entwickelt. Dies veranlaßte Milner "Edinburgh LCF" zu entwickeln, einen Programmkorrektheitsbeweiser für diese Logik ([GMW 79], vgl. auch [Paul 87]). Der Beweiser basiert auf einer Menge von Deduktionsregeln. Er erlaubt dem Benutzer, Programme in einer taktischen Programmiersprache zu schreiben, um Beweise zu generieren. Dieses Paradigma wurde von mehreren neueren Beweissystemen wie HOL [Gor 88], Nuprl [Con 86], COQ [CH 88], PVS [ORS 92] und Isabelle [Paul 89] benutzt. Isabelle stellt eine besondere Klasse von Theorembeweisersystemen dar, die Logical Frameworks genannt werden. In ihnen kann man beliebige Logiken repräsentieren und Deduktionen darüber durchführen. Die Implementierung der Edinburgh LF-Typtheorie innerhalb von LEGO [LP 92] ist ein weiteres Beispiel für ein solches Logical Framework.

Zur Beweisunterstützung bei der Entwicklung korrekter Realzeitsysteme wird von verschiedenen Forschern mit dem System PVS [ORS 92] experimentiert (vgl. z.B. [CRSS 94]). PVS gehört zur Familie der interaktiven Beweiser, die auf Logik höherer Stufe basieren, hat jedoch auch effiziente Entscheidungsprozeduren für Arithmetik fest eingebaut. Diese Kombination wird bei der Implementierung des Duration Calculus in PVS [SS 94] und des Verifikations- und Entwicklungskalküls von Hooman [Hoo 94] ausgenutzt.

5.2.2. Transformationssysteme

Auch Transformation ist eine Form der Deduktion; Transformationsregeln sind allerdings meist komplexer als Beweisregeln, mit u.U. aufwendig zu überprüfenden Kontextbedingungen und der Möglichkeit der interaktiven Parametrisierung. Ein wesentlicher Unterschied zwischen einem Transformations-System und einem konventionellen Beweis-System wie Isabelle ist, daß die Basis des Deduktionsprozesses auf matching beruht und nicht auf unification und resolution beschränkt bleibt. Der Vorteil hiervon liegt darin, daß der Deduktionsprozeß stärker automatisch unterstützt werden kann, und zwar wesentlich über Permutationen und Sequenzen hinaus (wie im Falle von AC-matching). Dieser Aspekt erlaubt neben der eigentlichen interaktiven, durch Taktiken unterstützten Transformation den Zugang zu neuen Anwendungsfeldern, die vor allem im Übergang von interaktiven Beweisführungen zu taktisch unterstützten automatischen Beweisen bis hin zu (prototypischen) Übersetzern reichen.

Für eines der ersten Transformationssysteme, CIP-S ([B+ 85]), sowie der späteren Entwicklung PROSPECTRA ([HK 93]) stand vor allem formale Programmentwicklung auf der Basis von komplexen Transformationsregeln im Vordergrund. Die Integration von Matching-Techniken wurde hierbei noch nicht aufgegriffen. Dies gilt auch für Programm-Synthese Systeme wie KIDS (siehe [Smi 85, 91]), die ihnen in Hinsicht auf die Programm-Entwicklungsmethodik ähnlich sind. Beiden gemeinsam ist der Anspruch, auf der Basis von komplexen Regeln einen abstrakteren, benutzerfreundlicheren und wiederverwendbareren Stil der formalen Programmentwicklung darzustellen als die konventionellen a-posteriori-Verifikationsmethoden (z.B. mit LCF [Paul 87], KIV [HRS 91], oder [CO 92] basierend auf Isabelle [Paul 93]).

Die Ausdruckmöglichkeit von flexiblen Programm-Schemata ist bereits auf die Konstruktion von optimierenden Compilern angewandt worden, die den Übersetzungsprozeß als eine Abfolge von Normalformberechnungen bezüglich Programmtransformationen organisieren (vgl. OPTRAN [MWW 84], OPAL [GS 90]). Diese Systeme verwenden bereits raffiniertere Matching-Techniken, die allerdings auf einer ad-hoc Integration von Matching-Kombinatoren basieren. Im Bremer Ansatz können solche Kombinatoren (oder: Pattern-generierende Funktio-nen) durch rekursive Gleichungen definiert werden, wodurch mächtigere, auf die Objekt-Sprache abgestimmte Klassen von syntaktischen Schemata verwendet werden können ([SW 93, 94, Shi 94a, b]). Durch den darauf aufbauenden Transformationskalkül ist es möglich, effiziente Transformationstaktiken zu entwickeln.

Die Idee der transformationellen Programmentwicklung ist auch auf den Bereich der reaktiven oder kommuniziernden Systeme erweitert worden. So hat Back den ursprünglich nur für sequentielle Programme gedachten Refinement-Kalkül auf parallele und reaktive Programme ausgedeht [Bac90]. Back's Team arbeitet seit mehreren Jahren an einer Implementierungs des Refinement-Kalküls im logischen Rahmenwerkzeug HOL. Diese Implementierung ist jedoch nur von Experten nutzbar.

In Oldenburg wurde im Vorprojekt ProCoS der sogenannte MIX-Transformationskalkül entwickelt. Ausgangspunkt war dort ein CSP-artiges Kommunikationskonzept für reaktive Systeme. MIX umfaßt derzeit eine OCCAM-artige Programmiersprache und Konzepte von Action Systems und regulären Sprachen. MIX ist gut geeignet für die transformationelle Entwicklung kommunizerender, verteilter Systeme. Im Vorprojekt KORSO wurde der MIX-Transformationskalkül prototypartig in dem logischen Rahmenwerkzeug LAMBDA implementiert und an Fallstudien erprobt (siehe auch Abschnitt 6). Die Anwendung des entstandenen Transformationssystems verlangt jedoch genaue Kenntnisse des LAMBDA-Systems, die von außenstehenden Benutzern nicht erwartet werden können.

5.2.3. Spezielle Werkzeuge zum Erstellen und Überprüfen von Spezifikationen

Auch zum Erstellen und Überprüfen von Spezifikationen gibt es eine Vielzahl von Werkzeugen. Wir führen hier nur die speziellen Werkzeuge auf, mit denen (auch aufgrund ihrer Verbreitung und industriellen Relevanz) der Industriepartner Erfahrung hat und bei denen ein konkretes Interesse an Kombination und Integration in die UniForM Workbench besteht, die also für dieses Projekt relevant sind.

Generell ist heute der Standard, daß beim Erstellen von Spezifikationen bzw. Programmen die statische Semantik (Kontextbedingungen, Typen) überprüft werden. Ferner wird die Erstellung oft durch interaktives Arbeiten auf einer speziellen grafischen Darstellung der zugrunde liegenden abstrakten Syntax unterstützt (Struktureditieren von Texten, Formeln in mathematischer Notation, Strukturdiagrammen).

Z Type Checker

DST-Fuzz ist ein Syntax- und Typechecker für Z Spezifikationen [Spi 89]. Der von Spivey entwickelte Type-Checker wurde von DST in eine Entwicklungsumgebung integriert, die eine effiziente Entwicklung von Z-Spezifikationen in industriellen Projekten ermöglicht. Eine Erweiterung der Toolbox ermöglicht die symbolische Ausführung von Z-Spezifikationen mit dem Ziel der automatischen Testauswertung.

Validationsumgebungen für Formale Methoden

Für formale Spezifikationsteile werden heute von einigen CASE-Werkzeugen Simulationshilfen zur Validation der Spezifgikation zur Verfügung gestellt. Speziell für formale Z und CSP Spezifikationen sind solche Werkzeuge von DST, von JP Software-Consulting und Elpro LET als Prototypen entwickelt worden (siehe eigene Vorabeiten in Abschnitt 6).

VSE

VSE [VSE 93] wurde in einer Kooperation deutscher Firmen und Universitäten mit Förderung des Bundesamtes für Sicherheit in der Informationstechnik BSI entwickelt. Mit dem Ziel, vor allem die Entwicklung sicherheits-relevanter Systeme zu unterstützen, ermöglicht VSE mit der formalen Spezifikationssprache VSE-SL die Spezifikation und Verifikation sequentieller Systeme auf Grundlage des KIV-Systems. Weiterhin wurde das CASE-Tool EPOS in VSE integriert. Es fehlt jedoch jegliche semantische Ankopplung an verteilte Realzeitsysteme.

KIV

Das KIV [Rei 94] System ist erfolgreich bei der Entwicklung und Verifikation sequentieller Anwendungen mit Betonung der Verfeinerung Abstrakter Datentypen eingesetzt worden; in diesem Bereich (der in diesem Projekt eher am Rande liegt) ist es ein Kandidat für künftige Integrationen in der Workbench.

B-Tool-Kit

Das B-Tool-Kit ist ein von Abrial entwickeltes Spezifikations- und Verifikationswerkzeug auf Grundlage der B-Methode, welche Spezifikation und Refinement abstrakter Maschinen unterstützt. Das Werkzeug unterstützt vor allem die Verifikation von Refinement-Beweisen. Im Gegensatz zur Z Notation, die in Kombinatiuon mit dem Duration Calculus heute auch zur Beschreibung von Realzeitsystemen eingesetzt wird, dient das B-Tool-Kit nur von Systemen ohne Zeit mit einem Schwerpunkt auf sequentiellen Systemen; jegliche Spezifikation von kommunizierenden Systemen muß über eine explizite Kodierung der Semantik realisiert werden.

RAISE

RAISE wurde von Computer Resources International entwickelt. Das Werkzeug implementiert die Sprache RSL, die formale Spezifikationselemente zur Beschreibung sequentieller Systeme (VDM-verwandt, mit Erweiterungen für Modularisierung) mit Sprachmitteln zur Spezifikation paralleler Systeme (CSP-verwandt) verbindet. Ein Beweisassistent zur Verifikation von RSL-Spezifikationen ist integriert. Aus praktischen Anwendungen hat sich ergeben, daß der Beweisassistent für die Mächtigkeit der RSL Sprache noch zu schwach und damit für die industrielle Anwendung nicht geeignet ist.

FDR (Model Checker für CSP-Refinement)

FDR von Formal Systems Ltd. ist ein Modelchecker für CSP-Spezifikationen. FDR ermöglicht die Verifikation von Refinement-Aussagen im Failures/Divergences Modell sowie im Trace Modell von CSP. Die Beschränkung auf eine Teilmenge des vollen CSP-Sprachumfanges ermöglicht vollständiges Modelchecking, d.h. Verifikation aller möglichen Zustände des zugrundeliegenden Transitionssystems. Damit können die Refinement-Beweise vollständig ohne Interaktion mit dem Benutzer ausgeführt werden.

CASE Tools

CASE-Tools sind zahlreich auf dem Software-Markt vertreten, deshalb werden hier keine Werkzeuge explizit genannt. Alle o.g. CASE-Methoden sind heute durch mindestens ein Werkzeug im industriellen Umfeld anwendbar.