01.09.2013 Aufrufe

Anforderungsanalyse und Anforderungsdefinition für ...

Anforderungsanalyse und Anforderungsdefinition für ...

Anforderungsanalyse und Anforderungsdefinition für ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Institut <strong>für</strong> Informatik<br />

Arbeitsgruppe Softwaretechnik<br />

Warburger Str. 100<br />

33098 Paderborn<br />

<strong>Anforderungsanalyse</strong> <strong>und</strong><br />

<strong>Anforderungsdefinition</strong> <strong>für</strong> sicherheitskritische<br />

Systeme (inkl. formale Methoden)<br />

Ausarbeitung im Rahmen des Seminars<br />

Analyse, Entwurf <strong>und</strong> Implementierung zuverlässiger Software<br />

von<br />

Christian Löper<br />

betreut durch<br />

Prof. Dr. Wilhelm Schäfer<br />

Paderborn, Februar 2004


Inhalt<br />

1. Einleitung .............................................................................................................................. 03<br />

2. Anforderungen an sicherheitskritische Systeme ................................................ 04<br />

2.1. Funktionale Anforderungen .................................................................. 04<br />

2.2. Allgemeine nicht funktionale Anforderungen ........................................ 04<br />

2.3. Systemanforderungen ........................................................................... 04<br />

2.4. Sicherheitsanforderungen ..................................................................... 06<br />

2.5. Gesetzliche Anforderungen ................................................................... 07<br />

2.6. Konflikte zwischen Anforderungen ....................................................... 07<br />

3. Anforderungsspezifikation ........................................................................................... 08<br />

3.1. Inhalt der Anforderungsspezifikation .................................................... 08<br />

3.2. Eigenschaften einer guten Anforderungsspezifikation ........................... 09<br />

3.3. Analyse der Anforderungsspezifikation ................................................. 11<br />

4. Formale Methoden zur Anforderungsspezifikation ........................................... 12<br />

4.1. Vorteile <strong>und</strong> Nachteile formaler Methoden ............................................ 12<br />

4.1.1. Allgemein ..................................................................................... 12<br />

4.1.2. Validierung der Spezifikation ........................................................ 13<br />

4.1.3. Verifikation der weiteren Entwicklungsstufen .............................. 14<br />

4.1.4. Automatische Entwicklungen aus der Anforderungsspezifikation . 14<br />

4.2. Auswahl der geeigneten formalen Methode ........................................... 15<br />

4.3. Die Z-Notation ...................................................................................... 16<br />

4.4. Praxisbeispiel: Traffic Alert and Collision Avoidance System (TCAS) ...... 20<br />

5. Fazit ......................................................................................................................................... 22<br />

6. Anhang ................................................................................................................................... 23<br />

6.1. Literaturverzeichnis .............................................................................. 23<br />

6.2. Abbildungsverzeichnis ......................................................................... 23<br />

Inhalt<br />

2


1. Einleitung<br />

Die Anforderungsspezifikation steht am Anfang des Entwicklungsprozesses. Sie bildet<br />

die nötige Gr<strong>und</strong>lage <strong>für</strong> die Entwicklung eines technischen Systems <strong>und</strong> ist von großer<br />

Bedeutung <strong>für</strong> den Erfolg dieser Entwicklung. Im folgenden Schaubild des V – Modells<br />

ist dieses dargestellt.<br />

Abbildung 1: V – Lifecycle aus Storey [Sto95]<br />

Einleitung<br />

Fehler in der Anforderungsspezifikation einer Software sind <strong>für</strong> den größten Teil der<br />

Unfälle verantwortlich, die durch Fehlverhalten von Software verursacht werden. Daher<br />

sind korrekte, vollständige, konsistente <strong>und</strong> eindeutige Anforderungen von großer<br />

Bedeutung im Entwicklungsprozess.<br />

Im Folgenden werden die Anforderungen vorgestellt, die an ein sicherheitskritisches<br />

System gestellt werden. Daraufhin wird die mit diesen Anforderungen zu entwickelnde<br />

Anforderungsspezifikation dargelegt. Im weiteren werden formale Methoden erläutert,<br />

die den Vorgang unterstützen.<br />

3


2. Anforderungen an sicherheitskritische Systeme<br />

Den Startpunkt <strong>für</strong> die Entwicklung eines neuen technischen Produktes bildet ein<br />

Bedürfnis. Dieses ist beschreibbar durch eine Menge von Anforderungen. Für die<br />

Entwicklung des Systems müssen diese geordnet <strong>und</strong> vervollständigt werden, mit dem<br />

Ziel eine Anforderungsspezifikation zu entwickeln. Diese dient dann als Gr<strong>und</strong>lage <strong>für</strong><br />

den Entwicklungsprozess. Der Softwareentwickler ist hierbei meistens in der Rolle des<br />

Auftragnehmers, der die Anforderungen des Auftraggebers analysieren muss.<br />

Folgende Aspekte müssen bei der <strong>Anforderungsanalyse</strong> <strong>für</strong> sicherheitskritische<br />

Systeme berücksichtigt werden:<br />

2.1 Funktionale Anforderungen<br />

Funktionale Anforderungen sind die Funktionen, die das System erfüllen muss.<br />

Beispielsweise bei einer Airbag Steuerung die Auslösung des Airbags bei bestimmten<br />

Bedingungen.<br />

2.2 Allgemeine Nicht-Funktionale Anforderungen<br />

Hierzu gehören allgemeine Randbedingungen des Systems. Sie werden aufgeteilt in<br />

Produkt Anforderungen, Prozess Anforderungen <strong>und</strong> externen Anforderungen.<br />

Produkt Anforderungen: Produkt Anforderungen beschreiben direkt das zu<br />

entwickelnde Produkt, sie sind unmittelbar aus den Benutzerwünschen abgeleitet (z.B.<br />

Baugröße, Portabilität, Nutzbarkeit).<br />

Prozess Anforderungen: Diese Anforderungen beschäftigen sich mit dem<br />

Entwicklungsprozess. Beispiele sind: Entwicklungszeit, Programmiersprache,<br />

Entwurfsmethode.<br />

Externe Anforderungen: Diese Kategorie umfasst die nichtfunktionalen<br />

Anforderungen, welche die beiden anderen Kategorien nicht erfassen, z.B. Kosten.<br />

2.3 Systemanforderungen<br />

Systemanforderungen sind Anforderungen, die von besonderer Bedeutung <strong>für</strong><br />

sicherheitskritische Systeme sind. Sie bestehen aus funktionalen, nicht funktionalen<br />

<strong>und</strong> internen Anforderungen.<br />

Funktionale Systemanforderungen<br />

- Safety (Sicherheit)<br />

- Correctness (Korrektheit)<br />

- Trustability (Vertrauenswürdigkeit)<br />

