• Keine Ergebnisse gefunden

Bei der Überarbeitung der formalen Semantikdefinition durch die in diesem Kapitel beschrie-benen Werkzeuge wurden eine Reihe von Fehlern gefunden und behoben. Tabelle 8 gibt eine Übersicht über die Art und Anzahl dieser Fehler.

Tabelle 8: Fehler in der Semantikdefinition

Fehlerart Fehleranzahl in

Teil F.2

Fehleranzahl in Teil F.3

Syntaxfehler 352 189

Typfehler 88 314

Falschschreibungen von Bezeichnern 115 80

Die Zahl der Fehler in jeder Fehlerklasse lässt sich in vielen Fällen aus der Art der Formali-sierung schließen:

• Syntaxfehler

Syntaxfehler entstehen bei falscher Verwendung der Formelsprache (Klammerfehler, feh-lende Kommata u.ä.). Die Zahl der Fehler steht in Relation zur Größe des jeweiligen Teils:

der Teil F.2 ist ungefähr doppelt so groß wie der Teil F.3.

• Typfehler

Typfehler entstehen bei Verletzung des Typsystems der Werkzeuge. Das Verhältnis der Feh-ler lässt sich mit den verwendeten Werkzeugen begründen: der AsmL-CompiFeh-ler führt einen wesentlich strikteren Typtest aus als Kimwitu++ und als der C++-Compiler. Das legt die Vermutung nahe, dass im Teil F.2 weiterhin eine große Zahl von Typfehlern enthalten sind.

• Falschschreibungen von Bezeichnern

Auch hier lässt sich das Verhältnis der Fehlerzahlen teilweise aus der Größe der jeweiligen Teile begründen. Bei sauberer Verwendung der Werkzeuge, insbesondere der Querverweise in Microsoft Word, hätten diese Fehler überhaupt nicht auftreten können, da jede Verwen-dung eines Bezeichners ein Verweis auf seine Definition sein müsste. Dass trotzdem Fehler dieser Art aufgetreten sind, liegt zum Teil an der Unhandlichkeit der Eingabe von Querver-weisen, zum anderen daran, dass diese Technik sich nicht auf alle Bezeichner anwenden ließ (siehe Abschnitt 4.2.2).

• Kleinere semantische Fehler

Diese Fehler sind bei der Abarbeitung von SDL-Spezifikationen entdeckt worden; das tat-sächlich beobachtete Verhalten weicht vom gewünschten ab. Die entdeckten Fehler in der dynamischen Semantik waren vor allem systematische Fehler in der Abarbeitung von Tran-sitionen: der gleiche Fehler musste an verschiedenen Stellen korrigiert werden.

• Falsche Verwendung der abstrakten Syntax

Da die abstrakte Syntax 0 nur in Teil F.2 verwendet wird, ist in diesem Teil die Zahl der Fehler dieser Klasse höher.

• Neue Hilfsfunktionen

Zur Behebung anderer Fehler mussten unter Umständen neue Funktionen eingeführt wer-den. Die Mehrzahl dieser Fehler lag in der dynamischen Datentypsemantik, die Funktionen verwendet hat, ohne eine Definition für sie anzugeben.

• Probleme mit der abstrakten Syntax 0

Diese Fehler können naturgemäß nur in Teil F.2 auftreten. Ihre Lösung steht noch aus. Zu diesen Fehlern gehört beispielsweise das in Beispiel 9 beschriebene Problem.

• Schwere semantische Fehler

Fehlende oder überflüssige Parameter 159 34

Kleinere semantische Fehler 57 227

Falsche Verwendung der abstrakten Syntax 144 83

Undefinierte Funktionen 32

Probleme mit der abstrakten Syntax 0 4

Schwere semantische Fehler 12 3

Tabelle 8: Fehler in der Semantikdefinition

Fehlerart Fehleranzahl in

Teil F.2

Fehleranzahl in Teil F.3

Zu diesen Fehlern gehört die unvollständige oder falsche Formalisierung. Bisher sind mehr Fehler dieser Art in Teil F.2 aufgefallen, weil die Beseitigung dieser Fehler die Vorausset-zung dafür ist, dass Spezifikationen überhaupt von Teil F.3 verarbeitet werden können. Bei-spiele für behobene Fehler sind All-Quantifikationen über unendliche Domänen oder die unvollständige Realisierung des Modells für entfernte Prozeduren.

9.8 Fazit

Zur Umsetzung der formalen SDL-Semantik in ein Computerprogramm wurden zahlreiche ver-schiedene Werkzeuge eingesetzt. Nur durch den Einsatz dieser spezialisierten Werkzeuge konn-ten die Aspekte der formalen Semantik adäquat und mit vertretbarem Aufwand auf ein Programm abgebildet werden. Leider führt die Zahl dieser Übersetzungsschritte dazu, dass der gesamte Übersetzungsprozess schwer verständlich wird und zur Pflege der Werkzeuge eine be-achtliche Einarbeitungszeit nötig ist.

