praktikum automatisierter entwicklungsprozess von ... · vii kurzfassung das praktikum...
TRANSCRIPT
Verantwortlicher Hochschullehrer : Prof. Dr.-Ing. C. Wietfeld
Version vom : 31 July 2015
Lehrstuhl für Kommunikationsnetze
Prof. Dr.-Ing. Christian Wietfeld
Praktikum
Automatisierter Entwicklungsprozess von Kommunikationssystemen
Redaktion: Dipl.-Ing. Dipl.-Kfm. Ralf Burda
III
Inhaltsverzeichnis
Kurzfassung VII
1 Einleitung 1
1.1 Thema der Fallstudie ................................................................................. 1
1.2 Didaktische Zielsetzung des Praktikums ................................................ 2
1.3 Zeitplanung ................................................................................................ 2
2 Ansätze der automatisierten Entwicklung 3
2.1 Problemfeld „Qualität“ .............................................................................. 3
2.2 Ziel des automatisierten Entwicklungsprozesses .................................. 4
2.3 Typische Werkzeuge ................................................................................. 4
2.3.1 Modellierung ..................................................................................... 4
2.3.2 Test und Verifikation ......................................................................... 5
3 Die Arbeitsumgebung 7
3.1 Verwendete Werkzeuge ............................................................................. 7
3.1.1 Die Eclipse Workbench und deren Installation.................................. 7
3.1.2 Yakindu Statechart Tools ................................................................ 11
3.1.3 TTWorkbench ................................................................................. 12
3.1.4 AVR Tools in der Übersicht............................................................. 12
3.2 Die Hardwareplattform ............................................................................ 12
3.2.1 Der Prozessor ................................................................................. 12
3.2.2 Die I/O Schnittstellen ...................................................................... 13
3.2.3 Die Funkschnittstelle ....................................................................... 14
3.2.4 Kommunikation zu einem PC.......................................................... 14
3.3 Das Programmiergerät ............................................................................ 14
3.3.1 Handhabung ................................................................................... 14
3.3.2 Einbindung in die Werkzeugkette ................................................... 15
4 Das Anforderungsdokument 17
4.1 Allgemeines.............................................................................................. 17
4.2 Formlose Beschreibung des Systemverhaltens ................................... 17
4.3 Formale Struktur eines Anforderungsdokuments ................................ 18
IV Kurzfassung
5 Arbeitsablauf der automatisierten Entwicklung 21
5.1 Definition von Anwendungsfällen (Use-Cases) .................................... 21
5.1.1 Nutzung von Anwendungsfällen ..................................................... 21
5.1.2 Die Use–Case Notation .................................................................. 21
5.1.3 Alternative Methoden zur Definition (z.B. Mindmaps) ..................... 23
5.2 Definition der geforderten Systemkomponenten .................................. 24
5.2.1 Rollen von physischen Komponenten ............................................. 24
5.2.2 Aufgaben von Softwarekomponenten ............................................. 24
5.3 Definition der Wirkungszusammenhänge ............................................. 25
5.3.1 Inter-Komponenten Kommunikation ............................................... 25
5.3.2 Beschreibung von Testfällen........................................................... 26
5.4 Eingabe der Zustandsautomaten (State-Charts) ................................... 28
5.4.1 UML State–Charts vs. SDL ............................................................. 28
5.4.2 Eingabe eines State–Charts ........................................................... 30
5.4.3 Restriktionen bei der Eingabe ......................................................... 31
5.5 Simulation des Systemverhaltens .......................................................... 32
5.5.1 Planung der Simulation ................................................................... 32
5.5.2 Durchführung der Simulation .......................................................... 33
5.5.3 Interpretation der Ergebnisse.......................................................... 34
5.6 Erzeugung von ausführbarem Quelltext ................................................ 34
5.6.1 Codegenerierung aus abstraktem Modell ....................................... 34
5.6.2 Verstehen des erzeugten ‚C‘-Codes ............................................... 36
5.6.3 Funktion der Steuerungskonstrukte ................................................ 36
5.7 Einbettung in die Systemumgebung ...................................................... 37
5.7.1 Erstellung eines Software-Rahmens für die Ausführung ................ 37
5.7.2 Abbildung (Codierung) von Variablen auf physikalische I/O
Komponenten ................................................................................. 37
5.7.3 Vom Code-Review zum Integrationstest ......................................... 37
5.7.4 Definition von Testschnittstellen ..................................................... 38
5.8 Implementierung von Tests in TTCN-3 .................................................. 39
5.8.1 Erfassung von Testfällen ................................................................ 39
5.8.2 Bewertung der Ergebnisse (verdicts) .............................................. 40
5.8.3 Aussagekraft der Ergebnisse .......................................................... 41
5.9 Programmierung und Test auf dem Zielsystem .................................... 42
5.9.1 Verwendung des Programmiergerätes und Verkabelung ............... 42
5.9.2 Laden und Debuggen der erzeugten Software ............................... 43
V
5.10 Verifikation, Validierung und Abschlussdokumentation ..................... 44
6 Bedingungen für eine erfolgreiche Teilnahme 45
7 Praktikumsaufgaben 47
7.1 Allgemeines.............................................................................................. 47
7.2 Implementierung eines einfachen UML State–Charts .......................... 47
7.2.1 Beispiel: Etablierung des Funknetzes (1,5h)................................... 47
7.2.2 Beispiel: Modellierung des Anmeldeprozesses (2,5h) .................... 47
7.3 Integration mit der Hardwareplattform .................................................. 48
7.3.1 Arbeiten mit der Quellcodeverwaltung (0,5h) .................................. 48
7.3.2 Verwendung der Team–Funktionen (1h) ........................................ 48
7.3.3 Aufbau einer Ausführungsumgebung auf der Zielplattform (2h) ..... 48
7.4 Einführung in die Fallstudie.................................................................... 49
7.4.1 Erstellung einer Demoapplikation (1,5h) ......................................... 49
7.4.2 Verbesserung des Beispiel–State–Charts (1h) ............................... 49
7.4.3 Pflege des Anforderungsdokuments (0,5h) .................................... 49
7.5 Lokale Tests auf der Hardwareplattform ............................................... 50
7.5.1 Erstellung, Programmieren und Debugging (2h) ............................. 50
7.5.2 Austausch des manuellen Codes gegen ein State–Chart (1h) ....... 50
7.5.3 Einbindung der Demoapplikation in den Hardwarekontext (1h) ...... 50
7.6 Integration des Funknetzes (I) ................................................................ 50
7.6.1 Umsetzung einer Beispielapplikation (3h) ....................................... 50
7.6.2 Integration von Applikation und Funkschnittstelle (3h) .................... 51
7.7 Integration des Funknetzes (II) ............................................................... 51
7.7.1 Tests zwischen 2 Komponenten (3h) .............................................. 51
7.7.2 Integration zwischen Teams (3h) .................................................... 51
7.8 Erstellung von Testszenarien in TTCN-3 ............................................... 52
7.8.1 Einbindung der Demo–Applikation in den Test (2h) ........................ 52
7.8.2 Einbindung der Hardware in die Testumgebung (1,5h) .................. 52
7.8.3 Grundlagen des automatisierten Testens (1,5h) ............................. 52
7.9 Qualifikation und Freigabe des Ergebnisses ........................................ 52
7.9.1 Einbindung der Hardware in den Testablauf (2h) ........................... 52
7.9.2 Abschlussdokumentation (2h)......................................................... 53
VII
Kurzfassung
Das Praktikum „Automatisierter Entwicklungsprozess von Kommunikationssys-
temen“ stellt an Hand der Fallstudie „Funkbasiertes Sensornetzwerk“ den
Arbeitsablauf von der ersten Idee über eine modellbasierte Beschreibung bis zur
lauffähigen Implementierung einer Lösung auf einer bestehenden
Hardwareplattform dar.
Bei der Durchführung des Praktikums wechseln die Einführung von Werkzeugen
und Arbeitstechniken im Plenum sowie die Erarbeitung von Ergebnissen in
Kleingruppen einander ab. Das Praktikum beginnt mit der Einführung in die
verwendete Werkzeugkette und ersten Arbeitsschritten bei der Erstellung der
Projektumgebung sowie der Zusammenarbeit im Team. Es folgen eine Einführung
in die Erstellung und Verwaltung der Projektdokumente und praktische Versuche an
der Zielplattform.
Im Anschluss an diese Einführungsphase beginnt die Strukturierung der Lösung mit
der Erstellung von Mindmaps und UML Anwendungsfalldiagrammen. Hieraus
werden dann im Weiteren Statecharts sowie Testfälle definiert, deren Verifikation
zunächst durch Simulationen erfolgt.
Nach erfolgreichem Abschluss dieses Projektschritts wird dann die formale
Beschreibung in lauffähigen Code transformiert. Diese Transformation wird
automatisiert durch die Entwicklungsumgebung durchgeführt.
Die nächste Aufgabe ist dann die Einbettung der erstellten Lösung in den Rahmen
der Zielplattform. Diese Phase schließt mit der Programmierung der Netzknoten und
einem ersten Funktionstest ab.
Das Praktikum endet mit einer Verifikation und einer einfachen Validierung der zu
Beginn im Design festgelegten Funktionalitäten und der Erstellung eines
Abschlussdokuments.
1
1 Einleitung
1.1 Thema der Fallstudie
Im Praktikum wird die Aufgabe der funkbasierten Kommunikation von einem (oder
mehreren) mobilen Sensoren zu einer zentralen Sammelstelle mit Methoden der
modellgetriebenen Systementwicklung gelöst. Die mobilen Knoten sollen dabei
Umwelteinflüsse (z.B. einen Tastendruck) per Funkkommunikation an die zentrale
Station melden. Letztere überträgt dann diese Daten (per USB) an einen PC. Dieser
wiederum stellt die Ereignisse und den Zeitpunkt ihres Auftretens in einer minimalen
Oberfläche dar.
Abbildung 1: Grundkonzept des Fallstudie
In dieser einfachen Konfiguration können bereits wesentliche Elemente einer
mobilen Kommunikation nachvollzogen werden, wie z.B.
- Rollenverhalten der Funkteilnehmer
- Identifizierung des mobilen Teilnehmers
- Überwachung bekannter und aktiver Kommunikationsverbindungen
- Behandlung von Übertragungsfehlern
Die operativen Aufgaben des Praktikums führen von ersten Designüberlegungen bis
hin zu einer vollständigen Lösung der gestellten Problematik und umfassen neben
der funktionalen Umsetzung mit Hilfe einer weitgehend automatisierten
Werkzeugkette auch Aspekte der Dokumentation und Verifikation der erarbeiteten
Lösungen.
Im Rahmen des Praktikums wird diese Grundkonfiguration zu einer kompletten
Ampelsteuerung mit Fußgängerampel erweitert, deren Aufbau in Abbildung 2
skizziert ist.
USB
Funkkanal2,4GHz
2 Einleitung
Abbildung 2: Vollständiger Aufbau der Fallstudie
1.2 Didaktische Zielsetzung des Praktikums
Es werden Wissen und Fähigkeiten vermittelt, wie automatisierte Umgebungen die
Qualität des Softwareentwicklungsprozesses für Kommunikationssysteme positiv
beeinflussen und die Arbeitsabläufe effizient gestalten. In diesem Kontext werden
auch Methoden und Kompetenzen in der Teamarbeit vermittelt.
Operativ werden diese Fähigkeiten bei der Umsetzung des Systems der Fallstudie
trainiert und die notwendigen, einzelnen Arbeitsschritte bis zur erfolgreichen
Umsetzung einer Lösung erprobt.
Alle erfolgreichen Teilnehmer sollen am Ende des Praktikums Fähigkeiten
entwickelt haben die folgenden Aufgaben zu übernehmen:
Identifikation von Teilproblemen bei der Lösung einer gestellten
Entwicklungsaufgabe.
Bewertung von Werkzeugen im Hinblick auf die Nutzbarkeit für bestimmte
Problemklassen.
Spezifikation von Arbeitsabläufen durch Wahl geeigneter Methoden.
Erstellung von Anforderungsdokumenten.
Erstellung von einfachen Prüfplänen.
1.3 Zeitplanung
Das Praktikum besteht aus insgesamt 15 Sitzungen zu je 3 (Zeit-)Stunden. Eine
weitere Sitzung kann bei Bedarf, z.B. zur Vervollständigung von Dokumenten, in
Absprache mit der Praktikumsleitung als Ersatz für das notwendige Eigenstudium,
eingerichtet werden.
Die einzelnen Sitzungen werden wechselnd für die Einführung in Werkzeuge und
Arbeitstechniken und für die Durchführung praktischer Tätigkeiten der Studierenden
genutzt.
Die Inhalte der Sitzungen bauen aufeinander auf, so dass eine kontinuierliche
Mitarbeit der Studierenden notwendig ist.
USB
Funkkanal2,4GHz
3
2 Ansätze der automatisierten Entwicklung
2.1 Problemfeld „Qualität“
Eines der wesentlichen Ziele bei der Entwicklung jeglichen Produkts ist die
Erreichung einer hohen Produktqualität.
Qualität (ist die) Gesamtheit von Eigenschaften und Merkmalen eines Produkts oder
einer Tätigkeit, die sich auf deren Eignung zur Erfüllung gegebener Erfordernisse
bezieht [DIN 55350, Teil 11]
Da Eigenschaften und Merkmale nicht nur von der Intension des Herstellers
sondern auch wesentlich von der Qualität des gesamten Entwicklungs– und
Fertigungsprozesses abhängen, sind Fehlerquellen in allen Phasen eines
Produktlebenszyklus nach Möglichkeit auszuschließen.
Bei sehr komplexen Systemen wie Kommunikationssystemen, die aus einer Vielzahl
miteinander interagierender Komponenten bestehen und die typisch verteilt durch
große Gruppen von Mitarbeitern entwickelt werden, stellt bereits der korrekte
Austausch und das Verständnis von Planungsdokumenten eine Herausforderung
dar. (Wer hat wann, was und in welcher Version getan?)
Die Qualitätsdefinition nach ISO 9216 spannt ein weites Feld der Begriffsdefinition,
die sich beispielsweise wie folgt strukturieren lässt:
Qualität bzw. deren Wahrnehmung wird z.B. beeinflusst durch
Funktionalität
o Angemessenheit
o Sicherheit
o Genauigkeit
o Interoperabilität
o Konformität zu Standards
Zuverlässigkeit
o Reife
o Fehlertoleranz
o Wiederherstellbarkeit
Benutzbarkeit
o Verständlichkeit
o Erlernbarkeit
o Bedienbarkeit
Effizienz
o Zeitverhalten
o Verbrauchsverhalten
o Kosten
Änderbarkeit
o Analysierbarkeit
o Modifizierbarkeit
o Stabilität
o Prüfbarkeit
Übertragbarkeit
o Anpassbarkeit
o Installierbarkeit
o Austauschbarkeit
o Konformität zu Standards
Es wird allgemein angenommen, dass die zuvor genannten Schlagwörter sich mit
bewertbaren Attributen eines Produkts und seines Fertigungszyklus assoziieren
lassen und Qualität so messbar wird.
Gleichzeitig erscheint offensichtlich, dass die Bewertung z.B. der „Verständlichkeit“
sicher individuell vom Anwender und dessen Erwartungen abhängt. Die Abbildung 3
skizziert hier die Zusammenhänge für den Bereich der Softwareentwicklung.
4
Abbildung 3: Einfluss auf die Qualität (nach Braune, TU Braunschweig)
Dabei stellt die „Entwicklung“ den zeitlichen Verlauf von der Idee bis zur
Realisierung dar. „Verifikation“ fragt dabei immer „haben wir es richtig gemacht?“,
d.h. entspricht ein lauffähiges Programm nachweisbar den Vorgaben aus dem
Anforderungsdokument. „Validierung“ hingegen fragt „haben wir das Richtige
gemacht?“, sind also die Erwartungen des Anwenders erfüllt worden.
2.2 Ziel des automatisierten Entwicklungsprozesses
Die Automation von Prozessen hat allgemein (z.B. in der Automobilindustrie) den
Anspruch, ein bestimmtes Qualitätsniveau reproduzierbar lieferbar zu machen. In
Abbildung 3 ist veranschaulicht, dass durch den Prozess der Entwicklung eine
Transformation von Dokumenten erfolgt. Letztlich ist ein Anforderungsdokument
ebenso ein Text wie eine (maschinenlesbare) Modellbeschreibung und am Ende der
Wirkungskette der Programmcode (Quelltext).
Die Arbeitsaufgabe der Softwareentwicklung lässt sich also als eine „Übersetzung“
von abstrakten Beschreibungen in eine konkrete Implementierung verstehen.
In diesem Praktikum soll nun dargestellt werden, mit welchen Methoden dieser
Transformationsprozess reproduzierbar, verifizierbar, validierbar, effizient und im
Ergebnis für den Anwender verständlich gestaltet werden kann.
Es werden daher Softwarewerkzeuge eingesetzt, die den Anteil des manuell
generierten Codes im Gesamtsystem minimieren und Komplexität durch grafische
Methoden (Modelleingabe) handhabbar machen.
2.3 Typische Werkzeuge
2.3.1 Modellierung
Für die grafische Modellierung auf dem Weg vom Anforderungsdokument hat in den
letzten Jahren die Unified–Modeling–Language (UML) zunehmend an Bedeutung
gewonnen. Die Modellierung der Funktionalität für die in diesem Praktikum steht
Qualitätsempfinden(Benutzererwartungen)
Anforderungsdokument
ProgrammCodeModelle
Entwicklung
Verifikation Verifikation
Val
idie
run
g
Typische Werkzeuge 5
dabei neben der Erfassung der Beziehung zwischen System und Anwender in
Vordergrund.
UML selbst bietet mit sieben Struktur– und sieben Verhaltensdiagrammen eine
Vielzahl von standardisierten Diagrammtypen an. Diese Diagramme, z.B. unter
http://www.omg.org/spec/UML/2.3/ spezifiziert, sind jedoch nur zu einem kleinen
Teil dazu geeignet, als Teil einer automatisierten Werkzeugkette für einen konkreten
Anwendungsfall zu dienen. Dies sind insbesondere:
Das Klassendiagramm:
Dieses Diagramm beschreibt die statische Struktur einer Software. Darunter
fallen Hierarchien von Klassen und Abhängigkeiten von Datentypen
untereinander.
Klassendiagramme stellen somit keine Funktionalität bereit, liefern aber eine
Übersicht über implementierte Funktionen und die Struktur der Software.
Die Semantik der Klassendiagramme lässt (bei korrekter Wahl der
Nomenklatur) eine direkte Erzeugung von Quelltext in unterschiedliche
Zielsprachen zu.
Das State–Chart Diagramm:
Dieses Diagramm beschreibt das Verhalten eines Softwareobjekts in Form
eines so genannten endlichen Automaten. (Finite–State–Machine (FSM)).
Die Semantik des Diagramms erlaubt es dann, direkt eine Ablaufsteuerung in
einer Zielsprache zu erzeugen. Das UML State–Chart ist in der in diesem
Praktikum verwendeten Form eine Weiterentwicklung der so genannten
SDL–Charts (System Description Language).
Grundsätzlich ist es jedoch in UML zulässig, Elemente und Zusammenhänge auch
in englischer Sprache, d.h. in einer natürlichen Sprache, zu notieren. Damit scheidet
in vielen Fällen die automatisierte Nutzung des Weges „Entwicklung“ aus Abbildung
3 aus. Durch konsistente Namensgebung kann allerdings ein Kontext zwischen
unterschiedlichen Diagrammen etabliert werden, so dass geeignete Werkzeuge
sehr wohl Fragen der Verifikation wie:
Gibt es zu jedem angeforderten Element auch eine Klasse?
Ist für jeden Anwendungsfall eine Verhaltensbeschreibung des Systems
implementiert?
beantworten können.
Darüber hinaus bietet UML eben durch die „lesbare“ Notation in vielen Fällen die
geforderte Möglichkeit der Validierung mit dem Anwender.
2.3.2 Test und Verifikation
In Kommunikationssystemen, z.B. in Mobilfunksystemen, liegt eine der
Schwierigkeiten bei der Verifikation in der schier unüberschaubaren Menge von
Ereignissen, Zeitabläufen und Systemvariablen. Der Foliensatz https://www.tu-
braunschweig.de/Medien-DB/isf/sse/vl8_testen.pdf gibt eine gute Übersicht über
die generelle Testproblematik.
Unter der Prämisse, dass eine Entwicklung auch in adäquater Zeit fertig zu stellen
ist, erscheint offensichtlich, dass ein vollständiger Test eines Systems nie möglich
sein wird (dies lässt sich auch formal nachweisen). Jedoch lassen sich häufig die
6
definierten Anwendungsfälle so in Aktivitätssequenzen abbilden, das zumindest für
die geplante Anwendung eine korrekte Funktion geprüft werden kann.
Um die Beschreibung dieser Tests zu standardisieren und zu automatisieren, wird in
diesem Praktikum ein weiteres professionelles Werkzeug, die TTWorkbench,
verwendet. Hierbei werden Tests in der so genannten „Test and Testing Control
Notation“ (TTCN-3) beschrieben und schließlich zur Ausführung gebracht. Diese
Methode erlaubt es eine Vielzahl von reproduzierbaren Tests in kurzer Zeit
automatisch ablaufen zu lassen und die Resultate der Tests, ebenfalls
standardisiert, zu bewerten.
TTCN-3 stammt originär aus dem Umfeld der Kommunikationssysteme und wird
häufig für Integrationstests und Systemtests verwendet. Extensive, manuelle Tests,
wie sie Ende der 80’er Jahre des 20. Jahrhunderts noch durchgeführt wurden,
werden damit abgelöst.
TTCN-3 und die entsprechenden Werkzeuge beantworten jedoch nicht die Frage,
ob ein Test auch zielführend, sinnvoll, effizient oder überhaupt mit einem
Anwendungsfall in Deckung ist.
7
3 Die Arbeitsumgebung
3.1 Verwendete Werkzeuge
3.1.1 Die Eclipse Workbench und deren Installation
Die Bearbeitung praktisch aller Aufgaben dieses Praktikums wird im „Eclipse“
Framework durchgeführt. Diese so genannte „Workbench“ erlaubt die Integration
vielseitiger Werkzeuge in einen gemeinsamen Arbeitsablauf. Die wesentlichen, hier
verwendeten Komponenten, setzen sich aus dem Modeling Framework, einem UML
Eingabe und Simulationswerkzeug (Yakindu), der C/C++ Programmierumgebung
und spezifischen Werkzeugen für die Programmierung der Zielhardware
zusammen.
Diese Arbeitsumgebung ist kostenfrei unter EPL (Eclipse Public License) erhältlich
und kann für das im Praktikum vorgesehene Eigenstudium wie folgt installiert
werden.
1) Download des Eclipse Juno(4.2) Modeling frameworks
Die Installation erfolgt durch einfaches Entpacken an beliebiger Stelle auf
Ihrer Festplatte.
2) Wechseln Sie in den entsprechenden Ordner und entpacken Sie das Archiv
8 Die Arbeitsumgebung
3) Starten Sie Eclipse durch Doppelklick.
Achten Sie bei der Auswahl der Workspace im Retina Pool darauf, dass Sie
nicht die Voreinstellung akzeptieren, sondern den Arbeitsbereich mit
„R:\workspace“ initialisieren. Stellen Sie sicher, dass es sich um einen neuen
Arbeitsbereich handelt.
4) Sie sehen nun folgendes Fenster.
5) Installieren Sie nun die C/C++ Programmierumgebung, in dem Sie zunächst
den Menupunkt „Help->Install New Software“ auswählen
Verwendete Werkzeuge 9
6) Sie erhalten einen Auswahldialog, in dem Sie unter „Work with“ den Eintrag
http://download.eclipse.org/releases/juno per dropdown auswählen. Öffen
Sie dann in der Auswahl den Knoten „Programming Languages“ und
selektieren Sie die gezeigten 5 Einträge, so dass hier (und nur hier) jeweils
ein Haken gesetzt ist.
Stellen Sie sicher, dass weiter unten auch ein Haken bei „show only latest
version of available software“ gesetzt ist.
Danach bestätigen Sie Ihre Auswahl durch klicken auf „Next“. Nach dem
zweiten „Next“ werden Sie zum Akzeptieren der EPL (Eclipse Public License)
aufgefordert. Bestätigen Sie dies und klicken Sie dann auf „Finish“. Nun wird
die C/C++ Programmierumgebung installiert.
Abschließend startet Eclipse auf Nachfrage neu.
10 Die Arbeitsumgebung
7) Wiederholen Sie den Installationsschritt und verwenden Sie dieses Mal
http://updates.yakindu.com/juno/milestones als Repository für die
Installation. Selektieren Sie alle Komponenten und bestätigen Sie alle
weiteren Anfragen positiv. Am Ende des Installationsvorgangs wird Eclipse
einen Neustart verlangen.
8) Testen Sie nun Ihre Installation, in dem Sie über File->New das vorgefertigte
Beispiel für ein Statechart erzeugen.
9) In einem weiteren Installationslauf wird nun die Werkzeugkette für den
Mikrocontroller, die so genannte AVR Toolchain, installiert. Gehen Sie
erneut wie in den vorangegangenen Schritten vor und wählen Sie http://avr-
eclipse.sourceforge.net/updatesite als Quelle aus und installieren Sie alles
wie gefordert.
Bitte beachten Sie, dass Sie nach der Installation zunächst keine direkten
Veränderungen an den Eclipse Menus feststellen werden. Erst beim
Versuch, über den Menupunkt „File->New->Others“ ein neues C/C++ Projekt
anzulegen, finden Sie in einer Auswahlbox die entsprechenden Projekttypen.
In diesem Praktikum werden wir den Projekttyp „AVR Cross Target
Application verwenden.“
Verwendete Werkzeuge 11
Nach dem Erstellen eines entsprechenden Projekts erscheint für den
umgebenden Arbeitsbereich im Hauptmenu von Eclipse nun ein Eintrag
„AVR“.
10) Abschließend benötigen Sie noch ein Werkzeug, um in Ihrem Team die
verwendeten Dokumenten zwischen allen Teilnehmern zu synchronisieren.
Hierzu installieren Sie ein entsprechendes Revisionierungswerkzeug
von http://subclipse.tigris.org/update_1.8.x. Mit dessen Hilfe werden
während des Praktikums die entstandenen Originaldokumente gesichert und
ihre jeweilige Historie gespeichert.
Die Installation ist nun abgeschlossen. Während der Durchführung des Praktikums
werden Sie mit der Erstellung von weiteren, notwendigen Projekten und deren
Handhabung in unterschiedlichen Arbeitsschritten vertraut gemacht.
3.1.2 Yakindu Statechart Tools
Die Yakindu Statechart Tools lassen die Eingabe einer Untermenge der Unified
Modeling Language (UML) zu, und zwar die so genannten State Charts. Neben den
so genannten Klassendiagrammen (Class Diagrams) sind die Statecharts
grundsätzlich die einzigen UML Diagrammtypen, die sich direkt in Quelltext anderer
Programmiersprachen umsetzten lassen.
Statecharts stellen in dieser Hinsicht ein modernes Analogon zu der schon länger
bekannten Sprache SDL (System Description Langugage) dar und erlauben die
Formulierung so genannter endlicher Automaten (oder Finite State Machines,
FSMs). In der vorliegenden Version ist es möglich, die definierten Diagramme bzw.
die durch sie modellierte Funktionalität direkt in Eclipse zu simulieren.
12 Die Arbeitsumgebung
3.1.3 TTWorkbench
Die TTWorkbench ist ein professionelles und anerkanntes Werkzeug zur Definition
von Testfällen für Softwareartefakte. Dies schließt die Erstellung, Dokumentation
und die Ausführung von Testfällen ein.
TTWorkbench benötigt eine aktive Softwarelizenz und ist auf den
Arbeitsumgebungen im Praktikumspool vorinstalliert. Da keine public license für die
Nutzung im Eigenstudium zur Verfügung steht, wird auf Installation, Funktion und
Bedienung an dieser Stelle nicht eingegangen.
3.1.4 AVR Tools in der Übersicht
Die AVR Tools stellen die Entwicklungsumgebung für die Zielplattform bereit. Hierzu
gehören im Wesentlichen die Komponenten „Compiler“ und „Linker“. Ersterer
erzeugt im Praktikum aus den (zum großen Teil automatisch erzeigten Quelltexten)
einen für die Ziel-MCU ausführbaren Binärcode, während der Linker den Binärcode
der unterschiedlichen Module (Quelldateien) verbindet und Abhängigkeiten
zwischen diesen auflöst. Am Ende des Linker-Laufs werden dann den Elementen
dieses Objekt-Codes feste Speicheradressen zugewiesen und eine für das
Programmierwerkzeug lesbare Ausgabedatei erstellt.
ACHTUNG: Versuchen Sie nie, diese Datei auf Ihrem PC auszuführen. In der Regel
ist das Format zwar für Ihr Betriebssystem unbekannt und wird daher abgewiesen,
aber sollte sich zufällig eine solche Datei laden lassen, so ist die Reaktion Ihres PC
unvorhersehbar.
3.2 Die Hardwareplattform
Im Rahmen dieses Praktikums werden Entwicklungssysteme des Typs
„deRFdevelopmentKit mega128“ verwendet. Diese bieten neben dem
Mikrocontroller (MCU) Modulen auch ein Adapter-Board, mit dem über Taster und
LED’s einfacher Zugang zu den Ein- und Ausgabeschnittstellen des verwendeten
Mikrocontrollers geschaffen ist.
Des Weiteren werden die Baugruppen per USB–Schnittstelle oder per Batterie mit
Strom versorgt. Die USB Schnittstelle kann auch gleichzeitig zur Kommunikation
eines Moduls mit dem angeschlossenen PC verwendet werden. Zu jeder
Arbeitsgruppe im Praktikum gehören
1) Ein Entwicklungskit incl. Kabel.
2) Ein USB-Steckernetzteil.
3) 1 Programmiergerät (siehe Abschnitt 3.3 auf Seite 14).
3.2.1 Der Prozessor
In diesem Praktikum findet ein 8-Bit Mikrocontroller des Typs ATMega128RFA1
Verwendung. Dieser Prozessor ist in der AVR RISC Architektur der Fa. Atmel
ausgeführt und bietet on Chip die Anbindung an eine Funkschnittstelle nach dem
Standard IEEE 802.15.4. Dieser wird häufig, wenn auch formal so nicht korrekt, mit
dem Namen „ZigBee“ assoziiert.
Die Hardwareplattform 13
Der Prozessor bzw. der vorhandene Flash Programmspeicher von 128kByte ist
über ein so genannten JTAG Interface programmierbar. Die für dieses Praktikum
relevanten Kenndaten sind:
Flash Speicher: 128kByte
RAM: 16kByte
Taktfrequenz: 16 MHz
Digitale Ein/Ausgangsleitungen: 32
Ein Datenblatt für diesen Mikrocontroller findet sich im Internet unter
www.atmel.com/Images/doc8266.pdf.
3.2.2 Die I/O Schnittstellen
Im Entwicklungssystem stehen als direkte Ein- und Ausgabefunktionen 1 Taster und
insgesamt 5 LED’s zur Verfügung. Diese werden durch das so genannte Sensor-
Terminal-Board (STB) und das Radic Controller Board (RCB) zusammengeführt,
wobei das STB auch die USB Schnittstelle enthält.
Abbildung 4: Entwicklungsboard mit Ein- und Ausgabe
Weiter Komponenten können über die Klemmleisten des STB (in Abbildung 4 am
unteren Rand) angeschlossen werden. Dies ist im Rahmen des Praktikums jedoch
nicht vorgesehen.
Von den pro Gruppe vorhandenen Einheiten wird jeweils eine direkt per USB an den
PC angeschlossen und dient so als zentrale Sammelstelle für die von der mobilen
Station eingehenden Daten.
ACHTUNG: Durch die Verwendung als Kommunikationsschnittstelle werden einige
der I/O Ports blockiert und stehen für eine freie Verwendung nicht mehr zur
Verfügung.
LED‘s ( 1 - 3 )
LED‘s ( 4 & 5)
Taster
14 Die Arbeitsumgebung
3.2.3 Die Funkschnittstelle
Die Funkschnittstelle arbeiten im 2.4GHz ISM Band und folgt in der
Implementierung der IEEE 802.15.4 Norm. Für die Nutzung und Programmierung
wird hier ein vorgefertigter Protokollstapel verwendet, wie er von Hersteller der MCU
kostenlos unter http://www.atmel.com/tools/IEEE802_15_4MAC.aspx angeboten
wird. Dieser Protokollstapel bietet über eine einfache Programmierschnittstelle die
Möglichkeit, Daten zwischen unterschiedlichen Stationen über den Funkkanal zu
übertragen.
Die maximale Datenrate des genannten Funkstandards beträgt 256kBit/s, jedoch
sind davon auf Grund des Overheads, des konkurrenzbasierten Zugriffs und
anderer Rahmenbedingungen im besten Fall ca. 128kBit/s nutzbar. Für die
Fallstudie dieses Praktikums spielt diese Beschränkung jedoch keine Rolle.
3.2.4 Kommunikation zu einem PC
Gegenüber dem PC stellt sich das STB als serielle Schnittstelle dar. Auf diese
Weise ist es relativ einfach, an dieser Stelle Textnachrichten, aber auch andere
Information von proprietärem Format, auszutauschen. Auf der PC Umgebung sind
entsprechende Treiber vorinstalliert, um aus der Eclipse Umgebung heraus direkt
mit einer seriellen Schnittstelle zu kommunizieren und diese in der im Praktikum
erstellten Softwareteilen zu verwenden.
3.3 Das Programmiergerät
3.3.1 Handhabung
Als Programmiergerät findet ein AVR JTAG ICE MkII Verwendung. Es stellt die
Verbindung zwischen PC (mit Entwicklungsumgebung) und der Zielhartware her.
Neben der Programmierung dient dieses Gerät auch dem Debugging auf der
Zielplattform, in dem es das Setzen von Unterbrechungspunkten sowie das
Auslesen und Setzen von Registern und Speicherbereichen der MCU ermöglicht.
Abbildung 5 Das Programmiergerät JTAG Ice MkII
Dieses Gerät wird über eine USB Schnittstelle mit dem Programmier- und Steuer
PC verbunden. Es wird von hier aus mit Energie versorgt und verwendet die USB
Das Programmiergerät 15
Schnittstelle gleichzeitig auch als Kommunikationsmedium für den
Programmiervorgang und das Debuggen.
Wichtig ist dabei das folgende Vorgehen:
1) Verbinden Sie zunächst die USB Schnittstelle des Programmiergeräts mit
dem PC.
2) Stellen Sie nun sicher, dass die Spannungsversorgung der Zielplattform
ausgeschaltet ist!
3) Verbinden Sie nun den 10 poligen JTAG Stecker (im Bild am Ende der
flexiblen Flachleitung) gemäß des Handbuchs der Zielplattform mit dem
Entwicklungsboard.
4) Schalten Sie nun die Versorgungsspannung des Zielsystems ein (z.B. durch
Einstecken einer USB Verbindung).
Jetzt sollte eine Verbindung zwischen dem PC, dem Programmiergerät und der
Zielplattform existieren. Bei der Durchführung des Praktikums werden Sie lernen,
die grundsätzliche Funktion dieser Verbindung vor dem eigentlichen
Programmiervorgang zu testen.
3.3.2 Einbindung in die Werkzeugkette
Das Programmiergerät bedarf neben den bereits unter 3.1.1 ab Seite 7
beschriebenen und installierten Softwarekomponenten keiner gesonderten
Betriebssoftware. Ist ein „AVR Cross Target“ Projekt aktiv, so erscheint in der
Werkzeugleiste von Eclipse ein Programmierknopf.
Diese Funktion in Eclipse wird in diesem Praktikum zu zwei Zwecken genutzt:
a) Kontrolle, ob ein Projekt tatsächlich für die Zielhardware kompatiblen Code
erzeugt.
b) Management der Projektinhalte
Die eigentliche Programmierung und das Debugging der Hardware wird außerhalb
von Eclipse unter einer herstellerspezifischen Applikation, dem Atmel Studio,
Version 6.0 vorgenommen. Diese Umgebung ist in das Framework des Microsoft
Visual Studio eingebettet. Ein so genannte „Solution“ wird einfach wie folgt
innerhalb des Eclipse workspaces angelegt. Diese Beschreibung geht davon aus,
dass Sie bereits in Ihrem Workspace ein AVR Cross Target C Projekt angelegt
haben, das den Namen „deRF-AEK“ trägt.
Für die Nutzung Ihres Netzlaufwerks im Retina Pool ist zu beachten, dass Sie
bei der Auswahl Ihres Arbeitsbereiches den Laufwerksbuchstaben „R:“
voranstellen sollten. Andernfalls gibt es Problem mit der Auflösung von
Pfaden im weiteren Verlauf.
16 Die Arbeitsumgebung
Klicken Sie im Startbildschirm des
Werkzeugs auf „New Project“
Wählen Sie nun den Projekttype „GCC C
Executable Project“ aus.
Selektieren Sie Ihren Eclipse Workspace als
Zielordner.
Geben Sie dem Projekt einen Namen und
beachten Sie, den Haken bei „Verzeichnis
für Lösung erstellen“ zu setzen.
Wählen Sie nun im nächsten Dialog die CPU
ATmega128RFA1 aus uns bestätigen Sie
mit „OK“.
ACHTUNG: Löschen Sie nun die automatisch
erstellte Datei „deRF-AEK.c“ sowohl aus dem
Projekt als auch von der Festplatte.
Modifizieren Sie nun die Projektoptionen unter „Projekt–>Eigenschaften“ (oder per
Alt-F7“. Setzen sie einen Haken bei der Option „use external makefile“ und
Navigieren Sie mit dem „Browse“ Knopf zu „./workspace/deRF-
AEK/Debug/makefile“. Bestätigen Sie die Auswahl mit „Öffnen“.
Damit sind die Einstellungen komplett und Sie können den Code für das Zielsystem
durch Drücken der Taste „F7“ erzeugen.
Ist die Übersetzung erfolgreich, so kann über die Debug-Funktionen der Oberfläche
der Code auf die Ziel-MCU geladen und dort ausgeführt werden.
Hinweis: Im Vergleich zu älteren Versionen des Atmel Studios hat diese Version
den Vorteil, die CPU zwischen mehreren Debug-Läufen nur dann neu zu
programmieren, wenn eine Änderung der Quelltexte gefunden wurde.
Das eigentliche Debugging kann nun mit den von Visual Studio bekannten
Tastenkombinationen begonnen werden. Nach dem Start der Software verharrt der
Cursor zunächst auf der ersten Zeile der „main“ Funktion.
Unter den Debug-Fenstern findet sich zusätzlich eine Möglichkeit, die register und
Ein–/Ausgabeleitungen der MCU direkt anzuzeigen.
Auf die Nutzung dieser Optionen wird während der Praktikumsdurchführung näher
eingegangen.
17
4 Das Anforderungsdokument
4.1 Allgemeines
Ein Anforderungsdokument sollte am Anfang jeder Entwicklung stehen. Dies gilt
ebenso für technische Systeme wie auch für viele andere Lebensbereiche. Ein
Beispiel:
Sie möchten ein Haus bauen. Die Intuition und die Lebenserfahrung lehrt
uns, dass dies ein komplexer, länger andauernder Prozess ist, der einer
guten Vorplanung bedarf. Die Größe des Hauses wird sich nach Ihren
Wünschen und auch nach Ihren finanziellen Möglichkeiten richten. Im
einfachsten Fall kann man die gewünschte Wohnfläche und die Anzahl der
benötigten Zimmer und ein maximales Finanzvolumen festlegen. Gibt es das
gewünschte nicht für den möglichen Finanzierungsrahmen, so muss an den
Anforderungen eine Änderung vorgenommen werden. Gibt es Alternativen,
so müssen weitere Anforderungen (z.B. Unterkellerung oder Größe des
Grundstücks) in die Entscheidung mit einbezogen werden.
Am Ende dieses Verfeinerungsprozesses wird dann die Entscheidung für den
Kauf eines bestimmten Objekts oder das Verwerfen des Plans stehen.
Bei der Entwicklung eines Kommunikationssystems stehen vergleichbar
strukturierte Überlegungen am Anfang.
Für welchen Einsatzfall wird das System geplant?
Wie kann ein Anwender das System später nutzen?
Für welche Zwecke ist das System in keinem Fall brauchbar?
Welche technischen Rahmenbedingungen sind bekannt?
Welcher finanzielle Rahmen ist für die Entwicklung und die spätere
Produktion maßgeblich?
Gibt es vergleichbare Systeme, die einen Mindeststandard definieren oder
gegenüber denen eine Differenzierung am Markt notwendig ist?
…
Im Rahmen dieses Praktikums werden ausschließlich technische Aspekte der
Lösung spezifiziert und später verifiziert und validiert. Die folgenden beiden
Abschnitte geben eine Übersicht über die notwendigen Dokumente und Inhalte.
4.2 Formlose Beschreibung des Systemverhaltens
Es sollte zunächst in einem einleitenden Kapitel in bebildertem Fließtext dargestellt
werden, wie die Antworten auf die im vorigen Abschnitt postulierten Fragen
aussehen sollen. In der Regel werden sich Anwender und Entwickler hier zunächst
auf einen losen Rahmen einigen, der später dann in eine Arbeitsplanung und eine
detaillierte Formulierung der Anforderungen entwickelt wird.
Durch die Interaktion in der Gruppe werden Ideen aus dem Vorfeld konkretisiert und
Machbarkeiten von einzelnen Lösungsansätzen abgeschätzt. Insbesondere ist hier
18 Das Anforderungsdokument
auch von Interesse, welcher Bedarf an Werkzeugen, Prototypen und
Zwischenberichten notwendig entsteht, um die kontinuierliche Validierung (in
Anlehnung an Abbildung 3) zu ermöglichen.
Der Übergang in die formalisierte Anforderungsdokumentation ist dann fließend. Im
Laufe des (in der Dokumentenhistorie zu markierenden) Evolutionsprozess des
Dokuments werden die informellen Anforderungen dann konkretisiert.
4.3 Formale Struktur eines Anforderungsdokuments
Ein Anforderungsdokument sollte folgende Elemente enthalten:
Einen Titel, der es eindeutig macht
Eine Liste der Beteiligten Personen
Eine Revisionshistorie
Eine Beschreibung der Adressaten des Dokuments
Eine Übersicht, wofür die Anforderungen gelten.
Die Wechselwirkungen mit anderen Arbeitspaketen (bei Abstimmung mit
anderen Teams)
Eine Übersichte der Anwendungsfälle
Die Liste der detaillierten Anforderungen
Weitere Elemente können nach Bedarf hinzugefügt werden.
Die beschriebenen Inhalte dienen der Nachvollziehbarkeit der Evolution dieses
Dokuments und stellen (siehe Liste der Beteiligten und Adressaten) in hohem Maße
auch sicher, das am Ende genau das entwickelt wurde, was der Anwender gewollt
hatte.
Bei der Beschreibung der Anforderungen müssen pro Anforderung die folgenden
Informationen enthalten sein:
a) Handelt es sich in der Wichtigkeit um einen der folgenden Fälle?
a. Muss,
b. Sollte
c. Kann
b) Warum wurde diese Anforderung in die Liste aufgenommen?
c) Was genau umfasst die Anforderung?
d) Sind zum Erfüllen der Anforderung Vorbedingungen einzuhalten?
e) Ist die Erfüllung der Anforderung Vorbedingung für andere Aktivitäten
(Arbeitspakete) im Projekt?
f) In welchem Arbeitspaket und von wem soll die Anforderung erfüllt werden?
Das Anforderungsdokument sollte möglichst früh im Projektzyklus fertig gestellt
werden. Es ist jedoch auch möglich, auch nach dem Abschluss von Projektphasen
im Einvernehmen der Beteiligten begründete Ergänzungen oder Veränderungen
vorzunehmen.
Ein Beispiel für eine einzelne Anforderung ist im Folgenden gezeigt.
Formale Struktur eines Anforderungsdokuments 19
A21 Warnung bei geringem Batteriestand Muss
Beschreibung:
Bei einem Ladezustand von 40% bzw. eine Restlaufzeit von 2 Tagen
soll eine optische Warnung erfolgen und eine Nachricht versendet
werden.
Begründung:
Der Anwender muss die Möglichkeit erhalten, auf die
Systemwarnung zeitnah zu reagieren und vor dem Ausfall einen
Ladezyklus zu starten
Abhängigkeiten: Hardwaregruppe: Ladestanderfassung
Kommunikation: Messaging Schnittstelle
Zusätzliche
Informationen
Müller AP 3
21
5 Arbeitsablauf der automatisierten Entwicklung
5.1 Definition von Anwendungsfällen (Use-Cases)
5.1.1 Nutzung von Anwendungsfällen
Am Anfang jeder Entwicklung steht die Entscheidung, was genau entwickelt werden
soll. Die Antwort auf diese Frage wird aus funktionaler Sicht im Wesentlichen
dadurch bestimmt, wo und zu welchem Zweck die entwickelte Komponente bzw.
das entwickelte System eingesetzt werden soll. Diese Betrachtung ist aus
mindestens zwei Aspekten notwendig:
1) Effiziente Entwicklung schließt ein, dass die Anforderungen erfüllt werden
und nicht mehr.
2) Hoch qualitative Entwicklung bedeutet, dass die Erwartungen an ein System
erfüllt werden.
Für beide Aspekte ist es wichtig, die Beschaffenheit des Anwendungsfalles (Use-
Case) sowie die potentiellen Erwartungen der Anwender sowie deren vorgesehene
Interaktion zu kennen oder zu definieren.
Im Rahmen von Überlegungen zur Produktsicherheit und zu Haftungsfragen ist es
zusätzlich wichtig, die so genannten „bestimmungsgemäße Verwendung“ eines
Systems möglichst genau zu definieren. Der Hersteller haftet nicht, wenn der
Betreiber einen ausgeschlossenen Use-Case ausführt und es dabei zu
Fehlfunktionen kommt.
Das UML Use-Case Diagramm adressiert dieses Problemfeld und bietet Elemente,
die auf einem hohen Abstraktionsniveau Verständnis von einem System und seinen
Einsatzfällen schaffen können, ohne hierzu technische Detailkenntnisse zu
erfordern.
Eine frei verfügbare Beschreibung dieses Diagrammtyps findet sich unter
http://www.jeckle.de/uml-glasklar/UseCaseDiagramm.pdf.
Use–Cases, oder auch Szenarien, sollen verdeutlichen, welche Systeme oder
Systemteile mit dem Endanwender (oder allgemein mit dem Umfeld des Systems)
interagieren und welche Art der Interaktion grundsätzlich vorgesehen ist.
5.1.2 Die Use–Case Notation
Use–Cases werden in der UML grundsätzlich aus folgenden Elementen konstruiert
System
Unter System wird eine Entität verstanden, die
später tatsächlich implementiert wird. Systeme
müssen eindeutig benannt sein. Eine Lösung kann
aus der Kombination von interagierenden Systemen
bestehen.
<Systemname>
22 Arbeitsablauf der automatisierten Entwicklung
Akteure
Akteure, häufg durch Strichmännchen
symbolisiert, sind immer extern vom System
anzusiedeln und beeinflussen das
Systemverhalten durch Interaktion.
Da es sich bei einem Akteur zunächst nur um
ein Symbol handelt, können Sie hier auch
andere, deskriptivere Symbole wählen.
Use Case
Anwendungsfall, also ein Vorgang, der an oder
mit dem System ausgeführt wird. Es wird
angenommen, dass Use Cases als
Systemfunktionen abgebildet werden. Sie sind
daher in den Systemgrenzen zu zeichnen.
Use Cases benötigen einen eindeutigen
Namen (Identifier), z.B. „Grünanforderung“ i
unserer Fallstudie.
Beziehungen
Zwischen den graphischen Komponenten des
Modelles. Dies können
Interaktionen
Generalisierungen
oder Abhängigkeiten
sein.
Wichtig bei Generalisierungen: An der Spitze
des Pfeils ist die generelle Instanz, die am
anderen Ende ist die Spezialisierung
Abhängigkeiten werden in der Regel mit so
genannten Stereotypen dekoriert, um die
Verständlichkeit zu erhöhen. Im gezeigten
Beispiel bedeutet die Notation „<<includes>>,
dass der Use Case der automatischen
Türöffnung den Fall einschließt, dass eine
Annäherungsdetektion wirksam durchgeführt
wurde.
Tür öffnen
Eintreten
Tür öffnen
manuell öffnen
automatisch öffnen
<Use Case>
Definition von Anwendungsfällen (Use-Cases) 23
Im UML Use Case Diagram gibt es noch weitere Möglichkeiten der Strukturierung.
So können z.B. dem Use Case Klassenattribute zur Seite gestellt werden, um die
Implementierung dieses Anwendungsfalls durch einen bestimmten Objekttyp zu
symbolisieren.
Ebenso ist es möglich, deskriptiv eine Abfolge derjenigen Aktivitäten zu
beschreiben, die einen solchen Use Case ausmachen.
Use Cases besitzen allerdings keine generelle Semantik die hier zu einer
Codegenerierung herangezogen werden kann.
Im Rahmen dieses Praktikums werden Use Cases daher ausschließlich zur
Anforderungsdokumentation verwendet.
5.1.3 Alternative Methoden zur Definition (z.B. Mindmaps)
Der Prozess der Ideenfindung bei der Erstellung des Anforderungsdokuments kann
auch mit anderen Methoden unterstützt werden. Eine solche Methode ist das so
genannte Mind Mapping. Ein Beispiel ist in Abbildung 6 dargestellt.
Abbildung 6: Beispiel für eine Mind Map
Das Ziel des Mind Mappings ist es dabei nicht, konkrete Anforderungen abzubilden.
Vielmehr besteht der Nutzen darin, dass ein Team sich auf strukturierte Weise
einem (bis dahin unbekannten Thema) nähert und so leicht die Ideen mehrerer
Personen zusammenführen kann.
In der Regel erfolgt das Mindmapping in 4 Schritten:
1) Zentrales Thema, z.B. den Titel der Fallstudie, in die Mitte schreiben.
Annäherung erkennen
automatisch öffnen
<<inclu
des>>
24 Arbeitsablauf der automatisierten Entwicklung
2) Sammeln von Schlüsselwörtern die einem zum Thema einfallen.
3) Strukturieren der Schlüsselwörter nach Kategorien. Diese können auch
hierarchisch gegliedert sein.
4) Diskussion und Verfeinerung der Mindmap.
An diesem Punkt angekommen, bietet eine Mindmap z.B. eine Übersicht, welche
Use Cases für das von Ihnen betrachtete Problem in Frage kommen oder welche
Systemelemente für ein Funktionieren notwendig sind.
5.2 Definition der geforderten Systemkomponenten
5.2.1 Rollen von physischen Komponenten
Die Betrachtung der UML Use Cases führt schnell zum Verständnis eines
Rollenmodells, das Antworten auf die Fragen nach dem „Wer macht was“ gibt. Im
Schritt der Rollenzuweisung wird festgelegt, welche (Teil-) Funktionen an welcher
Stelle implementiert bzw. genutzt werden sollen.
Bei der Betrachtung der Abbildung 2 fällt z.B. auf, dass nur eine der
Hardwarekomponenten einen direkten Kontakt zu einem PC hat. Damit kann dieses
Systemelement Aufgaben übernehmen, die den anderen unmöglich sind und
bekommt so eine besondere Rolle.
Unter Umständen kann es sinnvoll sein, die eingangs gestellte Frage zur Frage
„Wer macht wann was?“ zu erweitern, um den Aspekt der temporalen
Rollenzuweisung zu adressieren. Damit ist gemeint, dass eine Systemkomponente
im Zeitablauf unterschiedliche Rollen annehmen kann.
Als Auslöser für eine solche Überlegung kann zum Beispiel die Erkenntnis dienen,
dass eine Funkkommunikation unerwartet gestört werden kann und in diesem Fall
eine plötzlich isolierte Komponente eine neue Rolle (z.B. autonome Notfunktion)
übernehmen können muss.
Rollen können im Use Case Diagramm z.B. über Kommentare definiert werden.
Abhängig von den Rollen werden bestimmte Ressourcen benötigt, z.B. eine
hinreichende Anzahl von Ein– und Ausgabekanälen zur Kommunikation einer
Komponente mit der Umwelt, eine Funkschnittstelle zum Austausch von Daten o.ä.
Am Ende dieses Schrittes steht dann eine Liste aller Ressourcen, mit denen die
geplanten Anforderungen realisiert werden sollten. Im praktischen Einsatz kann nun
eine Kostenkalkulation beginnen und mit dem Endanwender validiert werden, ob
das geplante System akzeptabel ist oder Änderungen gepflegt werden müssen.
5.2.2 Aufgaben von Softwarekomponenten
Für die Softwarekomponenten gilt im Wesentlichen das eben Gesagte. Allerdings
kann eine Softwarekomponente nicht ohne eine passende Hardwareplattform
ausgeführt werden. Softwarekomponenten repräsentieren grundsätzlich Zustände
der physischen Plattform (in Form von Daten) und stellen funktionale Abläufe bereit.
Mit Hilfe von Use–Cases und Mind Maps sollte isoliert werden, welche
Funktionsblöcke die spätere Softwarelösung benötigt. Auch eine detailliertere
Beschreibung der Interaktion der Blöcke mit der Außenwelt ist nun möglich. Im
Definition der Wirkungszusammenhänge 25
Allgemeinen sollten nun auch Rahmenbedingungen wie Parameter und deren
Inhalte bekannt sein.
5.3 Definition der Wirkungszusammenhänge
5.3.1 Inter-Komponenten Kommunikation
Parallel zur Spezifikation der Ausgestaltung der Systemkomponenten wird auch
deren Kommunikation untereinander definiert. Für jede Systemkomponente sind
demnach mögliche Eingangssignale, gesteuerte Ausgangssignale und bei Bedarf
die ausgetauschten Nachrichten zu definieren. Zur Illustration des geplanten
Nachrichtenaustauschs wird hier in der Regel auf so genannte „Message–
Sequence–Charts (MSCs)“ zurückgegriffen. In der Vorlesung Kommunikationsnetze
wurden solche Charts bei der Besprechung von Sicherungsprotokollen besprochen.
Abbildung 7: Beispiel für ein Message-Sequence-Chart
In UML gestaltet sich die Darstellung dieses Diagramm formaler, in dem jedem
kommunizierenden Objekt eine senkrecht verlaufende Zeitlinie zugeordnet. Am
oberen Ende der Zeitlinie ist der Typ des agierenden Objekts zusammen mit einer
Objektreferenz (dem Namen eben dieser Objektinstanz) vermerkt. Auf der Zeitlinie
sind in der Reihenfolge des Auftretens Operationen und Aktionen vermerkt.
Operationen sind als Textblöcke vermerkt, Aktionen als horizontale Linien, die bei
der Übertragung von einem zum anderen Objekt gezeichnet werden. Im Ablauf von
oben nach unten ergibt sich die Reihenfolge der Nachrichten.
Jedes Message–Sequence–Chart beschreibt GENAU EINE mögliche
Abfolge eines Nachrichtenaustauschs zwischen den beteiligten
Systemkomponenten!
Es ist sofort klar, dass ab einer bestimmten Anzahl von potentiellen
Kommunikationspartnern und einer hinreichend mächtigen Sprache, d.h. der Menge
unterscheidbarer Nachrichten, eine vollständige Abbildung des Systemverhaltens in
dieser Weise nicht mehr praktikabel ist. Abbildung 8 stellt ein solches, formalisiertes
Message–Sequence–Chart dar, wie es später bei der Definition von Systemtests
Verwendung findet.
26 Arbeitsablauf der automatisierten Entwicklung
Abbildung 8: Illustration eine Message–Sequence–Charts
Die Mächtigkeit der MSCs liegt in der anschaulichen und zusammenhängenden
Darstellung der auftretenden Ein– und Ausgangssignale einer Systemkomponente.
Darüber hinaus kann in vielen Fällen mit formalen Mitteln (nicht Gegenstand dieses
Praktikums) nachgewiesen werden, dass ein bestimmter Ablauf durch eine
gegebene Implementierung realisiert werden kann oder eben nicht. Damit dient ein
MSC auch der Verifikation innerhalb des Entwicklungsprozesses und, bei der
Einsatz als Testwerkzeug, der Validierung des Gesamtsystems.
5.3.2 Beschreibung von Testfällen
Indem nun bekannt ist, welche Systemkomponenten für welche Rollen vorgesehen
sind und welche Interaktion diese Komponenten in den Rollen miteinander und mit
der Umgebung haben werden, ist auch die erste Definition von Tests möglich. So ist
an dieser Stelle formulierbar, was Anforderungen im Detail bedeuten. Ein Beispiel:
Anforderung: Nach dem Drücken des Knopfes erwarte ich sofort das
Umschalten der Lampe.
Definition der Wirkungszusammenhänge 27
Systemwissen: der Anwender (Mensch) hat eine optische Reaktionszeit von ca.
100ms. Reaktionszeiten unter dieser Schwelle werden als
„sofort“ empfunden.
Test: Systemreaktionszeit
1) Erfasse nach dem Drücken des Knopfes die aktuelle
Systemzeit.
2) Erfasse beim Umschalten der Lampe die Systemzeit.
3) Bilde die Differenz der Werte und gebe sie als Reaktionszeit
aus.
Verdict: Wenn die gemessene Reaktionszeit kleiner als 100ms ist, so ist
die Anforderung erfüllt, das System hat den Test bestanden.
Bei der Beschreibung der Testfälle ist zu beachten, dass Sie für die
unterschiedlichen Phasen der Entwicklung zugeschnitten sein müssen. Im Regelfall
wird hierbei dem so genannten „V“–Modell Anwendung finden, wie in Abbildung 9
dargestellt. Auf der linken Seite ist die Verfeinerung der Anforderungen bis zur
finalen Implementierung dargestellt. Hierbei führt die Pflege der Referenzdokumente
und Modelle im Zusammenspiel mit Tests zu einer Verifikation der Lösung. Auf der
rechten Seite erfolgt in umgekehrter Reihenfolge im Legoprinzip das
Zusammensetzen der Gesamtlösung und die schrittweise Validierung des fertigen
Systems.
Die Definition von Testfällen geschieht im Idealfall bereits parallel zum Entwurf der
Lösung. Nur in diesem Fall kann sichergestellt werden, dass alle für einen späteren
Test notwendigen Signale und Informationen auch problemlos während eines Tests
abrufbar sind.
Aus dem in Abbildung 9 dargestellten „V“–Modell ist auch direkt ersichtlich, dass die
Automation von Schritten beim Übergang von der Anforderung zum Code die
Verifikation und Validierung vereinfacht. In diesem Fall werden unter Umständen
Abbildung 9: Illustration der Testabläufe am V–Modell
Ver
ifik
atio
n
Coding
Moduldesign Modultest
Integrations-test
Feinentwurf
Grobentwurf Systemtest
Anforderungs-definition
AbnahmetestReviews,Prototypen
Reviews,Konsistenzprüfungen,Machbarkeitsstudien
Modellierung,Simulationen
Code Review,Testplanung
Komponentenmodelle
Grundlage für
Grundlage für
Grundlage für
Grundlage für
Grundlage für
Grundlage für Val
idie
run
g
28 Arbeitsablauf der automatisierten Entwicklung
Ebenen, z.B. die Codierungsebene oder Teile des Moduldesigns im V–Modell nicht
mehr auftreten und somit auch bei weiteren Entwicklungen nicht mehr modifiziert.
Dies gilt natürlich nur unter der Voraussetzung, dass die Transformation von einem
Modell zu lauffähigem Code selbst verifiziert und validiert worden ist.
5.4 Eingabe der Zustandsautomaten (State-Charts)
5.4.1 UML State–Charts vs. SDL
a) UML b) SDL
Abbildung 10: Zwei Statecharts
UML State–Charts sind ebenso wie die SDL dafür entworfen, so genannte endliche
Automaten (Finite State Machines, FSMs) abzubilden. Theoretisch setzt sich ein
solcher Automat als ein Graph aus Knoten (den Zuständen) und gerichteten Kanten
(den bedingten Zustandsübergängen) zusammen.
Ein sehr einfaches UML State–Chart (a) mit 2 Zuständen ist parallel zu einem
Modell mit identischer Semantik in SDL (b) in Abbildung 10 abgebildet. In beiden
Fällen wird das Verhalten einer Lampe auf das Drücken eines Tasters beschrieben.
Beide Beschreibungen implizieren, dass nach dem Einschalten des Systems
zunächst die Lampe ausgeschaltet wird. In UML wird diese Einschaltbedingung
durch den Initalisierungszustand repräsentiert, von dem ein direkter Übergang zu
einem anderen Zustand vorhanden sein muss.
In SDL wird hingegen das „Reset“ Signal explizit angegeben, das aus jedem
beliebigen Zustand (*) in einen definierten Anfangszustand führt.
Folgende Regeln gelten für die Notation im SDL Diagramm:
Die FSM ruht immer in einem Zustand
Für jeden Zustand existiert eine wohldefinierte Menge von Eingangsgrößen,
auf die das System reagiert. Eine abgehende Kante von einem Zustand
muss immer auf einem solchen Eingangsereignis enden.
off
on
onOff1
Lampe einschalten
on
off
onOff1
Lampe ausschalten
*
Reset
off
Lampe ausschalten
Eingabe der Zustandsautomaten (State-Charts) 29
Die Eingangsereignisse, die von einem Zustand aus erreicht werden, müssen
disjunkt sein.
Jedes Eingangsereignis führt über einen eindeutigen Pfad zu einen nächsten
Zustand
Auf der Kante, die vom Eingangsereignis zum nächsten Zustand führt,
werden alle Operationen (Prozeduraufrufe) und Aktionen
(Ausgangsereignisse ) in der Reihenfolge ihrer Ausführung notiert.
Bei großen SDL State–Charts wird häufig für jeden Zustand ein Zeichenblatt
verwendet und dort dann alle abgehenden Ereignisse parallel aufgetragen.
Die erste Version von SDL wurde 1976 veröffentlicht. Seit Mitte der 1980’er Jahre
existieren erste Code-Generatoren, die aus der grafischen Beschreibung
ausführbaren Code erzeugen konnten. Seit 2000 existiert eine mit UML
harmonisierte Version. SDL bietet den Vorzug, bei der Übertragung von Nachrichten
(dem Senden von Events) explizit die Verzögerung des verwendeten Kanals
angeben zu können. So wurde es sehr früh möglich, komplexe Systeme zu
modellieren und zu simulieren.
Region
Eine Region ist ein Zeichenbereich, der eine
FSM aufnimmt. Regionen werden in
unabhängige Gültigkeitsbereiche im Code
transformiert.
Initial State
Dieser gefüllte Punkt muss in einer Region genau
einmal vorkommen und markiert die Stelle, an
der die Ausführung der FSM beginnt
State
Ein Zustand, in dem die FSM beliebig lange
ruhen kann. Ein Zustand wird nur auf Grund von
Ereignissen verlassen
Transition
Gerichtete Kante zwischen zwei Zuständen
Choice
Dieser Auswahlzustand kann das Ziel einer
Transition sein. Die FSM kann aber nicht in Ihm
verharren sondern muss über weitere Transitions
mit oder ohne Bedingung sofort wieder verlassen
werden.
Event Notation
Diese Beschreibung kann States oder Transitions
hinzugefügt werden.
Event
Event/action (‚;‘ action)*
Event[guard]/action (‚;‘ action)*
<name>
30 Arbeitsablauf der automatisierten Entwicklung
UML State–Charts haben diese Funktionen und Möglichkeiten inzwischen
weitestgehend assimiliert. Die vereinfachte Notation erlaubt eine stark verdichtete
Darstellung. Die in der obigen Tabelle dargestellten Konstrukte finden in diesem
Praktikum Anwendung.
5.4.2 Eingabe eines State–Charts
YAKINDU und der zugehörige State–Chart Simulator sind in Java implementiert.
Die Eingabe der textuellen Anteile orientiert sich daher weitgehend an dieser
Syntax.
Nach dem Anlegen eines neuen YAKINDU State–Charts muss zunächst eine neue
Datei im Workspace erstellt werden. Wählen Sie dazu File->New->YAKINDU
Statechart Model aus.
Im anschließenden Dialog geben Sie der Datei einen eindeutigen Namen und
Drücken „Finish“. Achten Sie darauf, dass Ihre Eingabe auf „.sct“ endet, um die
korrekte Behandlung des Modells im Workspace sicher zu stellen.
Im geöffneten Fenster sehen Sie einen minimalen State–Chart
Das rote Kreuz an der oberen rechten Ecke des einzigen Zustandes zeigt an, dass
hier noch kein Name vergeben wurde. Es verschwindet nach einer gültigen
Eingabe. (Es muss sich hierbei um einen in Java gültigen Bezeichner handeln!)
Nach einem Klick auf das Rechteck unter „MyChart“ (das nach außen sichtbare
Interface dieses State–Charts) sehen Sie im unteren Bildschirmbereich ein
„Properties“ Feld, in dem Sie nun die Schnittstellenbeschreibung eingeben können.
Ebenso wie beim Interface ist es auch bei allen anderen grafischen Elementen
möglich, „Properties“, also Attribute, anzugeben. Zu diesen Properties gehören auch
Eingabe der Zustandsautomaten (State-Charts) 31
die in der obigen Tabelle angeführten „Events“. Die formale Notation eines Events
ist wie folgt:
<leer> Unbedingter, sofortiger Übergang
EventName Transition wird beim Eintreffen des
Ereignisses „EventName“ ausgelöst
EventName[guard] Das Ereignis „Event“ wird nur erkannt,
wenn die Bedingung „guard“ wahr ist
[guard] Sofortiger Übergang wenn die
Bedingung „guard“ wahr ist.
EventName/action (‚;‘ action)* Die Transition wird ausgelöst, wenn
„EventName“ eingetroffen ist. Danach
wird die Liste der durch Semikola
getrennten Aktionen ausgeführt.
after <time> Zum Zeitpunkt „time“ nach dem Eintritt
in den Startzustand der Transition wird
diese ausgelöst. Der Wert „100ms“ löst
also einen Zustandsübergang nach 100
ms aus.
Die in „action“ gelisteten Anweisungen werden ausgeführt, wenn die referenzierte
Transition ausgelöst wurde. Es ist dabei zu beachten, dass an dieser Stelle nur eine
eingeschränkte Java Syntax (siehe auch Abschnitt 5.4.3) erlaubt ist.
Der State–Chart Editor ist kontextsensitiv und stellt bei Fehleingaben an den
Fehlerpositionen ein weißes Kreuz auf rotem Hintergrund dar, das mit dem
Mauszeiger zu einer Erläuterung erweitert werden kann.
5.4.3 Restriktionen bei der Eingabe
Bei der Eingabe der Modelle ist zu berücksichtigen, dass die Systemmodelle zum
Zielsystem kompatibel sein müssen. Im Zielsystem können z.B. manche
Variablennamen oder Funktionsnamen vordefiniert sein. Wird ein solcher Name
innerhalb des Modells, in dem er keine spezifische Bedeutung hat, verwendet, so
ergeben sich bei der Zusammenführung mit der Zielplattform Probleme bei der
Compilation oder dem Linken des Codes.
Des Weiteren ist zu berücksichtigen, dass die automatisierte, modellgetriebene
Systementwicklung auch von der simultanen Simulationsmöglichkeit (siehe auch
Abschnitt 5.5) profitiert. Da es sich beim Simulator auch um ein eigenständiges
System handelt, sind auch dessen Rahmenbedingungen, insbesondere die
Grammatik der möglichen Notationen, zu berücksichtigen. Die Referenz der
möglichen Konstrukte finden Sie unter „Help->Content“. Navigieren Sie zur
YAKINDU SCT 2 Reference.
32 Arbeitsablauf der automatisierten Entwicklung
Ein wesentlicher Punkt bei der Eingabe eines State–Charts ist die Festlegung von
Prioritäten für den Fall, dass ein Zustand auf Grund unterschiedlicher Ereignisse in
verschiedener Weise verlassen werden kann. Diese Priorisierung wird bei der
Modelleingabe unter den Eigenschaften (Properties) der Zustände vorgenommen.
Existieren mehrere abgehende Transitionen, so werden die Schaltknöpfe „up/down“
aktiv und die Transitionen können sortiert werden. Dabei werden bei der
Bearbeitung des Zustandes (siehe auch Abschnitt 5.5.2) die Transitionen von oben
nach unten abgearbeitet.
5.5 Simulation des Systemverhaltens
5.5.1 Planung der Simulation
Die YAKINDU State–Chart Tools ermöglichen neben der Eingabe der UML State–
Charts auch direkt deren Simulation. Für einen effektiven Einsatz dieser Option ist
es notwendig, vor dem eigentlichen Simulationslauf den Inhalt zu planen. Dazu
gehören:
1) Auflistung aller zu generierender Eingangssignale und Ereignisse
2) Definition von Reihenfolgen und Zeitpunkten für die Anreizgenerierung
3) Auflistung aller zu beobachtenden Ausgangsvariablen.
Dies Variablen und Ereignisse stellen dies externen Schnittstellen Ihres Systems
dar, die Sie vorher im Interface Block des Modells eingegeben haben.
Simulation des Systemverhaltens 33
Eingangssignale sind dabei solche Variablen, die durch den modellierten Prozess
nicht verändert werden. So können Sie z.B. die aktive Messung einer Temperatur
dadurch modellieren, dass Sie eine Variable „Temperatur“ und ein Ereignis (event)
„Messen“ definieren. Der Ausdruck „Messen[Temperatur>38]/Fieber = true“ ist dann
die entsprechende Modellierung mit einer Kombination aus Ereignis und
Eingangssignal.
5.5.2 Durchführung der Simulation
Selektieren Sie zur Simulation mit der rechten Maustaste das zu simulierende
State–Chart im Projectexplorer und wählen Sie dann „Run As“->YAKINDU
Statechart“.
Die Debuggeransicht öffnet sich und auf der rechten Seite öffnet sich ein Abschnitt
mit dem „Simulation View“.
Die Variablen können Sie nun mittels eines In–Place Editors modifizieren und dann
durch klicken auf die als Link unterlegten Ereignisse diese Auslösen. Der Simulator
startet dann den für den aktuellen Zustand unter Berücksichtigung des
Eingangsevents modellierten Vorgang. Durch Druck auf die
„Pause“ Taste des Debuggers kann die Verarbeitung jederzeit
unterbrochen und danach neu gestartet werden.
Grundsätzlich wird bei der Ausführung der State–Charts zwischen zwei
unterschiedlichen Verfahren unterschieden:
a) Cycle-based execution
b) Event-driven execution
Im ersten Fall wird regelmäßig durch eine externe Ausführungseinheit die Methode
„runCycle“ des State–Charts aufgerufen. In dieser werden dann, abhängig vom
aktuellen Zustand der FSM, die vorhandenen Eingangsevents abgesucht,
Eingangsbedingungen überprüft und die relevante Transition eingeleitet. Dieses
Verfahren hat den Vorteil, dass immer genau ein Thread den Code der FSM
ausführt und somit Probleme der Nebenläufigkeit von Prozessen komplett
vermieden werden. Eingangsereignisse werden in diesem Fall allerdings erst nach
der Beendigung des aktuellen Zyklus erkannt und es kommt so zu undefinierten
Verzögerungszeiten (Latenz) zwischen dem Auftreten des Ereignisses und dessen
34 Arbeitsablauf der automatisierten Entwicklung
Bearbeitung. Liegen mehrere Ereignisse an, so muss über Priorisierung der
Transitionen eine Abfragereihenfolge definiert werden.
Im zweiten Fall erfolgt dieser regelmäßige Aufruf nicht sondern nur genau dann,
wenn ein Ereignis auftritt. Dieses Verfahren vermeidet weitestgehend die Latenz bei
der Eventbearbeitung. Dieses Ausführungsmodell ist jedoch dahingehend stark von
der Laufzeitumgebung abhängig, als dass zum Zeitpunkt der Modellierung eine
Nebenläufigkeit der späteren Ausführung nicht ausgeschlossen werden kann.
Um Probleme mit Nebenläufigkeiten zu vermeiden wird in diesem Praktikum
ausschließlich die „Cycle-based execution“ verwendet.
5.5.3 Interpretation der Ergebnisse
Während der Simulation zeigt der Simulator die aktuelle Systemzeit zusammen mit
einer grafischen Markierung des jeweils aktiven Zustands sowie der verwendeten
Übergänge an. Eine Interpretation dieser Anzeigen geschieht jedoch ausschließlich
durch den Anwender.
Daher sollte vor der Durchführung einer Simulation zusätzlich zu den bereits
genannten Aspekten auch eine Liste von erwarteten Systemzuständen und
Ausgangsgrößen angefertigt werden.
Die Simulationsergebnisse sind erst dann nachvollziehbar in Kategorien wie „OK“
oder „fehlerhaft“ zu klassifizieren.
5.6 Erzeugung von ausführbarem Quelltext
5.6.1 Codegenerierung aus abstraktem Modell
Nach der Verifikation der Modellierung des geplanten Systems schließt sich die
automatische Generierung von Quelltexten für die Zielplattformen an. Im
Beispielprojekt wird automatisch eine Datei „GenModelJava.sgen“ installiert. Nach
dem Öffnen dieser Datei im Editor zeigt sich folgender Inhalt:
In der ersten Zeile ist die Zielsprache des Generators erkennbar (hier Java). Im
nächsten Block wird identifiziert, welches State–Chart aus dem Arbeitsbereich
Erzeugung von ausführbarem Quelltext 35
transformiert werden soll. (hier TrafficLightWaiting). Für die Codegenerierung im
Rahmen dieses Praktikums sind die beiden nächsten Blöcke ebenfalls wichtig.
Der Block „Outlet“ definiert das Eclipse Projekt und den Dateiordner, in dem der
automatisch generierte Code abgelegt wird.
Der Block „Naming“ beschreibt, welche Konventionen bezüglich der externen
Schnittstellen des autogenerierten Codes Verwendung finden. Die Einstellung
„cyclebased“ ist hier die Standardvorgabe und wird während des Praktikums nicht
verändert.
Eine neue Steuerdatei für einen Code–Generator kann mittels „New->YAKUNDU
statechart generator model“ angelegt werden.
Selektieren Sie im sich öffnenden Dialog das Projekt, in dem sich das zu
übersetzende State–Chart befindet und geben Sie dem Generator einen geeigneten
Namen. Achten Sie dabei darauf, dass die Dateiendung „sgen“ heißen muss.
Durch Drücken des Knopfes „Next“ gelangen Sie zur Auswahl der Zielsprache und
zur Auswahl des zu konvertierenden State–Charts.
36 Arbeitsablauf der automatisierten Entwicklung
In hier gezeigten Falle wurde die Sprache „C“ als Ziel ausgewählt. Beachten sie,
dass in einem Projekt mehrere Generatoren parallel existieren dürfen. Sie können
also mehrere State–Charts und mehrere Zielsprachen simultan verwenden.
Das Drücken von „Finish“ veranlasst nun die Erzeugung der Steuerdatei.
Einstellungen über den Zielordner, in den die generierten Daten ausgegeben
werden, müssen nachträglich manuell in der oben beschriebenen Steuerdatei
erfolgen.
5.6.2 Verstehen des erzeugten ‚C‘-Codes
Nach der Codegenerierung entsteht im Zielordner eine Datei
„<statechartname>Required.h“. In dieser Datei ist die Signatur zweier notwendiger
Funktionen hinterlegt, mit denen ein Timer gestartet und gestoppt werden kann. Da
die Behandlung von Zeitgebern systemabhängig ist, muss für eine funktionierende
Einbettung des generierten Codes in das Zielsystem die Implementierung dieser
Funktionen manuell erfolgen.
Hinweis:
Diese manuelle Arbeit fällt nur einmal pro Zielplattform an, da für alle
möglichen State–Charts aus der hier verwendeten Werkzeugkette ein und
dasselbe Interface mit der Plattform verwendet wird.
5.6.3 Funktion der Steuerungskonstrukte
Neben der Implementierung der Timer Schnittstellen muss zusätzlich noch die
Ausführung des Codes auf der Zielplattform implementiert werden. Für die
Programmierung unter ‚C‘ gilt die Konvention, dass die Ausführung eines
Programms immer in der Routine „main“ beginnt. Hier müssen nun die folgenden
Schritte implementiert werden.
a) Initialisierung aller für die geplante Funktion benötigten Systemfunktionen. (in
Soft– und Hardware)
b) Eine Endlosschleife, in der zunächst die vorhandenen Ereignisse an die
State–Chart Implementierung gemeldet werden. Danach folgt die Ausführung
eines Zyklus und schließlich die Auswertung der Ergebnisse in
entsprechende Hardware-I/Os oder Nachrichten.
Auch diese Funktionen sind grundsätzlich nicht für jede Aufgabe neu zu erstellen
sondern für bestimmte Klassen von Anwendungen ganz oder teilweise
wiederverwendbar. Zuordnungskriterium zu einer solchen Klasse kann z.B. die
Menge und Art der verwendeten I/O-Ressourcen des Zielsystems sein.
Einbettung in die Systemumgebung 37
5.7 Einbettung in die Systemumgebung
5.7.1 Erstellung eines Software-Rahmens für die Ausführung
Die Einbettung in die Zielumgebung erfolgt grundsätzlich durch die manuelle
Erstellung eines Programms in der Programmiersprache des Zielsystems. Hierzu
wird im Rahmen des Praktikums zunächst unter Eclipse ein entsprechendes ‚C‘–
Projekt angelegt. Selektieren Sie „File->New->Other“ (wie schon in Abschnitt 3.1.1
erläutert) und navigieren Sie zum C/C++ Ordner und wählen Sie ein „C“ Projekt aus,
benennen Sie dieses und stellen Sie sicher, das als Ziel eine leere „AVR Cross
Target Application“ erstellt wird.
Fügen sie diesem Projekt zwei weitere Quelltextordner hinzu. In einem soll das
Software Framework manuell codiert werden, im anderen soll der Codegenerator
seine Ergebnisse ablegen.
Es empfiehlt sich dabei, im Framework zur besseren Übersicht und einfachen
Weitergabe des Codes mehrere Dateien ablegen, die später die unterschiedlichen
Funktionen der Abbildung der Systemschnittstellen vornehmen.
Hinweis:
Während der Versuchsdurchführung wird das Skelett eines Softwarerahmens
mit einer Musterstruktur vorgegeben.
Dieser Arbeitsschritt endet mit der erfolgreichen Compilation (ohne Fehler) des
Frameworks zusammen mit den autogenerierten Code.
5.7.2 Abbildung (Codierung) von Variablen auf physikalische I/O Komponenten
Nach der Implementierung des funktionalen Skeletts ist es zusätzlich noch
notwendig, den Programmvariablen des State–Charts physische Bedeutung
beizumessen.
Zu diesem Zweck wird zunächst eine Tabelle angefertigt, in der Variablen des
State–Charts mit physikalischen Ressourcen assoziiert werden. Es ist zu
empfehlen, den Zugriff auf diese Ressourcen zunächst in eigene Zugriffsfunktionen
zu kapseln, z.B. „void hw_set_Traffic_Light_Red( bool value )“. Das Präfix „hw_“
garantiert, dass es zu keinen Namensüberschneidungen mit den automatisch
generierten Codeteilen kommt.
Dieses Vorgehen unterstützt auch bei weiteren Entwicklungen die Vermeidung von
Fehlern, in dem versehentlich falsche Schnittstellen aktiviert werden.
5.7.3 Vom Code-Review zum Integrationstest
Nach der Vervollständigung des manuell erstellten Softwarerahmens muss die
einwandfreie Funktion im Sinne der Definition verifiziert werden. Hierzu sollten
folgende Schritte eingehalten werden (eine fehlerfeie Erzeugung des Binärcodes
vorausgesetzt):
1) Code-Review
Im Team werden die entwickelten Quelltextpassagen nach dem 4 Augen
Prinzip noch einmal überprüft. Unklare Codepassagen sollten modifiziert und
38 Arbeitsablauf der automatisierten Entwicklung
kommentiert werden, so dass die am Review Beteiligten sich über Funktion
und Bedeutung einig sind.
2) Implementierung von Modultests
Ein simpler Test kann z.B. den Aufruf aller Schnittstellenfunktionen mit allen
Parametervariationen enthalten. Typisch kann man hier auch
Initialisierungsfunktionen nutzen. Der Sinn der Modultests ist es, möglichst
weitgehend sicher zu stellen, dass die erwünschten Funktionen auch
tatsächlich im Quellcode abgebildet wurden und ein späterer, automatisierter
Aufruf genau die gewünschten Effekte auslösen.
Es ist zu beachten, dass eine vollständige Prüfung im Regelfall nicht möglich
sein wird und es der Sorgfalt und Kreativität des Entwicklers obliegt, bereits
in der Entwurfsphase ein effizient durch Dritte testbares Design zu
definieren.
Modultests bedeuten in der Regel die Erstellung und die Ausführung von
Code, der in der finalen Software nicht mehr vorhanden sein wird.
3) Ausführung der Modultest
Hierzu bieten sich zunächst Debugger an, mit denen die Implementierten
Funktionen durchlaufen, Preconditions eingestellt und Postconditions, wie
z.B. Registerwerte, überprüft werden können.
4) Durchführung von Integrationstest
Nach der erfolgreichen Durchführung der Modultests kann zum ersten Mal
die aus der gesamten Wirkungskette entstehende Software zusammen auf
der Zielplattform ausgeführt werden. Da die „Integration“ sich ausschließlich
auf die Schnittstellen zwischen dem State–Chart und der Plattform bezieht,
ist es unter Umständen sinnvoll, für einen ersten Test die funktionalen
Aspekte durch eine vereinfachten State–Chart nur für Testzwecke zu
ersetzen.
5.7.4 Definition von Testschnittstellen
Nach dem Integrationstest soll das Komplettsystem auf korrekte Funktion überprüft
werden. Dieser Systemtest ist in der Regel deutlich komplexer als die vorgelagerten
Testfälle. Zur Handhabung dieser Komplexität werden häufig Testautomaten
eingesetzt, die in vordefinierter Weise die Funktion der Systemumgebung
übernehmen.
Zur Nutzung dieser Funktionen ist es allerdings notwendig, eine Schnittstelle
zwischen dem zu testenden System und einem entsprechenden Testautomaten
herzustellen. Alle relevanten Informationen über Zustandswechsel müssen daher
nach außen geführt werden, alle relevanten Eingangsereignisse müssen für einen
solchen Simulator erreichbar sein. Während die erste Bedingung in der Regel als
eine reine Softwarelösung implementierbar ist, kann es für automatische Erzeugung
von Stimuli notwendig sein, spezielle Testsysteme mit angepassten
Hardwareausgängen zu realisieren.
Im Rahmen dieses Praktikums ist die Realisierung von Testschnittstellen allein auf
Softwarelösungen fokussiert. Zur Implementierung werden die in Abschnitt 5.7.2
Implementierung von Tests in TTCN-3 39
eingeführten Zugriffsfunktionen genutzt. Diese sind so zu erweitern, dass parallel
zur Ausgabe eines Wertes auf einen physischen Port auch eine Nachricht zum
Testsystem versandt wird.
Wie schon in früheren Überlegungen ist so die Wechselwirkung zwischen zu
testender Funktion und Testaktivität minimal, denn für das untersuchte System sind
die zusätzlichen Testausgaben bzw, Eingänge simulierter Stimuli hinter der PAL–
Schnittstelle verborgen.
5.8 Implementierung von Tests in TTCN-3
5.8.1 Erfassung von Testfällen
Die Spache TTCN-3 (Test and Testing Control notation, Version 3) bietet einfache
Sprachelemente an, um Tests zu beschreiben. Die Wesentlichen, in diesem
Praktikum verwendeten Elemente zur Ablaufsteuerung sind:
Name Beschreibung
module Namens- und Gültigkeitsbereich eines Tests, umfasst alle weiteren
Statements
function Funktionaler Ablauf eines Testsaspekts. Über definierte
Schnittstellen (Ports) werden Testsignale versendet. Das Warten
auf Reaktionen des SUT wird durch Timer realisiert. Über die
Beschreibung alternativer Reaktion (alt Block) wird die Bewertung
der Testreaktion vorgenommen
testcase Ein (benannter) testcase beschreibt das Vorgehen eines
bestimmten Testfalls. Im Allgemeinen beschreibt ein Testfall
zunächst die Vorbedingungen durch das Setzen von
Konfigurationsvariablen, erzeugt Testautomaten und verbindet dies
mit dem SUT. Abschließend werden dann definierte „functions“ das
geplante Verhalten der Systemumgebung starten.
control Innerhalb eines Moduls entscheidet die Kontrollstruktur, welche
Testfälle in welcher Reihenfolge ausgeführt werden sollen.
Die Notation erfolgt in einer Java–ähnlichen Syntax. Der kompletten Sprachumfang
findet sich in den relevanten Normungsgremien unter http://www.ttcn-
3.org/StandardSuite.htm (für 2012 in der Version 4.4.1).
Die inhaltliche Ausgestaltung der Testfälle orientiert sich an den Vorgaben des
Anforderungsdokuments und kann zunächst formlos erfolgen. Antworten auf die
Fragen „Wer macht wann was?“ und „Welche (System)-Reaktionen erwarten wir
unter gegebenen Randbedingungen?“ stellen zusammen das Grundgerüst für eine
Ausgestaltung eines Testskeletts dar.
Die formale Umsetzung dieser Abfolge von Fragen wird im Praktikum trainiert in
TTCN–3 Sprachkonstrukte wird im Praktikum trainiert.
Hinweis:
Verwechseln Sie einen erfolgreichen Test nicht mit einer fehlerfreien Funktion
des Gesamtsystems. Fällt z.B. die Funkverbindung aus, so ist das in der
40 Arbeitsablauf der automatisierten Entwicklung
Fallstudie betrachtete System sicher in einem „Fehlerzustand“. Die Forderung
„Wenn die Funkverbindung ausfällt, dann müssen die betroffenen Komponenten
in einen sicheren Fehlerzustand wechseln!“ kann gleichwohl erfüllt sein. Ein Test
in der Abfolge:
1) Störe den Funkkanal
2) Warte 2s
3) Alternativen:
a. Wenn der Fehlerzustand eingenommen wurde, markiere das SUT
als OK (pass)
b. Erfolgte keine Reaktion, markiere das SUT als „fehlerhaft“
c. Erfolgte eine Unerwartete Reaktion, markiere das SUT als
„inkonsistent“.
hat offensichtlich einen positiven Ausgang genau dann, wenn die erwartete
Reaktion eingetroffen ist.
Beim Entwurf von Testfällen ist es neben der Spezifikation des Tests unumgänglich,
den Grund für die Durchführung eines Tests nicht aus den Augen zu verlieren.
Analog zur der Verfeinerung der Systemanforderungen werden auch die
Anforderungen an die Aussagekraft von Tests immer detaillierter dargestellt werden
müssen. Alle Tests sollten sich logisch aus Forderungen im Anforderungsdokument
herleiten lassen.
5.8.2 Bewertung der Ergebnisse (verdicts)
„Verdicts“ beschreiben die Bewertung eines Testergebnisses. Sie sind notwendige
Bestandteile der Bewertung von Reaktionen des SUT auf die Ausführung einer
Funktion. Aus der formlosen Beschreibung der Testfälle wird bei der formalen
Umsetzung abgeleitet, in welchen Einzelfällen welche Bewertung angenommen
wird. Werden mehrere Funktionen nacheinander getestet, so kann der Gesamttest
nur dann die Aussage „pass“, erhalten, wenn alle Einzeltests den Zustand „pass“
zurückgeliefert haben.
Hinweis:
TTCN-3 liefert Beschreibungsmöglichkeiten und Methoden zur Überprüfung
von Testkonsistenz. Die letztliche Interpretation eines Testergebnisses liegt
aber in der Hand des Testdesigners.
Achten Sie stets darauf, dass bei der Beschreibung von Alternativen immer
ALLE möglichen Reaktionen erfasst werden. Ist unklar, ob überhaupt eine
Reaktion auftritt, so sollte immer mit einem Timeout eine Möglichkeit
erzwungen werden, einen Testfall zu beenden.
Das verwendete TTCN–3 Werkzeug TTWorkbench bietet die Möglichkeit, formal
korrekte, textuelle TTCN–3 Beschreibungen in grafische Darstellungen
umzuwandeln. Diese
Beim Ablauf von Tests bietet die TTWorkbench zusätzlich die Möglichkeit, den
Ablauf des Tests animiert zu visualisieren. Diese Option vereinfacht die
Interpretation des Testergebnisses. Insbesondere bei komplexen Testszenarien ist
es so vereinfacht möglich, die genauen Vor– und Randbedingungen im Fehlerfalle
zu erfassen und eine zielgerichtete Suche nach den Ursachen einzuleiten.
Implementierung von Tests in TTCN-3 41
5.8.3 Aussagekraft der Ergebnisse
Wie schon in Abschnitt 5.7 beschrieben, ist bereits beim Design eines Systems auf
die Testbarkeit zu achten. Nur wenn alle relevanten Informationen für den
Testautomaten zur Verfügung gestellt werden, kann eine korrekte Bewertung
erfolgen. So ist es z.B. in vielen Fällen prinzipiell nicht möglich, den Verlust einer
Funkverbindung zu erkennen. Wird keine kontinuierliche Funkverbindung gefordert,
so kann Ruhe im Funkkanal nicht als Kriterium gewertet werden. Sowohl der
simultane Ruhezustand aller n Teilnehmer als auch eine Situation, in der (n-1)
Teilnehmer ruhen und 1 Teilnehmer mit Batterieausfall defekt ist, liefern das gleiche
Messergebnis.
Die Aussagekraft einer Messung und damit der Bewertung eines Phänomens sind
also in hohem Maße kontextabhängig. Eine generelle Aussage, ob ein Test gut oder
schlecht ist, kann daher nicht getroffen werden. Hingegen ist es sicher möglich, die
Anzahl der unterschiedlich realisierten Testfälle zu erfassen. Ziele von Tests können
somit (mit dem Ziel des Verdicts „Passed“) z.B. sein:
1) Code Coverage Test:
Das Ziel ist, möglichst viele Passagen des Quelltexts tatsächlich zu
durchlaufen.
2) Parameter Test:
Das Ziel ist, für eine Funktion oder eine Gruppe von Funktionen die
Ausführung mit möglichst vielen Parameterkombinationen zu durchlaufen.
Auf Grund des hohen Aufwandes werden solche Tests ggfs. auf Tests am
Rande gültiger Parameterintervalle sowie Stichproben innerhalb und
außerhalb dieser Intervalle reduziert.
3) Tests von Reaktionszeiten
4) Stresstests
5) U.v.m.
Hinweis:
Eine noch so komplexe Testbeschreibung kann nicht sicherstellen, dass das
SUT ohne Fehler implementiert wurde. Hierzu wäre es unter anderem
42 Arbeitsablauf der automatisierten Entwicklung
notwendig, zu beweisen, dass das Testsystem fehlerfrei ist und wiederum,
dass der Beweis korrekt ist usw. ad infinitum.
5.9 Programmierung und Test auf dem Zielsystem
5.9.1 Verwendung des Programmiergerätes und Verkabelung
Für viele Schritte des in diesem Praktikum durchgeführten Projektes ist es
notwendig, erzeugten oder manuellen Code auf die Zielplattform zu übertragen oder
auf der Zielplattform auszuführen. Der Anschluss des Programmiergerätes an die
Zielplattform erfolgt in der in Abbildung 11 dargestellten Weise.
Quelle: Handbuch zur Hardwareplattform, Dresden–Elektronik
Abbildung 11: Anschluss der Programmiergeräts
Das Programmiergerät (D) wird über das Verbindungskabel mit dem Sensor
Terminal Board (C) verbunden. Achten Sie bei der Verbindung auf die richtige
Orientierung des Adaptersteckers, wie im Bild gezeigt. Die Stromversorgung des
Sensor Terminal Boards erfolgt über die USB Schnittstelle. Dies gilt ebenso für das
Programmiergerät, das mit einem weiteren USB Kabel gleichzeitig an der
Arbeitsstation angeschlossen wird.
Jedem Praktikumsteam stehen zur Verfügung:
a) 1 Programmiergerät
b) 2 Sensor Terminal Boards
c) 3 Funkknoten mit Batteriefach
Programmierung und Test auf dem Zielsystem 43
d) 1 USB Netzteil
e) 3 USB Kabel
5.9.2 Laden und Debuggen der erzeugten Software
Nach der erfolgreichen Erstellung von Binärcode innerhalb des in Abschnitt 3.3.2
Atmel Studio 6.0 für die Zielplattform wird der erzeugte Code beim Start der
Debugging Funktion automatisch in den Flash–Speicher der Controllers übertragen.
Die Ausführung stoppt beim Einsprung in die Funktion „main“. Nun stehen Ihnen die
folgenden Funktionen zur Verfügung:
1) Run (F5)
Das Programm wird gestartet und läuft ungehindert durch.
2) Step
Der Code der Quelltextzeile, die als Ausführungspunkt durch einen gelben
Pfeil am linken Rand markiert ist, wird ausgeführt. Handelt es sich dabei,
oder auch bei einem Teil des Ausdrucks, um einen Funktionsaufruf, so wird
dieser Aufruf und alle daraus folgenden durchlaufen, bis die Anwendung zur
nächsten Quelltextzeile zurückgekehrt ist.
3) Stepinto
Die Funktion ist analog zu „Step“, jedoch wird immer bei der nächsten
Anweisung angehalten. Dies gilt dann auch für den Einsprungspunkt der
nächsten Funktion.
4) Stepout
Innerhalb einer Funktion ist es möglich, die Ausführung zu starten, bis die
Funktion wieder verlassen wird. Die Ausführungsmarkierung ist dann im
Quelltext an dem Punkt gesetzt, bei dem Ausführung nach dem Ende der
aktuellen Funktion wieder aufgenommen wird.
Während die MCU angehalten ist, d.h. sofort nach dem Start des Debuggings oder
am Ende jeder schrittweisen Ausführung, können im Quelltext an beliebiger Stelle
so genannte „Breakpoints“ gesetzt werden. Sollte diese Funktion scheinbar nicht
möglich sein, so gibt es hierfür zwei Ursachen:
a) Die gewählte Position im Quelltext wird nie erreicht, z.B. weil ein Aufruf der
umgebenden Funktion nie erfolgt.
b) Sie haben den Quelltext verändert und im Vergleich zum geladenen Code
haben sich die Positionen (Zeilennummern) verschoben. Ist dies der Fall, so
können Sie vielleicht an untypischen Positionen (Leerzeilen, vor oder nach
der eigentlichen Funktion) Breakpoints setzten. Unterbrechen Sie in diesem
Fall, soweit notwendig, das Debugging und starten Sie, nach einer erneuten
Erzeugung des Binärcodes, neu.
c) Die Hardwareressourcen sind erschöpft und weitere Breakpoints können
nicht mehr gehandhabt werden. Löschen Sie andere, nicht mehr benötigte
Breakpoints und versuchen Sie es erneut.
Während die MCU angehalten ist, können Sie über den I/O-view auch die Bits aller
internen Register der MCU direkt verändern. So können Sie z.B. Überprüfen, ob das
Setzen oder Rücksetzten bestimmter Bits tatsächlich die geplante Funktion hat.
44 Arbeitsablauf der automatisierten Entwicklung
5.10 Verifikation, Validierung und Abschlussdokumentation
Sind alle praktischen Teile abgeschlossen, so endet jedes Projekt mit einer
Abschlussdokumentation. Stellen Sie sich hier noch einmal die beiden Fragen:
1) Haben wir alles richtig gemacht?
2) Haben wir das Richtige gemacht?
Unter der Annahme, dass Sie beide Fragen mit „Ja“ beantworten, dokumentieren
Sie dies auch nachvollziehbar in einem Abschlussdokument. Die Grundregeln für
dessen Erstellung sind:
1) Das Anforderungsdokument sollte zitiert werden.
2) Jede Anforderung aus dem Anforderungsdokuments sollte aufgenommen
und deren Erfüllung dokumentiert werden.
3) Abweichungen vom Anforderungsdokument, das sind auch zusätzlich
erreichte Ziele, müssen dokumentiert sein.
4) Zur weiteren Verwendung der Projektergebnisse müssen alle Projektdateien
gesichert und ein erfolgreicher Weg zu deren Restaurierung dokumentiert
sein.
5) Fachliche Ergebnisse sind in Form eines Datenblattes zu ergänzen.
Insbesondere Punkt 4 führt in der Praxis oft zu Problemen und damit zum Verlust
wertvollen Know–Hows. Überprüfen Sie der Restaurierungsmöglichkeit z.B. so:
a) Benennen Sie das Stammverzeichnis, in dem Sie die letzten Arbeiten
gemacht haben nach dem Beendigen aller Aktivitäten um.
b) Restaurieren Sie durch Zugriff auf ein zentrales Repository die Quelldateien
neu.
c) Starten Sie nun die Tool-Kette
d) Ist die Erzeugung der Programmierdaten auf Anhieb gelungen?
e) Falls d) positiv beantwortet wurde, vergleichen Sie das Resultat mit Ihrer
Sicherheitskopie. Sind die erzeugten Dateien gleich groß? Ist der Inhalt
offensichtlich identisch?
Haben Sie die Fragen unter e) auch noch positiv (d.h. mit „Ja“) beantwortet, so ist
das Projekt dieses Praktikums beendet.
45
6 Bedingungen für eine erfolgreiche Teilnahme
Dieser Abschnitt beschreibt die Rahmenbedingungen der Praktikumsdurchführung
mit dem Ziel, den Erfolg des Praktikums durch eine strukturierte Teamarbeit sicher
zu stellen und eine nachvollziehbare Bewertung im Einzelfall zu ermöglichen.
Grundsätzliche Arbeitsregeln
1) Die Bestätigung der erfolgreichen Teilnahme ist an zwei Bedingungen
geknüpft:
a. Regelmäßige Anwesenheit (nur bei Anwesenheit können Punkte
erworben werden.)
b. Erzielung von 75% der erreichbaren Punkte (derzeit 33) bei der
Bearbeitung der Praktikumsaufgaben.
2) Teilnehmer müssen grundsätzlich zu den Terminen sowohl vormittags als
auch nachmittags anwesend sein. Eine Verspätung um mehr als 15 Minuten
wird grundsätzlich als „Fehlend“ gewertet.
3) Bei mehr als 2 Einträgen „Fehlend“ kann keine erfolgreiche Teilnahme mehr
bescheinigt werden.
4) Im Laufe der Praktikumszeit werden Aufgaben gestellt, die entweder im
Team oder individuell zu lösen sind. Für die Aufgaben gibt es jeweils einen
Zeitrahmen und es findet eine Bewertung der erstellten Lösung statt.
5) Die Aufgaben eines Tages werden nach der Feststellung der Anwesenheit
verteilt.
6) Die Punkte werden immer pro Praktikumsteam vergeben!
Mindestanforderungen an alle Lösungen
1) Die Aufgaben müssen zum vereinbarten Termin vollständig vorliegen. Eine
iterative Überprüfung der Ergebnisse, d.h. mit zwischenzeitlichen
Korrekturen, ist nicht vorgesehen.
2) Aller Ergebnisse müssen vor der Abgabe in einem zentralen Repository
gespeichert sein. Punktabzüge können vorgenommen werden, wenn:
a. Ergebnisdateien im Repository liegen.
b. Nach einem Auschecken aus dem Repository ein typischer Ablauf des
Workflows bis zur Lösung nicht mehr möglich ist.
Bewertungskriterien der Lösungen
1) Vollständigkeit der Lösung. (alle Teilaspekte, geforderte Dokumente)
2) Sicheres Verhalten bei fehlerhaften Eingaben.
3) Erläuterung der Lösung.
4) Plausible und sachgerechte Dokumentation.
5) Erzielen der gewünschten Funktion.
47
7 Praktikumsaufgaben
7.1 Allgemeines
Die folgende Liste der Aufgaben bildet ausschließlich den geplanten, thematischen
Umfang der während des Praktikums zu lösenden Aufgaben ab. Die detaillierten
Aufgabenstellungen werden grundsätzlich zu Beginn der Sitzungen verteilt und
werden vom Timing individuell auf die Praktikumssituation zugeschnitten.
Auf Grund der spezifischen Leistungen der Praktikumsgruppen kann es somit zu
zeitlichen Verschiebungen kommen. Das dargestellte Raster ist daher nur als
Planungsgrundlage und Referenz für den Inhalt zu verstehen.
7.2 Implementierung eines einfachen UML State–Charts
7.2.1 Beispiel: Etablierung des Funknetzes (1,5h)
Aufgabe:
Implementierung eines Zustandsautomaten mit 1 Zustand, einer Ausgabe und
einer Zeitbedingung.
Ziel der Aufgabe:
Die Studierenden sollen sich mit dem Editor vertraut mache und die Fähigkeit
nachweisen, formal korrekte Eingaben entsprechend eines
Anforderungsdokuments durchzuführen und so einen realen Sachverhalt
plausibel zu modellieren.
Mindestanforderung an die Lösung:
Das State–Chart muss ohne Fehlermeldungen eingegeben sein und alle
verlangten Ein- und Ausgabesignale aufweisen. Eine Simulation des
vorgegebenen Verhaltens muss möglich bzw. Abweichungen von den
Erwartungen müssen schlüssig erklärt werden.
7.2.2 Beispiel: Modellierung des Anmeldeprozesses (2,5h)
Aufgabe:
Implementierung eines Zustandsautomaten mit mehreren Zuständen und
eigenständiger Analyse. Komplettierung der Aufgabenstellung um
Fehlerbehandlung.
Ziel der Aufgabe:
Die Studierenden simulieren komplexer Systeme mit nebenläufigen Zuständen
und experimentieren mit unterschiedlichen Lösungsansätzen. Die Aufgabe soll
die Kreativität bei der Modellbeschreibung fördern.
Mindestanforderung an die Lösung:
Das State–Chart muss ohne Fehlermeldungen eingegeben sein und alle
verlangten Ein- und Ausgabesignale aufweisen. Eine Simulation des
vorgegebenen Verhaltens muss möglich bzw. Abweichungen von den
Erwartungen müssen schlüssig erklärt werden.
48 Praktikumsaufgaben
7.3 Integration mit der Hardwareplattform
7.3.1 Arbeiten mit der Quellcodeverwaltung (0,5h)
Aufgabe:
Arbeit mit der Quellcodeverwaltung, um das Ausgangsprojekt zu erhalten und in
eine individuelle Kopie für die jeweilige Arbeitsgruppe zu überführen und die
automatische Code-Generierung zu konfigurieren.
Ziel der Aufgabe:
Die Studierenden lernen Grundlagen der effizienten Code-Verwaltung im Team
kennen. Unterscheidung von Originalquellen und erzeugten Daten. Die
Fähigkeiten zur Erzeugung reproduzierbarer Software-Revisionen werden
trainiert.
Mindestanforderung an die Lösung:
Die Arbeitsbereiche müssen funktionsfähig und aus dem zentralen Repository
restaurierbar sein.
7.3.2 Verwendung der Team–Funktionen (1h)
Aufgabe:
Ergänzung eines Code-Skeletts bis zur fehlerfreien Erzeugung eines lauffähigen
Programms und Verteilung der Lösung im Team.
Ziel der Aufgabe:
Die Studierenden sammeln erste Erfahrungen mit der Ausführungsumgebung
und üben gleichzeitig die Weitergabe gefundener Lösungen an andere
Teammitglieder.
Mindestanforderung an die Lösung:
Eine ladbare Software muss entstanden sein eindeutig aus dem Repository als
individueller Softwarestand abrufbar sein. Dies darf frühere Versionen nicht
beeinflussen.
7.3.3 Aufbau einer Ausführungsumgebung auf der Zielplattform (2h)
Aufgabe:
Komplexere Aufgabe zur Ausfüllung des Codeskeletts bis zu einem Zustand, in
dem die Ausführung generierten Codes auf der Hardware prinzipiell möglich ist.
Ziel der Aufgabe:
Der Softwarerahmen auf der Embedded Plattform wird komplettiert und die
Ausführung der weiteren Aufgaben vorbereitet. Die Studierenden sammeln
Erfahrungen im Umgang mit dem Zielsystem und erlernen die
Rahmenbedingungen für die Nutzung der Werkzeugkette.
Mindestanforderung an die Lösung:
Die implementierten Funktionen müssen compilierbar und ein vorgegebenes
Beispiel korrekt ausführbar sein.
Einführung in die Fallstudie 49
7.4 Einführung in die Fallstudie
7.4.1 Erstellung einer Demoapplikation (1,5h)
Aufgabe:
Erweiterung der Testumgebung zur Verifikation des Systemmodells. Eine
Einbettung des automatisch erzeugten Codes in einen Demonstrator im Sinne
von „Software in the Simulation–loop“ wird vorgenommen.
Ziel der Aufgabe:
Im Sinne des V–Modells wird ein Modultest erreicht, der potentiellen Anwendern
einen intuitiven Zugang zur angestrebten Lösung ermöglicht um eine frühzeitige
Validierung des Lösungskonzept zu erreichen. Es werden Erfahrungen mit der
Wiederverwendung von getestetem Code in unterschiedlichen
Laufzeitumgebungen gesammelt.
Mindestanforderung an die Lösung:
Eine Ausführung des erzeugten Codes in der „Wirt-Applikation“ mit korrekter
Funktion in Bezug auf den vorgegebenen Automaten muss erreicht werden. Die
„Fehlfunktion“ des vorgegebenen Automaten sollte erkannt werden.
7.4.2 Verbesserung des Beispiel–State–Charts (1h)
Aufgabe:
Korrektur des gegebenen Automaten bis zu einer korrekten Lösung.
Ziel der Aufgabe:
Die Ergebnisse der Validierung sollen genutzt werden um mit vergleichsweise
geringem Aufwand den entdeckten Fehler zu korrigieren.
Mindestanforderung an die Lösung:
Protokollierung der Fehlfunktion, des entwickelten Arbeitsziels, danach korrekte
Funktion des Beispiels.
7.4.3 Pflege des Anforderungsdokuments (0,5h)
Aufgabe:
Dokumentieren der Entwicklungsiteration im Anforderungsdokument.
Ziel der Aufgabe:
Der Umgang mit Projektdokumenten wird vertieft.
Mindestanforderung an die Lösung:
Formal und textuell korrekte Abbildung der Entwicklung im
Anforderungsdokument.
50 Praktikumsaufgaben
7.5 Lokale Tests auf der Hardwareplattform
7.5.1 Erstellung, Programmieren und Debugging (2h)
Aufgabe:
Erweiterung des Quellcodes für Physical Adaptation Layers auf der
Hardwareplattform zur Erfüllung aller Anforderungen der Fallstudie.
Ziel der Aufgabe:
Die Studierenden sammeln Erfahrungen mit der Abbildung von
Softwareartefakten auf physikalische Ein– und Ausgänge. Dies schließt Arbeiten
zur Verifikation der Detaillösung in Form einer Testapplikation.
Mindestanforderung an die Lösung:
Die notwendigen Tests zur Verifikation der Lösung inklusive des Debuggings auf
der Zielplattform müssen demonstriert werden.
7.5.2 Austausch des manuellen Codes gegen ein State–Chart (1h)
Aufgabe:
Eine UML Modell wird erstellt, gegen das die manuell erzeugte Testapplikation
ausgetauscht werden soll.
Ziel der Aufgabe:
Die Studierenden erlernen die Notwendigkeit der Verifikation des
Generatorprozesses im Rahmen der Qualitätssicherung des automatisierten
Entwicklungsprozesses.
Mindestanforderung an die Lösung:
Beide Lösungsvarianten, sowohl die manuelle aus Teil 7.5.1 als auch die hier
erzeugte müssen identische Funktion zeigen.
7.5.3 Einbindung der Demoapplikation in den Hardwarekontext (1h)
Aufgabe:
Übertragung der verbesserten Version der Fallstudie aus Abschnitt 7.4.2 auf die
Hardware (monolithisch).
Ziel der Aufgabe:
Die grundsätzliche Funktion aller Systemkomponenten wird im Sinne der
Verifikation des Entwicklungsprozesses nachgewiesen.
Mindestanforderung an die Lösung:
Nachweis der Funktionsfähigkeit und vollständige Pflege aller Projektdokumente.
7.6 Integration des Funknetzes (I)
7.6.1 Umsetzung einer Beispielapplikation (3h)
Aufgabe:
Die Umsetzung der kompletten Fallstudie auf ein verteiltes System wird
vorbereitet. Dazu sind die Möglichkeiten an Hand von Beispielapplikationen zu
analysieren und eine Entscheidung über das weitere Vorgehen eigenständig zu
treffen.
Integration des Funknetzes (II) 51
Ziel der Aufgabe:
Die Studierenden erlernen die Dokumentation des Projektvorgehens bei
praktischen Versuchen in der Umsetzung von Anforderungen mit gegebenen
Mitteln.
Mindestanforderung an die Lösung:
Operative Umsetzung in der Arbeitsumgebung und praktischer Nachweis, d.h.
Vorführung, der implementierten Basisfunktionalität.
7.6.2 Integration von Applikation und Funkschnittstelle (3h)
Aufgabe:
Die durch die Funkkommunikation notwendigen Zusatzfunktionen sind in das
Systemmodell aus 7.4.2 zu integrieren.
Ziel der Aufgabe:
Die Studierenden sammeln Erfahrungen mit der Wiederverwendung und
Konfiguration von Code und ergänzen selbstständig neue Funktionen.
Mindestanforderung an die Lösung:
Eine verifizierte Lösung bis zur Beschreibung eines vollständigen Arbeitsablaufs
muss vorliegen. Die gezeigten Funktionen müssen gegen die erstellten
Anforderungen validiert sein.
7.7 Integration des Funknetzes (II)
7.7.1 Tests zwischen 2 Komponenten (3h)
Aufgabe:
Die Ergebnisse aus 7.6.2 sind in die Hardwareplattform zu integrieren,
notwendige Anpassungen auf der Plattform manuell vorzunehmen, und ein
Integrationstest erfolgreich zu absolvieren.
Ziel der Aufgabe:
Die Studierenden Erlernen das Vorgehen bei Integrationstests und Methodik zur
Überprüfung von Systemschnittstellen. Dabei entsteht ein verteilt
funktionierendes System der Fallstudie.
Mindestanforderung an die Lösung:
Ein Dokumentation der Kommunikationsschnittstellen muss vorliegen und der
Funktionstest mit 2 Funkknoten erfolgreich abgeschlossen werden.
7.7.2 Integration zwischen Teams (3h)
Aufgabe:
Die Ergebnisse aus 7.7.1 sind zwischen je zwei Teams so zu integrieren, dass
ein System entsprechend der Abbildung 2 entsteht.
Ziel der Aufgabe:
Erfahrungen mit der Adaption von Schnittstellen und Test der Interoperabilität in
Form eines „Plugfest“.
Mindestanforderung an die Lösung:
Die Integration beider Teams soll erfolgreich abgeschlossen, notwendige
52 Praktikumsaufgaben
Änderungen dokumentiert und das Ergebnis aus dem Repository reproduzierbar
sein.
7.8 Erstellung von Testszenarien in TTCN-3
7.8.1 Einbindung der Demo–Applikation in den Test (2h)
Aufgabe:
Zur Automation von Tests und der Anbindung von Testwerkzeugen wird die PC–
Demoapplikation aus 7.4.1 zu einem „Beobachter“ modifiziert, der eine
abstrahierte Bewertung der State–Chart–Funktionen ermöglicht.
Ziel der Aufgabe:
Die Studierenden erarbeiten Aspekte des Testen, u.a. auch die Notwendigkeit
der Validierung von Testumgebungen.
Mindestanforderung an die Lösung:
Die Lösung sollte eine Fernsteuerung des Simulators ermöglichen und die aus
den vorherigen Tests erwarteten Ergebnisse widerspiegeln.
7.8.2 Einbindung der Hardware in die Testumgebung (1,5h)
Aufgabe:
Die Lösung aus Aufgabe 7.7.2 wird an den Testbeobachter angeschlossen.
Ziel der Aufgabe:
Die Studierenden sollen erlernen, wie „Design for Testability“ den Einsatz
automatisierter Werkzeugketten ermöglicht.
Mindestanforderung an die Lösung:
Eine Beobachtung der Zustandswechsel im Beispielsystem auf dem PC soll
möglich sein.
7.8.3 Grundlagen des automatisierten Testens (1,5h)
Aufgabe:
Es soll eine formale, tabellarisch textuelle Testbeschreibung inklusive einer
entsprechenden Ergebnisbewertung erstellt werden. Das Ergebnis ist in TTCN-3
zu formulieren und auszuführen. (Ein Beispielsystem wird modifiziert).
Ziel der Aufgabe:
Erlernen des grundsätzlichen Umgangs mit Werkzeugen zur Testdefinition
und -ausführung.
Mindestanforderung an die Lösung:
Ein plausibles Textdokument ist zu erstellen und die Funktion bzw. der
Testablauf zu demonstrieren
7.9 Qualifikation und Freigabe des Ergebnisses
7.9.1 Einbindung der Hardware in den Testablauf (2h)
Aufgabe:
Die TTCN-3 Umsetzung ist unter Nutzung der Ergebnisse aus 7.8.1 und 7.8.2
Qualifikation und Freigabe des Ergebnisses 53
sowohl mit dem State–Chart Simulator als auch mit der Hardwareumgebung zu
integrieren.
Ziel der Aufgabe:
Das Zusammenwirken aller Teile der Werkzeugkette soll integriert demonstriert
und so ein Eindruck vom Umfang der Gesamtlösung zu vermitteln.
Mindestanforderung an die Lösung:
Die Tests sollen den Durchgriff der Testumgebung auf die Implementierung der
Fallstudie zeigen.
7.9.2 Abschlussdokumentation (2h)
Aufgabe:
Die Abschlussdokumentation wird erstellt. Diese soll insbesondere den Grad der
Zielerreichung in Bezug auf das erstellte und im Praktikumsverlauf gepflegte
Anforderungsdokument darstellen.
Ziel der Aufgabe:
Die Studierenden erlernen die Übergabe der Abschlussdokumente mit der
Intension, die Ergebnisse nachweisbar und wiederverwendbar zu machen.
Mindestanforderung an die Lösung:
Formal und textuell korrekte Abbildung der Sachverhalte und vollständige Pflege
des Ergebnisses im Repository