Anforderungen an sicherheitskritische Systeme<br />

4


Nicht Funktionale Systemanforderungen<br />

- Reliability (Funktionsfähigkeit)<br />

- Availability (Verfügbarkeit)<br />

- Performance (Leistung)<br />

- Effizienz<br />

- Speicherplatz<br />

Interne Systemanforderungen<br />

- Entwicklung<br />

o Understandability (Verständlichkeit)<br />

o Testability (Testbarkeit)<br />

o Verifiability (Verifizierbarkeit)<br />

- Wartung<br />

o Recoverability (Wiederherstellbarkeit)<br />

o Maintainability (Wartbarkeit)<br />

o Extendability (Erweiterbarkeit)<br />

o Portierbarkeit<br />

- Wiederverwendbarkeit<br />

Anforderungen an sicherheitskritische Systeme<br />

Im Folgenden werden einige besonders wichtige Systemanforderungen beschrieben:<br />

Reliability (Funktionsfähigkeit)<br />

Die Reliability beschreibt die Fähigkeit des Systems über ein bestimmtes Zeitintervall<br />

unter bestimmten Betriebsbedingungen, wie in der Spezifikation beschrieben, zu<br />

arbeiten.<br />

Availability (Verfügbarkeit)<br />

Die Availability beschreibt die Wahrscheinlichkeit, dass das System zu jedem Zeitpunkt<br />

korrekt funktioniert. Quantitativ beschreibbar ist so die Zeit korrekten Arbeitens<br />

(übereinstimmend mit der Spezifikation) in einem bestimmten Zeitraum.<br />

Availability = Betriebszeit / (Betriebszeit + Reparaturzeit)<br />

Failsafe Operation:<br />

Wenn ein Zustand des Systems als sicher gekennzeichnet werden kann <strong>und</strong> das System<br />

unter allen Betriebsumständen diesen erreichen kann, geht das System in diesen<br />

Zustand über, falls ein Fehler auftritt <strong>und</strong> dieser nicht behoben werden kann.<br />

System Integrity<br />

Die System Integrity ist die Fähigkeit des Systems, das es selbst auftretende Fehler<br />

entdeckt <strong>und</strong> daraufhin weitere Operationen einleitet bzw. den Benutzer informiert.<br />

Data Integrity<br />

Dieses System erkennt wenn seine Datenbasis nicht korrekt ist <strong>und</strong> leitet dann<br />

Operationen ein, um sie zu reparieren oder den Benutzer zu informieren.<br />

5


System Recovery<br />

Wenn das System ausfällt, kann es sich selbst wieder herstellen bzw. neu starten <strong>und</strong><br />

seinen Betrieb fortsetzen.<br />

Maintanability (Wartbarkeit)<br />

Die Wartbarkeit ist die Fähigkeit des Systems wartbar zu sein. Quantitativ wird diese<br />

Anforderung durch die Mean Time to Repair (MTTR) dargestellt. Dieses ist die Zeit, die<br />

benötigt wird, um das System nach einem Fehler wieder herzustellen. In diesem<br />

Zusammenhang ist ebenfalls zu berücksichtigen, ob eine Wartung bei laufendem<br />

Betrieb erfolgen kann, oder ob das System da<strong>für</strong> abgeschaltet werden muss. Außerdem<br />

muss bedacht werden, dass durch die Wartung möglicherweise Fehler in das System<br />

gebracht werden.<br />

Dependability (Zuverlässigkeit)<br />

Diese Anforderung fasst die vorherigen zusammen. Sie beschreibt das Vertrauen, das<br />

dem System entgegengebracht wird.<br />

2.4 Sicherheitsanforderungen<br />

Anforderungen an sicherheitskritische Systeme<br />

Zusätzlich zu den Systemanforderungen muss ein sicherheitskritisches System<br />

systemspezifische Sicherheitsanforderungen erfüllen.<br />

Die mit dem System verb<strong>und</strong>enen Gefahren müssen identifiziert werden. Bei<br />

sicherheitskritischen Systemen handelt es sich meistens um funktionale Gefahren, d.h.<br />

Gefahren durch das durch die Software kontrollierte System. Die Identifizierung erfolgt<br />

durch eine Gefahrenanalyse.<br />

Die gef<strong>und</strong>enen Gefahren werden nun ihrer „Schwere“ nach klassifiziert. Dann werden<br />

Methoden entwickelt, um diese Gefahren zu mindern bzw. ganz auszuschließen. Nun<br />

folgt die Zuordnung geeigneter Reliability <strong>und</strong> Availability Anforderungen zu diesen<br />

Methoden.<br />

Schließlich muss ein angemessener Safety Integrity Level <strong>und</strong> dazu passende<br />

Entwicklungsmethoden ausgewählt werden. Je höher der Safety Integrity Level, desto<br />

strenger die Anforderungen an das Niveau der Entwicklungsmethoden. Der Safety<br />

Integrity Level ist ein Maß da<strong>für</strong>, wie stark die Integrität der Software zu der gesamten<br />

Sicherheit des Systems beiträgt.<br />

Aus diesen Überlegungen folgen funktionale <strong>und</strong> nichtfunktionale Anforderungen.<br />

Es können bei dieser Analyse Gefahren gef<strong>und</strong>en werden, die nicht vollständig durch<br />

eine Softwarelösung abgewendet werden können. Es muss dann entschieden werden<br />

ob es andere Techniken zum Schutz des Systems gibt oder ob das verbleibende Risiko<br />

akzeptiert werden kann.<br />

6


2.5 Gesetzliche Anforderungen<br />

Bei der <strong>Anforderungsanalyse</strong> ist ebenfalls auf Einhaltung gesetzlicher Standards zu<br />

achten. Diese betreffen die Anforderungen selbst, sowie die benutzten<br />

Entwicklungsmethoden. Die später nötige Zertifizierung des Produkts ist abhängig von<br />

der Einhaltung dieser Standards. Mittlerweile wird in vielen Entwicklungsstandards die<br />

Nutzung formaler Methoden vorgeschrieben. Die Britische Regierung fordert die<br />

Nutzung formaler Methoden bei <strong>für</strong> sie entwickelten sicherheitskritischen Systemen.<br />

Außerdem existieren nicht gesetzliche Entwicklungsstandards zur Unterstützung bei<br />

der Entwicklung. Diese gibt es <strong>für</strong> viele verschiedene Industriebereiche.<br />

2.6 Konflikte zwischen Anforderungen<br />

Anforderungen an sicherheitskritische Systeme<br />

Viele der Anforderungen stehen in Abhängigkeiten zueinander, was Konflikte ergibt. Es<br />

tritt beispielsweise in fast allen technischen Systemen ein Konflikt zwischen hoher<br />

Leistung <strong>und</strong> geringen Kosten auf.<br />