Die Entwicklung der Werkzeuge erfolgte im Wechselspiel mit der Definition der formalen Semantik: Sofern die Werkzeuge korrekt arbeiteten, zeigten sie oft Fehler in der formalen De-finition an. Wurden diese Fehler behoben, mussten die Werkzeuge weitere Bearbeitungsschritte ausführen, die dann Fehler in den Werkzeugen selbst aufdeckten.

Trotz dieser Probleme gibt es keine Alternative zum gewählten Entwicklungsweg: Ohne Werkzeugunterstützung wären die Fehler in der formalen Semantikdefinition nie entdeckt wor-den. Alternative Strategien bestanden lediglich punktuell: Beispielsweise ist es denkbar, dass die Wahl eines anderen Parsergenerators einige der Einschränkungen der konkreten Syntax nicht erforderlich gewesen wären. Da keiner der Versuche, gewisse Werkzeuge durch andere auszutauschen, zu sichtbaren Erfolgen führte, wurde auch keine dieser Alternativen weiter ver-folgt.

10 Zusammenfassung, Vergleich und Ausblick

Die objektorientierten Datentypkonzepte von SDL-2000 stellen eine wesentliche Weiterent-wicklung gegenüber früheren Sprachversionen dar. Mit dieser Arbeit erhalten sie eine formale Semantik, mit der die Interpretation der Datentypen eines SDL-Systems unzweideutig wird.

Die formale Semantikdefinition von SDL beruht auf dem Kalkül der Abstract State Machi-nes (ASM). Mit diesem Formalismus werden allerdings vorwiegend die aktiven Komponenten eines SDL-Systems, also die SDL-Agenten beschrieben. Zur Integration der passiven Datenty-pen stellt die Arbeit eine funktionale Schnittstelle vor, deren Funktionen das Verhalten der Da-tentypen seiteneffektfrei beschreiben. Die Funktionen der Schnittstelle werden in die ASM-Programmdefinition integriert. So ist es möglich, die Datentypsemantik separat von der Seman-tik von Agenten zu betrachten und weiterzuentwickeln.

Ursprünglich wurde die Datentypschnittstelle auch mit dem Ziel eingeführt, den Datentypteil durch einen anden (etwa den von C++ oder Java) ersetzen zu können. Diese Arbeit zeigt aber, dass eine solche Ersetzung unter Beibehaltung der Schnittstelle nahezu unmöglich sein wird:

Zur korrekten Abbildung aller Aspekte der Datentypsemantik wurde die Schnittstelle mehrfach geändert, und weist nun Funktionen auf, die eigentlich nur für die SDL-Datentypsemantik sinn-voll sind. Damit erweisen sich die in [Sch02] vorgestellten Konzepte als einzig praktikable Stra-tegie zur Integration anderer Datentypsysteme in SDL.

Aufgrund des Umfangs der formalen Semantikdefinition lässt sich diese nicht leicht auf ein-mal erfassen. Um die Semantikdefinition trotzdem verständlich zu machen, ist sie modular ge-staltet: Für jeden Aspekt von SDL (wie etwa für jeden vordefinierten Datentyp) wird ein separater Satz von Formeln definiert.

Leider ist es immer noch nicht einfach, den Zusammenhang zwischen den verschiedenen Teilen der Semantikdefinition zu verstehen. Hierbei helfen Werkzeuge: Wenngleich die ver-wendeten Kalküle theoretisch eine abarbeitbare Semantikdefinition erlauben, wird diese erst durch Werkzeuge auch praktisch abarbeitbar.

Mit Hilfe von Werkzeugen wurden zahlreiche Fehler in der formalen Sprachdefinition ent-deck, indem sie beispielsweise die inkorrekte Verwendungen von Funktionen feststellen oder Diagnoseausgaben bei der Abarbeitung einer SDL-Spezifikation liefern.

Neben dem Einsatz von Werkzeugen zur Entwicklung der formalen Sprachdefinition sind die Werkzeuge insbesondere für ihre Verwendung in der Praxis erforderlich: SDL-Anwender müssen sich nicht detailliert mit den Kalkülen und der Strukturierung der Semantikdefinition auseinandersetzen. Sie können formale Semantik als black box betrachten, an sie eine SDL-Spe-zifikation übergeben und die Abarbeitungsergebnisse studieren.

Obwohl bisher diese Werkzeuge nicht tatsächlich von Praktikern verwendet werden, konnte doch an ausgewählten Beispielen demonstriert werden, wie beginnend mit der textuellen SDL-Spezifikation vollautomatisch eine ausführbare Version dieser SDL-Spezifikation generiert und diese dann ausgeführt wird.