Model-Checking von UML Modellen mit dem HUGO/RT System

Transcription

Model-Checking von UML Modellen mit dem HUGO/RT System
Institut für Informatik
Arbeitsgruppe Softwaretechnik
Warburger Str. 100
33098 Paderborn
Model-Checking von UML Modellen
mit dem HUGO/RT System
Ausarbeitung
im Rahmen des Seminars
Analyse, Entwurf und Implementierung
zuverlässiger Software
von
Tobias Koch
Paderwall 5
33102 Paderborn
betreut durch
Daniela Schilling
Paderborn, Februar 2004
Inhaltsverzeichnis
1.
2.
3.
4.
5.
6.
7.
8.
9.
Einleitung ....................................................................................................... 2
Beschreibung des „Generalized Railroad Crossing“-Problems ..................... 3
Modellierung des „Generalized Railroad Crossing“-Problems ..................... 4
Umwandlung von UML State Machines in Timed Automata ....................... 8
Verifikation des Modells mit HUGO/RT....................................................... 9
Laufzeitverhalten.......................................................................................... 12
Einschränkungen des HUGO/RT-Systems .................................................. 12
Zusammenfassung und Ausblick ................................................................. 13
Quellen ......................................................................................................... 14
1
1. Einleitung
Der Entwurf sicherheitskritischer Software stellt hohe Anforderungen an die Korrektheit des
entstehenden Systems. Ein Entwurfsfehler kann später weitreichende und mitunter
katastrophale Konsequenzen haben. Da das Testen und die Simulationen eines Systems nicht
alle Fehler und Schwächen der Software aufdecken kann, bieten solche Verfahren beim
Entwurf sicherheitskritischer Systeme keine akzeptable Lösung. Erst die zusätzliche formale
Verifikation des Systems, z.B. durch Model Checking, kann die gewünschte Sicherheit bieten.
Beim Model Checking wird zunächst ein Modell der zu entwerfenden Software erstellt.
Nachfolgend werden die Anforderungen beschrieben, die das System zu erfüllen hat, und das
Modell wird dahingehend überprüft, ob es diese Anforderungen erfüllt.
Das in dieser Arbeit behandelte Tool HUGO/RT soll diesen Model Checking-Vorgang
unterstützen. Hierzu übersetzt HUGO/RT ein UML-Modell in sogenannte Timed Automata,
die anschließend durch den Model Checker UppAal verifiziert werden.
Um das dynamische Verhalten eines Systems zu beschreiben, stehen in UML hauptsächlich
zwei verschiedene Betrachtungsweisen offen. Auf der einen Seite werden die
Handlungsabläufe der Software durch übergangsbasierte State Machines beschrieben, die
Reaktionen und Abfolgen von Systemzuständen darstellen. Andererseits kann ein
exemplarisches Verhalten des Systems in bestimmten Situationen durch nachrichtenbasierte
Sequenz-Diagramme beschrieben werden. Dieses kann sowohl ein korrektes Verhalten der
Software in bestimmten Szenarien darstellen als auch unerwünschte oder fehlerhafte
Reaktionen und Systemzustände umschreiben. Um die Zuverlässigkeit eines Systems
sicherzustellen, lassen sich nun mithilfe von HUGO/RT beide Darstellungsweisen
verifizieren.
Ich werde im Verlauf dieser Arbeit zunächst ein exemplarisches Problem vorstellen.
Daraufhin werde ich die Modellierung des Problems als UML-State Machines beschreiben
und die durch HUGO/RT vorgenommene Umwandlung eines UML-Modells in Timed
Automata erläutern. Nachfolgend werde ich näher auf die Verifikation des exemplarischen
Modells eingehen und das Laufzeitverhalten des HUGO/RT-Systems betrachten. Abschließen
möchte ich mit einer Übersicht der Einschränkungen des gegenwärtig im Prototyp-Stadium
befindlichen HUGO/RT-Tools sowie einer Zusammenfassung und einem Ausblick.
2
2. „Generalized Railroad Crossing“
Das „Generalized Railroad Crossing”-Problem beschreibt ein System zur sicheren Regelung
eines beschrankten Bahnübergangs. Hierbei handelt es sich um die überwachten Abschnitte
von k Bahnlinien (vgl. Abb. 1). Sobald ein Zug auf einer Bahnlinie in diesen Abschnitt
eintritt, muss dafür gesorgt werden, dass die Schranken des Bahnübergangs sich schließen.
Abb. 1 „Generalized Railroad Crossing”-Problem [1]
Um die sichere Passage eines Zuges zu gewährleisten, ist die strikte Einhaltung einiger
Zeitabläufe notwendig. Sei die Zeitspanne vom Eintritt (A) eines schnellstmöglichen Zuges in
den kritischen Bereich der Bahnlinien bis zum Erreichen der Beschrankung durch diesen Zug
mit ta bezeichnet. Nun muss sichergestellt sein, dass dieser Zeitraum ausreicht, um den
Schranken den Befehl zu erteilen sich zu schließen. Die maximale Zeitspanne, nach der ein
Zug am Bahnübergang angelangt (Zeitpunkt D), wird mit Ta bezeichnet.
Die Zeitspanne, die benötigt wird, um die Schranken aus der voll geöffneten Stellung in eine
geschlossene Position zu bringen, sei mit gd bezeichnet. Rechnet man eine maximale
Verzögerung ∆ durch das Netzwerk zwischen Eintrittssensor und Beschrankung hinzu, so
erhält man gd+. Um die Beschrankung aus dem geschlossenen Zustand in die geöffnete
Position zu überführen, sind mindestens gu Zeiteinheiten notwendig. Zuzüglich der
maximalen Verzögerung ∆ erhält man hier die mit gu+ bezeichnete Zeitspanne. Hieraus ergibt
sich unter Berücksichtigung der Eventualität, dass die Schranken bei Eintritt des Zuges in den
kritischen Bereich bereits geschlossen sind, der Zeitpunkt B, zu dem es noch möglich ist, die
Schranken komplett zu öffnen und sie anschließend wieder zu schließen. Der Befehl zum
Schließen der Beschrankung muss spätestens zum Zeitpunkt C erteilt werden, damit der
schnellstmögliche Zug die Kreuzung sicher passieren kann.
Nach weiteren tg Zeiteinheiten hat der schnellste Zug den Bahnübergang gekreuzt und wieder
freigegeben. Für die gleiche Strecke benötigt der langsamste Zug die Zeitspanne Tg, bevor er
die Markierung E passiert hat.
Alle Zeitspannen und Zeitpunkte sind in der nachfolgenden Abbildung 2 aufgeführt.
Abb. 2 Das GRC-Modell [1]
3
3. Modellierung des „Generalized Railroad Crossing“-Problems
Zur Modellierung eines zu verifizierenden Software-Systems werden von den Entwicklern
des HUGO/RT-Prototyps die beiden UML-Editoren „Poseidon for UML“ und ArgoUML
empfohlen. Beide gehen auf eine gemeinsame Entwicklungsbasis zurück und unterstützen
daher den Export entworfener Systeme im .zargo-Format.
Zunächst entwirft man die State Machines der Objekte „Track1“ und „Track2“ (vgl. Abb. 3).
Diese repräsentieren zwei Bahnlinien, welche die kritische Passage „Gate“ kreuzen. Sie
bestehen aus den drei Zuständen „NoTrain“, „Approach“ und „Crossing“.
Abb. 3 State Machine eines „Track“-Objektes
Übergangsbegleitende Invarianten der Form [c >= t] repräsentieren hierbei die zeitgesteuerten
Übergänge zwischen den Zuständen. „c“ steht in diesem Fall für eine Uhr, die bei Betreten
des überwachten Bahnabschnitts durch einen Zug auf 0 gesetzt wird. Fortan wird diese Uhr in
einem Zustand, dessen ausgehende Übergänge durch eine Zeitinvariante begleitet sind,
überwacht. Verharrt die State Machine solange in einem Zustand bis die Uhr die TimerVariable „t“ überschreitet, so schaltet die State Machine automatisch in den folgenden
Zustand. Eine solche Überschreitung einer Zeitvariablen kann beabsichtigt sein oder
beispielsweise durch das Ausbleiben einer Synchronisationsnachricht, deren Eintreffen die
State Machine zum Verlassen des aktuellen Zustands zwingen würde, erfolgen.
Nach dem Eintritt eines Zuges in den überwachten Bereich wechselt die State Machine aus
dem Startzustand „NoTrain“ in „Approach“, wobei die Uhr „c“ auf 0 gesetzt wird und eine
Nachricht über den Eintritt an das „Controller“-Objekt versandt wird. Nach Ablauf der
Zeitspanne „t5“ wechselt die State Machine von „Approach“ in den Zustand „Crossing“ und
setzt die Uhr erneut zurück. Überschreitet die Uhr nun die Timer-Variable „t4“, so muss der
Zug den kritischen Bereich durchfahren haben und die State Machine der Bahnlinie kehrt in
den Zustand „NoTrain“ zurück. Hierbei wird der State Machine „Controller“ eine Nachricht
über das Verlassen des kritischen Abschnitts durch den Zug gesandt.
4
Die State Machine „Gate“ verwaltet die Schranken im kritischen Bereich des Bahnabschnitts.
Der Startzustand des Objektes ist „Open“, die Schranken sind geöffnet für den kreuzenden
Straßenverkehr (vgl. Abb. 4).
Abb. 4 State Machine des „Gate“-Objektes
Empfängt „Gate“ nun den Befehl „closeGate“, so wechselt die State Machine in den Zustand
„Closing“, wo sie für die Dauer von „gd“ verweilt. Nach Ablauf dieser Zeitspanne folgt der
Zustand „Closed“, der signalisiert, dass die Schranken geschlossen und der kritische
Abschnitt der Bahnlinie frei zur Durchfahrt des Zuges ist. In diesem Zustand verharrt die
State Machine bis sie das Signal „openGate“ erhält, woraufhin sie in den Zustand „Opening“
wechselt. Hier wartet das System für die Zeitdauer „gu“, mit der die Zeitspanne, welche für
das Öffnen der Schranken benötigt wird, beschrieben wird. Nachfolgend wechselt die State
Machine in den Ursprungszustand „Open“.
Für die Überwachung der Bahnlinien sowie die Kontrolle der Schranken ist das Objekt
„Controller“ zuständig. Es handelt sich hierbei um eine nebenläufige Composite State
Machine, die aus mehreren State Machines besteht (vgl. Abb. 5). Diese können unabhängig
voneinander ihre Zustände wechseln.
Abb. 5 Composite State Machine des „Controller“-Objektes
Zunächst ist für jede Bahnlinie eine Kontrolle vorhanden, in diesem Beispiel mit „Control1“
und „Control2“ bezeichnet. Startzustand dieser Kontrollen ist der Zustand „Away1“
5
respektive „Away2“. In diesen Zuständen verharrt das System bis ein Zug in den überwachten
Abschnitt der Bahnlinie eintritt, woraufhin das „Track“-Objekt die Nachricht „enter“ an die
Kontrolle versendet. Diese reagiert darauf, indem die entsprechende „Control“-State Machine
den Zustand „Away“ verlässt und in den Zustand „Entered“ wechselt. Hier verbleibt das
System für die Zeitdauer „d1“, um anschließend in den Zustand „Nearby“ zu schalten, was
wiederum repräsentiert, dass der Zug sich nun dem kritischen Abschnitt der Strecke nähert.
Zu diesem Zeitpunkt reicht die verbleibende Zeit bis zum Eintreffen des Zuges am
Bahnübergang noch aus, um die Schranken komplett zu öffnen und wieder zu schließen
einschließlich der benötigten Zeiten für die Nachrichtenübermittlung zwischen den Objekten.
Bei dem Wechsel vom Zustand „Entered“ nach „Nearby“ wird die Variable „trains“, die die
Anzahl der momentan im Bereich des Bahnübergangs befindlichen Züge hält, inkrementiert.
Den Zustand „Nearby“ verlässt die State Machine erst nach weiteren „d2“ Zeiteinheiten.
Während des Zustandwechsels schickt die State Machine das Kommando „doClose“ an sich
selbst. Die Zeitabstände zwischen den Statuswechseln reicht aus, um die Nachricht
abzusetzen und die Schranken vollständig zu schließen, bevor der erste Zug im kritischen
Bereich der Beschrankung eintrifft. Der nun erreichte Zustand der State Machine wird mit
„Critical“ bezeichnet. Diesen Zustand verlässt das System nun wiederum erst, wenn „Track“
meldet, dass der Zug den Abschnitt verlassen hat oder falls der Eintritt eines weiteren Zuges
in den überwachten Bereich gemeldet wird. In diesem Fall wechselt die State Machine in den
Zustand „Entered“. Die Variable „trains“ wird ebenfalls dekrementiert, da der erste Zug den
kritischen Abschnitt verlässt bevor der zweite ihn erreicht. Verlässt ein Zug ganz regulär den
überwachten Bereich, ohne dass ein weiterer Zug in diesen hineinfährt. wird mittels der
Nachricht „exit“ mitgeteilt, dass der Zug den Bahnübergang passiert hat. Die Variable
„trains“ wird dekrementiert und die State Machine schickt die Nachricht „doOpen“ an das
„Controller“-Objekt. Der nachfolgende Zustand ist nun wieder „Away“.
Die Kommunikation zwischen den „Control“-Objekten, die die Bahnabschnitte überwachen
(hier „Control1“ und „Control2“) und dem „Gate“-Objekt, das die Schranken repräsentiert,
stellt ein „ControlGate“-Objekt her, das ebenfalls zur Composite State Machine „Controller“
gehört. Startzustand von „ControlGate“ ist „Open“. Empfängt das System nun die Nachricht
„doClose“, welche von den „Control“-Objekten beim Wechsel vom Zustand „Nearby“ zu
„Critical“ gesendet wird, so verlässt die State Machine „Open“, um in den Zustand „Closed“
überzugehen. Hierbei wird die Nachricht „closeGate“ an die State Machine „Gate“ gesendet.
Den Zustand „Closed“ verlässt „ControlGate“ auf die Nachricht „doOpen“ hin wieder, welche
von den „Control“-Objekten beim Verlassen vom Zustand „Critical“ verschickt wird.
Welchen Zustand die State Machine „ControlGate“ als nächstes annimmt, ist abhängig von
der Variable „trains“. Diese Fallunterscheidung wird durch einen sogenannten junction
pseudo state ermöglicht. Befinden sich noch weitere Züge im überwachten Abschnitt der
Bahnstrecke, so hat der guard „trains“ einen Wert größer 0 und „ControlGate“ kehrt
umgehend in den Zustand „Closed“ zurück, um ein weiteres „doOpen“-Signal abzuwarten.
Haben hingegen alle Züge den überwachten Bereich verlassen, hat „trains“ den Wert 0 und
„ControlGate“ kehrt in den Ausgangszustand „Open“ zurück. Hierbei wird das Signal
„openGate“ an das „Gate“-Objekt übermittelt.
6
Um nun das System zu verifizieren, kann eine exemplarische Situation von System-Abläufen
durch eine Kollaboration, dargestellt in einem Sequenz-Diagramm, beschrieben werden.
Abbildung 6 zeigt ein sicheres Verhalten des Systems.
Abb. 6 Sicheres Systemverhalten
Ausgehend von „track1“ wird eine Nachricht mit dem Inhalt „Enter1“ an das „Controller“Objekt „ctl“ gesandt. Kurz darauf sendet auch „track2“ eine Nachricht, die besagt, dass ein
Zug in den überwachten Abschnitt von „Track2“ eingetreten ist. Nach der internen
Reaktionszeit von „ctl“, bedingt durch die Zustandswechsel, sendet das „Controller“-Objekt
die Nachricht „closeGate“ an das „Gate“-Objekt „gate“.
7
4. Umwandlung von UML State Machines in Timed Automata
Um das nun entworfene System aus UML State Machines zu verifizieren, muss HUGO/RT
diese zunächst in die für UppAal verständlichen Timed Automata übersetzen. Dies lässt sich
am einfachsten an einem Beispiel erläutern. Gegeben sei die in Abbildung 7 dargestellte
UML-State Machine.
Abb. 7 Exemplarische State Machine
Zunächst wird der Startzustand der State Machine in eine entsprechende Location eines
Timed Automaton übertragen. Aus den beiden State Machine-Startzuständen „A“ und „C“
wird die Location „AC“ generiert, die beide Zustände repräsentiert. Auf Empfang der
Nachricht „b“ reagiert die State Machine, falls „x>0“gilt, mit einer Transition in den Zustand
„E“ und verharrt weiterhin in Zustand „C“. Dies wird in einem übersetzten Timed Automaton
durch die Location „EC“ dargestellt. Der Wechsel nach „EC“ wird begleitet durch den guard
„x>0“. Wird die Bedingung hingegen nicht erfüllt, so wechselt die State Machine in den
Zustand „G“. Diese Transition wird ebenso in den Timed Automaton eingefügt. Hierbei wird
jedoch die Negation der Bedingung „x>0“ als guard eingefügt, um die Eindeutigkeit der
Systemreaktion auf den Empfang der Nachricht „b“ zu gewährleisten.
Der Wechsel der State Machine in den Zustand „F“ nach Erhalt der Nachricht „a“ wird
ebenfalls direkt übersetzt. Die Transition der State Machine aus dem Zustand „A“ nach „B“
bzw. von „C“ nach „D“ muss in mehreren Schritten erfolgen, da der entstehende Timed
Automaton pro Wechsel einer Location lediglich eine Aktion ausführen kann. Hierzu werden
die sogenannten committed locations eingeführt, die der Timed Automaton zwar betreten darf,
die er jedoch umgehend wieder verlassen muss. So wird eine erste committed location
hinzugefügt um auf den Empfang der Nachricht „a“ zu reagieren. Beim Wechsel zur nächsten
committed location wird die Variable „x“ inkrementiert. Nachfolgend wird die Nachricht „b“
versandt und die Empfangsbestätigung abgewartet. Erst dann wechselt der Timed Automaton
in die Location „BD“.
Der aus der Übersetzung resultierende Timed Automaton ist in der Abbildung 8 dargestellt.
Abb. 8 Aus der in Abb. 7 dargestellten State Machine erzeugter Timed Automaton
8
5. Verifikation des Modells mit HUGO/RT
Um das entwickelte Modell zu verifizieren, bestehen zwei Möglichkeiten:
1. Das Modell wird gegen eine exemplarische Situation, die in einem SequenzDiagramm modelliert wird, verifiziert.
2. Es werden Anfragen mit Aussagen über die Zustandskonfigurationen des Modells
gestellt.
Gegenwärtig ist es mit den beiden empfohlenen UML-Editoren „Poseidon for UML“ und
„Argo/UML“ leider nicht möglich, Sequenz-Diagramme zu erstellen. Eine Modifikation
gegebener Diagramme ist mit einigen älteren Versionen der Software „Argo/UML“ stark
eingeschränkt möglich.
Nach Aufruf des HUGO/RT-Prototypen mit Übergabe einer .zargo-Projektdatei übersetzt die
Software zunächst die enthaltenen Zustands-Diagramme, wie in Abschnitt 4 beschrieben, in
die dem Model Checker UppAal verständlichen Timed Automata. In der Projektdatei
enthaltene Sequenz-Diagramme werden von HUGO/RT in UppAal-Anfragen übersetzt, wobei
getestet werden soll, ob ein im Sequenz-Diagramm zuletzt erreichter Zustand auch im
gegebenen Modell erreicht werden kann.
In Abb. 9 ist ein solches Sequenz-Diagramm des Systems zu sehen.
Abb. 9: Sequenz-Diagramm eines sicheren Systemverhaltens
Die zu verwendende Syntax besteht aus einer Zahl, welche die Reihenfolge der Interaktionen
zwischen den Objekten kennzeichnet. Darauf folgt der Sende-Zeitpunkt der Nachricht.
Getrennt durch einen Strich „-“ wird nun der Empfangs-Zeitpunkt spezifiziert, gefolgt vom
Inhalt der Nachricht. Sollte ein Zeitpunkt nicht angegeben werden können oder müssen, so
kann der entsprechende Marker entfallen. Alle Objekte müssen zudem die zu testenden
Zeitinvarianten als „tagged value“ mit dem Namen „timing“ enthalten.
Angenommen, die Zeitinvariante im dargestellten Diagramm sei „b-a <= ta“. Dies bedeutet
anders ausgedrückt, dass die Zeitspanne zwischen dem Empfang der „Enter1“-Nachricht (zum
Zeitpunkt „a“) und dem Versenden der „closeGate“-Nachricht (zum Zeitpunkt „b“) kleiner
oder gleich ta ist. ta bezeichnet dabei die Zeitspanne, die ein schnellstmöglicher Zug bis zum
Erreichen des kritischen Bereiches benötigt. Testet man das in Abb. 9 dargestellte Diagramm
mit dieser Zeitinvariante „b-a <= ta“, so liefert die an UppAal gestellte Anfrage das Resultat:
Property 1 (line 1) is satisfied.
9
Ändert man nun die Zeitinvariante in „b-a >= ta“, so erhält man als Antwort auf die UppAalAnfrage:
Property 1 (line 1) is NOT satisfied.
Diese Rückmeldung wird nachvollziehbar, wenn man sich klarmacht, dass diese Invariante
die dargestellte Kollaboration das zugrundeliegende Modell verletzen würde. Die Ursache
hierfür liegt darin begründet, dass zwischen dem Eintritt eines Zuges in den kritischen
Bereich und dem Befehl „closeGate“ mehr Zeiteinheiten als die minimale Zeitperiode, die ein
schnellstmöglicher Zug für die Strecke benötigen würde, liegen.
Ein anderes Beispiel für eine verletzende Kollaboration zwischen den Objekten des Systems
wäre ein „openGate“-Befehl, der ohne Nachricht über den Austritt des Zuges aus dem
kritischen Bereich oder einen Timeout, der dieselbe Schlussfolgerung zulässt, erteilt wird. Der
übersetzte Timed Automaton eines solchen Sequenz-Diagramms ist in Abb. 10 dargestellt.
Abb. 10: Timed Automaton eines fehlerhaften Systemverhaltens
Korrekterweise lautet auch die Antwort des Model Checkers auf die Anfrage:
Property 1 (line 1) is NOT satisfied.
UppAal überprüft bei dieser Anfrage, ob ein Pfad auf dem Zustandsbaum existiert, der den
Zustand seq_8 erreicht. Dieser Zustand stellt in diesem Fall den letzten erreichten Zustand der
im Diagramm (vgl. Abb. 9) beschriebenen Kollaboration dar. Da dieser Zustand jedoch nicht
erreicht werden kann, da dies die Modellanforderungen verletzen würde, kann die Eigenschaft
nicht erfüllt werden.
Diesem Beispiel folgend können auch eine Reihe anderer Anfragen gestellt werden, um
bestimmte Zustände des Systems zu verifizieren. Eine Auswahl der zur Verfügung stehenden
Formeln ist in Abb. 11 abgebildet.
10
Abb. 11: Einige der in UppAal zur Verfügung stehende Formeln [6]
Diese Formeln lassen sich anders so beschreiben:
E<> p
Es existiert ein Pfad auf dem Zustandsbaum, der den Zustand „p“ erreicht.
A[] p
Alle Zustände des Zustandsbaumes repräsentieren Zustand „p“.
p --> q
Dem Zustand „p“ folgt auf jedem Pfad des Zustandsbaumes ein Zustand „q“.
Möchte man also erfahren, ob „closeGate“-Nachrichten die „Gate“-Kontrolle erreichen, so
formuliert man die Anfrage:
E<> GateStateMachine.Closing
Ein komplexeres Beispiel lautet:
A[] GateStateMachine.Open imply not Track1StateMachine.Crossing and not
Track2StateMachine.Crossing2
Hierbei wird verifiziert, dass, wann immer sich die Schranken im geöffneten Zustand
befinden, weder auf Track1 noch auf Track2 ein Zug den Bahnübergang kreuzt.
Auch nicht zulässige Systemzustände lassen sich auf diese Weise untersuchen. Die Anfrage
E<> ControlStateMachine.Open_x_Critical1_x_Away2 and
ControlStateMachine.Nearby1_clock>d2
untersucht das Modell daraufhin, ob trotz geöffneter Schranken und einem Zug im kritischen
Bereich der Bahnstrecke 1 die Uhr Nearby1_clock genügend Restzeit zum Schließen der
Schranken meldet. Diese Eigenschaft ist nicht erfüllbar.
A[] Track1StateMachine.Crossing or Track2StateMachine.Crossing2 imply
GateStateMachine.Closed
verifiziert, ob tatsächlich jeder modellierte Zustand „Crossing“, der erreicht wird, sobald ein
Zug den Bahnübergang kreuzt, impliziert, dass die Schranken geschlossen sind.
11
6. Laufzeitverhalten
Das Laufzeitverhalten des Prototyps lässt sich nur erahnen, da ein Großteil der verwendeten
Ressourcen während der Ausführung für Java benutzt werden.
Das beschriebene Beispiel des GRC-Modells lässt sich auf einem Pentium III 933 MHz mit
512 MB Arbeitsspeicher in etwa 2.5 Sekunden in die entsprechenden Timed Automata für
UppAal übersetzen. Der Speicheraufwand während der Übersetzung beträgt ungefähr 213
MB. Um eine Abschätzung darüber treffen zu können, wie groß der Bedarf hieran für den
eigentlichen Übersetzungsvorgang ist, habe ich ein Java-Programm ohne Funktionalität
geschrieben und ebenfalls den Speicheraufwand gemessen. Die Ausführung einer leeren
Klasse benötigt auf dem gleichen System etwa 210 MB.
Inwiefern dieser Vergleich die wirklichen Verhältnisse widerspiegelt, lässt sich nur schwer
feststellen, jedoch ermöglicht er zumindest eine grobe Abschätzung.
Die Verifikation des Modells mittels UppAal benötigt auf demselben System lediglich
Bruchteile einer Sekunde. Im Mittel ließ sich eine Anfrage in 0.13 Sekunden beantworten.
Der Speicheraufwand betrug hierbei konstant 2.3 MB.
Bei einer umfangreicheren Verifikation mit 10 Anfragen stieg der Speicherbedarf auf 3.1 MB
und die CPU-Nutzung dauerte 0.32 Sekunden.
Das mittels HUGO/RT generierte Timed Automata-Modell besteht aus 10 einzelnen Timed
Automaton, die ca. 200 Locations und 11 Clocks benötigen. Gegenüber den 18 Zuständen in 6
State Machines des ursprünglich erstellten Modells wird hierbei eine Schwäche von
HUGO/RT offensichtlich.
7. Einschränkungen des HUGO/RT-Systems
Obwohl das HUGO/RT-System trotz der Prototyp-Bezeichnung bereits einen sehr guten und
umfangreichen Eindruck hinterlässt, sind einige Einschränkungen oder Mängel erkennbar
geworden. So wird bei der Übersetzung der UML State Machines in Timed Automata
angenommen, es gäbe lediglich eine Instanz jeder Klasse. Darüber hinaus nimmt der Prototyp
an, die Namen der Operationen und Signale seien eindeutig. Auch können Ereignisse, die in
dem behandelten Beispiel nur als Nachrichten auftauchen, keinerlei Parameter tragen. All
diese Einschränkungen stellen jedoch kein wirkliches Hindernis dar, da sie durch eine etwas
aufwändigere Namensgebung leicht umgangen werden können.
Der Prototyp unterstützt ebenfalls keine Sequenzen von Nachrichten, die in einer Transition
des UppAal-Modells auftreten. Auch Reaktionen auf zurückgestellte Ereignisse sind derzeit
nicht behandelbar mit HUGO/RT.
Aufgrund der eingeschränkten Ausdrucksstärke der UML-Kollaborationen planen die
Entwickler in einer künftigen Version der Software, Live Sequence Charts als
Spezifikationsformalismus zu implementieren.
Die angesprochenen Mängel bei der Erstellung und Bearbeitung der Sequenz-Diagramme
sollen mit der in Kürze erscheinenden Version 0.16 des UML-Editors Argo/UML behoben
werden. Bis dahin ist die Benutzung von HUGO/RT zur Verifikation eines Systems mithilfe
solcher Diagramme praktisch nicht möglich.
12
8. Zusammenfassung und Ausblick
Der behandelte Prototyp der HUGO/RT-Software ist im gegenwärtigen Zustand in der Lage
UML-Zustands- und Sequenzdiagramme in Timed Automata zu übersetzen. Zur Verifikation
der generierten Modelle wird anschließend der Model Checker UppAal aufgerufen, der die
übersetzten Timed Automata zur Eingabe bekommt.
Die Aufgabe die UML-Modelle zu übersetzen erledigt HUGO/RT bereits sehr gut. Ich konnte
keine Abstürze des Systems beobachten. Die Benutzbarkeit des Systems leidet jedoch bis dato
noch unter den erwähnten Mängeln der UML-Editoren „Poseidon for UML“ und
„Argo/UML“.
Momentan erfährt die HUGO/RT-Software offenbar auch keine Weiterentwicklung.
Die angesprochenen Mängel in der Namensgebung sollen laut den Entwicklern in einer
kommenden Version behoben werden. Zu den übrigen Erweiterungen der Software sollen die
Code-Generierung und eine Unterstützung für zurückgestellte Nachrichten gehören, was in
der aktuell verfügbaren Version des Systems nicht möglich ist.
Probleme traten während der Arbeit mit unterschiedlichen UppAal-Versionen auf, da im Zuge
der Weiterentwicklung offenbar leichte Änderungen in der Syntax der verwendeten ProjektDateien vorgenommen wurden.
13
9. Quellen:
1. Knapp, Merz und Rauh. Model Checking Timed UML State Machines and
Collaborations, München, 2002. http://www.pst.informatik.unimuenchen.de/personen/merz/papers/ftrtft02.pdf
2. Hirsch. Model-Checking und Timed Automata, Paderborn, 2003.
3. Knapp und Merz, Model Checking UML Statecharts and Collaborations, Turku, 2002.
http://www.loria.fr/~merz/talks/hugo-turku.pdf
4. Giese und Burmester. Real-Time Statechart Semantics, S. 8ff., Paderborn, 2003.
http://www.upb.de/cs/ag-schaefer/Personen/Aktuell/Giese/archive/2003/tr-ri-03239/tr-ri-03-239.pdf
5. David und Amnell. UppAal2k: Small Tutorial, 2002.
http://www.docs.uu.se/docs/undergrad/instances/spring2003/RealTime/labs/ass3/tutori
al.pdf
6. Skou. An introduction to UppAal and Timed Automata, Aalborg, 2003.
http://www.cs.auc.dk/~ask/Undervisning/MVP/html/mvp5.pdf
7. Sierszecki, Berthing, Ruby und Horsdal. Model Checking Real-Time Temporal Logic,
S. 34 ff., Aarhus, 2003. http://www.daimi.au.dk/Conver/tctl-presentation.pdf
14