Bei sicherheitskritischen Systemen mit einem Failsafe State existiert ein Konflikt<br />

zwischen Realiability, Availability <strong>und</strong> Safety. Die Safety ist im sicheren Zustand am<br />

größten. Da das System in diesem Zustand aber keine bzw. nicht die gewünschte<br />

Funktionalität bietet, ist hier die Availability <strong>und</strong> die Realiability gleich null. Das<br />

bedeutet, die Safety muss reduziert werden um ein funktionierendes System zu<br />

erhalten.<br />

Bei einem Notabschaltsystem <strong>für</strong> Atomkraftwerke kommt es zum Beispiel zum Konflikt<br />

zwischen Safety <strong>und</strong> Performance. Aus Sicherheitsgründen sollte das Kraftwerk in einer<br />

unklaren Situation immer abschalten, dieses ist aber natürlich aus Leistungs- <strong>und</strong><br />

Kostengründen nicht erwünscht.<br />

Um diese Konflikte zu lösen, muss abgewogen werden, welche Anforderung wichtiger<br />

ist. Dementsprechend müssen Prioritäten zugeordnet werden. Die nötigen Level von<br />

Safety <strong>und</strong> Reliability müssen durch die Gefahrenanalyse bestimmt werden. Die<br />

Anforderungsspezifikation muss alle Anforderungen im nötigen Maße berücksichtigen.<br />

7


3. Anforderungsspezifikation<br />

3.1 Inhalt der Anforderungsspezifikation<br />

Anforderungsspezifikation<br />

Mit Hilfe der oben genannten Überlegungen wird die Anforderungsspezifikation<br />

entwickelt.<br />

Sie beschreibt die Anforderungen an ein System hinsichtlich der Funktionen <strong>und</strong> der<br />

Bedingungen, unter denen sie erfüllt werden müssen. Es wird dargestellt, was das<br />

System leisten soll, nicht wie es realisiert werden soll.<br />

Außerdem ist eine Beschreibung der Umwelt sinnvoll, in der die Software bzw. das<br />

System eingesetzt werden soll. Damit wird verhindert, dass Fehler durch falschen<br />

Einsatz des Systems entstehen. Eine spätere Portierung in eine andere Umgebung wird<br />

hierdurch erleichtert, da die Anforderungen an sie klar definiert sind.<br />

Die Anforderungsspezifikation dient auch als Vertragsdokument mit dem<br />

Auftraggeber, da hier eindeutig die Systemeigenschaften bestimmt sind. Der<br />

Softwareentwickler muss nach der Fertigstellung des Systems zeigen, dass die<br />

Implementierung der Anforderungsspezifikation in allen Punkten gerecht wird. Daher<br />

sollte die Spezifikation so geschrieben sein, dass objektiv feststellbar ist, ob dies<br />

zutrifft.<br />

Die Spezifikationssprache sollte eine eindeutige <strong>und</strong> streng definierte Semantik<br />

besitzen. Sie sollte verständlich sein <strong>für</strong> die Softwareentwickler, ebenso <strong>für</strong> die<br />

Ingenieure <strong>und</strong> Auftraggeber. Dieses trägt zum Vertrauen in das System bei <strong>und</strong> der<br />

Auftraggeber kann herausfinden, ob die Spezifikation seinen Anforderungen<br />

entspricht.<br />

Die Spezifikation kann in handlichere Module aufgeteilt werden, um das Verständnis zu<br />

erhöhen. Dann beinhaltet sie die Beschreibung der Struktur, die Beschreibung der<br />

Schnittstellen sowie die Spezifikation der einzelnen Module mit den jeweiligen nicht<br />

funktionalen Anforderungen. Den Schnittstellen werden, um Ungenauigkeiten bzw.<br />

Doppeldeutigkeiten zu vermeiden Datentypen, zugeordnet.<br />

Die Anforderungsspezifikation entspricht dem Top-Level-Design des Systems, sie ist<br />

der Eingang <strong>für</strong> den Design Vorgang, der dann einer Serie von Verfeinerungen<br />

entspricht.<br />

Zur Verfassung der Bedienungsanleitung des Systems liefert die<br />

Anforderungsspezifikation die Gr<strong>und</strong>lage.<br />

8


Wie aus dem folgenden Schaubild deutlich wird, steigen die Kosten <strong>für</strong> eine<br />

Fehlerkorrektur. Je später ein Fehler im Entwicklungsprozess korrigiert werden muss,<br />

desto teurer ist die Korrektur.<br />

Abbildung 2: Kosten der Fehlerkorrektur aus Ebert [Ebe04]<br />

Schwächen innerhalb der Anforderungsspezifikation werden häufig erst sichtbar, wenn<br />

das System vollständig implementiert ist. Die Verbesserung solcher Schwächen erst zu<br />

diesem Zeitpunkt ist, wie oben dargestellt, sehr aufwendig <strong>und</strong> demzufolge teuer.<br />

Daher ist eine gute Anforderungsspezifikation von großer Wichtigkeit im Entwicklungsprozess.<br />

Diese wird im Weiteren definiert.<br />

3.2 Eigenschaften einer guten Anforderungsspezifikation<br />

Anforderungsspezifikation<br />

Korrektheit<br />

Jede Aussage in der Anforderungsspezifikation muss korrekt eine Anforderung<br />

wiedergeben. Wenn z.B. die Software eine Antwort innerhalb von 5 Sek<strong>und</strong>en liefern<br />

soll, aber in der Anforderungsspezifikation eine Zeit von 10 Sek<strong>und</strong>en aufgenommen<br />

ist, ist die Spezifikation nicht korrekt.<br />

Eindeutigkeit<br />

Jede Aussage hat nur eine mögliche Interpretation, es ist also nur eine<br />

Implementierung möglich, die zu dieser Anforderungsspezifikation passt. Das<br />

gewünschte Verhalten der Software muss so spezifiziert sein, dass es sich von dem<br />

Verhalten jeder unerwünschten Implementierung eindeutig unterscheidet. Die<br />

Anforderungsspezifikation kann hinreichend eindeutig sein. Sie lässt dann mehrere<br />

Implementierungen zu, die im Verhalten gleich sind.<br />

Vollständigkeit<br />

Alles, was die Software leisten soll, ist in der Anforderungsspezifikation aufgenommen.<br />

Außerdem sagt die Spezifikation <strong>für</strong> jeden möglichen Zustand, wie sich das System<br />

verhalten soll. Hierbei sind auch ungewöhnliche Zustände zu beachten. Viele Systeme<br />

fallen aus, weil die Spezifikation <strong>für</strong> eine bestimmte Situation nicht sagt, wie es sich<br />

9


verhalten soll. Daher ist ein genaues Wissen über die Umwelt erforderlich, in der das<br />

