04.10.2013 Aufrufe

Generierung aufgabenbasierter dialogorientierter ...

Generierung aufgabenbasierter dialogorientierter ...

Generierung aufgabenbasierter dialogorientierter ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

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

<strong>Generierung</strong> <strong>aufgabenbasierter</strong> <strong>dialogorientierter</strong><br />

Benutzerschnittstellen von Web-Anwendungen<br />

WIRTSCHAFTSWISSENSCHAFT<br />

Bachelor - Master - Zusatzstudium für Juristen<br />

Informationen zum Studium<br />

Dissertation zur Erlangung des akademischen Grades Doktor der Naturwissenschaften<br />

(Dr. rer. nat.) der Fakultät für Mathematik und Informatik der FernUniversität in Hagen<br />

im Fach Informatik<br />

Vorgelegt von:<br />

Dipl.-Inform. Stefan Betermieux<br />

Hagen im November 2008


Danksagung<br />

Bei der Durchführung meines Dissertationsprojekts haben mich viele Menschen unterstützt,<br />

denen ich an dieser Stelle besonderen Dank sagen möchte:<br />

Herrn Prof. Dr. Gunter Schlageter danke ich für die jahrelange Begleitung auf meinem<br />

Weg als Wissenschaftler. Er hat bereits 2002 meine Diplomarbeit betreut und mich<br />

während meiner Exkurse in die Wirtschaft, auf die Konferenzen dieser Welt und in<br />

abendliche Strategiesitzungen immer wieder daran erinnert, dass ich eigentlich noch<br />

eine Doktorarbeit schreiben wollte.<br />

Herrn Prof. Dr. Jörg Haake danke ich für seine freundliche Bereitschaft, das Zweitgutachten<br />

meiner Arbeit zu übernehmen. Die Zusammenarbeit war stets fruchtbar und die<br />

vorliegende Arbeit profitierte von seinen Ratschlägen und Empfehlungen.<br />

Die Zusammenarbeit mit Dr. Birgit Bomsdorf kann ich nicht hoch genug bewerten.<br />

Sie war es, die mir das Themengebiet dieser Arbeit näherbrachte und die in meinen<br />

Augen unglaubliche These vertrat, dass Computer sich den Menschen anpassen sollten –<br />

und nicht umgekehrt. Durch sie lernte ich die internationale HCI-Gemeinschaft kennen<br />

und war auf allen Konferenzen von bekannten Gesichtern umgeben. Für persönliche<br />

Gespräche und Ratschläge möchte ich vor allem Prof. Dr. Peter Forbrig, Dr. Anke Dittmar,<br />

Prof. Dr. Gerd Szwillus und Dr. Marco Winckler danken.<br />

Patrick Langer danke ich für das gemeinsame Studium und die ersten Jahre als Wissenschaftler;<br />

ohne ihn hätte dieses Promotionsprojekt wohl nicht mal begonnen. Allen<br />

Kolleginnen und Kollegen am Lehrgebiet Informationssysteme und Datenbanken<br />

möchte ich für anregende Gespräche und die gute Arbeitsatmosphäre danken. Besonders<br />

die Zusammenarbeit mit Dominic Becking hat mir viel Freude bereitet; ich möchte<br />

ihm für gemeinsame Projekte, gelegentliche „didaktisch-pädagogische“ Hinweise und<br />

gute Zeiten auf Vortragsreisen danken. Frank Laskowski danke ich dafür, ihn kennen<br />

zu dürfen. Als Wandler zwischen den Welten der Informatik, der Philosophie und der<br />

Theologie hat er einen nicht wieder gut zu machenden Eindruck hinterlassen. Gerd Rademacher<br />

und seinen Mitarbeitern danke ich herzlich für ihre kompetente Unterstützung<br />

in allen technischen Belangen. Regina Braun und Barbara Wohlfeil waren stets für<br />

Fragen der Organisation ansprechbar und haben mir in dieser Hinsicht oft geholfen.<br />

Sehr am Herzen liegt mir auch der Dank an meine Eltern, meinem Bruder und meine<br />

Freunde, die mir stets den Rücken frei gehalten und mich über so manche Unwägbarkeit<br />

hinweggetragen haben. Und zu guter Letzt gilt mein ganz besonderer Dank der<br />

wichtigsten Person überhaupt, meiner Frau. Olga, Du hast mehr zu dieser Arbeit beigetragen,<br />

als Du Dir vorstellen kannst. Die grafische Gestaltung dieser Arbeit, die Du in<br />

wochenlangen Nachtsitzungen aus meinen laienhaften Entwürfen gezaubert hast, sind<br />

vielleicht der Beleg für Außenstehende. Nico und Elisa sind der Beleg für mich. Danke<br />

für alles!<br />

iii


Danksagung<br />

iv


Abstract<br />

Klassischerweise wird die Navigation in Web-Anwendungen als Zustandsübergang von<br />

einer Webseite auf die folgende Webseite definiert. Viele Anwendungen erwarten aber<br />

keine freie Navigation, sondern einen geführten Dialog; die Anforderungen an diese<br />

Dialoge führen zu unübersichtlichen und schwierig zu modellierenden Zustandsübergangsdiagrammen.<br />

Ziel der Arbeit ist die Modellierung der Dialoge mittels Aufgabenbäumen,<br />

welche die Komplexität reduzieren. Diese Arbeit wird ein spezielles Interaktionsmodell<br />

für Web-Anwendungen vorstellen, welches Ansätze aus klassischen Aufgaben-,<br />

Dialog- und Präsentationsmodellen vereint und zur Laufzeit in eine Benutzerschnittstelle<br />

umgesetzt wird. Weiterhin wird gezeigt, wie spezielle Anforderungen an<br />

Web-Anwendungen mit diesem Ansatz behandelt werden können, z. B. das Persistieren<br />

des Zustands, oder die Erkennung von Navigation außerhalb des Dialogs.<br />

Neben der Definition des Interaktionsmodells wird auch die Architektur vorgestellt,<br />

mit der das Modell zur Laufzeit in eine Benutzerschnittstelle umgewandelt werden<br />

kann. Das Verhalten zur Laufzeit muss definiert werden, weil die Präsentation zur Modellierungszeit<br />

als Fragmente nur lose an die Aufgaben gekoppelt ist und erst zur Laufzeit<br />

basierend auf dem Anwendungszustand endgültig zu einer Benutzerschnittstelle<br />

zusammengestellt wird. Diese Flexibilität kann genutzt werden, um, abhängig vom Benutzer<br />

und anderen Kontextinformationen, eine angepasste Benutzerschnittstelle der<br />

Web-Anwendung zu generieren.<br />

v


Abstract<br />

vi


Inhaltsverzeichnis<br />

Danksagung iii<br />

Abstract v<br />

I Grundlagen 1<br />

1 Einleitung 3<br />

1.1 Problemstellung und Motivation . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

1.2 Entwurfsmethoden für Web-Anwendungen . . . . . . . . . . . . . . . . . 4<br />

1.3 Lösungsansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.4 Gliederung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2 Architekturen für Web-Anwendungen 9<br />

2.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.2 Architekturkonzeption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.2.1 Fortschritt der Softwareentwicklung . . . . . . . . . . . . . . . . . 10<br />

2.2.2 Architekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.2.3 Softwarearchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.2.4 Modularitätsprinzip . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

2.2.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

2.3 Schichtenarchitekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.3.1 Ein-Schicht-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.3.2 Zwei-Schichten-Architektur . . . . . . . . . . . . . . . . . . . . . . . 13<br />

Client/Server Hintergrund . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

Client/Server als Schichtenarchitektur . . . . . . . . . . . . . . . . . 14<br />

2.3.3 Drei-Schichten-Architektur . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.3.4 Mehrschichten-Architektur . . . . . . . . . . . . . . . . . . . . . . . 16<br />

2.3.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

2.4 Schichtenarchitektur für Web-Anwendungen . . . . . . . . . . . . . . . . 16<br />

2.4.1 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

2.4.2 Web-Applikationsserver . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

2.5 Portalarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

vii


Inhaltsverzeichnis<br />

2.5.1 Referenzarchitektur Portalserver . . . . . . . . . . . . . . . . . . . . 19<br />

2.5.2 Basisdienste mit Relevanz für unseren Ansatz . . . . . . . . . . . . 20<br />

Anwendungsverwaltung . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

Benutzerverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

Rechteverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

Single-Sign-On . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

Prozessunterstützung . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

Layoutmanagement . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

2.5.3 Zusammenfassung und Ausblick . . . . . . . . . . . . . . . . . . . . 22<br />

2.6 Architekturmuster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

2.6.1 Model View Controller . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

2.6.2 Front Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

2.6.3 Dialogsteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

2.6.4 Komponentenbasierte Präsentation . . . . . . . . . . . . . . . . . . 27<br />

2.6.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

2.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3 Modellbasierte Entwicklung 31<br />

3.1 Modelle im Entwicklungsprozess . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

3.1.1 Modelldefinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

3.1.2 Metamodelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

3.1.3 Modellbasierte und modellgetriebene Entwicklung . . . . . . . . . 33<br />

3.1.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.2 Modellbasierte Entwicklung von Web-Anwendungen . . . . . . . . . . . 35<br />

3.3 Domänenmodellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

3.4 Aufgabenmodellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

3.4.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

3.4.2 Methoden der Aufgabenmodellierung . . . . . . . . . . . . . . . . 38<br />

Hierarchical Task Analysis (HTA) . . . . . . . . . . . . . . . . . . . . 39<br />

Goals, Operators, Methods, and Selection rules (GOMS) . . . . . . 41<br />

Task Knowledge Structures (TKS) . . . . . . . . . . . . . . . . . . . 42<br />

Model for Activity Description (MAD) . . . . . . . . . . . . . . . . . 43<br />

User Action Notation (UAN) . . . . . . . . . . . . . . . . . . . . . . 45<br />

Concurrent Task Trees (CTT) . . . . . . . . . . . . . . . . . . . . . . 48<br />

3.4.3 Gemeinsamkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

3.5 Dialogmodellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

3.5.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

3.5.2 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

3.5.3 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />

3.5.4 Vom Aufgabenmodell zum Dialogmodell . . . . . . . . . . . . . . . 55<br />

Umsetzung der temporalen Operationen . . . . . . . . . . . . . . . 56<br />

3.5.5 Fehlerquellen bei der Dialogmodellierung . . . . . . . . . . . . . . 58<br />

3.5.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

3.6 Präsentationsmodellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

3.6.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

viii


Inhaltsverzeichnis<br />

3.6.2 Abstraktionsstufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

Abstrakte Benutzerschnittstelle . . . . . . . . . . . . . . . . . . . . 60<br />

Konkrete Benutzerschnittstelle . . . . . . . . . . . . . . . . . . . . 62<br />

Finale Benutzerschnittstelle . . . . . . . . . . . . . . . . . . . . . . 62<br />

3.6.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

3.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

II Konzepte 65<br />

4 Überblick über den Lösungsansatz 67<br />

4.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

4.2 Aufgabenmodell als Basis des Interaktionsmodells . . . . . . . . . . . . . 68<br />

4.2.1 Temporale Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

4.2.2 Unterbrechbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

4.2.3 Rollenkonzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

4.3 Erweiterung des Interaktionsmodells . . . . . . . . . . . . . . . . . . . . . 69<br />

4.3.1 Dialogmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

4.3.2 Präsentationsmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

4.3.3 Anbindung an das Domänenmodell . . . . . . . . . . . . . . . . . . 70<br />

4.4 Laufzeitsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

4.5 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen 71<br />

5.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

5.2 Aufgabenmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

5.2.1 Das Ausführen von Aufgaben . . . . . . . . . . . . . . . . . . . . . 72<br />

5.2.2 Der Aufgabenkontext . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

5.3 Kardinalität von Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

5.3.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

5.3.2 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

5.4 Hierarchiebeziehungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

5.4.1 Allgemeine Hierarchiebedingungen . . . . . . . . . . . . . . . . . . 75<br />

5.4.2 Ordnung der Unteraufgaben . . . . . . . . . . . . . . . . . . . . . . 76<br />

5.4.3 Ausprägungen der Hierarchiebeziehungen . . . . . . . . . . . . . . 77<br />

Sequenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />

Selektion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

Parallel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

Überlappend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />

Verschachtelt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81<br />

Arbiträr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

5.4.4 Semantik der Hierarchisierung . . . . . . . . . . . . . . . . . . . . . 84<br />

5.4.5 Zusammenfassung der Hierarchiebeziehungen . . . . . . . . . . . 85<br />

5.4.6 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />

5.5 Der Aufgabentyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />

ix


Inhaltsverzeichnis<br />

5.5.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />

5.5.2 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

5.6 Unterbrechbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

5.6.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

5.6.2 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />

5.7 Zugriffskontrolle über Rollenkonzept . . . . . . . . . . . . . . . . . . . . . 91<br />

5.7.1 Rollenkonzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92<br />

5.7.2 Integration in das Aufgabenmodell . . . . . . . . . . . . . . . . . . 92<br />

5.7.3 Rollenspezifische Adaption der Benutzerschnittstelle . . . . . . . . 94<br />

5.7.4 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95<br />

5.8 Wiederverwendbarkeit von Aufgabenhierarchien . . . . . . . . . . . . . . 95<br />

5.8.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95<br />

5.8.2 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97<br />

5.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />

6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen 101<br />

6.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101<br />

6.2 Erweitertes Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102<br />

6.2.1 Finale Benutzerschnittstelle eines Dialogzustands . . . . . . . . . . 102<br />

6.2.2 Konkrete Benutzerschnittstelle . . . . . . . . . . . . . . . . . . . . 105<br />

6.2.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105<br />

6.3 Anbindung an das Aufgabenmodell . . . . . . . . . . . . . . . . . . . . . . 106<br />

6.3.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106<br />

6.3.2 Dialogfragmente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107<br />

6.3.3 Zustandsautomat für Aufgaben . . . . . . . . . . . . . . . . . . . . 109<br />

Algorithmus zur Kontrolle der Aufgabenautomaten . . . . . . . . 111<br />

Aufgabenautomaten zur Laufzeit . . . . . . . . . . . . . . . . . . . 112<br />

6.3.4 Aufgabenbasierte Komposition . . . . . . . . . . . . . . . . . . . . 115<br />

Algorithmus zur Seitengenerierung . . . . . . . . . . . . . . . . . . 117<br />

Ergebnis der Seitengenerierung . . . . . . . . . . . . . . . . . . . . 118<br />

Exkurs in dynamische Oberflächengenerierung . . . . . . . . . . . 119<br />

6.3.5 Erweiterung des Aufgabenmetamodells . . . . . . . . . . . . . . . 120<br />

Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120<br />

Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121<br />

6.3.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121<br />

6.4 Anbindung des Domänenmodells . . . . . . . . . . . . . . . . . . . . . . . 121<br />

6.4.1 Arten der Anbindung . . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />

6.4.2 Offene Fragen beim Domänenzugriff . . . . . . . . . . . . . . . . . 124<br />

Domänenmodell für unser Beispiel . . . . . . . . . . . . . . . . . . 124<br />

Probleme bei der Anbindung des Domänenmodells . . . . . . . . . 126<br />

6.4.3 Domänenzugriffsobjekte . . . . . . . . . . . . . . . . . . . . . . . . 127<br />

Unterbrechbarkeit im Bezug auf Domänenzugriffsobjekte . . . . . 127<br />

Gültigkeitsbereich der Domänenzugriffsobjekte . . . . . . . . . . . 129<br />

6.4.4 Unterbrechbarkeit und Nebenläufigkeit . . . . . . . . . . . . . . . 133<br />

6.4.5 Erweiterung des Aufgabenmetamodells . . . . . . . . . . . . . . . 134<br />

x


Inhaltsverzeichnis<br />

Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134<br />

Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135<br />

6.4.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137<br />

6.5 Erweiterung der Aufgaben um dialogspezifische Attribute . . . . . . . . 137<br />

6.5.1 Automatisches starten und beenden der Aufgaben . . . . . . . . . 137<br />

Autostart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138<br />

Autostop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139<br />

Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139<br />

Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140<br />

6.5.2 Aufgabenzustandsabhängige Erweiterungen . . . . . . . . . . . . 140<br />

6.5.3 Generische Aufgabendarstellung . . . . . . . . . . . . . . . . . . . 140<br />

6.5.4 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141<br />

6.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />

7 Architektur für das Laufzeitsystem 145<br />

7.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145<br />

7.2 Ablaufübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145<br />

7.3 Architekturübersicht Laufzeitumgebung . . . . . . . . . . . . . . . . . . . 147<br />

7.3.1 Domain Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />

7.3.2 User Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149<br />

7.3.3 Finite State Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . 150<br />

7.3.4 Task Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152<br />

7.3.5 Dialog Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155<br />

7.3.6 User Management Dialog . . . . . . . . . . . . . . . . . . . . . . . . 157<br />

7.3.7 Web Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157<br />

7.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158<br />

8 Bewertung der Ergebnisse 161<br />

8.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />

8.2 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />

8.3 Abschließender Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />

8.4 Modifizierungen am Aufgabenmodell . . . . . . . . . . . . . . . . . . . . 162<br />

8.4.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />

8.4.2 Eine Aufgabe hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . 163<br />

8.4.3 Eine Aufgabe entfernen . . . . . . . . . . . . . . . . . . . . . . . . 164<br />

8.4.4 Reihenfolge der Unteraufgaben verändern . . . . . . . . . . . . . 164<br />

8.4.5 Eine Aufgabe verschieben . . . . . . . . . . . . . . . . . . . . . . . 165<br />

8.4.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165<br />

9 Ausblick 167<br />

9.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167<br />

9.2 Werkzeugunterstützung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167<br />

9.3 Aufgabenspezifische Dialogelemente . . . . . . . . . . . . . . . . . . . . . 168<br />

9.4 Transformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168<br />

9.5 Laufzeitumgebung für andere Bereiche . . . . . . . . . . . . . . . . . . . 169<br />

xi


Inhaltsverzeichnis<br />

9.6 Usability Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169<br />

9.7 Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169<br />

9.8 Schlusswort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170<br />

III Anhänge 171<br />

A Übersicht aller Interaktionselemente 173<br />

B Beispiel- und Schemadefinition 177<br />

B.1 Vollständiges Beispiel in Diagramm-Notation . . . . . . . . . . . . . . . . 177<br />

B.2 Vollständiges Beispiel in XML-Notation . . . . . . . . . . . . . . . . . . . . 181<br />

B.3 Schemabeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

Literaturverzeichnis 193<br />

xii


Abbildungsverzeichnis<br />

2.1 Beispiel gute/schlechte Softwarearchitektur . . . . . . . . . . . . . . . . . 12<br />

2.2 Ein-Schicht-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.3 Zwei-Schichten-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.4 Drei-Schichten-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.5 Referenzarchitektur für Web-Anwendungen . . . . . . . . . . . . . . . . . 17<br />

2.6 Detaillierte Referenzarchitektur für Web-Anwendungen . . . . . . . . . . 18<br />

2.7 Detaillierte Referenzarchitektur für Portal-Anwendungen . . . . . . . . . 20<br />

2.8 MVC Architekturmuster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

2.9 MVC Architektur für Web-Anwendungen . . . . . . . . . . . . . . . . . . 26<br />

2.10 MVC Architektur mit Dialogsteuerung für Web-Anwendungen . . . . . . 27<br />

2.11 Komponentenbasierte Präsentationsarchitektur . . . . . . . . . . . . . . 28<br />

3.1 Phasen der modellbasierten Entwicklung . . . . . . . . . . . . . . . . . . . 36<br />

3.2 Zeitlinie der Aufgabenmodelle . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

3.3 CTT – Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

3.4 Dialogmodell – Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />

3.5 Dialog und Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

3.6 Verfeinerung der Präsentation aus den Aufgaben . . . . . . . . . . . . . . 60<br />

5.1 Beispiel Aufgabenmodell – Standard . . . . . . . . . . . . . . . . . . . . . 72<br />

5.2 Beispiel Aufgabenmodell – Kardinalitäten . . . . . . . . . . . . . . . . . . 74<br />

5.3 Allgemeine Hierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

5.4 Hierarchiebeziehung – Sequenz . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

5.5 Hierarchiebeziehung – Selektion . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

5.6 Hierarchiebeziehung – Parallel . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />

5.7 Hierarchiebeziehung – Überlappend . . . . . . . . . . . . . . . . . . . . . 81<br />

5.8 Hierarchiebeziehung – Verschachtelt . . . . . . . . . . . . . . . . . . . . . 82<br />

5.9 Hierarchiebeziehung – Arbiträr . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

5.10 Abarbeitung der Aufgaben als Sequenz (erste Variante) . . . . . . . . . . 84<br />

5.11 Abarbeitung der Aufgaben als Sequenz (zweite Variante) . . . . . . . . . 84<br />

5.12 Beispiel Aufgabenmodell – Hierarchie . . . . . . . . . . . . . . . . . . . . . 86<br />

5.13 Beispiel Aufgabenmodell – Aufgabentypen . . . . . . . . . . . . . . . . . 88<br />

5.14 Beispiel Aufgabenmodell – Unterbrechung . . . . . . . . . . . . . . . . . . 91<br />

xiii


Abbildungsverzeichnis<br />

xiv<br />

5.15 Hierarchischer RBAC Standard nach ANSI 359-2004 . . . . . . . . . . . . . 92<br />

5.16 Um Gruppen erweiterter RBAC Standard . . . . . . . . . . . . . . . . . . . 93<br />

5.17 Beispiel Aufgabenmodell – Zugriffsrollen . . . . . . . . . . . . . . . . . . . 95<br />

5.18 Gerichteter azyklischer Graph und gerichteter zyklischer Graph . . . . . . 96<br />

5.19 Beispiel Aufgabenmodell – Wiederverwendung . . . . . . . . . . . . . . . 97<br />

5.20 Interaktionsmetamodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

6.1 Beispiel Aufgabenmodell – Kleinanzeige Erstellen . . . . . . . . . . . . . . 103<br />

6.2 Beispiel einer finalen Benutzerschnittstelle (HTML Seite) . . . . . . . . . . 104<br />

6.3 <strong>Generierung</strong> der Benutzerschnittstelle zur Laufzeit . . . . . . . . . . . . . 107<br />

6.4 Zustandsautomat einer Aufgabe . . . . . . . . . . . . . . . . . . . . . . . . 110<br />

6.5 Dialogzustand als Teilbaum mit Aufgabenzuständen . . . . . . . . . . . . 115<br />

6.6 Generierte konkrete Benutzerschnittstelle . . . . . . . . . . . . . . . . . . 119<br />

6.7 Dialogspezifische Erweiterung des Aufgabenmetamodells . . . . . . . . . 120<br />

6.8 Beispiel Interaktionsmodell – Dialogfragmente (Auszug) . . . . . . . . . . 122<br />

6.9 Domänenmodell – Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />

6.10 Domänenzugriffsobjekte – Beispiel . . . . . . . . . . . . . . . . . . . . . . 127<br />

6.11 Domänenzugriffsobjekte – Unterbrechbarkeit . . . . . . . . . . . . . . . . 128<br />

6.12 Domänenzugriffsobjekte – Gültigkeitsbereich . . . . . . . . . . . . . . . . 130<br />

6.13 Domänenzugriffsobjekte – Gültigkeitsbereich als Sequenzdiagramm . . . 131<br />

6.14 Erweiterung des Aufgabenmetamodells um Domänenzugriffsobjekte . . 135<br />

6.15 Beispiel Interaktionsmodell – Domänenzugriff (Auszug) . . . . . . . . . . 136<br />

6.16 Beliebige Sequenz (mit Dialogfragmenten) . . . . . . . . . . . . . . . . . . 141<br />

6.17 Beliebige Sequenz (generische Darstellung) . . . . . . . . . . . . . . . . . 142<br />

6.18 Interaktionsmetamodell – mit dialogspezifischen Erweiterungen . . . . . 143<br />

7.1 Ablaufübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146<br />

7.2 Architekturübersicht Laufzeitumgebung . . . . . . . . . . . . . . . . . . . 147<br />

7.3 Architektur – Domain Base . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />

7.4 Architektur – User Management . . . . . . . . . . . . . . . . . . . . . . . . 149<br />

7.5 Architektur – Finite State Machine . . . . . . . . . . . . . . . . . . . . . . . 151<br />

7.6 Architektur – Task Controller – Modellierung . . . . . . . . . . . . . . . . 153<br />

7.7 Architektur – Task Controller – Laufzeit . . . . . . . . . . . . . . . . . . . . 154<br />

7.8 Architektur – Dialog Controller . . . . . . . . . . . . . . . . . . . . . . . . 156<br />

7.9 Umsetzung der Einstiegsseite . . . . . . . . . . . . . . . . . . . . . . . . . . 158<br />

8.1 Modifikation – Original Aufgabenmodell . . . . . . . . . . . . . . . . . . . 163<br />

8.2 Modifikation – Eine Aufgabe hinzufügen . . . . . . . . . . . . . . . . . . 163<br />

8.3 Modifikation – Eine Aufgabe entfernen . . . . . . . . . . . . . . . . . . . 164<br />

8.4 Modifikation – Unteraufgaben vertauschen . . . . . . . . . . . . . . . . . 164<br />

8.5 Modifikation – Eine Aufgabe verschieben . . . . . . . . . . . . . . . . . . 165<br />

B.1 Vollständiges Beispiel – detailliert . . . . . . . . . . . . . . . . . . . . . . . 178<br />

B.2 Vollständiges Beispiel – kompakt . . . . . . . . . . . . . . . . . . . . . . . 180


Abbildungsverzeichnis<br />

Die Rechte aller Abbildungen (bis auf Abbildung 3.3) liegen bei demedio | das atelier (Dipl. Des. Olga Merkulova,<br />

Witten). Die Abbildungen stehen unter der Creative Commons Namensnennung-Keine kommerzielle Nutzung-<br />

Keine Bearbeitung 3.0 Deutschland Lizenz.<br />

http://creativecommons.org/licenses/by-nc-nd/3.0/de/<br />

xv


Abbildungsverzeichnis<br />

xvi


Tabellenverzeichnis<br />

3.1 MAD – Konstruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

3.2 MAD – Aufgabeneigenschaften . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

3.3 UAN – Benutzeraktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />

3.4 UAN – Systemreaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

3.5 UAN – Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

3.6 UAN – temporale Operationen . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

3.7 CTT – temporale Operationen . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

3.8 CTT – Aufgabenkategorien . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

3.9 CTT – Aufgabeneigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

3.10 Vergleich der temporalen Operatoren . . . . . . . . . . . . . . . . . . . . 51<br />

3.11 Vergleich der Aufgabeneigenschaften . . . . . . . . . . . . . . . . . . . . 52<br />

5.1 Hierarchiebeziehungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />

5.2 Aufgabentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />

5.3 Aufgabendefinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />

6.1 Unterstützung von Autostart . . . . . . . . . . . . . . . . . . . . . . . . . . 139<br />

6.2 Generische Ereignisse für Aufgabenautomaten . . . . . . . . . . . . . . . 141<br />

6.3 Aufgabendialogdefinition . . . . . . . . . . . . . . . . . . . . . . . . . . . 144<br />

6.4 Aufgabenzustandsdefinition . . . . . . . . . . . . . . . . . . . . . . . . . . 144<br />

A.1 Interaktionselemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173<br />

xvii


Tabellenverzeichnis<br />

xviii


Listings<br />

3.1 HTA Beispiel – Hausputz Hierarchie . . . . . . . . . . . . . . . . . . . . . . 39<br />

3.2 HTA Beispiel – Hausputz Pläne . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

3.3 HTA Beispiel – Hausputz Pläne (erweitert) . . . . . . . . . . . . . . . . . . 40<br />

3.4 GOMS Beispiel – Übertrage Änderungen aus einem Manuskript . . . . . . 41<br />

3.5 Beispiel einer abstrakten Benutzerschnittstelle . . . . . . . . . . . . . . . 61<br />

3.6 Beispiel einer konkreten Benutzerschnittstelle . . . . . . . . . . . . . . . . 62<br />

3.7 Beispiel einer finalen Benutzerschnittstelle . . . . . . . . . . . . . . . . . . 63<br />

6.1 Beispiel einer konkreten Benutzerschnittstelle (XML Format) . . . . . . . 106<br />

6.2 Dialogfragment – Vorname angeben . . . . . . . . . . . . . . . . . . . . . 108<br />

6.3 Dialogfragment – Nachname angeben . . . . . . . . . . . . . . . . . . . . 108<br />

6.4 Dialogfragment – Name angeben . . . . . . . . . . . . . . . . . . . . . . . 108<br />

6.5 Dialogfragment – Adresse angeben . . . . . . . . . . . . . . . . . . . . . . 108<br />

6.6 Dialogfragment – Kleinanzeige erstellen . . . . . . . . . . . . . . . . . . . 109<br />

6.7 Dialogfragment (Ursprungsversion) – Name angeben . . . . . . . . . . . . 116<br />

6.8 Dialogfragment (revidierte Version) – Name angeben . . . . . . . . . . . 116<br />

6.9 Dialogfragment (revidierte Version) – Adresse angeben . . . . . . . . . . 117<br />

6.10 Dialogfragment (revidierte Version) – Kontaktinformationen angeben . 117<br />

6.11 Dialogfragment (revidierte Version) – Kleinanzeige erstellen . . . . . . . 117<br />

B.1 Komplettes Beispiel im XML-Format . . . . . . . . . . . . . . . . . . . . . . 181<br />

B.2 XSD Schemabeschreibung des Aufgabenmetamodells . . . . . . . . . . . 187<br />

xix


Listings<br />

xx


Teil I<br />

Grundlagen<br />

1


Kapitel 1<br />

Einleitung<br />

Inhalt<br />

1.1 Problemstellung und Motivation . . . . . . . . . . . . . . . . . . . . . . 3<br />

1.2 Entwurfsmethoden für Web-Anwendungen . . . . . . . . . . . . . . . 4<br />

1.3 Lösungsansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.4 Gliederung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

1.1 Problemstellung und Motivation<br />

Web-Anwendungen nehmen mittlerweile einen großen Teil des World-Wide-Webs ein.<br />

In der Anfangszeit des Webs wurden nur statische Seiten erstellt, später kamen rudimentäre<br />

Serversysteme zum Einsatz, die einfache dynamische Webseiten erstellen<br />

konnten. Mit dem Wunsch, klassische Anwendungen ins Web zu übertragen, stieg auch<br />

die Komplexität des Softwareentwicklungsprozesses für die neu geschaffene Kategorie<br />

der Web-Anwendungen. Große E-Commerce-Anwendungen müssen beispielsweise adaptierte<br />

Benutzerschnittstellen für verschiedene Nutzergruppen und Endgeräte erzeugen<br />

können. Zudem muss die Anwendung zwei Ziele vereinen: Ein Benutzer erwartet<br />

eine möglichst einfach bedienbare Anwendung und ein Entwickler erwartet eine möglichst<br />

einfach erstellbare und erweiterbare Anwendung [de Troyer und Leune, 1998]. In<br />

dieser Arbeit werden wir einen Blick auf die Probleme bei der Erstellung von Benutzerschnittstellen<br />

für Web-Anwendungen werfen und Lösungsansätze vorstellen.<br />

Während die Beschreibung der Präsentation einer Webseite mit komponentenbasierten<br />

Web-Frameworks zufriedenstellend gelöst ist, ist die Beschreibung des Dialogs,<br />

also der Interaktionsabläufe zwischen Benutzer und Web-Anwendung, bis heute wenig<br />

intuitiv modellierbar. In den gängigen Web-Frameworks (Struts, Java ServerFaces)<br />

werden Dialogschritte als Zustände in einem Zustandsübergangsdiagramm modelliert,<br />

die Transitionen zwischen den Zuständen beschreiben die Verzweigungsmöglichkeiten.<br />

Während diese Modellierung einfach und funktional ist, besitzt sie den Nachteil, dass<br />

Abläufe nur schwer aus dem Zustandsautomaten ablesbar sind und die Flexibilität unter<br />

der fehlenden Kapselung (z. B. bzgl. Wiederverwendbarkeit) von Teildialogen leidet.<br />

Im Gegensatz zum freien Navigieren in Datenbeständen (Stöbern in Produktdatenbanken,<br />

freies Navigieren in großen Texten), zeigt sich dieses Problem besonders deutlich<br />

3


1 Einleitung<br />

bei der Modellierung von geleiteten Dialogen mit vielen Verzweigungsmöglichkeiten<br />

(Fahrkartenkauf bei der Bahn, Bestellprozesse mit Warenkorb).<br />

Folgende Probleme haben wir also bei der Modellierung von dialogorientierten Web-<br />

Anwendungen ausgemacht:<br />

Abläufe sind nur über Zustandsübergangsdiagramme modellierbar und damit für<br />

den Entwickler wenig intuitiv<br />

Teilabläufe sind schwierig wiederzuverwenden, Abläufe in Web-Anwendungen<br />

sind monolithisch<br />

Ziel dieser Arbeit wird ein Ansatz sein, welcher diese Nachteile nicht aufweist. Zwar<br />

existieren bereits Lösungen, die aus einem Zustandsübergangsdiagramm eine Teilmenge<br />

der Zustände und Transitionen als Dialog definiert. Allerdings wollen wir noch weiter<br />

gehen und uns von den Zustandsübergangsdiagrammen zur Beschreibung des Dialogs<br />

lösen. Das Forschungsgebiet der Mensch-Computer-Interaktion (MCI, engl.: HCI)<br />

stellt den Benutzer ins Zentrum der Modellierung und verwendet hierarchische Aufgabenmodelle<br />

um Abläufe auf einer konzeptuellen Ebene aus Sicht des Benutzers zu<br />

beschreiben. Wir werden dieses Modell als Basis benutzen, um die oben genannten Probleme<br />

zu lösen. Bevor wir unseren Lösungsansatz vorstellen, werden wir im nächsten<br />

Abschnitt einen Blick auf den aktuellen Stand der Technik zur Entwicklung von Web-<br />

Anwendungen werfen.<br />

1.2 Entwurfsmethoden für Web-Anwendungen<br />

Für die Modellierung von Web-Anwendungen wurde eine Vielzahl von Entwurfsmethoden<br />

entwickelt. Zu den Wichtigsten gehören:<br />

WebML Web Modeling Language [Ceri u. a., 2001]<br />

OOHDM Object-Oriented Hypermedia Design Method [Güell u. a., 2000]<br />

UWE UML-based Web Engineering [Kraus und Koch, 2003]<br />

WSDM Web Site Design Method [de Troyer und Leune, 1998]<br />

Alle Methoden orientieren sich an den modellbasierten Entwurfsmethoden für klassische<br />

Desktop-Anwendungen (z. B. die UML) und werden unter der Kategorie Web-Engineering<br />

zusammengefasst. Die besonderen Anforderungen der Web-Anwendungen<br />

integrieren die Entwurfsmethoden mit zusätzlichen Modellen, z. B. dem Navigationsmodell<br />

in UWE zur Beschreibung der Navigationsmöglichkeiten eines Benutzers um eine<br />

Information oder eine Funktion zu erreichen. Das Navigationsmodell, welches alle<br />

Methoden des Web-Engineering zur strukturierten Erstellung der Benutzerschnittstelle<br />

verwenden, ist dabei nicht fest definiert. Ansätze wie WebML beschreiben Interaktionen<br />

zwischen Benutzer und Anwendung in dem Navigationsmodell und definieren damit<br />

eigentlich den Dialog. In dieser Arbeit werden wir den Begriff des Dialogmodells<br />

zur Beschreibung der dynamischen Interaktionen zwischen Benutzer und Anwendung<br />

verwenden und nur auf den Begriff des Navigationsmodells zurückgreifen, wenn eine<br />

Navigation in statischen Informationen beschrieben werden soll.<br />

4


1.3 Lösungsansatz<br />

Ein Schwachpunkt des Web-Engineerings ist das fehlende eigenständige Dialogmodell,<br />

das interaktive Verhalten ist implizit im Navigationsmodell enthalten und wird nur<br />

unzureichend modelliert. Im HCI-Bereich existieren demgegenüber formale Ansätze für<br />

die modellbasierte Erstellung des Dialogs und der Benutzerschnittstelle eines interaktiven<br />

Systems:<br />

GTA Groupware Task Analysis [van der Veer u. a., 1996]<br />

CTT Concurrent Task Trees [Paternò u. a., 1997]<br />

UsiXML User Interface XML [Vanderdonckt und Limbourg, 2004]<br />

Der Entwicklungsprozess spannt sich von der Analyse der gewünschten Benutzerinteraktionen<br />

bis zu konkreten Benutzerschnittstellen. Ein Aufgabenmodell, welches die<br />

ausführbaren Aufgaben eines Benutzers auf einem Computersystem modelliert, steht<br />

im Zentrum der Ansätze. Schwachstelle der HCI-Ansätze ist die Fokussierung auf die Erstellung<br />

klassischer Benutzerschnittstellen, Web-Anwendungen werden zwar nicht ausgeschlossen,<br />

aber auch nicht explizit unterstützt.<br />

Erste Schritte wurden deshalb unternommen, beide Bereiche anzunähern und die<br />

Schwachstellen zu beseitigen. In WSDM wird ein Aufgabenmodell zur Beschreibung<br />

des Dialogs verwendet, welches dann in die Erstellung des Navigationsmodells einfließt.<br />

In OOHDM werden Aufgabenbeschreibungen analysiert, um die Daten zu identifizieren,<br />

die zwischen dem Benutzer und dem System ausgetauscht werden. Auch die anderen<br />

Ansätze des Web-Engineering werden zunehmend ergänzt durch eine benutzerzentrierte<br />

Modellierung (siehe [Brambilla u. a., 2006; Cachero und Koch, 2002]). Die<br />

benutzerzentrierten Ergänzungen werden allerdings nur informell für die Erstellung<br />

des Domänenmodells, des Navigationsmodells und des Präsentationsmodells verwendet.<br />

Die Modellierung des Dialogs von Web-Anwendungen sollte aber im Zentrum der<br />

Entwicklung stehen und nicht eine Erweiterung einer ansonsten datenzentrierten Entwurfsmethode<br />

sein.<br />

In dieser Arbeit wollen wir deshalb einen neuen Ansatz für das Web-Engineering vorstellen,<br />

welches Kernelemente aus dem HCI-Bereich in Form eines neu zu schaffenden<br />

Interaktionsmodells integriert.<br />

1.3 Lösungsansatz<br />

Wenn wir das Aufgabenmodell in das Zentrum unserer Modellierung stellen, und die<br />

Benutzerschnittstelle davon ableiten, dann können wir die in der Problemstellung skizzierten<br />

Probleme lösen. Das Aufgabenmodell wird als Baumstruktur modelliert und unterscheidet<br />

sich damit von einem flachen Zustandsübergangsdiagramm:<br />

Wir können Teilbäume kapseln und wiederverwenden<br />

Über die Hierarchie lässt sich ein Überblick über den Dialog erhalten<br />

Die Hierarchie vereint kurzlebige (Blätter) und langlebige (Wurzel) Aufgaben<br />

Diese grundlegende Vorgehensweise werden wir aus dem HCI-Bereich in das Web-<br />

Engineering übertragen. Anders als in den bestehenden Ansätzen, bei denen Aufgabenmodelle<br />

üblicherweise sehr früh im Modellierungsprozess in andere Modelle um-<br />

5


1 Einleitung<br />

gewandelt werden, wird in dieser Arbeit ein kombiniertes Interaktionsmodell vorgestellt,<br />

welches Aufgaben-, Dialog- und Präsentationsmodell in sich vereint. Das Aufgabenmodell<br />

ist dann z. B. nur eine der drei Sichten auf das Interaktionsmodell. Anders<br />

als Domänenmodelle, die zur Modellierungszeit in eine Anwendung transformiert und<br />

kompiliert werden, bietet es sich an, das Interaktionsmodell erst zur Laufzeit zu interpretieren<br />

und eine benutzerspezifische Oberfläche zu generieren. Dieses Ziel wird in<br />

drei Schritten erreicht:<br />

Kern des Interaktionsmodells wird im ersten Schritt die Definition eines Aufgabenmodells<br />

speziell für Web-Anwendungen sein. Ziel ist, aus dem Aufgabenmodell zur Laufzeit<br />

die Interaktion zwischen dem Benutzer und der Web-Anwendung zu generieren.<br />

Dazu erweitern wir das klassische Aufgabenmodell um folgende Aspekte:<br />

Temporale Relationen speziell für Dialoge<br />

Definiertes Laufzeitverhalten der temporalen Relationen<br />

Unterbrechbarkeit aufgrund der Zustandslosigkeit des Webs<br />

Dies reicht allerdings noch nicht aus, um die Benutzerschnittstelle zu beschreiben,<br />

deshalb werden wir in einem zweiten Schritt das Interaktionsmodell um dialogspezifische<br />

Informationen erweitern. Im Zentrum stehen die Dialogfragmente und die Anbindung<br />

an das parallel zu erstellende Domänenmodell. Ein Dialogfragment ist ein modelliertes<br />

Fragment einer Benutzerschnittstelle, welches dem Benutzer die Möglichkeit<br />

gibt, eine Aufgabe des Aufgabenmodells zu bearbeiten. Wir werden an dieser Stelle<br />

komponentenbasierten Web-Frameworks verwenden, um die Präsentation der Fragmente<br />

zu beschreiben. Größte Herausforderung in diesem Teil ist die Definition einer<br />

Komposition der Fragmente basierend auf der Hierarchie des Aufgabenmodells. Diese<br />

Komposition wird uns, abhängig vom Zustand des Aufgabenmodells zur Laufzeit, die<br />

Benutzerschnittstelle generieren. Das Aufgabenmodell beschreibt, welche Aufgaben in<br />

welcher Reihenfolge bearbeitet werden und die Dialogfragmente beschreiben, wie die<br />

Aufgaben bearbeitet werden. Weitere präsentations- und dialogspezifische Erweiterungen<br />

vervollständigen das Interaktionsmodell.<br />

Die Laufzeitkomponente wird im dritten Schritt definiert. Während die Definition eines<br />

Aufgabenmodells und die Erstellung von Dialogfragmenten zur Modellierungszeit<br />

geschehen, werden erst zur Laufzeit die möglichen Dialogschritte bestimmt und die Benutzerschnittstelle<br />

aus den Dialogfragmenten zusammengebaut. Zu diesem Zweck wird<br />

in dieser Arbeit eine Referenzarchitektur des Laufzeitsystems vorgestellt. Diese wird,<br />

vergleichbar mit einem Portalserver, Basisdienste bereitstellen und Aufgabenmodelle<br />

in einer gemeinsamen Oberfläche ausführen können. Eine Umsetzung der Konzepte<br />

wird zeigen, dass die Ideen praktikabel sind.<br />

Weil, im Gegensatz zu dem klassischen HCI-Aufgabenmodell, bei diesem Ansatz die<br />

Struktur und der Zustand des Aufgabenmodells auch zur Laufzeit noch zur Verfügung<br />

stehen, kann diese auch in verschiedener Weise in der Benutzerschnittstelle visualisiert<br />

werden. Sinnvoll ist eine automatische Umsetzung bestimmter Interaktionsmuster, z. B.<br />

einer Breadcrumb-Leiste, in der der Weg des Benutzers zur aktuellen Aufgabe angezeigt<br />

wird, oder der Aufbau von Navigationsmenüs basierend auf der Aufgabenstruktur.<br />

6


Vorteile der Lösung<br />

1.4 Gliederung der Arbeit<br />

Modelle werden nicht umgewandelt, sondern basieren auf einem zentralen<br />

Modell, dem Interaktionsmodell.<br />

Zu allen Elementen des Interaktionsmodells existiert eine Definition der<br />

Laufzeitsemantik.<br />

Die Benutzerschnittstelle wird in Form von Dialogfragmenten definiert,<br />

welche mittels einer hierarchischen Komposition zusammengesetzt<br />

werden.<br />

Aufgaben-, Dialog- und Präsentationsaspekte können unabhängig und<br />

parallel modelliert werden.<br />

Das Laufzeitsystem hat Zugriff auf alle Informationen des Interaktionsmodells<br />

und kann kontextabhängige Benutzerschnittstellen generieren.<br />

Nachteile der Lösung<br />

Der Dialog in unserem Ansatz muss die Vorgaben der Aufgabenhierarchie<br />

umsetzen. Klassische Dialoge in Form von Zustandsübergangsdiagrammen<br />

bieten mehr Freiheiten.<br />

Reduzierung des Präsentationsmodells auf Benutzerschnittstellen von<br />

Web-Anwendungen.<br />

Zusammenfassung<br />

Das Laufzeitsystem erstellt die Präsentation und den Dialog aus einem Interaktionsmodell<br />

für Web-Anwendungen. Für die Modellierung von prozesslastigen<br />

Benutzerschnittstellen ist dieser Ansatz besser geeignet als die Modellierung<br />

mit Zustandsübergangsdiagrammen oder die Verwendung von<br />

Navigationsmodellen.<br />

1.4 Gliederung der Arbeit<br />

Die Arbeit ist in drei Bereiche unterteilt: den Grundlagen, dem Konzept und den Anhängen.<br />

In den Grundlagen betrachten wir die Vorarbeiten, auf die unsere Arbeit aufbaut.<br />

Dazu werden in Kapitel 2 (Architekturen für Web-Anwendungen) zuerst die klassischen<br />

Elemente einer Web-Anwendung in Form einer Architekturübersicht beschrieben. Wir<br />

beschreiben die geschichtliche Entwicklung und definieren Architekturbegriffe, auf die<br />

wir uns in dieser Arbeit beziehen. Im darauf folgenden Kapitel 3 (Modellbasierte Entwicklung)<br />

betrachten wir die existierenden Entwurfsmethoden, um Web-Anwendungen<br />

zu erstellen. Detailliert stellen wir dort auch die Aufgabenmodelle vor, welche wir<br />

als zentrales Modell in unseren Ansatz integrieren wollen.<br />

In den Konzepten beschreiben wir unseren Lösungsansatz. Dazu werden wir im Kapitel<br />

4 (Überblick über den Lösungsansatz) die Elemente unseres Interaktionsmodells<br />

7


1 Einleitung<br />

als Gesamtübersicht vorstellen. Im Kapitel 5 (Aufgabenbasiertes Interaktionsmodell für<br />

Web-Anwendungen) wird dann, basierend auf den Eigenschaften existierender Aufgabenmodelle,<br />

ein Aufgabenmodell speziell für Web-Anwendungen hergeleitet. Das<br />

Aufgabenmodell wird nicht in andere Modelle umgewandelt, sondern um dialogspezifische<br />

Elemente in Kapitel 6 (Aufgabenbasierte Dialogfragmente für Web-Anwendungen)<br />

erweitert. Ergebnis ist ein Interaktionsmodell, welches Aufgaben-, Dialog- und<br />

Präsentationssichten bietet, und für das wir im Kapitel 7 (Architektur für das Laufzeitsystem)<br />

eine Laufzeitumgebung vorstellen. In den Kapiteln 8 (Bewertung der Ergebnisse)<br />

und 9 (Ausblick) fassen wir unser Konzept zusammen und beschreiben die noch<br />

offenen Punkte für eine Weiterentwicklung.<br />

Die Anhänge fassen unseren Lösungsansatz als Referenz zusammen. In Anhang A<br />

(Übersicht aller Interaktionselemente) werden die verfügbaren Interaktionselemente,<br />

die wir zur Beschreibung der Benutzerschnittstelle verwenden können, tabellarisch aufgeführt.<br />

In Anhang B (Beispiel- und Schemadefinition) definieren wir das Beispiel, das<br />

wir im Laufe dieser Arbeit aufgebaut haben, noch einmal als vollständiges XML-Dokument.<br />

Das zugrundeliegende XML-Schema ist dort ebenfalls aufgeführt.<br />

8


Kapitel 2<br />

Architekturen für Web-Anwendungen<br />

Inhalt<br />

2.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.2 Architekturkonzeption . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.3 Schichtenarchitekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.4 Schichtenarchitektur für Web-Anwendungen . . . . . . . . . . . . . . . 16<br />

2.5 Portalarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

2.6 Architekturmuster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

2.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

Die in dieser Arbeit vorgestellten Konzepte werden nicht den gesamten Entwicklungsprozess<br />

von Web-Anwendungen abdecken, sondern bestehende etablierte Vorgehensweisen<br />

erweitern. In diesem Kapitel werden die Architekturen von Web-Anwendungen<br />

vorgestellt, um ein in dieser Arbeit verwendetes Vokabular zu definieren und<br />

die Stellen, an denen für unseren Ansatz eine Erweiterung stattfinden kann, herauszuarbeiten.<br />

2.1 Motivation<br />

Web-Anwendungen machten seit ihrer Entstehung verschiedene Entwicklungsstufen<br />

durch. Booch [2005] beschreibt, wie eine solche Evolution ohne Architekturkonzeption<br />

aussieht:<br />

Eine global erreichbare Webseite zu erstellen ist einfach: HTML lernen, Webseite<br />

schreiben und einen Server finden. Wie wir gesehen haben, qualifizieren<br />

sich statische Webseiten nicht als Webanwendungen. Um dauerhaft Nutzer<br />

zu binden, müssen anspruchsvollere Ideen umgesetzt werden. Obwohl<br />

einfache Webseiten von einer einzelnen Person ohne Modellierung und mit<br />

einfachen Hilfsmitteln erstellt werden können, sollten komplexe Web-Anwendungen<br />

durch ein Team mit anspruchsvollen Modellierungswerkzeugen<br />

und einem definierten, wiederholbaren Prozess erstellt werden. Es ist anfangs<br />

einfach, eine bestehende, einfache Webseite zu nehmen und iterativ<br />

9


2 Architekturen für Web-Anwendungen<br />

an verschiedene Stellen „bewegliche Teile“ zu integrieren (die Programmiersprache<br />

Perl ist dafür ein berüchtigtes Beispiel), um daraus eine komplexe<br />

Web-Anwendung zu erstellen. Viele Webseiten sind heutzutage „Hochhäuser,<br />

die durch das Stapeln von Lehmhütten entstanden sind“. Wenn nur das<br />

Ergebnis betrachtet wird, ist dies nicht weiter bemerkenswert, allerdings<br />

sind solche Systeme mit jeder Änderung exponentiell schwieriger zu pflegen.<br />

Solche Systeme skalieren nicht mit den Anforderungen, die im Laufe<br />

der Zeit an eine Web-Anwendung gestellt werden. Ein Mehraufwand am<br />

Anfang bei der Konzeption kann eine Zeitersparnis in späteren Phasen der<br />

Entwicklung bringen.<br />

2.2 Architekturkonzeption<br />

2.2.1 Fortschritt der Softwareentwicklung<br />

Auf den ersten Rechnern, die Programme verarbeiten konnten, war Softwareentwicklung<br />

ein einfacher Prozess. Die Möglichkeiten und Kapazitäten waren begrenzt, die<br />

Hardware wurde in Assembler programmiert. Der Fortschritt bezüglich der Speicherkapazität<br />

der Hardware und die Entwicklung neuer Programmierparadigmen machten es<br />

aber notwendig, von der Implementierung eines Programms zu abstrahieren, um eine<br />

„höhere Sicht“ auf die Struktur eines Programms zu erhalten. Die Geschichte der<br />

Softwareentwicklung zeigt diese steigenden Abstraktionen in allen Bereichen ([Booch,<br />

2005]):<br />

Sprachen Assembler → Fortran/COBOL → Simula → C++ → Java<br />

Plattformen Hardware → BIOS → OS → Middleware → Domänen spezifisch<br />

Prozesse Wasserfall → Spiral → Iterativ → Agile<br />

Paradigmen Prozedural → Objekt orientiert → Service orientiert<br />

Werkzeuge Kommandozeile → Integrierte Umgebungen<br />

Die Softwarearchitektur betrachtet diese Abstraktionen. Doch bevor wir in die Softwarearchitektur<br />

einsteigen, werden wir zuerst den Architekturbegriff definieren.<br />

2.2.2 Architekturen<br />

Der Begriff der Architektur ist weit allgemeiner gefasst, als dass er nur auf Softwaresysteme<br />

anwendbar wäre. Ausgehend von dem klassischen Architekturbegriff im Bauwesen<br />

wird der Begriff auch für den strukturellen Aufbau einer Sache oder eines Konzepts<br />

verwendet 1 . Die Architektur setzt sich mit grundsätzlichen Überlegungen zum Aufbau<br />

1 zum Beispiel:<br />

Politik: politische Architektur Europas<br />

Ingenieurwesen: Architekturentwurf eines Flugzeuges<br />

Informatik: Rechnerarchitektur, Softwarearchitektur<br />

10


2.2 Architekturkonzeption<br />

komplexer Systeme auseinander (siehe [Winter, 2005]). Dabei geht es um die Identifizierung<br />

einzelner, möglichst unabhängiger Komponenten des Gesamtsystems und ihren<br />

Schnittstellen untereinander. Gute Architekturen zeichnen sich dadurch aus, dass<br />

sie möglichst einfach wiederverwendbar sind und den strukturellen Aufbau eindeutig<br />

beschreiben.<br />

Eine Zerlegung eines Konzeptes in abgegrenzte Komponenten und deren Schnittstellen<br />

bietet drei zentrale Vorteile (illustriert am Beispiel eines Großflugzeugprojektes):<br />

1. Sie dient der Komplexitätsreduzierung, weil eine große Aufgabe in überschaubare<br />

Teile zerlegt wird. Bei der Realisierung können die Entwickler sich auf das<br />

Erfüllen der Teilbereiche konzentrieren, der Architekturentwurf bietet trotzdem<br />

eine abstrakte Gesamtsicht auf das Projekt. Motoren sind unabhängig von der<br />

Flügelkonstruktion, wenn die Schnittstellen sauber definiert sind.<br />

2. Sie dient der Skalierung des Projektentwurfs, weil mehrere Entwickler parallel an<br />

verschiedenen Komponenten arbeiten können. Es besteht die Möglichkeit, Spezialisten<br />

auszubilden, die sich nur auf Teilkomponenten konzentrieren. Motoringenieure<br />

haben andere Aufgaben und durchlaufen andere Ausbildungen als<br />

Aerodynamikspezialisten.<br />

3. Sie dient der Modularisierung, weil einzelne Komponenten austauschbar sind, ohne<br />

andere Komponenten zu beeinflussen. Bei einem Flugzeug besteht die Möglichkeit,<br />

aus einer Auswahl von Motoren die passende Variante für den jeweiligen<br />

Einsatzzweck auszuwählen.<br />

2.2.3 Softwarearchitektur<br />

Übertragen auf die Softwarearchitektur 2 bedeutet dies, ein Softwaresystem in Bausteine<br />

zu zerlegen, die dem Prinzip der losen Kopplung, dem Prinzip der hohen Kohäsion<br />

und dem Modularitätsprinzip folgen (siehe [Vogel u. a., 2005], [Posch u. a., 2004]).<br />

Die Kopplung beschreibt den Grad der Abhängigkeiten zwischen den Bausteinen in<br />

einem Softwaresystem. Kopplungen entstehen beispielsweise durch die Verwendung<br />

von Schnittstellen anderer Bausteine oder durch Vererbungshierarchien, in denen von<br />

Klassen anderer Bausteine abgeleitet wird. Das Prinzip der losen Kopplung besagt, die<br />

Abhängigkeiten zwischen den Bausteinen gering zu halten sind, um die Komplexität<br />

des Gesamtsystems zu reduzieren.<br />

2 Der erste formale Standard der Softwarearchitektur „ANSI/IEEE 1471-2000: Recommended Practice for Architecture<br />

Description of Software-Intensive Systems„ (siehe [IEEE, 2000]) definiert die Architektur von Softwaresystemen<br />

als . . .<br />

. . . the fundamental organization of a system embodied in its components, their relationships to<br />

each other and to the environment and the principles guiding its design and evolution, where:<br />

fundamental organization means essential, unifying concepts and principles<br />

system includes application, system, platform, system of systems, enterprise, . . .<br />

environment is the developmental, operational, programmatic, . . . context of the system<br />

Wir werden die Softwarearchitektur aber nur in den für Web-Anwendungen relevanten Teilen behandeln.<br />

11


2 Architekturen für Web-Anwendungen<br />

hohe Kohäsion, geringe Kopplung<br />

Baustein 1 Baustein 2<br />

geringe Kohäsion, hohe Kopplung<br />

Baustein 1 Baustein 2<br />

Abbildung 2.1: Beispiel für eine gute Softwarearchitektur (hohe Kohäsion, geringe Kopplung) und<br />

eine schlechte Softwarearchitekur (geringe Kohäsion, hohe Kopplung)<br />

Die Kohäsion beschreibt den Grad der Abhängigkeiten der Elemente innerhalb eines<br />

Bausteins. Das Prinzip der hohen Kohäsion besagt, dass ein Baustein möglichst viele<br />

interne Abhängigkeiten besitzen sollte, damit im Rahmen der Abstraktion von dem<br />

Softwaresystem auch von einem Baustein mit eindeutiger Funktionalität gesprochen<br />

werden kann. Wenn z. B. innerhalb eines Bausteins zwei (fast) disjunkte Abhängigkeitsgraphen<br />

existieren, spricht vieles dafür, dass es sich bei dem Baustein in Wirklichkeit um<br />

zwei Bausteine handelt und diese auch entsprechend modelliert werden sollten.<br />

Abbildung 2.1 zeigt ein abstraktes Beispiel, das die Prinzipien verdeutlichen soll. Auf<br />

der linken Seite ist eine gute Softwarearchitektur abgebildet, die Bausteine besitzen<br />

hohe interne Abhängigkeiten und niedrige externe Abhängigkeiten. Auf der rechten<br />

Seite ist eine schlechte Softwarearchitektur abgebildet, die Bausteine besitzen viele<br />

Abhängigkeiten untereinander. Intern existieren disjunkte Elementmengen, durch eine<br />

weitere Verfeinerung der zwei Bausteine in vier Bausteine könnten die Grade der<br />

Kopplung und der Kohäsion verbessert werden.<br />

2.2.4 Modularitätsprinzip<br />

Das Modularitätsprinzip besagt, dass die Bausteine sowohl den Kopplungs- und Kohäsionsprinzipien<br />

folgen, als auch eindeutig definierte Schnittstellen anbieten sollten, um<br />

eine leichte Austauschbarkeit der modularisierten Bausteine zu gewährleisten.<br />

Das Modularitätsprinzip zu erfüllen ist das Ziel, das eine gute Softwarearchitektur<br />

anstreben sollte. Wir werden in dieser Arbeit das Modularitätsprinzip auch für die Benutzerschnittstellen<br />

für Web-Anwendungen aufgreifen, um Dialogabläufe modular zu<br />

gestalten (z. B. hinzufügen neuer Dialoge in einem bestehenden Dialogentwurf, Wiederverwendung<br />

von Dialogen aus anderen Entwürfen).<br />

2.2.5 Zusammenfassung<br />

Die Beachtung der vorgestellten Prinzipien beim Entwurf erlaubt es, von einem Problem<br />

abstrahierte, wiederverwendbare und auf andere Problembereiche übertragbare<br />

12


2.3 Schichtenarchitekturen<br />

Softwarearchitekturen zu erschaffen. Nachdem wir die Erwartungen an eine gute Softwarearchitektur<br />

vorgestellt haben, werden wir in den nächsten Abschnitten etablierte<br />

Architekturen für Web-Anwendungen vorstellen. Wie wir sehen werden, können auf<br />

den verschiedenen Abstraktionsebenen unterschiedliche Architekturen verwendet werden,<br />

die sich zu einer Gesamtarchitektur kombinieren lassen.<br />

2.3 Schichtenarchitekturen<br />

Schichtenarchitekturen werden verwendet, um komplexe Anwendungen in logische<br />

Schichten 3 zu unterteilen, welche nur über definierte Schnittstellen mit den untergeordneten<br />

Schichten kommunizieren können. Dies erlaubt eine Reduktion der Abhängigkeiten<br />

innerhalb der Anwendung und erhöht durch Kapselung die Möglichkeiten<br />

der Modularisierung. Die Schichtenarchitektur beschreibt klassischerweise eine vertikale<br />

Unterteilung der Serveranwendung, wobei eine Anfrage alle Schichten der Anwendung<br />

von oben nach unten und wieder zurück durchquert.<br />

Die folgenden Abschnitte zeigen den Zusammenhang zu Client/Server Systemen auf<br />

und beschreiben die unterschiedlichen Ausprägungen der Schichtenarchitektur bis hin<br />

zur Drei-Schichten-Architektur, auf die wir im Verlauf dieser Arbeit zurückgreifen werden.<br />

2.3.1 Ein-Schicht-Architektur<br />

Terminal<br />

Server<br />

Abbildung 2.2:<br />

Ein-Schicht-Architektur<br />

In den Anfängen der IT-Entwicklung gab es einfache Terminal/Server-Systeme,<br />

bei denen auf Mainframes ein Server<br />

eingesetzt wurde, welcher über eine direkte Verbindung<br />

mit einem Terminal kommunizierte. Diese Konzeption<br />

nennt sich Ein-Schicht-Architektur (siehe Abbildung<br />

2.2).<br />

Obwohl die Trennung von Terminal und Server mehrere<br />

Ebenen nahelegt, ist die Verbindung sehr statisch und<br />

lässt z. B. nur ein Terminal zu, über das der Server gesteuert<br />

wird. Die Anwendungen liefen im Batch-Betrieb ohne<br />

Benutzeroberfläche auf dem Server und wurden über<br />

externe Kommandos der Eingabekonsole gesteuert, es existierte nur eine (implizite)<br />

Modellebene.<br />

2.3.2 Zwei-Schichten-Architektur<br />

Die Definition des Schichtenbegriffs ist eng an den Aufstieg der Client/Server-Systeme<br />

Anfang der 90er Jahre gekoppelt. Aus diesem Grund werden wir kurz die Entstehung<br />

3 engl.:layers. Der englische Begriff tiers wird oft synonym verwendet, legt aber auch eine physische Trennung<br />

nahe, bei dem verschiedene tiers auf verschiedenen Rechnern im Netzwerk verteilt werden können. Diese Unterscheidung<br />

geht uns zu weit, weshalb wir den Begriff layer im Sinne von logische Schicht bevorzugen.<br />

13


2 Architekturen für Web-Anwendungen<br />

des Client/Server-Begriffs skizzieren, um dann den Einfluss auf die Schichtenarchitektur<br />

zu erklären.<br />

Client/Server Hintergrund<br />

Das Client/Server Paradigma (siehe [Comer, 2006]) entstand ursprünglich im Datenbankumfeld,<br />

in dem eine Workstation über ein Netzwerk mit einem SQL-Datenbankserver<br />

kommunizierte.<br />

In der gröbsten Vereinfachung der Client/Server Architektur bietet ein Server-System<br />

(Dienstleister) einem Client-System (Dienstnutzer) Informationen an. Spezieller beschreibt<br />

eine Client/Server Architektur ein im Allgemeinen netzwerkfähiges System, bei<br />

dem ein Client den Kontakt zu einem separaten Server initiiert, um einen bestimmten<br />

Dienst zu verwenden 4 . Der Client steht dem Server als Anfragender gegenüber.<br />

Seitdem sich in den letzten Jahren komplexe Informationssysteme im Umfeld des<br />

Internets entwickelt haben, hat das Client/Server Konzept als Applikationsarchitektur<br />

ebenfalls an Bedeutung gewonnen. Im Bereich des World Wide Webs basieren fast alle<br />

Dienste auf der Client/Server Architektur. Ein Dienst wird als Server im Netzwerk gestartet<br />

und kann Anfragen von Clients beantworten. Falls dieser Server seinerseits Informationen<br />

von anderen Servern anfordern will, wird er zum Client, die Bezeichnungen<br />

identifizieren also nur logisch die Kommunikationspartner.<br />

Client/Server als Schichtenarchitektur<br />

Clientschicht<br />

(Präsentation)<br />

Serverschicht<br />

(Daten)<br />

Abbildung 2.3:<br />

Zwei-Schichten-Architektur<br />

In einer Zwei-Schichten-Architektur sind Client und Server<br />

getrennte Schichten, einer Schicht für die grafische<br />

Benutzerschnittstelle und einer Datenschicht (siehe Abbildung<br />

2.3). Die Zwei-Schichten-Architektur setzte sich<br />

gegenüber der Ein-Schicht-Architektur aufgrund der Verbreitung<br />

von lokalen Netzen und der damit bedingten<br />

geringeren Latenzzeiten bei der Kommunikation Anfang<br />

der 90er Jahre durch. Die grafischen Benutzerschnittstellen<br />

konnten Daten ausgeben und relationale Operationen<br />

auf Datenbankservern durchführen.<br />

Probleme gab es aber, wenn z. B. Berechnungen durchgeführt oder Eingaben validiert<br />

werden sollten. Dies konnte entweder in der grafischen Benutzerschnittstelle geschehen<br />

(Fat Client) oder im Datenbankserver als Stored-Procedure abgelegt werden (Thin<br />

Client). Beides hatte Nachteile: Benutzerschnittstellen waren meist seitenbasiert, häufig<br />

auftretende Berechnungen waren redundant in mehreren Seiten gespeichert. Stored-Procedures<br />

als Ablageort für Berechnungslogik in der Datenbank waren nicht Teil<br />

des SQL Standards sondern proprietäre Erweiterungen der Datenbankhersteller, viele<br />

Nutzer entschieden sich aufgrund fehlender Wechselmöglichkeit auf Produkte anderer<br />

Hersteller gegen diese Möglichkeit.<br />

4 Ausprägungen der Schichtenarchitekturen für monolithische Anwendungen, die nur auf dem Rechner des<br />

Benutzers ausgeführt werden, werden hier aufgrund des Fokus auf Web-Anwendungen nicht weiter betrachtet.<br />

14


2.3.3 Drei-Schichten-Architektur<br />

Präsentationsschicht<br />

Anwendungsschicht<br />

Datenschicht<br />

Abbildung 2.4:<br />

Drei-Schichten-Architektur<br />

2.3 Schichtenarchitekturen<br />

Kurze Zeit, nachdem sich Client/Server Systeme etabliert<br />

hatten, wurden objektorientierte Programmiersprachen<br />

populär. Mit diesen ließen sich nicht redundante Berechnungen<br />

durchführen, die zusätzlich unabhängig vom Datenbanksystem<br />

sind. Die Drei-Schichten-Architektur (siehe<br />

Abbildung 2.4) präzisiert deshalb die Zwei-Schichten-Architektur,<br />

indem eine weitere Schicht, die “Anwendungsschicht”,<br />

hinzugefügt wurde. Die objektorientierten Programmiersprachen<br />

sind allerdings nicht der alleinige Beweggrund,<br />

dass sich die Drei-Schichten-Architektur durchgesetzt<br />

hat. Erst die rasche Verbreitung des Webs machte<br />

es notwendig, Anwendungslogik auf dem Server auszu-<br />

führen; Webbrowser waren nicht in der Lage, Berechnungen oder Validierungen durchzuführen.<br />

Die unterste Schicht bleibt weiterhin die Datenschicht (englisch: data source layer 5 )<br />

mit den Schnittstellen für die Datenbankabfragen. In der mittleren Schicht entsteht<br />

eine Anwendungsschicht (englisch: application layer 6 ), die die Anwendung von der Datenhaltung<br />

trennt und als eigenständige Schicht die Applikation repräsentiert. Oben<br />

schließt sich die Präsentationsschicht (englisch: presentation layer) an, die nur für die<br />

Präsentation der Daten zuständig ist. Bei Web-Anwendungen wird diese Präsentation<br />

auf dem Server als HTML-Beschreibung aufbereitet und vom Client im Webbrowser dargestellt.<br />

Der Webbrowser ist ein generischer Thin Client.<br />

Die Verwendung einer Drei-Schichten-Architekturen bietet folgende Vorteile im Vergleich<br />

zu einer Zwei-Schichten-Architektur:<br />

Die Benutzerschnittstelle ist von der Datenhaltung getrennt. Beide Komponenten<br />

können getrennt entwickelt und neuen Bedürfnissen angepasst werden. Die<br />

Applikation verknüpft beide Teile und ist in einer eigenen Schicht abstrahiert. Verbunden<br />

werden die Schichten über definierte Schnittstellen.<br />

Die Flaschenhälse im Netzwerk werden minimiert, es werden nur Daten an die<br />

nächste Schicht weitergeleitet, die sie für das Erfüllen ihrer Funktion benötigen.<br />

Vorher, als die Applikationen im Client liefen, konnten eventuell mehr Daten übertragen<br />

worden sein, als für die Darstellung wirklich notwendig waren.<br />

Falls die Applikation sich ändert, muss nur an dem Server die Änderung eingespielt<br />

werden. Bei einer Zwei-Schichten-Architektur müssen im ungünstigsten Fall (Fat<br />

Clients) alle Clients ersetzt werden.<br />

Der Client wird von der Datenbank abstrahiert. Er muss nicht Ort und Art der<br />

gespeicherten Daten kennen, sondern kann über eine Schnittstelle Daten mit höherer<br />

Abstraktion abrufen.<br />

5 alternativ: data access, persistence<br />

6 alternativ:Geschäftslogik, Domäne, domain, business logic<br />

15


2 Architekturen für Web-Anwendungen<br />

Die Applikationsentwicklung ist nicht mehr auf die vom Datenbankhersteller vorgegebene<br />

Sprache beschränkt, sondern kann in einer beliebigen Sprache erfolgen.<br />

Voraussetzung dafür ist eine gemeinsame Schnittstelle, die sowohl die Datenbank<br />

als auch die gewünschte Programmiersprache unterstützt.<br />

2.3.4 Mehrschichten-Architektur<br />

Basierend auf der Drei-Schichten-Architektur wurden verschiedene weitere Schichten<br />

identifiziert, die allerdings nicht den allgemeingültigen Charakter der drei Hauptschichten<br />

aufweisen und sich nicht in diesem Maße als Schichtenarchitektur durchgesetzt haben.<br />

In [Brown u. a., 2001] werden die zwei möglichen Bindeschichten der Drei-Schichten-<br />

Architektur beschrieben: Die data mapping Schicht zwischen der Anwendungs- und der<br />

Datenschicht enthält die Methoden zum Abbilden der objektorientierten Daten der Anwendungsschicht<br />

auf die relationalen Daten der Datenschicht 7 . Die controller Schicht<br />

zwischen der Präsentations- und Anwendungsschicht enthält die für die Präsentation<br />

notwendigen Kontrollstrukturen. Dies entspricht dem Controller 8 im MVC-Architekturmuster<br />

(siehe Abschnitt 2.6.1).<br />

In [Alur u. a., 2001] wird die Präsentationsschicht in zwei Schichten aufgeteilt: Die<br />

client presentation Schicht, in der client-seitige Präsentation modelliert wird (z. B. Darstellung<br />

mit Javascript), und die server presentation Schicht, in der die auf dem Server<br />

generierte Präsentation modelliert wird (z. B. HTML-Generatoren).<br />

2.3.5 Zusammenfassung<br />

Wie wir gezeigt haben, hat sich die heute verbreitete Drei-Schichten-Architektur aus<br />

den geschichtlichen Zwängen und Notwendigkeiten entwickelt. Ob und wie sie sich<br />

weiter entwickeln wird, ist jetzt noch nicht abzusehen. Das Hinzufügen weiterer Schichten<br />

wird sich wahrscheinlich nicht durchsetzen, weil es dem obersten Ziel einer Architekturkonzeption<br />

– den Überblick über das Gesamtsystem zu erlangen und Komplexität<br />

zu reduzieren – zuwiderläuft. Vielmehr wird es wohl bei den drei Schichten bleiben und<br />

in weiteren Verfeinerungsschritten der Architekturkonzeption können Architekturmuster<br />

in die Schichtenarchitektur integriert werden.<br />

Im Folgenden werden wir erläutern, weshalb sich die Drei-Schichten-Architektur gerade<br />

für die Konzeption von Web-Anwendungen eignet und Architekturmuster vorstellen,<br />

die für Web-Anwendungen sinnvoll verwendbar sind.<br />

2.4 Schichtenarchitektur für Web-Anwendungen<br />

Für Web-Anwendungen wird in den meisten Fällen die Drei-Schichten-Architektur verwendet.<br />

Conallen [2000] beschreibt dies als kanonische Architektur, nach der sich, in<br />

7 objekt/relationales Mapping [Fowler, 2003]<br />

8 Model ist die Anwendungsschicht, View ist die Präsentationsschicht<br />

16


Webbrowser<br />

2.4 Schichtenarchitektur für Web-Anwendungen<br />

Präsentationsschicht Anwendungsschicht<br />

Internet<br />

Webserver<br />

Applikationsserver<br />

Client-Schicht Server-Schicht<br />

Datenschicht<br />

physische physische<br />

Daten<br />

Abbildung 2.5: Referenzarchitektur für Web-Anwendungen nach [Conallen, 2000]<br />

dieser groben Abstraktion, fast alle Web-Anwendungen aufgliedern lassen (siehe Abbildung<br />

2.5). Die Präsentationsschicht wird durch den Webserver und den Webbrowser<br />

repräsentiert. Die Anwendungsschicht findet ihre Realisierung im Applikationsserver.<br />

Die Datenschicht wird in Form einer relationaler Datenbank umgesetzt. Wie in der Abbildung<br />

deutlich wird, haben sich die Schichten im Vergleich zur Zwei-Schichten-Architektur<br />

verschoben, von den physischen Schichten Client und Server zu logischen Schichten,<br />

wobei die Präsentationsschicht sich zum Teil in der Client- und in der Serverschicht<br />

wiederfindet.<br />

2.4.1 Beispiel<br />

Am Beispiel eines Buchversandhändlers sollen die Schichten erläutert werden. In der Datenschicht<br />

sind die verfügbaren Bücher, die Autoren, die Kunden, die Bestellpositionen,<br />

etc . . . strukturiert abgelegt. Nur die Anwendungsschicht darf auf die Datenschicht zugreifen<br />

und bietet Dienste nach außen an. Diese Dienste sind von der Datenschicht abstrahiert<br />

und setzen im Regelfall Anwendungsfälle um, z. B. nach Büchern suchen oder<br />

Buch bestellen. Die Anwendungsschicht ist auch die geeignete Stelle um Querschnittsthemen<br />

umzusetzen, z. B. zur Berechtigungsprüfung, zur Definition von Transaktionsgrenzen<br />

oder zum Erstellen von Log-Dateien. Die Präsentationsschicht regelt den Dialog<br />

zwischen Benutzer und Applikation, nimmt also Eingaben des Benutzers entgegen, erzeugt<br />

daraus Aufrufe in die Applikationsschicht und wandelt die Rückgaben der Applikation<br />

in eine für den Benutzer auswertbare Form (bei Web-Anwendungen fast immer<br />

HTML) zurück.<br />

17


2 Architekturen für Web-Anwendungen<br />

Client-Schicht Präsentationsschicht<br />

Anwendungsschicht<br />

Browser<br />

Browser<br />

(asynchrones<br />

Javascript)<br />

Websevice<br />

Konsument<br />

Desktop<br />

Anwendung<br />

Präsentationskontrolle<br />

Webservice<br />

Anbieter<br />

Präsentationslogik<br />

Webserver<br />

Anwendungsimplementation<br />

SQL<br />

Treiber<br />

Cache<br />

Http<br />

Zugriff<br />

Smtp<br />

Zugriff<br />

Abbildung 2.6: Detaillierte Referenzarchitektur für Web-Anwendungen<br />

2.4.2 Web-Applikationsserver<br />

ORM<br />

Datenschicht<br />

Datenbank<br />

Dateisystem<br />

Externe<br />

Webservices<br />

Emailsystem<br />

In diesem Abschnitt wollen wir einen detaillierteren Blick auf die Architektur von Web-<br />

Anwendungen werfen (siehe Bild 2.6). Im Mittelpunkt steht die Anwendungsschicht,<br />

welche die fachlichen Anforderungen der Web-Anwendung umsetzt. Um häufig verwendete<br />

Funktionen nicht selbst umsetzen zu müssen, laufen Anwendungen in einem<br />

Applikationsserver, welcher diese Funktionen bereitstellt. Im Bild sind Integrationsdienste<br />

angedeutet, die z. B. den Zugriff auf Datenbanken, Webservices und Dateisystemen<br />

abstrahieren. Weitere Vorteile der Applikationsserver sind die Unterstützung<br />

der oben genannten Querschnittsthemen (Transaktionen und Logging) und die implizite<br />

Skalierbarkeit der Anwendung (durch Clustering der Server).<br />

Die Anwendung bietet eine definierte Schnittstelle nach außen, auf die die Präsentationsschicht<br />

zugreifen kann. Im einfachsten Fall über eine rein client-seitige Anwendung,<br />

die direkt auf diese Schnittstelle zugreift. Die Schnittstelle kann auch als Webservice<br />

nach außen freigegeben werden, dazu müssen die Dienste der Anwendungsschnittstelle<br />

über ein XML-Format ansprechbar sein (Webservice Anbieter).<br />

Für Web-Anwendungen — bei denen der Client ein Webbrowser ist — muss der Applikationsserver<br />

den Dialog verwalten (Präsentationskontrolle) und die Daten der Anwendung<br />

auf die Präsentation übertragen (Präsentationslogik). Nicht immer kann einer<br />

Web-Seite genau ein Anwendungsaufruf zugeordnet werden; manchmal kann daraus<br />

ein Prozess entstehen, der in der Präsentationsschicht verwaltet werden muss. Zum Beispiel<br />

müssen für einen Bestellvorgang erst in mehreren Schritten die Adresseingabe<br />

und die Zahlungsmodalitäten eingegeben werden, um dann im letzten Schritt die Bestellung<br />

endgültig in die Anwendungsschicht weiterzuleiten.<br />

18


2.5 Portalarchitektur<br />

Wie der Dialog definiert wird und wie die Anwendungs- und die Benutzerschnittstelle<br />

in den Dialog integriert werden, wird im Zentrum dieser Arbeit stehen.<br />

2.5 Portalarchitektur<br />

In einem Web-Applikationsserver können mehrere Anwendungen parallel verwendet<br />

werden. Jede Anwendung besitzt allerdings eine eigene Web-Schnittstelle, eine Integration<br />

der Anwendungen in eine konsistente Oberfläche ist nur mithilfe weiterer Basisdienste<br />

möglich. Diese erweitern den Web-Applikationsserver zu einem Portalserver,<br />

indem sie nicht nur die visuelle Integration erlauben, sondern auch z. B. die Benutzerverwaltung<br />

oder die Suche über dem Datenbestand aller Anwendungen zentralisieren.<br />

Für unseren Ansatz verfolgen wir ähnliche Ziele wie Portalserver: Wir wollen verschiedene<br />

Dialoge in eine konsistente Oberfläche integrieren. Der Hauptunterschied zu Portalservern<br />

liegt in unserem Fokus auf der Präsentationsschicht. Während die Portalanwendungen<br />

klassisch die Dialoge als Zustandsübergangsautomaten umsetzen, werden<br />

wir den neuen Ansatz der zur Laufzeit ausgeführten Aufgabenmodelle verwenden. Abstriche<br />

machen wir allerdings bei den Basisdiensten der Datenschicht (z. B. die Suche),<br />

welche wir im Kontext dieser Arbeit nicht genauer betrachten werden.<br />

Trotz dieser Einschränkung sind einige Basisdienste auch für das Ausführen von Dialogen<br />

und damit für unseren Ansatz sinnvoll verwendbar. Zu diesem Zweck stellen wir<br />

erst eine allgemeine Referenzarchitektur für Portalserver vor und betrachten dann die<br />

für uns verwendbaren Basisdienste genauer.<br />

2.5.1 Referenzarchitektur Portalserver<br />

Eine Referenzarchitektur für Portalserver ist in Abbildung 2.7 dargestellt (nach [Kirchhof<br />

u. a., 2004]). Die Portalarchitektur basiert auf der Applikationsserverarchitektur aus<br />

Abbildung 2.6, erweitert um portalspezifische Basisdienste. Die anderen Schichten neben<br />

der Anwendungsschicht sind zum besseren Verständnis ausgeblendet, aber unverändert<br />

vorhanden. Die Anwendungsschnittstelle ist jetzt nicht mehr von außen erreichbar,<br />

die Anwendung erhält stattdessen über eine definierte Portalschnittstelle Zugriff<br />

auf die Portal-Basisdienste. Die Anwendung wird nicht mehr aus der Präsentationsschicht<br />

direkt angesprochen, sondern jede Anfrage erreicht erst die präsentationsspezifischen<br />

Basisdienste, welche dann entscheiden, wo welche Portalanwendung in die<br />

zurückgelieferte Seite integriert werden soll.<br />

Die Liste der aufgeführten Basisdienste ist eine lose Sammlung der Dienste mit hohem<br />

Querschnittsanteil, die also sinnvollerweise zentral verwaltet werden und auf die<br />

alle Portalanwendungen zugreifen können. Auf die weiß hervorgehobenen Basisdienste,<br />

welche eine Relevanz für die Präsentation haben, werden wir in den nächsten Abschnitten<br />

eingehen. An dieser Stelle wird nur kurz auf die verbleibenden Dienste eingegangen.<br />

Unter Content Management versteht man das Verwalten von Inhalten, die in der<br />

Portalanwendung Verwendung finden. Im Beispiel des Buchversandhändlers wäre z. B.<br />

die Pflege des Buchbestandes eine typische Funktion des Content Managements. Die<br />

19


2 Architekturen für Web-Anwendungen<br />

Client-Schicht<br />

Präsentationsschicht<br />

Portal Basisdienste<br />

Layout Management<br />

Struktur Management<br />

Content Management<br />

Benutzerverwaltung<br />

Suche<br />

Prozessunterstützung<br />

Single-Sign-On<br />

weitere Module<br />

Anwendungsschicht<br />

Portalschnittstelle<br />

Anwendungsverwaltung<br />

individuelle Anwendung<br />

individuelle Anwendung<br />

individuelle Anwendung<br />

individuelle Anwendung<br />

individuelle Anwendung<br />

Abbildung 2.7: Detaillierte Referenzarchitektur für Portal-Anwendungen<br />

Abbildung des Lebenszyklus eines Inhaltsobjektes und die Versionierung der Inhalte<br />

erzeugen eine Komplexität, die dank der Realisierung als Basiskomponente nicht für<br />

jede Portalanwendung erneut umgesetzt werden muss.<br />

Die Portalanwendungen sind unabhängig voneinander und haben nur Zugriff auf<br />

ihren eigenen Datenbestand. Um dem Benutzer die Möglichkeit zu bieten, über alle<br />

Inhalte des Portalservers zu suchen (zentrale Suchmaske in der Oberfläche), muss der<br />

Basisdienst Suche verwendet werden. Dieser kann die Daten der Portalanwendungen<br />

indizieren, eigenständig die Suche durchführen und auf die entsprechende Portalanwendung<br />

verweisen, wenn der Benutzer ein Suchergebnis ausgewählt hat.<br />

Diese beiden Basisdienste werden wir nicht weiter betrachten, weil sie hauptsächlich<br />

die Datenschicht betreffen und damit als Basisdienst in unserem Ansatz keine Verwendung<br />

finden. In der umgekehrten Richtung können komplexe Dialoge für das Content<br />

Management oder die Suche natürlich auch mit unserem Ansatz umgesetzt werden.<br />

2.5.2 Basisdienste mit Relevanz für unseren Ansatz<br />

Die im Folgenden aufgeführten Basisdienste sind für unseren Ansatz interessant, weil<br />

sie Funktionalität zur Verfügung stellen, auf die wir uns bei der Modellierung beziehen<br />

20<br />

Integrationsdienste<br />

Datenschicht


2.5 Portalarchitektur<br />

und die wir zur Laufzeit verwenden können. Wir wollen uns vom spezifischen Portal<br />

lösen und die Dienste als allgemeine Komponenten einer Architektur vorstellen. Die<br />

Anwendungen, die diese Dienste nutzen, können dabei Portalanwendungen oder Dialoge<br />

aus unserem Ansatz sein.<br />

Anwendungsverwaltung<br />

Anwendungen sollten unabhängig voneinander im Applikationsserver ausgeführt und<br />

verwaltet werden. Anwendungen besitzen einen Lebenszyklus, der den aktuellen Zustand<br />

der Anwendung widerspiegelt, mögliche Transitionen im Lebenszyklus sind zum<br />

Beispiel:<br />

installieren Macht die Anwendung im Applikationsserver verfügbar.<br />

pausieren Keine neue Instanzen der Anwendung erlauben.<br />

aktivieren Pausierte Anwendung wieder fortsetzen.<br />

entfernen Entfernt eine Anwendung aus dem Applikationsserver.<br />

Weil die Anwendungen unabhängig voneinander ausgeführt werden, sollten diese Aktionen<br />

für eine Anwendung auch im laufenden Betrieb des Applikationsservers möglich<br />

sein, um einen reibungslosen Ablauf der restlichen Anwendungen zu gewährleisten.<br />

Benutzerverwaltung<br />

Benutzer sollten zentral verwaltet werden, damit Benutzerinformation (z. B. Vorname,<br />

Emailadresse, etc . . . ) konsistent abgefragt werden können und nicht jede Anwendung<br />

eine eigene redundante Benutzerverwaltung umsetzen muss. Auch wird häufig ein externer<br />

Verzeichnisdienst mit Benutzerinformationen angeschlossen, die Benutzerverwaltung<br />

dient dann als Abstraktionsschnittstelle für die Anwendung zu diesen Diensten.<br />

Die Benutzerverwaltung nimmt auch die Rolle des zentralen Authentifizierungsdienstes<br />

wahr, mit ihr lässt sich die Identität eines Benutzers durch die Anwendung überprüfen<br />

9 .<br />

Rechteverwaltung<br />

Neben der Authentifizierung sollte auch die Autorisierung der Benutzer (der Zugriffsschutz<br />

eines Benutzers auf eine Ressource) zentral verwaltet werden. Zu diesem Zweck<br />

hat sich der rollenbasierte Zugriffsschutz [INCITS, 2004] etabliert, bei dem zentral Zugriffsrollen<br />

verwaltet werden, die den Zugriff auf die Ressourcen bestimmen. Die Rechteverwaltung<br />

kann dann, unabhängig von den Anwendungen, die Rollen den Benutzern<br />

zuordnen.<br />

9 Im einfachsten Fall über Name/Passwort-Kombinationen, oder aber auch über biometrische Verfahren<br />

21


2 Architekturen für Web-Anwendungen<br />

Single-Sign-On<br />

Einmal authentifiziert, sollte der Benutzer für alle Anwendungen innerhalb des Applikationsservers<br />

identifizierbar sein, bis der Benutzer sich explizit wieder abmeldet. Als<br />

Basisdienst erlaubt dies auch die automatische Übernahme einer bereits getätigten Authentifizierung<br />

von einer externen Quelle, z. B. einer Anmeldung am Betriebssystem.<br />

Prozessunterstützung<br />

Es existieren eine Vielzahl von Ansätzen [Keller u. a., 1992; OMG, 2008], um Prozesse<br />

und Abläufe innerhalb von Anwendungen abzubilden. Prozesse können in verschiedenen<br />

Schichten der Anwendung Verwendung finden, z. B. in der Anwendungsschicht als<br />

Geschäftsprozess oder in der Präsentationsschicht als Dialog.<br />

Als Basisdienst kann die Prozessunterstützung allen Anwendungen eine einheitliche<br />

Schnittstelle bieten. Auch die Integration von Prozessen, z. B. eine Anwendung als Subprozess<br />

einer anderen Anwendung, ist damit möglich.<br />

Layoutmanagement<br />

Wenn mehrere Anwendungen dargestellt werden, sollten diese vom äußeren Erscheinungsbild<br />

10 zusammenpassen. Um dies zu erreichen, sollten die Anwendungen nicht direkt<br />

die Benutzeroberfläche generieren, sondern die Oberfläche abstrakt beschreiben.<br />

Das Layoutmanagement erzeugt dann für eine Anwendung erst zur Laufzeit aus der<br />

abstrakten Beschreibung eine endgültige Benutzeroberfläche, die einem einheitlichen<br />

Stil folgt.<br />

Außer dem Generieren der Benutzeroberflächen einzelner Anwendungen sorgt das<br />

Layoutmanagement auch für die Integration mehrerer Anwendungen in eine kombinierte<br />

Oberfläche. Dies kann nur zentral geschehen und erlaubt dem Benutzer, übergangslos<br />

verschiedene Anwendungen zu benutzen.<br />

2.5.3 Zusammenfassung und Ausblick<br />

In diesem Abschnitt haben wir – auf einer allgemeinen Ebene – die notwendigen Basisdienste<br />

beschrieben, um mehrere Anwendungen parallel auf einem Applikationsserver<br />

und in einer kombinierten Benutzeroberfläche auszuführen.<br />

Im Laufe dieser Arbeit werden wir aufgabenbasierte Dialoge definieren, welche als<br />

einzelne Anwendungen betrachtet werden können. Wir werden die hier beschriebenen<br />

Basisdienste adaptieren und in unsere Architektur aufnehmen, damit z. B. das Aufgabenmodell<br />

mit Zugriffsrollen der Rechteverwaltung ausgestattet werden kann, oder<br />

damit eine Benutzeroberfläche aus der Menge der abstrakten Oberflächenelemente<br />

des Layoutmanagements erstellt werden kann.<br />

10 engl.:look and feel<br />

22


2.6 Architekturmuster<br />

2.6 Architekturmuster<br />

Während die Schichtenarchitektur einen abstrahierten Blick auf das Gesamtsystem beschreibt,<br />

bieten sogenannte Architekturmuster generische Lösungen für die Modellierung<br />

eines Teilbereiches einer Anwendung. Diese Lösungen sind kombinierbar, sodass<br />

in einer Anwendung eine Vielzahl an Architekturmuster verwendet werden können.<br />

Auch schließen die Architekturmuster und die Schichtenarchitektur sich nicht gegenseitig<br />

aus, die meisten Architekturmuster lassen sich einer Schicht zuordnen und bieten<br />

damit Lösungen für einen dedizierten Teil einer Anwendung.<br />

Booch [2005] beschreibt die Erkenntnis, dass „gut-strukturierte“ Anwendungen inhärente<br />

und generische Entwurfsmuster aufweisen, als eine der wichtigsten Fortschritte<br />

in der Softwareentwicklung der letzten Jahre. In der klassischen Definition, nach dem<br />

Architekten Christopher Alexander [Alexander u. a., 1977], ist ein Muster eine Lösung<br />

für ein Problem in einem festgelegten Kontext. Ein Muster beschreibt auf wiederverwendbare<br />

Weise das empirische Wissen einer Domäne.<br />

Der Begriff Entwurfsmuster 11 wurde geprägt von [Gamma u. a., 1995], welche für objektorientierte<br />

Anwendungen einen Satz von wiederverwendbaren Mustern beschrieben.<br />

Die einzelnen Muster können meist nur auf einen kleinen Teil der Anwendung<br />

angewandt werden, bleiben dadurch aber kompakt und übertragbar. Ein großer Vorteil<br />

war die Vereinheitlichung der Begriffswelt, die sich durch die weite Verbreitung der<br />

Entwurfsmuster aus [Gamma u. a., 1995] ergab. Entwickler konnten Konzepte referenzieren,<br />

indem sie den Namen des entsprechenden Musters verwendeten. Vor allem die<br />

Klassenbibliotheken der objektorientierten Programmiersprachen, welche von vielen<br />

Entwicklern verwendet werden, profitieren durch die Referenzen auf die Entwurfsmuster<br />

durch die Namensgebung der Klassen 12 .<br />

Architekturmuster sind von Entwurfsmustern zu unterscheiden, weil sie nicht nur lokale<br />

Teilprobleme lösen, sondern den Grundaufbau der Anwendung vorgeben. Aus<br />

diesem Grund ist das bei Entwurfsmustern übliche Refactoring, also das strukturelle<br />

Verbessern einer bestehenden Anwendung durch die Einführung von Patterns, bei Architekturmustern<br />

nur schwer umsetzbar. Architekturmuster müssen von Anfang an im<br />

Entwurfsprozess eingebunden werden.<br />

Im Folgenden wollen wir einige etablierte Architekturmuster vorstellen, die wir im<br />

Laufe der Arbeit verwenden werden.<br />

2.6.1 Model View Controller<br />

Model View Controller (MVC) ist das bekannteste Architekturmuster für die Trennung<br />

der Präsentationsschicht von der Anwendungsschicht. Ursprünglich von Trygve Reenskaug<br />

für die Smalltalk-Plattform entwickelt [Reenskaug, 1979], hat es auch heute noch<br />

11 engl.:Design Patterns<br />

12 Beispiele aus dem Java Development Kit:<br />

java.util.ListIterator als Umsetzung des Iterator-Musters<br />

java.awt.image.BufferStrategy als Umsetzung des Strategy-Musters<br />

23


2 Architekturen für Web-Anwendungen<br />

View<br />

Model<br />

Controller<br />

Abbildung 2.8: MVC Architekturmuster<br />

Einfluss auf die neuen Plattformen. Im deutschsprachigen Raum ist das Architekturmuster<br />

auch bekannt geworden als Seeheim-Modell 13 [Pfaff, 1985].<br />

Wie der Name MVC andeutet, wird die Trennung in drei Bereichen vollzogen (siehe<br />

Übersicht in Abbildung 2.8):<br />

Modell (engl.: Model): Das Modell beschreibt die Inhalte, die dargestellt werden<br />

sollen. Es ist darstellungsneutral, d. h., die Inhalte sind noch nicht für eine Darstellung<br />

aufbereitet und könnten auf verschiedene Weisen visualisiert werden. Das<br />

Modell ist Teil der Anwendungsschicht und kann beispielsweise über die Anwendungsschnittstelle<br />

angesprochen werden.<br />

Präsentation (engl.: View): Die Präsentation bereitet die Inhalte des Modells visuell<br />

auf und erzeugt daraus eine Benutzerschnittstelle, z. B. könnte die Präsentation<br />

aus dem Modell eine Liste aller Benutzer holen und daraus eine grafisch<br />

aufbereitete Tabelle erzeugen. Wenn die Inhalte unterschiedlich präsentiert werden<br />

sollen, kann auch mehr als eine Präsentation für ein Modell erstellt werden.<br />

Steuerung (engl.: Controller): Während die Präsentation nur für die Ausgabe der<br />

Modellinhalte verantwortlich ist, nimmt die Steuerung Eingaben vom Benutzer<br />

entgegen. Diese Eingaben werden an das Modell weitergeleitet, danach wird die<br />

Präsentation angewiesen, die geänderten Modellinhalte zu präsentieren.<br />

Fowler [2003] beschreibt zwei wesentliche Vorteile des MVC-Architekturmusters: die<br />

Trennung der Präsentation vom Modell und die Trennung der Steuerung von der Präsentation.<br />

Die Trennung der Präsentation vom Modell ist eine notwendige Voraussetzung für<br />

eine gute Architekturkonzeption und ist aus folgenden Gründen wichtig:<br />

13 benannt nach dem Workshop User Interface Management Systems 1983 in Seeheim<br />

24


2.6 Architekturmuster<br />

Präsentationsmodellierung und die Modellierung der Anwendungsschicht decken<br />

zwei verschiedene Bereiche mit unterschiedlichen Anforderungen ab. Bei der Präsentationsmodellierung<br />

steht die Interaktion des Benutzers mit der Anwendung<br />

im Vordergrund, das Ziel ist eine effizient bedienbare Benutzerschnittstelle. Ziel<br />

der Modellierung der Anwendungsschicht ist, die Anwendungsfälle umzusetzen<br />

und technische Anforderungen zu beachten, z. B. Transaktionsgrenzen zu definieren.<br />

Durch eine klare Trennung der beiden Bereiche können sich Entwickler<br />

spezialisieren.<br />

Modelle können unterschiedlich visualisiert werden. In derselben Benutzerschnittstelle<br />

können die gleichen Inhalte unterschiedlich aufbereitet werden, z. B. als Tabelle<br />

oder als Balkendiagramm. Das Modell kann aber auch unverändert bleiben,<br />

wenn eine neue Benutzeroberfläche erstellt werden soll, z. B. beim Wechsel von<br />

einer Desktop-Anwendung auf eine Web-Anwendung.<br />

Modellobjekte sind einfacher zu testen als Benutzerschnittstellenobjekte. Für Modellobjekte<br />

lassen sich Tests schreiben, die die technischen und fachlichen Anforderungen<br />

automatisch überprüfen können.<br />

Die Trennung wird in der Abbildung 2.8 durch die zwei vertikal angeordneten Kästen<br />

hervorgehoben. Sowohl die View, als auch der Controller haben Zugriff auf das Model,<br />

um Daten auszulesen oder zu verändern. Das Modell hat aber keine Beziehung<br />

zu den anderen Elementen, die Entwickler des Modells können unabhängig von den<br />

Anforderungen an die Benutzerschnittstelle die Anwendungsschicht entwerfen, Änderungen<br />

an der Benutzerschnittstelle wirken sich nicht auf die Anwendungsschicht aus.<br />

Bei einer Änderung der Anwendungsschicht müssen allerdings alle davon abhängigen<br />

Benutzerschnittstellen aktualisiert werden.<br />

Die zweite Trennung, die Trennung der Steuerung von der Präsentation, ist im Architekturmuster<br />

zwar vorgesehen, wird allerdings in den meisten Umsetzungen 14 nicht<br />

realisiert. Das klassische Beispiel für diese Trennung sind nicht-editierbare und editierbare<br />

Versionen derselben Komponente, z. B. eine Tabelle, die die Daten nur ausgibt<br />

oder auch editierbar macht. In diesem Fall könnten, für die gleiche Präsentation, zwei<br />

Steuerungen modelliert werden, welche das unterschiedliche Verhalten umsetzen. In<br />

der Praxis wird meistens zu jeder Präsentation nur eine Steuerung erstellt und die beiden<br />

Teile deshalb verschmolzen. Im nächsten Abschnitt werden wir allerdings zeigen,<br />

dass gerade im Bereich der Web-Anwendungen eine solche Trennung wieder sinnvoll<br />

ist.<br />

2.6.2 Front Controller<br />

Ein Architekturmuster, welches in der Präsentationsschicht sinnvoll eingesetzt werden<br />

kann, ist der Front Controller von Fowler [2003]. In den Anfangstagen der Web-Anwendungsentwicklung<br />

wurde in jeder dynamisch aufgebauten Seite eigene Steuerungslo-<br />

14 Ironischerweise fehlt die Trennung auch in der Smalltalk-Umsetzung, welches eigentlich der Ursprung dieses<br />

Architekturmusters ist.<br />

25


2 Architekturen für Web-Anwendungen<br />

Client<br />

Front Controller<br />

Dialogsteuerung<br />

Seite<br />

Dialogsteuerung<br />

Präsentationsschicht<br />

Steuerung<br />

Präsentation<br />

Seitensteuerung<br />

Dialogsteuerung<br />

Dialogsteuerung<br />

Abbildung 2.9: MVC Architektur für Web-Anwendungen<br />

gik integriert, also die Präsentation mit der Steuerung verschmolzen. So konnte die Seite<br />

Eingaben an die Anwendungsschicht weiterleiten und sogar Abläufe wie Schleifen<br />

oder Bedingungen enthalten, um die Ausgabe zu erzeugen. In einer Web-Anwendung<br />

müssen allerdings bei einer Seitenanfrage viele Aktionen wiederholt durchgeführt werden,<br />

z. B. Zugriffsrechte müssen überprüft, Texte müssen internationalisiert oder eine<br />

Zugriffsstatistik muss geführt werden. Wenn diese Funktionen redundant in jeder Seite<br />

wiederholt werden, ist das nachträgliche Ändern der Funktionen schwierig.<br />

Im Gegensatz dazu wird bei diesem Architekturmuster jede Seitenanfrage durch eine<br />

zentrale Steuerung – den Front Controller – geleitet, die die oben erwähnten Funktionen<br />

an einer Stelle umsetzt (siehe Abbildung 2.9). Im Anschluss ruft die Steuerung die<br />

zur angefragten Seite passende Seitensteuerung auf, die die seitenspezifische Verarbeitung<br />

der Eingabedaten vornimmt. Als letzter Schritt wird die Präsentation in Form<br />

einer HTML-Seite generiert. Die Präsentation enthält keinerlei Steuerungslogik mehr,<br />

die vom MVC-Architekturmuster geforderte Trennung von Präsentation und Steuerung<br />

ist damit gewährleistet.<br />

Um dieses Architekturmuster umzusetzen, muss dem Front Controller die Zuordnung<br />

der Seitenanfrage zu den Seitensteuerungen bekannt sein. Die restliche Verarbeitung<br />

und die Erzeugung der Präsentation werden von den einzelnen Seitensteuerungen verwaltet.<br />

2.6.3 Dialogsteuerung<br />

Ein Architekturmuster, welches den Front Controller ergänzt, ist die Dialogsteuerung<br />

von Fowler [2003] 15 . Im vorigen Abschnitt ist die Steuerung zwar von der Präsentation<br />

getrennt, allerdings leitet die Seitensteuerung am Ende der Eingabeverarbeitung den<br />

15 Dort unter dem allgemeinen Namen Application Controller vorgestellt, wir werden die Ausprägung in Form<br />

einer Dialogsteuerung verwenden.<br />

26<br />

Anwendungsschicht<br />

Datenschicht


Client<br />

Front Controller<br />

Dialogsteuerung<br />

Seite<br />

Dialogsteuerung<br />

Präsentationsschicht<br />

Steuerung<br />

Präsentation<br />

Seitensteuerung<br />

Dialogsteuerung<br />

Dialogsteuerung<br />

Dialogsteuerung<br />

2.6 Architekturmuster<br />

Abbildung 2.10: MVC Architektur mit Dialogsteuerung für Web-Anwendungen<br />

Kontrollfluss an die Präsentation weiter, muss diese also kennen. Damit sind die möglichen<br />

Dialogschritte der Web-Anwendung in den Seitensteuerungen statisch abgelegt<br />

und mit der Eingabeverarbeitung vermischt. Die Dialogstruktur der Web-Anwendung<br />

ist in allen Seitensteuerungen verteilt.<br />

Die Dialogsteuerung sieht hingegen eine zentrale Verwaltung der Dialogstruktur vor.<br />

Dazu wird das Architekturmuster aus dem letzten Abschnitt um einen zusätzlichen Verarbeitungsschritt<br />

erweitert. Nachdem die Seitensteuerung die Eingabeverarbeitung abgeschlossen<br />

hat, gibt sie den Programmfluss an die zentrale Dialogsteuerung weiter,<br />

damit die, basierend auf einem Dialogmodell, die folgende Präsentation bestimmt (siehe<br />

Abbildung 2.10).<br />

Um dieses Architekturmuster umzusetzen, muss die Seitensteuerung die zentrale Dialogsteuerung<br />

aufrufen, damit diese den Folgezustand im Dialog bestimmt. Auf die Definition<br />

des Dialogs werden wir später noch eingehen, üblicherweise wird dieser als<br />

endlicher Automat modelliert.<br />

2.6.4 Komponentenbasierte Präsentation<br />

Eine weitere Ergänzung der oben genannten Architekturmuster ist die komponentenbasierte<br />

Präsentation [Heineman und Councill, 2001]. Bis jetzt wurden die Steuerung<br />

und die Präsentation seitenbasiert erstellt, d. h., jede Anfrage ist einer Seite zugeordnet<br />

und zu dieser Seite müssen eine Seitensteuerung und eine Präsentation existieren.<br />

Wir haben zwar schon Querschnittsfunktionalität in den Front Controller ausgelagert,<br />

trotzdem kann z. B. die Anforderung bestehen, in zwei verschiedenen Seiten die gleiche<br />

Anwendungsschicht<br />

Datenschicht<br />

27


2 Architekturen für Web-Anwendungen<br />

Client<br />

Front Controller<br />

Präsentationsschicht<br />

Komponentenbaum<br />

1<br />

2<br />

Komponente 1<br />

1<br />

2<br />

1<br />

Dialogsteuerung<br />

Steuerung<br />

Präsentation<br />

Anwendungszugriff<br />

Anwendungszugriff<br />

Anwendungszugriff<br />

Komponente 2<br />

Abbildung 2.11: Komponentenbasierte Präsentationsarchitektur<br />

Tabelle darzustellen. Bis jetzt müsste die Steuerungslogik dieser Tabelle in die verschiedenen<br />

Seitensteuerungen redundant eingefügt werden. Die Seite ist für die Steuerung<br />

und die Präsentation die kleinste Einheit.<br />

Die komponentenbasierte Präsentation sieht eine feinere Zerlegung der Präsentationsschicht<br />

vor. Die Seite wird nicht mehr atomar betrachtet, sondern in Interaktionskomponenten<br />

zerlegt, die hierarchisch angeordnet werden (siehe Abbildung 2.11). Interaktionskomponenten<br />

(z. B. Knöpfe, Listen, Tabellen, Textausgaben oder Eingabefelder)<br />

werden zentral vorgegeben und können vom Modellierer zu einer Seite zusammengesetzt<br />

werden, die Hierarchie bestimmt die Anordnung der Komponenten auf<br />

der Seite. Anstelle einer Seitensteuerung definiert der Modellierer Komponentensteuerungen,<br />

die die Eingabeverarbeitung einzelner Komponenten durchführt. Redundanz<br />

wird verhindert, weil die Komponentensteuerung auch in anderen Hierarchien wiederverwendet<br />

werden kann.<br />

Auch die Präsentation wird komponentenbasiert durchgeführt. Für jede Komponente<br />

existiert eine eigene Präsentation, die Seite wird erzeugt, indem die Struktur des<br />

Komponentenbaums mit der Präsentation der Komponenten gefüllt wird.<br />

28<br />

Die Verarbeitung einer Seitenanfrage besteht aus folgenden Schritten:<br />

Anwendungsschicht<br />

Datenschicht


2.7 Zusammenfassung<br />

1. Komponentenbaum aufbauen: Der Front Controller nimmt die Seitenanfrage entgegen<br />

und muss diese einem vom Modellierer definierten Komponentenbaum zuordnen.<br />

2. Komponentensteuerungen aufrufen: Die Eingaben, die der Front Controller zusammen<br />

mit der Seitenanfrage erhalten hat, müssen den einzelnen Komponenten<br />

zugeordnet werden. Jede Komponentensteuerung bekommt nur die für die<br />

Komponente relevante Teilmenge der Eingaben zur Verarbeitung überreicht.<br />

3. Dialogsteuerung aufrufen: Im Anschluss an die Eingabeverarbeitung wird die Dialogsteuerung<br />

aufgefordert, den Folgezustand zu bestimmen. Basierend auf der<br />

Zustandsänderung wird ein neuer Komponentenbaum bestimmt.<br />

4. Komponentenbaum darstellen: Die Ausgabe wird erstellt, indem die Präsentationen<br />

der Komponenten des neuen Baums auf einer Seite angeordnet werden.<br />

Das MVC-Architekturmuster macht keinerlei Aussage über die Granularität der Präsentation,<br />

der Steuerung oder des Modells. Sowohl der seitenbasierte als auch der komponentenbasierte<br />

Ansatz genügen dem Anspruch an die Trennung von Modell und<br />

Präsentation. Der Vorteil der komponentenbasierten Präsentation ist die Vermeidung<br />

von Redundanz bei der Beschreibung von Benutzerschnittstellen. Die Entwicklung von<br />

Oberflächen für Web-Anwendungen nähert sich damit der Entwicklung von Oberflächen<br />

für Desktop-Anwendungen an 16 .<br />

2.6.5 Zusammenfassung<br />

Die Trennung der Präsentation, der Dialogstruktur und der Steuerungslogik ist ein Ziel,<br />

das wir in dieser Arbeit verfolgen werden. Mithilfe des MVC-Architekturmusters und<br />

den Erweiterungen in Form des Front Controllers, der Dialogsteuerung und der komponentenbasierten<br />

Präsentation können wir die diese Trennung innerhalb der Drei-<br />

Schichten-Architektur umsetzen.<br />

2.7 Zusammenfassung<br />

In diesem Kapitel haben wir die Anforderungen an eine Softwarearchitektur für Web-<br />

Anwendungen erörtert. Dabei haben wir einen Blick auf die geschichtliche Entstehung<br />

16 Folgende Plattformen unterstützen die komponentenbasierte Erstellung von Web-Oberflächen:<br />

Sun JavaServer Faces [McClanahan u. a., 2004]<br />

Apache Tapestry [Ship, 2004]<br />

Apache Wicket [Dashorst und Hillenius, 2008]<br />

Microsoft ASP.NET [Liberty und Hurwitz, 2005]<br />

Apple WebObjects [Hill und Mallais, 2004]<br />

29


2 Architekturen für Web-Anwendungen<br />

der Schichtenarchitekturen geworfen und den aktuellen kanonischen Stand beschrieben.<br />

Die Verwendung von Architekturmustern als orthogonale Ergänzung zur Schichtenarchitektur<br />

hilft bei der Modellierung von Detailaspekten, in unserem Beispiel in<br />

der Präsentationsschicht. Wie gezeigt, lassen sich Architekturmuster auch untereinander<br />

kombinieren.<br />

Architekturkonzepte können allerdings niemals endgültig oder vollständig sein, sie<br />

unterliegen einer fortwährenden Umgestaltung durch die Weiterentwicklung der Softwaresysteme:<br />

Softwarearchitekturen sind empirische Konstrukte. Dieses Kapitel definiert<br />

deshalb die Architekturbegriffe, auf die wir im Laufe dieser Arbeit aufbauen und<br />

verweisen werden.<br />

Aufgrund der empirischen Entstehung beschreibt Booch [2005] Architekturen nicht<br />

als Definition, sondern in Form von Erfahrungen, welche wir zum Abschluss dieses Kapitels<br />

zusammenfassend wiedergeben wollen:<br />

Wir wissen, dass wir wissen<br />

Wir wissen, was Architekturen ausmacht und was nicht dazugehört.<br />

Jedes Softwaresystem besitzt eine (eventuell implizite) Architektur.<br />

Strukturierte Softwaresysteme benutzen (eventuell implizite) Architekturmuster.<br />

Wir glauben, dass wir wissen<br />

Softwarearchitektur sollte explizit eingesetzt werden.<br />

Architekturmuster sollten explizit eingesetzt werden.<br />

Wir wissen, dass wir nicht wissen<br />

Wir haben keine beständigen Architekturkonzepte. Für alle bestehenden<br />

Probleme wurden im Laufe der Jahre immer wieder bessere Architekturkonzepte<br />

gefunden, die das Vorhergehende nicht nur erweitern,<br />

sondern oft auch ersetzen.<br />

Wir haben keine objektiven Kriterien, um die Qualität von Architekturkonzepten<br />

zu überprüfen. Wir verlassen uns auf die Empirie.<br />

Damit fasst Booch zusammen, dass die Methoden zur Definition einer Softwarearchitektur<br />

noch weithin unbekannt sind und wir, bis auf die Empirie, nur wenig qualitatives<br />

Wissen besitzen. Trotzdem sind Architekturen unverzichtbar, denn sie geben die Struktur<br />

des Softwaresystems vor, Fehler durch unstrukturierte oder redundante Umsetzungen<br />

werden so verhindert.<br />

Im nächsten Kapitel werden wir zeigen, wie der Entwicklungsprozess zur Modellierung<br />

der Bausteine einer Architektur für Web-Anwendungen aussieht.<br />

30


Kapitel 3<br />

Modellbasierte Entwicklung<br />

Inhalt<br />

3.1 Modelle im Entwicklungsprozess . . . . . . . . . . . . . . . . . . . . . . 31<br />

3.2 Modellbasierte Entwicklung von Web-Anwendungen . . . . . . . . . . 35<br />

3.3 Domänenmodellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

3.4 Aufgabenmodellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

3.5 Dialogmodellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

3.6 Präsentationsmodellierung . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

3.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

In der Einleitung und in der Architekturübersicht haben wir bereits angedeutet, dass<br />

Softwaresysteme selten von einem Programmierer „auf der grünen Wiese“ entwickelt<br />

werden, sondern von einem Team erstellt und in ein bestehendes Umfeld integriert<br />

werden müssen. Der Entwicklungsprozess muss deshalb in getrennt bearbeitbare Entwicklungsschritte<br />

(seperations of concerns) zerlegt werden, die zusammen das Softwaresystem<br />

ergeben. Die modellbasierte Entwicklung bietet sich als Umsetzung dieses<br />

Konzeptes an; Modelle beschreiben jeweils einen Aspekt des Softwaresystems im Detail,<br />

während die anderen Aspekte ausgeblendet werden. Erst die Kombination aller<br />

Modelle ergibt das Gesamtsystem.<br />

Während die modellbasierte Entwicklung in der initialen Phase der Softwareentwicklung<br />

mit Mehrarbeit verbunden ist, verringert sie den Aufwand für die Wartung, Weiterentwicklung<br />

und Wiederverwendung des Softwaresystems. Änderungen können von<br />

Fachexperten an einem Modell durchgeführt werden, die anderen Modelle bleiben im<br />

besten Fall unbeeinflusst.<br />

In diesem Kapitel werden wir die bestehenden Modelle für die Entwicklung von Web-<br />

Anwendungen vorstellen und uns dabei vor allem auf die Modellierung der Präsentationsschicht<br />

auf Basis von Aufgabenmodellen konzentrieren.<br />

3.1 Modelle im Entwicklungsprozess<br />

Bevor wir uns konkreten Modellen für die Erstellung von Web-Anwendungen zuwenden,<br />

wollen wir zuerst den Modellbegriff definieren.<br />

31


3 Modellbasierte Entwicklung<br />

3.1.1 Modelldefinition<br />

In der allgemeinsten Bedeutung ist ein Modell eine Abstraktion von der Realität, mit<br />

der Konzentration auf einige zu betrachtende Aspekte, während andere Aspekte vernachlässigt<br />

werden. Es kann mehrere Modelle des gleichen realen Objektes oder Sachverhaltes<br />

geben, zum Beispiel:<br />

Realität Modell<br />

Reale Eisenbahn Konstruktionszeichnung<br />

Reale Eisenbahn Modelleisenbahn<br />

Stadt Stadtplan<br />

Stadt Buslinienplan<br />

Modelle können nicht nur parallel existieren, sondern auch zur Reduzierung eines komplexen<br />

Sachverhalts aufeinander aufbauen. So kann z. B. ein Modell Hausansicht auf<br />

einem Modell Grundriss basieren, wenn sich der Grundriss ändert, so muss auch die<br />

Hausansicht aktualisiert werden. Modelle bieten sich deshalb an, um eine Architekturkonzeption,<br />

wie in Abschnitt 2.2 beschrieben, umzusetzen.<br />

Im Softwareentwicklungsprozess soll ein existierendes (oder nur in Form von Anforderungen<br />

bestehendes) Konzept als Anwendung umgesetzt werden. Deshalb besteht<br />

die Modellierung aus zwei Schritten:<br />

Abstraktion Die Realität muss in ein für die Softwareentwicklung relevantes abstraktes<br />

Modell umgeformt werden.<br />

Konkretisierung Das abstrakte Modell wird (eventuell über mehrere Zwischenmodelle)<br />

in eine konkrete Anwendung umgeformt.<br />

Selbst wenn bei der Entwicklung keine expliziten Modelle verwendet werden, so müssen<br />

diese Schritte doch implizit vom Entwickler im Kopf durchgeführt werden. Wir betrachten<br />

im Folgenden die explizite und formale Erstellung von Modellen im Softwareentwicklungsprozess.<br />

3.1.2 Metamodelle<br />

Um Modelle definieren zu können, ist ein Metamodell hilfreich. Ein Metamodell ist<br />

ein Modell, das beschreibt, wie Modelle definiert werden. Um z. B. die Konstruktionszeichnung<br />

einer Eisenbahn anzufertigen, ist es sinnvoll, zu beschreiben, aus welchen<br />

Elementen die Zeichnung bestehen darf. Dazu müssen sowohl die Syntax als auch die<br />

Semantik der Elemente in einem Metamodell definiert werden:<br />

32<br />

Die Syntax beschreibt, wie die Elemente im Modell dargestellt werden. Dies kann<br />

eine textuelle Syntax sein, oder aber eine grafische, z. B. Darstellungen von Rädern<br />

und Achsen in einer Konstruktionszeichnung. Die Syntax gibt auch an, wie die Elemente<br />

kombiniert werden können, zum Beispiel, dass ein Rad mehrere Speichen<br />

enthält aber eine Speiche nicht mehrere Räder. Mithilfe der Syntax kann ein Programm<br />

das Modell auf Korrektheit überprüfen.


3.1 Modelle im Entwicklungsprozess<br />

Die Semantik beschreibt die Bedeutung der Modellelemente. Modelle sollen nicht<br />

nur vom Computer interpretiert, sondern auch vom Modellierer erstellt werden.<br />

Dazu muss diesem die Bedeutung der Elemente klar sein, es muss eindeutig definiert<br />

sein, dass die (eventuell abstrakte) Syntax eines Elements z. B. einer Achse<br />

entspricht.<br />

Wir könnten beispielsweise die Regeln der deutschen Grammatik als Metamodell für<br />

in deutsch verfasste Texte verwenden und eine Prüfung auf Korrektheit (Fehlersuche)<br />

durchführen. Aufgrund der vielen Ausnahmen und Sonderfälle in der deutschen Grammatik<br />

werden wir dies hier nicht weiter fortführen, aber in der Softwareentwicklung ist<br />

es sinnvoll, die Elemente der Modelle mit Metamodellen zu beschreiben. Natürlich kann<br />

auch zu einem Metamodell ein Meta-Metamodell erstellt werden, um das Metamodell<br />

zu definieren. Die Meta Object Facility (MOF, siehe [OMG, 2006]) bietet eine solche Abstraktion<br />

für UML Modelle 17 . Nicht für jedes Modell muss ein Metamodell definiert sein,<br />

im nächsten Abschnitt werden wir zeigen, dass die Definition eines Metamodells für die<br />

Weiterverarbeitung des Modells aber sinnvoll ist.<br />

3.1.3 Modellbasierte und modellgetriebene Entwicklung<br />

Wenn Modelle explizit im Entwicklungsprozess verwendet werden, dann wird klassischerweise<br />

von der modellbasierten Entwicklung oder der modellgetriebenen Entwicklung<br />

gesprochen. Diese beiden Begriffe sind dabei nicht synonym zu verwenden, sie<br />

unterscheiden sich vor allem darin, wie die Modelle weiterverwendet werden.<br />

Bei der modellbasierten Entwicklung wird die Anwendung basierend auf den Modellen<br />

entwickelt. Die Modelle müssen nicht unbedingt einem Metamodell folgen, z. B.<br />

kann eine handgemalte Skizze einer Webseite als Modell für die Umsetzung verwendet<br />

werden. Der Entwickler ist dafür zuständig, die Vorgaben des Modells einzuhalten.<br />

Eine spätere Änderung des Modells bedeutet demnach auch ein manuelle Anpassung<br />

der Anwendung; der Entwickler muss die Änderungen im Modell von Hand auf die<br />

Anwendung übertragen.<br />

Bei der modellgetriebenen Entwicklung (Model Driven Software Development, siehe<br />

[Stahl u. a., 2007]) wird die Anwendung basierend auf den Modellen von einem Programm<br />

generiert. Dazu werden die Modelle entweder in Zwischenschritten zu konkreteren<br />

Modellen (Modell-zu-Modell-Transformation) oder im letzten Schritt in ein Programmgerüst<br />

(Modell-zu-Code-Transformation) transformiert. Der Entwickler kann das<br />

Programmgerüst dann zu einer endgültigen Version der Anwendung erweitern. Trotzdem<br />

bleibt der Generator in der Lage, ein verändertes Modell in ein Codegerüst zu<br />

17 Zum Beispiel definiert MOF folgende Modellebenen:<br />

Instanz (M0) Modell (M1) Metamodell (M2) Meta-Metamodell (M3)<br />

Radreifen 312 Rad UML Klasse MOF::Class<br />

32 cm Durchmesser UML Attribut MOF::Class<br />

Die erste Zeile beschreibt den Radreifen 312 einer Instanz der Klasse Rad welche eine Instanz einer UML Klasse<br />

welche Instanz einer MOF::Class ist. In der zweiten Zeile ist ein Attribut beschrieben: 32 cm ist die Instanz<br />

eines Durchmessers, welches ein UML Attribut welches ebenfalls Instanz einer MOF::Class ist. Mittels einer<br />

MOF::Association könnte der Durchmesser als Attribut der Klasse Rad definiert werden.<br />

33


3 Modellbasierte Entwicklung<br />

transformieren, ohne die manuellen Erweiterungen zu überschreiben 18 . Die <strong>Generierung</strong><br />

eines Programmgerüsts geschieht über Transformationsregeln, die einmalig definiert<br />

werden müssen. Um die Transformationsregeln anwenden zu können, muss der<br />

Generator das Modell interpretieren können, dieses muss deshalb zwingend einem Metamodell<br />

folgen. Bei der modellgetriebenen Entwicklung kann das Modell als Grundlage<br />

für eine Umsetzung auf verschiedenen Plattformen und unterschiedlichen Programmiersprachen<br />

verwendet werden, solange die passenden Transformationsregeln existieren.<br />

Wenn die Modelle bereits alle notwendigen Informationen für die Erzeugung der<br />

Anwendung enthalten, dann kann die <strong>Generierung</strong> auch automatisch zur Laufzeit erfolgen.<br />

In diesem Fall enthält das Laufzeitsystem alle Transformationsregeln und benötigt<br />

das Modell der Anwendung als Eingabe in einem über die Syntax definierten<br />

Format. Wir werden später den Weg der modellgetriebenen Entwicklung verfolgen, indem<br />

wir für unsere Modelle passende Metamodelle und eine Laufzeitarchitektur mit<br />

Transformationsregeln definieren.<br />

3.1.4 Zusammenfassung<br />

Wie wir diskutiert haben, bringt die Einführung von Modellen im Entwicklungsprozess<br />

folgende Vorteile:<br />

Geringere Umsetzungsdauer bei Designänderungen oder neuen Vorgaben.<br />

Gleichzeitige Erstellung von Anwendungen für unterschiedliche Plattformen und<br />

Programmiersprachen.<br />

Die Transformationsregeln bestimmen die Qualität des Quellcodes, die Einhaltung<br />

der Architekturkonzepte kann ebenfalls in den Regeln definiert werden.<br />

Bessere Integration von Fachexperten durch eine Trennung von fachlichen und<br />

technischen Aspekten.<br />

Einfacher Übergang zu einer neuen Technologie durch das Ändern der Transformationsregeln.<br />

Teilweise oder vollständige <strong>Generierung</strong> der Anwendung aus den Modellen.<br />

Dem stehen allerdings folgende Nachteile gegenüber:<br />

Erhöhter einmaliger Aufwand für die Entwicklung der Transformationsregeln.<br />

Für den Entwickler zusätzlicher Einarbeitungsaufwand in die Modellierungssprache<br />

und das Modellierungswerkzeug.<br />

18 Z. B. mit folgenden Verfahren:<br />

protected-regions innerhalb einer Klasse, die vom Entwickler gefüllt werden, und die der Generator nicht<br />

überschreibt.<br />

subclassing, bei der der Generator abstrakte Oberklassen generiert, von denen der Entwickler Unterklassen<br />

ableitet und implementiert.<br />

34


3.2 Modellbasierte Entwicklung von Web-Anwendungen<br />

Abhängigkeit vom Modellierungswerkzeug. Selbst bei UML-Werkzeugen mit XMI-<br />

Unterstützung (XML Metadata Interchange) ist die Interoperabilität mit anderen<br />

Werkzeugen nicht gewährleistet.<br />

Schwieriger Kompromiss zwischen zu großem Ausdrucksumfang (Modelle werden<br />

komplex) und zu kleinem Ausdrucksumfang (fehlende Flexibilität, Entwickler fühlen<br />

sich eingeschränkt) der Modelle.<br />

Als Fazit bleibt festzuhalten, dass eine modellbasierte oder modellgetriebene Entwicklung<br />

dann sinnvoll ist, wenn die Anwendung über verschiedene, miteinander verknüpfte<br />

Modelle beschrieben wird. Die Modelle sollten jeweils einen genau umrissenen Bereich<br />

der Anwendung beschreiben und die anderen Bereiche ausblenden. Die Identifikation<br />

dieser Bereiche wird das Ziel der nächsten Abschnitte sein.<br />

3.2 Modellbasierte Entwicklung von Web-Anwendungen<br />

Wir wollen mit unserem Ansatz den gesamten Entwicklungsprozess von Web-Anwendungen<br />

unterstützen. Zu diesem Zweck betrachten wir die existierenden systemzentrierten<br />

und benutzerzentrierten Ansätze und analysieren Gemeinsamkeiten, fehlende<br />

Konzepte und Möglichkeiten der Integration.<br />

Der systemzentrierte Ansatz basiert auf der Idee, eine Anwendung über die Abläufe<br />

und Strukturen innerhalb eines Softwaresystems zu beschreiben. Zu diesem Zweck hat<br />

die Object Management Group in den 90er Jahren die UML zusammengestellt [OMG,<br />

2005], eine Sprache für die Modellierung von Software, basierend auf Erkenntnissen<br />

und Erfahrungen aus Softwareprojekten der vorangegangenen Jahrzehnte. Die Sprache<br />

definiert in den Bereichen der Struktur- und Verhaltensmodellierung eine Vielzahl<br />

von Diagrammarten mit standardisierter Notation. Mithilfe dieser (und anderer, weniger<br />

relevanter) Sprachen werden im Bereich des Web Engineerings (WE) (ein Abkömmling<br />

des Software Engineerings für Web-Anwendungen) die Softwaresysteme beschrieben.<br />

Der benutzerzentrierte Ansatz hat seinen Ursprung im Bereich der Human Computer<br />

Interaction (HCI) und basiert auf der Idee, über die Wünsche, Ziele und Aufgaben eines<br />

Benutzers zu einer Benutzerschnittstelle zu gelangen. Basierend auf dem Entwurf der<br />

Benutzerschnittstelle wird der Rest der Anwendung umgesetzt. In Abbildung 3.1 haben<br />

wir die wichtigsten Modelle des systemzentrierten (links) und des benutzerzentrierten<br />

Ansatzes (rechts) aufgeführt.<br />

Der Entwicklungsprozess wird in drei Phasen zerlegt, wir beschreiben die Modellierung<br />

der Anwendungsschicht (im Folgenden Domänenmodellierung genannt) auf der<br />

linken und die Modellierung der Benutzerschnittstelle auf der rechten Seite der Abbildung.<br />

In der Analysephase werden die Anforderungen an die Anwendung formalisiert. Dazu<br />

wird in der Regel ein Glossar angelegt, in dem die verwendeten Begriffe definiert,<br />

sowie die Konzepte textuell beschrieben werden. Das Aufgabenmodell als Vorstufe des<br />

Benutzerschnittstellenentwurfs hat für unseren Ansatz zentrale Bedeutung, wir werden<br />

35


3 Modellbasierte Entwicklung<br />

Analyse<br />

Konzepte/Glossar<br />

Task<br />

Anwendungsfälle Controller<br />

Aufgabenmodell<br />

Entwurf<br />

Klassendiagramm<br />

Task<br />

Sequenzdiagramm<br />

Controller<br />

Aktivitätsdiagramm<br />

Implementierung<br />

Klassen Benutzerschnittstelle<br />

Datenbankschema<br />

Dialogmodell<br />

Präsentationsmodell<br />

Abbildung 3.1: Phasen der modellbasierten Entwicklung<br />

im Abschnitt 3.4 auf die bestehenden Modelle eingehen. Die Anwendungsfälle dienen<br />

der groben Beschreibung der zu entwerfenden Anwendung.<br />

In der Entwurfsphase wird die Anwendung modelliert. Das Klassendiagramm, Sequenzdiagramm<br />

und Aktivitätsdiagramm sind Teil der UML-Domänenmodellierung, die<br />

wir in Abschnitt 3.3 aufgreifen werden. Das Dialogmodell und Präsentationsmodell werden<br />

aus dem Aufgabenmodell abgeleitet, wir werden sie in den Abschnitten 3.5 und 3.6<br />

behandeln.<br />

In der Implementierungsphase wird die Anwendung für eine Plattform umgesetzt,<br />

d. h., Klassen werden in einer Programmiersprache verfasst, ein Datenbankschema wird<br />

für eine Datenbank erstellt und die Benutzerschnittstelle wird mit einer geeigneten Beschreibungssprache<br />

umgesetzt. Bei einem modellgetriebenen Ansatz können die Elemente<br />

dieser Phase aus den Modellen der Entwurfsphase generiert werden.<br />

3.3 Domänenmodellierung<br />

Die UML ist eine bewährte Modellierungssprache, um ein Domänenmodell zu erzeugen,<br />

welches als Abstraktion einer Fachdomäne dient. Ziel des Domänenmodells ist die<br />

Umsetzung der fachlichen Aspekte in eine implementierbare Anwendung. Der Fokus<br />

36


3.4 Aufgabenmodellierung<br />

liegt auf der Modellierung der Anwendungsschicht und der Datenschicht in einer Drei-<br />

Schichten-Architektur (siehe Abschnitt 2.3.3).<br />

Die UML bietet zur Domänenmodellierung eine Reihe von Diagrammarten, von denen<br />

wir einige im linken Teil der Abbildung 3.1 aufgeführt haben. Details finden sich<br />

dazu in [OMG, 2005], wir geben in dieser Arbeit nur einen Überblick über die Diagramme,<br />

unterteilt werden sie in Strukturdiagramme (Auszug):<br />

Klassendiagramm: Eine Darstellung der Klassen und deren Beziehungen untereinander.<br />

Objektdiagramm: Beispielhafte Ausprägungen der Klassen des Klassendiagramms<br />

als Objekte.<br />

Komponentendiagramm: Eine Darstellung der zu Komponenten zusammengefassten<br />

Klassen und deren Abhängigkeiten untereinander.<br />

und in Verhaltensdiagramme (Auszug):<br />

Sequenzdiagramm: Beschreibt den Austausch von Nachrichten zwischen Objekten<br />

mittels Lebenslinien.<br />

Aktivitätsdiagramm: Stellt die Vernetzung von Aktionen und deren Verbindungen<br />

mit Kontroll- und Datenflüssen grafisch dar.<br />

Anwendungsfalldiagramm: Stellt Anwendungsfälle und Akteure mit ihren Beziehungen<br />

und Abhängigkeiten dar.<br />

Die Diagramme können als Sichten auf ein zentrales Domänenmodell aufgefasst werden,<br />

wenn sich z. B. der Klassenname in einem Klassendiagramm ändert, sollte sich auch<br />

derselbe Name in einem Sequenzdiagramm ändern.<br />

Bei der Verwendung der UML gibt es nur eine rudimentäre Unterstützung für die<br />

Beschreibung des Dialogs zwischen Benutzer und Computersystem (in Form von Aktivitätsdiagrammen).<br />

Die Benutzerschnittstelle wird erst spät im Entwicklungsprozess<br />

definiert, sie folgt damit eher den Strukturen des Klassenmodells als den Erwartungen<br />

eines Benutzers, was eine schlechte Usability nach sich ziehen kann. Die Modellierungssicht<br />

ist datenzentriert, wünschenswert wäre ein stärkerer Fokus auf den Dialog und<br />

die Interaktionen.<br />

Wir werden deshalb für die Domänenmodellierung die Diagramme der UML verwenden,<br />

aber für die Modellierung der Präsentationsschicht Ansätze aus dem Bereich der<br />

Human Computer Interaction verwenden, welche im rechten Teil der Abbildung 3.1<br />

aufgeführt sind und in den nächsten Abschnitten behandelt werden.<br />

3.4 Aufgabenmodellierung<br />

3.4.1 Einleitung<br />

Das Aufgabenmodell steht im Zentrum der modellbasierten Entwicklung von Benutzerschnittstellen.<br />

Aufgabenmodellierung wird bereits seit Ende der 60er Jahre betrieben,<br />

37


3 Modellbasierte Entwicklung<br />

allerdings hat sich – im Gegensatz zur UML – keine einheitliche Sprache oder Notation<br />

durchgesetzt. In den nächsten Abschnitten werden wir deshalb erst eine allgemeine Definition<br />

der Aufgabenmodellierung geben, um danach die für diese Arbeit relevanten<br />

Methoden der Aufgabenmodellierung zusammenzufassen.<br />

3.4.2 Methoden der Aufgabenmodellierung<br />

Im Bereich der Human Computer Interaction steht der Benutzer und seine Interaktion<br />

mit einem Computersystem im Vordergrund. Die Aufgabenanalyse hat sich als fundamentale<br />

Methode zur Ermittlung und Beschreibung der Benutzerinteraktion durchgesetzt.<br />

Ergebnis der Aufgabenanalyse ist in den meisten Fällen ein Aufgabenmodell, in<br />

dem die Interaktionsaufgaben eines Benutzers mit einem Computersystem beschrieben<br />

werden. Diese Interaktionsaufgaben müssen später von einer Benutzerschnittstelle realisiert<br />

werden, damit die Anwendung den Anforderungen der Analysephase erfüllt.<br />

Die Aufgabenanalyse ist, laut Dix u. a. [1993],. . .<br />

. . . the process of analyzing the way people perform their jobs: the things<br />

they do, the things they act on and things they need to know.<br />

Eine Aufgabe in ihrer allgemeinsten Form ist eine Aktion, die der Benutzer auf der<br />

Anwendung auslösen kann. Im Verlauf der Aufgabenanalyse wird die Menge aller Aufgaben<br />

identifiziert und die Abhängigkeiten von Aufgaben untereinander definiert.<br />

Als Ergebnis der Aufgabenanalyse entsteht eine Beschreibung der zu erfüllenden<br />

Aufgabe in einer von der Aufgabenanalyse abhängigen Notation. Das Identifizieren<br />

der Aufgaben kann auf verschiedene Weisen geschehen [Paternò, 1999]:<br />

Kognitionspsychologie: Analysiert die Art und Weise, wie ein Benutzer mit einer<br />

Benutzerschnittstelle interagiert, um eine Aufgabe zu erfüllen. Dabei werden die<br />

kognitiven Prozesse und Strukturen des Benutzers analysiert, indem deren Veränderung<br />

im Verlauf einer Aufgabenbearbeitung betrachtet wird. Ziel ist, die Aufgaben<br />

so zu definieren, dass die kognitive Last möglichst gering ist.<br />

Aufgabenzuordnung: Die Aufgaben werden für den Benutzer fest vorgegeben,<br />

z. B. durch die Geschäftsführung in einer Organisation.<br />

Software Engineering: Die Aufgaben werden anhand der Anforderungen des Domänenmodells<br />

identifiziert, also systemzentriert bestimmt.<br />

Ethnografie: Eine Methode der Soziologie, die die Erwartungshaltung einer Gruppe<br />

von Benutzern analysiert, um daraus erwartungskonforme Aufgaben zu definieren.<br />

Abbildung 3.2 (basierend auf einer Abbildung aus van Welie [2001]) zeigt eine Zeitlinie<br />

mit den für unsere Arbeit relevanten Methoden. Die Hierarchical Task Analysis (HTA)<br />

von Annett und Duncan [1967], die Methode Goals, Operators, Methods, and Selection<br />

rules (GOMS) von Card u. a. [1983], die Task Knowledge Structures (TKS) von Johnson<br />

u. a. [1988], das Model for Activity Description (MAD) von Scapin und Pierret-Goldbreich<br />

38


HTA goms Tks mAd uAn cTT<br />

1970 1975 1980 1985 1990 1995 2000<br />

Abbildung 3.2: Zeitlinie der Aufgabenmodelle [van Welie, 2001]<br />

3.4 Aufgabenmodellierung<br />

2005<br />

[1989], die User Action Notation (UAN) von Hix und Hartson [1993] und die Concurrent<br />

Task Trees (CTT) von Paternò u. a. [1997]. In den nächsten Abschnitten werden wir die<br />

verschiedenen Methoden genauer vorstellen.<br />

Hierarchical Task Analysis (HTA)<br />

Mittels der hierarchischen Aufgabenzerlegung wird eine Aufgabe in eine Hierarchie<br />

von Teilaufgaben aufgeteilt und es wird eine Ordnung definiert, in der die Teilaufgaben<br />

auszuführen sind. Diese Vorgehensweise, die die Basis von vielen nachfolgenden<br />

Methoden ist, wurde erstmals von Annett und Duncan [1967] unter dem Namen Hierarchical<br />

Task Analysis vorgestellt. Damals gab es noch keine Verbindung zum HCI-Bereich<br />

(diese wurde erst von Shepherd [1989] hergestellt), sondern die Methode wurde zur<br />

Beschreibung von allgemeinen Aufgaben und Abläufen verwendet. Ein typisches Aufgabenmodell<br />

im Stile von HTA zeigt das folgende Beispiel (basierend auf dem HTA-<br />

Beispiel aus Dix u. a. [1993]):<br />

Listing 3.1: HTA Beispiel – Hausputz Hierarchie<br />

1. Hausputz durchführen<br />

1.1. Hole Staubsauger<br />

1.2. Säubere die Räume<br />

1.2.1. Säubere die Diele<br />

1.2.2. Säubere das Wohnzimmer<br />

1.2.3. Säubere das Schlafzimmer<br />

1.3. Leere den Staubsaugerbeutel<br />

1.4. Verstaue Staubsauger<br />

Das Beispiel zeigt die Hierarchie der Aufgaben, um ein Haus zu putzen. Die Oberaufgabe<br />

Hausputz durchführen wird in vier Unteraufgaben unterteilt, erkenntlich durch die<br />

Einrückung und der Nummerierung (1.1. bis 1.4.). Die Aufgabe 1.2. Säubere die Räume<br />

wird erneut in drei Unteraufgaben (1.2.1. bis 1.2.3.) unterteilt. Für die hierarchische<br />

Unterteilung muss noch eine Ordnung definiert werden, dies geschieht bei HTA durch<br />

sogenannte Pläne:<br />

Listing 3.2: HTA Beispiel – Hausputz Pläne<br />

Plan 1.: Führe 1.1. - 1.2. - 1.4. in dieser Reihenfolge aus.<br />

Wenn Staubsaugerbeutel voll, führe 1.3. aus.<br />

Plan 1.2.: Führe 1.2.1 - 1.2.2. - 1.2.3. beliebig aus.<br />

39


3 Modellbasierte Entwicklung<br />

Die Pläne sind mit der Nummer der Aufgabe versehen, für die sie ein Bearbeitungsplan<br />

definieren. So beschreibt der Plan 1. den Ablauf der Unteraufgaben von Hausputz<br />

durchführen. Wie wir sehen, müssen nicht alle Unteraufgaben ausgeführt werden, der<br />

Ablaufplan lässt die Freiheit, wann und ob der Staubsaugerbeutel geleert wird, entweder<br />

beim Holen, beim Säubern, beim Verstauen oder gar nicht. Wenn der Staubsaugerbeutel<br />

nur während des Säuberns der Räume geleert werden soll, dann könnte die<br />

Aufgabe in der Hierarchie verschoben werden, aus der Aufgabe 1.3. würde dann z. B.<br />

1.2.4. werden.<br />

Plan 1.2. beschreibt die Reihenfolge, in der die Unteraufgaben der Aufgabe Säubere<br />

die Räume ausgeführt werden sollen. Im Beispiel dürfen die Aufgaben in einer beliebigen<br />

Reihenfolge ausgeführt werden. Der Plan lässt allerdings keine Wahlfreiheit, ob<br />

die Aufgaben ausgeführt werden, die Räume müssen immer alle gesäubert werden.<br />

Wenn man bedenkt, dass nicht alle Räume gleich schnell verschmutzen, so sollte der<br />

Plan angepasst werden, z. B. folgendermaßen:<br />

Listing 3.3: HTA Beispiel – Hausputz Pläne (erweitert)<br />

Plan 1.2.: Führe 1.2.1 - 1.2.2. - 1.2.3. beliebig aus.<br />

Führe 1.2.1. täglich aus.<br />

Führe 1.2.2. wöchentlich aus.<br />

Wenn Gäste kommen, führe 1.2.3. aus.<br />

Der Plan beschreibt, dass die Unteraufgaben nur noch an definierten Zeitpunkten ausgeführt<br />

werden müssen. Wenn mehrere Aufgaben zum gleichen Zeitpunkt anstehen,<br />

können sie in einer beliebigen Reihenfolge ausgeführt werden.<br />

Eine umgangssprachliche Definition der Pläne ist für die Erstellung von Aufgabenmodellen<br />

nicht sinnvoll, weil diese zu allgemein und damit für Mensch und Computer nur<br />

schwer zu interpretieren ist. Deshalb werden in HTA Kategorien definiert, aus denen<br />

die Elemente der Pläne stammen dürfen. Andere Methoden werden diese Kategorien<br />

später in Form von temporalen Operationen aufgreifen:<br />

40<br />

Sequenzielle Reihenfolge: Unteraufgaben sind in einer festgelegten Reihenfolge<br />

nacheinander auszuführen.<br />

Beliebige Reihenfolge: Unteraufgaben sind in einer beliebigen Reihenfolge nacheinander<br />

auszuführen.<br />

Nebenläufigkeit: Unteraufgaben können unabhängig voneinander parallel ausgeführt<br />

werden.<br />

Optionale Aufgabe: Unteraufgaben können vom Benutzer übersprungen werden,<br />

damit lassen sich wenn-dann Beziehungen ausdrücken.<br />

Warten auf Ereignisse: Erst wenn ein Ereignis eintrifft, kann die Aufgabe ausgeführt<br />

werden, z. B. wöchentliche Aufgabenausführung.<br />

Zyklen: Unteraufgaben können wiederholt werden, bis eine Bedingung den Zyklus<br />

abbricht.


3.4 Aufgabenmodellierung<br />

Die Hierarchical Task Analysis ist vermutlich die erste Methode zur Aufgabenanalyse<br />

und hat bis heute einen großen Einfluss auf die anderen Methoden. Die Verwendung<br />

einer Hierarchie, sowie die Definition von temporalen Relationen, legen den Grundstock<br />

für die weiteren Arbeiten.<br />

Goals, Operators, Methods, and Selection rules (GOMS)<br />

Eine der ersten Methoden zur Modellierung von Aufgaben mittels hierarchischer Zerlegung<br />

speziell im HCI-Bereich war GOMS (Goals, Operators, Methods, and Selection<br />

rules), vorgestellt von Card u. a. [1983].<br />

In GOMS werden die Aufgaben als Ziele definiert, welche hierarchisch in Unterziele<br />

aufgeteilt werden können. Methoden beschreiben das Verfahren zum Erreichen eines<br />

Ziels, sie werden als Folge von Operatoren und Unterziele eines Ziels definiert, welche<br />

sequenziell ausgeführt werden müssen. Operatoren beschreiben elementare motorische<br />

oder kognitive Aktionen des Benutzers, sie dienen bei GOMS dazu, die Aktionen<br />

des Benutzers als Teilschritt zur Erfüllung des Zieles zu modellieren. Methoden können<br />

auch noch einfache Kontrollanweisungen enthalten, z. B. if für einen Operator, der<br />

nur bedingt ausgeführt wird oder repeat until für einen Operator, der in einer Schleife<br />

ausgeführt wird. Die Kontrollanweisungen werden bei GOMS hinter den Operatoren<br />

platziert. Als letztes Element existieren noch Auswahlregeln, mit deren Hilfe der Benutzer<br />

einen Operator aus einer Menge von Operatoren selektieren kann. Folgendes<br />

Beispiel verdeutlicht die Struktur eines GOMS-Aufgabenmodells:<br />

Listing 3.4: GOMS Beispiel – Übertrage Änderungen aus einem Manuskript<br />

GOAL: bearbeite Manuskript<br />

GOAL: bearbeite Änderung(repeat until keine mehr verfügbar)<br />

GOAL: hole Änderungswunsch<br />

rufe nächste Seite auf (if am Ende der Manuskriptseite)<br />

suche nächsten Änderungswunsch<br />

GOAL: führe Änderungswunsch durch<br />

GOAL: suche Zeile<br />

[select: benutze Suchfunktion<br />

benutze Scrollfunktion]<br />

GOAL: Änderung durchführen<br />

[select: ersetze den Text<br />

verändere den Text]<br />

überprüfe Änderungen<br />

Die Hierarchie wird durch die Einrückungstiefe der Ziele beschrieben. Das Hauptziel<br />

bearbeite Manuskript soll von einem Benutzer erfüllt werden, der zu einem elektronischen<br />

Text ein handschriftlich korrigiertes Manuskript mit Änderungswünschen erhalten<br />

hat, die er nun in den Text einpflegen soll. Dazu wird das Ziel bearbeite Änderungswunsch<br />

wiederholt, bis keine mehr verfügbar sind. Dieses Ziel besteht aus den beiden<br />

Unterzielen hole Änderungswunsch (aus dem Manuskript) und führe Änderungswunsch<br />

(im elektronischen Text) durch. Das erste Ziel besteht aus den beiden Operatoren rufe<br />

nächste Seite auf (falls der Benutzer sich gerade am Ende einer Seite befindet) und<br />

41


3 Modellbasierte Entwicklung<br />

suche nächsten Änderungswunsch. Im zweiten Ziel befinden sich noch mehrere Auswahlregeln,<br />

die dem Nutzer die Wahl lassen, z. B. entweder mit der Suchfunktion oder<br />

über das Scrollen auf eine Zeile im Text zu gelangen.<br />

Das Ziel von GOMS ist, die internen kognitiven Prozesse einer Person bei der Ausführung<br />

einer Aufgabe zu verstehen. Die beschriebenen Operatoren und Ziele sind daher<br />

auch sehr grobgranular. Für die Aufgabenanalyse eignet sich dieses Modell deshalb nur<br />

bedingt, denn dort wird das Verhalten des Benutzers von außen betrachtet, es wird das<br />

analysiert, wie der Benutzer eine Aufgabe ausführt, weniger interessiert, warum er es<br />

tut [Dix u. a., 1993]. Ein weiterer Kritikpunkt an GOMS bezüglich Aufgabenmodellierung<br />

ist das Fehlen von Möglichkeiten, nicht-sequenzielle Abläufe, wie z. B. Nebenläufigkeit,<br />

zu modellieren.<br />

GOMS-Modelle werden deshalb auch seltener zur Erzeugung von Benutzerschnittstellen,<br />

sondern häufiger zur Analyse des Verhaltens einer Benutzergruppe auf einer<br />

bestehenden Anwendung verwendet, z. B. um Aussagen über die Häufigkeit einer Selektionsoption<br />

zu treffen oder um die durchschnittliche Bearbeitungszeit eines Operators<br />

zu ermitteln.<br />

Task Knowledge Structures (TKS)<br />

Die Task Knowledge Structures von Johnson u. a. [1988] stellen den Prozess der Erstellung<br />

eines Aufgabenmodells in den Vordergrund. Während die hierarchische Aufgabenzerlegung<br />

und die temporalen Relationen von TKS sich klar an HTA orientieren,<br />

wurde für die Analyse der Aufgaben eine umfangreiche Methodik entwickelt, die auch<br />

rollenspezifische (Wer darf eine Aufgabe ausführen?) und objektspezifische (Welche<br />

Objekte werden zur Ausführung einer Aufgabe benötigt?) Elemente enthält.<br />

Für unsere weitere Arbeit interessiert uns weniger die Notation der Aufgabenmodelle<br />

in TKS, sondern vielmehr der Analyseprozess. Angelehnt an die Zusammenfassung<br />

von Jonassen u. a. [1999], lässt sich der Prozess der Aufgabenanalyse von TKS folgendermaßen<br />

beschreiben:<br />

42<br />

1. Informationen über die zu bewältigende Aufgabe sammeln<br />

a) Personen im Kontext der Aufgabe beobachten<br />

Personen von außen beobachten, wie und mit welchen Hilfsmitteln sie eine<br />

Aufgabe erfüllen.<br />

b) Personen befragen<br />

Eine Befragung der Personen durchführen, um ihre Überlegungen während<br />

der Erfüllung einer Aufgabe festzuhalten.<br />

c) eventuell Schritte wiederholen<br />

2. Identifizierung der Wissensbereiche, die zur Erfüllung einer Aufgabe notwendig<br />

sind<br />

a) Identifizierung der hierarchischen Ziele<br />

Identifizierung der Ziele und Unterziele durch Befragung der Personen, Analyse<br />

von Handbüchern.


3.4 Aufgabenmodellierung<br />

b) Identifizierung von Methoden<br />

Befragung von Personen zu den Strategien, die sie zur Zielerreichung einsetzen.<br />

c) Identifizierung von Objekten<br />

Objekte, die bei der Ausführung der Aufgaben involviert sind, identifizieren<br />

und mit den Methoden in Verbindung bringen. „Um die Aufgabe Rad<br />

wechseln zu erfüllen, habe ich mit dem Schraubenschlüssel die vier Muttern<br />

gelöst.“<br />

3. Identifizierung repräsentativer Eigenschaften von Aufgaben<br />

a) Wichtigkeit der Objekte aus 2c festlegen<br />

Die Menge der Objekte nach Relevanz für die Aufgabenerfüllung bewerten.<br />

Von mehreren Personen identifizierte Objekte sind wahrscheinlich wichtiger<br />

für die Aufgabenerfüllung als einmalig genannte Objekte.<br />

b) Wichtigkeit der Methoden aus 2b festlegen<br />

Die Menge der Methoden nach Relevanz für die Aufgabenerfüllung bewerten.<br />

4. Konstruktion des Aufgabenmodells<br />

a) Konstruktion einer Zielhierarchie<br />

Die Ziele in eine Zielhierarchie überführen, die temporalen Operatoren definieren.<br />

b) Beschreiben der Methoden auf unterster Ebene Die Ziele der untersten Hierarchieebene<br />

werden mit Methoden versehen, um diese Ziele zu erfüllen. In<br />

der Hierarchie höhere Ziele sind Kompositionen der Blätter der Zielhierarchie.<br />

c) Beschreiben der benutzten Objekte Zusätzlich zu den Methoden werden die<br />

Ziele noch mit den zur Zielerfüllung verwendeten Objekten versehen.<br />

5. Vermittlung und Validierung des Modells.<br />

Einfluss auf die weiteren Arbeiten hat TKS vor allem durch die methodische Analyse<br />

eines realen Prozesses. Auch wenn die resultierenden Aufgabenmodelle bei TKS nicht<br />

direkt zur Erzeugung einer Benutzerschnittstelle geeignet sind, kann in den aktuellen<br />

Ansätzen mit dem (eventuell angepassten) TKS-Analyseprozess ein initiales Aufgabenmodell<br />

konstruiert werden.<br />

Model for Activity Description / Méthode Analytique de Description des tâches (MAD)<br />

Mit dem Model for Activity Description (ursprünglich hieß die Methode auf französisch<br />

„Méthode Analytique de Description des tâches“) formulierten Scapin und Pierret-<br />

Goldbreich [1989] eine Notation für hierarchische Aufgabenmodelle, welche die hierarchische<br />

Aufgabenzerlegung von HTA übernimmt, anstelle der Pläne aber sogenannte<br />

Konstruktoren einführt.<br />

43


3 Modellbasierte Entwicklung<br />

In MAD existieren zwei Arten von Aufgaben: komplexe Aufgaben und elementare<br />

Aufgaben. Elementare Aufgaben sind Blattaufgaben der Aufgabenhierarchie und werden<br />

nicht weiter unterteilt. Komplexe Aufgaben sind Aufgaben, die in Unteraufgaben<br />

zerlegt werden, und welche, ähnlich wie in HTA, einen temporalen Operator, hier Konstruktor<br />

genannt, für die Unteraufgaben definieren müssen. Folgende Konstruktoren<br />

stehen zur Verfügung:<br />

Konstruktor Definition<br />

Tabelle 3.1: MAD – Konstruktoren<br />

SEQ Die Aufgaben werden in der angegebenen Reihenfolge ausgeführt<br />

SET Die Aufgaben werden in unbestimmter Reihenfolge ausgeführt<br />

SIM Die Aufgaben werden parallel ausgeführt<br />

ALT Von den Aufgaben wird nur eine ausgeführt<br />

COND Die Aufgabe wird nur ausgeführt, wenn die Bedingung erfüllt ist<br />

OPT Die Aufgabe kann optional ausgeführt werden<br />

LOOP Die Aufgabe wird mehrfach ausgeführt<br />

Im Gegensatz zu HTA kann eine Aufgabe nur einen gemeinsamen Konstruktor für alle<br />

Unteraufgaben verwenden. Bei der Erstellung der Aufgabenhierarchie ist dieser Umstand<br />

zu beachten, eventuell müssen zusätzliche Hierarchieebenen eingefügt werden,<br />

zum Beispiel, wenn ein Teil der Unteraufgaben sequenziell und ein Teil gleichzeitig ausgeführt<br />

werden soll.<br />

Jede Aufgabe besitzt bei MAD Eigenschaften, die die Aufgabe formalisierter als eine<br />

textuelle Beschreibung definieren. Folgende Eigenschaften sind u. a. vorgesehen:<br />

Eigenschaft Definition<br />

Tabelle 3.2: MAD – Aufgabeneigenschaften<br />

Vorbedingungen Bedingungen, die erfüllt sein müssen, um die Aufgabe anzufangen.<br />

Nachbedingungen Bedingung, die erfüllt sein müssen, um die Aufgabe zu beenden.<br />

Name Name der Aufgabe (text)<br />

Ziel Ziel, das durch die Aufgabenerfüllung erreicht wird (text)<br />

Unterbrechbar Darf die Aufgabe durch andere Aufgaben unterbrochen werden?<br />

(ja,nein)<br />

Modalität Wie wird die Aufgabe ausgeführt? (manuell,automatisch,interaktiv)<br />

Typ Welche Leistung muss der Benutzer erbringen? (kognitiv,sensomotorisch)<br />

44<br />

(Tabelle wird auf der nächsten Seite fortgesetzt)


(fortgesetzt von der vorigen Seite)<br />

Eigenschaft Definition<br />

3.4 Aufgabenmodellierung<br />

Erfahrung Welche Erfahrung muss der Benutzer besitzen? (Anfänger,<br />

Durchschnitt, Experte)<br />

MAD modelliert zwar keine Rollen oder Objekte, dafür werden die Aufgaben mit hohem<br />

Detaillierungsgrad beschrieben, andere Methoden verwenden meist nur textuelle<br />

Beschreibungen. Wenn z. B. eine Unteraufgabe in einer Sequenz ausgeführt wird, dann<br />

kann die Vorbedingung – zusätzlich zu der impliziten Bedingung, dass die Unteraufgabe<br />

erst nach der vorherigen Unteraufgabe gestartet wird – weitere Einschränkungen<br />

angeben. Die Modalität gibt an, ob eine Unteraufgabe in einer Sequenz automatisch<br />

gestartet wird, wenn die vorherige Unteraufgabe beendet wurde.<br />

Die formalisierten Eigenschaften sind z. B. bei der Simulation des Aufgabenmodells<br />

durch ein Programm sinnvoll, dieses kann die Informationen auswerten und das Aufgabenmodell<br />

besser simulieren, als wenn nur eine nicht interpretierbare textuelle Beschreibung<br />

verfügbar wäre.<br />

User Action Notation (UAN)<br />

Die User Action Notation wurde von Hix und Hartson [1993] entwickelt, um die Interaktion<br />

eines Benutzers mit einer grafischen Benutzerschnittstelle zu modellieren. Sie ist<br />

stark an das Grundkonzept moderner grafischer Benutzeroberflächen geknüpft 19 und<br />

kann auch nur die Aktionen modellieren, die der Benutzer auf einer solchen Benutzerschnittstelle<br />

auslösen kann. Für uns ist die UAN interessant, weil sie Konzepte der<br />

hierarchischen Aufgabenzerlegung und der temporalen Relationen verwendet, um die<br />

Interaktionen zu beschreiben. UAN-Modelle beschreiben die Aktionen des Benutzers<br />

und die Reaktionen des Systems (reduziert auf die Ausgaben der Benutzerschnittstelle)<br />

beim gemeinsamen Ausführen einer Aufgabe.<br />

Elementare Aufgaben werden in der UAN in einer dreispaltigen Tabelle definiert:<br />

die erste Spalte enthält die formalisierten Benutzeraktionen, die zweite Spalte die Systemreaktionen<br />

und die dritte Spalte beschreibt den aufgrund der Interaktion veränderten<br />

Systemzustand. Für die Benutzeraktionen sieht die Spezifikation folgende Elemente<br />

vor:<br />

Symbol Definition<br />

∼ Bewegen des Mauszeigers<br />

Tabelle 3.3: UAN – Benutzeraktionen<br />

∼ [X ] Bewegen des Mauszeigers in den Kontext des Objektes X , z. B. der<br />

Mauszeiger wird auf ein Icon bewegt.<br />

(Tabelle wird auf der nächsten Seite fortgesetzt)<br />

19 Auch bekannt unter dem WIMP-Paradigma, benannt nach den englischen Begriffen der vorherrschenden Elemente:<br />

Window (Fenster), Icon (Piktogramm), Menu (Menüs) und Pointer (Mauszeiger).<br />

45


3 Modellbasierte Entwicklung<br />

(fortgesetzt von der vorigen Seite)<br />

Symbol Definition<br />

[X ] ∼ Bewegen des Mauszeigers aus dem Kontext des Objektes X .<br />

∼ [x, y]∗ Bewegen des Mauszeigers um eine beliebige Strecke.<br />

M∨ Drücken der Maustaste<br />

M∧ Maustaste loslassen<br />

M ∨ ∧ Mausclick<br />

K ′ xyz ′<br />

Eingabe der Zeichenkette xyz<br />

Für die Systemreaktionen sieht die Spezifikation folgende Elemente vor:<br />

Symbol Definition<br />

Tabelle 3.4: UAN – Systemreaktionen<br />

X ! Objekt X wird selektiert, z. B. ein Icon wird hervorgehoben.<br />

X −! Objekt X wird deselektiert.<br />

X >∼ Objekt X wird mit dem Mauszeiger gezogen<br />

Die Änderungen am Systemzustand in der dritten Spalte werden nicht weiter formalisiert.<br />

Folgendes Beispiel verdeutlicht die Definition einer Aufgabe in der UAN:<br />

Aufgabe: lösche Datei<br />

Tabelle 3.5: UAN – Beispiel<br />

Benutzeraktion Systemreaktion Systemzustand<br />

∼ [dateisymbol]M∨ dateisymbol! selektiert = datei<br />

∼ [x, y]∗ dateisymbol >∼<br />

∼ [muelleimersymbol] muelleimersymbol!<br />

M∧ muelleimersymbol−! lösche(selektiert)<br />

Aufgabendefinitionen in UAN werden wie geschriebene Texte interpretiert, zeilenweise<br />

von links nach rechts. Die Aufgabe lösche Datei beschreibt eine Interaktion, um eine<br />

Datei mittels der Maus in den Mülleimer zu verschieben. Die Aufgabe startet mit der<br />

Benutzeraktion „bewege Mauszeiger auf Dateisymbol und drücke die Maustaste“. Als<br />

Reaktion markiert das System das Dateisymbol, intern verändert es den Systemzustand,<br />

indem die Variable selektiert auf die selektierte Datei gesetzt wird. In der nächsten Zeile<br />

verschiebt der Benutzer die Maus bei immer noch gedrückter Maustaste. Das System<br />

sorgt dafür, dass das Dateisymbol mit dem Mauszeiger verschoben wird. In der nächsten<br />

Zeile bewegt der Benutzer den Mauszeiger auf das Mülleimersymbol, das System hebt<br />

46


3.4 Aufgabenmodellierung<br />

jetzt auch den Mülleimer hervor. In der letzten Zeile lässt der Benutzer die Maustaste<br />

los, das System entfernt die Hervorhebung des Mülleimers und löscht die selektierte<br />

Datei.<br />

Dieses vereinfachte Beispiel zeigt die Definition einer atomaren Aufgabe. Zusammengesetzte<br />

Aufgaben erlaubt die UAN über eine Reihe von temporalen Operatoren<br />

(siehe folgende Tabelle 3.6), mit denen sich zusammengesetzte Aufgaben erstellen lassen.<br />

So könnte eine komplexe Aufgabe kopiere Dateien beispielsweise folgendermaßen<br />

zusammengesetzt werden: ((selektiereDatei + ) (zuWenigSpeicherplatzWarnung →<br />

fügeDateienInOrdnerEin)). Der Benutzer selektiert zuerst eine oder mehrere Dateien,<br />

welche danach in ein vom Benutzer selektiertes Zielverzeichnis kopiert werden. Diese<br />

Aufgabe kann von der Aufgabe unterbrochen werden, wenn zu wenig Speicherplatz<br />

zum Kopieren zur Verfügung steht.<br />

Operator Definition<br />

Tabelle 3.6: UAN – temporale Operationen<br />

(U1U2) Sequenz von U1 und U2: U2 kann erst begonnen werden, wenn U1 ausgeführt<br />

wurde.<br />

(U ∗ ) Iteration mit beliebig vielen Ausführungen von U: n Wiederholungen<br />

von U mit 0 ≤ n ≤ ∞.<br />

(U + ) Iteration mit mindestens einer Ausführung von U: n Wiederholungen<br />

von U mit 1 ≤ n ≤ ∞.<br />

(U n ) Iteration mit festgelegter Anzahl an Ausführungen von U: U muss nmal<br />

wiederholt werden.<br />

{U} Optionale Ausführung: Aufgabe U kann, muss aber nicht ausgeführt<br />

werden.<br />

(U1|U2) Auswahl: Entweder U1 oder U2 werden ausgeführt.<br />

(U1&U2) Beliebige Ausführung: U1 und U2 können in beliebiger Reihenfolge<br />

ausgeführt werden.<br />

(U1 → U2) Unterbrechbarkeit: Aufgabe U1 kann Aufgabe U2 unterbrechen. Nach<br />

Beendigung von U1 kann U2 fortgesetzt werden.<br />

(U1 ⇔ U2) Gegenseitige Unterbrechbarkeit: Aufgabe U1 kann Aufgabe U2 und<br />

Aufgabe U2 kann Aufgabe U1 unterbrechen.<br />

< U > nicht unterbrechbare Aufgabe: Die Aufgabe U darf nicht durch eine<br />

andere Aufgabe unterbrochen werden.<br />

(U1||U2) Nebenläufigkeit: Aufgabe U1 und Aufgabe U2 können gleichzeitig und<br />

unabhängig voneinander ausgeführt werden.<br />

Aufgrund der Festlegung auf Interaktionen einer grafischen Benutzeroberfläche eignet<br />

sich die UAN kaum für die Aufgabenanalyse im klassischen Sinn. Allerdings definiert die<br />

UAN sehr feingranulare temporale Operatoren, die die Definition der Operatoren bei<br />

47


3 Modellbasierte Entwicklung<br />

der HTA wesentlich erweitern und in den nachfolgenden Methoden wieder aufgegriffen<br />

werden.<br />

Concurrent Task Trees (CTT)<br />

Die bisher vorgestellten Methoden liefern eine textuelle Beschreibung der Aufgabenhierarchien,<br />

welche zwar eine hohe Ausdruckskraft besitzen, aber deren Abläufe nicht<br />

leicht erfassbar sind. UAN wurde für die textuelle Notation kritisiert, weil weder die<br />

Aufgabenbeschreibungen, noch die Hierarchien leicht lesbar sind [Paternò, 1999]. Grafische<br />

Notationen können die gleiche Mächtigkeit besitzen, erleichtern aber durch die<br />

Verwendung von grafischer Gestaltung die Erfassung der Gesamtsicht. Auch können<br />

einfacher benachbarte Aufgaben betrachtet werden (Unteraufgaben, Elternaufgabe<br />

oder Aufgaben der gleichen Hierarchieebene), um den Kontext einer Aufgabe zu ermitteln.<br />

Die Concurrent Task Trees von Paternò u. a. [1997] setzen aus diesem Grund<br />

konsequent auf eine grafische Notation.<br />

Die Beziehungen der Aufgaben untereinander basieren auf LOTOS, einer formalen<br />

Beschreibungssprache, die ursprünglich für Protokollspezifikationen eingesetzt wurde<br />

(siehe Standard ISO 8807 [1989]). Die Elemente von LOTOS ermöglichen, das beobachtbare<br />

Verhalten eines Systems ohne Kenntnis der internen Zustände zu beschreiben. CTT<br />

verwendet die von LOTOS definierten temporalen Operatoren, welche wir in ähnlicher<br />

Form auch bereits bei den anderen Ansätzen kennengelernt haben. Im Gegensatz zu<br />

den anderen Methoden, werden bei CTT mit einem temporalen Operator nicht die<br />

Beziehung der Unteraufgaben zu einer Oberaufgabe beschrieben, sondern die Beziehung<br />

von zwei benachbarten Unteraufgaben. Die folgende Tabelle listet die verfügbaren<br />

Operatoren auf:<br />

Operator Definition<br />

U1[]U2<br />

U1 >> U2<br />

U1[] >> U2<br />

U1| = |U2<br />

U1|||U2<br />

48<br />

Tabelle 3.7: CTT – temporale Operationen<br />

Auswahl: Aus den Aufgaben U1 und U2 kann nur eine ausgewählt und<br />

ausgeführt werden.<br />

Sequenz: Die Aufgabe U2 kann erst ausgeführt werden, wenn die Aufgabe<br />

U1 beendet wurde.<br />

Sequenz mit Informationsaustausch: Die Aufgabe U2 kann erst nach<br />

U1 ausgeführt werden, bekommt allerdings Informationen von dieser<br />

übermittelt, z. B. die Interaktionsaufgabe Mail schreiben liefert den<br />

Text an die Systemaufgabe Mail verschicken weiter.<br />

beliebige Reihenfolge: Die Aufgaben müssen nacheinander, aber in<br />

beliebiger Reihenfolge ausgeführt werden.<br />

Nebenläufigkeit: Die Aufgaben U1 und U2 können in beliebiger Reihenfolge<br />

parallel ausgeführt werden.<br />

(Tabelle wird auf der nächsten Seite fortgesetzt)


(fortgesetzt von der vorigen Seite)<br />

Operator Definition<br />

U1|[]|U2<br />

U1[> U2<br />

U1| > U2<br />

3.4 Aufgabenmodellierung<br />

Nebenläufigkeit mit Informationsaustausch: Die Aufgaben U1 und U2<br />

können gleichzeitig ausgeführt werden. Beide Aufgaben beeinflussen<br />

sich gegenseitig, z. B. eine Länderauswahl und die Anzeige der Versandkosten.<br />

Deaktivierung: Die Aufgabe U1 kann ausgeführt werden, solange U2<br />

noch nicht ausgeführt wurde, z. B. die Aufgabe durchlesen einer Webseite<br />

und die Aufgabe Auswahl eines Links, welche auf eine andere<br />

Webseite führt.<br />

Unterbrechung: Die Ausführung der Aufgabe U1 kann durch eine Aufgabe<br />

U2 unterbrochen werden. Wenn U2 beendet wurde, kann U1 fortgesetzt<br />

werden, z. B. ein modaler Dialog, der die Anwendung unterbricht.<br />

Aufgaben werden bei der grafischen CTT-Notation in fünf verschiedene Kategorien<br />

eingeteilt, welche über Symbole repräsentiert werden. Aus der Vogelperspektive können<br />

bei einem großen Aufgabenmodell die Symbole einfacher erkannt werden als die<br />

Bezeichnungen der Aufgaben. Sie unterstützen damit den Modellierer beim Navigieren<br />

oder Erfassen der Aufgabenhierarchie.<br />

Symbol Definition<br />

Tabelle 3.8: CTT – Aufgabenkategorien<br />

Benutzeraufgabe: Aufgaben, die der Benutzer ohne Beteiligung der<br />

Anwendung durchführt. Dies sind z. B. kognitive Prozesse zur Entscheidungsfindung.<br />

Systemaufgabe: Aufgaben, die die Anwendung ohne Beteiligung des<br />

Benutzers durchführt, z. B. Daten zur Ausgabe aufbereiten, Emails versenden<br />

oder Transaktionen durchführen.<br />

Abstrakte Aufgabe: Eine Aufgabe, die in Unteraufgaben mit unterschiedlichen<br />

Aufgabentypen zerlegt wird, muss diese Typen in sich vereinen.<br />

Die Aufgabe wird deshalb als abstrakt bezeichnet.<br />

Interaktionsaufgabe: Aufgaben, die der Benutzer in Interaktion mit<br />

dem System ausführt, z. B. Auswahl aus einer Liste, Bearbeitung eines<br />

Textes oder drücken eines Knopfes.<br />

Kooperationsaufgabe: Aufgaben, die von mehreren Benutzern in Zusammenarbeit<br />

ausgeführt werden.<br />

Die Einordnung einer Aufgabe in eine Kategorie hängt von den Kategorien der Unteraufgaben<br />

in der Aufgabenhierarchie ab. Wenn alle Unteraufgaben aus der gleichen Ka-<br />

49


3 Modellbasierte Entwicklung<br />

tegorie stammen, dann muss auch die Oberaufgabe zu dieser Kategorie gehören. Wenn<br />

die Unteraufgaben aus unterschiedlichen Kategorien stammen, dann muss die Oberaufgabe<br />

zur abstrakten Kategorie zählen. Blattaufgaben sollten nicht abstrakt sein, ihre<br />

Kategorie wird anhand der Aufgabenanalyse bestimmt.<br />

Die CTT-Notation sieht auch eine weitere Unterkategorisierung vor, so kann eine<br />

Aufgabe der Kategorie Benutzeraufgabe beispielsweise in eine der Unterkategorien<br />

Planen, Vergleich oder Problem lösen zerlegt werden. Da diese Unterkategorien aber<br />

nicht weiter verwendet werden und auch kein eigenes Symbol erhalten, werden wir sie<br />

auch nicht weiter betrachten.<br />

Die Aufgaben werden in der CTT-Notation mit Eigenschaften versehen, um sie formal<br />

zu beschreiben. Dabei orientieren sie sich an den Aufgabeneigenschaften anderer<br />

Notationen, z. B. MAD.<br />

Eigenschaft Definition<br />

U ∗<br />

Tabelle 3.9: CTT – Aufgabeneigenschaften<br />

Iteration: Die Aufgabe U wird wiederholt, bis sie von einer anderen<br />

Aufgabe unterbrochen wird. Diese Aufgabeneigenschaft ist nur mit<br />

dem Deaktivierungsoperator ([>) sinnvoll einsetzbar, weil sonst die<br />

Iteration niemals beendet wird.<br />

U(n) festgelegte Iterationen: Die Aufgabe U wird n mal wiederholt.<br />

[U] optionale Aufgabe: Die Aufgabe U kann übersprungen werden.<br />

Name Name der Aufgabe, der in der grafischen Darstellung unter dem Aufgabensymbol<br />

dargestellt wird.<br />

Vorbedingungen Bedingungen, die erfüllt sein müssen, um die Aufgabe auszuführen.<br />

Objekte Objekte, die zur Aufgabenausführung verwendet werden.<br />

Abbildung 3.3 zeigt ein Beispiel in der CTT-Notation (aus [Paternò, 2003]), welches<br />

den Prozess einer Hotelzimmerreservierung als Aufgabenhierarchie abbildet. Die Wurzelaufgabe<br />

HotelReservation wird aufgeteilt in die beiden Unteraufgaben SelectRoom-<br />

Type und MakeReservation, welche in einer Sequenz mit Informationsaustausch ausgeführt<br />

werden. Die erste Unteraufgabe wird in eine Selektion zerlegt, bei der der Benutzer<br />

sich entscheiden muss, ob ein Einzel- oder Doppelzimmer reserviert werden soll.<br />

Beides sind Benutzeraufgaben, deshalb wird auch SelectRoomType zu einer Benutzeraufgabe.<br />

Im rechten Teil des Aufgabenmodells wird der gewählte Zimmertyp reserviert,<br />

indem zuerst die Verfügbarkeit vom System angezeigt wird und dann vom Benutzer ein<br />

Zimmer ausgewählt wird, wiederum als Sequenz mit Informationsaustausch.<br />

In CTT-Aufgabenmodellen können Unteraufgaben der gleichen Oberaufgabe mit unterschiedlichen<br />

temporalen Operatoren verknüpft werden, weil die CTT-Notation nur<br />

binäre Operatoren vorsieht 20 . Dies hat Vorteile bezüglich der Flexibilität (Unteraufga-<br />

20 Im Gegensatz zu den anderen Ansätzen, bei denen der Operator der Oberaufgabe sich auf alle Unteraufgaben<br />

beziehen und deshalb n-är sind.<br />

50


Abbildung 3.3: CTT – Beispiel [Paternò, 2003]<br />

3.4 Aufgabenmodellierung<br />

ben können temporal gemischt ausgeführt werden und müssen nicht erst temporal sortiert<br />

und hierarchisiert werden), aber auch Nachteile (eine Auswahl mit mehr als zwei<br />

Aufgaben muss auf mehrere Hierarchieebenen verteilt werden).<br />

3.4.3 Gemeinsamkeiten<br />

Die verschiedenen Ansätze unterscheiden sich in ihren Zielsetzungen, nicht bei allen<br />

steht die Erzeugung einer Benutzerschnittstelle im Vordergrund. Die Zielsetzungen umfassen<br />

nach [Limbourg u. a., 2001] folgende Aspekte:<br />

Aufgabenmodelle sollen Aussagen über die Benutzbarkeit treffen (z. B. in HTA).<br />

Das Verhalten von Benutzern bei der Verwendung einer Anwendung soll analysiert<br />

werden (z. B. in GOMS).<br />

Aufgabenmodelle sollen den Entwurf einer Anwendung unterstützen durch: detaillierte<br />

Aufgabenhierarchien, verwendete Objekte, etc. (z. B. in TKS, CTT).<br />

Es soll ein Prototyp der Benutzerschnittstelle generiert werden (z. B. in CTT).<br />

Allen vorgestellten Methoden ist gemein, dass sie die Aufgaben in Unteraufgaben zerlegen<br />

und dass sie eine zeitliche Anordnung der Unteraufgaben vornehmen. Die Anzahl<br />

und Semantik der temporalen Operatoren variiert stark, folgende Tabelle fasst die Gemeinsamkeiten<br />

und Unterschiede zusammen:<br />

Tabelle 3.10: Vergleich der temporalen Operatoren<br />

Operator HTA GOMS TKS MAD UAN CTT<br />

Sequenz <br />

beliebige Sequenz <br />

Auswahl <br />

(Tabelle wird auf der nächsten Seite fortgesetzt)<br />

51


3 Modellbasierte Entwicklung<br />

(fortgesetzt von der vorigen Seite)<br />

Operator HTA GOMS TKS MAD UAN CTT<br />

Nebenläufigkeit <br />

Unterbrechbarkeit <br />

Auch ein Vergleich der Aufgabeneigenschaften ist sinnvoll. Die Methoden definieren<br />

für die Aufgabenanalyse ähnliche Eigenschaften, um eine Aufgabe zu spezifizieren. Die<br />

folgende Tabelle fasst dies zusammen:<br />

Tabelle 3.11: Vergleich der Aufgabeneigenschaften<br />

Eigenschaft HTA GOMS TKS MAD UAN CTT<br />

Name <br />

Optionalität <br />

Iteration <br />

Vorbedingungen <br />

Aufgabentyp <br />

Aufgabenobjekte <br />

Benutzerrolle <br />

Die vorgestellten Methoden der Aufgabenanalyse haben trotz ihrer Unterschiede<br />

viele Gemeinsamkeiten. Wenn wir im weiteren Verlauf von einem Aufgabenmodell<br />

sprechen, so beziehen wir uns auf ein allgemeines hierarchisches Aufgabenmodell mit<br />

temporalen Relationen, welches alle Methoden liefern können. Die CTT-Notation sticht<br />

heraus, weil sie alle untersuchten Operatoren und Eigenschaften unterstützt. Bei der in<br />

dieser Arbeit nicht weiter betrachteten Werkzeugunterstützung hat die CTT-Notation<br />

ebenfalls Vorteile, zwei Diagrammeditoren unterstützen den Modellierer bei der Arbeit:<br />

ConcurTaskTreeEnvironment (CTTE) von Mori u. a. [2002] und Teresa von Paternò<br />

u. a. [2008].<br />

3.5 Dialogmodellierung<br />

3.5.1 Einleitung<br />

Im Entwicklungsprozess folgt auf die Aufgabenmodellierung die Dialogmodellierung,<br />

welche Gegenstand dieses Abschnitts ist. Zuerst werden wir den Dialogbegriff definieren<br />

und die möglichen Notationen eines Dialogmodells erörtern. Am Schluss steht eine<br />

Betrachtung, wie ein Aufgabenmodell in ein Dialogmodell umgewandelt werden kann.<br />

52


3.5.2 Definition<br />

3.5 Dialogmodellierung<br />

Laut Dix u. a. [1993] ist ein Dialog, im Gegensatz zu einem Monolog, eine Konversation<br />

zwischen zwei oder mehr Beteiligten, mit dem Ziel eine Aufgabe oder Konflikt<br />

zu lösen. Bei dem Entwurf von Benutzerschnittstellen wird eine engere Definition des<br />

Dialogs verwendet: Er beschreibt die Struktur der Konversation zwischen dem Benutzer<br />

einer Anwendung und der Anwendung selbst. Wichtig ist der Strukturbegriff, ein<br />

Dialog beschreibt nur den Ablauf der Interaktionen, nicht wie Ein- und Ausgaben der<br />

Interaktionen präsentiert werden.<br />

Ein Dialog beschreibt die Konversation eines Benutzers mit einer Anwendung, welche<br />

aus einer Folge von Dialogschritten besteht:<br />

1. Der Benutzer tätigt eine Eingabe<br />

2. Die Anwendung generiert eine Ausgabe<br />

Im idealen Fall kann die Anwendung auf eine natürlichsprachige Anfrage des Benutzers<br />

antworten, z. B. können in Kinofilmen per Sprachsteuerung ganze Raumschiffe gesteuert<br />

werden. Dies ist Forschungsgegenstand der künstlichen Intelligenz [Helbig, 1996],<br />

wir beschränken uns auf die realen Dialogmöglichkeiten eines Benutzers mit einer Web-<br />

Anwendung. In diesem Fall können wir die oben genannte Folge von Dialogschritten<br />

detaillierter spezifizieren:<br />

1. Der Benutzer tätigt eine Eingabe und sendet eine Anfrage an die Anwendung<br />

2. Die Anwendung verarbeitet die Anfrage und ändert den internen Zustand basierend<br />

auf der Eingabe.<br />

3. Die Anwendung generiert eine Ausgabe basierend auf dem neuen internen Zustand.<br />

4. Der Benutzer verarbeitet die Ausgabe der Anwendung und fängt den nächsten<br />

Dialogschritt bei Punkt 1 an.<br />

In herkömmlichen Anwendungen, die keine Trennung von der Struktur der Konversation<br />

und der Anwendungslogik vorsehen, ist der Dialog implizit im Programm enthalten.<br />

Mittels Sprüngen, Schleifen und Wenn-Dann-Bedingungen wird der Ablauf der<br />

Anwendung basierend auf den Eingaben des Benutzers gesteuert und eine Ausgabe<br />

generiert. Während diese Abläufe im Quelltext kleiner Anwendungen leicht zu erkennen<br />

sind, sind diese bei großen Anwendungen nicht mehr von der Anwendungslogik<br />

trennbar. Die Nachteile sind offensichtlich, eine Änderung des Dialogs ist nicht trivial<br />

durchführbar, wenn z. B. in einer Sequenz von Dialogschritten die Reihenfolge zweier<br />

Schritte vertauscht werden soll, dann zieht das tief greifende Änderungen am Quelltext<br />

nach sich. Auch eine Verifikation des Dialogs kann nicht stattfinden, z. B. um die<br />

Erreichbarkeit von Dialogschritten zu prüfen, oder um Abweichungen vom „normalen“<br />

Programmablauf bei fehlerhaften Eingaben zu testen.<br />

53


3 Modellbasierte Entwicklung<br />

authentifiziert<br />

entry / Zugang erlaubt<br />

Passwort korrekt<br />

abmelden<br />

passwort korrekt<br />

nicht authentifiziert<br />

entry / Bitte authentifizieren<br />

Passwort inkorrekt<br />

Abbildung 3.4: Dialogmodell – Beispiel<br />

Passwort falsch<br />

entry / Erneuter Versuch<br />

Passwort inkorrekt<br />

Ziel der Dialogmodellierung ist die Entwicklung eines Dialogmodells, welches die<br />

möglichen Dialogschritte eines Benutzers auf einer Anwendung vorgibt. Das Dialogmodell<br />

drückt nur die Struktur der Interaktionen aus, die Anbindung einer Benutzerschnittstelle<br />

und eines Domänenmodells muss in späteren Entwicklungsschritten folgen.<br />

Wie Dialogmodelle definiert werden können, werden wir im nächsten Abschnitt<br />

präsentieren.<br />

3.5.3 Notation<br />

Dialogmodelle können sowohl grafisch als auch textuell notiert werden. Üblicherweise<br />

werden in Dialogmodellen die Zustände des Dialogs und Transitionen zwischen Zuständen<br />

beschrieben 21 . Ein Dialogschritt ist die Transition von einem Dialogzustand in einen<br />

Folgenden.<br />

Mit einem endlichen Automaten wird der Zustandsraum der Anwendung beschrieben,<br />

durch das Hinzufügen von Transitionen kann der Modellierer den Dialog erzeugen.<br />

Zur Laufzeit würde ein Dialogschritt folgendermaßen abgearbeitet:<br />

Die Eingabe des Benutzers wird als Ereignis an den endlichen Automaten weitergeleitet,<br />

der die entsprechende Transition für den aktuellen Zustand auslösen<br />

kann.<br />

Eventuelle Vorbedingungen können den Zustandsübergang verhindern.<br />

Die Ausgabe der Anwendung wird über die Eintrittsaktion des Zielzustandes ausgelöst<br />

22 .<br />

Für die grafische Notation der Dialoge werden Zustandsübergangsdiagramme benutzt,<br />

welche endliche Automaten abbilden. Eine textuelle Darstellung ist aber beispielsweise<br />

auch über Zustandstabellen möglich.<br />

Die Abbildung 3.4 zeigt ein Beispiel als Zustandsübergangsdiagramm. Beim Aufruf<br />

der Anwendung befindet sich der endliche Automat in dem Zustand nicht authenti-<br />

21 Auf die zweite Möglichkeit, die Beschreibung des Dialogs mittels einer BNF-Grammatik, werden wir in dieser<br />

Arbeit nicht eingehen. Sie hat sich für diesen Zweck nicht durchgesetzt und wird kaum noch verwendet.<br />

22 Je nach Umsetzung des endlichen Automats kann auch eine Ausgabefunktion der Transition verwendet werden.<br />

In diesem Fall wäre das Dialogmodell flexibler, weil die Ausgabe eines Zustandes davon abhängen könnte,<br />

über welchen Zustandsübergang der Zustand erreicht wurde.<br />

54


3.5 Dialogmodellierung<br />

fiziert und erzeugt die Ausgabe Bitte authentifizieren. Wenn der Benutzer ein Passwort<br />

eingegeben hat, generiert die Anwendung entweder das Ereignis Passwort korrekt<br />

oder Passwort inkorrekt. Falls das Passwort korrekt war, wird der endliche Automat<br />

in den Zustand authentifiziert überführt und die Ausgabe Zugang erlaubt wird erzeugt.<br />

Falls das Passwort nicht korrekt war, bekommt der Benutzer die Möglichkeit, das Passwort<br />

im Zustand Passwort falsch erneut einzugeben. Ein einmal angemeldeter Benutzer<br />

kann sich über das abmelden-Ereignis in den Zustand nicht authentifiziert zurückversetzen.<br />

3.5.4 Vom Aufgabenmodell zum Dialogmodell<br />

Aufgabenmodellierung und Dialogmodellierung haben das gemeinsame Ziel, die Aufgaben<br />

und Ziele des Benutzers früh im Entwicklungsprozess zu erfassen und in geeigneten<br />

Modellen zu beschreiben. Während die Aufgabenmodelle eine abstrakte Sicht<br />

auf die Interaktion des Benutzers mit einer Anwendung bieten, orientieren sich Dialogmodelle<br />

an der Beschreibung von Dialogschritten [Betermieux u. a., 2005].<br />

Wie kann aus einem Aufgabenmodell, welches in der Analysephase angelegt wurde,<br />

ein Dialogmodell erzeugt werden? Dialogschritte können als Aufgaben betrachtet<br />

werden, z. B. könnte die Transition vom Zustand nicht authentifiziert in den Zustand<br />

authentifiziert die Umsetzung einer imaginären Aufgabe Benutzer anmelden sein. Ein<br />

Dialogmodell könnte also beispielsweise automatisch generiert werden, indem die Aufgaben<br />

zu Zustandsübergängen umgeformt werden und passende Zustände erzeugt<br />

werden. In den meisten Fällen hätte solch ein Dialogmodell aber zu viele Zustände, um<br />

praktikabel umsetzbar zu sein. Methoden wie CTT bieten eine semi-automatische Transformation,<br />

bei der Aufgaben mittels heuristischer Methoden zu einer Aufgabenmenge<br />

zusammengefasst werden, die in einem Dialogschritt gleichzeitig bearbeitet werden<br />

können [Paternò und Santoro, 2002]. Damit können Benutzer, auch ohne Nebenläufigkeit,<br />

mehrere Aufgaben in einem Dialogschritt durchführen. In weiteren Arbeiten<br />

setzen sich Luyten u. a. [2003] und Clerckx u. a. [2004] detailliert mit der Erzeugung<br />

von Aufgabenmengen zur Transformation eines Aufgabenmodells in ein Dialogmodell<br />

auseinander.<br />

Um die Definition der Dialogschritte zu erfüllen, muss jede Aufgabe aus einem Teil<br />

Benutzereingabe und einem anschließenden Teil Anwendungsausgabe bestehen. Bei<br />

Methoden, die keine Aufgabenkategorisierung vorsehen, werden die Aufgaben implizit<br />

als Doppelaufgabe betrachtet: ein Aufgabenteil wird vom Benutzer ausgeführt, ein<br />

Aufgabenteil von der Anwendung (siehe Abbildung 3.5). Bei Methoden, die eine Aufgabenkategorisierung<br />

vorsehen, lässt sich dies auch explizit in der Aufgabenhierarchie<br />

modellieren. Bei der CTT-Notation ist dabei aber zu beachten, dass die Benutzereingaben<br />

eines Dialogschritts von einer Interaktionsaufgabe 23 und die Anwendungsausgabe<br />

von einer Systemaufgabe erzeugt werden können, welche im Wechsel einen Dialog beschreiben<br />

können.<br />

23 Nicht geeignet ist die naheliegende Benutzeraufgabe, weil diese Aufgaben kategorisiert, die der Benutzer<br />

eben nicht im Dialog mit der Anwendung durchführt. Leider liefert die Interaktionsaufgabe keine klare Trennung<br />

zwischen Benutzereingabe und Anwendungsaufgabe, wünschenswert wäre eine Aufgabenkategorie, die<br />

nur die Benutzereingabe beschreibt.<br />

55


3 Modellbasierte Entwicklung<br />

Zustand 1<br />

Benutzer-<br />

Aufgabe<br />

System-<br />

Aufgabe<br />

Eingabe Ausgabe<br />

Dialogmodell<br />

Zustand 2<br />

Transition Transition<br />

Umsetzung der temporalen Operationen<br />

Aufgabenmodell<br />

Benutzer-<br />

Aufgabe<br />

Abbildung 3.5: Dialog und Aufgaben<br />

System-<br />

Aufgabe<br />

Eingabe Ausgabe<br />

Nach der allgemeinen Betrachtung der Transformation einer Aufgabenhierarchie in ein<br />

Zustandsübergangsdiagramm wollen wir in diesem Abschnitt die Umsetzung der temporalen<br />

Operatoren und der Aufgabeneigenschaften analysieren. Als Ausgangsaufgabenmodell<br />

dient uns eine Aufgabenhierarchie mit einer Wurzelaufgabe, die in die Unteraufgaben<br />

Aufgabe 1 und Aufgabe 2 zerlegt wurde. Abhängig von dem temporalen<br />

Operator der Wurzelaufgabe für die beiden Unteraufgaben ergeben sich folgende Dialogmodelle:<br />

Sequenz: In der Abbildung links ist das Zustandsübergangsdiagramm<br />

für zwei Aufgaben dargestellt, die sequenziell ausgeführt werden<br />

sollen. Für die Modellierung des Dialogs wird im Zustandsübergangs-<br />

Zustand 1 diagramm ein Startzustand eingefügt, in dem die Bearbeitung des<br />

Dialogs beginnt. Vom Startzustand Zustand 1 kann nur die Transi-<br />

Aufgabe 1<br />

tion von Aufgabe 1 einen Zustandswechsel in Zustand 2 auslösen.<br />

Zustand 2 Danach kann die Bearbeitung von Aufgabe 2 den endlichen Auto-<br />

Aufgabe 2 maten in Zustand 3 versetzen. Eine sequenzielle Bearbeitung der<br />

Aufgaben liegt also immer dann vor, wenn von den Zuständen einer<br />

Zustand 3<br />

Zustandsmenge nur eine Transition ausgeht. Die Umsetzung von optionalen<br />

und iterativen Aufgaben müssen zusätzlich in das Zustandsübergangsdiagramm<br />

eingebracht werden, diese zu den temporalen Operatoren orthogonalen<br />

Konzepte werden wir am Ende dieses Abschnitts vorstellen.<br />

56<br />

Zustand 3


3.5 Dialogmodellierung<br />

Aufgabe 1<br />

Auswahl: Zustände besitzen bei einer Auswahl, im Gegensatz<br />

zu einer Sequenz, mindestens zwei ausgehende Transitionen.<br />

In der Abbildung links ist das Zustandsübergangs-<br />

Zustand 2<br />

diagramm für eine Auswahl aus zwei Aufgaben dargestellt.<br />

Zustand 1<br />

Vom Startzustand gehen zwei Transitionen zu unterschiedlichen<br />

Zielzuständen. Je nachdem, ob Aufgabe 1 oder Auf-<br />

Aufgabe 2<br />

Zustand 3<br />

gabe 2 ausgeführt wird, wird Zustand 2 oder Zustand 3 erreicht.<br />

Eine Auswahl liegt also immer dann vor, wenn mehr<br />

als eine Transition von einem Zustand ausgeht.<br />

Nebenläufigkeit: Nebenläufigkeit<br />

ist in Zustandsübergangs-<br />

Zustand 1 Aufgabe 1 Zustand 2<br />

diagrammen schwer darstellbar,<br />

der endliche Automat darf<br />

Zustand 3<br />

Aufgabe 2<br />

Zustand 4 sich zu jeder Zeit nur in einem<br />

Zustand befinden. Bei nebenläufigen<br />

Prozessen muss das<br />

kartesische Produkt der Zustandsmengen der einzelnen nebenläufigen Prozesse gebildet<br />

werden, damit für jede Situation nur ein Zustand existiert. Die resultierende<br />

Zustandsmenge wird dabei allerdings schnell groß, bei zwei nebenläufigen Sequenzen<br />

mit jeweils drei Zuständen wären es bereits neun Zustände. In einem UML-Zustandsübergangsdiagramm<br />

lässt sich dies leichter über orthogonale Zustände ausdrücken. Ein<br />

Zustand wird in zwei unabhängige Bereiche geteilt, die Unterautomaten aufnehmen<br />

können. In der Abbildung sind zwei nebenläufige Aufgaben in einem Zustandsübergangsdiagramm<br />

dargestellt. Der unbenannte Startzustand startet zwei nebenläufige<br />

Unterautomaten, welche von Zustand 1 die Aufgabe 1 und von Zustand 3 die Aufgabe<br />

2 parallel verarbeiten können.<br />

beliebige Sequenz: Bei der beliebigen Se-<br />

Aufgabe 1<br />

Aufgabe 2 quenz ergeben sich ähnliche Probleme wie<br />

Zustand 2<br />

bei der Modellierung der Nebenläufig-<br />

Zustand 1<br />

Zustand 4 keit. Z. B. müssen wir, um eine beliebige<br />

Sequenz von drei Aufgaben (A, B, C)<br />

Zustand 3<br />

Aufgabe 2<br />

Aufgabe 1 abzubilden, Zustände für folgende erledigte<br />

Aufgabenkombinationen erstellen:<br />

{∅, A, B, C, AB, BC, AC, ABC}. Die Zustandsmenge entspricht der Potenzmenge der<br />

Aufgaben, welche eine Kardinalität von 2 n besitzt. Leider gibt es für diesen Fall keine<br />

Unterstützung seitens der UML-Notation, sodass die Zustände ausformuliert werden<br />

müssen. In der Abbildung ist ein vereinfachtes Beispiel mit nur zwei Unteraufgaben<br />

dargestellt, bei dem nur vier Zustände zu modellieren sind. Vom Startzustand aus<br />

können entweder zuerst Aufgabe 1 oder Aufgabe 2 ausgeführt werden. Je nach<br />

Wahl kann aus dem Zielzustand dann nur noch die verbleibende Aufgabe ausgeführt<br />

werden.<br />

Nach der Vorstellung der Umsetzung der temporalen Operatoren im Zustandsübergangsdiagramm,<br />

werden wir im Folgenden die Umsetzung der dazu orthogonalen Kon-<br />

57


3 Modellbasierte Entwicklung<br />

zepte der Aufgabeneigenschaften vorstellen (siehe Tabelle 3.11). Exemplarisch zeigen<br />

wir die Transformation der Eigenschaften Optionalität, Iteration und Vorbedingung.<br />

Zustand 1<br />

Aufgabe 2 Aufgabe 1<br />

Zustand 1<br />

Zustand 1<br />

Zustand 2<br />

Zustand 2<br />

Zustand 3<br />

Aufgabe 2<br />

Aufgabe 1<br />

Aufgabe 1<br />

[Vorbedingung]<br />

Optional: Bei optionalen Aufgaben wird im Zustandsübergangsdiagramm<br />

eine zusätzliche Transition zum Überspringen der Aufgabe<br />

eingefügt. In der Abbildung links ist eine Sequenz aus zwei<br />

Aufgaben abgebildet. Die erste Aufgabe soll optional sein, deshalb<br />

wurde vom Zustand 1 eine zusätzliche Transition für die Ausführung<br />

der Aufgabe 2 eingefügt. Der Benutzer hat im Zustand 1<br />

die Wahl, entweder Aufgabe 1 oder Aufgabe 2 auszuführen (und<br />

damit Aufgabe 1 zu überspringen).<br />

Iteration: Eine Aufgabe, die mehrfach ausgeführt werden kann,<br />

wird im Zustandsübergangsdiagramm als Zustand mit einer reflexiven<br />

Transition dargestellt. Weil die Ausführung der Aufgabe<br />

zurück auf den Ursprungszustand führt, kann die Aufgabe im<br />

nächsten Dialogschritt wieder ausgeführt werden.<br />

Vorbedingung: Eine Aufgabe, die nur unter Vorbedingungen<br />

ausgeführt werden kann, wird im Zustandsübergangsdiagramm<br />

über eine Transition beschrieben, die mit einem sogenannten<br />

Wächterausdruck geschützt wird. Die Transition kann nur durchlaufen<br />

werden, wenn dieser Wächterausdruck erfüllt ist. In der<br />

Abbildung ist eine Aufgabe als Transition zwischen zwei Dialogzuständen<br />

mit einer Vorbedingung der Aufgabe geschützt. Diese<br />

könnte z. B. eine Aufgabe Hotelreservierung nur zulassen, wenn<br />

Hotelzimmer zurzeit verfügbar sind.<br />

3.5.5 Fehlerquellen bei der Dialogmodellierung<br />

Bei der Erstellung eines Dialogmodells mittels eines Zustandsübergangsdiagramms muss<br />

gewährleistet sein, dass der endliche Automat auch als Dialog ausführbar ist. Dass dem<br />

nicht immer so ist, zeigen die folgenden gängigen Fehlerquellen [Dix u. a., 1993]:<br />

58<br />

nichtdeterministische Automaten: Wenn von einem Zustand zwei Transitionen zu<br />

verschiedenen Zielzuständen mit dem gleichen Ereignis (und erfüllten Vorbedingungen)<br />

existieren, dann ist bei Auslösen dieses Ereignisses der Zielzustand nichtdeterministisch.<br />

Dieses Problem kann mittels Werkzeugunterstützung beim Erstellungsprozess<br />

erkannt und vom Modellierer behoben werden.<br />

Erreichbarkeit: Alle Zustände des endlichen Automaten sollten über eine (möglichst<br />

kurze) Folge von Transitionen erreicht werden können. Eine Verletzung dieser<br />

Regel ist zum Beispiel, wenn zwei Zustandsmengen eines Dialogmodells über<br />

keine Transition verbunden sind. Weil der endliche Automat ein gerichteter Graph


3.6 Präsentationsmodellierung<br />

ist, können aber auch andere fehlende Transitionen zu einer Unerreichbarkeit eines<br />

Zustands führen. Dies kann mittels Werkzeugunterstützung überprüft werden.<br />

Konsistenz: Der Benutzer erwartet, dass Eingaben konsistent von der Anwendung<br />

verarbeitet werden. Dix u. a. [1993] geben folgendes Beispiel: In einem Texteditor<br />

rückt die Tab-Taste den Text um einige Leerzeichen ein. Wenn allerdings ein Dialogfenster<br />

geöffnet wird, kann mit der Tab-Taste zum nächsten Eingabefeld gewechselt<br />

werden. Diese Änderung der Funktionalität ist inkonsistent, weil sie vom<br />

Benutzer nicht vorhergesehen wird. Eine konsistente Benutzerführung ist nicht<br />

automatisch überprüfbar, weil hier die Semantik der Aktionen von Bedeutung ist.<br />

gefährliche Zustände: In einem Dialog sollen die Zustände grundsätzlich schnell zu<br />

erreichen sein. Es gibt allerdings Ausnahmen, wenn z. B. eine Aktion die Festplatte<br />

formatiert, so soll diese nicht versehentlich ausgelöst werden können. Zu diesem<br />

Zweck kann eine Sicherheitsabfrage der eigentlichen Aktion vorgelagert werden,<br />

ein zusätzlicher Dialogzustand, bei dem der Benutzer die Wahl hat, im nächsten<br />

Schritt die Aktion durchzuführen oder doch noch abzubrechen. Diese potenziell<br />

„gefährlichen“ Zustände können nicht automatisch erkannt werden, weil auch<br />

hier die Semantik der Aktionen von Bedeutung ist.<br />

3.5.6 Zusammenfassung<br />

Das Dialogmodell beschreibt die Struktur der möglichen Interaktionen eines Benutzers<br />

mit einer Anwendung. Wir können aus dem Aufgabenmodell ein Dialogmodell in Form<br />

eines Zustandsübergangsdiagramms erzeugen, welches zur Laufzeit ausführbar ist und<br />

den Dialog steuert. Im nächsten Abschnitt werden wir die Präsentationsmodellierung<br />

vorstellen, um die bis jetzt abstrakt beschriebenen Dialogzustände mit einer Benutzerschnittstelle<br />

zu versehen.<br />

3.6 Präsentationsmodellierung<br />

3.6.1 Einleitung<br />

Als Vorstufe zur Benutzerschnittstelle wird in der Entwurfsphase das Präsentationsmodell<br />

erstellt (siehe Abbildung 3.1). Ziel ist, die Interaktionsmöglichkeiten eines Dialogzustands<br />

zu beschreiben, um aus diesem Modell in einem späteren Schritt eine Benutzerschnittstelle<br />

zu erzeugen.<br />

Die Benutzerschnittstelle soll es dem Benutzer ermöglichen aus einem Dialogzustand<br />

heraus die aktuell möglichen Aufgaben des Aufgabenmodells auszuführen. Dazu muss<br />

sie mehrere Aspekte kombinieren:<br />

Sie muss dem Benutzer Interaktionsmöglichkeiten für die aktuell ausgeführten<br />

Aufgaben anbieten.<br />

59


3 Modellbasierte Entwicklung<br />

abstrakt<br />

konkret<br />

Aufgaben & Konzepte<br />

abstrakte Benutzerschnittstelle (AUI)<br />

konkrete Benutzerschnittstelle (CUI)<br />

finale Benutzerschnittstelle (FUI)<br />

CUI 1<br />

Aufgabenmodell<br />

AUI<br />

CUI 2<br />

FUI 1 FUI 2 FUI 3<br />

Abbildung 3.6: Verfeinerung der Präsentation aus den Aufgaben<br />

Sie muss dem Benutzer die Möglichkeit geben, mögliche Folgeaufgaben zu starten.<br />

In den nächsten Abschnitten werden wir die gängige Vorgehensweise präsentieren,<br />

um aus einem bestehenden Aufgaben- und Dialogmodell eine Benutzerschnittstelle zu<br />

erzeugen, die diese Aspekte erfüllt.<br />

3.6.2 Abstraktionsstufen<br />

UsiXML ist ein Ansatz von Vanderdonckt und Limbourg [2004] zur Erzeugung multikontextueller<br />

Benutzerschnittstellen. Bei UsiXML kann ein zentrales Aufgabenmodell<br />

als Grundlage für unterschiedliche Benutzerschnittstellen dienen, z. B. für klassische<br />

Desktop-Applikationen (Java Swing), für Web-Anwendungen (HTML), für 3D-Anwendungen<br />

(VRML) oder für Sprachdialogsysteme (VoiceXML). Um dies zu erreichen, wird<br />

die Erstellung einer Benutzerschnittstelle in drei Schritte zerlegt (siehe Abbildung 3.6).<br />

Nach jedem Schritt entstehen Modelle der Benutzerschnittstelle, welche von den Modellen<br />

der vorigen Schicht abgeleitet sind. Diese Beziehungen sind auf der rechten Seite<br />

der Abbildung dargestellt. Die einzelnen Verfeinerungsschritte werden wir im Folgenden<br />

vorstellen.<br />

Abstrakte Benutzerschnittstelle<br />

Aus dem Aufgabenmodell wird im ersten Schritt eine abstrakte Benutzerschnittstelle erstellt.<br />

In diesem Schritt ist zuerst ein Dialogmodell für das Aufgabenmodell zu erstellen<br />

(welches wir bereits vorgestellt haben) und anschließend für jeden Dialogzustand eine<br />

60


3.6 Präsentationsmodellierung<br />

XML-Beschreibung der abstrakten Interaktionsmöglichkeiten zu erzeugen. Diese zeichnen<br />

sich dadurch aus, dass die Elemente der Benutzerschnittstelle unabhängig von der<br />

Sinnesmodalität 24 beschrieben werden. Die abstrakte Benutzerschnittstelle ist die Menge<br />

der XML-Beschreibungen aller Dialogzustände.<br />

UsiXML beschreibt die Benutzerschnittstelle eines Dialogzustands als XML-Baum, die<br />

Elemente des Baums gehören entweder den abstrakten Interaktionselementen oder<br />

den abstrakten Gruppierungselementen an.<br />

Abstrakte Interaktionselemente bestimmen eine Interaktionsmöglichkeit und sind<br />

die Blattelemente der XML-Benutzerschnittstellenbeschreibung, zum Beispiel:<br />

– Auswahl: Der Benutzer kann eine Auswahl aus zwei oder mehr Möglichkeiten<br />

treffen.<br />

– Ausgabe: Eine Ausgabe von der Anwendung, die der Benutzer nicht verändern<br />

kann.<br />

– Eingabe: Ein Eingabeelement, das vom Benutzer bearbeitet werden kann.<br />

– Kommando: Ein Interaktionselement, mit dem der Benutzer eine Aktion auslösen<br />

kann.<br />

Abstrakte Gruppierungselemente dienen der Anordnung von Interaktionselementen<br />

und sind die Nicht-Blattelemente in der XML-Benutzerschnittstellenbeschreibung,<br />

zum Beispiel:<br />

– Container: Die Unterelemente sollen in beliebiger Reihenfolge zusammen in<br />

der Benutzerschnittstelle erscheinen.<br />

– Gruppe: Die Unterelemente sollen in angegebener Reihenfolge zusammen in<br />

der Benutzerschnittstelle erscheinen.<br />

Das folgende Beispiel fügt einige der oben genannten Interaktionselemente in eine<br />

XML-Hierarchie zusammen:<br />

Listing 3.5: Beispiel einer abstrakten Benutzerschnittstelle<br />

1 <br />

2 <br />

3 <br />

4 <br />

5 <br />

6 <br />

7 <br />

8 <br />

Dieser Teil einer abstrakten Benutzeroberfläche beschreibt die Interaktionselemente<br />

für den Dialogzustand nicht authentifiziert. In Zeile 5 wird eine Eingabemöglichkeit<br />

definiert, die dem Benutzer erlaubt, ein Passwort einzugeben. Das Attribut id wurde<br />

zum Verständnis der Elemente eingefügt. In Zeile 4 wird noch ein Ausgabeelement eingefügt,<br />

welche eine erklärende Beschriftung zum Eingabefeld ausgeben soll. In Zeile<br />

24 Sehen, Hören, Riechen, Schmecken und Fühlen<br />

61


3 Modellbasierte Entwicklung<br />

3 und 6 werden die beiden eingeschlossenen Interaktionselemente als zusammengehörige<br />

Gruppe definiert, die später möglichst zusammen und in dieser Reihenfolge in<br />

der Oberfläche erscheinen sollen. Zeile 2 beschreibt eine Überschrift und Zeile 7 eine<br />

Möglichkeit, die Eingaben abzuschicken. Die Zeilen 1 und 8 fassen die gesamte Benutzerschnittstelle<br />

als Gruppe zusammen.<br />

Eine abstrakte Benutzerschnittstelle beschreibt nur, welche Interaktionselemente der<br />

Benutzer präsentiert bekommen soll, sie beschreibt nicht, wie diese später aussehen.<br />

Deshalb muss auch nur eine abstrakte Benutzerschnittstelle erstellt werden, welche als<br />

Grundlage für alle folgenden Benutzerschnittstellen dient.<br />

Konkrete Benutzerschnittstelle<br />

Die nächste Verfeinerungsstufe, die UsiXML vorsieht, ist die konkrete Benutzerschnittstelle.<br />

In dieser Stufe muss sich der Modellierer festlegen, für welche Modalität und<br />

welchen Kontext die Benutzerschnittstelle umgesetzt werden soll. Dazu werden die Interaktionselemente<br />

der abstrakten Benutzerschnittstelle durch kontextbezogene Interaktionselemente<br />

ersetzt. Für eine zwei-dimensionale Benutzeroberfläche können beispielsweise<br />

die Gruppierungen in vertikale oder horizontale Gruppierungen umgesetzt<br />

werden. Die Ein- und Ausgaben werden nach den Möglichkeiten des ausgewählten<br />

Kontextes verfeinert, beispielsweise in Knöpfe, Eingabefelder und Überschriften.<br />

Im folgenden Beispiel wurde aus der abstrakten Benutzerschnittstelle eine konkrete<br />

Benutzerschnittstelle erzeugt. Um die Beziehung zum Beispiel in Listing 3.5 zu verdeutlichen,<br />

sind die Namen der Interaktionselemente aus dem abstrakten Basistyp und der<br />

konkreten Ausprägung für den gewählten Kontext zusammengesetzt:<br />

Listing 3.6: Beispiel einer konkreten Benutzerschnittstelle<br />

1 <br />

2 <br />

3 <br />

4 <br />

5 <br />

6 <br />

7 <br />

8 <br />

Auf dieser Abstraktionsstufe (siehe Übersicht in Abbildung 3.6) können mehrere kontextbezogene<br />

Benutzerschnittstelle definiert werden, die parallel vom Modellierer aus<br />

der abstrakten Benutzerschnittstelle erzeugt wurden.<br />

Finale Benutzerschnittstelle<br />

Im letzten Schritt sieht UsiXML die Erzeugung einer plattformbezogenen Benutzerschnittstelle<br />

vor, der sogenannten finalen Benutzerschnittstelle. Dies bedeutet, dass aus<br />

der kontextbezogenen konkreten Benutzerschnittstelle aus dem letzten Schritt eine Benutzerschnittstelle<br />

für eine Zielplattform erstellt wird, für eine zwei-dimensionale Benutzeroberfläche<br />

beispielsweise Java Swing oder HTML.<br />

62


3.7 Zusammenfassung<br />

Eine Umsetzung als finale Benutzerschnittstelle in HTML könnte folgendermaßen<br />

aussehen:<br />

Listing 3.7: Beispiel einer finalen Benutzerschnittstelle<br />

1 <br />

2 <br />

3 <br />

4 <br />

5 <br />

6 <br />

7 <br />

8 <br />

3.6.3 Zusammenfassung<br />

Beim Erzeugen einer Benutzerschnittstelle über die abstrakten und konkreten Zwischenschritte<br />

steigert sich in den Präsentationsmodellen der Detailgrad, die Kontextunabhängigkeit<br />

wird allerdings kleiner. Wenn z. B. die Anforderung besteht, eine mit dem<br />

UsiXML-Ansatz erstellte Desktop-Anwendung auch als Web-Anwendung zu entwerfen,<br />

dann muss nur die bestehende konkrete Benutzerschnittstelle in eine neue finale Benutzerschnittstelle<br />

für Web-Anwendungen umgeformt werden.<br />

Weil der Kontext der Benutzerschnittstellen in dieser Arbeit festgelegt ist – die Erstellung<br />

von Benutzeroberflächen für Web-Anwendungen – werden wir nicht von allen<br />

Abstraktionstufen Gebrauch machen. Nach der Aufgabenmodellierung werden wir<br />

direkt kontextbezogene konkrete Benutzerschnittstellen für zwei-dimensionale Benutzeroberflächen<br />

erstellen, welche, im Gegensatz zu finalen HTML-Benutzerschnittstellen,<br />

gut geeignet sind, um unabhängig von der Zielplattform zu sein. Zukünftig könnten<br />

dann auch neue Technologien, wie z. B. Flash oder Silverlight, unterstützt werden.<br />

Im Anhang A sind die in dieser Arbeit verwendeten abstrakten und konkreten Interaktionselemente<br />

zusammengefasst. Die Anbindung der Benutzerschnittstelle an das<br />

Domänenmodell, z. B. die Verbindung des Passworteingabefeldes mit einer Variablen<br />

oder die Erzeugung eines Ereignisses durch den Knopf, werden wir an späterer Stelle<br />

erörtern.<br />

3.7 Zusammenfassung<br />

Wir haben gezeigt, welche Modelle aus dem Bereich der Softwareentwicklung und der<br />

Human Computer Interaction (HCI) im Entwicklungsprozess einer Web-Anwendung erstellt<br />

und kombiniert werden können. Einen besonderen Fokus haben wir auf die Aufgabenmodellierung<br />

gelegt. Sie wird im Zentrum unseres Ansatzes für die Erstellung<br />

einer Benutzerschnittstelle stehen. Als Nachteil des hier vorgestellten klassischen Entwicklungsprozesses<br />

bleibt festzuhalten, dass die Benutzerschnittstelle zwar auf einem<br />

Aufgabenmodell basiert, die Aufgabenstruktur allerdings bei der semi-automatischen<br />

Transformation in ein Dialogmodell verloren geht. Bei einer Änderung des Aufgabenmodells<br />

in einer weiteren Entwicklungsiteration müssten auch ein neues Dialogmodell<br />

63


3 Modellbasierte Entwicklung<br />

und eine neue Benutzerschnittstelle erstellt werden. Im nächsten Kapitel werden wir<br />

deshalb den Kern dieser Arbeit vorstellen, ein kombiniertes Aufgaben-, Dialog- und<br />

Präsentationsmodell, welches zur Laufzeit ausgeführt wird.<br />

64


Teil II<br />

Konzepte<br />

65


Kapitel 4<br />

Überblick über den Lösungsansatz<br />

Inhalt<br />

4.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

4.2 Aufgabenmodell als Basis des Interaktionsmodells . . . . . . . . . . . . 68<br />

4.3 Erweiterung des Interaktionsmodells . . . . . . . . . . . . . . . . . . . 69<br />

4.4 Laufzeitsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

4.5 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

4.1 Einleitung<br />

In den vorigen Kapiteln haben wir gezeigt, dass sich mit den existierenden Ansätzen<br />

bereits Web-Anwendungen mit den Modellen des Softwareengineering und der HCI<br />

erstellen lassen (siehe Abbildung 3.1). Zwischen den beiden Modellierungsansätzen gibt<br />

es aber noch einen entscheidenden Unterschied:<br />

Bei der Verwendung der UML für den Bereich des Softwareengineerings basieren<br />

die Modelle auf einem zugrundeliegenden zentralen Datenmodell. Die Diagramme<br />

der UML modellieren jeweils Teilaspekte des zentralen Datenmodells und<br />

blenden andere Teile aus. Wenn zwei Diagramme auf die gleichen Informationen<br />

des zentralen Datenmodells zugreifen, z. B. das Klassendiagramm und das<br />

Sequenzdiagramm auf einen Klassennamen, dann beeinflusst eine Änderung das<br />

jeweils andere Diagramm ebenfalls. Die Diagramme der UML sind synchronisiert.<br />

Bei den Modellen der HCI (Aufgabenmodell, Dialogmodell und Präsentationsmodell)<br />

gibt es noch kein zugrundeliegendes Datenmodell. Bei der Transformation<br />

von einem Aufgabenmodell zu einem Dialogmodell werden z. B. die temporalen<br />

Relationen der Aufgaben in komplexe Zustands- und Transitionsmengen zerlegt.<br />

Diese Transformation ist nicht umkehrbar, bei einer Änderung am Dialogmodell<br />

besteht keine Möglichkeit, diese Änderung in den temporalen Relationen des Aufgabenmodells<br />

einfließen zu lassen. Die Modelle der HCI sind unsynchronisiert.<br />

Wir wollen im Folgenden ein zentrales Interaktionsmodell vorstellen, welches die<br />

Informationen des Aufgaben-, des Dialog- und des Präsentationsmodells vereint. Das<br />

Aufgabenmodell ist dann z. B. nur eine Sicht auf das Interaktionsmodell, in der nur die<br />

67


4 Überblick über den Lösungsansatz<br />

aufgabenrelevanten Teile dargestellt werden. Vorteil des zentralen Modells ist die freie<br />

Wahl der Bearbeitungsreihenfolge der Modelle. Während beim klassischen Ansatz zuerst<br />

ein Aufgabenmodell komplett erstellt werden muss, danach ein Dialogmodell und<br />

schließlich das Präsentationsmodell, haben wir jetzt die Möglichkeit, die Modelle parallel<br />

zu entwickeln. Die Bearbeitung der HCI-Modelle gleicht sich damit der Bearbeitung<br />

der Softwareengineering-Modelle an, wo eine parallele Bearbeitung der Diagramme<br />

möglich ist.<br />

Als Basis unseres zentralen Interaktionsmodells dient ein an unsere Bedürfnisse angepasstes<br />

Aufgabenmodell, welches wir im weiteren Verlauf um Dialog- und Präsentationsaspekte<br />

erweitern werden.<br />

4.2 Aufgabenmodell als Basis des Interaktionsmodells<br />

Im Abschnitt 3.4 haben wir bereits die existierenden Methoden der Aufgabenmodellierung<br />

vorgestellt und die Gemeinsamkeiten zusammengefasst. Wir wollen diese Eigenschaften<br />

aufgreifen und in Kapitel 5 eine Methode zur Aufgabenmodellierung für<br />

Web-Anwendungen vorstellen. Dazu werden wir nicht nur die bestehenden Methoden<br />

um Aspekte für Web-Anwendungen erweitern, sondern auch für die existierenden gemeinsamen<br />

Eigenschaften ein Laufzeitverhalten definieren.<br />

4.2.1 Temporale Operatoren<br />

Die bereits bekannten temporalen Operatoren sind bei den klassischen Aufgabenmodellen<br />

nur qualitativ definiert, z. B. ist unklar, ob zwei parallel zu bearbeitende Aufgaben<br />

über die gesamte Ausführungsdauer parallel bearbeitet werden müssen, oder ob<br />

die Aufgaben nur parallel angefangen werden müssen, dann aber eine Aufgabe vor<br />

der anderen beendet werden kann. Wir werden die existierenden temporalen Operatoren<br />

für unser Aufgabenmodell mit der temporalen Logik von Allen [1983] eindeutig<br />

definieren, damit das Laufzeitsystem die Aufgabenmodelle später konsistent ausführen<br />

kann.<br />

Zusätzlich werden wir noch weitere temporale Operatoren einführen. Klassische Aufgabenmodelle<br />

verwenden nur eine kleine Menge temporaler Operatoren, um die Bearbeitungsreihenfolge<br />

der Aufgaben möglichst abstrakt zu beschreiben. Weil wir die Aufgabenmodelle<br />

speziell für Web-Anwendungen definieren, können wir temporale Operatoren<br />

einführen, die auf die <strong>Generierung</strong> dieser Benutzerschnittstellen zugeschnitten<br />

sind.<br />

4.2.2 Unterbrechbarkeit<br />

Ein weiteres Problem bei der Modellierung von Web-Anwendungen ist in der Zustandslosigkeit<br />

des Webs begründet. Ein Dialog, wie z. B. ein Fahrkartenkauf, wird das Aufgabenmodell<br />

für einen Benutzer ausführen, d. h., die einzelnen Aufgaben des Aufgabenmodells<br />

werden den temporalen Operatoren gemäß bearbeitet und der Zustand wird<br />

von Dialogschritt zu Dialogschritt auf dem Server verwaltet. Problematisch ist dabei<br />

68


4.3 Erweiterung des Interaktionsmodells<br />

die Zustandslosigkeit des Webs, weil der Benutzer jederzeit den angefangenen Dialog<br />

verlassen kann und ein gestartetes Aufgabenmodell gelöscht werden würde. Wir werden<br />

dem Laufzeitsystem die Möglichkeit geben, unterbrochene Aufgabenmodelle zu<br />

persistieren. Allerdings wird dabei wird nicht zwingend das komplette Aufgabenmodell<br />

gespeichert, der Modellierer kann im Aufgabenmodell für Teilbäume definieren,<br />

ob diese persistiert werden sollen oder verworfen werden. Dies ist z. B. bei Aufgaben<br />

sinnvoll, deren erneute Ausführung mit wenig Aufwand für den Benutzer verbunden<br />

ist.<br />

4.2.3 Rollenkonzept<br />

Für Web-Anwendungen, auf die verschiedene Nutzergruppen über einen gemeinsamen<br />

Einstiegspunkt Zugriff haben, ist es sinnvoll, ein Rollenkonzept in die Aufgabenmodellierung<br />

zu integrieren. Auch hier werden wir die Semantik der Benutzerrolle aus<br />

den klassischen Aufgabenmodellen genauer definieren, z. B. welche Konsequenzen verschiedene<br />

Benutzerrollen entlang der Hierarchie für eine Blattaufgabe haben.<br />

4.3 Erweiterung des Interaktionsmodells<br />

Nachdem wir das Aufgabenmodell als Basis für unser Interaktionsmodell beschrieben<br />

haben, werden wir in Kapitel 6 dialog- und präsentationsspezifische Erweiterungen integrieren.<br />

4.3.1 Dialogmodell<br />

Um zu einem Interaktionsmodell zu gelangen, werden wir zuerst zeigen, wie aus dem<br />

Aufgabenmodell zur Laufzeit ein rudimentärer Dialog erzeugt werden kann. In weiteren<br />

Schritten werden wir dem Interaktionsmodell Dialoginformationen hinzufügen,<br />

um die Ausführung des Aufgabenmodells zu optimieren.<br />

An dieser Stelle können wir dann einen Dialog generieren, der, basierend auf unserem<br />

Aufgabenmodell, die Struktur der Benutzerschnittstelle vorgibt. Es fehlt allerdings<br />

noch die Beschreibung der Präsentation und die Integration mit dem Domänenmodell.<br />

4.3.2 Präsentationsmodell<br />

Im Gegensatz zu den klassischen Ansätzen werden wir nicht Aufgaben- und Dialogmodell<br />

in ein Präsentationsmodell umwandeln, sondern alle drei Modelle in einem Interaktionsmodell<br />

bündeln. Dies macht es notwendig, die Präsentation nicht mehr seitenbasiert,<br />

sondern aufgabenbasiert zu definieren. Zu jeder Aufgabe muss vom Modellierer<br />

ein Fragment der Benutzerschnittstelle definiert werden, aus denen das Laufzeitsystem,<br />

basierend auf dem Dialogzustand, die Benutzerschnittstelle generiert. Wir werden dazu<br />

eine hierarchische Komposition der Benutzerschnittstelle vorstellen, mit der reale Web-<br />

Anwendungen umgesetzt werden können.<br />

69


4 Überblick über den Lösungsansatz<br />

4.3.3 Anbindung an das Domänenmodell<br />

Es fehlt noch die Anbindung an das Domänenmodell, damit die Eingaben des Benutzers<br />

von der Anwendung verarbeitet werden können und die Ausgaben in der Benutzerschnittstelle<br />

erscheinen. Das Domänenmodell ist dabei nicht Teil des Interaktionsmodells,<br />

sondern wird parallel entwickelt; der Drei-Schichten-Architektur folgend, besitzt<br />

das Domänenmodell (Anwendungsschicht) keine Beziehungen zum Interaktionsmodell<br />

(Präsentationsschicht).<br />

Wir werden zeigen, wie das Interaktionsmodell auf das Domänenmodell zugreifen<br />

kann. Dabei werden wir die Aufgabenhierarchie ausnutzen, um den Fragmenten der<br />

Benutzerschnittstelle nur Zugriff auf den Teil des Domänenmodells zu geben, den sie<br />

für die Aufgabenausführung auch benötigen. Diese zusätzliche Kapselung zwingt den<br />

Modellierer der Präsentation, die Vorgaben des Aufgabenmodells umzusetzen.<br />

4.4 Laufzeitsystem<br />

Zusätzlich zum Interaktionsmodell werden wir in Kapitel 7 auch die Architektur des<br />

Laufzeitsystems vorstellen, welches Basisdienste bereitstellt und die Instanzen der Interaktionsmodelle<br />

in einer Oberfläche vereint. Während wir bei der Definition der Modelle<br />

auch schon das Laufzeitverhalten der Modelleigenschaften festgelegt haben, werden<br />

wir an dieser Stelle die Architektur vorstellen, die dieses Verhalten umsetzt. Dabei<br />

werden wir uns an das Modularitätsprinzip halten, um die Architektur in unabhängige<br />

Module aufzuteilen.<br />

4.5 Beispiel<br />

Bei der Herleitung unseres Interaktionsmodells werden wir in dieser Arbeit ein durchgängiges<br />

Beispiel verwenden. Ziel ist die Erstellung eines Kleinanzeigenmarktes als<br />

Web-Anwendung. Benutzer können durch die Liste der Kleinanzeigen blättern und Details<br />

zu einer Kleinanzeige einblenden lassen. Neue Kleinanzeigen können in einem<br />

geführten Dialog erstellt werden. Eine Suchmaske erlaubt es dem Benutzer, nur die<br />

Kleinanzeigen eines gewählten Suchkriteriums anzuzeigen.<br />

Das Beispiel wird im Laufe der Arbeit die Möglichkeiten des Interaktionsmodells beschreiben.<br />

Bei jeder neu vorgestellten Modelleigenschaft wird das Beispiel ebenfalls<br />

erweitert. Zur Referenz ist das Beispiel in Anhang B komplett aufgeführt.<br />

70


Kapitel 5<br />

Aufgabenbasiertes Interaktionsmodell für<br />

Web-Anwendungen<br />

Inhalt<br />

5.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

5.2 Aufgabenmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

5.3 Kardinalität von Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

5.4 Hierarchiebeziehungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

5.5 Der Aufgabentyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />

5.6 Unterbrechbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

5.7 Zugriffskontrolle über Rollenkonzept . . . . . . . . . . . . . . . . . . . 91<br />

5.8 Wiederverwendbarkeit von Aufgabenhierarchien . . . . . . . . . . . . 95<br />

5.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />

5.1 Einleitung<br />

In diesem Kapitel werden wir die Basis für unser zentrales Interaktionsmodell definieren:<br />

ein erweitertes Aufgabenmodell, das die bestehenden Varianten der Aufgabenmodelle<br />

zusammenfasst. Weil dieses erweiterte Aufgabenmodell später auch zur Laufzeit<br />

für die Dialoggenerierung eingesetzt wird, werden wir die Auswirkungen der Aufgabenattribute<br />

und der temporalen Operatoren zwischen den Aufgaben anhand von<br />

Laufzeitaspekten, wie z. B. Start- und Endzeitpunkt konkret definieren. Auch die Menge<br />

der temporalen Operatoren werden wir im Gegensatz zur klassischen Aufgabenmodellierung<br />

erweitern, um ein ausdrucksstarkes und detailliertes Aufgabenmodell zu<br />

erstellen. Trotz der Fokussierung auf das Laufzeitverhalten wird dieses Kapitel nur die<br />

Elemente des Aufgabenmodells vorstellen, erst im nächsten Kapitel wird diese Basis<br />

dann um Dialoginformationen erweitert.<br />

5.2 Aufgabenmodell<br />

Wie im Kapitel 3.4 beschrieben, existieren Aufgabenmodelle für verschiedene Bereiche<br />

mit verschiedenen Ausprägungen. Um Aufgabenmodelle für Web-Anwendungen zu erstellen,<br />

werden wir deshalb in diesem Kapitel die Ansätze aufgreifen und erweitern, um<br />

71


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Kontaktinformationen<br />

angeben<br />

Abbildung 5.1: Beispiel Aufgabenmodell – Standard<br />

ein neues Aufgabenmetamodell zu definieren. Auf Basis dieses Aufgabenmetamodells<br />

lassen sich Aufgabenmodelle erstellen, die die Besonderheiten von Web-Anwendungen<br />

berücksichtigen und die sich mit einem Laufzeitsystem ausführen lassen.<br />

Anhand eines Beispiels werden die Bestandteile des Aufgabenmetamodells bestimmt.<br />

Von einem Benutzer sollen die Kontaktinformationen (z. B. Telefonnummer) abgefragt<br />

werden, Abbildung 5.1 zeigt diese Aufgabe in ihrer abstraktesten Form. Im Augenblick<br />

besitzt die Aufgabe nur das Attribut name. Zusätzlich muss jede Aufgabe innerhalb<br />

des Aufgabenmodells eindeutig identifizierbar sein, jede Aufgabe besitzt deshalb auch<br />

noch ein Attribut id, welches die Aufgabe eindeutig identifiziert. Dieses ist vorbelegt<br />

mit dem Aufgabennamen und muss nur angepasst werden, wenn im Aufgabenmodell<br />

zwei Aufgaben mit dem gleichen Namen existieren. Im vorliegenden Fall ist die id gleich<br />

dem Namen und wird deshalb nicht explizit dargestellt.<br />

Diese Aufgabe ist allerdings noch sehr generisch und sollte sowohl in ihrer Hierarchie<br />

als auch in ihrer Beschreibung noch weiter verfeinert werden. Die nächsten Abschnitte<br />

beschreiben die für unseren Ansatz sinnvollen Verfeinerungen.<br />

5.2.1 Das Ausführen von Aufgaben<br />

Da es sich bei dem Ausführen von Aufgaben um temporale Operationen handelt, wollen<br />

wir die Ausführung anhand der Start- und Endzeitpunkte auf einer Zeitachse betrachten<br />

und dazu die Grundlagen der temporalen Intervalle von [Allen, 1983] aufgreifen.<br />

Sei start(X ) der Startzeitpunkt einer Aufgabe X und ende(X ) der Endzeitpunkt von<br />

X . Sowohl start(X ) als auch ende(X ) sind undefiniert, solange die Aufgabe X noch nicht<br />

ausgeführt wurde. Um die temporale Integrität zu gewährleisten, muss für start(X ) und<br />

ende(X ) immer gelten:<br />

ende(X ) = ∅ → start(X ) = ∅ ∧ start(X ) ≤ ende(X ) (5.1)<br />

Wenn eine Aufgabe beendet wurde, so muss ein Startzeitpunkt existieren und vor<br />

oder auf dem Endzeitpunkt liegen (Bedingung 5.1).<br />

5.2.2 Der Aufgabenkontext<br />

Aus Sicht eines Laufzeitsystems ist das Aufgabenmodell statisch, für jeden Benutzer<br />

wird anfangs eine identische Instanz des Aufgabenmodells erstellt. Mit dem Anfangs-<br />

72


5.3 Kardinalität von Aufgaben<br />

und Endzeitpunkt einer Aufgabe haben wir allerdings die ersten Elemente des Aufgabenkontexts<br />

beschrieben, welche die zur Laufzeit variablen Werte einer Aufgabe aufnimmt<br />

und damit den Aufgabenzustand definiert. Bei der Definition der Laufzeitarchitektur<br />

werden wir auf den Aufgabenkontext ausführlich eingehen, an dieser Stelle ist<br />

vor allem entscheidend, dass sich eine Aufgabeninstanz zur Laufzeit aus zwei getrennten<br />

Teilen zusammensetzt:<br />

Einer Aufgabendefinition mit statischen Werten aus dem Aufgabenmodell (z. B.<br />

Aufgabenname)<br />

Einem Aufgabenkontext mit laufzeitabhängigen Werten (z. B. Startzeitpunkt)<br />

Die Aufgabenkontexte werden wir an dieser Stelle nicht weiter bei der Modellierung<br />

der Aufgabenmodelle betrachten. Sie helfen aber, wie im Beispiel der Start- und Endzeitpunkte,<br />

die Elemente des Aufgabenmodells anhand von laufzeitabhängigen Werten<br />

zu definieren.<br />

5.3 Kardinalität von Aufgaben<br />

5.3.1 Definition<br />

Unter der Kardinalität versteht man in der Mathematik die Mächtigkeit einer Menge,<br />

also die Anzahl Elemente einer Menge. Die Definition einer Kardinalität bei Aufgaben<br />

hilft, Aussagen über die Anzahl an möglichen und notwendigen Aufgabeniterationen<br />

zu treffen. Zu diesem Zweck werden zwei Kardinalitäten definiert.<br />

Die minimale Kardinalität (minKardinalität) definiert die Anzahl der notwendigen<br />

Aufgabeniterationen, also die minimale Anzahl der Iterationen, die eine Aufgabe wiederholt<br />

werden muss, um als erledigt zu gelten. Der Wertebereich beträgt N0, also alle<br />

natürlichen Zahlen von null bis unendlich.<br />

Die maximale Kardinalität (maxKardinalität) definiert die Anzahl der möglichen Aufgabeniterationen,<br />

also die maximale Anzahl der Iterationen, die eine Aufgabe wiederholt<br />

werden kann. Der Wertebereich beträgt N + ∪{∞}, also alle natürlichen Zahlen von<br />

1 bis unendlich einschließlich des Symbols für unendlich 25 .<br />

Mit diesen beiden Kardinalitäten können die sinnvollen Iterationsmöglichkeiten definiert<br />

werden. Exotischere Definitionen, wie z. B. „die Anzahl der Aufgabeniterationen<br />

soll ungerade sein“ können später als Ausführungsbedingungen hinzugefügt werden.<br />

In den meisten Fällen ist die Definition der beiden Kardinalitäten bereits zu fein, weshalb<br />

sich einige vordefinierte Werte anbieten. Falls keine Kardinalitäten explizit angegeben<br />

werden, dann werden die Aufgaben mit folgenden Werten initialisiert: minKardinalität<br />

= 1, maxKardinalität = 1. Die Aufgabe kann und muss genau einmal durchgeführt<br />

werden, das entspricht auch dem erwarteten Verhalten in Abbildung 5.1. Die<br />

folgenden beiden Bezeichner können (auch in Kombination) verwendet werden, um<br />

die Vorbelegung zu verändern und die gängigsten Kardinalitätsanforderungen abzudecken:<br />

25 Das Unendlichzeichen wird in UML beispielsweise als „∗“ ausgedrückt, ER-Diagramme verwenden meist ein<br />

„n“.<br />

73


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Kontaktinformationen<br />

angeben<br />

Kardinalität = 1…5<br />

Abbildung 5.2: Beispiel Aufgabenmodell – Kardinalitäten<br />

Optional Die Aufgabe wird als optional gekennzeichnet, sie muss nicht ausgeführt werden,<br />

sondern kann z. B. übersprungen werden. minKardinalität = 0<br />

Iterativ Eine iterative Aufgabe kann, je nach Benutzerwunsch, beliebig häufig ausgeführt<br />

werden. maxKardinalität = ∞<br />

Bei einer optionalen übersprungenen Aufgabe ist der Zeitpunkt, an dem übersprungen<br />

wurde, gleichzeitig Start- und Endzeitpunkt. Es gilt start(X ) = ende(X ) = ∅, die<br />

Bedingung 5.1 ist weiterhin erfüllt. Falls eine Aufgabe mehrfach iteriert wird, dann definiert<br />

start(X ) den Startzeitpunkt der ersten Iteration und ende(X ) den Endzeitpunkt<br />

der letzten Iteration.<br />

5.3.2 Beispiel<br />

Abbildung 5.2 zeigt die um Minimal- und Maximalkardinalität erweiterte Ursprungsaufgabe.<br />

Es soll mindestens einmal die Kontaktinformationen eingegeben werden, maximal<br />

sollen fünf Kontaktinformationen möglich sein, z. B. verschiedene Anschriften und<br />

Telefonnummern.<br />

5.4 Hierarchiebeziehungen<br />

Gemäß den klassischen Ansätzen aus Abschnitt 3.4 werden Aufgaben in Unteraufgaben<br />

verfeinert. Eine Oberaufgabe kann in eine beliebige Anzahl von Unteraufgaben verfeinert<br />

werden (siehe Bild 5.3). Die Unteraufgaben können wiederum verfeinert werden,<br />

sodass ein Aufgabenbaum entsteht.<br />

Die Semantik der Hierarchiebeziehung der Oberaufgabe zu den Unteraufgaben wird<br />

eine hohe Bedeutung beigemessen. In allen Fällen wird durch eine hierarchische Verfeinerung<br />

eine Komposition ausgedrückt. Wir verwenden hier den Kompositionsbegriff<br />

aus der UML [OMG, 2005], welche die Beziehung eines Ganzen zu seinen Teilen beschreibt:<br />

74<br />

Eine Unteraufgabe gehört nur zu genau einer Oberaufgabe<br />

Die Oberaufgabe bestimmt den Lebenszyklus der Unteraufgaben<br />

Eine Unteraufgabe kann nicht für sich alleine existieren


Oberaufgabe<br />

Unteraufgabe Unteraufgabe<br />

Unteraufgabe<br />

Abbildung 5.3: Allgemeine Hierarchie<br />

5.4 Hierarchiebeziehungen<br />

Wir werden in den nächsten Abschnitten durch Bedingungen – basierend auf Start- und<br />

Endzeitpunkt der Aufgaben – die Kompositionseigenschaften sicherstellen. Zusätzlich<br />

zum Kompositionsbegriff der UML, welche keine Aussage über die Semantik der Beziehung<br />

des Ganzen zu seinen Teilen trifft (z. B. die Reihenfolge der Teile), wollen wir<br />

verschiede Ausprägungen der Hierarchiebeziehung definieren, welche entscheiden, ob<br />

und in welcher Reihenfolge die Unteraufgaben ausgeführt werden. An dieser Stelle<br />

werden wir die klassischen Hierarchiebeziehungen der Aufgabenmodellierung aufgreifen<br />

und um Beziehungen erweitern, die für die Modellierung von Benutzerschnittstellen<br />

sinnvoll sind.<br />

5.4.1 Allgemeine Hierarchiebedingungen<br />

Wir werden unsere Hierarchiebeziehungen als Relation zwischen einer Aufgabe und<br />

ihren Unteraufgaben definieren 26 . Sei A die Oberaufgabe und A1 bis An die Unteraufgaben.<br />

Aufgrund der Kompositionseigenschaft gilt bei allen Hierarchiebeziehungen die<br />

allgemeine Bedingung:<br />

∀Ai ∈ {A1, ... , An} (<br />

(start(Ai) = ∅ → start(A) ≤ start(Ai)) ∧<br />

((ende(A) = ∅ ∧ start(Ai) = ∅) → (ende(Ai) = ∅ ∧ ende(Ai) ≤ ende(A)))<br />

)<br />

(5.2)<br />

Alle Unteraufgaben einer Oberaufgabe dürfen erst gestartet werden, wenn die Oberaufgabe<br />

gestartet wurde. In der letzten Klausel wird sichergestellt, dass alle gestarteten<br />

Unteraufgaben beim Beenden der Oberaufgabe vorher beendet wurden. Dies lässt viel<br />

Spielraum für die Ausführung der Unteraufgaben, die nächsten Abschnitte werden diesen<br />

in verschiedenen Varianten sinnvoll einschränken.<br />

26 Weitere formale Definitionen auf Basis von temporalen Beziehungen finden sich unter [Dittmar, 2000] und<br />

[Dittmar, 2002]. Im Gegensatz zu unserem Vorgehen werden dort allerdings binäre Verknüpfungen zwischen<br />

zwei Aufgaben behandelt, wir werden die Verknüpfung einer Aufgabe mit beliebig vielen Unteraufgaben betrachten.<br />

75


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

5.4.2 Ordnung der Unteraufgaben<br />

Bevor wir uns den verschiedenen Ausprägungen der Hierarchiebeziehungen zuwenden,<br />

wollen wir zuerst eine weitere allgemeine Bedingung definieren, die bei allen Beziehungen<br />

optional verwendet werden kann und das Verhalten bezüglich der Ordnung<br />

der Unteraufgaben ändert. Unteraufgaben können entweder strikt geordnet oder in<br />

beliebiger Reihenfolge ausgeführt werden. Wir definieren deshalb das Attribut Ordnung<br />

für Beziehungen, welches zwei Werte annehmen kann:<br />

beliebig Die Reihenfolge, in der die Unteraufgaben ausgeführt werden, unterliegt keiner<br />

Einschränkung. Der Benutzer muss bei der Ausführung des Aufgabenmodells<br />

aus den möglichen Unteraufgaben wählen.<br />

strikt Die Reihenfolge, in der die Unteraufgaben ausgeführt werden, ist durch die Position<br />

in der Menge der Unteraufgaben festgelegt. Die zweite Unteraufgabe kann<br />

erst begonnen werden, nachdem die erste Unteraufgabe begonnen wurde.<br />

Für die beliebige Ordnung ist keine Änderung der allgemeinen Hierarchiebedingungen<br />

(5.2) notwendig, für die strikte Ordnung muss folgende Bedingung immer erfüllt<br />

sein:<br />

∀Ai ∈ {A2, ... , An}, ∀Aj ∈ {A1, ... , Ai−1} (<br />

start(Ai) = ∅ → start(Aj) = ∅ ∧ start(Aj) ≤ start(Ai)<br />

)<br />

(5.3)<br />

Die Startzeitpunkte aller Unteraufgaben A1 bis Ai−1 müssen vor oder auf dem Startzeitpunkt<br />

von Ai liegen. Diese Bedingung erzwingt auch, dass die Startzeitpunkte aller<br />

Unteraufgaben vor Ai definiert sein müssen, bevor Ai gestartet werden kann. Daraus<br />

folgert, das zuerst start(A1) definiert sein muss, also entweder gestartet oder übersprungen,<br />

danach start(A2), usw.<br />

Damit die Unterscheidung strikt/beliebig für alle Ausprägungen der Hierarchiebeziehungen<br />

verwendbar ist, wurden nur die Startzeitpunkte und nicht die Endzeitpunkte<br />

in der Bedingung berücksichtigt. Wie wir sehen werden, ist die strikte Ordnung auch<br />

bei überlappenden oder parallelen Unteraufgaben sinnvoll. Diese Flexibilität würden<br />

wir aufgeben, wenn wir in der Ordnungsbedingung den Start einer Unteraufgabe vom<br />

Beenden der vorherigen Unteraufgabe abhängig gemacht hätten.<br />

Die Ordnung der Unteraufgaben kann für jede Hierarchiebeziehung an jeder Stelle<br />

des Aufgabenmodells vom Modellierer angegeben werden, d. h., jede Hierarchiebeziehung<br />

steht als geordnete oder beliebige Version dem Modellierer zur Verfügung.<br />

Aus der Praxis hat sich gezeigt, dass für die einzelnen Ausprägungen der Hierarchiebeziehungen<br />

entweder die strikte oder die beliebige Ordnung die „intuitive“ Wahl<br />

ist. Deshalb werden wir für die einzelnen Hierarchiebeziehungen sinnvolle Ordnungen<br />

vorgeben, die dann vom Modellierer nur in Ausnahmefällen angepasst werden müssen,<br />

Näheres dazu im nächsten Abschnitt.<br />

76


5.4.3 Ausprägungen der Hierarchiebeziehungen<br />

5.4 Hierarchiebeziehungen<br />

In den nächsten Abschnitten werden wir untersuchen, wie die allgemeine Hierarchiebeziehung<br />

(Bedingung 5.2) zu spezialisierten Hierarchiebeziehungen erweitert werden<br />

kann. Diese spezialisierten Hierarchiebeziehungen (im Folgenden Ausprägungen genannt)<br />

besitzen jeweils eine definierte temporale Semantik für die Ausführung der Unteraufgaben.<br />

Im Gegensatz zur klassischen Aufgabenmodellierung (siehe Kapitel 3.4),<br />

wollen wir das Aufgabenmodell zur Laufzeit weiterverwenden, um daraus den Dialog<br />

zwischen Benutzer und Web-Anwendung zu erzeugen. Dazu werden wir zum einen für<br />

die Ausprägungen der klassischen Hierarchiebeziehungen das Laufzeitverhalten festlegen,<br />

zum anderen werden wir neue, dialogorientierte Hierarchiebeziehungen aufnehmen.<br />

Folgende Ausprägungen werden wir vorstellen:<br />

Sequenz<br />

Selektion<br />

Parallel<br />

Überlappend<br />

Verschachtelt<br />

Arbiträr<br />

Jede Ausprägung ist in einer strikten und in einer beliebig geordneten Variante verwendbar,<br />

sodass wir insgesamt zwölf Ausprägungen für die Aufgabenmodellierung zur<br />

Verfügung haben. Das Laufzeitverhalten werden wir über zusätzliche Bedingungen bezüglich<br />

der Start- und Endzeitpunkte definieren, die allgemeine Bedingung (5.2) muss<br />

in allen Ausprägungen weiterhin erfüllt sein. Zu jeder Ausprägung werden wir ein Beispiel<br />

zeigen und die Anwendungsmöglichkeiten vorstellen.<br />

Sequenz<br />

Die Hierarchiebeziehung Sequenz schränkt die allgemeine Bedingung (5.2) weiter ein,<br />

indem sie die Ausführung der Unteraufgaben nur in einer beliebigen Reihenfolge hintereinander<br />

erlaubt. Dazu wird eine Bedingung eingefügt, die in der Intervall-Trichotemie<br />

(Ai wird vor Aj ausgeführt, Ai überschneidet sich mit Aj und Ai wird nach Aj<br />

ausgeführt) die Überschneidung verbietet:<br />

∀Ai ∈ {A1, ... , An} ( ∀Aj ∈ {A1, ... , An} \ Ai (<br />

start(Aj) ≤ start(Ai) → ende(Aj) ≤ start(Ai)<br />

))<br />

(5.4)<br />

Eine Unteraufgabe Ai kann nur ausgeführt werden, wenn das Zeitintervall sich nicht<br />

mit einer anderen Aufgabe Aj überschneidet. Im Beispiel in Abbildung 5.4 wird auf einer<br />

Zeitachse die Ausführung einer Oberaufgabe und dreier Unteraufgaben dargestellt.<br />

Nachdem die Oberaufgabe begonnen wurde, kann auch eine Unteraufgabe begonnen<br />

werden (Bedingung 5.2). Nachdem die Unteraufgabe beendet wurde, darf eine zweite<br />

Unteraufgabe starten (Bedingung 5.4). Eine dritte Unteraufgabe darf erst angefangen<br />

77


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Oberaufgabe<br />

Unteraufgabe 1 Unteraufgabe 2 Unteraufgabe 3<br />

Abbildung 5.4: Hierarchiebeziehung – Sequenz<br />

t (Zeit)<br />

werden, wenn die zweite Unteraufgabe beendet wurde (Bedingung 5.4) und muss beendet<br />

worden sein, bevor die Oberaufgabe beendet wird (Bedingung 5.2).<br />

Ordnung - Sowohl die strikte als auch die beliebige Ordnung kann im Aufgabenmodell<br />

für die Sequenz verwendet werden. Falls die strikte Ordnung<br />

verwendet wird, wird die Sequenz die Unteraufgaben aufgrund der Bedingungen<br />

5.3 und 5.4 der Reihe nach abarbeiten, angefangen bei A1.<br />

Falls die beliebige Ordnung verwendet wird, können die Unteraufgaben<br />

in einer beliebigen Sequenz ausgeführt werden. Falls die Ordnung nicht<br />

explizit festgelegt wird, wird die strikte Ordnung verwendet.<br />

Anwendung - Die Sequenz ist eine relevante Hierarchiebeziehung sowohl für die Modellierung<br />

von Prozessen (z. B. zur Modellierung von sequenziellen Abläufen)<br />

als auch in Benutzerschnittstellen (z. B. Assistenten, die Eingaben<br />

in mehrere Schritte zerlegen).<br />

Selektion<br />

Die Hierarchiebeziehung Selektion schränkt die allgemeine Bedingung (5.2) weiter ein,<br />

indem sie nur die Ausführung einer der Unteraufgaben erlaubt. Die zusätzliche Bedingung<br />

lautet:<br />

unteraufgaben = {x|x ∈ {A1, ... , An} ∧ start(x) = ∅}<br />

|unteraufgaben| ≤ 1<br />

(5.5)<br />

Aus der Menge der Unteraufgaben gibt es maximal eine, die gestartet wurde, mehr<br />

dürfen nicht gestartet werden. Im Beispiel in Abbildung 5.5 wurde die zweite Unteraufgabe<br />

gestartet. Nach dieser Selektion innerhalb der Unteraufgaben kann die zweite<br />

Unteraufgabe nur noch beendet werden, weitere Operationen sind für die Unteraufgaben<br />

nicht mehr zulässig.<br />

Ordnung - Die strikte Ordnung ist bei der Selektion kaum sinnvoll, weil nur die erste<br />

Unteraufgabe ausgeführt werden könnte. Falls die Ordnung nicht explizit<br />

angegeben wird, wird die beliebige Ordnung verwendet.<br />

78


Oberaufgabe<br />

Unteraufgabe 1<br />

Abbildung 5.5: Hierarchiebeziehung – Selektion<br />

5.4 Hierarchiebeziehungen<br />

t (Zeit)<br />

Anwendung - Die Selektion findet häufig Anwendung bei der Modellierung von Prozessen<br />

(z. B. für Entweder-Oder Entscheidungen) und in Benutzerschnittstellen<br />

(z. B. bei der Auswahl eines Elements aus einer Liste).<br />

Parallel<br />

Die Hierarchiebeziehung Parallel schränkt die allgemeine Bedingung (5.2) weiter ein,<br />

indem sie nur die parallele Ausführung der Unteraufgaben erlaubt. Die zusätzliche Bedingung<br />

lautet:<br />

∀Ai ∈ {A1, ... , An} ( ∀Aj ∈ {A1, ... , An} \ Ai (<br />

start(Ai) = ∅ → start(Ai) = start(Aj)<br />

))<br />

(5.6)<br />

Falls aus der Menge der Unteraufgaben eine Unteraufgabe gestartet wurde, müssen<br />

auch alle anderen Unteraufgaben zum selben Zeitpunkt gestartet worden sein.<br />

Dies wird zum parallelen Bearbeiten der Unteraufgaben verwendet, wie das Beispiel<br />

in Abbildung 5.6 zeigt. Über den Endzeitpunkt der Unteraufgaben wird keine Aussage<br />

getroffen, sodass der Benutzer die verschiedenen Unteraufgaben unterschiedlich lange<br />

ausführen kann. Nur dass die Endzeitpunkte der Unteraufgaben vor dem Endzeitpunkt<br />

der Oberaufgabe liegen müssen, wird aufgrund der allgemeinen Bedingung (5.2) gewährleistet.<br />

Ordnung - Die Verwendung der Ordnungsbedingung ist irrelevant, weil alle Unteraufgaben<br />

zum gleichen Startzeitpunkt ausgeführt werden und demnach<br />

keine Ausführungsreihenfolge existiert. Falls die Ordnung nicht explizit<br />

angegeben wird, wird die beliebige Ordnung verwendet.<br />

Anwendung - Die parallele Abarbeitung von Unteraufgaben wird in Prozessen verwendet,<br />

um den Prozessfluss in zwei oder mehr parallel zu bearbeitende<br />

Stränge zu teilen. Bei Benutzerschnittstellen können parallele Unteraufgaben<br />

verwendet werden, um die aus dem Web geläufige freie Navigation<br />

(stöbern) im Aufgabenbaum abzubilden.<br />

79


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Überlappend<br />

Oberaufgabe<br />

Unteraufgabe 1<br />

Unteraufgabe 2<br />

Unteraufgabe 3<br />

Abbildung 5.6: Hierarchiebeziehung – Parallel<br />

t (Zeit)<br />

Die Hierarchiebeziehung Überlappend schränkt die allgemeine Bedingung (5.2) weiter<br />

ein, indem sie die Ausführung einer Unteraufgabe nur erlaubt, wenn eine vorher gestartete<br />

Unteraufgabe noch nicht beendet wurde. Analog darf eine Unteraufgabe erst<br />

beendet werden, wenn die folgende Unteraufgabe bereits gestartet wurde. Die zusätzliche<br />

Bedingung lautet:<br />

∀Ai ∈ {A1, ... , An} (<br />

start(Ai) = ∅ ∨<br />

(∀Aj ∈ {A1, ... , An} \ Ai (start(Aj) = ∅ ∨ start(Ai) ≤ start(Aj))) ∨<br />

(ende(Ai) = ∅ → ∃Ak ∈ {A1, ... , An} \ Ai (start(Ak) ≤ start(Ai) ≤ ende(Ak) ≤ ende(Ai)))<br />

)<br />

(5.7)<br />

Jede Unteraufgabe Ai wird entweder gar nicht ausgeführt, oder sie ist die erste ausgeführte<br />

Unteraufgabe vor allen anderen Unteraufgaben, oder sie muss von einer vorherigen<br />

Unteraufgabe Ak überlappt werden. Dies kann als eine Mischform von Sequenz<br />

und Parallel angesehen werden, bei der der Benutzer die Unteraufgaben zwar in Reihe<br />

durchlaufen soll, dabei aber mehrere Unteraufgaben gleichzeitig bearbeitet (siehe<br />

Abbildung 5.7).<br />

Ordnung - Ähnlich wie bei der Sequenz wird eine strikte Ordnung dazu führen,<br />

dass die Unteraufgaben nur der Reihenfolge nach ausgeführt werden<br />

können. Falls die Ordnung nicht explizit angegeben wird, wird die strikte<br />

Ordnung verwendet.<br />

Anwendung - Diese Hierarchiebeziehung ist nicht aus der klassischen Aufgabenmodellierung<br />

entstanden, sondern wurde eingeführt, um die Benutzerschnitt-<br />

80


Verschachtelt<br />

Oberaufgabe<br />

Unteraufgabe 1<br />

Unteraufgabe 2<br />

Unteraufgabe 3<br />

Abbildung 5.7: Hierarchiebeziehung – Überlappend<br />

5.4 Hierarchiebeziehungen<br />

t (Zeit)<br />

stelle bei Aufgaben mit vielen sequenziellen Unteraufgaben bedienbarer<br />

zu machen. Der Benutzer behält Überblick über die aktuelle Position<br />

innerhalb der Aufgabensequenz, weil nicht immer nur eine Unteraufgabe<br />

sichtbar ist, sondern immer auch die vorher Bearbeitete.<br />

Die Hierarchiebeziehung Verschachtelt definiert eine Ausprägung der Sequenz, die bei<br />

der Verwendung von iterativen Unteraufgaben sinnvoll ist. Das Ausführen der Iterationen<br />

einer Aufgabe ist atomar definiert: Eine Aufgabe gilt nur dann als beendet, wenn<br />

alle Iterationen beendet wurden. Bei der sequenziellen Abarbeitung der Unteraufgaben<br />

kann dieses unerwünscht sein, weil nach dem Beenden einer Unteraufgabe und<br />

dem Starten der nächsten Unteraufgabe noch nicht durchgeführte optionale Iterationen<br />

der ersten Unteraufgabe nicht mehr ausgeführt werden können.<br />

Die Hierarchiebeziehung Verschachtelt definiert im Sinne der Sequenz, dass immer<br />

nur eine Iteration einer Unteraufgabe gleichzeitig bearbeitet werden darf, allerdings<br />

müssen nicht mehr alle Iterationen einer Unteraufgabe gesammelt ausgeführt werden,<br />

sondern können mit den Iterationen der anderen Unteraufgaben verschachtelt werden.<br />

Zu diesem Zweck werden in die Bedingung nicht wie bei der Sequenz die Start- und<br />

Endzeitpunkte der Unteraufgabe, sondern die Start- und Endzeitpunkte der Iterationen<br />

aufgenommen. Sei iter(X ) die Menge aller Unteraufgabeniterationen einer Aufgabe<br />

X . Sei startI (X ) der Startzeitpunkt der Iteration X und endeI (X ) der Endzeitpunkt der<br />

Iteration X .<br />

∀Ii ∈ iter(A) ( ∀Ij ∈ iter(A) \ Ii (<br />

startI (Ij) ≤ startI (Ii) → endeI (Ij) ≤ startI (Ii)<br />

))<br />

(5.8)<br />

81


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Unteraufgabe 1<br />

Iteration 1<br />

Oberaufgabe<br />

Unteraufgabe 2<br />

Iteration 1<br />

Unteraufgabe 1<br />

Iteration 2<br />

Abbildung 5.8: Hierarchiebeziehung – Verschachtelt<br />

t (Zeit)<br />

Im Unterschied zur Bedingung 5.4 wird hier die Exklusivität der Ausführung auf Basis<br />

der Iterationen und nicht auf Basis der Unteraufgaben getroffen. Es muss auch weiterhin<br />

gelten, dass am Ende der verschachtelten Ausführung die minimale Kardinalität<br />

aller Unteraufgaben erreicht wurde, damit die Oberaufgabe beendet werden kann.<br />

Abbildung 5.8 zeigt, wie die beiden Iterationen der ersten Unteraufgabe mit der zweiten<br />

Unteraufgabe verschachtelt sind. Übertragen auf ein reales Beispiel wäre das die<br />

Aufgabe „Emails bearbeiten“, die in die verschachtelten und beliebig oft iterierbaren<br />

Unteraufgaben „Emails abrufen“ und „Email schreiben“ verfeinert ist, welche beliebig<br />

oft und beliebig gemischt ausgeführt werden könnten, allerdings nie gleichzeitig.<br />

Hätten wir eine Sequenz verwendet, könnten wir erst beliebig oft die Emails abrufen<br />

und danach beliebig oft Emails schreiben, was in diesem Anwendungsfall unerwünscht<br />

wäre.<br />

Die Idee, die Verfeinerung (anstelle des Startzeitpunkts start(X ) den Startzeitpunkt<br />

der Iteration startI (X ), und ebenso für die Endzeitpunkte) nicht nur für die Sequenz,<br />

sondern verallgemeinert auch für die anderen Ausprägungen zu verwenden, liegt nahe.<br />

Dies ist allerdings nicht sinnvoll,<br />

weil bei der parallelen Ausführung auch jetzt schon die Iterationen verschiedener<br />

Unteraufgaben beliebig gemischt werden können.<br />

weil bei der Selektion nur eine Unteraufgabe ausgeführt wird und die Iterationen<br />

verschiedener Unteraufgaben keine Rolle spielen.<br />

weil bei der überlappenden Ausführung die Iterationen verschiedener Unteraufgaben<br />

nicht beliebig gemischt werden sollen, sondern sich nur mit der Vorgängeraufgabe<br />

überlappen sollen.<br />

Ordnung - Die strikte Ordnung definiert Einschränkungen bezüglich des Startzeitpunktes<br />

der ersten Iteration der Unteraufgaben. Diese kann auch für<br />

diese Hierarchiebeziehung verwendet werden und definiert die Reihenfolge<br />

der ersten Iterationen der Unteraufgaben. Auf die Reihenfolge<br />

der weiteren Iterationen hat die strikte Ordnung keinen Einfluss. Falls<br />

die Ordnung nicht explizit angegeben wird, wird die beliebige Ordnung<br />

verwendet.<br />

82


Oberaufgabe<br />

Unteraufgabe 1<br />

Unteraufgabe 3 Unteraufgabe 2<br />

Abbildung 5.9: Hierarchiebeziehung – Arbiträr<br />

5.4 Hierarchiebeziehungen<br />

t (Zeit)<br />

Anwendung - Diese Hierarchiebeziehung stammt nicht aus der klassischen Aufgabenmodellierung,<br />

sondern ist sinnvoll, um Auswahlstrukturen (Menüs, Symbolleisten,<br />

etc . . . ) im Hinblick auf die Benutzerschnittstelle zu modellieren.<br />

Wenn z. B. die Unteraufgaben in beliebiger Reihenfolge mehrfach<br />

ausgeführt werden sollen, aber immer nur eine gleichzeitig bearbeitet<br />

werden soll.<br />

Arbiträr<br />

Die Hierarchiebeziehung Arbiträr entspricht der allgemeinen Bedingung (5.2) und fügt<br />

keine weiteren Bedingungen hinzu. Sie lässt damit, im Rahmen der allgemeinen Bedingung,<br />

dem Benutzer beliebige Ausführungsreihenfolgen der Unteraufgaben. Das Beispiel<br />

in Abbildung 5.9 zeigt eine arbiträre Ausführung der Unteraufgaben, bei denen<br />

einige Unteraufgaben parallel und einige sequenziell ausgeführt werden.<br />

Bei der Verwendung dieser Hierarchiebeziehung ist zu beachten, dass sie nur eingesetzt<br />

werden sollte, wenn die übrigen Ausprägungen der Hierarchiebeziehungen zu<br />

restriktiv sind. Sonst wird das Aufgabenmodell zu generisch und das Laufzeitsystem<br />

wird keinen geeigneten Dialog für die Benutzerschnittstelle generieren können.<br />

Ordnung - Die strikte Ordnung bewirkt, dass arbiträr auszuführende Unteraufgaben<br />

der Reihe nach gestartet werden müssen. Über die Reihenfolge des<br />

Beendens der Unteraufgaben wird keine Aussage getroffen. Falls die<br />

Ordnung nicht explizit angegeben wird, wird die beliebige Ordnung verwendet.<br />

Anwendung - In Benutzeroberflächen können arbiträr auszuführende Unteraufgaben<br />

verwendet werden, um die aus dem Web geläufige freie Navigation (stöbern)<br />

im Aufgabenbaum abzubilden.<br />

83


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Oberaufgabe<br />

Unteraufgabe 1 Unteraufgabe 2 Unteraufgabe 3<br />

t (Zeit)<br />

Abbildung 5.10: Abarbeitung der Aufgaben als Sequenz (erste Variante)<br />

5.4.4 Semantik der Hierarchisierung<br />

Bei der Einführung der Hierarchie entstehen zwei Sichtweisen auf die Komposition von<br />

Aufgaben. Bei der ersten Variante wird durch eine Dekomposition in Unteraufgaben<br />

die Ursprungsaufgabe vollständig ersetzt, die Bearbeitung der Unteraufgaben ergibt<br />

als Summe genau die Erfüllung der Oberaufgabe. Wenn die Dauer der Bearbeitung<br />

einer Aufgabe A als dauer(A) = ende(A) − start(A) definiert wird, dann gilt dauer(A) =<br />

dauer(A1)+dauer(A2)+...+dauer(An) (siehe Abbildung 5.10). Für einen Aufgabenbaum<br />

bedeutet dies, dass nur die Blattaufgaben vom Benutzer ausgeführt werden und die<br />

im Baum gelegenen Aufgaben der Strukturierung und Komposition der Blattaufgaben<br />

dienen.<br />

Die zweite Variante erlaubt den Nicht-Blattaufgaben einen eigenständigen Anteil an<br />

der Erfüllung der Aufgabe. Es gilt dauer(A) ≥ dauer(A1) + dauer(A2) + ... + dauer(An)<br />

(siehe Abbildung 5.11). Vor, zwischen und nach den Ausführungen der Unteraufgaben<br />

kann die Aufgabe selbst bearbeitet werden.<br />

Wir werden im Verlauf dieser Arbeit die zweite Variante verwenden, sie ermöglicht<br />

in den späteren Phasen der Modellierung das Hinzufügen von Dialogelementen an alle<br />

Aufgaben des Aufgabenbaums, nicht nur an die Blattaufgaben. Diese erlaubt auch eine<br />

flexible Handhabung des Lebenszyklus einer Aufgabe, z. B. kann, aber muss nicht immer<br />

das Starten einer Unteraufgabe das Beenden einer vorherigen Unteraufgabe nach sich<br />

ziehen, wie dies im Beispiel der ersten Variante notwendig ist.<br />

84<br />

Oberaufgabe<br />

Unteraufgabe 1 Unteraufgabe 2 Unteraufgabe 3<br />

t (Zeit)<br />

Abbildung 5.11: Abarbeitung der Aufgaben als Sequenz (zweite Variante)


5.4.5 Zusammenfassung der Hierarchiebeziehungen<br />

5.4 Hierarchiebeziehungen<br />

Tabelle 5.1 beschreibt zusammenfassend die möglichen Hierarchiebeziehungen im Aufgabenmodell,<br />

sowie deren implizite Ordnungsbedingung. An dieser Stelle führen wir<br />

auch die Symbole der Hierarchiebeziehungen ein, die wir fortan in der grafischen Notation<br />

des Aufgabenmodells verwenden werden. Jede Nicht-Blattaufgabe muss eine<br />

dieser Hierarchiebeziehungen verwenden, um die Ausführungsreihenfolge der Unteraufgaben<br />

zu bestimmen. Falls eine von der impliziten Ordnung abweichende Ordnung<br />

verwendet werden soll, muss diese bei der Oberaufgabe angegeben werden.<br />

Tabelle 5.1: Hierarchiebeziehungen<br />

name symbol beschreibung impl. ordnung<br />

sequenz Die Unteraufgaben können nur nacheinander<br />

ausgeführt werden, eine gleichzeitige<br />

Ausführung ist untersagt.<br />

selektion Nur eine der Unteraufgaben darf ausgeführt<br />

werden. Wenn diese gestartet ist,<br />

kann keine andere gestartet werden.<br />

parallel Die Unteraufgaben müssen gleichzeitig<br />

ausgeführt werden.<br />

überlappend Die Unteraufgaben werden nacheinander<br />

ausgeführt, allerdings darf sich eine Unteraufgabe<br />

mit der Vorherigen überlappen.<br />

verschachtelt Die Iterationen der Unteraufgaben müssen<br />

nacheinander ausgeführt werden, können<br />

aber mit denen anderer Unteraufgaben<br />

verschachtelt werden.<br />

arbiträr Die Unteraufgaben dürfen beliebig ausgeführt<br />

werden, auch eine gleichzeitige Ausführung<br />

ist gestattet.<br />

5.4.6 Beispiel<br />

strikt<br />

beliebig<br />

beliebig<br />

strikt<br />

beliebig<br />

beliebig<br />

Das Aufgabenmodell in Abbildung 5.12 zeigt ein um Hierarchiebeziehungen erweitertes<br />

Beispiel. Die Eingabe der Kontaktinformationen wird auf zwei Unteraufgaben<br />

verteilt, die alternativ ausgewählt werden können. Falls eine Adresse als Kontaktinformation<br />

angegeben werden soll, wird wiederum in zwei Unteraufgaben verzweigt, die<br />

die Adresseingabe in zwei sequenziellen Schritten erledigt. Die Ordnung wird dabei<br />

vom vordefinierten strikt auf beliebig geändert, sodass die einzelnen Unteraufgaben in<br />

beliebiger Reihenfolge bearbeitet werden können. Nachdem die Oberaufgabe „Kontaktinformationen<br />

angeben“ durchgeführt wurde, sind aufgrund der Bedingungen des<br />

85


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Strasse<br />

angeben<br />

Adresse<br />

angeben<br />

Stadt<br />

angeben<br />

Kontaktinformationen<br />

angeben<br />

Kardinalität = 1…5<br />

Telefonnummer<br />

angeben<br />

Abbildung 5.12: Beispiel Aufgabenmodell – Hierarchie<br />

Aufgabenbaums mindestens eine und maximal fünf Adressen und Telefonnummern im<br />

beliebigen Verhältnis vom Benutzer angegeben worden.<br />

5.5 Der Aufgabentyp<br />

5.5.1 Definition<br />

Aufgaben als Beschreibung der Mensch-Maschine-Interaktion können grundsätzlich in<br />

vier verschiedene Kategorien aufgeteilt werden (nach Paternò u. a. [1997], siehe Abschnitt<br />

3.4.2). Diese Kategorien beschränken später bei der Aufgabenausführung den<br />

Benutzerdialog und erlauben schon früh im Modellierungsprozess eine Festlegung, ob<br />

und wie der Benutzer mit der Anwendung interagieren soll.<br />

Benutzeraufgaben werden ausschließlich vom Benutzer ausgeführt, sie beinhalten die<br />

kognitive Aktivität des Benutzers ohne direkte Interaktion mit der Anwendung.<br />

Zum Beispiel ist das Lesen einer Angebotsliste mit der anschließenden Auswahl eines<br />

Angebots eine Benutzeraufgabe. Diese Definition nach [Paternò u. a., 1997] ist<br />

für unser ausführbares Aufgabenmodell allerdings zu restriktiv, denn der Benutzer<br />

müsste zumindest der Anwendung mitteilen, wann seine Aktivität beendet<br />

ist, damit die Abarbeitung des Aufgabenmodells fortgesetzt werden kann. Wir<br />

definieren eine Aufgabe als Benutzeraufgabe, wenn sie nur mit der Präsentationsschicht<br />

interagiert und keine Auswirkungen auf die Anwendungsschicht hat 27 .<br />

27 Eine Definition der Schichten einer Web-Anwendung fand in Abschnitt 2.4 statt.<br />

86


5.5 Der Aufgabentyp<br />

Damit sind z. B. einfache Eingaben möglich und der Benutzer kann die weitere<br />

Ausführung des Aufgabenmodells anstoßen.<br />

Systemaufgaben werden ausschließlich von der Anwendung ohne Einflussnahme des<br />

Benutzers ausgeführt. Zur Laufzeit kann die Anwendung, wenn sie auf eine solche<br />

Aufgabe stößt, diese starten und beenden, der Benutzer kann erst in einer darauf<br />

folgenden Aufgabe auf den Erfolg (oder Misserfolg) dieser Aufgabe reagieren.<br />

Beispiele hierzu sind die Kommunikation mit einem Mailserver zum Verschicken<br />

einer Nachricht oder die endgültige Buchung eines Fluges.<br />

Interaktionsaufgaben werden vom Benutzer und von der Anwendung gemeinsam ausgeführt.<br />

Der Benutzer liefert Eingaben an die Anwendung, worauf diese die Eingaben<br />

verarbeitet und eine Ausgabe produziert. Ein Beispiel hierzu ist die Formulierung<br />

einer Suchanfrage für Flüge vom Benutzer und die darauf folgende<br />

<strong>Generierung</strong> einer Flugliste von der Anwendung. Als Abgrenzung zur Benutzeraufgabe<br />

muss eine Interaktionsaufgabe mit der Anwendungsschicht interagieren.<br />

Abstrakte Aufgaben enthalten komplexe Aktivitäten, welche nicht durch eine der drei<br />

vorhergehenden Aufgabentypen beschrieben werden können. Dieser Aufgabentyp<br />

tritt vor allem in dem oberen Teil eines Aufgabenbaums auf, welche erst durch<br />

Unteraufgaben konkretisiert werden und dem entsprechend die Aufgabentypen<br />

der Unteraufgaben zusammenfassen müssen.<br />

Die Aufgabentypen müssen der Logik der Aufgabenhierarchie folgen, eine Benutzeraufgabe<br />

kann z. B. nicht in eine abstrakte Aufgabe oder in eine Systemaufgabe verfeinert<br />

werden. Wenn A wieder die Oberaufgabe ist, Ai ∈ {A1, ... , An} die Unteraufgaben<br />

sind und typ(X ) den Typ einer Aufgabe X bestimmt, dann können wir definieren:<br />

typ(A) = abstrakt → typ(Ai) ∈ {abstrakt, interaktion, benutzer, system}<br />

typ(A) = interaktion → typ(Ai) ∈ {interaktion, benutzer, system}<br />

typ(A) = benutzer → typ(Ai) ∈ {benutzer}<br />

typ(A) = system → typ(Ai) ∈ {system}<br />

(5.9)<br />

In der grafischen Notation werden wir die Aufgaben mit folgenden Symbolen typisieren:<br />

Tabelle 5.2: Aufgabentypen<br />

name symbol<br />

Benutzeraufgabe<br />

Systemaufgabe<br />

Interaktionsaufgabe<br />

abstrakte Aufgabe<br />

87


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

5.5.2 Beispiel<br />

Strasse<br />

angeben<br />

Adresse<br />

angeben<br />

Stadt<br />

angeben<br />

Kontaktinformationen<br />

angeben<br />

Kardinalität = 1…5<br />

Telefonnummer<br />

angeben<br />

Abbildung 5.13: Beispiel Aufgabenmodell – Aufgabentypen<br />

In Abbildung 5.13 ist unser Beispiel um Aufgabentypen ergänzt. Während die meisten<br />

Aufgaben rein vom Benutzer ausgeführt werden (Informationen werden in strukturierter<br />

Form eingegeben), ist die Aufgabe Kontaktinformationen angeben als Interaktionsaufgabe<br />

ausgelegt. Bei der späteren Modellierung ist dann die Weitergabe der eingegebenen<br />

Kontaktinformationen aus der Präsentationsschicht in die Anwendungsschicht<br />

möglich, um z. B. die Kontaktinformationen persistent in einer Datenbank abzulegen.<br />

5.6 Unterbrechbarkeit<br />

5.6.1 Definition<br />

In diesem Abschnitt werden wir den Lebenszyklus von Aufgaben betrachten und die<br />

Frage beantworten, warum dieser Lebenszyklus bereits im Aufgabenmodell integriert<br />

werden sollte.<br />

Web-Anwendungen müssen im Gegensatz zu klassischen desktop-basierten Anwendungen<br />

mit einer Vielzahl von Unterbrechungen rechnen. Wir unterscheiden zwei Kategorien<br />

von Unterbrechungen: vom Benutzer ausgehende und vom System ausgehende.<br />

Vom Benutzer ausgehende Unterbrechungen entstehen, wenn der Benutzer Aufgaben<br />

ausführen möchte, die laut Aufgabenmodell aktuell nicht ausführbar sind. Dies<br />

kann beispielsweise durch die Verwendung der Navigationsknöpfe des Webbrowsers<br />

88


5.6 Unterbrechbarkeit<br />

geschehen (Rücksprung auf eine jetzt nicht mehr ausführbare Aufgabe), durch das Anwählen<br />

eines Lesezeichens (direkter Sprung auf eine Aufgabe, die noch nicht ausführbar<br />

ist) oder auch durch die Eingabe einer URL in den Webbrowser. Diese Navigation<br />

außerhalb des Aufgabenkontexts ist vom System zwar erkennbar, aber nicht automatisch<br />

korrigierbar. Der Aufgabenmodellierer sollte entscheiden können, wie später bei<br />

einer solchen Unterbrechung zu verfahren ist. In klassischen desktop-basierten Anwendungen<br />

können diese Unterbrechungen nicht auftreten, weil dort in der Benutzeroberfläche<br />

die Navigationsmöglichkeiten außerhalb des Aufgabenkontexts nicht existieren.<br />

Aufgrund der Zustandslosigkeit des hypertext-transfer-protocol (http) muss der Server<br />

jede Benutzeranfrage mit einem im Serverspeicher abgelegten Aufgabenkontext<br />

assoziieren, in dem der Zustand der Anwendung für diesen Benutzer vorgehalten wird.<br />

Weil der Serverspeicher endlich ist und ein Benutzer, der einen Aufgabenkontext initiiert<br />

hat, eventuell seinen Webbrowser schließt und nicht wiederkehrt, muss dieser<br />

Serverspeicher aufgeräumt werden. Üblicherweise geschieht dies mit einer Zeitüberschreitung<br />

nach der letzten Benutzeranfrage, und in dem beschriebenen Fall ist dies die<br />

korrekte Vorgehensweise. Was geschieht aber, wenn der Benutzer nur eine Weile den<br />

Arbeitsplatz verlassen hat und im jetzt nicht mehr vorhandenen Aufgabenkontext weiter<br />

arbeiten möchte? In diesem Fall hat eine vom System ausgehende Unterbrechung<br />

stattgefunden. In klassischen desktop-basierten Anwendungen können diese Unterbrechungen<br />

nicht auftreten, weil dort die Benutzeroberfläche entweder Teil der gesamten<br />

Anwendung ist und deshalb nicht einzeln beendbar ist, oder aber die Anwendung über<br />

ein zustandsbehaftetes Protokoll angebunden wird und damit die oben skizzierte Unsicherheit<br />

nicht existiert.<br />

Egal welcher Art die Unterbrechungen sind, das Laufzeitsystem sollte sie erkennen<br />

und darauf definiert reagieren. Anstelle einer einzigen Unterbrechungsstrategie für<br />

alle Aufgabenmodelle wollen wir dem Modellierer die Wahl lassen, wie einzelne Aufgaben<br />

eines Aufgabenmodells auf Unterbrechungen reagieren.<br />

Folgende Strategien fügen wir dem Aufgabenmodell hinzu:<br />

flüchtig Im Falle einer Unterbrechung wird der Aufgabenkontext verworfen. Dies ist<br />

die Standardstrategie, wenn sonst keine Strategie angegeben wird.<br />

unterbrechbar Im Falle einer vom Benutzer ausgehenden Unterbrechung wird der Aufgabenkontext<br />

im Speicher vorgehalten. Dem Benutzer wird in der Oberfläche die<br />

Möglichkeit gegeben, das unterbrochene Aufgabenmodell fortzusetzen.<br />

persistent Im Falle einer vom System ausgehenden Unterbrechung wird zusätzlich zum<br />

Verhalten von „unterbrechbar“ der Aufgabenkontext auf einem Langzeitspeicher<br />

(z. B. Datenbank) persistiert. Dies funktioniert nur für Benutzer, welche beim<br />

nächsten Besuch reidentifiziert werden können, z. B. über eine Name/Passwort-<br />

Registration oder ein sogenanntes Site-Cookie. Der Benutzer arbeitet an der gleichen<br />

Stelle weiter, an der die Unterbrechung stattgefunden hat.<br />

Diese Strategien können innerhalb einer Aufgabenhierarchie auch gemischt werden,<br />

solange die Ordnung persistent→unterbrechbar→flüchtig gewahrt bleibt. Eine persistente<br />

Aufgabe kann persistente, unterbrechbare und flüchtige Unteraufgaben enthalten.<br />

Unterbrechbare Aufgaben können unterbrechbare und flüchtige Unteraufgaben<br />

89


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

enthalten. Flüchtige Aufgaben können nur flüchtige Unteraufgaben enthalten. Aus<br />

dieser Ordnung geht hervor, dass an der Wurzelaufgabe ablesbar ist, welche Strategie<br />

im Falle einer Unterbrechung anzuwenden ist. Auch verhindert diese Ordnung Inkonsistenzen<br />

zur Laufzeit, weil von einem rekonstruierten Aufgabenkontext einer Unteraufgabe<br />

die Aufgabenkontexte alle Elternaufgaben bis zur Wurzel ebenfalls rekonstruiert<br />

werden. Falls ein Aufgabenkontext in der Kette der Aufgabenkontexte bis zur Wurzel<br />

nicht gespeichert werden würde, hätte dieser bei der Rekonstruktion seine Startund<br />

Endzeitpunkte verloren. Die Bedingung 5.2 wäre nicht mehr erfüllt, obwohl sie es<br />

vor der Unterbrechung war. Aus diesem Grund kann die Unterbrechungsstrategie auf<br />

den Ebenen im Aufgabenbaum von der Wurzel- bis zu den Blattaufgaben nur abgeschwächt,<br />

niemals jedoch verstärkt werden.<br />

Um die Konsistenz der Hierarchiebedingungen nicht zu gefährden, weil z. B. auf der<br />

Ebene der Unteraufgaben einige persistiert werden und einige nicht, definieren wir<br />

die Unterbrechungsstrategien auf den Hierarchiebeziehungen. Wenn z. B. eine Aufgabe<br />

mit der Hierarchiebeziehung Sequenz und der Unterbrechungsstrategie persistent<br />

ausgezeichnet ist, so bedeutet dies, dass die Aufgabenkontexte sämtlicher Unteraufgaben<br />

im Falle einer Unterbrechung persistiert werden. Über die Unterbrechungsstrategie<br />

der Aufgabe selbst wird an dieser Stelle keine Aussage getroffen, diese muss in der Hierarchiebeziehung<br />

der Elternaufgabe definiert sein. Als Ausnahme ist die Wurzelaufgabe<br />

zu betrachten, die keine Nachbaraufgaben und keine Elternaufgabe besitzt. In diesem<br />

Fall gilt die Unterbrechungsstrategie der Wurzelaufgabe sowohl für den Aufgabenkontext<br />

der Wurzelaufgabe selbst als auch für die Hierarchiebeziehungen und damit die<br />

Unteraufgaben.<br />

5.6.2 Beispiel<br />

Ein Beispiel verdeutlicht das Konzept der Unterbrechungsstrategie in unserem Interaktionsmodell.<br />

Abbildung 5.14 zeigt ein um Unterbrechungsstrategien erweitertes Aufgabenmodell.<br />

Die Wurzelaufgabe ist mit der Strategie persistent ausgezeichnet, im Falle<br />

einer Unterbrechung wird der Zustand dieser Aufgabe und aller Unteraufgaben persistiert.<br />

Wenn der Benutzer also gerade die Aufgabe Telefonnummer angeben bearbeitet,<br />

würden die bis dorthin eingegebenen Daten gesichert. Die Unteraufgaben von Adresse<br />

angeben sind hingegen als flüchtig gekennzeichnet, die bis zur Unterbrechung eingegebenen<br />

Daten in den Unteraufgaben würden verworfen werden. Der Aufgabenkontext<br />

von Adresse angeben selbst würde hingegen gesichert werden, weil die Aufgabe<br />

eine Unteraufgabe von Kontaktinformationen angeben ist und damit von deren Unterbrechungsstrategie<br />

kontrolliert wird.<br />

Dem Modellierer bietet sich die Möglichkeit, die Aufgaben anhand der Lebensdauer<br />

ihres Zustands zu klassifizieren. Langfristig interessante Informationen, wie z. B. der<br />

Inhalt eines Warenkorbes, sollten persistiert werden. Kurzfristig interessante Informationen,<br />

wie z. B. die Abfrage des Kinoprogramms eines spezifischen Tages, könnten als<br />

flüchtig markiert werden, sie wären beim nächsten Besuch des Benutzers wahrscheinlich<br />

veraltet.<br />

90


Strasse<br />

angeben<br />

Adresse<br />

angeben<br />

Strategie = flüchtig<br />

Stadt<br />

angeben<br />

5.7 Zugriffskontrolle über Rollenkonzept<br />

Kontaktinformationen<br />

angeben<br />

Strategie = persistent<br />

Kardinalität = 1…5<br />

Telefonnummer<br />

angeben<br />

Abbildung 5.14: Beispiel Aufgabenmodell – Unterbrechung<br />

5.7 Zugriffskontrolle über Rollenkonzept<br />

Dieser Abschnitt beschäftigt sich mit der Integration einer Zugriffskontrolle in das Aufgabenmodell.<br />

Zugriffskontrolle besteht in der Informatik meist aus zwei Konzepten:<br />

Unter Authentifizierung versteht man die eindeutige Identifizierung eines Benutzers<br />

am System. Dies kann – je nach Sicherheitsanforderung – durch Wissen (z. B.<br />

Passwort), Besitz (z. B. qualifizierte Signaturkarte) oder durch körperliche Merkmale<br />

(z. B. Fingerabdruck) geschehen. Die Authentifizierung ist nicht Teil des Aufgabenmodells,<br />

wir gehen davon aus, dass der Benutzer sich am Laufzeitsystem<br />

authentifizieren kann und Zugriff auf die Authentifizierungsdaten (englisch: Principal)<br />

besteht.<br />

Die Autorisierung beschreibt die Rechte, die eine authentifizierte Person im Umfeld<br />

der Anwendung besitzt. Autorisierungsdaten können in vielfältiger Weise<br />

abgelegt werden, wobei speziell auf die Integration in das Aufgabenmodell Wert<br />

gelegt werden muss. So eignet sich eine direkte Beziehung zwischen authentifiziertem<br />

Benutzer und zu schützender Aufgabe nicht, da die möglichen Benutzer<br />

während der Aufgabenmodellierung gar nicht fest stehen, bzw. große Gruppen<br />

umfassen können. Wir konzentrieren uns im Folgenden auf das Rollenkonzept,<br />

welches die notwendige Abstraktion bietet.<br />

91


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Role Hierarchy<br />

User<br />

User Assignment<br />

Role Permission Assignment<br />

Domain<br />

Operations Objects<br />

Abbildung 5.15: Hierarchischer RBAC Standard nach ANSI 359-2004 ([INCITS, 2004])<br />

5.7.1 Rollenkonzept<br />

Das Rollenkonzept führt ein weiteres Element zwischen authentifiziertem Benutzer und<br />

den zugriffsbeschränkten Ressourcen ein: die Rolle. Rollen bündeln Zugriffsrechte für<br />

verschiedene Einsatzzwecke und erlauben eine Entkoppelung von Benutzern und Ressourcen.<br />

Zum Beispiel kann eine Rolle „Buchhaltung“ eingeführt werden, die der Ressource<br />

„Lohnabrechnungen“ zugeordnet wird. Durch eine Zuordnung dieser Rolle zu<br />

einem Benutzer wäre eine Autorisierungskette Benutzer → Rolle → Ressource definiert<br />

und die Berechtigung des Benutzers auf eine Ressource kann einwandfrei bestimmt<br />

werden. Die Kardinalität der Beziehung zwischen Benutzer und Rolle, sowie zwischen<br />

Rolle und Ressource ist in beiden Fällen n : m.<br />

Der ANSI Standard 359-2004 (siehe [INCITS, 2004]) definiert ein entsprechendes Rollenkonzept,<br />

welches als Role Based Access Control (RBAC, rollenbasierte Zugriffskontrolle)<br />

bezeichnet wird und breite Verwendung findet (z. B. in Identitätsmanagementsystemen).<br />

Das Bild 5.15 zeigt die Übersicht über die Komponenten des Standards, wobei<br />

Ressourcen in Objekte und Operationen geteilt sind. Weiterhin wird eine Hierarchisierung<br />

der Rollen vorgeschlagen, um die Zugriffsrechte großer Anwendungen besser<br />

verwalten zu können. Im obigen Beispiel könnte die Rolle Buchhaltung alle allgemeinen<br />

Rechte der Buchhaltung besitzen und weitere Unterrollen wie zum Beispiel Anlagenbuchhaltung<br />

und Lohnbuchhaltung speziell für diese Aufgaben notwendige Rechte.<br />

Die Menge der Berechtigungen setzt sich dann aus den Rechten aller Rollen zusammen,<br />

die sich auf dem Weg der vergebenen Rolle bis zur Wurzel der Rollenhierarchie<br />

befinden.<br />

Rollen sind dabei nicht mit Gruppen zu verwechseln. Bild 5.16 zeigt eine gängige<br />

Erweiterung des RBAC Standards um Gruppen. Die Gruppenzugehörigkeit beschreibt<br />

eine Mitgliedschaft zu einer Personengruppe, zum Beispiel einer Abteilung. Im häufig<br />

anzutreffenden Fall, dass Berechtigungen auch Personengruppen zugeordnet werden<br />

können, kann eine Rolle auch einer Gruppe zugeordnet werden, alle Mitglieder dieser<br />

Gruppe erhalten dann die zugeordnete Rolle. Gruppen können ähnlich hierarchisch<br />

angeordnet werden wie Rollen.<br />

5.7.2 Integration in das Aufgabenmodell<br />

Zur Integration des Rollenkonzeptes in das Aufgabenmodell betrachten wir zuerst die<br />

Integration einer einzelnen Aufgabe in das Rollenkonzept aus Abbildung 5.16. Die ab-<br />

92


5.7 Zugriffskontrolle über Rollenkonzept<br />

Hierarchical RBAC Domain Specific<br />

User<br />

0..*<br />

0..* belongs to 0..*<br />

0..*<br />

0..1<br />

Group<br />

is in role<br />

0..*<br />

0..1<br />

is child of<br />

is in role 0..*<br />

Role 1<br />

0..* accessible by<br />

0..*<br />

1<br />

is child of<br />

accessible by<br />

0..*<br />

Domain<br />

Operations<br />

0..*<br />

Abbildung 5.16: Um Gruppen erweiterter RBAC Standard<br />

Objects<br />

zusichernden Objekte und Operationen sind dort in der Domäne zusammengefasst. Da<br />

unsere Aufgabe aus Sicht des Rollenkonzeptes auch domänenspezifisch ist und wir sie<br />

zur Laufzeit absichern wollen, müssen wir sie mit den Rollen assoziieren. Die Zuweisung<br />

der Rollen zu den Aufgaben soll bereits bei der Modellierung im Aufgabenmodell<br />

erfolgen. Zu diesem Zweck wird im Aufgabenmodell eine Liste der Zugriffsrollen (eine<br />

Aufgabe kann durch mehrere Rollen autorisiert sein, wobei ein Benutzer nur eine der<br />

Rollen besitzen muss, um auf die Aufgabe zuzugreifen) für jede Aufgabe definiert. Das<br />

Laufzeitsystem muss dann diese Rollen mit der vorhandenen Benutzerverwaltung abgleichen<br />

und damit die Kette Benutzer → Rolle → Aufgabe herstellen können, um den<br />

Zugriff auf eine Aufgabe zu erlauben oder zu verwehren.<br />

Bei der Modellierung des Aufgabenmodells sind keine Informationen darüber bekannt,<br />

wie Rollenobjekte aussehen und welche überhaupt existieren. Wir schlagen deshalb<br />

vor, die Rollen über Namen zu identifizieren. Das Laufzeitsystem sollte vor dem<br />

Ausführen des Aufgabenmodells eine Konsistenzprüfung der verwendeten Rollennamen<br />

durchführen und eventuell die Ausführung abbrechen, falls nicht alle Rollennamen<br />

in Rollenobjekte der zur Laufzeit vorhandenen Benutzerverwaltung aufgelöst werden<br />

können.<br />

In einer Aufgabenhierarchie ist die Auswertung der benötigten Rollen, um auf eine<br />

Aufgabe zugreifen zu dürfen, aus zwei Gründen komplexer:<br />

Rollen vererben sich auf Unteraufgaben. Obwohl in den Unteraufgaben die in<br />

den Elternaufgaben verwendeten Rollen nicht erneut explizit erwähnt werden,<br />

sind diese trotzdem in Kraft.<br />

Die Rollen, die innerhalb einer Aufgabe verwendet werden, sind oder-verknüpft.<br />

Die Rollen, die auf dem Weg der Aufgabe bis zur Wurzelaufgabe verwendet werden,<br />

sind und-verknüpft.<br />

93


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Eine Aufgabe, die selbst die Rollen lohnbuchhaltung und anlagenbuchhaltung verwendet<br />

und deren Oberaufgabe nur den Rollen vorgesetzter oder administrator Zugriff<br />

gestattet, muss deshalb folgende Bedingung auswerten:<br />

(lohnbuchhaltung ∨ anlagenbuchhaltung) ∧ (vorgesetzter ∨ administrator) (5.10)<br />

Dies ist aber ein recht kompliziertes Beispiel. In den meisten Fällen werden nur einzelne<br />

Zugriffsrollen für Aufgaben verwendet und auch in der Hierarchie werden sich<br />

selten mehrere Rollen überlappen. Die Verwendung von Zugriffsrollen kann auch zu<br />

nicht erreichbaren Aufgaben führen, eine klare Rollenmodellierung sollte deshalb parallel<br />

zur Aufgabenmodellierung erfolgen.<br />

5.7.3 Rollenspezifische Adaption der Benutzerschnittstelle<br />

Aufgabenmodelle für mehrere Rollen müssen nicht in durch Rollen voneinander getrennten<br />

Teilen erstellt werden, also z. B. nicht in zwei disjunkte Aufgabenbäume für<br />

zwei verschiedene Rollen. Rollen können auch innerhalb der Aufgabenhierarchie feingranular<br />

gemischt werden und dadurch die gleichen Aufgaben für unterschiedliche Rollen<br />

im Detail unterschiedlich ausgestalten. Zur Laufzeit erhalten wir dann eine rollenspezifische<br />

Adaptierung der Benutzerschnittstelle. Dies erfordert eine Nachbetrachtung<br />

der Hierarchiebeziehungen, denn z. B. in einer Sequenz könnte eine der Unteraufgaben<br />

aufgrund der Rollenrestriktion nicht erreichbar sein. Die Sequenz könnte wie folgt ausgeführt<br />

werden:<br />

Es wird angezeigt, dass eine nicht ausführbare Aufgabe in der Sequenz wartet,<br />

eventuell mit der Angabe der fehlenden Rollen (Die Rollenbedingung kann, wie<br />

oben erwähnt, komplex werden und damit schlecht darstellbar sein). Die Ausführung<br />

ist dann entweder an dieser Stelle beendet oder kann erst durch einen<br />

Rollenwechsel des Benutzers fortgesetzt werden.<br />

Die Aufgaben mit den beim Benutzer nicht vorhandenen Rollen werden aus der<br />

Menge der Unteraufgaben entfernt, die Sequenz wird auf die verbleibenden Aufgaben<br />

reduziert. Entfernte Aufgaben werden nie in der Benutzerschnittstelle auftauchen.<br />

Der Modellierer des Aufgabenmodells muss dies beachten, und darf Unteraufgaben<br />

nur mit Rollen auszeichnen, die nicht essenziell wichtig für die Erfüllung<br />

der Oberaufgabe sind.<br />

Die erste Variante eignet sich, um einen Workflow für verschiedene Benutzer zu erstellen,<br />

die an einer Aufgabe beteiligt sein sollen, z. B. eine Dokumentenfreigabe mit<br />

Autoren und Redakteuren. Dies ist allerdings nicht der Fokus dieser Arbeit 28 , wir wollen<br />

Aufgabenmodelle für Webanwendungen definieren, die von mehreren unabhängig<br />

und parallel arbeitenden Benutzern verwendet werden 29 . Wir werden deshalb die<br />

28 Das ConcurTaskTrees-Environment [Paternò u. a., 1997] bietet dazu z. B. den sogenannten Cooperative mode<br />

29 Natürlich arbeiten mehrere Benutzer niemals wirklich unabhängig auf einem System, z. B. ist die Menge an<br />

verfügbaren Sitzplätzen für einen Flug in einem Flugbuchungssystem begrenzt. Diese Abhängigkeiten werden<br />

allerdings im Domänenmodell verwaltet und sind nicht Teil unseres Aufgabenmodells<br />

94


Strasse<br />

angeben<br />

Adresse<br />

angeben<br />

Strategie = flüchtig<br />

Stadt<br />

angeben<br />

5.8 Wiederverwendbarkeit von Aufgabenhierarchien<br />

Kontaktinformationen<br />

angeben<br />

Strategie = persistent<br />

Kardinalität = 1…5<br />

Telefonnummer<br />

angeben<br />

existierende<br />

Adresse kopieren<br />

ZugriffsRolle = »admin«<br />

Abbildung 5.17: Beispiel Aufgabenmodell – Zugriffsrollen<br />

zweite Variante verwenden, sie eignet sich dazu, aus einem Aufgabenmodell über die<br />

Rollen unterschiedliche Ausprägungen für unterschiedliche Benutzer zu generieren.<br />

Bei der Modellierung muss dieser Unterschied bekannt sein, denn sobald eine Aufgabe<br />

mit Rollen ausgezeichnet wird, kann sie eventuell verworfen werden. Hierarchiebeziehungen,<br />

Kardinalitäten und Unterbrechbarkeit dieser Aufgabe werden dann nicht<br />

weiter betrachtet.<br />

5.7.4 Beispiel<br />

Abbildung 5.17 zeigt ein um Zugriffsrollen erweitertes Aufgabenmodell. Zusätzlich zu<br />

den Möglichkeiten eines Nutzers ohne Zugriffsrollen (Adresse angeben und Telefonnumer<br />

angeben) darf ein Benutzer in der Rolle admin aus der Liste der bereits verfügbaren<br />

Adressen eine existierende Adresse kopieren. Diese Aufgabe ist als Interaktionsaufgabe<br />

ausgelegt, weil aus der Anwendung die Liste aller Kontaktinformationen geholt werden<br />

muss, aus der der Benutzer dann einen zu kopierenden Eintrag auswählt.<br />

5.8 Wiederverwendbarkeit von Aufgabenhierarchien<br />

5.8.1 Motivation<br />

Bei der Modellierung eines Aufgabenmodells kann es vorkommen, dass an verschiedenen<br />

Stellen im Aufgabenbaum die gleiche Funktionalität gefordert wird. Die triviale<br />

95


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

Abbildung 5.18: Gerichteter azyklischer Graph und gerichteter zyklischer Graph<br />

Herangehensweise wäre das Kopieren eines Teilbaums an eine andere Stelle im Aufgabenbaum.<br />

Dies führt allerdings zu Redundanzen und zu einem schlecht wartbaren<br />

Aufgabenmodell, wenn z. B. später eine Änderung an den duplizierten Aufgaben erfolgen<br />

soll, muss diese an verschiedenen Stellen im Aufgabenmodell stattfinden.<br />

Eine bessere Lösung ist das Verwenden von Referenzen. Teilbäume werden einmal<br />

im Aufgabenmodell definiert und von anderen Stellen referenziert (Ursprungsaufgabenmodell).<br />

Dazu werden Platzhalteraufgaben in das Aufgabenmodell eingefügt, die<br />

als einzige Eigenschaft eine Referenz auf den zu referenzierenden Aufgabenteilbaum<br />

besitzt. Zur Laufzeit werden dann diese Referenzen aufgelöst und eine Kopie des Teilbaums<br />

anstelle der Referenz eingefügt (Zielaufgabenmodell). Damit ein Zielaufgabenmodell,<br />

in dem die Aufgabenreferenzen aufgelöst wurden, weiterhin eine Baumstruktur<br />

ergibt, muss Folgendes gelten:<br />

Im Ursprungsaufgabenmodell darf eine Referenz niemals direkt oder indirekt<br />

auf eine Elternaufgabe oder sich selbst verweisen.<br />

Dadurch würden Zyklen entstehen, die im Zielaufgabenmodell nicht mehr als Baumstruktur<br />

abbildbar wären. Wenn die Kanten im Ursprungsaufgabenmodell als gerichtete<br />

Kanten von der Wurzel zu den Blättern betrachtet werden und die Referenzen als<br />

zusätzliche gerichtete Kanten von der Referenz zur referenzierter Aufgabe, dann muss<br />

der daraus resultierende gerichtete Graph zyklenfrei sein 30 .<br />

Abbildung 5.18 zeigt auf der linken Seite einen gerichteten azyklischen Graph in<br />

Form eines Aufgabenbaums mit einer Platzhalteraufgabe. Diese Referenz lässt sich problemlos<br />

zu einem Zielaufgabenmodell auflösen. Auf der rechten Seite ist ein gerichteter<br />

zyklischer Graph abgebildet, welcher als Aufgabenmodell nicht zulässig ist, weil<br />

eine Auflösung der Referenz zu einem Teilbaum wiederum die Referenz enthält und<br />

dadurch ein rekursiver, unendlicher Aufgabenbaum entstehen würde.<br />

Im Aufgabenmodell lässt sich diese Restriktion allerdings nicht ohne Weiteres integrieren,<br />

Referenzen sind grundsätzlich zu beliebigen Aufgaben möglich. Ein Aufgabeneditor<br />

kann aber automatisch Zyklenfreiheit garantieren (z. B. unter Verwendung von<br />

30 englisch: directed acyclic graph (DAG)<br />

96


Name<br />

angeben<br />

Vorname<br />

angeben<br />

Adresse<br />

angeben<br />

Ordnung = beliebig<br />

Strategie = flüchtig<br />

Strasse<br />

angeben<br />

Nachname<br />

angeben<br />

5.8 Wiederverwendbarkeit von Aufgabenhierarchien<br />

Kontaktinformationen<br />

angeben<br />

Strategie = persistent<br />

Kardinalität = 1…5<br />

Stadt<br />

angeben<br />

Telefonnummer<br />

angeben<br />

Rufname<br />

angeben<br />

existierende<br />

Adresse kopieren<br />

ZugriffsRolle = »admin«<br />

Rufnummer<br />

angeben<br />

Abbildung 5.19: Beispiel Aufgabenmodell – Wiederverwendung von Aufgabenhierarchien<br />

Algorithmen aus [Mitchell, 2001]) und das Laufzeitsystem sollte Aufgabenmodelle mit<br />

Zyklen abweisen. Ein wichtiger Aspekt ist allerdings vom Modellierer bei der Aufgabenmodellierung<br />

zu beachten:<br />

Alle Eigenschaften der referenzierten Aufgabe, die durch Vererbung von einer Elternaufgabe<br />

gelten (z. B. Zugriffsschutz durch eine Rollenzuweisung in der alten Elternaufgabe),<br />

sind in der Referenz nicht mehr wirksam. Stattdessen werden die Eigenschaften<br />

neu evaluiert und es gelten die Eigenschaften der neuen Elternaufgabe.<br />

5.8.2 Beispiel<br />

Wir erweitern unser bekanntes Beispiel um die Möglichkeit, zu den Adressen und Telefonnummern<br />

einen Namen anzugeben (siehe Abbildung 5.19). Dazu wurde der Aufga-<br />

97


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

be Adresse angeben einen Aufgabenteilbaum Name angeben mit den Unteraufgaben<br />

Vorname angeben und Nachname angeben hinzugefügt. Weil die Aufgabe Telefonnummer<br />

angeben auch einen ähnlichen Aufgabenteilbaum benötigt, wurde eine Referenz<br />

in Form der Platzhalteraufgabe Rufname angeben mit einer Referenz zu Name<br />

angeben eingefügt. Zur Laufzeit würde diese Aufgabe durch den Aufgabenteilbaum ersetzt.<br />

Hierbei ist zu bemerken, dass die vererbten Eigenschaften neu evaluiert werden,<br />

der Teilbaum Name angeben hätte unter Adresse angeben die Unterbrechungsstrategie<br />

flüchtig, und unter Telefonnummer angeben die Unterbrechungsstrategie persistent<br />

(von Kontaktinformationen angeben vererbt).<br />

5.9 Zusammenfassung<br />

In diesem Kapitel haben wir ein Aufgabenmodell als Basis unseres Interaktionsmodells<br />

vorgestellt, welches die gemeinsamen Aspekte der allgemeinen Aufgabenmodelle aus<br />

Abschnitt 3.4 aufgreift und um Aspekte für Web-Anwendungen ergänzt wurde.<br />

Tabelle 5.3 fasst die Attribute einer Aufgabendefinition zusammen und beschreibt<br />

deren Bedeutung. Abbildung 5.20 definiert die erste Version des Metamodells unseres<br />

Interaktionsmodells als UML-Klassendiagramm, sämtliche Beispiele dieses Kapitels sind<br />

damit in strukturierter Form umsetzbar und für ein Laufzeitsystem auswertbar. In den<br />

nächsten Kapiteln werden wir das Metamodell erweitern und zeigen, wie das Laufzeitsystem<br />

aus dem Interaktionsmodell eine Benutzerschnittstelle erzeugen kann.<br />

98


5.9 Zusammenfassung<br />

name definition optional standard<br />

id Eindeutiger Identifizierer innerhalb des Aufgabenbaums,<br />

keine Leer- und Sonderzeichen<br />

name Kurzer Name der Aufgabe, sollte nicht kryptisch<br />

sein, kann zur Laufzeit im Dialog angezeigt werden<br />

beschreibung Längere Beschreibung der Aufgabe, kann ebenfalls<br />

im Dialog angezeigt werden<br />

kardinalität Minimale und maximale Anzahl der Ausführungen<br />

der Aufgabe<br />

nein name 1<br />

nein -<br />

ja -<br />

oberaufgabe Verweis auf die Oberaufgabe nein 2<br />

ja 1,1<br />

unteraufgaben Verweise auf die Unteraufgaben ja -<br />

beziehung Hierarchiebeziehung der Unteraufgaben zur<br />

Oberaufgabe, Wertebereich siehe Tabelle 5.1<br />

ordnung Strikt oder beliebig geordnete Ausführung der<br />

Unteraufgaben<br />

zugriffsRollen Menge der autorisierten Rollen, die diese Aufgabe<br />

ausführen dürfen<br />

nein 3<br />

-<br />

-<br />

ja 4<br />

ja -<br />

strategie Persistenzstrategie der Hierarchiebeziehung ja fluechtig<br />

1<br />

Falls der Name als ID übernommen wird, sollte dieser den Bedingungen an IDs automatisch angepasst werden.<br />

2<br />

Nur optional, wenn es sich um die Wurzel des Aufgabenbaums handelt.<br />

3<br />

Nur optional, wenn es sich um eine Blattaufgabe handelt (|unteraufgaben| = 0).<br />

4<br />

Standardwerte hängen von der verwendeten Hierarchiebeziehung ab, siehe Tab. 5.1.<br />

Tabelle 5.3: Aufgabendefinition<br />

99


5 Aufgabenbasiertes Interaktionsmodell für Web-Anwendungen<br />

<br />

AufgabenTyp<br />

abstrakt<br />

interaktion<br />

benutzer<br />

system<br />

<br />

AufgabenBeziehung<br />

sequenz<br />

parallel<br />

selektion<br />

verschachtelt<br />

ueberlappend<br />

arbitraer<br />

<br />

UnterbrechungsStrategie<br />

fluechtig<br />

unterbrechbar<br />

persistent<br />

100<br />

-typ<br />

<br />

Ordnung<br />

beliebig<br />

strikt<br />

-beziehung<br />

-strategie<br />

-ordnung<br />

Aufgabe<br />

-id : String<br />

-name : String<br />

-beschreibung : String<br />

-kardinalitaet : int [2]<br />

-zugriffsRollen : Set<br />

-elternaufgabe<br />

0..1<br />

Abbildung 5.20: Interaktionsmetamodell<br />

Platzhalteraufgabe<br />

1<br />

0..*<br />

-referenz<br />

-unteraufgaben<br />

0..*


Kapitel 6<br />

Aufgabenbasierte Dialogfragmente für<br />

Web-Anwendungen<br />

Inhalt<br />

6.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101<br />

6.2 Erweitertes Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102<br />

6.3 Anbindung an das Aufgabenmodell . . . . . . . . . . . . . . . . . . . . 106<br />

6.4 Anbindung des Domänenmodells . . . . . . . . . . . . . . . . . . . . . 121<br />

6.5 Erweiterung der Aufgaben um dialogspezifische Attribute . . . . . . . 137<br />

6.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />

6.1 Einleitung<br />

Wir werden, gemäß unserem Ansatz, nicht zur Modellierungszeit das Aufgabenmodell<br />

in ein oder mehrere statische Dialogmodelle überführen, sondern unser aufgabenbasiertes<br />

Interaktionsmodell um Dialoginformationen erweitern, und erst zur Laufzeit<br />

einen für den Benutzer angepassten Dialog erstellen.<br />

Das Aufgabenmodell aus dem vorigen Kapitel ist noch nicht ausreichend, um einen<br />

Dialog zwischen dem Benutzer und der Anwendung zu generieren. Ein Dialog beschreibt,<br />

wie Eingabe- und Ausgabe-Interaktionen stattfinden (siehe Abschnitt 3.5), und<br />

um diese Interaktionen müssen wir das Aufgabenmodell erweitern.<br />

Aus Sicht des Benutzers entspricht ein Dialogzustand der „Position“ des Benutzers<br />

innerhalb des Dialogs. Der Zustand wird dem Benutzer in Form einer Webseite visualisiert,<br />

diese Seite muss die Interaktionen der gerade ausgeführten Aufgaben zusammenfassen.<br />

Wir werden den Aufgaben Eingabe- und Ausgabe-Elemente zuordnen, welche<br />

es dem Benutzer erlauben, die Aufgabe zu bearbeiten und den Dialogzustand damit<br />

zu verändern. Dazu müssen geeignete Interaktionselemente definiert werden, wir werden<br />

auf die komponentenbasierten Interaktionselemente der Präsentationsmodellierung<br />

(siehe Abschnitt 2.6.4) zurückgreifen, welche den modularen Aufbau einer Webseite<br />

ermöglichen.<br />

101


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

6.2 Erweitertes Beispiel<br />

Bevor wir die Dialoginformationen in das Interaktionsmodell integrieren, wollen wir<br />

erst das Beispiel aus dem vorigen Kapitel erweitern. Auf dem Weg zur Beispielanwendung<br />

– ein Kleinanzeigenmarkt als Web-Anwendung – integrieren wir den Aufgabenbaum<br />

Kontaktinformationen angeben in ein größeres Aufgabenmodell Kleinanzeige<br />

erstellen, welches wir in diesem Kapitel als Beispiel verwenden.<br />

Abbildung 6.1 zeigt das erweiterte Aufgabenmodell. Aufgrund der Zugriffsrolle benutzer<br />

der Wurzelaufgabe Kleinanzeigen erstellen dürfen nur registrierte und angemeldete<br />

Benutzer Kleinanzeigen erstellen, dies aber beliebig oft (Kardinalität 0 – ∞).<br />

Zum Erstellen einer Kleinanzeige muss der Benutzer vier Unteraufgaben in einer beliebigen<br />

Sequenz ausführen.<br />

Die Unteraufgabe Informationen angeben fasst einige allgemeine Informationen einer<br />

Kleinanzeige zusammen, die in beliebiger Abfolge eingegeben werden können:<br />

den Titel der Kleinanzeige, den angestrebten Preis, den Zustand der angebotenen Ware<br />

und eine allgemeine Beschreibung.<br />

Die Unteraufgabe Bild auswählen erlaubt es dem Benutzer, ein vorher erstelltes Bild<br />

auszuwählen und zu der Kleinanzeige hinzuzufügen. Diese Aufgabe ist optional, nicht<br />

jede Kleinanzeige muss mit einem Bild versehen sein.<br />

Mit der Unteraufgabe Tags zuweisen werden der Kleinanzeige Metainformationen<br />

in Form von Tags zugeordnet. Tags 31 sind kurze Schlüsselwörter, die die Kleinanzeige<br />

beschreiben. Im Gegensatz zu einer einmaligen Einordnung in hierarchische Kategorien,<br />

kann eine Kleinanzeige mit beliebig vielen Tags beschrieben sein. Dies erlaubt eine<br />

flexible Suche der Kleinanzeigen, welche wir in der Gesamtanwendung noch vorstellen<br />

werden.<br />

Die Unteraufgabe Kontaktinformationen angeben ist das aus dem vorigen Kapitel<br />

übernommene Beispiel. Zu einer Kleinanzeige sollen ein bis fünf Kontaktinformationen<br />

(Adress- oder Telefonkontakte) angegeben werden können.<br />

6.2.1 Finale Benutzerschnittstelle eines Dialogzustands<br />

Nachdem wir das Aufgabenmodell vorgestellt haben, wollen wir betrachten, wie der<br />

zur Laufzeit generierte Dialog aussehen könnte. Zu diesem Zweck werden wir nicht<br />

den Dialog als Ganzes betrachten (welcher aufgrund der <strong>Generierung</strong> zur Laufzeit auch<br />

nicht statisch darstellbar ist), sondern eine Momentaufnahme des Dialogs in Form eines<br />

möglichen Dialogzustandes. Auf Basis der Dialogzustände werden wir zeigen, wie wir<br />

eine Benutzerschnittstelle für ein Aufgabenmodell dynamisch erzeugen können.<br />

Wir wollen den Dialogzustand betrachten, in dem der Benutzer die Aufgaben Vorname<br />

angeben und Nachname angeben für die Erstellung einer Kontaktadresse einer<br />

Kleinanzeige ausführt. Zu diesem Dialogzustand könnte der Benutzer über den folgenden<br />

Weg unter Berücksichtigung der Hierarchiebeziehungen des Aufgabenmodells<br />

gelangen:<br />

31 aus dem Engl. für: Etikett, Markierung<br />

102


Kleinanzeige<br />

erstellen<br />

Kardinalität = 0…∞<br />

Ordnung = beliebig<br />

ZugriffsRollen = »benutzer«<br />

Kontaktinformationen<br />

angeben<br />

Tags<br />

zuweisen<br />

Bild<br />

auswählen<br />

Informationen<br />

angeben<br />

Kardinalität = 1…5<br />

Kardinalität = 0…1<br />

existierende<br />

Adresse kopieren<br />

Telefonnummer<br />

angeben<br />

Adresse<br />

angeben<br />

Beschreibung<br />

angeben<br />

Preis<br />

angeben<br />

Zustand<br />

angeben<br />

Titel<br />

angeben<br />

ZugriffsRollen = »admin«<br />

Strategie = flüchtig<br />

6.2 Erweitertes Beispiel<br />

Rufnummer<br />

angeben<br />

Rufname<br />

angeben<br />

Stadt<br />

angeben<br />

Strasse<br />

angeben<br />

Name<br />

angeben<br />

Nachname<br />

angeben<br />

Vorname<br />

angeben<br />

103<br />

Abbildung 6.1: Beispiel Aufgabenmodell – Kleinanzeige Erstellen


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Abbildung 6.2: Beispiel einer finalen Benutzerschnittstelle (HTML Seite)<br />

1. Der Benutzer möchte eine Kleinanzeige erstellen und fängt die Aufgabe Kleinanzeige<br />

erstellen an.<br />

2. Weil diese eine beliebige Sequenz der Unteraufgaben vorgibt, muss erst eine der<br />

Unteraufgaben ausgewählt werden. Der Benutzer wählt Kontaktinformationen<br />

angeben.<br />

3. Der Benutzer wählt die Aufgabe Adresse angeben aus der Selektion der Unteraufgaben.<br />

4. Aufgrund der Sequenz wird die Aufgabe Name angeben mit ihren Unteraufgaben<br />

Vorname angeben und Nachname angeben gestartet<br />

Diesen letzten Dialogzustand wollen wir genauer betrachten. Abbildung 6.2 zeigt die<br />

Benutzerschnittstelle, die aufgrund des Dialogzustandes für den Benutzer generiert<br />

werden könnte. Zu erkennen ist dabei, dass einzelne Elemente der Benutzerschnittstelle<br />

zu unterschiedlichen Aufgaben des Aufgabenmodells gehören, z. B. die Eingabe<br />

des Vornamens zu Vorname angeben oder die Überschrift und die darunter befindliche<br />

Navigationsleiste, die anscheinend zur Wurzelaufgabe Kleinanzeige erstellen gehören.<br />

Diese Zusammenhänge werden wir in diesem Kapitel untersuchen, jetzt bleibt nur festzuhalten,<br />

dass die Benutzerschnittstelle eine mögliche Repräsentation des beschriebenen<br />

Dialogzustandes ist.<br />

Die Benutzerschnittstelle in Abbildung 6.2 ist, gemäß der Kategorisierung in Abschnitt<br />

3.6.2, eine finale Benutzerschnittstelle, realisiert in HTML. Für die weitere Betrachtung<br />

ist dies zu detailliert, wir werden uns zur Modellierungszeit auf abstrakte<br />

und konkrete Benutzerschnittstellen beschränken, welche dann zur Laufzeit in eine finale<br />

Variante transformiert werden.<br />

104


6.2.2 Konkrete Benutzerschnittstelle<br />

6.2 Erweitertes Beispiel<br />

Aufgrund der Beschränkung auf Web-Anwendungen werden wir die Modellierung der<br />

abstrakten und der konkreten Benutzerschnittstelle als einen Modellierungsschritt betrachten.<br />

Während eine abstrakte Benutzerschnittstelle z. B. auch in ein Sprachdialogsystem<br />

umsetzbar ist, ist bei der konkreten Benutzerschnittstelle der Kontext vorgegeben,<br />

also z. B. grafische Benutzeroberfläche. Anders als die finale Benutzerschnittstelle<br />

ist dies immer noch abstrakt genug, um daraus eine Web-Anwendung, ein lokales<br />

Anwendungsprogramm oder eine Anwendung für mobile Endgeräte zu erzeugen, für<br />

unseren Zweck also mehr als ausreichend.<br />

Wie in Abschnitt 2.6.4 beschrieben und in Anhang A aufgeführt, werden wir ein komponentenbasiertes<br />

Framework verwenden, um die konkrete Benutzeroberfläche zu beschreiben.<br />

Wir verwenden exemplarisch das JSF-Framework [McClanahan u. a., 2004],<br />

die anderen Frameworks sind aber gleichwertig und können bei Bedarf verwendet werden.<br />

Wir wollen eine, zu der finalen Benutzerschnittstelle aus Abbildung 6.2 passende,<br />

konkrete Benutzerschnittstelle vorstellen (siehe Listing 6.1). Von der grafischen Darstellung<br />

wird weitgehend abstrahiert und nur noch die Struktur und der Inhalt modelliert.<br />

Textausgaben werden mit OutputText umgesetzt, Eingaben mit InputText, Beschreibungen<br />

der Eingabefelder mit OutputLabel und Schaltflächen mit CommandButton. Die<br />

Gestaltung wird erst bei der <strong>Generierung</strong> der finalen Benutzeroberfläche hinzugefügt,<br />

zum Beispiel, dass der erste ausgegebene Text als Überschrift erscheinen soll, und dass<br />

die Schaltflächen rechtsbündig angeordnet sind.<br />

Grundlegende Strukturierung der Komponenten, wie z. B. ein zweispaltiges Layout,<br />

wird im Beispiel über die Komponente PanelGrid erstellt: Sämtliche Unterkomponenten<br />

werden zweispaltig angeordnet. Die Komponente NavigationBar erzeugt die komplexe<br />

Navigationsleiste.<br />

Die abstrakte Variante, der dieser konkreten zugrunde liegt, lässt sich ablesen, indem<br />

von den Komponentennamen nur der erste Teil verwendet wird. Dann werden z. B.<br />

aus den zwei verschiedenen Komponenten OutputText und OutputLabel die gleiche<br />

abstrakte Komponente Output. Details finden sich dazu im Anhang, wir verwenden im<br />

Folgenden immer die konkrete Form.<br />

Um das Beispiel zu vereinfachen, haben wir die Komponenten noch nicht an das Domänenmodell<br />

der Anwendungsschicht angebunden. Das Beispiel zeigt z. B. nicht, wo<br />

die Eingabefelder ihre eingegeben Werte ablegen oder welche Aktionen die Schaltflächen<br />

auslösen. Die fehlenden Anbindungen sind im Beispiel durch Auslassungspunkte<br />

gekennzeichnet (. . . ). Auf die Anbindung werden wir noch genauer eingehen.<br />

Auch sind die Ausgaben noch statischer Natur, zugunsten einer mehrsprachigen Anwendung<br />

sollten diese dynamisch eingefügt werden. Dies ist aber für unsere Betrachtung<br />

nicht relevant und kann bei Bedarf integriert werden.<br />

6.2.3 Zusammenfassung<br />

Das Beispiel in diesem Abschnitt haben wir zum besseren Verständnis rückwärts entwickelt<br />

(von der fertigen Webseite zur abstrakten Beschreibung). Klassischerweise werden<br />

105


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Listing 6.1: Beispiel einer konkreten Benutzerschnittstelle (XML Format)<br />

1 <br />

2 <br />

3 <br />

4 <br />

5 <br />

6 <br />

7 <br />

8 <br />

9 <br />

10 <br />

11 <br />

12 <br />

von der Benutzerschnittstelle zur Modellierungszeit zuerst die konkrete und dann die<br />

finale Version erstellt. Wir wollen im Folgenden betrachten, wie wir die konkrete Benutzerschnittstelle<br />

(z. B. wie in Listing 6.1) auf Basis eines Aufgabenmodells zur Laufzeit<br />

erstellen können. Die weitere Umwandlung in eine finale Benutzeroberfläche können<br />

wir den bestehenden Ansätzen überlassen (siehe Abschnitt 2.6.4).<br />

6.3 Anbindung an das Aufgabenmodell<br />

Um zu dem Ergebnis in Listing 6.1 zu gelangen, wollen wir schauen, wie wir das Aufgabenmodell<br />

in die <strong>Generierung</strong> der Benutzerschnittstelle integrieren können. Die Semantik<br />

und temporalen Abhängigkeiten des Aufgabenmodells sind in der konkreten<br />

Benutzerschnittstelle nur noch indirekt zu erkennen. Wir wollen die Benutzerschnittstelle<br />

so an das Aufgabenmodell binden, dass dieses als zentrales Gerüst für die <strong>Generierung</strong><br />

dient und zur Laufzeit für den Benutzer zugeschnittene Dialoge generieren<br />

kann.<br />

6.3.1 Überblick<br />

Abbildung 6.3 zeigt den Ablauf der <strong>Generierung</strong> einer Benutzerschnittstelle, welcher in<br />

jedem Dialogschritt durchlaufen wird. Der Benutzer löst ein Ereignis und damit einen<br />

Dialogschritt von einem Dialogzustand in einen folgenden aus. Der Ablauf besteht aus<br />

drei Phasen:<br />

106<br />

1. Die Aufgabenbearbeitung verwaltet eine Instanz des Aufgabenmodells und bildet<br />

das Benutzerereignis auf Aufgabenaktionen ab (Aufgabe starten, Aufgabe<br />

stoppen, etc.). Der Zustand aller Aufgaben entspricht dem Dialogzustand. Die folgenden<br />

Phasen dienen dazu, die veränderten Aufgabenzustände zu visualisieren.<br />

2. Die Seitengenerierung holt sich die zu visualisierenden Aufgabenzustände und<br />

generiert eine konkrete Benutzerschnittstelle (z. B. wie in Listing 6.1). Dazu wer-


Benutzerereignis<br />

Aufgabenverarbeitung<br />

Aufgabenmodell<br />

Zustandsbaum<br />

6.3 Anbindung an das Aufgabenmodell<br />

konkrete<br />

Benutzerschnittstelle<br />

1 2 3<br />

Seitengenerierung<br />

Dialogfragmente<br />

Seitentransformation<br />

Komponenten<br />

Abbildung 6.3: <strong>Generierung</strong> der Benutzerschnittstelle zur Laufzeit<br />

den zusätzlich noch sogenannte Dialogfragmente verwendet, auf die wir in Kürze<br />

genauer eingehen werden.<br />

3. Die Seitentransformation übernimmt dann den letzten Schritt, die <strong>Generierung</strong><br />

der finalen Benutzerschnittstelle aus der konkreten. Dazu wird jede Komponente<br />

der konkreten Benutzerschnittstelle in eine HTML-Darstellung transformiert, um<br />

eine endgültige HTML-Seite zu erhalten.<br />

In den folgenden Abschnitten werden wir die zusätzlich zum Aufgabenmodell zu modellierenden<br />

Informationen vorstellen und den hier beschriebenen Überblick über den<br />

Ablauf verfeinern.<br />

6.3.2 Dialogfragmente<br />

Die Aufgaben sollen unabhängig voneinander Interaktionselemente zu der konkreten<br />

Benutzerschnittstelle beitragen können. Im Umkehrschluss bedeutet dies auch, dass zu<br />

jedem Interaktionselement der konkreten Benutzerschnittstelle genau eine Aufgabe<br />

zugeordnet ist. Es tauchen keine Elemente auf, die nicht einer Aufgabe entstammen,<br />

und auch keine Elemente, die mehreren Aufgaben zugeordnet sind.<br />

In diesem Abschnitt wollen wir untersuchen, welche Elemente der konkreten Benutzerschnittstelle<br />

welchen Aufgaben des Aufgabenmodells in Abbildung 6.1 zuzuordnen<br />

sind. Die Menge aller Elemente, die einer Aufgabe zuzuordnen sind, nennen wir im<br />

Folgenden Dialogfragment einer Aufgabe, weil aus diesen Fragmenten die Benutzerschnittstelle<br />

des Dialogs zur Laufzeit erzeugt wird.<br />

Bei den klassischen Ansätzen (z. B. in [Vanderdonckt und Limbourg, 2004] und [Mori<br />

u. a., 2003]), werden nur den Blattaufgaben Interaktionselementen zugeordnet. Alle<br />

Nicht-Blattaufgaben dienen dort nur der Strukturierung und werden weiter verfeinert.<br />

Wir werden, wie in Abschnitt 5.4.4 beschrieben, den Nicht-Blattaufgaben die Möglichkeit<br />

geben, zu der Benutzerschnittstelle beizutragen. Dies hat den Vorteil, dass die<br />

Oberaufgabe den Teil der Benutzeroberfläche beschreiben kann, der für alle Unteraufgaben<br />

gleich ist, z. B. eine Überschrift. Dies erlaubt uns Redundanzen zu vermeiden,<br />

indem wir wiederholt verwendete Interaktionselemente weiter oben in der Aufgabenhierarchie<br />

einfügen, wo sie für alle Unteraufgaben angezeigt werden. Die Interakti-<br />

HTML<br />

Seite<br />

107


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

onselemente, die wir als Dialogfragment der Wurzelaufgabe zuordnen, werden immer<br />

angezeigt.<br />

Wie gelangen wir jetzt von der konkreten Benutzerschnittstelle aus Listing 6.1 zu aufgabenspezifischen<br />

Dialogfragmenten? Die Dialogfragmente der aktiven Blattaufgaben<br />

können am einfachsten identifiziert werden, mit diesen werden wir anfangen. Zu der<br />

Aufgabe Vorname angeben gehören die Elemente aus Zeile 8 und 9:<br />

<br />

<br />

Listing 6.2: Dialogfragment – Vorname angeben<br />

Zu der Aufgabe Nachname angeben gehören die Elemente aus Zeile 6 und 7:<br />

<br />

<br />

Listing 6.3: Dialogfragment – Nachname angeben<br />

Die Oberaufgabe dieser beiden Blattaufgaben, Name angeben, trägt den Text aus<br />

Zeile vier, das Layout aus Zeile 5 und 10, sowie die Schaltfläche zum Fortsetzen aus Zeile<br />

11 bei. Fortsetzen würde diese und die Unteraufgaben beenden und in der Sequenz zu<br />

der Aufgabe Straße angeben weiterleiten.<br />

Listing 6.4: Dialogfragment – Name angeben<br />

<br />

<br />

<br />

<br />

Zur nächsten Oberaufgabe, Adresse angeben, gehört ein weiterer Text aus Zeile 3,<br />

damit für den Benutzer ersichtlich ist, in welchem Teilbaum des Aufgabenmodells er<br />

sich befindet:<br />

Listing 6.5: Dialogfragment – Adresse angeben<br />

<br />

Die Oberaufgabe Kontaktinformationen angeben fügt keine weiteren Elemente in<br />

die Benutzerschnittstelle ein, deshalb ist das Dialogfragment leer.<br />

Die Wurzelaufgabe Kleinanzeige erstellen trägt die Überschrift aus Zeile 1 und die<br />

Navigationsleiste aus Zeile 2 zur Benutzerschnittstelle bei. Die Navigationsleiste hätte<br />

auch zur Unteraufgabe Adresse angeben gehören können, denn diese definiert ebenfalls<br />

eine Sequenz, die man visualisieren könnte. Aber um die Übersichtlichkeit zu wahren,<br />

stellt die Navigationsleiste die länger andauernde beliebige Sequenz dieser Aufgabe<br />

dar. Auch die Abbrechen-Schaltfläche aus Zeile 12 gehört zu dieser Aufgabe. Die<br />

Schaltfläche wird diese Aufgabe und damit den gesamten Dialog der Kleinanzeigeneingabe<br />

zurücksetzen und die getätigten Eingaben verwerfen:<br />

108


Listing 6.6: Dialogfragment – Kleinanzeige erstellen<br />

<br />

<br />

<br />

6.3 Anbindung an das Aufgabenmodell<br />

Auch für die bis jetzt noch nicht betrachteten Aufgaben können Dialogfragmente<br />

modelliert werden. Zur Laufzeit würde dann, basierend auf den Zuständen der Aufgaben,<br />

eine konkrete Benutzerschnittstelle erzeugt werden. Um diese wie in Listing 6.1<br />

zu erzeugen, fehlen allerdings noch einige Details:<br />

In welchen Zuständen können sich Aufgaben befinden und wie wirken sich diese<br />

auf die <strong>Generierung</strong> der Benutzeroberfläche aus?<br />

Wie können die Dialogfragmente verschachtelt werden, sodass der Aufbau der<br />

Benutzerschnittstelle möglichst flexibel ist? Eine einfache Verkettung der Dialogfragmente<br />

reicht nicht aus, um die oben skizzierte Benutzerschnittstelle zu erstellen.<br />

Diese Aspekte werden wir in den nächsten beiden Abschnitten behandeln.<br />

6.3.3 Zustandsautomat für Aufgaben<br />

Wie wir im letzten Abschnitt gezeigt haben, kann die Benutzerschnittstelle in Form<br />

von Dialogfragmenten den Aufgaben zugeordnet werden. In diesem Abschnitt werden<br />

wir zeigen, dass dies noch nicht detailliert genug ist und die Dialogfragmente den<br />

Zuständen der Aufgaben zugeordnet werden sollten. Z. B. kann zum Starten einer Aufgabe<br />

eine Schaltfläche dargestellt werden, die dem Benutzer erlaubt, die Aufgabe zu<br />

beginnen. Während der Ausführung der Aufgabe darf diese Schaltfläche nicht mehr<br />

verfügbar sein, sondern z. B. Interaktionselemente zur Eingabe des Namens. Bevor wir<br />

die verschiedenen Möglichkeiten der Anbindung vorstellen, wollen wir erst einen Blick<br />

auf die Zustände des Aufgabenautomaten werfen.<br />

Ein Aufgabenautomat (siehe Abbildung 6.4, basierend auf [Bomsdorf, 2007]) ist ein<br />

Zustandsautomat, welcher zur Laufzeit für jede Aufgabe angelegt wird und ihren Lebenszyklus<br />

verwaltet. Der Aufgabenautomat besteht aus den Zuständen, in denen sich<br />

die Aufgabe befinden kann und aus den Zustandsübergängen, die aufgrund von Ereignissen<br />

ausgelöst werden. Alle Aufgabenautomaten eines Aufgabenmodells werden<br />

getrennt voneinander verwaltet und nur über Konditionen bezüglich der Zustandsübergänge<br />

miteinander verknüpft. Eine Aufgabe kann z. B. nur gestartet werden, wenn die<br />

Oberaufgabe und dessen Hierarchiebeziehung dies erlaubt. Im nächsten Kapitel werden<br />

wir das Verhalten zur Laufzeit genauer betrachten, an dieser Stelle werfen wir nur<br />

einen Blick auf die möglichen Zustände und deren Einfluss auf die Modellierung einer<br />

Benutzerschnittstelle:<br />

Initialisiert Bevor eine Aufgabe ausgeführt werden kann, befindet sie sich im Anfangszustand<br />

Initialisiert. Sowohl der Start- als auch der Endzeitpunkt sind noch nicht<br />

bekannt (start(X ) = ende(X ) = ∅) 32 . Von diesem Zustand aus kann die Aufgabe<br />

32 Wir beziehen uns im Folgenden auf die temporalen Definitionen aus Abschnitt 5.2.<br />

109


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

überspringen<br />

starten<br />

Initialisiert<br />

zurücksetzen<br />

Übersprungen Ausgeführt<br />

zurücksetzen<br />

unterbrechen<br />

Gestartet fortsetzen Unterbrochen<br />

beenden abbrechen abbrechen<br />

Abbildung 6.4: Zustandsautomat einer Aufgabe<br />

Abgebrochen<br />

bearbeitet (Start-Ereignis) oder aber übersprungen (Überspringen-Ereignis) werden.<br />

Gestartet Während die Aufgabe bearbeitet wird, befindet sich der Aufgabenautomat<br />

im Zustand Gestartet. Auf der Zeitachse bedeutet dies, dass der Startzeitpunkt<br />

start(X ) in der Vergangenheit liegt, der Endzeitpunkt ende(X ) aber noch undefiniert<br />

ist. In diesem Zustand kann der Benutzer auch weitere Unteraufgaben unter<br />

Beachtung der Hierarchiebeziehungen starten und beenden. Im regulären Ablauf<br />

kann die Aufgabe beendet werden (ende Ereignis) oder aber in den Anfangszustand<br />

zurückgesetzt werden (zurücksetzen Ereignis). Die Ereignisse unterbrechen<br />

und abbrechen sind Sonderfälle, auf die wir bei den entsprechenden Zielzuständen<br />

eingehen.<br />

Ausgeführt Die Aufgabe wurde beendet. Sowohl der Start- als auch der Endzeitpunkt<br />

liegen in der Vergangenheit. Keine Unteraufgabe befindet sich mehr im Zustand<br />

Gestartet 33 . Die weitere Bearbeitung des Aufgabenmodells kann nur noch in den<br />

Oberaufgaben stattfinden. Wenn die Wurzelaufgabe beendet wurde, ist die Bearbeitung<br />

des Aufgabenmodells abgeschlossen.<br />

33 Dies bedeutet nicht, dass alle Unteraufgaben sich im Zustand Ausgeführt befinden, z. B. bleiben bei einer<br />

Selektion alle Unteraufgaben bis auf eine im Zustand Initialisiert<br />

110


6.3 Anbindung an das Aufgabenmodell<br />

Übersprungen Die Aufgabe wurde übersprungen und nicht ausgeführt. Der Start- ist<br />

gleich dem Endzeitpunkt (start(X ) = ende(X ) = ∅). Die Unteraufgaben werden<br />

ebenfalls nicht ausgeführt. Die Aufgabe ist damit zwar nicht ausgeführt, aber<br />

doch beendet. Folgeaufgaben, z. B. in einer Sequenz, können dann angefangen<br />

werden.<br />

Unterbrochen Um das Konzept der Unterbrechbarkeit (siehe Abschnitt 5.6) umzusetzen,<br />

fügen wir den Zustand Unterbrochen in den Aufgabenautomaten ein. Falls<br />

eine Unterbrechung bei einer gestarteten und unterbrechbaren Aufgabe stattfindet,<br />

wird der Aufgabenkontext gespeichert und kann später beim Fortsetzen<br />

wiederhergestellt werden. Falls die Aufgabe nicht unterbrechbar ist, wird sie zurückgesetzt<br />

und befindet sich beim Fortsetzen im Zustand Initialisiert, alle bereits<br />

getätigten Eingaben dieser Aufgabe und aller Unteraufgaben sind verloren.<br />

Abgebrochen Die Aufgabe wurde aufgrund eines Systemfehlers abgebrochen. Der Aufgabe<br />

wird die Möglichkeit gegeben, auf diesen Abbruch zu reagieren, z. B. um<br />

Ressourcen freizugeben, eine Email zu versenden, etc. Zu einer normalen Abarbeitung<br />

kann aber nicht mehr übergegangen werden. Dies ist nicht zu verwechseln<br />

mit dem regulären Zurücksetzen einer gestarteten Aufgabe in den Zustand Initialisiert,<br />

bei der die aktuelle Bearbeitung verworfen wird und die Aufgabe erneut<br />

gestartet werden kann.<br />

Die Zustände Unterbrochen und Abgebrochen sind besondere Zustände, die für die<br />

Modellierung der Benutzerschnittstelle nicht relevant sind, in beiden Fällen ist der Dialog<br />

unterbrochen und es wird keine Benutzerschnittstelle generiert.<br />

Im Gegensatz dazu können die restlichen Zustände einer Aufgabe mit Dialogfragmenten<br />

versehen werden. Im Zustand Initialisiert könnte beispielsweise eine kurze Beschreibung<br />

der bevorstehenden Aufgabe ausgegeben werden, zusammen mit einer<br />

Schaltfläche, um die Aufgabe zu starten und eventuell einer Schaltfläche, um die Aufgabe<br />

zu überspringen. Im Zustand Gestartet erfolgt die eigentliche Bearbeitung der<br />

Aufgabe, mit den entsprechenden Interaktionselementen und einer Schaltfläche, um<br />

die Aufgabe zu beenden. Im Zustand Ausgeführt könnte nochmal eine Zusammenfassung<br />

der Eingaben erscheinen und im Zustand Übersprungen eine Ausgabe, dass die<br />

Aufgabe übersprungen wurde.<br />

Algorithmus zur Kontrolle der Aufgabenautomaten<br />

Der erste Schritt in der Übersichtsgrafik (siehe Abbildung 6.3) verarbeitet ein Benutzerereignis<br />

und verändert die Aufgabenautomaten. Als Ergebnis kann der folgende<br />

Schritt auf die neuen Zustände der Aufgabenautomaten zugreifen und diese darstellen.<br />

Die Aufgabenautomaten werden zur Laufzeit nicht alle gleichzeitig initialisiert, sondern<br />

nur nach Bedarf. Die initiale Menge der Aufgabenautomaten AA (und damit der<br />

erste Dialogzustand) besteht nur aus dem Aufgabenautomaten der Wurzelaufgabe im<br />

Zustand Initialisiert. Erst wenn eine Aufgabe gestartet wurde, werden Aufgabenautomaten<br />

für die Unteraufgaben angelegt. Wenn eine Aufgabe beendet wird, werden die<br />

111


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Aufgabenautomaten der Unteraufgaben wieder entfernt. Die Menge der Aufgaben,<br />

zu denen es Aufgabenautomaten in AA gibt, wird immer ein Teilbaum des gesamten<br />

Aufgabenmodells sein. Dieser Teilbaum entspricht dem aktuellen Dialogzustand und<br />

enthält die aktuell vom Benutzer bearbeiteten Aufgaben.<br />

Jedes zu verarbeitende Benutzerereignis ist von einer Benutzerschnittstelle ausgelöst<br />

worden, welche in einem vorherigen Durchlauf – basierend auf den aktuellen Zuständen<br />

der Aufgabenautomaten – erstellt wurde. Die Zuordnung des Benutzerereignisses<br />

zu einer Aufgabe geschieht über den folgenden eindeutigen Pfad: Jedes Benutzerereignis<br />

wird genau von einem Interaktionselement (meist einem CommandButton) ausgelöst.<br />

Die komponentenbasierten Web-Frameworks können diese Arbeit abnehmen und<br />

liefern uns zum Ereignis auch das auslösende Interaktionselement. Jedes Interaktionselement<br />

ist eindeutig einem Dialogfragment und jedes Dialogfragment eindeutig einer<br />

Aufgabe zugeordnet. Für die gefundene Aufgabe muss auch ein Aufgabenautomat in<br />

AA existieren.<br />

Falls diese Beziehungskette an einer Stelle unterbrochen ist, so ist das Benutzerereignis<br />

illegal erzeugt worden (z. B. durch die Verwendung des Zurück-Knopfes des Browsers)<br />

und die gesamte Verarbeitung muss unterbrochen werden. Alle Aufgabenautomaten<br />

in AA werden unterbrochen und der Benutzer bekommt im nächsten Schritt die<br />

Möglichkeit, den Dialog fortzusetzen.<br />

Im Regelfall haben wir jedoch zum Benutzerereignis den passenden Aufgabenautomaten<br />

gefunden und können eine Transition einleiten. Der Aufgabenautomat wird<br />

die Vorbedingungen für die Transition, z. B. die der temporalen Relationen, überprüfen<br />

und ggf. einen Zustandswechsel veranlassen. Im Anschluss daran wird überprüft, ob der<br />

Automat gestartet wurde und damit die Aufgabenautomaten für die Unteraufgaben<br />

initialisiert oder ob der Automat beendet wurde und damit die Aufgabenautomaten<br />

der Unteraufgaben entfernt werden müssen.<br />

Basierend auf den neuen Aufgabenzuständen wird später eine aktualisierte Benutzerschnittstelle<br />

generiert. Der Algorithmus 1 fasst dieses Vorgehen zusammen.<br />

Aufgabenautomaten zur Laufzeit<br />

Der zu visualisierende Dialogzustand entspricht den Zuständen der aktuellen Aufgabenautomaten,<br />

dessen Aufgaben einen Teilbaum des Aufgabenmodells sind. Das umgangssprachliche<br />

Beispiel aus Abschnitt 6.2.1 können wir jetzt mit dem Algorithmus<br />

auf die Aufgabenautomaten übertragen, um das Konzept zu verdeutlichen. Der Initialzustand<br />

des Dialogs ist nur der initialisierte Aufgabenautomat der Wurzelaufgabe. Zu<br />

diesem Zustand sollte ein Dialogfragment existieren, welches dem Benutzer die Möglichkeit<br />

gibt, die Aufgabe zu starten:<br />

Kleinanzeige erstellen (Initialisiert)<br />

Der Benutzer entscheidet sich, eine Kleinanzeige zu erstellen und startet die Wurzelaufgabe.<br />

Die Aufgabenautomaten der Unteraufgaben werden initialisiert. In der Wurzelaufgabe<br />

wird nicht mehr das Dialogfragment vom Zustand Initialisiert verwendet,<br />

sondern das vom Zustand Gestartet.<br />

112


6.3 Anbindung an das Aufgabenmodell<br />

Eingabe : Benutzerereignis E, Menge der Aufgabenautomaten AA<br />

Ausgabe : veränderte Menge der Aufgabenautomaten AA<br />

Beginn<br />

Suche das E auslösende Interaktionselement I ;<br />

Suche das Dialogfragment F zu dem I gehört;<br />

Suche die Aufgabe A der F zugeordnet ist;<br />

Suche den Aufgabenautomat AA ∈ AA von A;<br />

wenn AA nicht gefunden wurde dann<br />

// illegales Benutzerereignis;<br />

für jedes Aufgabenautomat AA ∈ AA tue<br />

Unterbreche AA;<br />

Ende<br />

Breche Verarbeitung ab;<br />

sonst<br />

// reguläres Benutzerereignis;<br />

Löse das Ereignis E auf AA aus;<br />

unterscheide Zustand von AA tue<br />

Fall Gestartet<br />

für jedes Unteraufgabe UA von A tue<br />

wenn ∄ Aufgabenautomat für UA in AA dann<br />

Erzeuge initialen Aufgabenautomat UAA für UA;<br />

Füge UAA der Menge AA hinzu;<br />

Ende<br />

Fall Übersprungen,Ausgeführt<br />

für jedes Unteraufgabe UA von A tue<br />

wenn ∃ Aufgabenautomat für UA in AA dann<br />

Entferne Aufgabenautomat von UA aus der Menge AA;<br />

Ende<br />

Ende<br />

Ende<br />

Ende<br />

Algorithmus 1 : Verarbeitung der Aufgabenereignisse<br />

Kleinanzeige erstellen (Gestartet)<br />

Informationen angeben (Initialisiert)<br />

Bild auswählen (Initialisiert)<br />

Tags zuweisen (Initialisiert)<br />

Kontaktinformationen angeben (Initialisiert)<br />

Der Benutzer wählt aus der beliebigen Sequenz die Aufgabe Kontaktinformationen<br />

angeben aus und startet diese, ihre Unteraufgaben werden initialisiert. Die Aufgaben<br />

auf gleicher Ebene (Bild auswählen, etc.) bleiben initialisiert, können aber nicht gestartet<br />

werden, solange die Aufgabe Kontaktinformationen angeben ausgeführt wird,<br />

weil die Sequenz eine parallele Ausführung verbietet.<br />

113


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Kleinanzeige erstellen (Gestartet)<br />

Informationen angeben (Initialisiert)<br />

Bild auswählen (Initialisiert)<br />

Tags zuweisen (Initialisiert)<br />

Kontaktinformationen angeben (Gestartet)<br />

Adresse angeben (Initialisiert)<br />

Telefonnummer angeben (Initialisiert)<br />

existierende Adresse kopieren (Initialisiert)<br />

Der Benutzer entscheidet sich bei der Selektion, eine Adresse anzugeben. Die entsprechende<br />

Aufgabe wird vom Benutzer gestartet, ihre Unteraufgaben initialisiert. Bis<br />

jetzt hat der Benutzer die Aufgaben manuell gestartet, aber an dieser Stelle bietet sich<br />

für das Laufzeitsystem die Möglichkeit, den Dialog automatisch anzupassen:<br />

Aufgrund der strikten Sequenz muss die Aufgabe Name angeben als nächstes ausgeführt<br />

werden und wird deshalb automatisch gestartet. Ihre Unteraufgaben werden<br />

daraufhin initialisiert.<br />

Diese Unteraufgaben können arbiträr ausgeführt werden, aufgrund von Kontextinformationen<br />

entscheidet sich das Laufzeitsystem in diesem Fall beispielsweise,<br />

die beiden Aufgaben ebenfalls automatisch zu starten und gleichzeitig auszuführen.<br />

Hätte der Benutzer nur wenig Platz für die Benutzeroberfläche zur Verfügung,<br />

so könnte das Laufzeitsystem diese Aufgaben auch nacheinander ausführen.<br />

Auf die möglichen automatischen Adaptionen des Laufzeitsystems werden wir später<br />

noch genauer eingehen. Als Ergebnis entsteht folgender Aufgabenbaum:<br />

Kleinanzeige erstellen (Gestartet)<br />

Informationen angeben (Initialisiert)<br />

Bild auswählen (Initialisiert)<br />

Tags zuweisen (Initialisiert)<br />

Kontaktinformationen angeben (Gestartet)<br />

Adresse angeben (Gestartet)<br />

Name angeben (Gestartet)<br />

Vorname angeben (Gestartet)<br />

Nachname angeben (Gestartet)<br />

Straße angeben (Initialisiert)<br />

Stadt angeben (Initialisiert)<br />

Telefonnummer angeben (Initialisiert)<br />

existierende Adresse kopieren (Initialisiert)<br />

In den meisten Fällen werden Dialogfragmente den Gestartet-Zuständen der Aufgaben<br />

zugeordnet, weil in diesem Zustand die Aufgabe von dem Benutzer zu bearbeiten<br />

ist. Wie beschrieben können in den Initialisiert-Zuständen Interaktionselemente zum<br />

Starten einer Aufgabe definiert werden, aber wir werden später zeigen, wie sich z. B.<br />

das Beenden-Ereignis einer Aufgabe mit dem Start-Ereignis einer Folgeaufgabe ver-<br />

114


6.3 Anbindung an das Aufgabenmodell<br />

knüpfen lässt und damit die Dialogfragmente in den Initialisiert-Zuständen zum Starten<br />

einer Aufgabe selten notwenig macht.<br />

Die bis jetzt identifizierten Dialogfragmente im Beispiel sind deshalb auch alle den<br />

Gestartet-Zuständen zugeordnet. Prinzipiell könnten aber auch die nicht gestarteten<br />

oder bereits beendeten Aufgaben in der Benutzerschnittstelle erscheinen, wenn den<br />

Zuständen der entsprechenden Aufgaben Dialogfragmente zugeordnet wären. Um bei<br />

dem einfachen Beispiel zu bleiben, blenden wir alle Aufgabenautomaten aus, zu denen<br />

wir keine Dialogfragmente identifiziert haben (alle außer den gestarteten Aufgaben),<br />

übrig bleibt folgender Aufgabenbaum:<br />

Kleinanzeige erstellen (Gestartet)<br />

Kontaktinformationen angeben (Gestartet)<br />

Adresse angeben (Gestartet)<br />

Name angeben (Gestartet)<br />

Vorname angeben (Gestartet)<br />

Nachname angeben (Gestartet)<br />

Abbildung 6.5: Dialogzustand als Teilbaum mit Aufgabenzuständen<br />

Basierend auf diesem Teilbaum mit Aufgabenzuständen (ab jetzt Aufgabenzustandshierarchie<br />

genannt) wollen wir im nächsten Abschnitt die Komposition der Benutzerschnittstelle<br />

betrachten.<br />

6.3.4 Aufgabenbasierte Komposition<br />

Die Aufgabenzustandshierarchie aus dem letzten Abschnitt gibt an, welche Dialogfragmente<br />

zur Laufzeit zu einer konkreten Benutzerschnittstelle zusammengesetzt werden<br />

sollen. Uns fehlt aber noch die Information, wie diese auf der Seite angeordnet werden<br />

sollen. Nach den ersten Konzepten in [Betermieux und Bomsdorf, 2007] und [Betermieux<br />

und Bomsdorf, 2008], werden wir hier eine aufgabenbasierte Komposition für<br />

Interaktionsmodelle vorstellen.<br />

Wir wollen das Aufgabenmodell mit seiner Hierarchie auch als Basis für das Layout<br />

heranziehen, d. h., das Aufgabenmodell gibt die grundlegende Struktur der Benutzerschnittstelle<br />

vor, in die sich die Dialogfragmente einfügen müssen. Für diesen Ansatz<br />

stellen wir folgende Forderungen:<br />

Die Dialogfragmente der Unteraufgaben müssen sich innerhalb des Dialogfragments<br />

der Oberaufgabe einfügen.<br />

Dialogfragmente sind unabhängig voneinander definiert, d. h., das Dialogfragment<br />

der Oberaufgabe kann keine Annahmen über die Dialogfragmente der Unteraufgaben<br />

machen. Abhängig vom Zustand der Unteraufgaben zur Laufzeit<br />

müssen evtl. unterschiedlich viele Dialogfragmente eingefügt werden.<br />

115


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Dazu wird das Laufzeitsystem bei jedem Dialogschritt zuerst die Aufgabenzustandshierarchie<br />

erstellen. Danach wird es, angefangen bei der Wurzelaufgabe, die zugehörigen<br />

Dialogfragmente entlang der Hierarchie miteinander verknüpfen. Wir haben bereits<br />

im Beispiel Dialogfragmente identifiziert. Uns fehlen aber noch die Mittel – unter<br />

Berücksichtigung der Forderungen – um zur Laufzeit mit den Dialogfragmenten und<br />

den Zuständen der Aufgaben die Benutzerschnittstelle zu generieren.<br />

Problematisch sind vor allem die Dialogfragmente der Nicht-Blattaufgaben, weil diese<br />

eventuell Dialogfragmente von Unteraufgaben integrieren müssen (Dialogfragmente<br />

der Unteraufgaben nennen wir ab jetzt Unterfragmente). Betrachten wir die Aufgabe<br />

Name angeben. Laut Aufgabenzustandshierarchie aus dem letzten Abschnitt müssen<br />

die Unterfragmente von Vorname angeben und Nachname angeben für den betrachteten<br />

Dialogzustand integriert werden. Das zu der Aufgabe Name angeben gehörende<br />

Dialogfragment lautete:<br />

Listing 6.7: Dialogfragment (Ursprungsversion) – Name angeben<br />

<br />

<br />

<br />

<br />

Um das Ergebnis in Abbildung 6.2 zu erhalten, sollte die Überschrift vor den Unterfragmenten<br />

erscheinen, die Schaltfläche fortsetzen jedoch erst dahinter. Wir benötigen ein<br />

Platzhalterelement, welches in die Dialogfragmente eingefügt werden kann:<br />

Insert: Definiert einen Platzhalter innerhalb eines Dialogfragments, welches zur Laufzeit<br />

mit den Dialogfragmenten der Unteraufgaben gefüllt wird. Die Unterfragmente<br />

werden in der Reihenfolge der Definition ihrer Aufgaben im Aufgabenmodell<br />

nacheinander eingefügt.<br />

Mit diesem Platzhalterelement können wir in einem Dialogfragment eine Einfügeposition<br />

der Unterfragmente bestimmen, die Dialogfragmente bleiben weiterhin unabhängig<br />

voneinander.<br />

Wir müssen unsere Dialogfragmente revidieren und bei der Modellierung das Platzhalterelement<br />

angeben, damit das Laufzeitsystem die Dialogfragmente korrekt verschachteln<br />

kann. Das revidierte Dialogfragment sieht jetzt folgendermaßen aus:<br />

Listing 6.8: Dialogfragment (revidierte Version) – Name angeben<br />

<br />

<br />

<br />

<br />

<br />

Die restlichen drei Oberaufgaben können wir ebenfalls mit dem Platzhalterelement<br />

ausstatten. Bei der Aufgabe Adresse angeben sollen die Unterfragmente hinten angefügt<br />

werden:<br />

116


6.3 Anbindung an das Aufgabenmodell<br />

Listing 6.9: Dialogfragment (revidierte Version) – Adresse angeben<br />

<br />

<br />

Bei der Aufgabe Kontaktinformationen angeben war das Dialogfragment leer. Damit<br />

aber trotzdem noch Unterfragmente angezeigt werden können, füllen wir es nur mit<br />

dem Platzhalterelement:<br />

<br />

Listing 6.10: Dialogfragment (revidierte Version) – Kontaktinformationen angeben<br />

Bei der Wurzelaufgabe Kleinanzeige erstellen sollen die Überschrift und die Navigationsleiste<br />

vor den Unterfragmenten erscheinen, die Schaltfläche dahinter, also:<br />

Listing 6.11: Dialogfragment (revidierte Version) – Kleinanzeige erstellen<br />

<br />

<br />

<br />

<br />

Mit diesen revidierten Dialogfragmenten kann das Laufzeitsystem jetzt die konkrete<br />

Benutzerschnittstelle erstellen. Bei jedem Dialogschritt aktualisiert es zuerst die Aufgabenzustandshierarchie<br />

und fängt die Seitengenerierung mit dem Dialogfragment der<br />

Wurzelaufgabe an. Anstelle des Insert-Elements fügt es die Dialogfragmente der Unteraufgaben<br />

ein, in diesem Fall das der Aufgabe Kontaktinformationen angeben. Dieses<br />

wird rekursiv fortgeführt, bis die Blattaufgaben anstelle des letzten Insert Elements eingefügt<br />

wurden. Weil zwei Blattaufgaben gestartet sind, müssen zwei Dialogfragmente<br />

anstelle des Insert-Elements der Aufgabe Name angeben eingefügt werden. Diese werden<br />

in der Reihenfolge der Definition der Aufgaben im Aufgabenmodell (zuerst der<br />

Vorname, dann der Nachname) nacheinander eingefügt.<br />

Algorithmus zur Seitengenerierung<br />

Der Algorithmus zur Seitengenerierung lässt sich als rekursive Funktion definieren (siehe<br />

Algorithmus 2 auf Seite 118). Initial wird diese Funktion vom Laufzeitsystem mit der<br />

Wurzelaufgabe als Eingabeparameter aufgerufen.<br />

Weil die Rekursion nur aufgerufen wird, wenn ein Aufgabenautomat zu einer Unteraufgabe<br />

existiert, wird sie nur die aktuelle Aufgabenzustandshierarchie durchlaufen.<br />

Die Seite wird rekursiv zusammengesetzt und entspricht am Ende der Rekursion unseren<br />

Vorgaben. Dieser Algorithmus definiert auch zwei Detailverbesserungen:<br />

Wenn zu einer Aufgabe kein Dialogfragment definiert ist, wird die Seite trotzdem<br />

mit den Dialogfragmenten der Unteraufgaben gefüllt. Ein leeres Dialogfragment<br />

nur mit einem Insert-Element, wie wir in Kontaktinformationen angeben revidiert<br />

haben, kann weggelassen werden.<br />

117


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Eingabe : Aufgabe A<br />

Ausgabe : Generierte Seite S<br />

Beginn<br />

Erzeuge leere Seite S;<br />

Hole Dialogfragment F für den aktuellen Zustand von A;<br />

wenn F existiert dann<br />

Suche Position pos des Insert-Element in F ;<br />

wenn pos existiert dann<br />

Füge den Anfang von F bis zu pos in S ein;<br />

sonst<br />

Füge F komplett in S ein;<br />

Ende<br />

Ende<br />

für jedes Unteraufgabe UA von A tue<br />

wenn Aufgabenautomat für UA existiert dann<br />

Rufe generiereSeite(UA) auf und hänge Ergebnis an S an;<br />

Ende<br />

Ende<br />

wenn F existiert und pos existiert dann<br />

Hänge den Schluss von F ab pos an S an;<br />

Ende<br />

Liefere S zurück;<br />

Ende<br />

Algorithmus 2 : generiereSeite(A)<br />

Wenn zu einer Aufgabe zwar ein Dialogfragment angegeben wurde, dieses aber<br />

kein Insert-Element enthält, so fügt der Algorithmus zuerst dieses Dialogfragment<br />

komplett in die Seite ein und danach die Dialogfragmente der Unteraufgaben.<br />

Wenn ein Insert-Element fehlt, existiert immer ein scheinbar implizites Insert-Element<br />

am Ende des Dialogfragments, damit Dialogfragmente der Unteraufgaben<br />

nicht unterdrückt werden. Die Revision des Dialogfragments von Adresse angeben<br />

ist also optional, sollte aber aus Gründen der besseren Lesbarkeit beibehalten<br />

bleiben.<br />

Ergebnis der Seitengenerierung<br />

Abbildung 6.6 zeigt das Ergebnis der Seitengenerierung. Die Hierarchie (welche der<br />

Aufgabenzustandshierarchie entspricht) und die Aufgabennamen sind zur Übersicht<br />

eingefügt worden, um den rekursiven Ablauf des Algorithmus zu verfolgen. Die generierte<br />

Seite enthält nur die fett gedruckten Interaktionselemente ohne hierarchische<br />

Informationen.<br />

Die generierte konkrete Benutzerschnittstelle ist fast identisch mit der gewünschten<br />

konkreten Benutzerschnittstelle aus Listing 6.1. Auf die Abweichung bezüglich der Reihenfolge<br />

der Vor- und Nachname-Dialogfragmente werden wir später noch eingehen.<br />

118


Kleinanzeige erstellen<br />

<br />

<br />

Kontaktinformationen angeben<br />

<br />

Adresse angeben<br />

6.3 Anbindung an das Aufgabenmodell<br />

Name angeben<br />

<br />

<br />

Vorname angeben<br />

<br />

<br />

Nachname angeben<br />

<br />

<br />

<br />

<br />

<br />

Abbildung 6.6: Generierte konkrete Benutzerschnittstelle<br />

Exkurs in dynamische Oberflächengenerierung<br />

Bei den klassischen Ansätzen wird das Aufgabenmodell in ein Dialogmodell umgewandelt<br />

und dann für jeden Dialogzustand eine Benutzeroberfläche modelliert. Dabei muss<br />

beachtet werden, dass die zwischen zwei Zuständen konstanten Elemente der Benutzeroberfläche<br />

auch an gleicher Stelle in der finalen Benutzeroberfläche erscheinen, damit<br />

der Benutzer nicht durch eine „springende“ Benutzeroberfläche irritiert wird. Aus<br />

Sicht des Aufgabenmodells ist es z. B. egal, wie zwei parallel abzuarbeitende Aufgaben<br />

ausgeführt werden. Für den Benutzer sollten diese Aufgaben aber nicht von Dialogzustand<br />

zu Dialogzustand die Platzierung in der Benutzeroberfläche wechseln, sondern<br />

möglichst stabil dargestellt werden.<br />

Wir gehen dieses Problem durch die Definition von Dialogfragmenten für die Oberaufgaben<br />

an. Dadurch verhindern wir nicht nur Redundanz in den Dialogfragmenten<br />

der Unteraufgaben, sondern stabilisieren auch das Layout der Benutzeroberfläche insgesamt.<br />

Wenn wir die Zustandswechsel in den Aufgabenautomaten während eines<br />

längeren Dialogs betrachten, so ist erkennbar, dass der untere Teil der Aufgabenzustandshierarchie<br />

sich häufig ändert und sich dementsprechend in der Benutzeroberfläche<br />

häufig wechselnde Dialogfragmente erscheinen. Je weiter allerdings der obere<br />

Teil der Hierarchie betrachtet wird, desto stabiler werden die Aufgabenzustände (sie<br />

ändern sich nicht mehr von Dialogschritt zu Dialogschritt, sondern sind über längere<br />

Zeiträume stabil) und desto länger werden auch die zugeordneten Dialogfragmente<br />

dargestellt. Die Wurzelaufgabe ist schließlich fast während des ganzen Dialoges im Ge-<br />

119


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Aufgabe<br />

1 -dialog AufgabenDialog -aufgabenZustaende<br />

ZustandsInformation<br />

0..1<br />

0..6<br />

-dialogfragment : String<br />

ausgefuehrt<br />

initialisiert<br />

-zustand<br />

gestartet<br />

<br />

AufgabenZustand<br />

uebersprungen<br />

unterbrochen<br />

abgebrochen<br />

Abbildung 6.7: Dialogspezifische Erweiterung des Aufgabenmetamodells<br />

startet Zustand und das zugehörige Dialogfragment wird entsprechend oft dargestellt.<br />

Weil in den Dialogfragmenten der oberen Aufgaben auch die sonst redundanten Interaktionselemente<br />

(Titelbereich, Menüstrukturen, Überschriften, etc.) zusammengefasst<br />

sind, werden diese in der Benutzeroberfläche auch immer wieder an dieselbe Stelle<br />

generiert.<br />

Nach einem Dialogschritt wird die generierte Benutzeroberfläche für die unveränderten<br />

Aufgabenzustände gleich bleiben und nur abweichen für die unteren Aufgaben mit<br />

veränderten Zuständen. Mit unserem Ansatz haben wir deshalb eine konsistente Positionierung<br />

der Dialogfragmente sichergestellt. Beim klassischen Ansatz ist dies nicht<br />

sichergestellt und der Entwickler muss bei der Modellierung jedes Dialogzustandes die<br />

Einhaltung des Layouts überprüfen.<br />

6.3.5 Erweiterung des Aufgabenmetamodells<br />

Definition<br />

Nach der Herleitung von der fertigen Webseite zu zustandsabhängigen Dialogfragmenten<br />

wollen wir unser Aufgabenmetamodell um diese Dialoginformationen erweitern<br />

(Ursprungsmodell siehe Abbildung 5.20). Zur besseren Trennung der dialogspezifischen<br />

Informationen von der klassischen Aufgabendefinition führen wir einen optionalen<br />

Aufgabendialog ein, welcher genau einer Aufgabe zugeordnet sein muss (siehe Abbildung<br />

6.7). Diese Trennung soll auch die Modellierungsschritte widerspiegeln: Zuerst<br />

wird das Aufgabenmodell erstellt, danach die dialogspezifischen Erweiterungen modelliert.<br />

Reine Aufgabeneditoren könnten diese Erweiterungen später ausblenden und<br />

nur das Aufgabenmodell bearbeiten.<br />

Der Aufgabendialog ist im Augenblick nur eine Komposition aus bis zu sechs zustandsspezifischen<br />

Informationen (Zustandsinformation). Später werden wir sehen, dass<br />

es weitere dialogspezifische Informationen einer Aufgabe gibt, welche wir dort einfügen<br />

können. Jede Zustandsinformation muss ihren zugeordneten Zustand definieren<br />

und kann eine Referenz auf ein Dialogfragment enthalten. Der Übersichtlichkeit halber<br />

werden wir die Dialogfragmente nicht im Aufgabenmodell darstellen, sondern hier<br />

nur in Textform besprechen. Mit der Erweiterung des Metamodells kann zu jedem Zustand<br />

einer Aufgabe ein Dialogfragment zugeordnet werden.<br />

120


Beispiel<br />

6.4 Anbindung des Domänenmodells<br />

Wir betrachten erneut unser Beispiel und erweitern das Interaktionsmodell um die zustandsspezifischen<br />

Dialogfragmente (siehe Abbildung 6.8). Wir beschränken uns auf die<br />

Aufgaben, die wir bereits in den vorhergehenden Abschnitten textuell betrachtet haben,<br />

die restlichen Aufgaben können analog erweitert werden.<br />

6.3.6 Zusammenfassung<br />

Wir haben gezeigt, wie mit Hilfe von Aufgabenautomaten und einem speziellen Platzhalterelement<br />

zur Laufzeit eine Benutzerschnittstelle aus den Dialogfragmenten generiert<br />

werden kann. Im nächsten Abschnitt werden wir die Anbindung des Domänenmodells<br />

an unsere generierte Benutzerschnittstelle betrachten.<br />

6.4 Anbindung des Domänenmodells<br />

Das Domänenmodell zur Modellierung der Anwendungslogik ist unabhängig von der<br />

Modellierung der Benutzerschnittstelle. Es existieren verschiedene Vorgehensweisen,<br />

wie Benutzerschnittstellen modellbasiert erstellt werden können:<br />

Systemzentrierter Ansatz: Zuerst wird das Domänenmodell modelliert, das die gewünschte<br />

Funktionalität abbildet. Danach wird eine Benutzeroberfläche modelliert,<br />

die die Anwendung entsprechend ihrer Vorgaben anspricht. Dies ist auch die<br />

zwangsläufig erforderliche Vorgehensweise, wenn zu einem bestehenden Altsystem<br />

34 eine neue Benutzerschnittstelle erstellt werden soll.<br />

Benutzerzentrierter Ansatz: Zuerst wird eine Benutzerschnittstelle modelliert, die<br />

dem Benutzer ermöglicht, die gewünschte Aufgabe zu erfüllen. Danach wird für<br />

die Benutzerschnittstelle das Domänenmodell erstellt.<br />

Unser Ansatz unterstützt beide Vorgehensweisen, der Modellierer der Benutzerschnittstelle<br />

ist bei dem ersten Ansatz allerdings gefordert, die Funktionen der Anwendungslogik<br />

zu berücksichtigen, also nur Benutzerschnittstellen zu entwerfen, die sich mit den<br />

gegebenen Funktionen umsetzen lassen.<br />

Wenn sowohl das Domänenmodell als auch die Benutzerschnittstelle modellbasiert<br />

erstellt werden, können beide Vorgehensweisen auch parallel eingesetzt werden, z. B.<br />

könnte zuerst ein einfaches Domänenmodell erstellt werden, zu dem dann eine Benutzerschnittstelle<br />

auf Basis eines Aufgabenmodells erstellt wird. Nach einer Verfeinerung<br />

des Aufgabenmodells könnte dann auch eine Anpassung des Domänenmodells notwendig<br />

sein. Änderungen in einem Modell ziehen also evtl. Änderungen im anderen<br />

Modell nach sich.<br />

34 engl: legacy system<br />

121


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

122<br />

Name<br />

angeben<br />

zustand = gestartet<br />

dialogfragment = »enterName«<br />

Vorname<br />

angeben<br />

zustand = gestartet<br />

dialogfragment = »enterFirstName«<br />

Adresse<br />

angeben<br />

Strategie = flüchtig<br />

zustand = gestartet<br />

dialogfragment = »enterAdress«<br />

Strasse<br />

angeben<br />

zustand = gestartet<br />

dialogfragment = »enterStreet«<br />

Nachname<br />

angeben<br />

zustand = gestartet<br />

dialogfragment = »enterLastName«<br />

Kleinanzeige erstellen<br />

Kardinalität = 0…∞<br />

Ordnung = beliebig<br />

ZugriffsRollen = »benutzer«<br />

zustand = gestartet<br />

dialogfragment = »createClassified«<br />

Kontaktinformationen<br />

angeben<br />

Kardinalität = 1…5<br />

zustand = gestartet<br />

dialogfragment = »enterContacts«<br />

Stadt<br />

angeben<br />

zustand = gestartet<br />

dialogfragment = »enterCity«<br />

Abbildung 6.8: Beispiel Interaktionsmodell – Dialogfragmente (Auszug)


6.4.1 Arten der Anbindung<br />

6.4 Anbindung des Domänenmodells<br />

Nach dem klassischen MVC-Ansatz (siehe Abschnitt 2.6.1) ist das Domänenmodell das<br />

Model und die Benutzerschnittstelle die View. Die Frage, die wir in diesem Abschnitt<br />

beantworten werden, lautet, wie unsere View – in Form von Interaktionselementen der<br />

Dialogfragmente – auf das Modell zugreifen kann. Wir müssen dabei zwei verschiedene<br />

Zugriffsarten unterscheiden:<br />

Anbindung von Aktionen: Interaktionselemente, die in einer Benutzerschnittstelle<br />

eine neue Anfrage an die Anwendung auslösen, müssen die weitere Verarbeitung<br />

beschreiben. Wir verwenden dazu das Action-Attribut der Interaktionselemente,<br />

um eine Methode im Domänenmodell aufzurufen. Dieses wird vom Laufzeitsystem<br />

ausgewertet, wenn der Benutzer das jeweilige Interaktionselement „ausgelöst“<br />

hat. Beispiele hierfür sind:<br />

– Links (CommandLink)<br />

– Absendeknöpfe von Formularen (CommandButton)<br />

Charakteristisch für diese Interaktionselemente ist, dass jeder Anfrage genau eine<br />

Aktion zugeordnet ist (der Benutzer kann nur einen Knopf gedrückt haben, um<br />

eine Anfrage auszulösen) und damit für das Laufzeitsystem eindeutig definiert<br />

ist, wo die Anwendung aufgerufen werden muss. Diese Interaktionselemente erzeugen<br />

entweder direkt oder indirekt Ereignisse für die Aufgabenverarbeitung<br />

(siehe Abbildung 6.3). Indirekt, indem die aufgerufene Methode ein Ereignis generiert<br />

und direkt, indem sie eine vom Laufzeitsystem vordefinierte Methode zum<br />

Auslösen eines konkreten Benutzerereignisses verwendet.<br />

Anbindung von Werten: Viele Interaktionselemente verwenden oder verändern<br />

nur den Wert einer Variable im Domänenmodell, dazu muss die Referenz auf die<br />

Variable vom Modellierer über das Value-Attribut des Interaktionselements angegeben<br />

werden. Beispiele hierfür sind:<br />

– Texteingabefelder (InputText) werden an eine Zeichenkettenvariable gebunden<br />

– Checkboxen (SelectBooleanCheckbox) werden an boolesche Variablen gebunden<br />

Charakteristisch für diese Interaktionselemente ist, dass sie nicht bei jeder Veränderung<br />

eine Anfrage auslösen, sondern erst bei einer anderweitig ausgelösten<br />

Anfrage (z. B. über ein Interaktionselement mit einer Anbindung an einer Aktion)<br />

gesammelt übertragen werden. Das Laufzeitsystem sorgt für den Abgleich der<br />

Werte, d. h., beim Ausliefern der Seite werden die Werte aus der Anwendung in<br />

die Formularelemente eingefügt und beim Verarbeiten einer Rückantwort werden<br />

die übermittelten Formulardaten in die Variablen der Anwendung übertragen.<br />

Zusammengefasst bedeutet dies, dass ein Interaktionselement mit einem Action-Attribut<br />

eine Anfrage auslöst, die zuerst die Werte von anderen Interaktionselementen mit<br />

123


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

einem Value-Attribut mit der Anwendung abgleicht und danach eine Methode aufruft.<br />

Damit das Laufzeitsystem diese Attribute als Zugriff auf die Anwendung interpretiert,<br />

muss der Inhalt speziell ausgezeichnet werden. Im von uns verwendeten Web-Framework<br />

geschieht das über die sogenannte Expression Language, die dem Laufzeitsystem<br />

anweist, den in #{ und } geklammerten Text als Referenz auf ein Domänenobjekt zu<br />

interpretieren, also verbindet z. B. das Eingabefeld<br />

mit einer Zeichenkette name in dem Objekt Person 35 .<br />

Die Definition eines Methodenaufrufs in einem Action-Attribut verläuft analog, diesmal<br />

wird jedoch keine Variable sondern eine Methode referenziert, z. B. könnte das<br />

Interaktionselement zum Absenden und Validieren der Vor- und Nachname-Eingaben<br />

lauten.<br />

Die Umsetzung dieser Vorgaben können wir den bestehenden komponentenbasierten<br />

Web-Frameworks überlassen, welche diese Funktionalität üblicherweise bereitstellen.<br />

Für uns ist vor allem interessant, wie wir die Vorgaben des Aufgabenmodells bei der<br />

Modellierung der Domänenanbindung umsetzen können. In den nächsten Abschnitten<br />

werden wir deshalb die offenen Fragen der aufgabenspezifischen Kapselung der Anwendungslogik<br />

diskutieren und unsere Lösung in Form von Domänenzugriffsobjekten<br />

vorstellen.<br />

6.4.2 Offene Fragen beim Domänenzugriff<br />

Um die Probleme bei der Domänenanbindung aufzuzeigen, werden wir zuerst ein Domänenmodell<br />

für unser Beispiel vorstellen und dann auf die offenen Fragen eingehen.<br />

Domänenmodell für unser Beispiel<br />

Abbildung 6.9 zeigt ein exemplarisches Domänenmodell, welches die Verarbeitung der<br />

Daten unseres Beispiels – ein Kleinanzeigenmarkt als Web-Anwendung – vornehmen<br />

soll. Die Domänenmodellierung werden wir nur kurz betrachten, auf diesem Feld gibt<br />

es bereits etablierte und mächtige Modellierungssprachen und -notationen, wir werden<br />

die UML verwenden [OMG, 2005].<br />

Das Domänenmodell ist minimal, aber alle notwendigen Funktionalitäten, um die<br />

Aufgaben unseres Aufgabenmodells zu erfüllen, sind abgedeckt. Im Sinne der Drei-<br />

Schichten-Architektur für Web-Anwendungen (siehe Abschnitt 2.4.2) wird die Anwendungsschicht<br />

in eine Schnittstelle (Service) und eine Implementation (Domain) aufgeteilt.<br />

35 Wir haben in unseren Dialogfragmenten bereits einige Elemente mit Value-Attributen mit statischem Text<br />

definiert. Weil aber alle Value-Attribute Referenzen auf die Anwendung erlauben, könnten wir mithilfe der<br />

Expression Language auch die OutputText-Elemente dynamisch zur Laufzeit aus der Anwendung füllen, also z. B.<br />

würde bei jedem Aufruf den Titel aus der Anwendung<br />

holen.<br />

Manche Interaktionselemente (wie das gerade erwähnte OutputText) schreiben bei der nächsten Anfrage<br />

nicht wieder in die referenzierte Variable. Bei reinen Ausgabeelementen, bei denen der Benutzer die Werte nur<br />

angezeigt bekommt aber nicht verändern kann, wird das Laufzeitsystem den Wert der Variable nur lesen aber<br />

niemals schreiben.<br />

124


Service Interface<br />

ClassifiedsService<br />

+getClassifiedById()<br />

+persistClassified()<br />

+getClassifiedList()<br />

+getTagById()<br />

+getTagByName()<br />

+persistTag()<br />

+getTagList()<br />

+addFavorite()<br />

+getFavorites()<br />

Domain<br />

Favorites<br />

-owner : User<br />

Tag<br />

-name : String<br />

-tags<br />

0..*<br />

-classifieds<br />

0..*<br />

Classified<br />

-owner : User<br />

-title : String<br />

-description : String<br />

-price : BigDecimal<br />

-creationDate : Date<br />

<br />

ClassifiedCondition<br />

-NEW<br />

-USED<br />

6.4 Anbindung des Domänenmodells<br />

BaseEntity<br />

-condition<br />

-pictureData<br />

-classified<br />

Abbildung 6.9: Domänenmodell – Beispiel<br />

PictureData<br />

-data : byte"[]" [0..*]<br />

PhoneContact<br />

-contacts<br />

-phoneNumber : String<br />

1..*<br />

Contact<br />

-firstName : String<br />

-lastName : String<br />

AddressContact<br />

-street : String<br />

-city : String<br />

Die Domain enthält die Entitäten der Anwendung und ihre Verknüpfungen. Im Zentrum<br />

steht die Kleinanzeige (Classified), welche die Informationen der Kleinanzeige<br />

sammelt. Der Titel, die Beschreibung und der Preis sind beispielsweise als Attribute<br />

abgelegt, andere Informationen sind als eigene Entitäten über Beziehungen mit der<br />

Kleinanzeige verbunden. Über eine Kompositionsbeziehung sind z. B. Bilddaten (PictureData)<br />

und eine Liste von Kontaktinformationen (Contact) angebunden. Letztere werden<br />

in die Unterklassen Adresskontakt (AddressContact) und Telefonkontakt (Phone-<br />

Contact) verfeinert. Mit der Entität Tag werden die Tags abgebildet, jede Kleinanzeige<br />

kann einer beliebigen Anzahl Tags zugeordnet sein. Mit den Favoriten (Favorites) wird<br />

eine Liste verwaltet, in der Benutzer ausgewählte Kleinanzeigen aufnehmen können,<br />

um diese zu beobachten und schneller darauf zuzugreifen. Die Oberklasse BaseEntity<br />

enthält übergreifende Funktionalität, um Klassen zu persistieren. Ein objektrelationaler<br />

Integrationsdienst (Object-Relational-Mapping, ORM) kann Instanzen dieser Klassen<br />

automatisch in einer relationalen Datenbank speichern.<br />

Die Service-Schnittstelle kapselt den Zugriff auf die Domäne in Form von vordefinierten<br />

Methoden. Dies hat verschiedene Vorteile:<br />

Abstraktion vom Domänenmodell: Die Schnittstelle ermöglicht den abstrakten Zugriff<br />

auf das Domänenmodell in Form von Methoden, die Anwendungsfällen entsprechen.<br />

Die Domäne kann, ohne die darauf zugreifenden Schichten zu beeinflussen,<br />

umorganisiert und erweitert werden, solange der Schnittstellenvertrag<br />

erhalten bleibt.<br />

Zentrale Stelle für die Berechtigungsprüfung: Nur beim Eintritt in die Schnittstellenmethoden<br />

muss die Autorisation des Benutzers überprüft werden.<br />

Definierte Transaktionsgrenzen: Die Veränderungen am Domänenmodell (und damit<br />

an der Datenbank) werden in einer Transaktion gekapselt. Die Transaktion<br />

wird beim Eintritt in die Schnittstellenmethode gestartet, umfasst alle Verände-<br />

125


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

rungen der Domänenobjekte, und wird beim Verlassen der Methode abgeschlossen.<br />

Falls im Laufe der Methode ein Fehler auftritt, wird ein Rollback stattfinden,<br />

der alle veränderten Entitäten wieder zurücksetzt. Methoden, die nur Informationen<br />

aus der Domäne holen (get. . . ), werden in einer read only transaction ausgeführt.<br />

Die Schnittstellenmethoden müssen von unserer Benutzerschnittstelle angesprochen<br />

werden. Die Methode persistClassified() erzeugt z. B. eine Kleinanzeige mit Bild und<br />

Kontaktinformationen und müsste von der Benutzerschnittstelle am Ende der Aufgabe<br />

Kleinanzeige Erstellen aufgerufen werden. Das Dialogfragment könnte beispielsweise<br />

folgendes Interaktionselement enthalten:<br />


ContactBean<br />

-lastName<br />

-firstName<br />

-street<br />

-city<br />

-phoneNumber<br />

-contactsAccess<br />

+createAddressContact()<br />

+createPhoneContact()<br />

6.4.3 Domänenzugriffsobjekte<br />

6.4 Anbindung des Domänenmodells<br />

ClassifiedsService<br />

+getClassifiedById()<br />

+persistClassified()<br />

+getClassifiedList()<br />

+getTagById()<br />

+getTagByName()<br />

+persistTag()<br />

+getTagList()<br />

+addFavorite()<br />

+getFavorites()<br />

Abbildung 6.10: Domänenzugriffsobjekte – Beispiel<br />

Unser Ansatz fordert, dass jede Aufgabe, die auf die Domäne zugreift, ein Domänenzugriffsobjekt<br />

erhält, in dem dieser Zugriff gekapselt ist. Ähnlich wie Dialogfragmente<br />

werden diese der Aufgabendefinition hinzugefügt, gelten allerdings für die gesamte<br />

Lebensdauer einer Aufgabe und sind nicht einem Aufgabenzustand zugeordnet. Alle<br />

Dialogfragmente einer Aufgabe können nur auf dieses Domänenzugriffsobjekt zugreifen,<br />

um mit der Domäne zu kommunizieren. Abbildung 6.10 zeigt das Domänenzugriffsobjekt<br />

ContactBean, welches für die Aufgabe Kontaktinformationen angeben und ihre<br />

Unteraufgaben erstellt wurde. Das Interaktionselement aus der Aufgabe Vorname angeben<br />

könnte beispielsweise folgendermaßen auf das Domänenzugriffsobjekt zugreifen:<br />

. Am Ende der Aufgabe Adresse<br />

angeben könnte dann, nachdem andere Interaktionselemente die restlichen erforderlichen<br />

Werte im Domänenzugriffsobjekt gefüllt haben, eine Aktion ausgelöst werden,<br />

also z. B.: .<br />

Diese erst würde den Adresskontakt speichern.<br />

Wegen der Ähnlichkeit zwischen einem Telefon- und einem Adresskontakt, kann das<br />

gleiche Domänenzugriffsobjekt auch alternativ zur Erzeugung eines Telefonkontaktes<br />

verwendet werden, die aufzurufende Aktion wäre dann createPhoneContact().<br />

Unterbrechbarkeit im Bezug auf Domänenzugriffsobjekte<br />

Mit der Einführung von Domänenzugriffsobjekten müssen wir die Unterbrechbarkeit<br />

von Aufgaben genauer betrachten. Wir haben die Unterbrechungsstrategien im Aufgabenmodell<br />

bereits abgebildet und in den Aufgabenautomaten einen Zustand für unterbrochene<br />

Aufgaben vorgesehen. Das Laufzeitsystem kann Unterbrechungen – wie<br />

in Abschnitt 5.6 definiert – feststellen und den Zustand der Aufgabenautomaten basierend<br />

auf den Unterbrechungsstrategien selbstständig persistieren und wieder herstellen.<br />

Wenn jedoch ein Domänenzugriffsobjekt zu einer Aufgabe existiert, dann enthält<br />

dieses Informationen, die zum Zustand der Aufgabe zu zählen sind, z. B. bereits eingegebene<br />

Vor- und Nachnamen eines Adresskontaktes. Wenn die Aufgabe unterbrochen<br />

wird, müssen diese Informationen ebenfalls persistiert werden, damit diese beim Fortsetzen<br />

wieder verfügbar sind.<br />

127


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

StateHolder<br />

+saveState() : Object<br />

+restoreState( state )<br />

+isTransient() : boolean<br />

ContactBean<br />

-lastName : String<br />

-firstName : String<br />

-street : String<br />

-city : String<br />

-phoneNumber : String<br />

+createAddressContact()<br />

+createPhoneContact()<br />

+isTransient() : boolean<br />

+restoreState( state )<br />

+saveState() : Object<br />

ClassifiedsService<br />

+getClassifiedById()<br />

+persistClassified()<br />

+getClassifiedList()<br />

+getTagById()<br />

+getTagByName()<br />

+persistTag()<br />

+getTagList()<br />

+addFavorite()<br />

+getFavorites()<br />

Abbildung 6.11: Domänenzugriffsobjekte – Unterbrechbarkeit<br />

Domänenzugriffsobjekte sind jedoch vom Modellierer zu erstellen, das Laufzeitsystem<br />

kann nicht automatisch erkennen, welche Werte zum Zustand gehören und damit<br />

zu persistieren sind. Zu diesem Zweck existiert eine generische Schnittstelle StateHolder,<br />

die alle Domänenzugriffsobjekte implementieren müssen 36 . Sie enthält drei Methoden<br />

zur Sicherung und Wiederherstellung des Zustandes:<br />

isTransient(): Wird vom Laufzeitsystem aufgerufen, wenn die Aufgabe des Domänenzugriffsobjekts<br />

unterbrochen wurde. Über einen booleschen Rückgabewert<br />

kann das Domänenzugriffsobjekt entscheiden, ob es flüchtige(true) oder zu persistierende<br />

(false) Informationen enthält.<br />

saveState(): Wird vom Laufzeitsystem aufgerufen, wenn isTransient() den Wert false<br />

zurückgeliefert hat. Alle Informationen, die zu persistieren sind, müssen in ein<br />

Objekt verpackt und als Rückgabewert an das Laufzeitsystem übergeben werden.<br />

Dieses persistiert das Objekt gemeinsam mit dem Aufgabenzustand.<br />

restoreState(): Wird vom Laufzeitsystem aufgerufen, wenn eine unterbrochene<br />

Aufgabe fortgesetzt wird. Dazu wird neue Instanz des Domänenzugriffsobjekts<br />

erzeugt und diese Methode im Anschluss daran aufgerufen. Als Parameter wird<br />

das Objekt übermittelt, welches vorher persistiert wurde, das Domänenzugriffsobjekt<br />

ist selbstständig für die Wiederherstellung seines Zustandes aus dem Zustandsobjekt<br />

verantwortlich.<br />

Abbildung 6.11 zeigt unser Domänenzugriffsobjekt für die Aufgabe Kontaktinformationen<br />

angeben, welches die Schnittstelle StateHolder implementiert. IsTransient() liefert<br />

false zurück, saveState() und restoreState() persistieren alle vom Benutzer bereits<br />

eingegebenen Attribute.<br />

36 Viele Sprachen liefern eine Serializable-Schnittstelle, welche eine automatische Persistierung eines Objektzustandes<br />

ermöglicht. Wir werden diese nicht verwenden, weil die persistierten Informationen zu stark von der<br />

Implementierung der Klasse abhängen, die Deserialisierung würde scheitern, wenn sich die Struktur der Klasse<br />

geändert hat. Wir gehen davon aus, dass Aufgabenzustände sehr lange persistiert sein können und überlassen<br />

damit dem Entwickler der Domänenzugriffsobjekte die Verantwortung, alte Zustandsobjekte korrekt einzulesen.<br />

128


Gültigkeitsbereich der Domänenzugriffsobjekte<br />

6.4 Anbindung des Domänenmodells<br />

Domänenzugriffsobjekte werden automatisch erzeugt, wenn der Aufgabenautomat einer<br />

Aufgabe initialisiert wird und entfernt, wenn der Aufgabenautomat beendet wird.<br />

Damit können die Aufgabe und die Unteraufgaben auf das Domänenzugriffsobjekt zugreifen,<br />

alle anderen Aufgaben (auch die Oberaufgaben) haben keinen Zugriff.<br />

Um eine möglichst gute Wiederverwendbarkeit der Aufgaben zu erreichen, wollen<br />

wir aber auch den Zugriff der Unteraufgaben beschränken. Das folgende Beispiel illustriert<br />

das Problem: Unser Domänenzugriffsobjekt ContactBean kann beim Anlegen eines<br />

Adresskontaktes mittels createAddressContact() diesen nicht direkt über die Service-<br />

Schnittstelle persistieren, weil Classified laut Domänenmodell in Abbildung 6.9 Contacts<br />

als Komposition enthält, letztere also nicht für sich alleine existieren können. Wir müssen<br />

die Kontaktinformationen an ein Domänenzugriffsobjekt übergeben, welches zur<br />

Wurzelaufgabe Kleinanzeige erstellen gehört und für das Anlegen einer neuen Kleinanzeige<br />

zuständig ist. Beim Beenden der Wurzelaufgabe wird diese aufgerufen und<br />

erzeugt eine neue Kleinanzeige mitsamt der Kontaktinformationen mittels persistClassified()<br />

der Service-Schnittstelle.<br />

Problematisch ist die Übergabe der Informationen an ein in der Aufgabenhierarchie<br />

höher befindliches Domänenzugriffsobjekt. Prinzipiell ist dieses verwendbar, wenn wir<br />

allerdings die Aufgabe an einer anderen Stelle wiederverwenden wollen, dann ist die<br />

Kette der Oberaufgaben zur Wurzel unterschiedlich und das benötigte Domänenzugriffsobjekt<br />

ist eventuell nicht verfügbar. In den meisten Fällen wird allerdings kein<br />

Vollzugriff auf ein höheres Domänenzugriffsobjekt benötigt, sondern nur eine Möglichkeit,<br />

die eigenen Informationen dem anderen Domänenzugriffsobjekt mitzuteilen.<br />

Zu diesem Zweck sollte eine Schnittstelle zur Übergabe der Informationen definiert<br />

werden. Eine Wiederverwendung der Aufgabe ist dann möglich, wenn ein Domänenzugriffsobjekt<br />

der neuen Oberaufgaben diese Schnittstelle ebenfalls implementiert.<br />

Abbildung 6.12 zeigt eine Umsetzung dieses Vorgehens. Das Domänenzugriffsobjekt<br />

UploadBean gehört zur Aufgabe Kleinanzeige erstellen und sammelt die Informationen,<br />

um eine Kleinanzeige am Ende der Aufgabe mittels uploadClassified() zu erstellen.<br />

Unter anderem verwaltet es auch eine Liste der Kontaktinformationen contacts,<br />

auf das das Domänenzugriffsobjekt ContactBean der Unteraufgabe Kontaktinformationen<br />

angeben zugreifen möchte. Der Zugriff beschränkt sich allerdings in diesem Fall<br />

auf das Hinzufügen einer neuen Kontaktinformation, welches in der Schnittstelle ContactsAccess<br />

als Methode addContact() beschrieben ist. UploadBean implementiert diese<br />

Schnittstelle und fügt beim Aufruf der Methode eine Kontaktinformation der Liste hinzu.<br />

ContactBean enthält ein neues Attribut namens contactsAccess, welches vom Laufzeitsystem<br />

bei der Instanzierung mit der passenden Referenz gefüllt wird, in diesem<br />

Fall auf UploadBean. Beim Erstellen einer neuen Kontaktinformation kann Contact-<br />

Bean aus createAddressContact() die Methode contactsAccess.addContact() aufrufen,<br />

ohne die implementierende Klasse zu kennen 37 .<br />

37 Das Verfahren ist als Dependency Injection bekannt. Zwei Klassen besitzen, bis auf die implementierte Schnittstelle,<br />

keine Abhängigkeiten untereinander und können flexibel ausgetauscht werden. Erst zur Laufzeit wird<br />

über ein Mapping, in unserem Fall dem Aufgabenmodell, eine Referenz des einen Objektes in das andere injiziert.<br />

129


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

StateHolder<br />

+saveState() : Object<br />

+restoreState( state )<br />

+isTransient() : boolean<br />

ContactBean<br />

-lastName : String<br />

-firstName : String<br />

-street : String<br />

-city : String<br />

-phoneNumber : String<br />

-contactsAccess : ContactsAccess<br />

+createAddressContact()<br />

+createPhoneContact()<br />

+isTransient() : boolean<br />

+restoreState( state )<br />

+saveState() : Object<br />

ContactsAccess<br />

+addContact( contact )<br />

UploadBean<br />

-title : String<br />

-description : String<br />

-price : BigDecimal<br />

-condition : ClassifiedCondition<br />

-pictureData : PictureData<br />

-selectedTags : Tag [0..*]<br />

-contacts : Contact [0..*]<br />

+createNewTag() : void<br />

+uploadClassified() : void<br />

+addContact( contact : Contact ) : void<br />

+restoreState( state : Object ) : void<br />

+saveState() : Object<br />

+isTransient() : boolean<br />

ClassifiedsService<br />

+getClassifiedById()<br />

+persistClassified()<br />

+getClassifiedList()<br />

+getTagById()<br />

+getTagByName()<br />

+persistTag()<br />

-classifiedsService +getTagList()<br />

+addFavorite()<br />

+getFavorites()<br />

Abbildung 6.12: Domänenzugriffsobjekte – Gültigkeitsbereich<br />

Zum besseren Verständnis der Interaktionen zur Laufzeit werden wir das Sequenzdiagramm<br />

des obigen Beispiels betrachten (siehe Abbildung 6.13).<br />

130<br />

1. Der Benutzer startet die Aufgabe Kleinanzeige erstellen.<br />

2. Das Laufzeitsystem erzeugt eine Instanz des zu der Aufgabe gehörenden Domänenzugriffsobjekts<br />

UploadBean.<br />

3. Dieses Domänenzugriffsobjekt benötigt eine Referenz auf die Service-Schnittstelle<br />

der Domäne. Das Laufzeitsystem instanziiert dieses und . . .<br />

4. . . . setzt die Referenz in dem Domänenzugriffsobjekt.<br />

5. Der Benutzer bekommt eine Webseite zurückgeliefert, in der eine der Unteraufgaben<br />

zur Erstellung einer Kleinanzeige ausgewählt werden kann.<br />

6. Der Benutzer wählt die Unteraufgabe Kontaktinformationen angeben.<br />

7. Das Laufzeitsystem erzeugt das zugehörige Domänenzugriffsobjekt ContactBean<br />

und . . .<br />

8. . . . setzt die Referenz auf das ContactsAccess implementierende UploadBean.<br />

9. Der Benutzer bekommt eine Webseite zurückgeliefert, in der die Art der einzugebenden<br />

Kontaktinformationen ausgewählt werden muss. An dieser Stelle haben<br />

wir im Sequenzdiagramm einige Dialogschritte ausgelassen, die nicht direkt die<br />

Interaktion mit den Domänenzugriffsobjekten betrifft. Der Benutzer wählt die


User<br />

1: task "create classified"<br />

5: return web page<br />

6: task "enter contact information"<br />

9: return web page<br />

10: #{contactBean.firstname}<br />

13: return web page<br />

14: #{contactBean.createAddressContact}<br />

19: return web page<br />

20: #{uploadBean.uploadClassified}<br />

25: return web page<br />

Runtime System<br />

7: create domain access<br />

2: create domain access<br />

8: setContactsAccess("uploadBean")<br />

12: update task states<br />

17: update task states<br />

3: create classifieds service<br />

4: setClassifiedsService("classifiedsService")<br />

11: setFirstName()<br />

15: createAddressContact()<br />

18: remove domain access<br />

.contactBean : ContactBean<br />

21: uploadClassified()<br />

23: update task states<br />

24: remove domain access<br />

16: addContact()<br />

6.4 Anbindung des Domänenmodells<br />

uploadBean : UploadBean<br />

22: persistClassified(-)<br />

classifiedsService : ClassifiedsService<br />

Abbildung 6.13: Domänenzugriffsobjekte – Gültigkeitsbereich als Sequenzdiagramm<br />

Eingabe eines Adresskontaktes und bekommt eine Webseite zur Eingabe des Vorund<br />

Nachnamens zurückgeliefert.<br />

10. Das Interaktionselement für die Eingabe des Vornamens ist mit der Variablen firstname<br />

des Domänenzugriffsobjekts ContactBean verbunden. Das Laufzeitsystem<br />

wertet die Verbindung aus und . . .<br />

11. . . . setzt die Variable im passenden Domänenzugriffsobjekt.<br />

12. Nachdem der Wert gesetzt wurde, werden die neuen Zustände der Aufgabenautomaten<br />

bestimmt und . . .<br />

131


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

13. . . . eine neue Webseite zurückgeliefert. An dieser Stelle haben wir wieder einige<br />

Schritte ausgelassen, in denen der Benutzer die restlichen Variablen zur Erzeugung<br />

eines Adresskontakts eingibt.<br />

14. Beim Abschluss der Aufgabe Adresse angeben wird mittels einer Schaltfläche die<br />

Aktion createAddressContact() ausgelöst, welche vom Laufzeitsystem . . .<br />

15. . . . an das Domänenzugriffsobjekt ContactBean weitergeleitet wird.<br />

16. Im Verlauf der Abarbeitung wird die Methode addContact() der vorher gesetzten<br />

Referenz auf UploadBean aufgerufen. Die eingegebene Kontaktinformation befindet<br />

sich jetzt in der Liste der Kontaktinformationen im Domänenzugriffsobjekt<br />

UploadBean.<br />

17. Das Laufzeitsystem berechnet darauf die neuen Aufgabenzustände. Die Aufgabe<br />

Kontaktinformationen angeben ist beendet, sodass . . .<br />

18. . . . das zugehörige Domänenzugriffsobjekt ContactBean entfernt werden kann.<br />

19. Der Benutzer bekommt eine Webseite zurückgeliefert, in der er vier weitere Kontaktinformationen<br />

angeben kann, oder die übrigen Unteraufgaben zur Erzeugung<br />

einer Kleinanzeige aufrufen kann. Wir überspringen diese Dialogschritte<br />

bis zum Schluss, wo . . .<br />

20. . . . die eingegebenen Informationen als Kleinanzeige persistiert werden sollen. Zu<br />

diesem Zweck existiert auf der letzten Seite eine Schaltfläche, die mit der Aktion<br />

uploadClassified verbunden ist.<br />

21. Das Laufzeitsystem ruft die Methode uploadClassified() des Domänenzugriffsobjekts<br />

UploadBean auf, welche . . .<br />

22. . . . die Methode persistClassified() der Service-Schnittstelle aufruft, um die Kleinanzeige<br />

als Domänenobjekt anzulegen und zu persistieren.<br />

23. Die Wurzelaufgabe Kleinanzeige erstellen ist damit abgeschlossen und . . .<br />

24. . . . das zugehörige Domänenzugriffsobjekt kann entfernt werden. Die zustandslose<br />

Service-Schnittstelle muss nicht entfernt werden und kann beim nächsten Domänenzugriffsobjekt<br />

wiederverwendet werden.<br />

25. Der Benutzer bekommt eine Erfolgsbestätigung, ob die Kleinanzeige erfolgreich<br />

angelegt wurde.<br />

132


6.4.4 Unterbrechbarkeit und Nebenläufigkeit<br />

6.4 Anbindung des Domänenmodells<br />

Das vorgestellte Aufgabenmodell ist dank Unterbrechbarkeit in der Lage, lang ablaufende<br />

Prozesse abzubilden. Hierbei stellt sich die Frage, inwiefern Nebenläufigkeit diese<br />

Abarbeitung behindern kann. In [Fowler, 2003] werden im Kapitel über Nebenläufigkeit<br />

System- und Geschäftstransaktionen unterschieden:<br />

Die Systemtransaktionen der Datenschicht (siehe Abschnitt 2.3.3) sind meist nur von<br />

kurzer Dauer, an die die ACID-Eigenschaften [Härder und Reuter, 1983] geknüpft werden.<br />

Geschäftstransaktionen hingegen bestehen aus mehreren Schritten, die der Benutzer<br />

durchführt (z. B. einloggen, Bankkonto auswählen und Geld überweisen). Dies lässt sich<br />

nur schwer mit einer einzelnen langen Systemtransaktion bewerkstelligen, die gängigen<br />

Transaktionssysteme arbeiten mit lang andauernden Transaktionen ineffizient, vor<br />

allem bei hoher nebenläufiger Last. Stattdessen wird eine Geschäftstransaktion selbst<br />

verwaltet und als eine Art Klammer um kurze Systemtransaktionen definiert.<br />

Die Bearbeitung einer Aufgabe kann als Transaktion betrachtet werden, sie lässt sich<br />

abbrechen (äquivalent zum abort) oder beenden (äquivalent zum commit), und sie bietet<br />

dank der Unterbrechungsstrategien auch eine Persistenz. Die Aufgabenhierarchie ist<br />

eine Transaktionshierarchie. Innerhalb von Domänenzugriffsobjekten werden die Service-Schnittstelle<br />

und damit auch Systemtransaktionen verwendet, z. B. um eine komplett<br />

eingegebene Kleinanzeige als Domänenobjekt abzulegen. Die Bearbeitung einer<br />

Aufgabe entspricht also der oben beschriebenen Geschäftstransaktion.<br />

In der folgenden Betrachtung wollen wir untersuchen, inwiefern Geschäftstransaktionen<br />

in Form eines hierarchischen Aufgabenmodells den ACID-Eigenschaften genügen:<br />

Atomarität (atomicity) Eine Aufgabe kann als atomar betrachtet werden, wenn sie erst<br />

am Ende der Aufgabenbearbeitung eine schreibende Systemtransaktion auslöst.<br />

Bis zu diesem Zeitpunkt werden die Informationen nur innerhalb der Aufgabe als<br />

Aufgabenzustand verwaltet. Problematisch ist das Abbrechen einer Aufgabe mit<br />

Unteraufgaben. Dann können bereits beendete Unteraufgaben Systemtransaktionen<br />

abgeschlossen haben, die jetzt nicht mehr ohne Weiteres rückstellbar sind.<br />

Dauerhaftigkeit (durability) Genau wie bei der Atomarität ist die Dauerhaftigkeit gewährleistet,<br />

wenn am Ende der Aufgabenbearbeitung eine schreibende Systemtransaktion<br />

ausgelöst wird. Vorher werden die Informationen nur innerhalb der<br />

Aufgabe als Aufgabenzustand verwaltet, welche im Falle einer Unterbrechung<br />

automatisch persistiert werden.<br />

Isolation (isolation) Isolation innerhalb einer Geschäftstransaktion ist nicht automatisch<br />

zu gewährleisten, weil die Aufgabe bei mehreren zeitlich versetzten Systemtransaktionen<br />

38 in die klassischen Isolationsprobleme läuft: lost updates, dirty<br />

read, etc . . .<br />

38 Mehrere lesende Systemtransaktionen sind laut Vorgehen bei Atomarität und Dauerhaftigkeit erlaubt, nur die<br />

schreibende Systemtransaktion muss am Ende erfolgen.<br />

133


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Konsistenz (consistency) Die Konsistenz des Aufgabenzustands ist automatisch schwierig<br />

zu gewährleisten, weil außer den Konsistenzproblemen der Isolation die Aufgabenhierarchie<br />

ein zusätzliches Problem mitbringt: Unteraufgaben können auf<br />

den Aufgabenzustand von Oberaufgaben zugreifen und diesen verändern. Wenn<br />

eine Unteraufgabe abgebrochen wird, müsste diese den Aufgabenzustand der<br />

Oberaufgabe wiederherstellen, damit dieser konsistent ist. Wir beziehen uns hier<br />

aber auf die Aufgabendefinition, wonach eine Aufgabe eine Komposition ihrer<br />

Unteraufgaben ist und demnach ebenfalls abgebrochen werden muss. Die Kaskade<br />

setzt sich bis zur Wurzel des Aufgabenbaums fort, alle Aufgaben, die eventuell<br />

inkonsistent waren, sind demnach abgebrochen. Eine zukünftige Variante könnte<br />

es den Aufgaben erlauben, diese Kaskaden aufzuhalten, dann müssten aber auch<br />

die beschriebenen Konsistenzprobleme gelöst werden.<br />

Eine automatisierte Behandlung der oben erwähnten Probleme würde uns zwangsläufig<br />

wieder zu der Umsetzung einer Geschäftstransaktion als Systemtransaktion führen,<br />

mit allen verbundenen Problemen. Die oben genannten Probleme sollten deshalb beim<br />

Modellieren der Aufgabenhierarchie bekannt sein und entsprechend behandelt werden.<br />

In [Fowler, 2003] werden in Kapitel 16 verschiedene Lösungsmöglichkeiten vorgestellt,<br />

die unter dem Begriff offline 39 concurrency zusammengefasst werden. Im Wesentlichen<br />

handelt es sich dabei um Verfahren, die den konkurrierenden schreibenden<br />

Zugriff gewährleisten. Dem optimistischen Verfahren wird der Vorzug gegeben,<br />

es wird ein explizites Versionsattribut in allen Datensätzen verwendet, um zwischenzeitlich<br />

veränderte Datensätze zu erkennen. Im Falle einer Kollision kann mithilfe des<br />

Benutzers der Konflikt entweder geklärt werden (die Datensätze werden gemischt),<br />

oder die Geschäftstransaktion wird abgebrochen. Kombiniert mit einer grobkörnigen<br />

Versionierung, bei der nicht jeder Datensatz auf Kollision geprüft wird, sondern nur die<br />

Hauptobjekte einer Geschäftstransaktion 40 , entsteht daraus ein performantes System.<br />

Probleme durch Inkonsistenzen beim lesenden Zugriff können allerdings weiterhin auftreten<br />

und müssen spezifisch beachtet werden.<br />

6.4.5 Erweiterung des Aufgabenmetamodells<br />

Definition<br />

Um Domänenzugriffsobjekte in unserem Aufgabenmetamodell zu definieren, müssen<br />

wir den AufgabenDialog erweitern (siehe Abbildung 6.14). Aufgaben können eine beliebige<br />

Anzahl Domänenzugriffsobjekte verwenden, welche einen Namen und einen<br />

Verweis auf eine Klasse besitzen. Die Klasse verweist auf eine Klasse, die der Modellierer<br />

angelegt haben muss und die das Laufzeitsystem instanziieren kann. Der Name wird<br />

von den Dialogfragmenten verwendet, um sich auf die Klasse zu beziehen und auf die<br />

Werte und Methoden des Domänenzugriffsobjekts zuzugreifen.<br />

39 Im Sinne von: außerhalb des Transaktionssystems.<br />

40 Im Gegensatz zur Datenschicht kennen die Geschäftstransaktionen der Anwendungsschicht die Domänen-<br />

struktur<br />

134


Aufgabe<br />

-dialog<br />

0..1<br />

ZustandsInformation<br />

-dialogfragment : String<br />

0..6<br />

AufgabenDialog<br />

0..*<br />

DomaenenZugriff<br />

-name : String<br />

-klasse : String<br />

-aufgabenZustaende<br />

6.4 Anbindung des Domänenmodells<br />

-zustand<br />

-domaenenZugriffsObjekte<br />

-abhaengigkeiten<br />

<br />

AufgabenZustand<br />

ausgefuehrt<br />

initialisiert<br />

gestartet<br />

uebersprungen<br />

unterbrochen<br />

abgebrochen<br />

0..*<br />

Abhaengigkeit<br />

-attribut : String<br />

-verweis : String<br />

Abbildung 6.14: Erweiterung des Aufgabenmetamodells um Domänenzugriffsobjekte<br />

Um die Abhängigkeiten zur Laufzeit eindeutig aufzulösen, müssen wir die für ein Domänenzugriffsobjekt<br />

zu verwendenden Abhängigkeiten einzeln definieren, dies erfolgt<br />

über die Angabe eines Attributs, welches im Domänenzugriffsobjekt vom Laufzeitsystem<br />

gefüllt wird und über einen Verweis auf den Namen eines verfügbaren Domänenzugriffsobjekts.<br />

Der Verweis muss vom Laufzeitsystem aufgelöst werden können, d. h.,<br />

es können nur Namen von Domänenzugriffsobjekten verwendet werden, die in der<br />

Aufgabenhierarchie auf dem Pfad der Oberaufgaben bis zur Wurzelaufgabe definiert<br />

wurden und deshalb bei der Aufgabenausführung verfügbar sind. Diese Bedingung<br />

muss ein geeigneter Aufgabeneditor abprüfen, im Aufgabenmetamodell lässt sich diese<br />

Beschränkung nicht modellieren. Das Laufzeitsystem sollte ebenfalls Aufgabenmodelle<br />

abweisen, die diese Bedingung verletzen.<br />

Wie im Metamodell erkennbar, kann für jede Aufgabe mehr als ein Domänenzugriffsobjekt<br />

definiert werden. Auch kann jedes Domänenzugriffsobjekt beliebig viele Abhängigkeiten<br />

in Form von Referenzen auf andere Domänenzugriffsobjekte besitzen.<br />

Damit können wir den Domänenzugriff in verschiedene Klassen aufteilen und einzelne<br />

Klassen eventuell für andere Aufgaben als Domänenzugriff wiederverwenden.<br />

Beispiel<br />

Abbildung 6.15 zeigt unser Beispiel, erweitert und fokussiert auf die Definition des Domänenzugriffs.<br />

Die Aufgabe Kleinanzeige erstellen definiert ein Domänenzugriffsobjekt<br />

uploadBean und einen Verweis auf eine Klasse com.application.UploadBean. Das<br />

Dialogfragment dieser Aufgabe kann über den symbolischen Namen die Methoden der<br />

Klasse aufrufen, z. B. action=#{uploadBean.persistClassified}.<br />

135


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

136<br />

Name<br />

angeben<br />

Vorname<br />

angeben<br />

Adresse<br />

angeben<br />

Ordnung = beliebig<br />

Strategie = flüchtig<br />

Strasse<br />

angeben<br />

Nachname<br />

angeben<br />

Kleinanzeige<br />

erstellen<br />

Kardinalität = 0…∞<br />

Ordnung = beliebig<br />

ZugriffsRollen = »benutzer«<br />

name = »uploadBean«<br />

klasse = »com.application.UploadBean«<br />

Kontaktinformationen<br />

angeben<br />

Kardinalität = 1…5<br />

name = »contactsBean«<br />

klasse = »com.application.ContactsBean«<br />

attribut = »contactsAccess«<br />

verweis = »uploadBean«<br />

Stadt<br />

angeben<br />

Telefonnummer<br />

angeben<br />

Rufname<br />

angeben<br />

existierende<br />

Adresse kopieren<br />

ZugriffsRolle = »admin«<br />

Rufnummer<br />

angeben<br />

Abbildung 6.15: Beispiel Interaktionsmodell – Domänenzugriff (Auszug)


6.5 Erweiterung der Aufgaben um dialogspezifische Attribute<br />

Die Aufgabe Kontaktinformationen angeben definiert ein Domänenzugriffsobjekt<br />

mit dem Namen contactsBean und den Verweis auf die Klasse com.example.access.ContactsBean.<br />

Für die Abhängigkeit zum Domänenzugriffsobjekt uploadBean wird das Attribut<br />

contactsAccess ausgewählt. Das um den Domänenzugriff erweiterte Aufgabenmodell<br />

kann jetzt, wie im Sequenzdiagramm in Abbildung 6.13 abgebildet, ausgeführt<br />

werden.<br />

6.4.6 Zusammenfassung<br />

In diesem Abschnitt haben wir erst die allgemeine Anbindung einer komponentenbasierten<br />

Präsentation an ein Domänenmodell vorgestellt und sind dann auf die Probleme<br />

und Anforderungen eines aufgabenbasierten Dialogs eingegangen. Um den direkten<br />

Zugriff auf das Domänenmodell zu verhindern, haben wir die Domänenzugriffsobjekte<br />

vorgestellt, welche die Ein- und Ausgaben der Dialogfragmente einer Aufgabe verwalten.<br />

Mit den Domänenzugriffsobjekten können wir die Unterbrechbarkeit der Aufgaben<br />

gewährleisten und den Zugriff auf das Domänenmodell kapseln. Innerhalb der<br />

Aufgabenhierarchie lassen sich Domänenzugriffsobjekte verknüpfen, um einen Informationsaustausch<br />

zu erlauben.<br />

Die Aufgabenhierarchie ist weiterhin die grundlegende Struktur für die Abhängigkeiten<br />

der Aufgaben untereinander, der Domänenzugriff folgt diesen Abhängigkeiten.<br />

Aufgaben können an anderer Stelle wiederverwendet werden, solange die neue Oberaufgabe<br />

die notwendigen Schnittstellen des Domänenzugriffsobjektes bereitstellt.<br />

6.5 Erweiterung der Aufgaben um dialogspezifische Attribute<br />

Zusätzlich zu den beiden bereits vorgestellten Erweiterungen des Metamodells – Dialogfragmente<br />

und Domänenzugriffsobjekte – wollen wir in diesem Abschnitt Erweiterungen<br />

präsentieren, die zur Laufzeit die Ausführung der Aufgabenhierarchie als Dialog<br />

optimieren. Ziel ist die <strong>Generierung</strong> einer Benutzerschnittstelle, die möglichst einfach<br />

benutzbar ist und möglichst wenig redundante Aktionen erfordert. Bei der Aufgabenausführung<br />

kann z. B. Redundanz entstehen, wenn der Benutzer in einer Sequenz<br />

von Aufgaben nach dem Beenden einer Aufgabe die Folgeaufgabe in einem zweiten<br />

Schritt erst starten muss. Im Zentrum der nächsten Abschnitte steht deshalb die Frage,<br />

wie ein vom Benutzer ausgelöstes Ereignis Aufgabenereignisse für verschiedene Aufgaben<br />

erzeugen kann.<br />

6.5.1 Automatisches starten und beenden der Aufgaben<br />

Um aus einem Benutzerereignis (z. B. einem Knopfdruck) Ereignisse für mehrere Aufgaben<br />

(start, ende, überspringen, etc.) zu erzeugen, bieten sich zwei verschiedene Vorgehensweisen<br />

an:<br />

Zuordnungstabelle: Jedem Benutzereignis werden ein oder mehrere Aufgabenereignisse<br />

zugeordnet. Alle Zuordnungen werden außerhalb des Aufgabenmodells<br />

137


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

in einer Zuordnungstabelle abgelegt. Das Laufzeitsystem findet dort die zu einem<br />

Benutzereignis passenden Aufgabenereignisse und löst sie auf den Automaten<br />

aus.<br />

Ereignisabhängigkeiten: Jedes Benutzereignis löst ein Aufgabenereignis auf dem<br />

eigenen Aufgabenautomaten aus 41 . Die Folgeaufgaben können über diesen Zustandswechsel<br />

informiert werden und eigene Aufgabenereignisse auslösen. Ein<br />

Zustandswechsel der Folgeaufgaben wird ebenfalls rekursiv propagiert, wodurch<br />

eine Ereigniskaskade ausgelöst werden kann.<br />

Wir werden uns auf die zweite Vorgehensweise konzentrieren, weil diese es erlaubt, Ereignisabhängigkeiten<br />

direkt im Aufgabenmodell zu definieren. Wie wir zeigen werden,<br />

können die Ereignisabhängigkeiten definiert werden, ohne direkt auf das auslösende<br />

Ereignis Bezug zu nehmen. Dadurch bleiben die Aufgaben unabhängig voneinander<br />

und können an anderer Stelle wiederverwendet werden.<br />

Um dies zu erreichen, werden wir der Aufgabendefinition zwei weitere Attribute<br />

hinzufügen: autostart und autostop.<br />

Autostart<br />

Mithilfe des Autostart-Attributs kann die Aufgabe vom Laufzeitsystem automatisch gestartet<br />

werden, wenn die Bedingungen der Start-Transition dies erlauben. In der Umsetzung<br />

bedeutet dies, dass das Laufzeitsystem in definierten Situationen den Automaten<br />

ein Start-Ereignis sendet, wenn das Autostart-Attribut gesetzt ist. In folgenden Situationen<br />

wird das Ereignis gesendet:<br />

Eine Aufgabe kann automatisch gestartet werden, wenn ihre Oberaufgabe gestartet<br />

wurde. Wenn beispielsweise eine Aufgabe vom Benutzer gestartet wurde,<br />

die eine Reihe von sequenziellen Unteraufgaben besitzt, so kann die erste Unteraufgabe<br />

automatisch vom Laufzeitsystem gestartet werden.<br />

Eine Aufgabe kann automatisch gestartet werden, wenn eine Geschwisteraufgabe<br />

beendet wurde. Wenn im oben genannten Fall der Benutzer die erste Unteraufgabe<br />

der Sequenz beendet, kann das Laufzeitsystem die zweite Unteraufgabe<br />

automatisch starten.<br />

Ein Autostart ist nicht in jeder Situation sinnvoll, dies hängt vor allem von der verwendeten<br />

Hierarchiebeziehung ab. Bei einer Selektion ist ein Autostart der Unteraufgaben<br />

z. B. nicht sinnvoll, weil das Laufzeitsystem dann immer nur die erste Unteraufgabe<br />

starten würde, wenn die Oberaufgabe gestartet wurde; die Selektion wäre sinnlos. Ein<br />

Autostart einer Aufgabe ist nur dann sinnvoll, wenn diese Aufgabe vom Laufzeitsystem<br />

eindeutig als Folgeaufgabe zu einer anderen Aufgabe auswertbar ist, z. B. im Falle<br />

einer Sequenz. Die folgende Tabelle 6.1 fasst die Kombination der Hierarchiebeziehungen<br />

und der Ordnungen zusammen, in denen das Laufzeitsystem das Autostart-Attribut<br />

überhaupt auswertet.<br />

41 Der Aufgabenautomat kann über die folgende Beziehungskette gefunden werden: Benutzerereignis → Oberflächenelement<br />

→ Dialogfragment → Aufgabe → Aufgabenautomat<br />

138


Autostop<br />

6.5 Erweiterung der Aufgaben um dialogspezifische Attribute<br />

Tabelle 6.1: Unterstützung von Autostart<br />

Sequenz Selektion Parallel Überlappend Verschachtelt Arbiträr<br />

strikte Ordnung <br />

beliebige Ordnung <br />

Im Gegensatz zum Autostart kann das automatische Beenden einer Aufgabe (Autostop)<br />

vom Laufzeitsystem nur in einer Situation angewendet werden: Wenn alle Unteraufgaben<br />

beendet wurden, kann die Oberaufgabe vom Laufzeitsystem automatisch beendet<br />

werden, wenn das Autostop-Attribut gesetzt ist. Das automatische Beenden kann unabhängig<br />

von den verwendeten Hierarchiebeziehungen eingesetzt werden, die Hierarchiebeziehungen<br />

legen nur fest, wann die Unteraufgaben als beendet gelten, z. B.<br />

kann bei einer Selektion bereits bei einer ausgeführten Unteraufgabe die Oberaufgabe<br />

ebenfalls beendet werden.<br />

Beispiel<br />

Das folgende Beispiel verdeutlicht das Verhalten von Autostart und Autostop. Nehmen<br />

wir an, der Benutzer führt gerade die Aufgabe Straße angeben durch, die Aufgabenzustandshierarchie<br />

könnte folgendermaßen aussehen:<br />

Kontaktinformationen angeben (Gestartet)<br />

Adresse angeben (Gestartet)<br />

Name angeben (Ausgeführt)<br />

Straße angeben (Gestartet)<br />

Stadt angeben (Initialisiert)<br />

Telefonnummer angeben (Initialisiert)<br />

existierende Adresse kopieren (Initialisiert)<br />

Wenn die Aufgabe Stadt angeben das Autostart-Attribut gesetzt hat, dann würde bei<br />

einem beenden der Aufgabe Straße angeben aufgrund der Sequenz diese automatisch<br />

gestartet. Die Aufgabenzustandshierarchie sieht dann folgendermaßen aus:<br />

Kontaktinformationen angeben (Gestartet)<br />

Adresse angeben (Gestartet)<br />

Name angeben (Ausgeführt)<br />

Straße angeben (Ausgeführt)<br />

Stadt angeben (Gestartet)<br />

Telefonnummer angeben (Initialisiert)<br />

existierende Adresse kopieren (Initialisiert)<br />

Wenn die Aufgaben Adresse angeben und Kontaktinformationen angeben das Autostop-Attribut<br />

gesetzt haben, dann würden diese beim Beenden der Aufgabe Stadt<br />

angeben ebenfalls automatisch beendet:<br />

139


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Kontaktinformationen angeben (Ausgeführt)<br />

Adresse angeben (Ausgeführt)<br />

Name angeben (Ausgeführt)<br />

Straße angeben (Ausgeführt)<br />

Stadt angeben (Ausgeführt)<br />

Telefonnummer angeben (Initialisiert)<br />

existierende Adresse kopieren (Initialisiert)<br />

Die Aufgabe Adresse angeben wurde beendet, weil die Sequenz der Unteraufgaben<br />

beendet ist. Die Aufgabe Kontaktinformationen angeben wurde beendet, weil die<br />

Selektion aufgrund der soeben beendeten Aufgabe abgeschlossen ist. Wie wir sehen,<br />

kann durch ein Benutzerereignis eine Kaskade von automatisch erzeugten Ereignissen<br />

ausgelöst werden.<br />

Zusammenfassung<br />

Autostart und Autostop sind sinnvolle Erweiterungen der Aufgabendefinition, um benutzerfreundliche<br />

Oberflächen zu erzeugen. Der Benutzer muss nicht mehr jedes Aufgabenereignis<br />

selbst erzeugen, sondern kann eine Kaskade von automatisch generierten<br />

Ereignissen auslösen.<br />

6.5.2 Aufgabenzustandsabhängige Erweiterungen<br />

Zustandsautomaten bieten die Möglichkeit, beim Eintritt und beim Verlassen eines Zustands<br />

vordefinierte Aktionen auszuführen. Auch für unsere Aufgabenautomaten ist<br />

das eine sinnvolle Erweiterung, z. B. um automatisch beim Beenden einer Aufgabe eine<br />

Methode im Domänenmodell anzusprechen. Zu diesem Zweck erweitern wir das Interaktionsmetamodell<br />

um zwei Aufgabenzustandsabhängige Attribute: startAktion und<br />

stopAktion. Die Startaktion wird beim Eintritt in den entsprechenden Zustand ausgelöst,<br />

die stopAktion beim Verlassen des Zustandes. Beide Attribute nehmen Aufrufe in<br />

Form der in Abschnitt 6.4.1 beschriebenen Anbindung von Aktionen auf.<br />

6.5.3 Generische Aufgabendarstellung<br />

In der frühen Modellierungsphase kann es sinnvoll sein, das Interaktionsmodell erst<br />

ohne Dialogfragmente zu erstellen, um schnell einen ersten Prototyp der Web-Anwendung<br />

ausführen zu können. Damit der Benutzer trotzdem eine Oberfläche angezeigt<br />

bekommt, wird das Laufzeitsystem eine generische Aufgabendarstellung bereitstellen,<br />

die Interaktionselemente definiert, um alle Aufgabenereignisse zu erzeugen. Die generischen<br />

Aufgabendarstellungen werden dann entsprechend der Komposition von Dialogfragmenten<br />

ineinander verschachtelt.<br />

Für die Darstellung der Hierarchie werden wir keine Baumstruktur verwenden, denn<br />

diese würde den zur Verfügung stehenden rechteckigen Bereich im Web-Browser nur<br />

unzureichend ausnutzen. Wir verwenden stattdessen einen platzoptimierten Tree-Map-<br />

Algorithmus (siehe [Shneiderman, 1992]), der die Elemente der Hierarchie ineinander<br />

140


6.5 Erweiterung der Aufgaben um dialogspezifische Attribute<br />

Abbildung 6.16: Beliebige Sequenz (mit Dialogfragmenten)<br />

verschachtelt. Der Wurzelknoten ist ein rechteckiger Bereich, in dem die Unteraufgaben<br />

horizontal angeordnet werden. Deren Unteraufgaben werden dann in den jeweiligen<br />

Knoten vertikal angeordnet, die Rekursion setzt sich bis zu den Blättern fort.<br />

Für jede dargestellte Aufgabe werden für die möglichen Benutzerereignisse Schaltflächen<br />

angezeigt (siehe Tabelle 6.2):<br />

Tabelle 6.2: Generische Ereignisse für Aufgabenautomaten<br />

ereignis symbol<br />

start<br />

ende<br />

überspringen<br />

zurücksetzen<br />

Durch das Setzen des Aufgabenattributs generisch kann das Laufzeitsystem angewiesen<br />

werden, statt des Dialogfragments die generische Aufgabendarstellung zu verwenden.<br />

Wenn alle Aufgaben generisch dargestellt werden, kann das Interaktionsmodell<br />

als Prototyp ausgeführt werden.<br />

6.5.4 Beispiel<br />

Das folgende Beispiel soll die generische Aufgabendarstellung verdeutlichen. Der Benutzer<br />

möchte eine Kleinanzeige erstellen und hat bereits die Aufgaben Informationen<br />

angeben und Tags zuweisen ausgeführt. Aus der beliebigen Sequenz verbleiben<br />

noch die Aufgaben Kontaktinformationen angeben und Bild auswählen, aus denen der<br />

Benutzer die nächste Aufgabe wählen muss. Abbildung 6.16 zeigt die Darstellung mit<br />

Dialogfragmenten.<br />

141


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

Abbildung 6.17: Beliebige Sequenz (generische Darstellung)<br />

Wenn wir in allen Aufgaben das Generisch-Attribut setzen, dann wird das Laufzeitsystem<br />

die eigene Aufgabendarstellung verwenden. Das Ergebnis der Seitengenerierung<br />

ist in Abbildung 6.17 dargestellt.<br />

Das Bildschirmfoto wurde von der kompletten, englischen Version unseres Beispiels<br />

angefertigt. Interessant ist für uns die Create Classified-Aufgabe. Die Aufgaben Enter<br />

Information und Select Tags sind bereits beendet (completed) und können keine weiteren<br />

Benutzerereignisse mehr entgegennehmen. Die Aufgabe Enter Contacts kann gestartet<br />

werden, die Aufgabe Select Picture kann gestartet oder übersprungen werden,<br />

die entsprechenden Schaltflächen sind bei den Aufgaben sichtbar. Die Aufgabe Create<br />

Classified kann abgebrochen werden, die Zurücksetzen-Schaltfläche wurde unten in<br />

der Aufgabendarstellung eingefügt. Mithilfe der Schaltflächen kann der Benutzer alle<br />

erlaubten Benutzerereignisse auslösen und das Interaktionsmodell prototypisch testen.<br />

6.6 Zusammenfassung<br />

In diesem Kapitel haben wir gezeigt, wie ein aufgabenbasiertes Interaktionsmodell um<br />

Dialog- und Präsentationsinformationen erweitert werden kann. Zu diesem Zweck haben<br />

wir Dialogfragmente und Domänenzugriffsobjekte eingeführt, sowie einige dialogspezifische<br />

Attribute den Aufgabendefinitionen hinzugefügt. Tabelle 6.3 und 6.4<br />

auf Seite 144 fassen die vorgestellten Erweiterungen zusammen. Abbildung 6.18 zeigt<br />

die endgültige Version unseres Interaktionsmetamodells als UML-Klassendiagramm. Im<br />

nächsten Kapitel werden wir zeigen, wie ein Laufzeitsystem die Interaktionsmodelle<br />

ausführen kann.<br />

142


AufgabenZustand<br />

-zustand<br />

ZustandsInformation<br />

Platzhalteraufgabe<br />

<br />

Ordnung<br />

<br />

AufgabenTyp<br />

ausgefuehrt<br />

initialisiert<br />

gestartet<br />

uebersprungen<br />

unterbrochen<br />

abgebrochen<br />

-dialogfragment : String<br />

-startAktion : String<br />

-stopAktion : String<br />

-ordnung<br />

0..*<br />

beliebig<br />

strikt<br />

-typ<br />

abstrakt<br />

interaktion<br />

benutzer<br />

system<br />

-aufgabenZustaende<br />

0..6<br />

-referenz<br />

1<br />

Aufgabe<br />

<br />

AufgabenBeziehung<br />

AufgabenDialog<br />

-dialog<br />

0..1<br />

-gruppe : String<br />

-autostart : Boolean<br />

-autostop : Boolean<br />

-generisch : Boolean<br />

-id : String<br />

-name : String<br />

-beschreibung : String<br />

-kardinalitaet : int [2]<br />

-zugriffsRollen : Set<br />

-beziehung<br />

-unteraufgaben<br />

0..*<br />

sequenz<br />

parallel<br />

selektion<br />

verschachtelt<br />

ueberlappend<br />

arbitraer<br />

-elternaufgabe<br />

0..1<br />

Abhaengigkeit<br />

0..* -domaenenZugriffsObjekte<br />

DomaenenZugriff<br />

<br />

UnterbrechungsStrategie<br />

-attribut : String<br />

-verweis : String<br />

-abhaengigkeiten<br />

-name : String<br />

-klasse : String<br />

-strategie<br />

0..*<br />

fluechtig<br />

unterbrechbar<br />

persistent<br />

6.6 Zusammenfassung<br />

Abbildung 6.18: Interaktionsmetamodell – mit dialogspezifischen Erweiterungen<br />

143


6 Aufgabenbasierte Dialogfragmente für Web-Anwendungen<br />

name definition optional standard<br />

autostart Die Aufgabe kann vom Laufzeitsystem<br />

als Reaktion auf ein Ereignis einer anderen<br />

Aufgabe automatisch gestartet wer-<br />

den.<br />

autostop Die Aufgabe kann vom Laufzeitsystem<br />

als Reaktion auf ein Ereignis einer anderen<br />

Aufgabe automatisch gestoppt wer-<br />

den.<br />

generisch Das Laufzeitsystem ignoriert die Dialogfragmente<br />

dieser Aufgabe und verwendet<br />

eine generische Aufgabendarstel-<br />

lung.<br />

domaenenZugriffsObjekte Eine Liste der zu verwendenden Domänenzugriffsobjekte<br />

inklusive ihrer Abhängigkeiten.<br />

Tabelle 6.3: Aufgabendialogdefinition<br />

ja nein<br />

ja nein<br />

ja nein<br />

ja leer<br />

name definition optional standard<br />

zustand Der Zustand, für den diese Definition gilt. nein -<br />

startAktion Die Aktion, die ausgeführt werden soll, wenn der<br />

Aufgabenautomat in diesen Zustand wechselt.<br />

ja -<br />

stopAktion Die Aktion, die ausgeführt werden soll, wenn der<br />

Aufgabenautomat diesen Zustand verlässt.<br />

ja -<br />

dialogfragment Das Dialogfragment, dass das Laufzeitsystem zur<br />

Erzeugung der Benutzerschnittstelle verwendet.<br />

ja -<br />

144<br />

Tabelle 6.4: Aufgabenzustandsdefinition


Kapitel 7<br />

Architektur für das Laufzeitsystem<br />

Inhalt<br />

7.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145<br />

7.2 Ablaufübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145<br />

7.3 Architekturübersicht Laufzeitumgebung . . . . . . . . . . . . . . . . . . 147<br />

7.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158<br />

7.1 Einleitung<br />

Ziel dieser Arbeit ist nicht nur die Definition von Interaktionsmodellen, sondern auch<br />

die Erstellung einer Architektur des Laufzeitsystems, mit der die Interaktionsmodelle<br />

ausgeführt und dargestellt werden können. Von einer allgemeinen Architektursicht aus<br />

der Vogelperspektive werden wir im Laufe des Kapitels einen detaillierten Blick auf die<br />

Kernkomponenten werfen. Dazu werden wir einen objektorientierten Grobentwurf der<br />

Architektur vorstellen, indem wir die Kernkomponenten bis auf Klassenebene zerlegen<br />

und die Beziehungen zwischen den Klassen definieren.<br />

Die Laufzeitumgebung ist der Teil dieser Arbeit, welcher in einer Implementierung<br />

umgesetzt wird. Weil die meisten Programmiersprachen eine englische Syntax und englische<br />

Sprachkonventionen besitzen, sollte auch der Entwurf auf Englisch geschehen;<br />

Anweisungen im Sinne von HashSet werteMenge = new LinkedhashSet(kapazitaet)<br />

sind kein Quelltext, sondern ein Albtraum. Aus diesem Grund werden wir für die Architektur<br />

in den Diagrammen alle Begriffe auf Englisch verfassen. Im Fließtext werden<br />

wir diese durch kursive Schrift hervorheben, z. B. Dialog Controller, wenn wir den Baustein<br />

zur Dialogkontrolle besprechen.<br />

7.2 Ablaufübersicht<br />

Bevor wir in den nächsten Abschnitten die Architektur des Laufzeitsystems vorstellen,<br />

werden wir den im letzten Kapitel beschriebenen Ablauf eines Dialogschrittes zusammenfassen.<br />

Abbildung 7.1 zeigt die Verarbeitung einer Anfrage durch das Laufzeitsystem.<br />

145


7 Architektur für das Laufzeitsystem<br />

User<br />

Browser<br />

1<br />

6<br />

Task<br />

Controller<br />

2 3<br />

Dialog<br />

Controller<br />

Dialog<br />

Fragments<br />

Web Application Server<br />

Task<br />

Model<br />

Abbildung 7.1: Ablaufübersicht<br />

4<br />

5<br />

View<br />

Assembly<br />

UI<br />

Theme<br />

Aus der Vogelperspektive betrachtet zerlegt sich die Anfrageverarbeitung in sechs<br />

Schritte:<br />

1. Alle Anfragen des Browsers werden vom Dialog Controller entgegengenommen,<br />

welcher sich als Front Controller verhält, und die Anfrage in ein Ereignis für die<br />

Aufgabenautomaten transformiert.<br />

2. Der Dialog Controller ruft den Task Controller auf, welcher das Ereignis verarbeitet<br />

und die Zustandswechsel der Aufgabenautomaten des Task Models ausführt.<br />

3. Der Task Controller liefert die Zustände der Automaten der Aufgabenhierarchie<br />

zurück.<br />

4. Der Dialog Controller generiert aus den Zuständen und den Dialogfragmenten<br />

einen neuen Komponentenbaum, welcher an die View Assembly weitergeleitet<br />

wird.<br />

5. Die View Assembly wandelt die konkrete Benutzerschnittstelle unter Berücksichtigung<br />

von Gestaltungsrichtlinien (UI Theme) in eine finale HTML-Benutzerschnittstelle<br />

um.<br />

6. Der Dialog Controller liefert die Seite an den Browser aus.<br />

Die Architektur des Task- und Dialog Controllers werden wir im Detail vorstellen. Für<br />

die View Assembly können wir existierende Ansätze integrieren, die automatisch aus<br />

einer konkreten Benutzerschnittstelle eine finale erzeugen, z. B. aus McClanahan u. a.<br />

[2004].<br />

146


Finite State Machine<br />

Process Context<br />

Manager<br />

Domain Base<br />

Base Entity<br />

Task Controller<br />

Task Model<br />

Context Factory<br />

User Management<br />

User Management<br />

Service<br />

7.3 Architekturübersicht Laufzeitumgebung<br />

Dialog Controller<br />

Dialog Context<br />

Manager<br />

User Management Dialog<br />

User Management<br />

Dialog<br />

Abbildung 7.2: Architekturübersicht Laufzeitumgebung<br />

7.3 Architekturübersicht Laufzeitumgebung<br />

Web Application<br />

Abbildung 7.2 zeigt, in Form eines Kompositionsstrukturdiagramms der UML, die Aufteilung<br />

der Gesamtarchitektur in einzelne Bausteine. Diese besitzen, gemäß dem Modularitätsprinzip<br />

für Softwarearchitekturen, eine hohe interne Kohäsion und eine geringe<br />

Kopplung untereinander. Auf die Interna der Bausteine werden wir später eingehen, in<br />

dieser Übersicht sind nur die Kopplungen der Bausteine dargestellt. Dazu bietet jeder<br />

Baustein, der von einem anderen verwendet werden soll, eine öffentliche Schnittstelle<br />

an, die Verbindungslinie zwischen einem Baustein und einer Schnittstelle beschreibt<br />

eine „verwendet“-Beziehung.<br />

Die Bausteine fassen abgrenzbare Funktionalitäten zusammen. Folgende werden wir<br />

im Detail vorstellen:<br />

Finite State Machine: Dient der Modellierung und Ausführung eines beliebigen<br />

endlichen Automaten. Bestandteile sind z. B. Zustände, Transitionen, Bedingungen<br />

und Aktivitäten. Eine Instanz eines endlichen Automaten wird Process genannt,<br />

der Process Context Manager bietet es anderen Bausteinen an, Ereignisse<br />

an den Automaten zu schicken und den aktuellen Zustand zu erfragen.<br />

Task Controller: Verwendet die Finite State Machine, um den endlichen Automaten<br />

aus Abbildung 6.4 umzusetzen. Die temporalen Operatoren des Interaktionsmodells<br />

werden in Form von Bedingungen an die Transitionen gebunden. Dieser<br />

Baustein verwaltet intern die Menge der aktuell ausgeführten Aufgaben. Über die<br />

Schnittstelle Task Model Context Factory können weitere Bausteine den Aufgaben<br />

Ereignisse senden und auf die aktuellen Zustände der Aufgaben zugreifen.<br />

Domain Base: In diesem Baustein werden generische Elemente für das Domänenmodell<br />

zusammengefasst, z. B. um ein Objekt zu persistieren, oder um konkurrierenden<br />

Zugriff mittels optimistischer Verfahren zu erkennen. In Form der Base<br />

147


7 Architektur für das Laufzeitsystem<br />

Entities<br />

BaseEntity<br />

Data Access<br />

GenericDao<br />

T > BaseEntity<br />

Abbildung 7.3: Architektur – Domain Base<br />

Entity können diese sowohl von den anderen Architekturbausteinen, als auch von<br />

den zur Laufzeit ausgeführten Interaktionsmodellen verwendet werden.<br />

User Management: Modelliert eine einfache Benutzerverwaltung, damit das Laufzeitsystem<br />

über eine definierte Schnittstelle auf Autorisierungs- und Authentisierungsinformationen<br />

zugreifen kann. Im Baustein ist dazu ein eigenes Domänenmodell<br />

vorhanden, um diese Daten zu persistieren, es können aber auch externe<br />

Benutzerverwaltungen integriert werden. Der User Management Service definiert<br />

die öffentliche Schnittstelle, z. B. um Benutzer anzulegen und Rollen zuzuweisen.<br />

Dialog Controller: Dieser Baustein liest ein Interaktionsmodell ein und verwaltet<br />

den Lebenszyklus des Dialogs. Ereignisse aus der Benutzeroberfläche werden an<br />

die zugehörigen Aufgabenautomaten verteilt und aus dem neuen Zustand der<br />

Automaten wird mit den Dialogfragmenten eine Seite generiert. Der Baustein<br />

greift dazu nicht nur auf den Task Controller zurück, sondern verwendet ebenfalls<br />

den User Management Service für die Zugriffskontrolle und die Base Entity, um<br />

unterbrochene Dialoge zu persistieren.<br />

User Management Dialog: Dieser Baustein besteht aus einem Interaktionsmodell,<br />

welches eine Oberfläche für die Benutzerverwaltung definiert. Es unterscheidet<br />

sich nicht von durch Modellierer erzeugte Interaktionsmodelle, es ist allerdings<br />

immer vorhanden und muss nicht installiert werden.<br />

Web Application: Fasst die Bausteine unter einer gemeinsamen Oberfläche zusammen.<br />

Jedes installierte Interaktionsmodell wird auf der Hauptseite in einer<br />

Auswahlliste dargestellt, der Benutzer kann aus der Liste einen Dialog anfangen.<br />

Auch das Fortsetzen unterbrochener Dialoge und das Installieren neuer Interaktionsmodelle<br />

ist Bestandteil dieses Bausteins.<br />

In den folgenden Abschnitten werden wir die Bausteine im Detail vorstellen.<br />

7.3.1 Domain Base<br />

Die Domain Base (siehe Abbildung 7.3) definiert generische Oberklassen für zwei Bereiche:<br />

den Domänenobjekten und der Datenzugriffsschicht.<br />

148


Domain Service Interface<br />

BaseEntity<br />

Group -groups User -roles Role<br />

0..*<br />

0..*<br />

-roles 0..*<br />

7.3 Architekturübersicht Laufzeitumgebung<br />

UserManagementService<br />

SecurityService<br />

Abbildung 7.4: Architektur – User Management<br />

Die abstrakte Klasse BaseEntity, von der alle Domänenobjekte (Entities) abgeleitet<br />

sind, definiert allgemeine Attribute, die jedes Domänenobjekt besitzen muss, z. B. eine<br />

id als automatisch generierter Surrogatschlüssel und ein Versionsattribut für den optimistischen<br />

konkurrierenden Zugriff.<br />

Die Schnittstelle GenericDao definiert allgemeine Methoden, um auf die Persistenzfunktionen<br />

42 einer BaseEntity zuzugreifen. Die BaseEntity sollte diese Methoden nicht<br />

selbst integrieren, damit die davon abgeleiteten Objekte keine Abhängigkeit zur Persistenzschicht<br />

besitzen. Zu diesem Zweck wird eine Data-Access-Schicht definiert, in der<br />

für jede von BaseEntity abgeleitete Klasse ein zugehöriges Data Access Object definiert<br />

wird.<br />

Für die weitere Architekturübersicht werden wir uns auf das BaseEntity beziehen,<br />

wenn wir zu persistierende Objekte modellieren wollen.<br />

7.3.2 User Management<br />

Das User Management (siehe Abbildung 7.4) setzt eine Benutzerverwaltung als Basisdienst<br />

um. Für die rollenbasierte Zugriffskontrolle (siehe Abschnitt 5.7) benötigen wir<br />

die drei Klassen User, Group und Role, welche wir von der Oberklasse BaseEntity aus<br />

dem Domain Base Baustein ableiten.<br />

Die Klasse User modelliert die Benutzer der Web-Anwendung, z. B. Namen, Email-<br />

Adresse und Passwort. Die Klasse Group beschreibt die Gruppen, zu denen Benutzer<br />

zusammengefasst werden können. Jeder Benutzer kann beliebig vielen Gruppen zugeordnet<br />

werden. Die Klasse Role beschreibt die Rollen, die für die Zugriffskontrolle<br />

verwendet werden. Sowohl Benutzern als auch Gruppen können beliebig viele Rollen<br />

zugeordnet werden.<br />

Der Schnittstelle UserManagementService fasst die Methoden zum Verwalten der Benutzerdaten<br />

zusammen, z. B. zum Anlegen neuer Benutzer, Zuordnung von Rollen und<br />

zum Löschen von Gruppen. Die Schnittstelle SecurityService dient nur zum Abfragen<br />

von Authentisierungsdaten und liefert alle Rollen – sowohl explizite, als auch implizite<br />

über die Gruppenzugehörigkeit – eines Benutzers zurück.<br />

42 Persistenzfunktionen werden häufig als CRUD-Funktionalitäten bezeichnet, nach den vier zentralen Operationen<br />

Create, Retrieve, Update und Delete.<br />

149


7 Architektur für das Laufzeitsystem<br />

7.3.3 Finite State Machine<br />

Die Finite State Machine (siehe Abbildung 7.5) definiert die Klassen zur Beschreibung<br />

eines allgemeinen endlichen Automaten. Dieser Baustein ist in zwei Bereiche aufgeteilt,<br />

auf der linken Seite die Elemente, die den endlichen Automaten definieren (model-time<br />

elements) und auf der rechten Seite die Elemente, die zur Laufzeit angelegt werden,<br />

um eine Instanz des endlichen Automaten zu verwalten (run-time elements).<br />

Im linken Bereich definiert Process einen endlichen Automaten, indem er die Menge<br />

der Zustände (State) verwaltet. Über die Assoziation startState wird der Anfangszustand<br />

des Process identifiziert. Die Klasse Activity beschreibt die Aktionen, die beim<br />

Eintritt (enterActivity) oder beim Verlassen (exitActivity) eines States ausgeführt werden.<br />

Der Zustandsübergang wird mittels einer Transition ausgelöst. Eine Transition führt<br />

von einem Ursprungszustand (origin) in einen Zielzustand (destination). Die ausgehenden<br />

Transitionen eines Zustandes werden über die Assoziation outbound verwaltet, die<br />

eingehenden über inbound. Ein Zustandsübergang kann über eine oder mehrere Bedingungen<br />

(Condition) geschützt werden. Als generische Bedingungen sind nur AndCondition,<br />

OrCondition und NotCondition definiert, mit deren Hilfe sich komplexe boolesche<br />

Ausdrücke aus einzelnen Bedingungen zusammensetzen lassen. Die Implementierung<br />

der Schnittstelle Condition (genau wie Activity) ist anwendungsabhängig und muss an<br />

anderer Stelle geschehen.<br />

Im rechten Bereich sind die Laufzeitelemente des endlichen Automaten dargestellt.<br />

Ein ProcessContextManager erstellt auf Anfrage eine Instanz eines Prozesses: den ProcessContext.<br />

Dieser besitzt am Anfang den ProcessStatus „NOT_STARTED“. Sobald der<br />

Automat in den Startzustand wechselt, befindet er sich im Status „RUNNING“ und der<br />

ProcessContext referenziert den aktuellen Zustand mit der Assoziation processState.<br />

Dem ProcessContext können mittels einer Instanz der Klasse ProcessEvent neue Ereignisse<br />

übermittelt werden, worauf dieser versucht, einen Zustandsübergang unter<br />

Berücksichtigung der Bedingungen durchzuführen. Falls ein Zustandsübergang ausgeführt<br />

wurde, verweist processState auf den neuen Zustand. Falls der Automat sich in einem<br />

Endzustand befindet, wechselt der Status auf „FINISHED“. Die ereignisauslösende<br />

Klasse muss dabei nicht die konkrete Umsetzung des ProcessContext kennen, letztere<br />

implementiert die Schnittstelle ProcessListener, welche nur eine Methode zum Verarbeiten<br />

eines Ereignisses bereitstellt. Von außen betrachtet existiert nur ein ProcessListener<br />

der ProcessEvents entgegennimmt.<br />

Der ProcessContext kann, zusätzlich zu dem aktuellen Zustand des Automaten, auch<br />

noch weitere Kontextdaten speichern. Dazu muss eine Anwendung die Schnittstelle<br />

StateHolder implementieren und im ProcessContext ablegen. Damit kann der gesamte<br />

Automat unterbrochen, persistiert und zu einem späteren Zeitpunkt fortgesetzt werden.<br />

Dieser Baustein für die Ausführung endlicher Automaten werden wir im Folgenden<br />

verwenden, um unsere Aufgabenautomaten abzubilden. Er kann aber auch an anderer<br />

Stelle benutzt werden, z. B. um im Domänenmodell einen Zustandsautomaten zu<br />

verwenden.<br />

150


un-time elements<br />

model-time elements<br />

ProcessContextManager<br />

-manager<br />

ProcessContext<br />

Process -process<br />

-status<br />

ProcessStatus<br />

-NOT_STARTED<br />

-RUNNING<br />

-FINISHED<br />

-startState 0..* -states<br />

-outbound<br />

State<br />

0..*<br />

-inbound<br />

-processState<br />

0..* -origin<br />

-destination<br />

Transition<br />

7.3 Architekturübersicht Laufzeitumgebung<br />

0..* -conditions<br />

-enterActivity -exitActivity<br />

-processData<br />

Condition Activity<br />

StateHolder ProcessListener ProcessEvent<br />

BaseCondition<br />

AndCondition OrCondition NotCondition<br />

Abbildung 7.5: Architektur – Finite State Machine<br />

151


7 Architektur für das Laufzeitsystem<br />

7.3.4 Task Controller<br />

Der Task Controller ist in zwei Bereiche aufgeteilt. Zum einen der Modellierungsbereich,<br />

um das komplette Interaktionsmodell als Klassenstruktur abzubilden. Zum anderen der<br />

Laufzeitbereich, um eine Instanz des Interaktionsmodells auszuführen. Aus Gründen<br />

der Darstellbarkeit haben wir das Diagramm in diese zwei Bereiche aufgeteilt und stellen<br />

sie getrennt vor.<br />

Abbildung 7.6 beschreibt die Struktur, um ein Interaktionsmodell abzubilden. Dazu<br />

übertragen wir das Interaktionsmetamodell aus dem vorigen Kapitel (siehe Abbildung<br />

6.18) in unsere Architektur, damit wir zur Laufzeit Interaktionsmodelle einlesen und<br />

verarbeiten können. Eine Anpassung ist notwendig, weil das Interaktionsmetamodell<br />

speziell für die Erstellung von Interaktionsmodellen in Diagrammeditoren und für die<br />

textuelle Notation der Interaktionsmodelle geeignet ist, während wir zur Laufzeit das<br />

Interaktionsmodell in einer für die Ausführung angepassten Form benötigen. Die notwendigen<br />

Transformationen werden automatisch beim Einlesen eines Interaktionsmodells<br />

durchgeführt.<br />

Zentrale Elemente sind die Schnittstellen TaskModel, welche das zugrundeliegende<br />

Aufgabenmodell, Task, welche einzelne Aufgaben des Interaktionsmodells und TaskDialog,<br />

welche die dialogspezifischen Informationen einer Aufgabe beschreiben. Zu jeder<br />

Schnittstelle existiert eine Implementierung, die den Präfix Base trägt; Schnittstelle und<br />

Implementierung werden im Folgenden als eine Einheit beschrieben. Das TaskModel<br />

verweist auf den Wurzelknoten des Aufgabenbaums mittels der Assoziation rootTask.<br />

Weiterhin pflegt es noch eine Hashtabelle mit dem Namen taskMap, um eine Aufgabe<br />

effizient nach ihrem Namen finden zu können. Der Baum wird vom Wurzelknoten mittels<br />

der Assoziationen parent und subTasks aufgespannt, jede Oberaufgabe verweist<br />

auf eine oder mehrere Unteraufgaben und jede Unteraufgabe verweist auf ihre Oberaufgabe.<br />

Mit der Assoziation dialog verweist die Aufgabe auf ihre dialogspezifischen<br />

Informationen, welche wiederum auf mehrere zustandsabhängige Dialoginformationen<br />

verweisen kann (taskStateDialogs). Der Typ einer Aufgabe wird mit dem Verweis<br />

auf TaskType beschrieben. Die Beziehung einer Aufgabe zu ihren Unteraufgaben wird<br />

mittels einer Relation beschrieben. Die sechs verfügbaren Hierarchiebeziehungen sind<br />

als Unterklassen von BaseRelation modelliert. Während BaseRelation die allgemeine<br />

Hierarchiebedingung von Seite 75 umsetzt, erweitern die Unterklassen die speziellen<br />

Hierarchiebedingungen der Ausprägungen.<br />

Der zweite Bereich des Task Controllers (siehe Abbildung 7.7) beschreibt die Laufzeitelemente<br />

für die Ausführung des Interaktionsmodells, zusammengefasst in dem Unterbereich<br />

run-time elements. In dem Unterbereich model-time elements werden die<br />

Schnittstellen aus der vorigen Abbildung aufgegriffen, die an dieser Stelle Verwendung<br />

finden. In dem Unterbereich process integration wird, unter Verwendung des Bausteins<br />

Finite State Machine der Aufgabenautomat modelliert.<br />

Im Zentrum der Aufgabenausführung stehen die Schnittstellen TaskModelContext,<br />

TaskContext und TaskDialogContext, sowie deren jeweiligen Implementierungen.<br />

TaskModelContext verwaltet z. B. eine Instanz der Schnittstelle TaskAccessControl, die<br />

eine Integration des Bausteins User Management umsetzt und die Berechtigungsprüfung<br />

vornimmt.<br />

152


model-time elements<br />

TaskState<br />

TaskType<br />

TaskModel<br />

BaseTaskModel<br />

-taskType<br />

-ABSTRACT<br />

-USER<br />

-SYSTEM<br />

-INTERACTION<br />

-SKIPPED<br />

-INITIATED<br />

-RUNNING<br />

-COMPLETED<br />

-SUSPENDED<br />

-TERMINATED<br />

-rootTask -taskMap<br />

0..*<br />

Relation<br />

TaskRelation<br />

Task<br />

BaseTask<br />

-relation<br />

7.3 Architekturübersicht Laufzeitumgebung<br />

-parent<br />

-subTasks<br />

0..*<br />

-relation<br />

BaseRelation<br />

-ARBITRARY<br />

-NESTED<br />

-OVERLAP<br />

-PARALLEL<br />

-SELECTION<br />

-SEQUENCE<br />

-dialog<br />

TaskDialog<br />

BaseTaskDialog<br />

OverlapRelation<br />

SequenceRelation<br />

0..* -taskStateDialogs<br />

StateDialogData<br />

NestedRelation<br />

ParallelRelation<br />

ArbitraryRelation<br />

SelectionRelation<br />

Abbildung 7.6: Architektur – Task Controller – Modellierung<br />

153


Abbildung 7.7: Architektur – Task Controller – Laufzeit<br />

7 Architektur für das Laufzeitsystem<br />

154<br />

SkipControlCondition<br />

ResumeControlCondition<br />

StopControlCondition SuspendControlCondition<br />

TaskProcessFactory<br />

StartControlCondition<br />

ResetControlCondition<br />

Activity<br />

Condition<br />

TaskActivity<br />

TaskControlCondition<br />

proccess integration<br />

-taskDialogContext<br />

TaskDialogContext<br />

BaseTaskDialogContext<br />

-taskContext<br />

-parentContext<br />

-rootContext<br />

-cachedOperations<br />

0..*<br />

-START<br />

-STOP<br />

-RESET<br />

-SUSPEND<br />

-RESUME<br />

-ABORT<br />

-SKIP<br />

Task<br />

TaskContext<br />

BaseTaskContext<br />

TaskOperation<br />

-task<br />

-modelContext<br />

-taskAccessControl<br />

-taskAccessControl<br />

-taskModel<br />

TaskModel<br />

-taskAccessControl<br />

TaskModelContext BaseTaskModelContext<br />

TaskAccessControl<br />

TaskModelContextFactory<br />

BaseTaskModelContextFactory<br />

model-time elements<br />

run-time elements


7.3 Architekturübersicht Laufzeitumgebung<br />

TaskContext und TaskDialogContext werden dynamisch angelegt, wenn eine Aufgabe<br />

in der Aufgabenhierarchie ausgeführt wird, und wieder entfernt, wenn die Aufgabenausführung<br />

beendet wurde. Den Algorithmus haben wir auf Seite 113 im Detail<br />

vorgestellt. Der TaskContext enthält den Aufgabenautomaten und weitere Laufzeitinformationen,<br />

z. B. Anzahl der bisher ausgeführten Iterationen.<br />

Der Aufgabenautomat wird – unter Verwendung des Bausteins Finite State Machine<br />

– von der TaskProcessFactory erzeugt. Für den Ein- und Austritt aus den Zuständen<br />

werden mittels einer TaskActivity die im Interaktionsmodell definierten Aktionen<br />

mit dem endlichen Automaten verknüpft. Die einzelnen Aufgabenautomaten werden<br />

mittels Transitionsbedingungen untereinander verknüpft. So erlaubt beispielsweise die<br />

StartControlCondition nur dann die Start-Transition des Aufgabenautomaten, wenn die<br />

Oberaufgabe bereits gestartet ist, die Hierarchiebeziehung der Oberaufgabe den Start<br />

erlaubt und die Berechtigungsprüfung für den Benutzer positiv ausfällt. An jede Transition<br />

im Aufgabenautomaten werden die entsprechenden ControlCondition-Bedingungen<br />

geknüpft, nur die Abbrechen-Transition ist immer auslösbar.<br />

Nach jedem verarbeiteten Ereignis werden die möglichen Folgeereignisse in allen<br />

Aufgaben bestimmt, z. B. kann eine Aufgabe nur gestartet werden, wenn die Hierarchiebeziehung<br />

dies zulässt. Der TaskContext verwaltet dazu mit der Assoziation cachedOperations<br />

eine Liste der erlaubten Folgeereignisse. Bei der <strong>Generierung</strong> der Benutzerschnittstelle<br />

kann diese Liste abgefragt werden, um nur Oberflächenelemente für<br />

Ereignisse zu erzeugen, die auch verarbeitet werden können.<br />

Die TaskModelContextFactory ist die Schnittstelle nach außen, um die Ausführung<br />

eines der installierten Interaktionsmodelle anzustoßen. Sie legt auf Anfrage einen initialen<br />

TaskModelContext an.<br />

7.3.5 Dialog Controller<br />

Der Dialog Controller (siehe Abbildung 7.8) ist das verbindende Element zwischen der<br />

Benutzerschnittstelle und den Aufgabenautomaten des Task Controllers. Dieser Baustein<br />

nimmt Anfragen vom Browser des Benutzers entgegen und transformiert diese in<br />

Ereignisse für die Aufgabenautomaten. Im Anschluss verwendet es die neuen Zustände<br />

der Automaten, um daraus gemäß dem Algorithmus auf Seite 118 eine neue Webseite<br />

aus den Dialogfragmenten zu generieren.<br />

Während die Schnittstelle Dialog nur die bestehenden TaskModel – und damit die<br />

installierten Interaktionsmodelle – kapselt, verrichtet der DialogContext die oben beschriebene<br />

Dialogfunktionalität. Initial wird dieser erzeugt von einem DialogContext-<br />

Manager und der TaskModelContextFactory.<br />

Wenn ein DialogContext aufgrund von System- oder Benutzerereignissen unterbrochen<br />

wird, dann wird dieser in einen PersistedDialog umgewandelt. Dieser ist von BaseEntity<br />

abgeleitet und kann persistiert werden. Die Assoziation zu User aus dem Baustein<br />

User Management erlaubt es dem Laufzeitsystem, dem Benutzer beim nächsten<br />

Aufruf der Web-Anwendung die persistierten Dialoge zur Fortsetzung anzubieten.<br />

155


7 Architektur für das Laufzeitsystem<br />

156<br />

Abbildung 7.8: Architektur – Dialog Controller<br />

BaseEntity PersistedDialog -user User<br />

TaskModelContext<br />

-taskModelContext<br />

BaseDialogContext<br />

0..* -map<br />

DialogContext<br />

TaskModelContextFactory<br />

-taskModelContextFactory<br />

-dialog<br />

-manager<br />

TaskModel<br />

-taskModel<br />

BaseDialog<br />

0..*<br />

Dialog<br />

DialogContextManager<br />

BaseDialogContextManager<br />

-dialogs


7.3 Architekturübersicht Laufzeitumgebung<br />

Weil der DialogContext den Ablauf unseres Dialogs zentral steuert, werden wir die<br />

dort ausgeführten Schritte im Detail betrachten (vergleiche Dialog Controller in Abbildung<br />

7.1):<br />

1. Komponentenbaum aufbauen: Damit der DialogContext die Eingaben verarbeiten<br />

kann, muss zuerst der Komponentenbaum wiederhergestellt werden, der bei<br />

der letzten Anfrage die Webseite des Benutzers generiert hat. Dieser Komponentenbaum<br />

kann z. B. zwischengespeichert worden sein, oder aber aus den Dialogfragmenten<br />

basierend auf den Aufgabenzuständen neu aufgebaut werden.<br />

2. Komponentensteuerungen aufrufen: Die Eingaben des Benutzers werden den<br />

Komponenten zugeordnet, damit die Komponentensteuerungen (siehe Abbildung<br />

2.11) diese verarbeiten können. Sie nehmen die Eingaben für die jeweilige<br />

Komponente entgegen und greifen z. B. mit den Domänenzugriffsobjekten auf<br />

das Domänenmodell zu.<br />

3. Aufgabenereignis weiterleiten: Eine der Komponenten der Oberfläche hat die Anfrage<br />

an die Web-Anwendung ausgelöst. Der Dialog Controller transformiert das<br />

allgemeine Ereignis („Knopf gedrückt“) in ein Ereignis für einen Aufgabenautomaten<br />

und ruft den Task Controller auf.<br />

4. Neuen Komponentenbaum aufbauen: Nachdem die Aufgabenautomaten ihre Zustände<br />

gewechselt haben, generiert der Dialog Controller aus den Zuständen und<br />

den Dialogfragmenten einen neuen Komponentenbaum.<br />

5. Webseite generieren: Die <strong>Generierung</strong> der Webseite wird dem komponentenbasierten<br />

Framework überlassen. Der Komponentenbaum wird in der View Assembly<br />

übergeben, welche mit einer Darstellungsspezifikation (UI Theme) z. B. eine<br />

HTML-Webseite ausgibt.<br />

7.3.6 User Management Dialog<br />

Der Baustein User Management Dialog definiert eine Administrationsschnittstelle der<br />

Benutzerverwaltung in Form eines Interaktionsmodells. Aus Platzgründen ist dieses hier<br />

nicht aufgeführt, zusammengefasst bietet es die Möglichkeit, in einer dialoggeführten<br />

Oberfläche die Benutzer, Gruppen und Rollen jeweils zu erstellen, zu verändern und zu<br />

löschen.<br />

7.3.7 Web Application<br />

Der Baustein Web Application fasst die bis jetzt besprochenen Bausteine in einer Oberfläche<br />

zusammen. Folgende Aspekte sollten dabei umgesetzt werden:<br />

Beim ersten Aufruf der Web-Anwendung sollte eine Liste der verfügbaren Interaktionsmodelle<br />

dargestellt werden, damit der Benutzer eines auswählen und ausführen<br />

kann.<br />

157


7 Architektur für das Laufzeitsystem<br />

Abbildung 7.9: Umsetzung der Einstiegsseite<br />

Falls für einen Benutzer persistierte Dialoge vorhanden sind, sollte diese zur Fortsetzung<br />

angeboten werden.<br />

Unabhängig vom ausgeführten Dialog sollten jederzeit generisch Interaktionselemente<br />

dargestellt werden, damit sich ein Benutzer bei der Web-Anwendung anmelden<br />

kann. So kann ein Benutzer beispielsweise den Dialog anonym beginnen<br />

und sich erst dann anmelden, wenn Aufgaben zugangsbeschränkt sind.<br />

Abbildung 7.9 zeigt die beispielhafte Umsetzung der aufgezählten Aspekte. Im Kopfbereich<br />

der Oberfläche wird der angemeldete Benutzer (Jane Doe) und die dem Benutzer<br />

zugeordneten Rollen (user) angezeigt. Im Hauptbereich werden die installierten Interaktionsmodelle<br />

zur Auswahl (Available Dialogs), sowie die unterbrochenen Dialoge zur<br />

Fortsetzung (Suspended Dialogs) angeboten.<br />

7.4 Zusammenfassung<br />

Wir haben in diesem Kapitel eine Architektur vorgestellt, mit der Interaktionsmodelle<br />

eingelesen und ausgeführt werden können.<br />

158


7.4 Zusammenfassung<br />

Wir haben gezeigt, wie die Gesamtarchitektur in Bausteine zerteilt werden kann, die<br />

in sich gekapselte Funktionalität über definierte Schnittstellen nach außen anbieten<br />

können. Die Architektur ist in allen Bausteinen durchgängig in zwei Bereiche gekapselt:<br />

den Elementen der Modellierung (model-time) und den Elementen der Laufzeit (run-time).<br />

Während die Modellierungselemente unser Interaktionsmodell abbilden, welches<br />

innerhalb des Laufzeitsystems statischer Natur ist, beschreiben die Elemente der Laufzeit<br />

Kontextdaten, welche das Laufzeitsystem für jeden Benutzer verwaltet.<br />

Wir haben gezeigt, dass in einem Laufzeitsystem mehrere Interaktionsmodelle installiert<br />

sein können und wie die Kontextdaten eines Benutzers bei einer Unterbrechung<br />

persistiert werden.<br />

159


7 Architektur für das Laufzeitsystem<br />

160


Kapitel 8<br />

Bewertung der Ergebnisse<br />

Inhalt<br />

8.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />

8.2 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />

8.3 Abschließender Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />

8.4 Modifizierungen am Aufgabenmodell . . . . . . . . . . . . . . . . . . . 162<br />

8.1 Einleitung<br />

Nachdem wir in den vorigen Kapiteln sowohl das Interaktionsmodell, als auch das dazu<br />

passende Laufzeitsystem vorgestellt haben, werden wir an dieser Stelle die Ergebnisse<br />

zusammenfassen und kritisch mit den existierenden Ansätzen vergleichen. Während die<br />

Vorteile der vorgestellten Erweiterungen und Integrationen in den letzten Kapiteln bereits<br />

motiviert wurden, werden wir hier einen Blick auf die Vorteile des Gesamtansatzes<br />

werfen und die noch offenen Thesen konstatieren.<br />

8.2 Zusammenfassung<br />

Der in dieser Arbeit vorgestellte Ansatz zur Modellierung von Web-Anwendungen besitzt<br />

folgende Eigenschaften:<br />

Parallel zum Domänenmodell entwickeln wir ein Interaktionsmodell für die Spezifikation<br />

der Benutzerschnittstelle.<br />

Das Interaktionsmodell vereint die Eigenschaften eines Aufgaben-, Dialog- und<br />

Präsentationsmodells.<br />

Dialogfragmente beschreiben die Interaktionselemente einer Aufgabe. Dialogfragmente<br />

sind unabhängig voneinander und sind nur ihrer Aufgabe zugeordnet.<br />

Die Benutzeroberfläche wird erst zur Laufzeit aus dem Zustand des Aufgabenmodells<br />

und den zugehörigen Dialogfragmenten erzeugt.<br />

161


8 Bewertung der Ergebnisse<br />

Nicht-Blattaufgaben gruppieren nicht nur die Unteraufgaben, sondern können<br />

auch Dialogfragmente in die Benutzerschnittstelle einbringen, die gemeinsame<br />

Interaktionselemente aller Unteraufgaben zusammenfassen.<br />

Zeitliche und räumliche Beziehungen sind explizit im Interaktionsmodell beschrieben,<br />

entweder in den temporalen Relationen des Aufgabenmodells oder als Gruppierungen<br />

in den Dialogfragmenten.<br />

Unser Ansatz erlaubt die einfache Veränderung des zugrundeliegenden Aufgabenmodells.<br />

Die Dialog- und Präsentationseigenschaften des Interaktionsmodells<br />

folgen den Veränderungen.<br />

8.3 Abschließender Vergleich<br />

Unsere Arbeit unterscheidet sich von allen klassischen Ansätzen durch die Verwendung<br />

von aufgabenbasierten Dialogfragmenten. In den meisten Ansätzen, einschließlich der<br />

Arbeiten aus dem HCI-Bereich (siehe [Paternò u. a., 1997], [Clerckx u. a., 2004] und [Luyten<br />

u. a., 2003]), werden die Aufgabenhierarchien während der Modellierung in ein<br />

initiales Dialog- oder Navigationsmodell transformiert. Diese Modelle werden weiter<br />

angepasst, eine Änderung der Aufgabenhierarchie und ein erneutes transformieren ist<br />

nicht möglich, bzw. zieht den Verlust des Dialogmodells nach sich. Wir verschieben die<br />

<strong>Generierung</strong> des Dialogs und der Präsentation auf die Laufzeit, die Anwendung kann<br />

die Benutzerschnittstelle den Anforderungen des Benutzers gemäß anpassen.<br />

Einige Limitationen und Entwurfsentscheidungen, die dem Ansatz inhärent sind, sollten<br />

dem Modellierer bewusst sein. Der Einsatz des vorgestellten Interaktionsmodells<br />

beschränkt sich auf Web-Anwendungen, es werden keine multi-modale Anwendungen<br />

unterstützt. Wir haben Redundanz vermieden, indem wir gemeinsame Interaktionselemente<br />

aus den Blattaufgaben in die Dialogfragmente der Oberaufgabe verlagert haben.<br />

Die Vermeidung von Redundanz erhöht aber die Komplexität des Ansatzes; dem<br />

Modellierer ist beim Erstellen des Interaktionsmodells nicht mehr ohne Weiteres ersichtlich,<br />

wie eine generierte Seite aussehen könnte. Eine Änderung eines Dialogfragmentes<br />

kann Auswirkungen auf viele generierte Seiten haben. Wir versuchen dem entgegenzuwirken,<br />

indem wir das Laufzeitverhalten der Hierarchiebeziehungen konkret definieren<br />

und dem Modellierer damit helfen, ein mentales Modell der Komposition aufzubauen.<br />

Auch die Unterstützung durch Modellierungswerkzeuge ist hilfreich, z. B. um während<br />

der Erstellung des Interaktionsmodells eine Ausführung zu simulieren.<br />

8.4 Modifizierungen am Aufgabenmodell<br />

8.4.1 Einleitung<br />

In diesem Abschnitt wollen wir betrachten, wie robust unser Interaktionsmodell auf<br />

Veränderungen durch Entwicklungsiterationen reagieren kann. Im Gegensatz zu klassischen<br />

Anwendungen, die auf dem Rechner des Benutzers installiert werden müssen,<br />

162


8.4 Modifizierungen am Aufgabenmodell<br />

werden Web-Anwendungen beim Anbieter einmalig installiert und können leicht für<br />

alle Benutzer gleichzeitig aktualisiert werden. Aufgrund dieser Eigenschaft ist es wünschenswert,<br />

wenn der Entwicklungsprozess die sogenannte Continuous Integration 43<br />

unterstützt, bei der Erweiterungen der Anwendung nicht erst nach einem langen Zeitraum,<br />

sondern oft und in kurzem Abstand veröffentlicht werden. Das kann soweit führen,<br />

dass von den Entwicklern täglich eine neue Version entsteht, die, entsprechend<br />

getestet und veröffentlicht, von dem Endbenutzer verwendet werden kann.<br />

Abbildung 8.1:<br />

Modifikation – Original Aufgabenmodell<br />

Unser Interaktionsmodell unterstützt diese Vorgehensweise,<br />

indem die Dialogfragmente und Domänenzugriffsobjekte<br />

möglichst wenig Abhängigkeiten untereinander<br />

besitzen, die Aufgaben und ihre Hierarchiebeziehungen<br />

können somit flexibel in einer Entwicklungsiteration<br />

verändert werden, um z. B. neue Aufgaben hinzuzufügen<br />

oder bestehende zu löschen. Wir betrachten anhand<br />

von einigen Veränderungsoperationen, wie sich diese auf<br />

das Gesamtsystem auswirken und welche Seiteneffekte<br />

zu beachten sind. Wir betrachten das nebenstehende Auf-<br />

gabenmodell (Abbildung 8.1) als Ursprungsmodell, welches in einer Entwicklungsiteration<br />

verändert werden soll. Es ist ein möglichst generisches Beispiel, die Bedeutung der<br />

Aufgaben ist nicht relevant und die Beziehungen sind willkürlich gewählt.<br />

8.4.2 Eine Aufgabe hinzufügen<br />

Abbildung 8.2:<br />

Modifikation – Eine Aufgabe<br />

hinzufügen<br />

Die bei einer Entwicklungsiteration am häufigsten vorkommende<br />

Veränderung am Aufgabenmodell ist das Hinzufügen<br />

einer Aufgabe. In der nebenstehenden Abbildung<br />

8.2 wurde das Ursprungsmodell um eine Aufgabe<br />

erweitert, welche im letzten Teilbaum eingefügt wurde.<br />

Die neue Aufgabe sollte auch mit entsprechenden Dialogfragmenten<br />

verknüpft sein, um bei der Aufgabenausführung<br />

visualisiert zu werden.<br />

Wenn eine Blattaufgabe im Ursprungsmodell um neue<br />

Unteraufgaben ergänzt werden soll, so müssen die Dialogfragmente der bestehenden<br />

Aufgabe eventuell angepasst werden, weil diese möglicherweise keine Einfügeposition<br />

für Dialogfragmente von Unteraufgaben vorsieht. In so einem Fall würde das Laufzeitsystem<br />

die Dialogfragmente der Unteraufgaben hinten an das Dialogfragment der<br />

Oberaufgabe anhängen (siehe Algorithmus auf Seite 118), was eventuell vom Modellierer<br />

nicht erwünscht ist. Im Beispiel links ist dies aber kein Problem, denn die Aufgabe<br />

wird in eine bestehende Hierarchie eingefügt, die Oberaufgabe musste also bereits die<br />

Unteraufgaben integrieren können.<br />

43 Teil der agilen Softwareentwicklung, für weitere Informationen zur kontinuierlichen Integration siehe [Duvall<br />

u. a., 2007].<br />

163


8 Bewertung der Ergebnisse<br />

8.4.3 Eine Aufgabe entfernen<br />

Bei einer Entwicklungsiteration kann die Notwendigkeit entstehen, eine Aufgabe aus<br />

dem Aufgabenmodell zu entfernen, z. B. um selten verwendete Aufgaben in einer Selektion<br />

gänzlich zu entfernen oder um die Bedienbarkeit zu verbessern, indem optionale<br />

Aufgaben in einer Sequenz entfernt werden. Beim Entfernen einer Aufgabe ist darauf<br />

zu achten, dass sie nicht Informationen an eine Oberaufgabe weiterleitet, die ohne<br />

die Informationen eventuell nicht mehr ausführbar ist. Eine vorhandene Abhängigkeit<br />

des Domänenzugriffsobjektes auf ein Domänenzugriffsobjekt der Oberaufgaben<br />

ist ein Hinweis auf eine Datenübergabe, Aufgaben ohne diese Abhängigkeit können<br />

gefahrlos gelöscht werden. Z. B. füllt unsere Aufgabe Kontaktinformation angeben die<br />

Kontakte in das Domänenzugriffsobjekt der Aufgabe Kleinanzeigen erstellen. Würden<br />

wir Kontaktinformation angeben entfernen, könnten keine Kleinanzeigen mehr erstellt<br />

werden, weil das Domänenmodell mindestens eine Kontaktinformation vorschreibt.<br />

Abbildung 8.3:<br />

Modifikation – Eine Aufgabe<br />

entfernen<br />

8.4.4 Reihenfolge der Unteraufgaben verändern<br />

Abbildung 8.4:<br />

Modifikation – Unteraufgaben<br />

vertauschen<br />

Wie in der nebenstehenden Abbildung 8.3 ersichtlich,<br />

führt das Entfernen einer Nicht-Blattaufgabe zu einer<br />

Entfernung aller Unteraufgaben, weil diese ohne die<br />

Oberaufgabe nicht mehr erreichbar wären. Der oben genannte<br />

Hinweis bezüglich der Abhängigkeiten zu noch<br />

existierenden Oberaufgaben muss jetzt auch für alle Aufgaben<br />

des entfernten Aufgabenbaums überprüft werden.<br />

Die Reihenfolge der Unteraufgaben im Aufgabenmodell<br />

ist entscheidend für die Erstellung der Benutzeroberfläche<br />

zur Laufzeit. So hat die Reihenfolge bei der Sequenz<br />

eine zeitliche Bedeutung, die Aufgaben werden der Reihenfolge<br />

im Aufgabenmodell nach abgearbeitet. Bei der<br />

parallelen Hierarchiebeziehung hat sie eine räumliche<br />

Bedeutung, die Aufgaben werden der Reihenfolge im<br />

Aufgabenmodell nach in der Benutzerschnittstelle dargestellt.<br />

Es kann deshalb sinnvoll sein, die Reihenfolge der Un-<br />

teraufgaben zu ändern. In der nebenstehenden Abbildung 8.4 wurden die zweite und<br />

die dritte Unteraufgabe der Wurzelaufgabe vertauscht, dadurch ändert sich die Abarbeitung<br />

der Sequenz. Das Verändern der Reihenfolge ist eine unkritische Operation,<br />

weil die Unteraufgaben immer unabhängig voneinander sind.<br />

164


8.4.5 Eine Aufgabe verschieben<br />

8.4 Modifizierungen am Aufgabenmodell<br />

Im Verlauf einer Entwicklungsiteration kann die Anforderung entstehen, eine Aufgabe<br />

an eine neue Position zu verschieben. Dies ist als Verallgemeinerung der oben erwähnten<br />

Vertauschoperation zu sehen, weil die Aufgabe nicht nur innerhalb der Menge der<br />

Unteraufgaben verschoben wird, sondern an eine beliebige Stelle im Aufgabenmodell.<br />

Abbildung 8.5:<br />

Modifikation – Eine Aufgabe<br />

verschieben<br />

Die Verschiebung einer Aufgabe im Aufgabenmodell<br />

setzt sich zusammen aus dem Entfernen der Aufgabe an<br />

der Ursprungsposition und dem Einfügen an der Zielposition.<br />

Die entsprechenden Hinweise der Entfernungs- und<br />

Einfügeoperationen sind zu beachten. Wie in der nebenstehenden<br />

Abbildung 8.5 deutlich wird, werden auch alle<br />

Unteraufgaben der Aufgabe verschoben.<br />

Weitere Varianten dieser Veränderungsoperation sind<br />

das Kopieren einer Aufgabe an eine neue Position (ohne<br />

die Aufgabe an der Ursprungsposition zu entfernen) und<br />

das Verknüpfen einer Aufgabe, bei der an der neuen Position<br />

ein Verweis auf die Ursprungsaufgabe erstellt wird<br />

(Bestandteil des Aufgabenmodells, siehe Abschnitt 5.8).<br />

Im Gegensatz zum Kopieren existiert bei der Verknüpfung nur eine Version der Aufgabendefinition,<br />

die an beiden Positionen verwendet wird; Änderungen an der Aufgabendefinition<br />

wirken sich überall aus. Beim Kopieren wird eine neue, unabhängige<br />

Kopie der Aufgabendefinition erstellt. Eine einmal getroffene Wahl der Variante ist<br />

endgültig, denn aus einer kopierten Aufgabe lässt sich z. B. nachträglich keine Verknüpfung<br />

mehr erstellen, weil die Ursprungsaufgabe nicht mehr bekannt ist.<br />

8.4.6 Zusammenfassung<br />

Änderungen am Interaktionsmodell sind iterativ möglich. Wie wir anhand der Operationen<br />

hinzufügen, entfernen, vertauschen und verschieben gezeigt haben, sind nur<br />

wenige zusätzliche Arbeiten durchzuführen. Ein grafischer Modelleditor sollte mindestens<br />

diese Operationen anbieten, zusätzlich könnten die angeführten Bedingungen automatisch<br />

überprüft und in Form von Warnungen ausgegeben werden.<br />

Ein Problem haben wir bei der Betrachtung der Entwicklungsiteration bis jetzt nicht<br />

erörtert: persistierte Dialoge. Wenn zwischen dem Persistieren und dem Fortsetzen eines<br />

Dialogs das Interaktionsmodell verändert wird, dann kann das Laufzeitsystem den<br />

alten Dialogzustand nicht wieder herstellen, weil das aktuelle Interaktionsmodell nicht<br />

mehr dem Interaktionsmodell entspricht, dessen Zustand persistiert wurde. Denkbare<br />

Lösungen sind z. B. das Löschen aller persistenten Dialoge, die auf veralteten Interaktionsmodellen<br />

basieren oder das Speichern des Interaktionsmodells zusammen mit dem<br />

Zustand.<br />

165


8 Bewertung der Ergebnisse<br />

166


Kapitel 9<br />

Ausblick<br />

Inhalt<br />

9.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167<br />

9.2 Werkzeugunterstützung . . . . . . . . . . . . . . . . . . . . . . . . . . . 167<br />

9.3 Aufgabenspezifische Dialogelemente . . . . . . . . . . . . . . . . . . . 168<br />

9.4 Transformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168<br />

9.5 Laufzeitumgebung für andere Bereiche . . . . . . . . . . . . . . . . . . 169<br />

9.6 Usability Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169<br />

9.7 Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169<br />

9.8 Schlusswort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170<br />

9.1 Einleitung<br />

Der vorgestellte Ansatz ist in sich abgeschlossen und bietet die Möglichkeit, vollständige<br />

Web-Anwendungen modellbasiert zu entwickeln. Trotzdem gibt es in verschiedenen<br />

Bereichen sinnvolle Weiterentwicklungen, die wir in diesem Kapitel vorstellen wollen.<br />

Die Abschnitte in diesem Kapitel sind nach Realisierbarkeit geordnet, vom konsequenten<br />

nächsten Schritt bis zur abstrakten Vision.<br />

9.2 Werkzeugunterstützung<br />

In der Arbeit haben wir am Beispiel einer textuellen und grafischen Notation das Interaktionsmodell<br />

für Web-Anwendungen vorgestellt. Für den Modellierer wäre ein entsprechendes<br />

Werkzeug wünschenswert, um diese Diagramme zu entwickeln. Die zu<br />

lösende Herausforderung ist hierbei einerseits die Abbildung des vorgestellten Entwurfsprozesses,<br />

anderseits die Integration mit anderen Modellierungswerkzeugen, z. B.<br />

der UML zur Domänenmodellierung.<br />

Erste Schritte in diese Richtung wurden von Suer [2006] durchgeführt. In der Arbeit<br />

wurde ein Dialogeditor entwickelt, der mehrere Sichten auf das zugrundeliegende Modell<br />

besitzt, unter anderem auch eine Sicht auf die Aufgabenstruktur. Dem Werkzeug<br />

fehlt allerdings die Integration des Präsentationsmodells.<br />

Auch die Integration einer Simulationskomponente wäre eine sinnvolle Ergänzung<br />

des Modellierungswerkzeugs. Der Simulator instanziiert die Aufgabenautomaten des<br />

167


9 Ausblick<br />

erstellten Interaktionsmodells und der Modellierer kann Ereignisse auf diesen auslösen.<br />

Anhand der Reaktion des Simulators kann der Modellierer die Verzweigungen des<br />

Dialogs überprüfen.<br />

9.3 Aufgabenspezifische Dialogelemente<br />

Im Gegensatz zu den klassischen Ansätzen ist bei unserem die Aufgabenstruktur zur<br />

Laufzeit verfügbar. Dies erlaubt uns, spezielle Interaktionselemente zu definieren, die<br />

auf die Struktur und des Zustands der Aufgabenhierarchie zugreifen. Diese Interaktionselemente<br />

könnten generisch vordefiniert werden und vom Modellierer in den Dialogfragmenten<br />

eingesetzt werden.<br />

Für die Erstellung von Benutzerschnittstellen existieren Sammlungen von Entwurfsmustern,<br />

die häufig verwendete Interaktionsmuster zusammenfassen ([van Welie, 2008]<br />

[Sinnig u. a., 2005]). Einige dieser Muster können mittels Zugriff auf die Aufgabenhierarchie<br />

als generisches Interaktionselement definiert werden, zum Beispiel:<br />

Breadcrumbs: Stellt den Weg des Benutzers zur aktuellen Seite als Liste der besuchten<br />

Seiten dar. Eine generische Umsetzung kann von der aktuellen Aufgabe in<br />

der Aufgabenhierarchie die Namen der Aufgaben bis zur Wurzelaufgabe ausgeben,<br />

z. B., wenn der Benutzer in unserem Beispiel an der Aufgabe Stadt angeben<br />

angelangt ist, könnte automatisch der Weg ausgegeben werden: Kleinanzeige erstellen<br />

- Kontaktinformation angeben - Adresse angeben - Stadt angeben.<br />

Main Navigation: Stellt dem Benutzer die Hauptnavigation in Form eines Menüs<br />

dar, welches auf jeder Seite immer an der gleichen Stelle erscheint. Wir könnten<br />

ein Interaktionselement einführen, welches die Unteraufgaben als Menü darstellt.<br />

Wenn dieses Menü im Dialogfragment der Wurzelaufgabe verwendet wird, wird<br />

das Hauptmenü auf jeder Seite angezeigt.<br />

Wizard: Zeigt den aktuellen Schritt innerhalb einer Serie von nacheinander abzuarbeitenden<br />

Schritten. Wir könnten die Schritte als sequenzielle Unteraufgaben<br />

modellieren und ein Interaktionselement erstellen, welches die Namen der Unteraufgaben<br />

ausgibt und die aktuell bearbeitete Unteraufgabe hervorhebt.<br />

9.4 Transformationen<br />

Im Bereich der HCI existieren Ansätze, für die bereits fortgeschrittene Werkzeuge entwickelt<br />

wurden. Auch wenn diese Ansätze sich häufig nur auf die Aufgabenmodellierung<br />

konzentrieren, können wir doch von den Werkzeugen profitieren. Interessant ist<br />

deshalb eine Konvertierung eines fremden Aufgabenmodells in unser Interaktionsmodell.<br />

Basierend auf dieser Ursprungsversion kann ein Modellierer dann die dialog- und<br />

präsentationsspezifischen Informationen hinzufügen. Auch ein Export des Aufgabenmodells<br />

aus dem Interaktionsmodell in ein fremdes Aufgabenmodell wäre sinnvoll.<br />

168


9.5 Laufzeitumgebung für andere Bereiche<br />

Erste Ergebnisse für einen Import und Export liefern die Arbeiten von Albrecht-Zölch<br />

[2006] und Czubak [2008]. Beide beschäftigen sich mit der Transformation unseres Interaktionsmodells<br />

in ein CTT-Aufgabenmodell. Besondere Herausforderung ist die Umsetzung<br />

der temporalen Relationen, die bei uns in der Oberaufgabe für die Unteraufgaben<br />

und bei den CTT-Aufgabenmodellen zwischen zwei Unteraufgaben definiert sind.<br />

9.5 Laufzeitumgebung für andere Bereiche<br />

Unser Laufzeitsystem wurde für die <strong>Generierung</strong> von Webseiten ausgelegt. Das Interaktionsmodell<br />

beschreibt allerdings eine generische zwei-dimensionale Benutzeroberfläche<br />

(konkrete Präsentation). Mit einer Anpassung des Laufzeitsystems könnten wir<br />

auch Desktop-Anwendungen generieren, und uns damit vom Einsatzbereich der Web-<br />

Anwendungen entfernen.<br />

Weiteres Potenzial steckt in der <strong>Generierung</strong> aktiver Webseiten, bei der ein Teil der<br />

Präsentationslogik auf den Client ausgelagert wird (Web 2.0). Weil sich zwischen zwei<br />

Dialogschritten nur die Bereiche in der Benutzeroberfläche ändern, deren zugehörige<br />

Aufgabenautomaten den Zustand geändert haben, müssen auch nur diese Dialogfragmente<br />

übertragen werden. Die Komposition der Dialogfragmente geschieht auf dem<br />

Client und sorgt für einen schnelleren Seitenaufbau und geringerer Auslastung des Servers.<br />

9.6 Usability Analyse<br />

Die Aufzeichnung der Aufgaben-Ereignisse bietet die Möglichkeit, die Dialogschritte<br />

eines Benutzers auf der Web-Anwendung auszuwerten. Die Aufzeichnung kann beispielweise<br />

mit einem Prototypen und einzelnen Testpersonen in der Modellierungsphase<br />

oder mit einer großen Benutzeranzahl im Echtbetrieb erfolgen. Die aufgezeichneten<br />

Ereignisse können dann nach Usability-Gesichtspunkten analysiert werden, z. B. um herauszufinden,<br />

ob Benutzer häufig in eine Sackgasse navigieren, oder ob häufig verwendete<br />

Aufgaben zu tief in der Aufgabenhierarchie verborgen sind. In [Propp u. a., 2008]<br />

wird dieser Themenkomplex für allgemeine Aufgabenmodelle behandelt, interessant<br />

wäre eine Übertragung auf unser Interaktionsmodell.<br />

9.7 Integration<br />

Die Anforderungen an eine Web-Anwendung – deren Ermittlung am Anfang der Modellierung<br />

steht – werden häufig in unstrukturierten Dokumenten beschrieben. Die Anforderungen<br />

können aber auch aus einer übergeordneten Instanz stammen, in die sich<br />

die Web-Anwendung integrieren muss. Ein Beispiel hierfür sind die strukturierte Definition<br />

von Geschäftsprozessen, in dem die Web-Anwendung einen Teil des Prozesses<br />

ausfüllt. In [Sousa u. a., 2008] wird beschrieben, wie Aufgabenmodelle im Allgemeinen<br />

in Geschäftsprozesse integriert werden können; interessant wäre die Integration eines<br />

oder mehrerer Interaktionsmodelle in einen globalen Geschäftsprozess.<br />

169


9 Ausblick<br />

9.8 Schlusswort<br />

An dieser Stelle enden der Ausblick und die Arbeit. In den folgenden Anhängen werden<br />

die verfügbaren Interaktionselemente und das Beispiel in tabellarischer Form zusammengefasst.<br />

170


Teil III<br />

Anhänge<br />

171


Anhang A<br />

Übersicht aller Interaktionselemente<br />

Die folgende Tabelle beschreibt alle verfügbaren Interaktionselemente der Java Server-<br />

Faces Plattform [McClanahan u. a., 2004], die in unseren Dialogfragmenten als Komponentenhierarchie<br />

die konkrete Benutzerschnittstelle bilden. Die Tabelle beschreibt die<br />

abstrakten und konkreten Komponenten (gemäß den Abstraktionsstufen aus Abschnitt<br />

3.6.2) gemeinsam. Die erste Spalte beschreibt abstrakte Interaktionselemente, die unabhängig<br />

vom Kontext der Benutzerschnittstelle sind. Aus diesen Elementen lassen sich<br />

z. B. sowohl Sprachsteuerungssysteme als auch Web-Schnittstellen erzeugen. Konkrete<br />

Interaktionselemente, die auf die Verwendung von Web-Anwendungen zugeschnitten<br />

sind, werden in der zweiten Spalte beschrieben. Diese sind eine Verfeinerung der abstrakten<br />

Interaktionselemente und tragen den abstrakten Namensteil als Präfix, also<br />

z. B. die Secret Verfeinerung des abstrakten Elements Input ergibt das konkrete Interaktionselement<br />

InputSecret.<br />

Die Interaktionselemente können über verschiedene Parameter angepasst werden.<br />

Da die Definition der Parameter an dieser Stelle zu weit führen würde, sei auf McClanahan<br />

u. a. [2004] verwiesen.<br />

Abstrakt Konkret Beschreibung<br />

Tabelle A.1: Interaktionselemente<br />

Input Ein abstraktes Interaktionselement zur Eingabe von Daten.<br />

Text Ein einzeiliges Eingabefeld zur Eingabe einer Zeichenkette.<br />

Finale HTML Darstellung: <br />

Secret Ein einzeiliges Eingabefeld zur Eingabe einer verdeckten<br />

Zeichenkette, z. B. zur Eingabe von Passwörtern. Finale<br />

HTML Darstellung: <br />

TextArea Ein mehrzeiliges Texteingabefeld. Finale HTML Darstellung:<br />

<br />

Date Ein Eingabefeld zur Eingabe eines Datums.<br />

Output Ein abstraktes Interaktionselement zur Ausgabe von Daten.<br />

Text Ausgabe eines Textes.<br />

(Tabelle wird auf der nächsten Seite fortgesetzt)<br />

173


A Übersicht aller Interaktionselemente<br />

(fortgesetzt von der vorigen Seite)<br />

Abstrakt Konkret Beschreibung<br />

Link Ausgabe eines Hypertext-Links. Dieses ist nur für externe<br />

Links geeignet, für interne Links werden Command-Interaktionselemente<br />

verwendet. Finale HTML Darstellung: <br />

Label Der Text wird als Beschriftung für ein anderes Interaktionselement<br />

verwendet. Finale HTML Darstellung: <br />

Graphic Ein abstraktes Interaktionselement zur Ausgabe einer Abbildung.<br />

Image Die Abbildung wird als grafisches Bild angezeigt. Finale<br />

HTML Darstellung: <br />

Command Ein abstraktes Interaktionselement, welches ein neues Ereignis<br />

an die Web-Anwendung auslösen kann und zur Navigation<br />

eingesetzt wird.<br />

Button Das ereignisauslösende Element wird als Schaltfläche dargestellt.<br />

Finale HTML Darstellung: <br />

Link Das ereignisauslösende Element wird als Hypertext-Link<br />

dargestellt. Finale HTML Darstellung: <br />

Data Ein abstraktes Interaktionselement, um strukturierte Daten,<br />

z. B. aus einer Liste, auszugeben.<br />

Table Die strukturierten Daten werden als Tabelle ausgegeben. Je<br />

Eintrag in der Liste wird eine Tabellenzeile erzeugt. Finale<br />

HTML Darstellung: <br />

Panel Ein abstraktes Interaktionselement, um Unterelemente zu<br />

gruppieren.<br />

Grid Die Unterelemente werden in einem Gitter mit fester Spaltenanzahl<br />

ausgegeben. Finale HTML Darstellung: <br />

Group Die Unterelemente werden horizontal angeordnet ausgegeben.<br />

SelectOne Ein abstraktes Interaktionselement, um ein Element aus einer<br />

Liste von Wahlmöglichkeiten zu selektieren.<br />

Listbox Die Liste wird als Dropdown-Menü dargestellt. Finale HTML<br />

Darstellung: <br />

Menu Die Liste wird als Sammlung von Links dargestellt.<br />

Radio Die Liste wird als Sammlung von Auswahlfeldern mit gegenseitigem<br />

Ausschluss angezeigt. Finale HTML Darstellung:<br />

<br />

SelectMany Ein abstraktes Interaktionselement, um mehrere Elemente<br />

aus einer Liste von Wahlmöglichkeiten zu selektieren.<br />

174<br />

(Tabelle wird auf der nächsten Seite fortgesetzt)


(fortgesetzt von der vorigen Seite)<br />

Abstrakt Konkret Beschreibung<br />

Listbox Die Liste wird in einer mehrzeiligen Auswahl angezeigt,<br />

der Benutzer kann mehrere Elemente daraus markieren<br />

und auswählen. Finale HTML Darstellung: <br />

Checkbox Die Liste wird als Sammlung von Ankreuzfeldern dargestellt.<br />

Finale HTML Darstellung: <br />

175


A Übersicht aller Interaktionselemente<br />

176


Anhang B<br />

Beispiel- und Schemadefinition<br />

B.1 Vollständiges Beispiel in Diagramm-Notation<br />

In der Arbeit haben wir ein Beispiel kontinuierlich aufgebaut. An dieser Stelle wollen<br />

wir das Beispiel vollständig darstellen und die restliche Aufgabenhierarchie erklären.<br />

Abbildung B.1 auf Seite 178 zeigt die grafische Notation, Abbildung B.2 zeigt das gleiche<br />

Diagramm für einen schnellen Überblick auf die Aufgabentypen reduziert.<br />

Die Wurzelaufgabe Kleinanzeigen verwalten ist der Einstiegspunkt in die Anwendung<br />

und zeigt dem Benutzer eine Liste aller verfügbaren Kleinanzeigen an. Mit der<br />

Aufgabe Kleinanzeige erstellen kann der Benutzer eine neue Kleinanzeige erstellen,<br />

diese Aufgabe und ihre Unteraufgaben haben wir in der Arbeit bereits beschrieben.<br />

Die verbleibenden Unteraufgaben der Wurzelaufgabe decken die restliche Funktionalität<br />

der Web-Anwendung ab: Kleinanzeige suchen beschreibt einen Suchdialog für den<br />

Benutzer, der über eine Reihe von Selektionen dem Benutzer die Möglichkeit gibt, die<br />

Liste aller Kleinanzeigen auf eine Treffermenge zu reduzieren. Details anzeigen erlaubt<br />

dem Benutzer, eine Kleinanzeige zu selektieren und die entsprechenden Details anzuzeigen.<br />

Der Benutzer kann mit der Aufgabe Tags verändern die Schlüsselworte von<br />

beliebigen Kleinanzeigen verändern, oder mit der Aufgabe zu Favoriten hinzufügen<br />

die Kleinanzeige benutzerspezifisch markieren. Markierte Kleinanzeigen werden in der<br />

Liste aller Kleinanzeigen farblich hervorgehoben. Schließlich kann der Benutzer mit der<br />

Aufgabe Hilfe die Bedienungsanleitung der Web-Anwendung aufrufen.<br />

177


B Beispiel- und Schemadefinition<br />

178<br />

Nach Benutzer<br />

suchen<br />

Volltextsuche Über Auswahl<br />

suchen<br />

Nach Zustand<br />

suchen<br />

Nach Favoriten<br />

suchen<br />

Kleinanzeige<br />

suchen<br />

Kardinalität = 0…∞<br />

Über Kontakt<br />

suchen<br />

Nach Tags<br />

suchen<br />

Über Bereich<br />

suchen<br />

Nach Zeitbereich<br />

suchen<br />

Abbildung B.1: Vollständiges Beispiel – detailliert<br />

Suchfilter<br />

entfernen<br />

In Preisbereich<br />

suchen<br />

Titel<br />

angeben<br />

Informatione<br />

angeben<br />

Zu<br />

an


ationen<br />

n<br />

Zustand<br />

angeben<br />

Preis<br />

angeben<br />

Name<br />

angeben<br />

Vorname<br />

angeben<br />

Bild<br />

auswählen<br />

Kardinalität = 0…1<br />

Beschreibung<br />

angeben<br />

Kleinanzeigen<br />

verwalten<br />

Strasse<br />

angeben<br />

Nachname<br />

angeben<br />

Strategie = persistent<br />

Kleinanzeige<br />

erstellen<br />

Kardinalität = 0…∞<br />

Ordnung = beliebig<br />

ZugriffsRollen = »benutzer«<br />

Adresse<br />

angeben<br />

Tags<br />

zuweisen<br />

Strategie = flüchtig<br />

Stadt<br />

angeben<br />

Telefonnummer<br />

angeben<br />

Rufname<br />

angeben<br />

B.1 Vollständiges Beispiel in Diagramm-Notation<br />

Kontaktinformationen<br />

angeben<br />

Kardinalität = 1…5<br />

existierende<br />

Adresse kopieren<br />

ZugriffsRollen = »admin«<br />

Rufnummer<br />

angeben<br />

Details<br />

anzeigen<br />

Kardinalität = 0…∞<br />

Tags<br />

verändern<br />

Details<br />

anzeigen<br />

Kardinalität = 0…∞<br />

zu Favoriten<br />

hinzufügen<br />

ZugriffsRollen = »benutzer«<br />

179


Abbildung B.2: Vollständiges Beispiel – kompakt<br />

B Beispiel- und Schemadefinition<br />

180


B.2 Vollständiges Beispiel in XML-Notation<br />

B.2 Vollständiges Beispiel in XML-Notation<br />

Das grafisch notierte Beispiel aus dem letzten Absatz lässt sich auch im XML-Format<br />

persistieren; der Modellaustausch zwischen Modellierungswerkzeug und Laufzeitsystem<br />

wird damit vereinfacht. Listing B.1 beschreibt unser Beispiel.<br />

Listing B.1: Komplettes Beispiel im XML-Format<br />

1 <br />

2 <br />

5 <br />

6 <br />

9 <br />

10 <br />

11<br />

12 <br />

14 <br />

15 <br />

16 <br />

17 <br />

18<br />

19 <br />

21 <br />

22 <br />

23 <br />

24 <br />

25 <br />

26 <br />

27 <br />

28<br />

29 <br />

31 <br />

32 <br />

33 <br />

34 <br />

35<br />

36 <br />

38 <br />

39 <br />

40 <br />

41<br />

42 <br />

44 <br />

45 <br />

46 <br />

181


B Beispiel- und Schemadefinition<br />

47 <br />

48<br />

49 <br />

51 <br />

52 <br />

53 <br />

54 <br />

55<br />

56 <br />

58 <br />

59 <br />

60 <br />

61 <br />

62<br />

63 <br />

65 <br />

66 <br />

67 <br />

68 <br />

69 <br />

70<br />

71 <br />

73 <br />

74 <br />

75 <br />

76<br />

77 <br />

79 <br />

80 <br />

81 <br />

82 <br />

83<br />

84 <br />

86 <br />

87 <br />

88 <br />

89 <br />

90 <br />

91<br />

92 <br />

94 <br />

95 <br />

96 <br />

97 <br />

98<br />

99 <br />

182


B.2 Vollständiges Beispiel in XML-Notation<br />

101 <br />

102 <br />

104 <br />

105 <br />

106 <br />

107<br />

108 <br />

110 <br />

111 <br />

112 <br />

113 <br />

114 <br />

115 <br />

117 <br />

118<br />

119 <br />

121 <br />

122 <br />

123 <br />

124<br />

125 <br />

127 <br />

128 <br />

129 <br />

130 <br />

131<br />

132 <br />

134 <br />

135 <br />

137 <br />

138 <br />

139<br />

140 <br />

142 <br />

143 <br />

144 <br />

145 <br />

146<br />

147 <br />

149 <br />

150 <br />

152 <br />

153 <br />

154 <br />

183


155<br />

B Beispiel- und Schemadefinition<br />

156 <br />

158 <br />

159 <br />

160 <br />

161 <br />

162 <br />

164 <br />

165<br />

166 <br />

168 <br />

169 <br />

171 <br />

173 <br />

174<br />

175 <br />

177 <br />

178 <br />

180 <br />

181<br />

182 <br />

184 <br />

185 <br />

187 <br />

188 <br />

189<br />

190 <br />

192 <br />

193 <br />

195 <br />

196 <br />

197 <br />

198<br />

199 <br />

201 <br />

202 <br />

204 <br />

205 <br />

206<br />

207 <br />

184


B.2 Vollständiges Beispiel in XML-Notation<br />

209 <br />

210 <br />

212 <br />

213 <br />

214 <br />

215<br />

216 <br />

218 <br />

219 <br />

221 <br />

223 <br />

224<br />

225 <br />

227 <br />

228 <br />

230 <br />

231<br />

232 <br />

234 <br />

235 <br />

237 <br />

238 <br />

239<br />

240 <br />

242 <br />

243 <br />

245 <br />

246 <br />

247 <br />

248<br />

249 <br />

251 <br />

252 <br />

254 <br />

255 <br />

256 <br />

257<br />

258 <br />

260 <br />

261 <br />

185


B Beispiel- und Schemadefinition<br />

263 <br />

264 <br />

265 <br />

266<br />

267 <br />

269 <br />

270 <br />

272 <br />

273 <br />

274<br />

275 <br />

277 <br />

278 <br />

279 <br />

280 <br />

281 <br />

282<br />

283 <br />

285 <br />

286 <br />

287 <br />

288 <br />

289<br />

290 <br />

292 <br />

293 <br />

294 <br />

295 <br />

296 <br />

297 <br />

298<br />

299 <br />

301 <br />

302 <br />

303 <br />

304 <br />

305<br />

306 <br />

309 <br />

310 <br />

312 <br />

313 <br />

314<br />

315 <br />

316 <br />

186


317<br />

318 <br />

B.3 Schemabeschreibung<br />

B.3 Schemabeschreibung<br />

Um die im XML-Format persistierten Modelle validieren zu können, ist ein Metamodell<br />

in Form einer XML-Schemabeschreibung (XSD) sinnvoll. Listing B.2 fasst unser Metamodell<br />

in dieser Notation zusammen.<br />

Listing B.2: XSD Schemabeschreibung des Aufgabenmetamodells<br />

1 <br />

2 <br />

7<br />

8 <br />

11 <br />

14<br />

15 <br />

18 <br />

19 <br />

20 <br />

21 <br />

22 <br />

26 <br />

30 <br />

31 <br />

35 <br />

39


B Beispiel- und Schemadefinition<br />

42 use="required" /><br />

43 <br />

44 <br />

45<br />

46 <br />

47 <br />

48 <br />

49 <br />

50 <br />

54 <br />

58 <br />

62 <br />

63 <br />

67 <br />

71 <br />

75 <br />

79 <br />

83 <br />

87 <br />

88 <br />

89<br />

90 <br />

91 <br />

92 <br />

93 <br />

94


96 minOccurs="0"<br />

97 maxOccurs="unbounded" /><br />

98 <br />

102 <br />

103 <br />

107 <br />

111 <br />

115 <br />

119 <br />

120 <br />

121<br />

122 <br />

123 <br />

124 <br />

125 <br />

126 <br />

130 <br />

131 <br />

135 <br />

136 <br />

137 <br />

138 <br />

139 <br />

140 <br />

144 <br />

148 <br />

149 <br />

B.3 Schemabeschreibung<br />

189


B Beispiel- und Schemadefinition<br />

150 <br />

151 <br />

152 <br />

153 <br />

157 <br />

161 <br />

165 <br />

169 <br />

170 <br />

171<br />

172 <br />

175 <br />

176 <br />

177 <br />

178 <br />

179 <br />

180 <br />

181 <br />

182 <br />

183 <br />

184 <br />

185 <br />

186 <br />

187 <br />

188 <br />

189 <br />

190 <br />

191 <br />

192 <br />

193 <br />

194 <br />

195 <br />

196 <br />

197 <br />

198 <br />

199 <br />

200 <br />

201 <br />

202 <br />

203 <br />

190


204 <br />

205 <br />

206 <br />

207 <br />

208 <br />

209 <br />

210 <br />

211 <br />

212 <br />

213 <br />

214 <br />

215 <br />

216 <br />

217 <br />

218 <br />

219 <br />

220 <br />

221 <br />

222 <br />

223 <br />

224 <br />

225 <br />

226 <br />

227 <br />

228 <br />

229 <br />

230 <br />

231 <br />

232 <br />

233 <br />

234 <br />

235 <br />

236 <br />

237 <br />

238 <br />

239 <br />

240 <br />

241 <br />

242 <br />

243 <br />

244 <br />

245 <br />

246 <br />

247 <br />

248 <br />

249 <br />

250 <br />

251 <br />

252 <br />

253 <br />

254 <br />

255 <br />

256 <br />

257 <br />

B.3 Schemabeschreibung<br />

191


B Beispiel- und Schemadefinition<br />

258 <br />

259 <br />

260 <br />

261 <br />

262 <br />

263 <br />

264 <br />

265 <br />

266 <br />

267 <br />

268<br />

269 <br />

192


Literaturverzeichnis<br />

[Albrecht-Zölch 2006] Albrecht-Zölch, Janet: Optimierung von Benutzerschnittstellen<br />

unter Verwendung eines Aufgabenmodells am Beispiel eines Selbstmanagementsystems,<br />

Fernuniversität Hagen, Diplomarbeit, 2006<br />

[Alexander u. a. 1977] Alexander, Christopher ; Ishikawa, Sara ; Silverstein, Murray: A<br />

Pattern Language: Towns, Buildings, Construction (Center for Environmental Structure<br />

Series). Oxford University Press, August 1977. – ISBN 0195019199<br />

[Allen 1983] Allen, James F.: Maintaining Knowledge about Temporal Intervals. In:<br />

Communications of the ACM 26 (1983), November, Nr. 11, S. 832–843<br />

[Alur u. a. 2001] Alur, Deepak ; Malks, Dan ; Crupi, John: Core J2EE Patterns: Best<br />

Practices and Design Strategies. Upper Saddle River, NJ, USA : Prentice Hall PTR, 2001.<br />

– ISBN 0130648841<br />

[Annett und Duncan 1967] Annett, J. ; Duncan, K.: Task analysis and training in design.<br />

In: Occupational Psychology (1967), Nr. 41, S. 211–221<br />

[Betermieux und Bomsdorf 2007] Betermieux, Stefan ; Bomsdorf, Birgit: Finalizing<br />

Dialog Models at Runtime. In: Baresi, Luciano (Hrsg.) ; Fraternali, Piero (Hrsg.) ; Houben,<br />

Geert-Jan (Hrsg.): Proceedings of the 7th International Conference on Web Engineering<br />

Bd. 4607, Springer, August 2007, S. 137–151. – ISSN 0302-9743<br />

[Betermieux und Bomsdorf 2008] Betermieux, Stefan ; Bomsdorf, Birgit: Task-Driven<br />

Composition of Web User Interfaces. In: Proceedings of CADUI 2008, Springer Verlag,<br />

2008<br />

[Betermieux u. a. 2005] Betermieux, Stefan ; Bomsdorf, Birgit ; Langer, Patrick: Towards<br />

a Generic Model for Specifying Different Views on the Dialog of Web Applications.<br />

In: Proceedings of HCI International, Lawrence Erlbaum Associates, 2005<br />

[Bomsdorf 2007] Bomsdorf, Birgit: The WebTaskModel Approach to Web Process Modelling.<br />

In: Proceedings of the 6th International Workshop on Task Models and Diagrams<br />

for User Interface Design, 2007, S. 240–253<br />

193


Literaturverzeichnis<br />

[Booch 2005] Booch, Grady: On Creating a Handbook of Software Architecture. 2005.<br />

– URL http://www.booch.com/architecture/index.jsp. – Keynote Speach,<br />

Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA) 2005<br />

[Brambilla u. a. 2006] Brambilla, Marco ; Ceri, Stefano ; Fraternali, Piero ; Manolescu,<br />

Ioana: Process Modeling in Web Applications. In: ACM Transactions on Software<br />

Engineering and Methodology, 2006<br />

[Brown u. a. 2001] Brown, Kyle ; Niswonger, Jaime ; Hester, Greg: Enterprise Java<br />

Development with IBM Websphere. Boston, MA, USA : Addison-Wesley Longman<br />

Publishing Co., Inc., 2001. – ISBN 0201616173<br />

[Cachero und Koch 2002] Cachero, Cristina ; Koch, Nora: Conceptual navigation analysis:<br />

a device and platform independent navigation specification. In: Proceedings of<br />

2nd International Workshop on Web-Oriented Software Technology, 2002<br />

[Card u. a. 1983] Card, Stuart K. ; Newell, Allen ; Moran, Thomas P.: The Psychology of<br />

Human-Computer Interaction. Mahwah, NJ, USA : Lawrence Erlbaum Associates, Inc.,<br />

1983. – ISBN 0898592437<br />

[Ceri u. a. 2001] Ceri, Stefano ; Fraternali, Piero ; Matera, Maristella ; Maurino, Andrea:<br />

Designing multi-role, collaborative Web sites with WebML: a conference management<br />

system case study. In: IWWOST 2001 Workshop, URL citeseer.ist.psu.<br />

edu/ceri01designing.html, 2001<br />

[Clerckx u. a. 2004] Clerckx, Tim ; Luyten, Kris ; Coninx, Karin: The mapping problem<br />

back and forth: customizing dynamic models while preserving consistency. In: TA-<br />

MODIA ’04: Proceedings of the 3rd annual conference on Task models and diagrams.<br />

New York, NY, USA : ACM Press, 2004, S. 33–42. – ISBN 1-59593-000-0<br />

[Comer 2006] Comer, Douglas E.: Internetworking With TCP/IP. Bd. 1. 5. Prentice Hall,<br />

2006. – ISBN 0-13-187671-6<br />

[Conallen 2000] Conallen, Jim: Building Web applications with UML. Boston, MA,<br />

USA : Addison-Wesley Longman Publishing Co., Inc., 2000. – ISBN 0-201-61577-0<br />

[Czubak 2008] Czubak, Janine: Modellgetriebene Webseitenentwicklung - Vergleich<br />

zweier Aufgabenmodelle und Entwicklung eines Werkzeugs zur Modellumwandlung,<br />

Fernuniversität Hagen, Diplomarbeit, 2008<br />

[Dashorst und Hillenius 2008] Dashorst, Martijn ; Hillenius, Eelco: Wicket in Action.<br />

Manning Publications, 2008<br />

[de Troyer und Leune 1998] de Troyer, Olga ; Leune, C. J.: WSDM: A user centered<br />

design method for web sites. In: Computer Networks and ISDN Systems, 1998, S. 85–94<br />

[Dittmar 2000] Dittmar, Anke: More precise Descriptions of Temporal Relations within<br />

Task Models. In: Palanque, Philippe (Hrsg.) ; Paternò, Fabio (Hrsg.): Interactive<br />

Systems: Design, Specification, and Verification, Springer-Verlag, 2000, S. 151–168<br />

194


Literaturverzeichnis<br />

[Dittmar 2002] Dittmar, Anke: Ein formales Metamodell für den aufgabenbasierten<br />

Entwurf interaktiver Systeme, Universität Rostock, Dissertation, April 2002<br />

[Dix u. a. 1993] Dix, Alan ; Finlay, Janet ; Abowd, Gregory ; Beale, Russell: Human-<br />

Computer Interaction. Prentice Hall, 1993<br />

[Duvall u. a. 2007] Duvall, Paul ; Matyas, Stephen M. ; Glover, Andrew: Continuous<br />

Integration: Improving Software Quality and Reducing Risk (The Addison-Wesley Signature<br />

Series). Addison-Wesley Professional, 2007. – ISBN 0321336380<br />

[Fowler 2003] Fowler, Martin: Patterns of Enterprise Application Architecture. 11.<br />

Addison-Wesley, 2003<br />

[Gamma u. a. 1995] Gamma, Erich ; Helm, Richard ; Johnson, Ralph ; Vlissides, John:<br />

Design patterns: elements of reusable object-oriented software. Boston, MA, USA :<br />

Addison-Wesley Longman Publishing Co., Inc., 1995. – ISBN 0201633612<br />

[Güell u. a. 2000] Güell, Natacha ; Schwabe, Daniel ; Vilain, Patricia: Modeling Interactions<br />

and Navigation in Web Applications. In: In Proc. of the WWW and Conceptual<br />

Modeling Workshop, Springer, 2000, S. 115–127<br />

[Heineman und Councill 2001] Heineman, George T. (Hrsg.) ; Councill, William T.<br />

(Hrsg.): Component-based software engineering: putting the pieces together. Boston,<br />

MA, USA : Addison-Wesley Longman Publishing Co., Inc., 2001. – ISBN<br />

0201704854<br />

[Helbig 1996] Helbig, Hermann: Künstliche Intelligenz und automatische Wissensverarbeitung.<br />

Berlin : Verlag Technik, 1996<br />

[Hill und Mallais 2004] Hill, Charles ; Mallais, Sacha: Practical WebObjects. Apress,<br />

August 2004. – ISBN 1590592964<br />

[Hix und Hartson 1993] Hix, Deborah ; Hartson, Rex H.: Developing User Interfaces:<br />

Ensuring Usability Through Product & Process (Wiley Professional Computing). Wiley,<br />

June 1993. – ISBN 0471578134<br />

[Härder und Reuter 1983] Härder, Theo ; Reuter, Andreas: Principles of Transaction-<br />

Oriented Database Recovery. In: Computing Surveys 15 (1983), Dezember, Nr. 4,<br />

S. 287–317<br />

[IEEE 2000] IEEE: ANSI/IEEE Standard 1471-2000: IEEE Recommended Practice for Architectural<br />

Description of Software-Intensive Systems. IEEE Computer Society, 2000. –<br />

ISBN 0-7381-2518-0<br />

[INCITS 2004] INCITS: ANSI/INCITS Standard 359-2004: Role Based Access Control. American<br />

National Standards Institute, 2004<br />

195


Literaturverzeichnis<br />

[ISO 8807 1989] ISO: ISO Standard 8807 – LOTOS – A formal description technique based<br />

on the temporal ordering of observational behaviour. International Organization<br />

for Standardization, 1989<br />

[Johnson u. a. 1988] Johnson, Peter ; Johnson, Hilary ; Waddington, Ray ; Shouls, Alan:<br />

Task-related knowledge structures: analysis, modelling and application. In: Proceedings<br />

of the Fourth Conference of the British Computer Society on People and computers<br />

IV. New York, NY, USA : Cambridge University Press, 1988, S. 35–62. – ISBN<br />

0-521-36553-8<br />

[Jonassen u. a. 1999] Jonassen, David H. ; Tessmer, Martin ; Hannum, Wallace H.: Task<br />

Analysis Methods for Instructional Design. Lawrence Erlbaum Associates, 1999<br />

[Keller u. a. 1992] Keller, G. ; Nüttgens, M. ; Scheer, August-Wilhelm: Semantische<br />

Prozeßmodellierung auf der Grundlage “Ereignisgesteuerter Prozeßketten (EPK)” /<br />

Institut für Wirtschaftsinformatik Universität Saarbrücken. 1992 (Heft 89). – Arbeitsbericht<br />

[Kirchhof u. a. 2004] Kirchhof, Anja ; Gurzki, Thorsten ; Hinderer, Henning ; Vlachakis,<br />

Joannis: “Was ist ein Portal?” Definition und Einsatz von Unternehmensportalen /<br />

Fraunhofer Institut Arbeitswirtschaft und Organisation. Nobelstr. 12, 70569 Stuttgart,<br />

2004. – Forschungsbericht<br />

[Kraus und Koch 2003] Kraus, Andreas ; Koch, Nora: A Metamodel for UWE / University<br />

of Munich. 2003. – Forschungsbericht<br />

[Liberty und Hurwitz 2005] Liberty, Jesse ; Hurwitz, Dan: Programming ASP.NET. 3.<br />

O’Reilly Media, Oktober 2005. – ISBN 059600916X<br />

[Limbourg u. a. 2001] Limbourg, Quentin ; Pribeanu, Costin ; Vanderdonckt, Jean:<br />

Towards Uniformed Task Models in a Model-Based Approach. In: Proceedings of DSV-<br />

IS 2001, Springer Verlag, 2001<br />

[Luyten u. a. 2003] Luyten, Kris ; Clerckx, Tim ; Coninx, Karin ; Vanderdonckt, Jean:<br />

Derivation of a Dialog Model from a Task Model by Activity Chain Extraction. In:<br />

DSV-IS, 2003, S. 203–217<br />

[McClanahan u. a. 2004] McClanahan, Craig ; Burns, Ed ; Kitain, Roger: JavaServer<br />

Faces Specification, v1.1, rev. 01 / Sun Microsystems. 4150 Network Circle, Santa Clara,<br />

CA 95054 U.S.A., 2004. – Forschungsbericht. – URL http://www.jcp.org/en/jsr/<br />

detail?id=252<br />

[Mitchell 2001] Mitchell, Margaret: Use of Directed Instructions Acyclic Graph Analysis<br />

in Generating for Multiple Users. In: Proceedings of the Australian Symposium on<br />

Information Visualization, Dezember 2001<br />

[Mori u. a. 2002] Mori, Giulio ; Paternò, Fabio ; Santoro, Carmen: CTTE: Support for<br />

Developing and Analyzing Task Models for Interactive System Design. In: IEEE Transactions<br />

on Software Engineering 28 (2002), Nr. 8, S. 797–813. – ISSN 0098-5589<br />

196


Literaturverzeichnis<br />

[Mori u. a. 2003] Mori, Giulio ; Paternò, Fabio ; Santoro, Carmen: Tool Support for<br />

Designing Nomadic Applications. In: Proceedings of IUI 2003, Januar 2003<br />

[OMG 2005] OMG: Unified Modeling Language: Superstructure (final adopted spec,<br />

version 2.0) / Object Management Group. URL www.omg.org, 2005 (formal/2005-07-<br />

04). – Forschungsbericht<br />

[OMG 2006] OMG: Meta Object Facility (MOF) Core Specification / Object Management<br />

Group. URL www.omg.org, 2006 (formal/2006-01-01). – Forschungsbericht<br />

[OMG 2008] OMG: Business Process Modeling Notation (version 1.1) / Object Management<br />

Group. URL www.omg.org, 2008 (formal/2008-01-17). – Forschungsbericht<br />

[Paternò 1999] Paternò, Fabio: Model-Based Design and Evaluation of Interactive<br />

Applications. London, UK : Springer-Verlag, 1999. – ISBN 1852331550<br />

[Paternò 2003] Paternò, Fabio: ConcurTaskTrees: An Engineered Approach to Modelbased<br />

Design of Interactive Systems. In: Diaper, Dan (Hrsg.) ; Stanton, Neville (Hrsg.):<br />

The Handbook of Task Analysis for HCI. Lawrence Erlbaum Associates, 2003, Kap. 24.<br />

– ISBN 0805844325<br />

[Paternò u. a. 1997] Paternò, Fabio ; Mancini, Cristiano ; Meniconi, Silvia: Concur-<br />

TaskTrees: A Diagrammatic Notation for Specifying Task Models. In: INTERACT ’97:<br />

Proceedings of the IFIP TC13 Interantional Conference on Human-Computer Interaction.<br />

London, UK, UK : Chapman & Hall, Ltd., 1997, S. 362–369. – ISBN 0-412-80950-8<br />

[Paternò und Santoro 2002] Paternò, Fabio ; Santoro, Carmen: One Model, Many<br />

Interfaces. In: Kolski, Christophe (Hrsg.) ; Vanderdonckt, Jean (Hrsg.): Proceedings of<br />

the Fourth International Conference on Computer-Aided Design of User Interfaces,<br />

Kluwer, 2002, S. 143–154. – ISBN 1-4020-0643-8<br />

[Paternò u. a. 2008] Paternò, Fabio ; Santoro, Carmen ; Mantyjarvi, Jani ; Mori, Giulio ;<br />

Sansone, Sandro: Authoring pervasive multimodal user interfaces. In: Int. J. Web Eng.<br />

Technol. 4 (2008), Nr. 2, S. 235–261. – ISSN 1476-1289<br />

[Pfaff 1985] Pfaff, Günther E. (Hrsg.): User Interface Management Systems. Springer,<br />

1985<br />

[Posch u. a. 2004] Posch, Torsten ; Birken, Klaus ; Gerdom, Michael: Basiswissen Softwarearchitektur.<br />

Heidelberg : dpunkt-Verlag, 2004<br />

[Propp u. a. 2008] Propp, Stefan ; Buchholz, Gregor ; Forbrig, Peter: Integrating Usability<br />

Methods into Model-based Software Development. In: Proceedings of CADUI<br />

2008, Springer Verlag, 2008<br />

[Reenskaug 1979] Reenskaug, Trygve: THING-MODEL-VIEW-EDITOR: an Example from<br />

a Planning System / Xerox PARC Technical Note. Mai 1979. – Forschungsbericht<br />

197


Literaturverzeichnis<br />

[Scapin und Pierret-Goldbreich 1989] Scapin, D. ; Pierret-Goldbreich, C.: Towards a<br />

method for task description : MAD. In: Berlinguet, L. (Hrsg.) ; Berthelette, D. (Hrsg.):<br />

Proceedings of Work with Display Units (WWU ’89), North-Holland: Elsevier Science,<br />

1989, S. 27–34<br />

[Shepherd 1989] Shepherd, A.: Analysis and training in information technology tasks.<br />

In: Diaper, Dan (Hrsg.): Task Analysis for Human-Computer Interaction. Upper Saddle<br />

River, NJ, USA : Prentice Hall PTR, 1989, S. 15–55. – ISBN 0470216069<br />

[Ship 2004] Ship, Howard M. L.: Tapestry in Action. Manning Publications, 2004. –<br />

ISBN 1932394117<br />

[Shneiderman 1992] Shneiderman, Ben: Tree visualization with tree-maps: 2-d spacefilling<br />

approach. In: ACM Trans. Graph. 11 (1992), Nr. 1, S. 92–99. – ISSN 0730-0301<br />

[Sinnig u. a. 2005] Sinnig, Daniel ; Javahery, Homa ; Forbrig, Peter ; Seffah, Ahmed:<br />

Patterns and Components for Enhancing Reusability. In: Proceedings of HCI International<br />

2005, July 2005<br />

[Sousa u. a. 2008] Sousa, Kênia ; Mendonça, Hildeberto ; Vanderdonckt, Jean: User<br />

Interface Development Lifecycle for Business-Driven Enterprise Applications. In: Proceedings<br />

of CADUI 2008, Springer Verlag, 2008<br />

[Stahl u. a. 2007] Stahl, Thomas ; Völter, Markus ; Efftinge, Sven: Modellgetriebene<br />

Softwareentwicklung. Techniken, Engineering, Management. Dpunkt Verlag, 2007. –<br />

ISBN 3898644480<br />

[Suer 2006] Suer, Klaus: Konzeption und Realisierung eines Editors für alternative<br />

Dialognotationen, Fernuniversität Hagen, Diplomarbeit, 2006<br />

[van der Veer u. a. 1996] van der Veer, Gerrit C. ; Lenting, Bert F. ; Bergevoet, Bas A.:<br />

GTA: Groupware Task Analysis - Modeling Complexity. In: Acta Psychologica (1996),<br />

Nr. 91, S. 297–322<br />

[van Welie 2001] van Welie, Martijn: Task-based User Interface Design, Vrije Universiteit<br />

Amsterdam, Dissertation, 2001<br />

[van Welie 2008] van Welie, Martijn: A Pattern Library for Interaction Design. 2008.<br />

– URL http://www.welie.com/patterns. – [Online; aufgerufen am 26. August<br />

2008]<br />

[Vanderdonckt und Limbourg 2004] Vanderdonckt, Jean ; Limbourg, Quentin:<br />

UsiXML: A User Interface Description Language Supporting Multiple Levels of Independence.<br />

In: Matera, M. (Hrsg.) ; Comai, S. (Hrsg.): Engineering Advanced Web<br />

Applications. Rinton Press, 2004, S. 325–338<br />

[Vogel u. a. 2005] Vogel, O. ; Arnold, I. ; Chughtai, A. ; Ihler, E. ; Mehlig, U. ; Neumann,<br />

T. ; Voelter, M. ; ; Zdun., U.: Software Architektur - Grundlagen, Konzepte, Praxis.<br />

Elsevier/Spektrum Verlag, Oktober 2005<br />

198


Literaturverzeichnis<br />

[Winter 2005] Winter, Mario: Methodische objektorientierte Softwareentwicklung.<br />

1. dPunkt.verlag, 2005<br />

199

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!