Generierung aufgabenbasierter dialogorientierter ...
Generierung aufgabenbasierter dialogorientierter ...
Generierung aufgabenbasierter dialogorientierter ...
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