System eingesetzt werden soll. Da dieses nicht immer vollständig sein kann sind<br />

entsprechende Annahmen zu treffen. Eine Anforderungsspezifikation kann hinreichend<br />

vollständig bezüglich der Sicherheit sein. Sie ist dann nicht absolut vollständig,<br />

garantiert aber unter allen Umständen sicheres Verhalten.<br />

Verifizierbarkeit<br />

Zu jeder Anforderung ist überprüfbar, ob sie in der Implementierung erfüllt worden ist.<br />

Konsistenz<br />

Die Konsistenz besagt, dass verschiedene Anforderungen in der Spezifikation nicht<br />

Aussagen über den gleichen Bereich des Systems treffen dürfen, die im Konflikt<br />

zueinander stehen.<br />

Verständlichkeit<br />

Die Dokumente sollen auch <strong>für</strong> Personen ohne Kenntnisse im Bereich der<br />

Softwareentwicklung verständlich sein. Dieses ist sehr wichtig um Auftraggebern bzw.<br />

Benutzern die Möglichkeit zu geben, die Anforderungsspezifikation auf Vollständigkeit<br />

zu überprüfen. Außerdem erhöht das Verständnis der Anforderungen das Vertrauen in<br />

das System.<br />

Verfolgbarkeit<br />

Die Herkunft jeder Anforderung sollte klar zu erkennen sein.<br />

Kommentare<br />

Zum besseren Verständnis sollten Kommentare eingefügt sein, dies gilt besonders bei<br />

formalen Sprachen.<br />

Modifizierbarkeit<br />

Red<strong>und</strong>ante Beschreibungen dürfen nicht vorkommen.<br />

Anforderungsspezifikation<br />

Besonders wichtig sind die Eigenschaften der Eindeutigkeit, Vollständigkeit, Konsistenz<br />

<strong>und</strong> Korrektheit.<br />

Mit einer natürlichen Sprache als Anforderungsspezifikationssprache ist die Erreichung<br />

dieser Eigenschaften nur schwer möglich, daher ist der Einsatz formaler Methoden sehr<br />

hilfreich.<br />

10


3.3 Analyse der Anforderungsspezifikation<br />

Anforderungsspezifikation<br />

Da die fertiggestellte Anforderungsspezifikation die Gr<strong>und</strong>lage <strong>für</strong> die weitere<br />

Entwicklung ist, muss sie genauestens nach den oben genannten Gesichtspunkten<br />

überprüft werden.<br />

Die Eigenschaften der Konsistenz <strong>und</strong> Eindeutigkeit lassen sich bei dem Einsatz<br />

formaler Methoden zur Anforderungsspezifikation automatisch prüfen.<br />

Es sollte sichergestellt werden, dass die Spezifikation keine Möglichkeit bietet, die zu<br />

einem katastrophalen Fehler in der beabsichtigten Umwelt führt.<br />

Die Vollständigkeit <strong>und</strong> Korrektheit können nicht automatisch geprüft werden. Diese<br />

sind von den Anforderungen bzw. Bedürfnissen des Auftraggebers abhängig. Die<br />

Prüfung, ob die Anforderungen des Auftraggebers vollständig <strong>und</strong> korrekt spezifiziert<br />

sind, heißt Validierung („Are we building the right thing?“ [McD93]). Dabei ist es<br />

vorteilhaft, wenn der Auftraggeber die Anforderungsspezifikation selbst lesen kann. So<br />

kann er direkt selbst herausfinden, ob sie seinen Bedürfnissen gerecht wird. Wenn die<br />

Spezifikation validiert ist, ist sie eine eindeutige Repräsentation der Anforderungen an<br />

das System. Auf diese Anforderungsspezifikation kann dann die weitere Entwicklung<br />

aufbauen.<br />

Die Ergebnisse der weiteren Entwicklungsschritte müssen auf ihre funktionale<br />

Äquivalenz mit der Anforderungsspezifikation überprüft werden. Besonders <strong>für</strong> das<br />

fertiggestellte System muss gezeigt werden, dass es der Anforderungsspezifikation in<br />

allen Punkten gerecht wird.<br />

11


4. Formale Methoden zur Anforderungsspezifikation<br />

Die Verwendung formaler Methoden bedeutet die Nutzung formaler Sprachen zur<br />

Anforderungsspezifikation. Diese basieren auf der Nutzung mathematischer Kalküle.<br />

Sie bieten ein präzises Vokabular, eine genau definierte Syntax <strong>und</strong> eine eindeutige<br />

Semantik. Das System wird exakt beschrieben, nicht der Entwurf. So werden nur sehr<br />

wenige Einschränkungen <strong>für</strong> die Implementierung festgelegt. Es werden präzise die<br />

Eigenschaften des System beschrieben ohne einzuschränken wie diese erreicht werden<br />

sollen (was das System leisten muss, nicht wie es etwas leistet).<br />

Heute wird vielfach der Einsatz formaler Methoden in gesetzlichen<br />

Entwurfsvorschriften vorgeschrieben.<br />

4.1 Vorteile <strong>und</strong> Nachteile formaler Methoden<br />

4.1.1 Allgemein<br />

Formale Methoden zur Anforderungsspezifikation<br />

Spezifikationsdokumente in natürlichen Sprachen sind anfällig <strong>für</strong> Missverständnisse,<br />

es ist nahezu unmöglich sie so zu verfassen, dass sie nicht missinterpretierbar sind. Es<br />

ist sehr schwierig zu zeigen, dass die Spezifikation korrekt, vollständig <strong>und</strong> konsistent<br />

ist, da die Prüfung vollständig auf Basis des Verständnisses des Ingenieurs <strong>für</strong> die<br />

Anforderungen geschehen muss. Der Einsatz formaler Methoden bietet <strong>für</strong> viele dieser<br />

Probleme gute Lösungen.<br />

Eindeutigkeit<br />

Die streng definierte Semantik <strong>und</strong> Syntax formaler Sprachen ermöglicht eine<br />

eindeutige Interpretation der Spezifikation. Die Eindeutigkeit ist somit gegeben.<br />

Dadurch ist die Spezifikation einfacher nachzuprüfen <strong>und</strong> zu ändern.<br />

Werkzeugeinsatz<br />

Ein weiterer Vorteil formaler Methoden ist, das es möglich ist mit Hilfe von<br />

Testverfahren <strong>und</strong> automatischen Werkzeugen verschiedenste Eigenschaften <strong>und</strong><br />

Fehler festzustellen. Die Spezifikation kann so auf Konsistenz, Fehler in der<br />

Orthographie <strong>und</strong> Richtigkeit der Struktur <strong>und</strong> ihrer internen Schnittstellen geprüft<br />

werden. Die Ableitung von neuen Eigenschaften des Systems ist durch Beweis möglich.<br />

Hierdurch kann gezeigt werden, dass keine mögliche Folge von Systemoperationen zu<br />

einem unsicheren Zustand führen kann. Es lassen sich auch unnötige Anforderungen<br />

erkennen, um diese dann entfernen zu lassen.<br />

Reuseability (Wiederverwendbarkeit)<br />

Eine formale Anforderungsspezifikation ist sehr hilfreich, wenn der Code in einem<br />

neuen System wieder benutzt werden soll. Durch die genaue Beschreibung der<br />

Eigenschaften <strong>und</strong> der Anforderungen an die Umwelt ist eine präzise Bewertung<br />

möglich, ob der Code einsetzbar ist.<br />

12


Maintainability (Wartbarkeit)<br />

Durch das erhöhte Verständnis des Systems <strong>und</strong> der internen Wechselwirkungen wird<br />

die Wartung erleichtert.<br />

Entwicklungszeit / Kosten<br />

Durch die relativ komplizierte Anwendung der formalen Sprachen <strong>und</strong> besonders auch<br />

durch die ihnen zugr<strong>und</strong>e liegenden mathematischen Techniken, ist die Einarbeitung<br />

nicht so einfach. Daher ist eine Schulung der Softwareentwickler notwendig. Dadurch<br />

wird sich die Entwicklungszeit bei dem ersten mit formalen Methoden durchgeführten<br />

Projekt verlängern. Diese Problematik verschwindet, wenn in nachfolgenden Projekten<br />

mit den gleichen Methoden gearbeitet wird. Daher sind die Kosten bei dem ersten<br />

Projekt mit formalen Methoden höher als gewöhnlich. Bei folgenden Entwicklungen<br />

sind sie dann gleich groß, wie bei konventioneller Spezifikationsentwicklung.<br />

Einschränkungen in der Wahl der Entwicklungsmethoden<br />

Formale Methoden müssen auf jeder Entwicklungsstufe eingesetzt werden, um ihre<br />

Vorteile vollständig zu entfalten. Dadurch werden die nutzbaren Entwicklungsmethoden<br />

eingeschränkt.<br />

Insgesamt ist die Nutzung formaler Methoden oft einschränkend. Sie bedeutet<br />

meistens einen erhöhten Arbeitsaufwand. Daher ist zu überlegen, ob formale<br />

Methoden nicht nur <strong>für</strong> sicherheitskritische Elemente des Systems verwendet werden,<br />

da hier die Beweismöglichkeit der Eigenschaften sehr wichtig ist.<br />

4.1.2 Validierung der Spezifikation<br />

Die Nutzung einer formalen Sprache zur Spezifikation garantiert nicht ihre Korrektheit<br />

<strong>und</strong> Vollständigkeit. Die Spezifikation basiert auf den informal ausgedrückten<br />

Bedürfnissen bzw. Anforderungen des Auftraggebers, daher sind Missverständnisse<br />

möglich. Diese führen dazu, dass die Anforderungsspezifikation unvollständig oder<br />

unkorrekt sein kann. Durch eine Validierung kann die Vollständigkeit <strong>und</strong> Richtigkeit<br />

gezeigt werden, es ist jedoch kein automatischer Beweis dieser Eigenschaften möglich.<br />

Die direkte Validierung der Spezifikation wird durch formale Methoden erschwert. Das<br />

Verständnis solch einer Spezifikation ist schwieriger als bei der Nutzung einer<br />

normalen Sprache. Sie ist meistens <strong>für</strong> den Auftraggeber nicht verständlich. Daher gibt<br />

es die Möglichkeit, eine formale Spezifikation in eine nicht formale automatisch<br />

übersetzen zu lassen.<br />

Eine andere Lösung dieses Problems ist die Animation der Spezifikation bzw. das<br />

Prototyping. Hierbei wird das Verhalten der Software simuliert. So kann der<br />

Auftraggeber anschaulich sehen, ob das spezifizierte System seinen Anforderungen<br />

genügt. Die Animation ist auch von Vorteil um die Vollständigkeit zu überprüfen, d.h.<br />

zu erkennen, ob es nicht spezifizierte Zustände gibt. Bei dem Einsatz einer<br />

ausführbaren formalen Spezifikationssprache (z.B. OBJ) kann die Animation direkt<br />

erfolgen. Bei Verwendung einer nicht ausführbaren formalen Sprache muss<br />

automatisch oder halbautomatisch eine ausführbare Variante der Spezifikation erstellt<br />

13


Formale Methoden zur Anforderungsspezifikation<br />

werden. Bei einer nicht formalen Spezifikation müsste <strong>für</strong> die Animation ein eigenes<br />

Programm entwickelt werden.<br />

4.1.3 Verifikation der nachfolgenden Entwicklungsstufen<br />

Um die Äquivalenz der nachfolgenden Entwicklungsstufen mit der Spezifikation<br />

feststellen zu können, erfolgt eine Verifikation („Are we building the thing right?“<br />

[McD93]). Bei nicht formaler Beschreibungsweise würde dieser Vorgang alleine auf den<br />

Kenntnissen <strong>und</strong> Fähigkeiten des Ingenieurs beruhen. Durch eine Beschreibung des<br />

Systems auf allen Ebenen mit dem Einsatz formaler Methoden wird es möglich, die<br />

funktionale Äquivalenz zu beweisen. Dadurch wird ein erhöhtes Vertrauen in die<br />

Ergebnisse der Verifikation erreicht.<br />

Dies ist besonders wichtig, um am Ende der Entwicklung beweisen zu können, dass<br />

das implementierte System den Anforderungen entspricht. Dieser Prozess ist allerdings<br />

noch nicht vollständig automatisiert, so dass die Erfahrungen <strong>und</strong> das Können der<br />

Softwareentwickler <strong>für</strong> die Verifikation unersetzlich sind.<br />

Der formale Beweis die Anforderungen erreicht zu haben, ist <strong>für</strong> die Zertifizierung<br />

eines Produkts sehr hilfreich, bzw. in den betreffenden Standards gefordert. Bei nicht<br />

formaler Beschreibung ist kein Beweis möglich. Es sind nur Tests möglich, die aber nie<br />

alle erdenklichen Fälle berücksichtigen können.<br />

Zur Vereinfachung der Verifikation wird in einigen Ansätzen nur Wert auf die<br />

Sicherheitsanforderungen gelegt. Dies macht den Beweis einfacher <strong>und</strong> vor allem<br />

schneller.<br />

4.1.4 Automatische Entwicklungen aus der Anforderungsspezifikation<br />

Ein weiteres Argument <strong>für</strong> die Benutzung formaler Beschreibungen <strong>für</strong> die<br />

Entwicklungsphasen ist die Möglichkeit einige Transformationen zwischen diesen zu<br />

automatisieren. Beispielsweise könnte so direkt aus der Anforderungsspezifikation der<br />

Softwareentwurf bzw. die Implementierung erzeugt werden. Ein weiterer Schritt wäre<br />

dann die automatisierte Entwicklung der vollständigen Hardware <strong>und</strong> Software aus der<br />

Anforderungsspezifikation. Allerdings wird es bis dahin noch eine längere Zeit der<br />

Entwicklung benötigen. Zur Zeit stehen Werkzeuge zur Verfügung, die den<br />

Softwareentwickler bei den Transformationen unterstützen, dies aber nicht vollständig<br />

selbstständig zu seiner Zufriedenheit erledigen können. Besonders in der Effizienz <strong>und</strong><br />

der Codegröße sind vollständig automatisch erzeugte Implementierungen oftmals<br />

unvorteilhaft. Auf diese Eigenschaften kommt es bei sicherheitskritischen Systemen<br />

meistens besonders an, da sie häufig auch eingebettete Systeme sind, die in der<br />

Massenproduktion hergestellt werden.<br />

Die gleiche Codegröße, wie bei manueller Implementierung, kann nur erreicht werden,<br />

wenn der Compiler speziell <strong>für</strong> die vorliegende Prozessorarchitektur entwickelt wurde.<br />

Dieses trifft aber aufgr<strong>und</strong> der Vielzahl von Prozessorarchitekturen <strong>und</strong> des relativ<br />

hohen Aufwandes in der Entwicklung eines solchen Compilers bisher nur selten zu. Es<br />

werden zur Zeit immer mehr passende <strong>und</strong> auch bessere Compiler entwickelt. Die<br />

14


automatische Codegenerierung wird daher in Zukunft immer häufiger eingesetzt<br />

werden können.<br />

In der folgenden Übersicht ist der Unterschied der Codegröße von automatisch<br />

generiertem Code <strong>und</strong> der manuell erstellten Implementierung aufgezeigt. Der Code<br />

wurde aus einer Statechart Darstellung erzeugt. Die automatische Generierung erfolgte<br />

mit dem Statemate Codegenerator STARC [Kle03].<br />

Abbildung 3: Vergleich Codegröße automatisch / manuell erzeugter Code<br />

aus Kleinjohann [Kle03]<br />

4.2 Auswahl der geeigneten Methode<br />

Formale Methoden zur Anforderungsspezifikation<br />

Da sich die meisten formalen Methoden auf ein Fachgebiet beschränken, ist es wichtig<br />

die geeignete Methode auszuwählen.<br />

Die oben beschriebenen automatischen Hilfsmittel sind nicht <strong>für</strong> alle formalen<br />

Methoden verfügbar, daher ist bei der Auswahl ebenfalls darauf zu achten, dass die<br />

gewünschten Werkzeuge verfügbar sind.<br />

Es existieren fünf verschiedene Typen, die im Folgenden kurz charakterisiert werden:<br />

1. Modellbasierte Ansätze<br />

Diese bieten eine explizite <strong>und</strong> abstrakte Definition von Systemzuständen <strong>und</strong><br />

Transitionen zwischen diesen. So wird ein Modell des Systems, basierend auf<br />

mathematischen Entities geschaffen. Es ist keine Darstellung von<br />

Nebenläufigkeit möglich (z.B. Z <strong>und</strong> VDM).<br />

2. Algebraische Ansätze<br />

Es wird eine implizite Definition der Operationen durch Verbindung von<br />

verschiedenen Operationen gegeben. Es erfolgt keine Definition von Zuständen<br />

<strong>und</strong> keine Darstellung von Nebenläufigkeit. Die Beziehungen zwischen Objekten<br />

werden mathematisch formuliert (z.B. OBJ <strong>und</strong> PLUSS).<br />

15


3. Prozessalgebras<br />

Diese bieten ein explizites Modell <strong>für</strong> nebenläufige Prozesse. Sie stellen das<br />

Verhalten durch Bedingungen über die zulässige Kommunikation zwischen den<br />

Prozessen dar (z.B. CSP <strong>und</strong> CCS).<br />

4. Logikbasiserte Ansätze<br />

Viele Ansätze nutzen Logiken um die Eigenschaften eines Systems zu<br />

beschreiben (z.B. Temporale Logik, Intervall Logiken, Propositionale Logik <strong>und</strong><br />

Prädikatenlogik).<br />

5. Netzbasierte Ansätze<br />

Hier wird das Verhalten durch ein Netzwerk dargestellt, das Nebenläufigkeit<br />

erlaubt. Es existieren Bedingungen unter denen die Daten von einem Knoten<br />

zum anderen fließen können (z.B. Petrinetze <strong>und</strong> Prädikat Transitions Netze).<br />

In der Praxis werden häufig Mischungen aus einigen Ansätzen verwendet, sogenannte<br />

Hybride Sprachen. So können die Vorteile mehrerer Ansätze genutzt werden.<br />

Vorteile bei der Validierung bieten ausführbare Spezifikationen (OBJ). So kann direkt<br />

eine Simulation durchgeführt werden. Solch einen Spezifikation ist allerdings größer<br />

<strong>und</strong> so schwieriger zu prüfen als eine, die in einer nicht ausführbaren Sprache (Z)<br />

entwickelt wurde. Ein Ansatz, um dieses zu lösen, ist es, die Spezifikation in einer<br />

nicht ausführbaren modellbasierten Sprache zu schreiben <strong>und</strong> sie dann anschließend in<br />

eine ausführbare konvertieren zu lassen.<br />

In der Industrie werden <strong>für</strong> sequentielle Systeme meistens VDM oder Z verwendet, <strong>für</strong><br />

nebenläufige meistens LOTOS <strong>und</strong> CCS.<br />

4.3 Z-Notation<br />

Formale Methoden zur Anforderungsspezifikation<br />

Die Z-Notation basiert auf der typed set theory (Mengenlehre) <strong>und</strong> der Prädikatenlogik<br />

1. Stufe. Sie ist eine modellbasierte Sprache.<br />

Mathematische Datentypen können genutzt werden, um die Daten im System zu<br />

modellieren. Die Darstellung des Verhaltens erfolgt durch die zugehörigen<br />

mathematischen Gesetze. Durch die Prädikatenlogik ist es möglich, Effekte von<br />

Aktionen zu beschreiben.<br />

Eine Spezifikation in Z besteht aus Modulen, den Schemata. Hierbei wird zwischen<br />

statischen <strong>und</strong> dynamischen Schemata unterschieden.<br />

Statische Schemata beschreiben die Zustände, die ein System annehmen kann <strong>und</strong> die<br />

Invarianten, die bei Zustandsänderungen eingehalten werden müssen.<br />

Dynamische Schemata dienen der funktionalen Beschreibung des Systems. Sie<br />

enthalten die möglichen Operationen, die Beziehungen zwischen den Ein- <strong>und</strong><br />

Ausgängen dieser Operationen <strong>und</strong> die Zustandsänderungen, die auftreten können.<br />

Jedem Schema können zum besseren Verständnis Kommentare zugeordnet werden.<br />

Zur Strukturierung können Hierarchien angelegt werden.<br />

Ein Schema enthält zwei Teile: Die Signatur <strong>und</strong> die Prädikate. Die Signatur (oberhalb<br />

der Trennlinie) deklariert Variablen, die Prädikate (unterhalb der Trennlinie)<br />

beschreiben die Beziehungen zwischen diesen.<br />

16


Die Z-Notation ist ein genormter ISO – Standard. 2002 wurde dieser fertiggestellt:<br />

Information Technology - Z Formal Specification Notation - Syntax, Type System and<br />

Semantics, ISO/IEC 13568:2002.<br />

Der Einsatz der Z-Notation ist <strong>für</strong> Entwicklungen sicherheitskritischer Systeme <strong>für</strong> die<br />

Britische <strong>und</strong> Australische Regierung vorgeschrieben.<br />

Im Folgenden werden die gr<strong>und</strong>legenden Konzepte an einem einfachen Beispiel<br />

erläutert (entnommen aus Spivey [Spi92]), dem BirthdayBook. Ein System, das<br />

Geburtstage mit den zugehörigen Namen speichern soll.<br />

Zuerst wird der Zustandsraum des Systems durch ein statisches Schema beschrieben:<br />

BirthdayBook<br />

known : P NAME<br />

birthday : NAME →→ DATE<br />

known = dom birthday<br />

Die Variable known wird als Menge von Namen deklariert. Birthday ist eine Funktion<br />

die aus gegebenem Namen das zugehörige Datum bestimmt. Die Aussage „known =<br />

dom birthday“ ist eine Beziehung, die in jedem Zustand des Systems wahr sein muss<br />

<strong>und</strong> von jeder Operation aufrechterhalten werden muss, eine Invariante des Systems.<br />

Hier wird ausgedrückt, dass die Menge known gleich der Definitionsmenge der<br />

Funktion birthday sein muss. Known kann durch die Invariante aus der Funktion<br />

birthday abgeleitet werden.<br />

Ein möglicher Zustand des Systems, der die Invariante erfüllt:<br />

known = {John, Mike, Susan}<br />

birthday = { John → 25.März,<br />

Mike → 20.Dezember,<br />

Susan → 20.Dezember}<br />

Formale Methoden zur Anforderungsspezifikation<br />

17


Nach der Beschreibung des Zustandsraumes können darauf mögliche Operationen<br />

beschrieben werden. Hier eine Operation, die es ermöglicht Geburtstage hinzuzufügen:<br />

AddBirthday<br />

∆BirthdayBook<br />

name? : NAME<br />

date? : DATE<br />

Durch die Deklaration ∆BirthdayBook wird ein Schema eingeleitet, das eine<br />

Zustandsänderung auf dem durch BirthdayBook beschriebenen Zustandsraum bewirkt.<br />

Dadurch werden vier Variablen eingeführt. Known <strong>und</strong> birthday als Zustände vor der<br />

Zustandsänderung, known’ <strong>und</strong> birthday’ als solche nach der Änderung. Jedes<br />

Variablenpaar muss die Invariante erfüllen. Als nächstes erfolgt die Deklaration der<br />

Eingänge in die Operation: name? <strong>und</strong> date?. Die Fragezeichen zeigen, dass die<br />

betreffende Variable eine Eingangsvariable ist. Eine Ausgangsvariable würde durch ein<br />

Ausrufezeichen gekennzeichnet werden.<br />

Durch „name? ∉ known” wird sichergestellt, dass der eingegangene Name noch nicht<br />

in der Menge known vorhanden ist. Es wird keine Aussage getroffen, was passiert<br />

wenn dies nicht so ist. Schließlich wird die Funktion birthday um den neuen Namen<br />

<strong>und</strong> das neue Datum erweitert.<br />

Nun kann erwartet werden, dass in der Menge known der neue Name auch vorhanden<br />

ist:<br />

known’ = known ∪ {name?}<br />

name? ∉ known<br />

birthday’ = birthday ∪ {name? → date?}<br />

Dieses Theorem kann mit Hilfe der Invariante bewiesen werden:<br />

known’ = dom birthday’ Invariante nach Operation AddBirthday<br />

= dom (birthday ∪ {name? → date?}) Spezifikation AddBirthday<br />

= dom birthday ∪ dom {name? → date?} Regel zum Operator dom<br />

= dom birthday ∪ {name?} Regel zum Operator dom<br />

= known ∪ {name?} Invariante vor Operation AddBirthday<br />

Somit ist das Theorem bewiesen.<br />

Formale Methoden zur Anforderungsspezifikation<br />

Dieser Vorgang heißt Theorem Prooving. Als Eingang in den Vorgang dienen eine<br />

Menge von Axiomen, eine zu prüfende Bedingung <strong>und</strong> eine Menge von Beweisregeln.<br />

Die Bedingung <strong>und</strong> die Axiommenge muss in der gleichen formalen Sprache vorliegen.<br />

Dann kann die zu prüfende Bedingung formal bewiesen werden bzw. es kann bewiesen<br />

werden, dass sie nicht zutrifft.<br />

18


Hierdurch kann die Fehlerfreiheit (die Konsistenz <strong>und</strong> Eindeutigkeit) einer Spezifikation<br />

bewiesen werden. Außerdem können neue Eigenschaften abgeleitet werden. Das<br />

Theorem Prooving ist somit <strong>für</strong> die Verifikation von großer Bedeutung.<br />

Es gibt Werkzeuge, die dieses automatisch durchführen können. Diese sind aber in<br />

ihrer Leistungsfähigkeit begrenzt. Da in der Praxis die Theoreme sehr viel länger sind<br />

als in diesem Beispiel, sind auch sehr viele Permutationen der einzelnen Variablen des<br />

Theorems möglich. Der Theorem Proover benötigt dann sehr viel Zeit, um alle diese<br />

durchzugehen <strong>und</strong> den Beweis zu versuchen.<br />

19


Formale Methoden zur Anforderungsspezifikation<br />

4.4 Praxisbeispiel: Traffic alert and Collision Avoidance System (TCAS)<br />

In der Luftfahrt wurden formale Methoden bei der Entwicklung des Traffic Alert and<br />

Collision Avoidance system (TCAS) eingesetzt. Dieses System soll Zusammenstöße<br />

zwischen zwei Flugzeugen in der Luft verhindern. Es gibt den Piloten in gefährlichen<br />

Situationen Anweisungen zur Änderung der Höhe, um einen Zusammenstoß zu<br />

vermeiden.<br />

Die FAA (Federal Aviation Authority, Luftfahrtbehörde der USA) akzeptierte 1990 die<br />

Anforderungsspezifikation des TCAS nicht als Basis <strong>für</strong> eine Zertifizierung. Die<br />

Spezifikation bestand aus Englisch <strong>und</strong> Pseudocode, war also nicht formal. Um dieses<br />

Problem zu lösen wurde aus dieser nicht formalen eine formale Spezifikation<br />

entwickelt. Als formale Methode wurde dabei RSML (Requirements State Machine<br />

Language), eine Weiterentwicklung der Statecharts, eingesetzt. Der Umfang der<br />

Spezifikation blieb dabei gleich. Im folgenden ist das Statechart der höchsten Ebene<br />

der TCAS Spezifikation abgebildet (Abbildung 4). Zusätzlich zu den Statecharts werden<br />

die Transitionsbedingungen durch Tabellen dargestellt.<br />

Abbildung 4: Höchste Ebene der TCAS Spezifikation aus Heimdahl [Hei02]<br />

Nach der Fertigstellung der formalen Spezifikation, erfolgte eine Verifikation <strong>und</strong><br />

Validierung um die Pseudocode Spezifikation mit der RSML Spezifikation zu<br />

vergleichen. Durch Modell Checking wurde die RSML Spezifikation auf Konsistenz <strong>und</strong><br />

Korrektheit überprüft. Beim Modell Checking wird überprüft, ob eine Bedingung in<br />

allen möglichen Zuständen des Statechart gültig ist.<br />

20


Beispiel <strong>für</strong> eine geprüfte Bedingung:<br />

Verhinderung von fehlerhaften Ausweichmanövern:<br />

Formale Methoden zur Anforderungsspezifikation<br />

(Radio-Altimeter-Status = Valid & Own-Alt-Radio ≤1450) → ! Increase-Descend)<br />

Dies bedeutet: Die Sinkrate nicht erhöhen, wenn die Höhe unter 1450 Fuß <strong>und</strong> der<br />

Höhenmesser funktionsfähig ist.<br />

Hierbei wurden viele Unstimmigkeiten entdeckt. Diese waren alle auf die fehlerhafte<br />

Pseudocode Spezifikation zurückzuführen, aus der die RSML Spezifikation entwickelt<br />

worden war.<br />

Ergebnis der Betrachtung war, dass formale Methoden helfen die Anforderungen<br />

fehlerfrei zu erfassen <strong>und</strong> eine kürzere Zeit zur Zertifizierung nötig wird.<br />

21


5. Fazit<br />

Fazit<br />

Die Anforderungsspezifikation ist die Gr<strong>und</strong>lage des Entwicklungsprozesses. Daher ist<br />

die Erfüllung der an sie gestellten Forderungen (Vollständigkeit, Korrektheit,...) <strong>für</strong> den<br />

Erfolg der Entwicklung von größter Bedeutung.<br />

Formale Methoden sind sehr hilfreich um diese Eigenschaften zu erreichen, da sie die<br />

Möglichkeit bieten einige Eigenschaften zu beweisen <strong>und</strong> bei anderen die Prüfung<br />

erheblich erleichtern. Sie erhöhen das Vertrauen in ein System, da bewiesen werden<br />

kann, das die Implementierung die Anforderungen in der Anforderungsspezifikation<br />

erfüllt. Besonders im sicherheitskritischen Bereich wird der Einsatz formaler Methoden<br />

aufgr<strong>und</strong> dieser Eigenschaften unverzichtbar.<br />

Der einzige Nachteil beim Einsatz formaler Methoden ist die relativ komplizierte<br />

Anwendung. Nach einer Einarbeitungszeit fällt dieser Nachteil aber weg.<br />

Insgesamt überwiegen, meiner Meinung nach, die Vorteile beim Einsatz formaler<br />

Methoden.<br />

Außerdem sind formale Methoden sehr nützlich, um eine Zertifizierung zu erlangen<br />

bzw. sie sind sogar da<strong>für</strong> gefordert.<br />

In Zukunft werden formale Methoden immer häufiger zur Entwicklung von<br />

sicherheitskritischen Systemen eingesetzt. Dadurch werden viele Ausfallmöglichkeiten<br />

schon in der Entwicklung ausgeschlossen <strong>und</strong> die entwickelten Systeme werden<br />

zuverlässiger.<br />

22


6. Anhang<br />

6.1 Literaturverzeichnis<br />

[Ebe04] Ebert, C.: Folien zur Vorlesung Software Engineering for Real-Time Systems.<br />

Universität Stuttgart, WS 03/04<br />

[Ger94] Gerhart, S.; Craigen, D.; Ralston,T.: Experience with Formal Methods in<br />

Critical Systems. In: IEEE Software, Januar 1994, S. 21-39<br />

[Gie04] Giese, H.: Folien zur Vorlesung Software Engineering for Safety Critical<br />

Computer Systems. Universität Paderborn, WS 03/04<br />

[Hei02] Heimdahl, M.; Leveson, N.; Reese, J. D.: Experiences form specifying the<br />

TCAS II reguirements using RSML. 2002<br />

[Kle03] Kleinjohann, B.: Folien zur Vorlesung Eingebettete Systeme. Universität<br />

Paderborn, WS 02/03<br />

[Lap92] Laprie, J. C. (Hrsg.): Dependability: Basic Concepts and Terminology in<br />

English, French, German Italian and Japanese. Wien, Springer Verlag, 1992<br />

[Lev95] Leveson, N.: Safeware: System Safety and Computers. Addison-Wesley, 1995<br />

[McD93] McDermid, J.A.: Formal Methods: Use and Relevance for the Development of<br />

Safety Critical Systems. In: Safety Aspects of Computer Control (Hrsg.:<br />

Bennett,P.), Oxford, Butterworth-Heinemann, 1993, S. 96-153<br />

[Som01] Sommerville, I.: Software Engineering. Addison-Wesley, 2001<br />

[Spi92] Spivey, J.M.: The Z-Notation: A Reference Manual. second edition, Hemel<br />

Hempstead, Prentice Hall, 1992<br />

[Sto96] Storey, N.: Safety-Critical Computer Systems. Addison-Wesley, 1996<br />

6.2 Abbildungsverzeichnis<br />

Abbildung 1: V-Lifecycle aus Storey [Sto96]<br />

Abbildung 2: Kosten der Fehlerkorrektur aus Ebert [Ebe04]<br />

Abbildung 3: Vergleich Codegröße automatisch / manuell erzeugter Code aus<br />

Kleinjohann [Kle03]<br />

Abbildung 4: Höchste Ebene der TCAS Spezifikation aus Heimdahl [Hei02]<br />

Anhang<br />

23

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!