Software-Projekt ¨Uberblick I - Informatik - Universität Bremen
Software-Projekt ¨Uberblick I - Informatik - Universität Bremen
Software-Projekt ¨Uberblick I - Informatik - Universität Bremen
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Überblick I<br />
1 Vorbemerkungen<br />
2 <strong>Software</strong>technik<br />
3 Planung<br />
4 Anforderungsanalyse<br />
5 Objektorientierte Modellierung<br />
6 Reviews<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Prof. Dr. Rainer Koschke<br />
Fachbereich Mathematik und <strong>Informatik</strong><br />
Arbeitsgruppe <strong>Software</strong>technik<br />
<strong>Universität</strong> <strong>Bremen</strong><br />
Wintersemester 2008/09<br />
7 Entwurf von Benutzungsschnittstellen
Überblick II<br />
8 <strong>Software</strong>-Architektur<br />
9 Architekturstile und Entwurfsmuster<br />
10 <strong>Software</strong>-Test<br />
11 Implementierung<br />
12 Benutzerdokumentation<br />
13 Antworten auf gesammelte Fragen im Wiki<br />
14 Das SWP-Lied<br />
Vorbemerkungen<br />
Vorbemerkungen<br />
1 Vorbemerkungen<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
RainerMerkmale Koschke (Uni <strong>Bremen</strong>) der <strong>Software</strong>technik <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 4 / 634
Vorbemerkungen<br />
Anmerkungen zu diesem Skriptum<br />
Einige dieser Folien basieren inhaltlich auf Skripten von. . .<br />
Prof. Dr. Jochen Ludewig (2003), <strong>Universität</strong> Stuttgart<br />
Prof. Dr. Susanne Maaß (2001), <strong>Universität</strong> <strong>Bremen</strong><br />
Prof. Dr. Karl-Heinz Rödiger (2004), <strong>Universität</strong> <strong>Bremen</strong><br />
Dr. Andreas Winter (2003), <strong>Universität</strong> Koblenz<br />
Ich danke für deren freundliche Genehmigung.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 5 / 634<br />
Vorbemerkungen<br />
Ziele der Vorlesung<br />
Primäre Ziele:<br />
Rüstzeug für die erfolgreiche Durchführung Ihres <strong>Software</strong>-<strong>Projekt</strong>s<br />
vermitteln<br />
Modell für zukünftige ähnliche <strong>Projekt</strong>e bieten<br />
→ Praktikum und Vorlesung bilden eine Einheit<br />
Primäre Ziele sind nicht:<br />
Vollständige Darstellung aller Themengebiete der <strong>Software</strong>technik 1<br />
Vermittlung von spezifischen Kenntnissen für die Entwicklung des<br />
Anwendungssystems X<br />
1 Wird im Hauptstudium nachgereicht.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 6 / 634
Vorbemerkungen<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Szenario:<br />
Erstellung eines großen <strong>Software</strong>systems<br />
hier: mehrere Mitarbeiter über einen langen Zeitraum<br />
hier nicht: ein ” Freizeit“-Programmierer<br />
für einen Auftraggeber<br />
hier: Individualsoftware<br />
hier nicht: Standardsoftware<br />
im Rahmen eines <strong>Projekt</strong>s<br />
hier: einmalige Zielverfolgung<br />
hier (eher) nicht: Weiterentwicklung existierender <strong>Software</strong><br />
(aber: die <strong>Software</strong> wird von uns später weiterentwickelt; Wartbarkeit<br />
ist erklärtes Ziel)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 7 / 634<br />
Vorbemerkungen<br />
Angestrebte Resultate<br />
<strong>Software</strong>technik ist nicht nur Programmieren.<br />
<strong>Software</strong>technik ist auch Programmieren.<br />
<strong>Software</strong>-Entwicklung produziert Dokumente.<br />
Der Quellcode ist ein Dokument unter vielen.<br />
Sie sollen nicht nur ein richtiges System bauen.<br />
Sie sollen ein System auch richtig bauen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 8 / 634
Vorbemerkungen<br />
Aktivitäten bei der <strong>Software</strong>entwicklung<br />
<strong>Projekt</strong>−<br />
management<br />
Inbetrieb−<br />
nahme<br />
Test<br />
Analyse<br />
Entwurf<br />
Imple−<br />
men−<br />
tierung<br />
Konfigurations−<br />
management<br />
Qualitäts−<br />
management<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 9 / 634<br />
Vorbemerkungen<br />
Infrastruktur einrichten<br />
Initiale <strong>Projekt</strong>planung<br />
Ist-Analyse<br />
Soll-Analyse<br />
Usability-Prototyp<br />
Anforderungsspezifikation<br />
Review der Anforderungsspezifikation<br />
Handbuch<br />
schreiben<br />
Architekturentwurf<br />
Technisches<br />
Prototyping<br />
Architekturreview<br />
beeinflusst/startet<br />
prüft<br />
Testplan u. Unit-Test-Entw.<br />
Implementierung<br />
Übergabe<br />
Akzeptanztest<br />
(Präsentation)<br />
Testprotokoll<br />
Systemtests<br />
Code-Inspektion<br />
Unit-/Integrationstests<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 10 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Vorbemerkungen<br />
Ablauf<br />
Infrastruktur einrichten<br />
Initiale <strong>Projekt</strong>planung<br />
Ist-Analyse<br />
Soll-Analyse<br />
Usability-Prototyp<br />
beeinflusst/startet<br />
prüft<br />
Anforderungsspezifikation<br />
Review der Anforderungsspezifikation<br />
Handbuch<br />
schreiben<br />
Architekturentwurf<br />
Technisches<br />
Prototyping<br />
Architekturreview<br />
Testplan u. Unit-Test-Entw.<br />
Implementierung<br />
Aktivitäten in schwarzer Schrift sind konstruktiv; Aktivitäten in blauer Schrift dienen der analytischen<br />
Qualitätssicherung. Das Symbol kennzeichnet abzugebende Dokumente, die Produkt einer Aktivität sind.<br />
Vorbemerkungen<br />
Zeitplan<br />
24.11.2008 Initialer <strong>Projekt</strong>plan<br />
12.1.2009 Anforderungsspezifikation mit Angebot<br />
12.-30.1.2009 Review der Anforderungsspezifikation<br />
vorauss. 9-13.2.2009 Vorlesung Datenbankgrundlagen<br />
vorauss. 9-20.3.2009 Prüfung zur Vorlesung<br />
16.3.2009 Architekturentwurf<br />
6.-13.4.2009 Walkthrough des Architekturentwurfs<br />
20.4.2009 Testplan mit Unit-Tests<br />
Mai/Juni 2009 Code-Inspektion<br />
10.7.2009 Endabgabe 2<br />
15-17.7.2009 Abschlusspräsentationen<br />
Vorläufige Teilergebnisse müssen Sie evtl. in den Tutorien vorher abgeben.<br />
2 Implementierung (Source+lauffähig), Dokumentation, Whiteboxtests, Testprotokoll,<br />
Dokumentation der Abweichungen von Spezifikation und Architektur<br />
Übergabe<br />
Akzeptanztest<br />
(Präsentation)<br />
Testprotokoll<br />
Systemtests<br />
Code-Inspektion<br />
Unit-/Integrationstests<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 11 / 634
Vorbemerkungen<br />
Anmeldung<br />
Tutorienwahl ab sofort bis zum bis 30.10., 23.59 Uhr 3<br />
(erstes Tutorium am 3.11.)<br />
Web-Seite zur Anmeldung:<br />
http://www.informatik.uni-bremen.de/st/mems/courses.php?lng=en<br />
gruppenweise anmelden<br />
Gruppengröße 6 Personen<br />
Gruppennamen sorgfältig auswählen<br />
ausländische Studierende integrieren<br />
3 Ortszeit <strong>Bremen</strong><br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 12 / 634<br />
Vorbemerkungen<br />
Scheinbedingungen<br />
http://www.informatik.uni-bremen.de/st/Lehre/swp/<br />
scheinbedingungen.html<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 13 / 634
Vorbemerkungen<br />
Abgabe des <strong>Projekt</strong>plans<br />
abzugebender initialer <strong>Projekt</strong>plan umfasst Aufgaben, Teilnehmer,<br />
Rollen, Verantwortlichkeiten, Pflichten, Risiken und deren Behandlung<br />
danach: inkrementelle Fortführung<br />
kann abgegeben werden für Feedback vom Tutor, muss aber nicht<br />
raten wir aber dringend an<br />
Verantwortlicher ist z.B. Phasenleiter für die zu planende Phase<br />
erste Woche jeder Phase dient Einarbeitung und Planung<br />
Granularität der Arbeitspakete: Arbeitsumfang von 1-2 Personen mit<br />
max. 1-2 Zeitwochen<br />
gerade in Krisenzeiten (Implementierungsphase) braucht man einen<br />
Plan (was wäre die Feuerwehr ohne Plan?)<br />
Fertigstellung (Ist) wird dokumentiert durch individuelle Zeiterfassung<br />
aufgeschlüsselt in Aktivitäten (Anette).<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 14 / 634<br />
Vorbemerkungen<br />
Anette: Aufgaben-Management<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 15 / 634
Vorbemerkungen<br />
Anette: Zeiterfassung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 16 / 634<br />
Vorbemerkungen<br />
Die Aufgabe<br />
Aktuelle Probleme bei der Durchführung von Arbeitssitzungen im SWP<br />
und anderswo:<br />
Terminfindung ist ein langwieriger Prozess<br />
keine Möglichkeit zur Vorbereitung, da keine Agenda<br />
schlechte Zeitausnutzung<br />
wichtige Dinge bleiben unbesprochen<br />
die Inhalte der Arbeitssitzungen gehen verloren<br />
Festlegungen in Arbeitssitzungen bleiben unverbindlich<br />
Aufgaben werden nicht erledigt<br />
Aufgabe: Meeting Assistant<br />
Erstellung eines Systems zur Unterstützung von Arbeitssitzungen<br />
z.B. im SWP<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 17 / 634
Vorbemerkungen<br />
Durchführung von Arbeitssitzungen<br />
Rollen: Moderator, Protokollant, sonstige Teilnehmer<br />
Vorbereitung:<br />
1 Terminfindung<br />
2 Aufstellung der Agenda mit Priorisierung und Zeitplan<br />
3 Versenden der Einladung mit Agenda<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 18 / 634<br />
Vorbemerkungen<br />
Durchführung von Arbeitssitzungen<br />
Durchführung:<br />
1 Feststellung der Anwesenheit<br />
2 ggf. Anpassung der Agenda<br />
3 Abfragen der offenen Aufgaben des letzten Treffens<br />
4 Abarbeitung der Agenda:<br />
entlang der Priorisierung<br />
Einhaltung des Zeitplans<br />
Protokollierung aller wesentlichen Punkte<br />
5 Festlegung von Aufgaben mit Verantwortlichen und Erledigungsdatum<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 19 / 634
Vorbemerkungen<br />
Durchführung von Arbeitssitzungen<br />
Nachbearbeitung:<br />
1 Versenden des Protokolls<br />
2 ggf. Anpassung des Protokolls<br />
3 Auswertungen von Statistiken, um Arbeitssitzungen kontinuierlich zu<br />
verbessern<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 20 / 634<br />
Vorbemerkungen<br />
Erforderliche Funktionalität<br />
Meeting Assistant soll den gesamten Prozess unterstützen:<br />
Zeitfindung unter den Teammitglieder<br />
Vorbereitung der Agenda und Verteilung im Vorfeld<br />
Protokollerstellung während der Besprechung und Verteilung im<br />
Anschluss<br />
Überprüfen der offenen Punkte vom letzten Protokoll<br />
Integration mit Anette wäre vorteilhaft, ist aber nicht verbindlich.<br />
Quellcode von Anette kann erweitert werden.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 21 / 634
Vorbemerkungen<br />
Erforderliche Funktionalität<br />
Randbedingungen:<br />
Implementierung in Java 5 oder höher<br />
Swing-GUI, keine Webanwendung<br />
Mehrbenutzerbetrieb<br />
hoher Anspruch an Datenschutz und -sicherheit<br />
hoher Anspruch an Benutzbarkeit/Ergonomie<br />
Client/Server Anwendung<br />
Verwendung von MySQL für den Server<br />
Verwendung von SQL-Abfragen<br />
keine ” große“ Datenbank auf dem Clienten (eingebettete sind OK)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 22 / 634<br />
Vorbemerkungen<br />
Vorlesungsbegleitender Technikkurs<br />
Themen:<br />
Swing<br />
Sockets (TCP)<br />
RMI<br />
SSL<br />
Serialisierung<br />
Datenbankanbindung<br />
OR-Mapping<br />
XML Parser<br />
Multithreading<br />
. . .<br />
jeweils Einführung + betreute Übung<br />
optionales Angebot, Teilnahme freiwillig<br />
etwa 4–5 Termine<br />
Termin: im Januar/Februar?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 23 / 634
Vorbemerkungen<br />
Die Beteiligten<br />
Tel. E-Mail Ort<br />
Rainer Koschke 9671 koschke OAS 3016<br />
Raimar Falke 2576 rfalke OAS 3012<br />
Markus Eich 64105 eich DFKI 212<br />
Hendrik Iben 2447 hiben TAB 1.91<br />
Hui Shi 64260 shi Cartesium 1.053<br />
Xin Xing 3035 xing TAB 1.77<br />
. . . und natürlich Sie!<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 24 / 634<br />
Vorbemerkungen<br />
Ressourcen<br />
Web-Seite zur Vorlesung:<br />
http://www.informatik.uni-bremen.de/st/Lehre/swp/<br />
Folien mit Kommentaren:<br />
http://www.informatik.uni-bremen.de/st/lehredetails.<br />
php?id=&lehre_id=46<br />
Folien mit Annotationen aus der Vorlesung bei Stud.IP:<br />
http://elearning.uni-bremen.de/<br />
Video-Aufzeichnung vom letzten Jahr:<br />
http://mlecture.uni-bremen.de<br />
Newsgroup fb3.lv.swp<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 25 / 634
Vorbemerkungen<br />
Lehrbücher zur <strong>Software</strong>technik I<br />
Allgemeine Literatur zur <strong>Software</strong>technik:<br />
Balzert (1998): Umfassendes deutsches Lehrbuch vmtl. der Bestseller<br />
in Deutschland; leider nicht mehr im Buchhandel verfügbar, wird neu<br />
aufgelegt<br />
Ludewig und Lichter (2006): Umfassendes Lehrbuch, das aus<br />
Ludewigs Vorlesungen rund um <strong>Software</strong>technik entstanden ist. Diese<br />
Vorlesung basiert in großen Teilen auf dem Skript von Ludewigs<br />
Vorlesung.<br />
Sommerville (2004): Ein Standardlehrbuch, sowohl in deutscher als<br />
auch englischer Sprache verfügbar. Im Umfang vergleichbar mit dem<br />
Buch von Pressman (2003).<br />
Pressman (2003): Ein umfassendes englisches Lehrbuch, das man fast<br />
schon als Enzyklopädie bezeichnen könnte. Behandelt auch<br />
nicht-objektorientierte Konzepte.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 26 / 634<br />
Vorbemerkungen<br />
Lehrbücher zur <strong>Software</strong>technik II<br />
Brügge und Dutoit (2004): Eine Einführung in Deutsch mit<br />
Schwerpunkt Objektorientierung und UML.<br />
Zuser u. a. (2004): Eine Einführung in Deutsch mit Schwerpunkt<br />
Objektorientierung und dem Rational Unified Process. Weniger<br />
umfassend als das Buch von Brügge und Dutoit (2004).<br />
Spezialthemen:<br />
Störrle (2005): Eine kurze Einführung in die Konzepte der UML 2.0 in<br />
deutscher Sprache.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 27 / 634
Allgemeines zur <strong>Software</strong>technik<br />
Allgemeines zur <strong>Software</strong>technik<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
2 <strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 28 / 634<br />
<strong>Projekt</strong><br />
Allgemeines zur <strong>Software</strong>technik<br />
Was ist <strong>Software</strong>?<br />
Vorgehen<br />
Inhalt<br />
Zeitplan<br />
Planung und Aufwand im SWP 05/06<br />
Risiken<br />
Risiko-Management<br />
Erfahrungen aus dem SWP 05/06<br />
Definition<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>: Computer programs, procedures, and possibly associated<br />
Wiederholungsfragen<br />
documentation and data pertaining to the operation of a computer system.<br />
IEEE Std 610.12-1990 (1990)<br />
Lernziele<br />
Herausforderungen<br />
Aktivitäten<br />
Ist-Analyse<br />
Erhebungstechniken<br />
Befragung<br />
Beobachtung<br />
Soll-Analyse: Prototyping<br />
Zusammenfassung der Techniken<br />
Anforderungsspezifikation<br />
Bedeutung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 29 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
Was ist <strong>Software</strong>?<br />
Was ist <strong>Software</strong>?<br />
Definition<br />
<strong>Software</strong>: Computer programs, procedures, and possibly associated<br />
documentation and data pertaining to the operation of a computer system.<br />
IEEE Std 610.12-1990 (1990)<br />
<strong>Software</strong> umfasst also nach IEEE Std 610.12 Programme, Abläufe, Regeln, auch Dokumentation und Daten, die<br />
mit dem Betrieb eines Rechnersystems zu tun haben.<br />
Allgemeines zur <strong>Software</strong>technik<br />
Ein Produkt wie jedes andere?<br />
<strong>Software</strong><br />
ist ein technisches Produkt,<br />
weist aber einige einmalige Merkmale auf.<br />
→ Sie sollten beim Umgang mit <strong>Software</strong> beachtet werden.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 30 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
Ein Produkt wie jedes andere?<br />
Ein Produkt wie jedes andere?<br />
<strong>Software</strong><br />
ist ein technisches Produkt,<br />
weist aber einige einmalige Merkmale auf.<br />
→ Sie sollten beim Umgang mit <strong>Software</strong> beachtet werden.<br />
Generell kann und sollte <strong>Software</strong> als technisches Produkt betrachtet werden, das wie andere Produkte von<br />
Ingenieuren systematisch entwickelt werden kann und durch feststellbare Eigenschaften (Funktionalität, Qualität)<br />
gekennzeichnet ist. <strong>Software</strong> ist sogar frei von allen Unwägbarkeiten, die anderen technischen Produkten anhaften.<br />
Sie ist in diesem Sinne das ideale technische Produkt. Als <strong>Software</strong>-Leute sollten wir darum keine spezielle<br />
Nachsicht erwarten. <strong>Software</strong> weist aber (wie viele andere Produkttypen) einige besondere und wenigstens in dieser<br />
Kombination einmalige Merkmale auf: Sie müssen beim Umgang mit <strong>Software</strong> beachtet werden.<br />
Allgemeines zur <strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong> ist immateriell:<br />
<strong>Software</strong> kann nicht ohne Weiteres betrachtet werden.<br />
Kopie und Original sind völlig gleich.<br />
<strong>Software</strong> wird nicht gefertigt, sondern nur entwickelt.<br />
<strong>Software</strong> verschleißt nicht.<br />
<strong>Software</strong> ” altert“ in dem Maße, in dem sich ihre Umwelt ändert.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 31 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
Eigenschaften von <strong>Software</strong><br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong> ist immateriell:<br />
<strong>Software</strong> kann nicht ohne Weiteres betrachtet werden.<br />
Kopie und Original sind völlig gleich.<br />
<strong>Software</strong> wird nicht gefertigt, sondern nur entwickelt.<br />
<strong>Software</strong> verschleißt nicht.<br />
<strong>Software</strong> ” altert“ in dem Maße, in dem sich ihre Umwelt ändert.<br />
Was wir als natürlich empfinden, ist an materielle Eigenschaften geknüpft. An <strong>Software</strong> ist nichts natürlich.<br />
Erfahrungen aus der natürlichen Welt sind nicht übertragbar (werden dennoch ständig übertragen, siehe z.B.<br />
Wartung). Kopie und Original sind völlig gleich. <strong>Software</strong> wird nicht gefertigt, sondern nur entwickelt. <strong>Software</strong><br />
verschleißt nicht; die Wartung stellt nicht den alten Zustand wieder her, sondern einen neuen. Wiederverwendung<br />
ist bei <strong>Software</strong> extrem lukrativ, wenn der Aufwand für Anpassungen relativ gering ist. Programmierer<br />
unterschätzen meist das Problem (. . . oder überschätzen sich selbst!)<br />
Allgemeines zur <strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong> hat keine natürliche Lokalität.<br />
Ihre Werkstoffe sind amorph und universell.<br />
Strukturen müssen aktiv geschaffen werden.<br />
Ein Programm realisiert keine stetige Funktion.<br />
Korrektheit ist durch Test nicht prüfbar.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 32 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
Eigenschaften von <strong>Software</strong><br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong> hat keine natürliche Lokalität.<br />
Ihre Werkstoffe sind amorph und universell.<br />
Strukturen müssen aktiv geschaffen werden.<br />
Ein Programm realisiert keine stetige Funktion.<br />
Korrektheit ist durch Test nicht prüfbar.<br />
Natürliche Lokalität gibt es bei <strong>Software</strong> nicht. Im Speicher eines Rechners gibt es keine schützende Distanz. Die<br />
Werkstoffe der <strong>Software</strong> sind amorph und universell. Werkstoffe sind die eingesetzten Sprachen, meist nur die<br />
natürliche Sprache und die Programmiersprache, evtl. noch andere, z.B. graphische Notationen.<br />
Ein Programm realisiert keine stetige Funktion. Der Zusammenhang zwischen Eingabe und Ausgabe lässt sich nicht<br />
durch eine kontinuierliche Funktion beschreiben.<br />
Allgemeines zur <strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Systeme sind sehr komplex:<br />
→ Entwicklungskosten sind unvermeidlich hoch.<br />
→ Korrekte Konstruktion ist extrem schwierig.<br />
<strong>Software</strong> spiegelt (in vielen Fällen) die Realität wider.<br />
“This complexity is compounded by the necessity to conform to<br />
an external environment that is arbitrary, unadaptable, and<br />
everchanging.”<br />
–F.P. Brooks, 1987<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 33 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
Eigenschaften von <strong>Software</strong><br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Systeme sind sehr komplex:<br />
→ Entwicklungskosten sind unvermeidlich hoch.<br />
→ Korrekte Konstruktion ist extrem schwierig.<br />
<strong>Software</strong> spiegelt (in vielen Fällen) die Realität wider.<br />
“This complexity is compounded by the necessity to conform to<br />
an external environment that is arbitrary, unadaptable, and<br />
everchanging.”<br />
<strong>Software</strong>-Systeme sind sehr komplex (nach Zahl der relevanten Entscheidungen darin), vergleichbar mit anderen<br />
sehr komplexen Systemen. Es ist extrem schwer, sie trotzdem so zu konstruieren, dass sie automatisch und korrekt<br />
arbeiten.<br />
Allgemeines zur <strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong> gilt als flexibel (d.h. leicht änderbar) 4 :<br />
Sie verbindet Hardware und Umgebung.<br />
Details der Aufgabenstellung werden in aller Regel durch <strong>Software</strong><br />
realisiert.<br />
→ Änderungen schlagen sich entsprechend primär in der <strong>Software</strong> nieder.<br />
4 <strong>Software</strong> ist nur in dem Maße flexibel, in dem die Flexibilität explizit eingebaut ist.<br />
–F.P. Brooks, 1987<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 34 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Eigenschaften von <strong>Software</strong><br />
Eigenschaften von <strong>Software</strong><br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong> gilt als flexibel (d.h. leicht änderbar) 4 :<br />
Sie verbindet Hardware und Umgebung.<br />
Details der Aufgabenstellung werden in aller Regel durch <strong>Software</strong><br />
realisiert.<br />
→ Änderungen schlagen sich entsprechend primär in der <strong>Software</strong> nieder.<br />
4 <strong>Software</strong> ist nur in dem Maße flexibel, in dem die Flexibilität explizit eingebaut ist.<br />
<strong>Software</strong> ist nur in dem Maße flexibel, in dem die Flexibilität explizit eingebaut ist: Es ist leicht einen Parameter zu<br />
verändern, aber nur wenn dieser Parameter in der <strong>Software</strong> vorhanden ist.<br />
Allgemeines zur <strong>Software</strong>technik<br />
<strong>Software</strong>-Lebenszyklus<br />
Analyse<br />
Entwurf<br />
Implemen−<br />
tierung<br />
Test<br />
Wartung<br />
& Evolution<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 35 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Lebenszyklus<br />
Wie jeder komplexe Engineering-Prozess, so verläuft auch die <strong>Software</strong>-Entwicklung in mehreren Phasen. Die<br />
<strong>Software</strong> wird spezifiziert, eine Lösung wird entworfen und implementiert und schließlich getestet. Nach der<br />
Auslieferung wird sie gewartet. Das heißt, Fehler werden korrigiert sowie Erweiterungen und Anpassungen<br />
vorgenommen.<br />
Diese Darstellung suggeriert, dass alle Teilphasen mehr oder minder gleich lang sind. Dies stimmt jedoch nicht.<br />
Allgemeines zur <strong>Software</strong>technik<br />
Aufwand in den Phasen nach McKee (1984)<br />
Analyse<br />
Entwurf<br />
Implemen−<br />
tierung<br />
Test<br />
Analyse<br />
Entwurf<br />
Implemen−<br />
tierung<br />
Test<br />
Wartung<br />
& Evolution<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 36 / 634<br />
Wartung<br />
& Evolution
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
<strong>Software</strong>-Lebenszyklus<br />
Aufwand in den Phasen nach McKee (1984)<br />
Aufwand in den Phasen nach McKee (1984)<br />
Hier sehen Sie eine Darstellung des Entwicklungsprozesses, in der die einzelnen Phasen entsprechend ihrer Dauer<br />
gezeichnet sind.<br />
Empirische Untersuchungen zeigen, dass bis zu 80% der Kosten erst nach der Auslieferung entstehen. Das heißt, in<br />
der Wartungs- und Evolutionsphase.<br />
Diese Phase unterscheidet sich von den anderen Phasen darin, dass man sich mit einem existierenden System<br />
auseinander setzen muss.<br />
Diese Verteilung sagt übrigens auch aus, dass unsere Studenten zu 80prozentiger Wahrscheinlichkeit es in ihrem<br />
späteren Berufsleben mit der Wartung zu tun haben werden. Nur an wenigen <strong>Universität</strong>en werden sie hierauf<br />
ausreichend vorbereitet.<br />
Allgemeines zur <strong>Software</strong>technik<br />
Evolutionsphase nach Fjeldstadt und Hamlen (1984)<br />
Analyse<br />
Entwurf<br />
Implemen−<br />
tierung<br />
Test<br />
Verstehen<br />
Änderung und Test<br />
Analyse<br />
Entwurf<br />
Implemen−<br />
tierung<br />
Test<br />
Wartung<br />
& Evolution<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 37 / 634<br />
Wartung<br />
& Evolution
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
<strong>Software</strong>-Lebenszyklus<br />
Evolutionsphase nach Fjeldstadt und Hamlen (1984)<br />
Evolutionsphase nach Fjeldstadt und Hamlen (1984)<br />
Weitere Studien zeigen, dass Wartungsprogrammierer etwa die Hälfte ihrer Zeit allein mit der Analyse der <strong>Software</strong><br />
verbringen, ehe sie ihre Änderungen vornehmen und testen. Bei der Korrektur von Fehlern liegt der Aufwand eher<br />
bei 60%.<br />
Dieser hohe Aufwand liegt an der unzureichenden Information, die den Wartungsprogrammierern zur Verfügung<br />
steht. Die Programmierer müssen die Informationen mühsam von Hand herleiten, weil ihnen die dazu notwendigen<br />
Werkzeuge fehlen.<br />
Wer Kosten bei der <strong>Software</strong>-Entwicklung sparen möchte, muss hier ansetzen.<br />
Allgemeines zur <strong>Software</strong>technik<br />
Lehman und Beladys ” Gesetze“ (1985)<br />
Gesetz vom fortwährenden Wandel<br />
<strong>Software</strong> löst ein Problem der realen Welt,<br />
die reale Welt ändert sich,<br />
<strong>Software</strong> muss sich anpassen,<br />
bis sie abgelöst wird.<br />
Analyse<br />
Entwurf<br />
Implemen−<br />
tierung<br />
Test<br />
Verstehen<br />
Änderung und Test<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 38 / 634<br />
Wartung<br />
& Evolution
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
<strong>Software</strong>-Evolution<br />
Lehman und Beladys ” Gesetze“ (1985)<br />
Warum muss <strong>Software</strong> überhaupt angepasst werden? Die Begründung fällt leicht. . . .<br />
Allgemeines zur <strong>Software</strong>technik<br />
Lehman und Beladys ” Gesetze“ (1985)<br />
Gesetz der zunehmenden<br />
Komplexität<br />
die Komplexität der<br />
<strong>Software</strong> erhöht sich<br />
beim Wandel,<br />
wenn keine<br />
Gegenmaßnahmen<br />
ergriffen werden<br />
Lehman und Beladys ” Gesetze“ (1985)<br />
Gesetz vom fortwährenden Wandel<br />
<strong>Software</strong> löst ein Problem der realen Welt,<br />
die reale Welt ändert sich,<br />
<strong>Software</strong> muss sich anpassen,<br />
bis sie abgelöst wird.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 39 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
<strong>Software</strong>-Evolution<br />
Lehman und Beladys ” Gesetze“ (1985)<br />
Lehman und Beladys ” Gesetze“ (1985)<br />
Gesetz der zunehmenden<br />
Komplexität<br />
die Komplexität der<br />
<strong>Software</strong> erhöht sich<br />
beim Wandel,<br />
wenn keine<br />
Gegenmaßnahmen<br />
ergriffen werden<br />
Leider geht mit dem Zwang zur Änderung der Anstieg der Komplexität der <strong>Software</strong> einher. Hier sehen Sie eine<br />
Grafik von Many Lehman, der sich als einer der ersten mit dem Phänomen der <strong>Software</strong>-Evolution empirisch<br />
auseinander gesetzt hat.<br />
Sie sehen hier den Umfang eines Systems, gemessen in der Anzahl seiner Module, über die Zeit. Die Messpunkte<br />
sind die verschiedenen Releases der <strong>Software</strong>.<br />
Sie bemerken das Wachstum. Aber auch gleichzeitig die Verlangsamung des Wachstums. Die Dauer zwischen<br />
Releases nimmt zu.<br />
Um diesem Trend entgegen zu wirken, müssen Sie Maßnahmen ergreifen, um die Komplexität einzudämmen.<br />
Allgemeines zur <strong>Software</strong>technik<br />
<strong>Software</strong>-Evolution<br />
Konsequenzen:<br />
Änderbarkeit ist eine Schlüsselqualität<br />
Änderbarkeit muss frühzeitig angestrebt werden<br />
sie lässt sich nicht nachträglich überstülpen<br />
wer sie vernachlässigt, nimmt einen Kredit auf, den er teuer abzahlen<br />
wird<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 40 / 634
Allgemeines zur <strong>Software</strong>technik<br />
Wo liegen die Probleme in der <strong>Software</strong>technik?<br />
In den späten 60er Jahren:<br />
2009-02-09<br />
Manche <strong>Software</strong>-<strong>Projekt</strong>e sind selbst mit gigantischem Aufwand<br />
nicht zu schaffen.<br />
In vielen anderen Fällen wird der Abschluss nur mit unbefriedigenden<br />
Resultaten, viel zu spät und/oder mit extremen<br />
Kostenüberschreitungen erreicht.<br />
Andererseits erzielt die Hardware-Entwicklung atemberaubende<br />
Fortschritte.<br />
“The whole trouble comes from the fact that there is so much<br />
tinkering with software. It is not made in a clean fabrication<br />
process, which it should be. What we need is software<br />
engineering.”<br />
–F.L. Bauer, 1968<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 41 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Entstehung der <strong>Software</strong>technik<br />
Wo liegen die Probleme in der <strong>Software</strong>technik?<br />
Wo liegen die Probleme in der <strong>Software</strong>technik?<br />
In den späten 60er Jahren:<br />
Manche <strong>Software</strong>-<strong>Projekt</strong>e sind selbst mit gigantischem Aufwand<br />
nicht zu schaffen.<br />
In vielen anderen Fällen wird der Abschluss nur mit unbefriedigenden<br />
Resultaten, viel zu spät und/oder mit extremen<br />
Kostenüberschreitungen erreicht.<br />
Andererseits erzielt die Hardware-Entwicklung atemberaubende<br />
Fortschritte.<br />
“The whole trouble comes from the fact that there is so much<br />
tinkering with software. It is not made in a clean fabrication<br />
process, which it should be. What we need is software<br />
engineering.”<br />
Kurz: Es ist nicht alles machbar, was prinzipiell möglich sein müsste. Für diese Probleme kam das Schlagwort<br />
<strong>Software</strong> Crisis in Mode. Die <strong>Software</strong>-Krise war Anlass für viele Diskussionen und Tagungen. Auf der<br />
NATO-Konferenz in Garmisch (1968) prägte F.L. Bauer das Wort <strong>Software</strong> Engineering als Provokation (siehe dazu<br />
Bauer, 1993).<br />
–F.L. Bauer, 1968
Allgemeines zur <strong>Software</strong>technik<br />
Wie viel hat sich bis heute daran geändert?<br />
Beispiel<br />
Fehler:<br />
vollständiger Batterieausfall in Fahrzeugen eines deutschen<br />
Automobil-Herstellers<br />
Ursache:<br />
Fehler in der software-gesteuerten Innenbeleuchtung<br />
Folge:<br />
Rückrufaktion mit einem (geschätzten) Schaden von mehreren<br />
Millionen DEM<br />
Partsch (1998)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 42 / 634<br />
Allgemeines zur <strong>Software</strong>technik<br />
Wie viel hat sich bis heute daran geändert?<br />
Beispiel<br />
Fehler:<br />
Bei der rechnergestützten Auswertung der OB-Wahl in Neu-Ulm 1994<br />
wurde zunächst eine Wahlbeteiligung von 104% festgestellt.<br />
Ursache:<br />
In der Auswertungssoftware hatte sich ein mysteriöser Faktor 2<br />
eingeschlichen.<br />
Folge:<br />
Neuauszählung<br />
Partsch (1998)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 43 / 634
Allgemeines zur <strong>Software</strong>technik<br />
Wie viel hat sich bis heute daran geändert?<br />
Beispiel<br />
Fehler:<br />
USS Yorktown treibt während eines Manövers im September 1997<br />
manövrierunfähig bei Cape Charles, VA.<br />
Ursache:<br />
Fehler in einer Routine zum Abfangen einer Division durch Null in einer<br />
Windows NT Applikation. Die ” Null“ wurde als manuelle Eingabe einer<br />
enormen Datenmenge interpretiert.<br />
Folge:<br />
“Atlantic Fleet officials said the ship was dead in water for about 2<br />
hours and 45 minutes.”<br />
Neumann (1999)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 44 / 634<br />
Allgemeines zur <strong>Software</strong>technik<br />
Produktgarantie?<br />
Disclaimer of Warranty:<br />
This car is provided under this license on an “as is” basis, without<br />
warranty of any kind, either expressed or implied, including,<br />
without limitation, warranties that the car is free of defects,<br />
merchantable, fit for a particular purpose or non-infringing. The<br />
entire risk as to the quality and performance of the car is with you.<br />
Should any car prove defective in any respect, you (not the initial<br />
developer or any other contributor) assume the cost of any necessary<br />
servicing, repair or correction.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 45 / 634
Allgemeines zur <strong>Software</strong>technik<br />
Garantien über <strong>Software</strong>?<br />
Disclaimer of Warranty:<br />
2009-02-09<br />
This software is provided under this license on an “as is” basis,<br />
without warranty of any kind, either expressed or implied,<br />
including, without limitation, warranties that the software is free<br />
of defects, merchantable, fit for a particular purpose or<br />
non-infringing. The entire risk as to the quality and performance of<br />
the software is with you. Should any software prove defective in<br />
any respect, you (not the initial developer or any other contributor)<br />
assume the cost of any necessary servicing, repair or correction.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 46 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Entstehung der <strong>Software</strong>technik<br />
Garantien über <strong>Software</strong>?<br />
Garantien über <strong>Software</strong>?<br />
Disclaimer of Warranty:<br />
This software is provided under this license on an “as is” basis,<br />
without warranty of any kind, either expressed or implied,<br />
including, without limitation, warranties that the software is free<br />
of defects, merchantable, fit for a particular purpose or<br />
non-infringing. The entire risk as to the quality and performance of<br />
the software is with you. Should any software prove defective in<br />
any respect, you (not the initial developer or any other contributor)<br />
assume the cost of any necessary servicing, repair or correction.<br />
An solche Disclaimer haben wir uns schon lange gewöhnt. Stellen Sie sich vor, sie lesen einen solchen in der<br />
Betriebsanleitung Ihres Autos. Sie würden das Auto sofort zurückgeben.<br />
Übrigens: Solche Disclaimer sind nach deutschem Recht hinfällig. Stellen Sie jemandem auf dem Netz ein<br />
Programm zur Verfügung, sind Sie automatisch in der Haftung. Grobe Fahrlässigkeit und Vorsatz lassen sich in<br />
Deutschland nicht ausschließen.<br />
Spezifizieren Sie nicht den Zweck Ihres Programms, so wird zu Grunde gelegt, was man üblicherweise von einem<br />
Programm dieser Art erwartet.
Allgemeines zur <strong>Software</strong>technik<br />
Ingenieursdisziplin (Shaw und Garlan 1996)<br />
Kunst<br />
Produktion<br />
Geübte Arbeiter<br />
• etabliertes Vorgehen<br />
• pragmatische Verfeinerungen<br />
• Ausbildung in der Ausführung<br />
• ökonomische Betrachtung<br />
der Materialien<br />
• Herstellung für den Verkauf<br />
Talentierte Amateure<br />
• gelegentliche<br />
• verschwenderische Verwendung<br />
• Herstellung für die Verwendung,<br />
Übermittlung<br />
• intuitiv und ad hoc<br />
• wahlloser Fortschritt<br />
verfügbaren Materials<br />
weniger für den Verkauf<br />
Wissenschaft<br />
Handwerk<br />
Ingenieursdisziplin<br />
Ausgebildete Personen<br />
• Analyse und Theorie<br />
• Fortschritt basiert auf<br />
Wissenschaft<br />
• Einführung neuer<br />
Anwendungen durch Analyse<br />
• Marktsegmentierung durch<br />
Produktvielfalt<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 47 / 634<br />
Allgemeines zur <strong>Software</strong>technik<br />
Definition<br />
<strong>Software</strong>technik:<br />
Entdeckung und Anwendung solider Ingenieur-Prinzipien mit dem<br />
Ziel, auf wirtschaftliche Art <strong>Software</strong> zu bekommen, die zuverlässig ist<br />
und auf realen Rechnern läuft.<br />
–F.L. Bauer<br />
Herstellung und Anwendung einer <strong>Software</strong>, wobei mehrere Personen<br />
beteiligt sind oder mehrere Versionen entstehen.<br />
–D.L. Parnas<br />
(1) The application of a systematic, disciplined, quantifiable approach<br />
to the development, operation, and maintenance of software; that is,<br />
the application of engineering to software. (2) The study of<br />
approaches as in (1). IEEE Std 610.12-1990 (1990)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 48 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Definition<br />
<strong>Software</strong>technik:<br />
Entdeckung und Anwendung solider Ingenieur-Prinzipien mit dem<br />
Ziel, auf wirtschaftliche Art <strong>Software</strong> zu bekommen, die zuverlässig ist<br />
und auf realen Rechnern läuft.<br />
–F.L. Bauer<br />
Herstellung und Anwendung einer <strong>Software</strong>, wobei mehrere Personen<br />
beteiligt sind oder mehrere Versionen entstehen.<br />
–D.L. Parnas<br />
(1) The application of a systematic, disciplined, quantifiable approach<br />
to the development, operation, and maintenance of software; that is,<br />
the application of engineering to software. (2) The study of<br />
approaches as in (1). IEEE Std 610.12-1990 (1990)<br />
<strong>Software</strong> Engineering wurde oft definiert. Drei wichtige Definitionen sind hier angegeben.<br />
Die IEEE-Definition ist problematisch, wenn nicht falsch, weil sie wertet und fordert, also ein Ideal beschreibt, und<br />
einen anderen undefinierten Begriff zu Grunde legt.<br />
Allgemeines zur <strong>Software</strong>technik<br />
Abschrift aus dem Vorwort zum Vorlesungsskript Werkstoffe der<br />
Elektrotechnik (Prof. Fischer, Uni-Dortmund, 1977)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 50 / 634
Allgemeines zur <strong>Software</strong>technik<br />
Merkmale der alten Ingenieurdisziplinen<br />
2009-02-09<br />
Kostendenken als Grundlage von Bewertungen<br />
praktischer Erfolg als einziger zulässiger Beweis<br />
Qualitätsbewusstsein als Denkprinzip<br />
Einführung und Beachtung von Normen (Schnittstellen, Verfahren,<br />
Begriffe)<br />
Denken in Baugruppen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 51 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Merkmale der alten Ingenieurdisziplinen<br />
Merkmale der alten Ingenieurdisziplinen<br />
Definition und Anwendung von Methoden, Bereitstellung und Verwendung von Werkzeugen sind allgemein<br />
bewährte Ansätze, also nicht typisch für Ingenieure. Ingenieur-spezifisch sind dagegen:<br />
Kostendenken als Grundlage von Bewertungen<br />
praktischer Erfolg als einziger zulässiger Beweis<br />
Qualitätsbewusstsein als Denkprinzip<br />
Einführung und Beachtung von Normen (Schnittstellen, Verfahren,<br />
Begriffe)<br />
Denken in Baugruppen<br />
• Kostendenken als Grundlage von Bewertungen (Achtung, es geht hier um die Gesamtkosten, nicht nur um Geld!)<br />
• praktischer Erfolg als einziger zulässiger Beweis: nur was gezählt oder gemessen wurde, ist ein akzeptables Argument;<br />
• Qualitätsbewusstsein: hohe Qualität ist ein Prinzip der unspezifischen Kostensenkung; kommt aus der handwerklichen<br />
Tradition, die die Ingenieure übernommen haben;<br />
• Normen (vgl. Norm für Passstifte); Merke: Eine Norm wird immer beachtet!<br />
• Baugruppen: Durch Normen entsteht die Möglichkeit, Baugruppen zu verwenden, also die Lösung der Teilprobleme<br />
auszuklammern.
Allgemeines zur <strong>Software</strong>technik<br />
Wiederholungsfragen<br />
Was sind die besonderen Eigenschaften von <strong>Software</strong>?<br />
Was folgt aus diesen Eigenschaften für die <strong>Software</strong>entwicklung?<br />
Aus welchen Phasen besteht der <strong>Software</strong>-Lebenszyklus?<br />
Was ist die Besonderheit der Wartungsphase und was folgt daraus für<br />
die <strong>Software</strong>entwicklung?<br />
Warum muss <strong>Software</strong> überhaupt angepasst werden? Welche Folgen<br />
können diese Änderungen haben?<br />
Welche Einsichten führten zur Entstehung der <strong>Software</strong>technik? Mit<br />
welchen Problemen ist die <strong>Software</strong>technik nach wie vor konfrontiert?<br />
Was ist <strong>Software</strong>technik? Welche Ziele verfolgt sie?<br />
Was sind die Kennzeichen einer Ingenieursdisziplin und wie entsteht<br />
sie?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 52 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
3 Rainer Planung Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 53 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
<strong>Projekt</strong><br />
Definition<br />
<strong>Projekt</strong>: eine für begrenzte Zeit mit bestimmtem Ziel bestehende<br />
Organisation mit all ihren Bestandteilen, Beziehungen im Innern und nach<br />
außen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 54 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Planung<br />
Planung<br />
am Anfang:<br />
Gliederung in Phasen, Aktivitäten, Arbeitspakete,<br />
zeitlicher Ablauf (Meilensteine),<br />
Arbeitsorganisation,<br />
Aufbau der Dokumentation.<br />
während des <strong>Projekt</strong>s:<br />
Controlling (d.h. die Überwachung des <strong>Projekt</strong>fortschritts),<br />
Reaktion auf Abweichung (Anpassung des Plans).<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 55 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
<strong>Projekt</strong><br />
Planung<br />
Planung<br />
Planung<br />
am Anfang:<br />
Gliederung in Phasen, Aktivitäten, Arbeitspakete,<br />
zeitlicher Ablauf (Meilensteine),<br />
Arbeitsorganisation,<br />
Aufbau der Dokumentation.<br />
während des <strong>Projekt</strong>s:<br />
Controlling (d.h. die Überwachung des <strong>Projekt</strong>fortschritts),<br />
Reaktion auf Abweichung (Anpassung des Plans).<br />
Planung hat im <strong>Software</strong>-<strong>Projekt</strong> zwei verschiedene Bedeutungen: Zu Beginn des <strong>Projekt</strong>s müssen Pläne aufgestellt<br />
werden für die Gliederung in Phasen, den für die Arbeitsorganisation, den für den Aufbau der Dokumentation, und<br />
den für die Prüfungen. Die Existenz und die Qualität dieser Pläne hat zentrale Bedeutung für den Erfolg des<br />
<strong>Projekt</strong>s.<br />
Während des <strong>Projekt</strong>s bleibt die Planung eine Daueraufgabe, weil sich die Realität meist nicht an unsere Planungen<br />
hält. Notwendig ist ein Kompromiss zwischen der starrsinnigen Verteidigung von Plänen, die offenkundig nicht<br />
einzuhalten sind, und der laufenden Anpassung der Pläne an den realen Stand. Eine gewisse Spannung zwischen<br />
Plan und Realität ist normal. Planung und Planverfolgung sind die wichtigsten Aufgaben der <strong>Projekt</strong>leitung. Eng<br />
damit verbunden sind Controlling (d.h. die Überwachung der Ausgaben in einem <strong>Projekt</strong>) und Qualitätssicherung<br />
(d.h. die Prüfung aller Teilresultate und Resultate).<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Elemente eines <strong>Projekt</strong>s<br />
Ist−Analyse<br />
Soll−Analyse<br />
Ist−Beschreibung<br />
Prototyp<br />
erstellen<br />
Spezifikation<br />
der Anforderungen<br />
Abnahme<br />
durch Kunden<br />
Soll−Beschreibung<br />
Prototyp<br />
Analysephase<br />
Anforderungs−<br />
spezifikation<br />
abgenommene<br />
Anforderungsspezifikation<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 56 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
<strong>Projekt</strong><br />
Elemente eines <strong>Projekt</strong>s<br />
Elemente eines <strong>Projekt</strong>s<br />
Ist−Analyse<br />
Soll−Analyse<br />
Ist−Beschreibung<br />
Prototyp<br />
erstellen<br />
Soll−Beschreibung<br />
Prototyp<br />
Spezifikation<br />
der Anforderungen<br />
Analysephase<br />
Anforderungs−<br />
spezifikation<br />
Abnahme<br />
durch Kunden<br />
abgenommene<br />
Anforderungsspezifikation<br />
Für das Verständnis von <strong>Projekt</strong>en sind einige Grundbegriffe notwendig. Keiner dieser Begriffe ist spezifisch für ein<br />
<strong>Software</strong>-<strong>Projekt</strong>. Insgesamt kann angemerkt werden, dass allgemeine Aussagen zu <strong>Projekt</strong>en (jedweder Form) in<br />
aller Regel auch für <strong>Software</strong>-<strong>Projekt</strong>e gelten. Die Natur der <strong>Software</strong>, die in einem <strong>Software</strong>-<strong>Projekt</strong> entwickelt<br />
werden soll, kommt vielmehr in den Inhalten der Arbeitspakete zum Tragen.<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Elemente eines <strong>Projekt</strong>s<br />
Ist−Analyse<br />
Soll−Analyse<br />
Ist−Beschreibung<br />
Prototyp<br />
erstellen<br />
Spezifikation<br />
der Anforderungen<br />
Abnahme<br />
durch Kunden<br />
Soll−Beschreibung<br />
Prototyp<br />
Analysephase<br />
Anforderungs−<br />
spezifikation<br />
abgenommene<br />
Anforderungsspezifikation<br />
Definition<br />
Aktivität: Arbeitseinheit mit<br />
präzisem Anfangs und -enddatum<br />
enthält Aufgaben<br />
benötigt Ressourcen<br />
produziert Arbeitsprodukt<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 57 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Elemente eines <strong>Projekt</strong>s<br />
Ist−Analyse<br />
Soll−Analyse<br />
Ist−Beschreibung<br />
Prototyp<br />
erstellen<br />
Spezifikation<br />
der Anforderungen<br />
Abnahme<br />
durch Kunden<br />
Soll−Beschreibung<br />
Prototyp<br />
Analysephase<br />
Anforderungs−<br />
spezifikation<br />
abgenommene<br />
Anforderungsspezifikation<br />
Definition<br />
<strong>Projekt</strong>funktion: Aktivität, die die<br />
gesamte <strong>Projekt</strong>laufzeit überspannt.<br />
Beispiele:<br />
<strong>Projekt</strong>management<br />
Konfigurationsmanagement<br />
Qualitätssicherung.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 58 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Elemente eines <strong>Projekt</strong>s<br />
Ist−Analyse<br />
Soll−Analyse<br />
Ist−Beschreibung<br />
Prototyp<br />
erstellen<br />
Spezifikation<br />
der Anforderungen<br />
Abnahme<br />
durch Kunden<br />
Soll−Beschreibung<br />
Prototyp<br />
Anforderungs−<br />
spezifikation<br />
abgenommene<br />
Anforderungsspezifikation<br />
Analysephase<br />
Definition<br />
Arbeitspaket: Spezifikation für eine<br />
zu erledigende Arbeit. Definiert<br />
Arbeitsprodukt,<br />
Personalbedürfnisse,<br />
erwartete Entwicklungsdauer,<br />
verwendete Ressourcen,<br />
Akzeptanzkriterien,<br />
Namen des<br />
Hauptverantwortlichen<br />
und sonstige relevante Aspekte<br />
der Arbeit.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 59 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Elemente eines <strong>Projekt</strong>s<br />
Ist−Analyse<br />
Soll−Analyse<br />
Ist−Beschreibung<br />
Prototyp<br />
erstellen<br />
Spezifikation<br />
der Anforderungen<br />
Abnahme<br />
durch Kunden<br />
Soll−Beschreibung<br />
Prototyp<br />
Anforderungs−<br />
spezifikation<br />
abgenommene<br />
Anforderungsspezifikation<br />
Analysephase<br />
Definition<br />
Arbeitsprodukt ein konkretes<br />
Ergebnis einer <strong>Projekt</strong>funktion oder<br />
-aktivität. Beispiele:<br />
Anforderungsspezifikation,<br />
<strong>Projekt</strong>plan,<br />
funktionale Spezifikation,<br />
Entwurfsdokumente,<br />
Benutzerhandbuch,<br />
Testplan<br />
oder Protokolle von Reviews<br />
oder Meetings.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 60 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Elemente eines <strong>Projekt</strong>s<br />
Ist−Analyse<br />
Soll−Analyse<br />
Ist−Beschreibung<br />
Prototyp<br />
erstellen<br />
Spezifikation<br />
der Anforderungen<br />
Abnahme<br />
durch Kunden<br />
Soll−Beschreibung<br />
Prototyp<br />
Analysephase<br />
Anforderungs−<br />
spezifikation<br />
abgenommene<br />
Anforderungsspezifikation<br />
Definition<br />
Meilenstein:<br />
Menge von Kriterien<br />
und vorgesehener Zeitpunkt<br />
und erreichter Zeitpunkt<br />
für die Abnahme eines<br />
(Zwischen-)Resultats<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 61 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Elemente eines <strong>Projekt</strong>s<br />
Ist−Analyse<br />
Soll−Analyse<br />
Ist−Beschreibung<br />
Prototyp<br />
erstellen<br />
Spezifikation<br />
der Anforderungen<br />
Abnahme<br />
durch Kunden<br />
Soll−Beschreibung<br />
Prototyp<br />
Analysephase<br />
Anforderungs−<br />
spezifikation<br />
abgenommene<br />
Anforderungsspezifikation<br />
Definition<br />
Baseline: Arbeitsprodukt,<br />
formal begutachtet und<br />
akzeptiert,<br />
nur durch formalen<br />
kontrollierten Änderungsprozess<br />
änderbar;<br />
bildet Basis für nachfolgende<br />
Arbeitsaktivitäten.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 62 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Vorgehen zur Planung<br />
1 Auswahl eines geeigneten Prozesses (oder Prozessmodells)<br />
2 Grobe Abschätzung des Gesamtumfangs und des Gesamtaufwands<br />
3 Aufstellen eines Zeitplans<br />
4 Aufstellen eines Dokumentationsplans<br />
5 Aufstellen eines Prüfplans<br />
6 Aufstellen eines Organisationsplans<br />
7 Definition der Meilensteine (1-6)<br />
und natürlich: Iteration dieser Schritte, bis die Resultate zusammenpassen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 63 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Vorgehen zur Planung<br />
Wo es definierte Prozessmodelle gibt, kann (und muss) die <strong>Projekt</strong>leiterin<br />
die Vorlagen für die Pläne aus der Schublade (d.h. aus dem Intranet)<br />
nehmen.<br />
Der <strong>Projekt</strong>plan sollte sorgfältig geprüft werden!<br />
Der <strong>Projekt</strong>plan entsteht mit dem <strong>Projekt</strong> und wird im Verlauf des<br />
<strong>Projekt</strong>s fortgeschrieben, aber nicht laufend geändert.<br />
Der <strong>Projekt</strong>plan ist Gegenstand der Änderungskontrolle.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 64 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Inhalt des <strong>Projekt</strong>plans<br />
Plan macht prinzipiell Aussagen zu den folgenden W-Punkten:<br />
warum<br />
was getan wird,<br />
für wieviel Geld,<br />
von wem,<br />
wann und<br />
womit, d.h. unter Einsatz welcher Hilfsmittel und Techniken.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 65 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Übersicht<br />
0. Version und Änderungsgeschichte<br />
1. Einleitung<br />
2. <strong>Projekt</strong>organisation<br />
3. Managementprozess<br />
4. Technischer Prozess<br />
5. Arbeitspakete, Zeitplan und Budget<br />
6. Zusätzliche Elemente<br />
7. Index<br />
8. Anhang<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 66 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Inhalt<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Übersicht<br />
0. Version und Änderungsgeschichte<br />
1. Einleitung<br />
2. <strong>Projekt</strong>organisation<br />
3. Managementprozess<br />
4. Technischer Prozess<br />
5. Arbeitspakete, Zeitplan und Budget<br />
6. Zusätzliche Elemente<br />
7. Index<br />
8. Anhang<br />
Der <strong>Projekt</strong>plan, wie jedes andere Dokument auch, erhält eine Versionsnummer. Änderungen des <strong>Projekt</strong>plans sind<br />
unausweichlich (er wird schrittweise verfeinert und angepasst). Die Änderungen müssen dokumentiert und<br />
nachvollziehbar sein. Der Abschnitt “Version und Änderungsgeschichte” enthält diese Information.<br />
Die Einleitung gibt einen Überblick über das <strong>Projekt</strong> und das Produkt, die Liste der auszuliefernden Dinge, der Plan<br />
für die Entwicklung und die Fortführung des <strong>Projekt</strong>plans, Referenzmaterial sowie Definitionen und Akronyme.<br />
Der Abschnitt “<strong>Projekt</strong>organisation” spezifiziert das Prozessmodell des <strong>Projekt</strong>s, die Organisationsstruktur, die<br />
Grenzen und Schnittstellen der Organisation und die individuellen Verantwortlichkeiten.<br />
Der Abschnitt “Managementprozess” spezifiziert die Managementziele und -prioritäten, Annahmen und<br />
Einschränkungen, Risiken und deren Behandlung sowie Kontrollmechanismen und den Personalplan.<br />
Der Abschnitt “Technischer Prozess” spezifiziert die technischen Methoden, Werkzeuge und Techniken, die im<br />
<strong>Projekt</strong> benutzt werden sollen. Außerdem wird der Dokumentationsplan und die Pläne für die <strong>Projekt</strong>funktionen<br />
spezifiziert, wie etwa die Qualitätssicherung und das Konfigurationsmanagement.<br />
Der Abschnitt “Arbeitspakete” spezifiziert die Arbeitspakete, ihre Abhängigkeiten und Beziehungen, die benötigten<br />
Ressourcen, Zuteilung des Budgets und Ressourcen auf Arbeitspakete sowie den Zeitplan.<br />
Der Abschnitt “Zusätzliche Elemente” enthält Pläne für zusätzliche Komponenten.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Einleitung<br />
1.1 <strong>Projekt</strong>übersicht<br />
Zusammenfassung der Ziele, Resultate, Hauptarbeitsaktivitäten und<br />
-produkte, Hauptmeilensteine, benötigte Ressourcen, grober Zeitplan<br />
und Budget; Kontaktdaten des Kunden<br />
1.2 Auszuliefernde Produkte<br />
alle an den Kunden auszuliefernde Produkte mit Auslieferungsdatum<br />
und -ort sowie deren Anzahl 6<br />
1.3 Evolution des Plans<br />
Plan für vorausgesehene und nicht vorausgesehene Aktualisierung des<br />
<strong>Projekt</strong>plans und deren Bekanntmachung<br />
1.4 Referenzen<br />
1.5 Definitionen und Akronyme<br />
2009-02-09<br />
6 Die Anforderungsspezifikation ist ein separates Dokument!<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 67 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Inhalt<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Einleitung<br />
1.1 <strong>Projekt</strong>übersicht<br />
Zusammenfassung der Ziele, Resultate, Hauptarbeitsaktivitäten und<br />
-produkte, Hauptmeilensteine, benötigte Ressourcen, grober Zeitplan<br />
und Budget; Kontaktdaten des Kunden<br />
1.2 Auszuliefernde Produkte<br />
alle an den Kunden auszuliefernde Produkte mit Auslieferungsdatum<br />
und -ort sowie deren Anzahl 6<br />
1.3 Evolution des Plans<br />
Plan für vorausgesehene und nicht vorausgesehene Aktualisierung des<br />
<strong>Projekt</strong>plans und deren Bekanntmachung<br />
1.4 Referenzen<br />
1.5 Definitionen und Akronyme<br />
6 Die Anforderungsspezifikation ist ein separates Dokument!<br />
Die Referenzen enthalten Verweise auf alle Dokumente und andere Informationsquellen, die im <strong>Projekt</strong>plan<br />
referenziert werden. Hierfür gelten die üblichen Zitierregeln.<br />
Der Abschnitt “Definitionen und Akronyme” beschreibt alle Begriffe, die für das Verständnis des <strong>Projekt</strong>plans<br />
notwendig sind, auch in Form von Verweisen auf entsprechende Dokumente mit deren Definition.<br />
Es handelt sich hier nicht um das Glossar der Anforderungsspezifikation, von dem später noch die Rede sein wird.<br />
Der <strong>Projekt</strong>plan kann aber auf dieses Glossar verweisen.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
<strong>Projekt</strong>organisation<br />
2.1 Prozessmodell<br />
Beziehungen zwischen den <strong>Projekt</strong>funktionen und -aktivitäten mit<br />
Hauptmeilensteinen, Baselines, Reviews, Produkte (interne und<br />
auszuliefernde) und Abschlüsse<br />
2.2 Organisationsstruktur<br />
interne Managementstruktur (z.B. durch Organigramme):<br />
Weisungsbefugnis, Verantwortlichkeit und Kommunikation im <strong>Projekt</strong> 7<br />
2.3 Organisationsgrenzen und -schnittstellen<br />
zwischen übergeordneter Organisation, Kundenorganisation und<br />
Untervertragsnehmer<br />
2.4 Verantwortlichkeiten<br />
Auflistung aller <strong>Projekt</strong>funktionen und -aktivitäten unter Nennung der<br />
Verantwortlichen<br />
7 Kontaktdaten aller Beteiligter nicht vergessen!<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 68 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Managementprozess<br />
3.1 Managementziele und -prioritäten<br />
Beispiele: Häufigkeit und Mechanismen der Berichterstattung; relative<br />
Prioritäten zwischen Anforderungen, Zeitplan und Budget; Absicht zur<br />
Wiederverwendung existierender <strong>Software</strong><br />
3.2 Annahmen, Abhängigkeiten und Einschränkungen<br />
Annahmen, auf denen das <strong>Projekt</strong> beruht; externe Ereignisse, von<br />
denen es abhängt; Beschränkungen, unter denen das <strong>Projekt</strong><br />
durchgeführt wird<br />
3.3 Risikomanagement<br />
Identifikation und Bewertung von Risiken; Mechanismen für Verfolgung<br />
der Risikofaktoren; Notfallpläne;<br />
Beispiele: Risiken mit Verträgen, technologische Risiken, Größe und<br />
Komplexität der Aufgabe, Personal, Akzeptanz des Kunden etc.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 69 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Managementprozess (Fortsetzung)<br />
3.4 <strong>Projekt</strong>überwachung<br />
Berichtswesen, Formate für Berichte, Informationsflüsse, Reviews und<br />
Audits; auf der Ebene von Arbeitspaketen; Beziehung zu<br />
<strong>Projekt</strong>funktionen (bspw. Qualitätssicherung,<br />
Konfigurationsmanagement)<br />
3.5 Mitarbeiter<br />
Anzahl und Typen der notwendigen Mitarbeiter; erforderliche<br />
Fähigkeiten, Beginn und Dauer der Mitarbeit; Methoden zur<br />
Anwerbung, Ausbildung, Bindung und Ausgliederung von Mitarbeitern<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 70 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Technische Prozesse<br />
4.1 Methoden, Werkzeuge und Techniken<br />
Entwicklungsplattform, Entwicklungsmethode, Programmiersprache<br />
sowie andere Notationen, Techniken und Methoden, um das System<br />
und andere auszuliefernde Produkte zu spezifizieren, entwerfen,<br />
konstruieren, testen, integrieren, dokumentieren, modifizieren oder<br />
pflegen;<br />
technische Standards, Richtlinien, Zertifizierungskriterien<br />
4.2 Dokumentationsplan<br />
Anforderungen an die Dokumentation, Meilensteine, Baselines, Reviews<br />
und Abnahme der <strong>Software</strong>-Dokumentation;<br />
Style-Guide, Namenskonventionen, Dokumentationsformate<br />
4.3 Unterstützende <strong>Projekt</strong>funktionen<br />
z.B. Konfigurationsmanagement und Qualitätssicherung<br />
mit Verantwortlichkeiten, Ressourcen, Zeitplänen und Budget<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 71 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Arbeitspakete, Zeitplan und Budget<br />
5.1 Arbeitspakete<br />
eindeutig identifizierbar (z.B. mit Nummer);<br />
Zerlegung der Arbeitspakete<br />
5.2 Abhängigkeiten<br />
Abhängigkeiten zwischen Arbeitspaketen und zu externen Elementen;<br />
Reihenfolge der Abarbeitung<br />
5.3 Ressourcenanforderung<br />
Dauer und Ressourcen;<br />
Beispiele: Anzahl und Qualifikation des Personals, Hardware,<br />
unterstützende <strong>Software</strong>, Büro- und Laborräume, Reisekosten,<br />
Wartungskosten<br />
5.4 Zuteilung des Budgets und der Ressourcen auf <strong>Projekt</strong>funktionen und<br />
Aktivitäten<br />
5.5 Zeitplan<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 72 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Aufbau eines <strong>Projekt</strong>plans nach IEEE-Std-1058 (1987)<br />
Beispiele für zusätzliche Elemente:<br />
Managementpläne für Unterauftragsnehmer<br />
Ausbildungspläne<br />
Beschaffungspläne für Hardware<br />
Raumpläne<br />
Installationspläne<br />
Pläne für die Konvertierung von Daten<br />
Pläne für die<br />
Übergabe des Systems (intern, extern)<br />
Pläne für die Wartung und Evolution<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 73 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Zeitplan: Aktivitäten und Dauer (Gantt-Diagramme)<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 74 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Zeitplan<br />
Zeitplan: Aktivitäten und Dauer (Gantt-Diagramme)<br />
Zeitplan: Aktivitäten und Dauer (Gantt-Diagramme)<br />
Die Gantt-Notation ist nach ihrem Erfinder, Henry L. Gantt (1917), benannt. Sie beschreibt kausale<br />
Abhängigkeiten einzelner Aktivitäten sowie deren zeitlichen Verlauf.<br />
Das <strong>Projekt</strong> wird zunächst in einzelne Aktivitäten gegliedert. Deren Aufwand wird geschätzt. Mögliche Aktivitäten<br />
behandeln wir in späteren Kapiteln.<br />
Die Granularität der Aktivitäten muss angemessen sein. Die in diesem Beispiel gewählte ist es sicher nicht. Je<br />
detaillierter die Angabe desto leichter fällt die Schätzung (und desto aufwändiger die Planung; was sich jedoch in<br />
der Regel auszahlt). “Anfängern” ist eine möglichst feingranulare Darstellung zu empfehlen, da ihre Schätzung<br />
dadurch zuverlässiger wird.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Zeitplan: Meilensteine<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 75 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Zeitplan<br />
Zeitplan: Meilensteine<br />
Zeitplan: Meilensteine<br />
An verschiedenen Zeitpunkten des <strong>Projekt</strong>s werden Meilensteine gesetzt.<br />
Ein Meilenstein ist ein Zeitpunkt, zu dem ein prüfbares Ergebnis vorliegen muss.<br />
Meilensteine erlauben die Beobachtung des <strong>Projekt</strong>fortschritts. Die <strong>Projekt</strong>verfolgung und die Qualitätssicherung<br />
werden interne Meilensteine setzen, also solche die nur dem <strong>Projekt</strong> bekannt sind, wie zum Beispiel das Review des<br />
Entwurfs. Zumindest bei jeder Übergabe eines Zwischenprodukts (Entwurfsdokument, Quellcode etc.) sollte ein<br />
Meilenstein definiert werden, der die Übergebenden und Empfänger des Zwischenprodukts einbezieht. Der<br />
Meilenstein legt die Kriterien für eine erfolgreiche Übergabe fest.<br />
Externe Meilensteine involvieren den Kunden, z.B. die Abnahme der Spezifikation und der Akzeptanztest.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Zeitplan: Abhängigkeiten<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 76 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Zeitplan<br />
Zeitplan: Abhängigkeiten<br />
Zeitplan: Abhängigkeiten<br />
Zwischen den Aktivitäten existieren kausale Abhängigkeiten, die festgelegt werden müssen. Beispielsweise kann nur<br />
getestet werden, wenn der Quellcode existiert.<br />
Die kausalen Abhängigkeiten führen zu einer partiellen Sequenzialisierung der Aktivitäten.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Zeitplan: Verfeinerung<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 77 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Zeitplan<br />
Zeitplan: Verfeinerung<br />
Zeitplan: Verfeinerung<br />
Grobgranulare Aktivitäten sollten verfeinert werden (siehe oben). Die Verfeinerung erlaubt auch eine getreuere<br />
Darstellung der Abhängigkeiten zwischen den Aktivitäten. So können zum Beispiel Testfälle für den Black-Box-Test<br />
(siehe das spätere Kapitel über Tests) bereits beim Vorliegen der Spezifikation vorbereitet werden.<br />
Dadurch kann die Möglichkeit zur Parallelisierung der Aktivitäten erhöht werden.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Zeitplan: Ressourcen<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 78 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Zeitplan<br />
Zeitplan: Ressourcen<br />
Zeitplan: Ressourcen<br />
Ressourcen im <strong>Software</strong>-<strong>Projekt</strong> sind in der Regel menschliche Wesen. Bei der Entwicklung eingebetteter Systeme<br />
ist z.B. auch die Zielhardware eine Ressource, die eingeplant werden muss. In vielen Fällen wird sie parallel zur<br />
<strong>Software</strong> entwickelt.<br />
Der Kunde ist eine wichtige Ressource, die eingeplant werden muss, und selten verfügbar ist.<br />
Der Begriff “Ressource” auf Menschen angewandt klingt sehr technokratisch. Das ist hier nicht so gemeint.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Zeitplan: Einplanung der Ressourcen<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 79 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Zeitplan<br />
Zeitplan: Einplanung der Ressourcen<br />
Zeitplan: Einplanung der Ressourcen<br />
Schließlich werden die Ressourcen den Aktivitäten zugewiesen. Dadurch kann sich die Dauer von Aktivitäten<br />
verlängern oder verkürzen. Sie verlängern sich zum Beispiel, weil ein Entwickler auch für quasi-zeitgleiche<br />
Aktivitäten eingeplant wurde und selbstverständlich eine begrenzte wöchentliche Arbeitszeit hat. Sie verkürzt sich,<br />
wenn mehrere Entwickler einer Aktivität zugeordnet werden. Aber Achtung! Im Gegensatz zu anderen <strong>Projekt</strong>en<br />
gilt im <strong>Software</strong>-<strong>Projekt</strong> nicht:<br />
Dauer =<br />
Aufwand<br />
Anzahl Personen<br />
Je mehr Personen an einer Aktivität beteiligt sind desto höher ist der Aufwand für Kommunikation und<br />
Abstimmung. Statt dessen gilt der Rat: Weniger und bessere Leute nehmen!<br />
Ein noch häufiger Irrglaube ist, dass man durch späte Hinzunahme zusätzlicher Leute einen in Schieflage geratenen<br />
Plan noch einhalten kann. Der Aufwand erhöht sich dann nicht nur durch erhöhte Kommunikation, sondern auch<br />
durch die Einarbeitung der Neuen.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Kritischer Pfad<br />
Definition<br />
Kritischer Pfad: die von der Dauer her längste Kette von Aktivitäten.<br />
bestimmt die Dauer des <strong>Projekt</strong>s;<br />
Verspätungen in dieser Kette schlagen sich auf die Dauer des <strong>Projekt</strong>s<br />
nieder;<br />
muss während des <strong>Projekt</strong>verlaufs stets im Auge behalten werden.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 80 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Geschriebene Codezeilen im SWP 05/06<br />
27500<br />
25000<br />
22500<br />
20000<br />
17500<br />
15000<br />
12500<br />
10000<br />
7500<br />
5000<br />
2500<br />
0<br />
LOC pro Gruppe<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 81 / 634<br />
Test<br />
Code
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Aufwandsverteilung im SWP 05/06<br />
Aufwand/h<br />
1300<br />
1200<br />
1100<br />
1000<br />
900<br />
800<br />
700<br />
600<br />
500<br />
400<br />
300<br />
200<br />
100<br />
0<br />
Aufwand nach Phasen<br />
Plan Spez. Arch. Impl. Test Doku Bespr. Sonst.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 82 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Note versus Aufwand<br />
Aufwand/h<br />
3500<br />
3000<br />
2500<br />
2000<br />
1500<br />
1000<br />
500<br />
Aufwand zu Note<br />
0<br />
1 1,5 2 2,5 3 3,5 4<br />
Note<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 83 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Planung: Soll und Ist<br />
tatsächliche Stunden<br />
6000<br />
5000<br />
4000<br />
3000<br />
2000<br />
1000<br />
Plan zu IstStunden<br />
0<br />
0 1000 2000 3000 4000 5000 6000<br />
geplante Stunden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 84 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Arbeitsstunden pro Tag<br />
Gesamtstunden<br />
1100<br />
1000<br />
900<br />
800<br />
700<br />
600<br />
500<br />
400<br />
300<br />
200<br />
100<br />
0<br />
Stunden nach Tag<br />
Tag der <strong>Projekt</strong>laufzeit<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 85 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Risiken<br />
If you do not actively attack the risks in your project, they will<br />
actively attack you.<br />
– Gilb (1988)<br />
Definition<br />
Ein Risiko ist ein Ereignis, dessen Eintreten den Erfolg des <strong>Projekt</strong>s<br />
entscheidend behindern kann.<br />
Quantifizierte Risikohöhe = Eintrittswahrscheinlichkeit × max.<br />
Schadenshöhe<br />
Risikomanagement kümmert sich um Risiken, bevor sie auftreten.<br />
Krisenmanagement kümmert sich um aufgetretene Risiken.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 86 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Risiko-Management<br />
Risikoanalyse<br />
Identifizierung der Risiken<br />
Einschätzung der Eintrittswahrscheinlichkeit<br />
Einschätzung des potentiellen Schadens<br />
Risikomaßnahmen: Planung von Gegenmaßnahmen<br />
Vermeidung: Unterlassung der Aktivität<br />
Verminderung/Begrenzung auf akzeptables Maß, z.B. Streuung oder<br />
Haftung bis zu einem Limit<br />
Abwälzung: z.B. Unterauftragnehmer<br />
Akzeptanz, wenn Kosten/Nutzen im Verhältnis stehen<br />
Risiko-Controlling: Monitoring während des <strong>Projekt</strong>s<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 87 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Risiken identifizieren<br />
Produktimmanent<br />
Produkt<br />
Technologie<br />
z.B. ungenaue Anforderungen<br />
z.B. instabile Anforderungen<br />
<strong>Projekt</strong>immanent<br />
Mensch<br />
Vorgehen<br />
Management/Organisation<br />
Infrastruktur<br />
z.B. Ressourcenprobleme<br />
z.B. mangelnde Motivation<br />
Umfeldabhängig<br />
Organisatorische Einbettung<br />
Politik<br />
Recht<br />
Kultur<br />
→ Historie: aus abgeschlossenen <strong>Projekt</strong>en lernen<br />
2009-02-09<br />
z.B. Verschiebung von<br />
Prioritäten<br />
z.B. Abhängigkeit zu anderen<br />
<strong>Projekt</strong>en<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 88 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Erfahrungen aus dem SWP 05/06<br />
Risiken im <strong>Software</strong>-<strong>Projekt</strong><br />
Zu Risiken und Nebenwirkungen fragen Sie Ihren<br />
Risiken identifizieren<br />
Produktimmanent<br />
Produkt<br />
Technologie<br />
z.B. ungenaue Anforderungen<br />
z.B. instabile Anforderungen<br />
<strong>Projekt</strong>immanent<br />
Mensch<br />
Vorgehen<br />
Management/Organisation<br />
Infrastruktur<br />
z.B. Ressourcenprobleme<br />
z.B. mangelnde Motivation<br />
. . . gesunden Menschenverstand, erfahrene <strong>Software</strong>-Entwickler, die Tageszeitung, die Literatur über<br />
<strong>Software</strong>technik . . .<br />
→ Historie: aus abgeschlossenen <strong>Projekt</strong>en lernen<br />
Umfeldabhängig<br />
Organisatorische Einbettung<br />
Politik<br />
Recht<br />
Kultur<br />
z.B. Verschiebung von<br />
Prioritäten<br />
z.B. Abhängigkeit zu anderen<br />
<strong>Projekt</strong>en
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Personalausfall<br />
Häufigkeit<br />
40%<br />
35%<br />
30%<br />
25%<br />
20%<br />
15%<br />
10%<br />
5%<br />
0%<br />
Personalausfall<br />
0 1 2 3 4 5 split<br />
Ausfälle<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 90 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Note versus Personalausfall<br />
Durchschnittsnote<br />
Note nach Personalausfall<br />
4<br />
3,5<br />
3<br />
2,5<br />
2<br />
1,5<br />
1<br />
0 1 2 3 4 5 split<br />
Ausfälle<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 91 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
<strong>Projekt</strong>abbruch<br />
31% aller <strong>Software</strong>-<strong>Projekt</strong>e werden vor Abschluss abgebrochen; weitere<br />
53% sprengen den Zeit- oder Kostenrahmen oder liefern nicht die volle<br />
Funktionalität (Standish Group 1994) 8<br />
Gilt: Abbruch = Misserfolg wegen mangelhaftem Management?<br />
8 Dieser Bericht ist nicht unumstritten. Es gibt eine Reihe anderer Untersuchungen<br />
mit unterschiedlichen Ergebnissen Buschermöhle u. a. (2006); Sauer und Cuthbertson<br />
(2003); Standish Group (2004)<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 92 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Projekt</strong>abbruch<br />
<strong>Projekt</strong>abbruch<br />
31% aller <strong>Software</strong>-<strong>Projekt</strong>e werden vor Abschluss abgebrochen; weitere<br />
53% sprengen den Zeit- oder Kostenrahmen oder liefern nicht die volle<br />
Funktionalität (Standish Group 1994) 8<br />
Gilt: Abbruch = Misserfolg wegen mangelhaftem Management?<br />
8 Dieser Bericht ist nicht unumstritten. Es gibt eine Reihe anderer Untersuchungen<br />
mit unterschiedlichen Ergebnissen Buschermöhle u. a. (2006); Sauer und Cuthbertson<br />
(2003); Standish Group (2004)<br />
Die Statistik über den Abbruch von <strong>Projekt</strong>en legt die Folgerung nahe, dass die <strong>Projekt</strong>e abgebrochen wurden, weil<br />
sie schlecht geführt wurden. Diese Implikation ist falsch und gefährlich. Sie ist falsch, weil viele gut geführte<br />
<strong>Projekt</strong>e abgebrochen werden, weil sich ihre ursprünglichen Annahmen geändert haben. Sie werden aus<br />
vertretbarem Grund beendet. Dies ist vor allem in Feldern mit schnellem Wandel häufig anzutreffen.<br />
Die Implikation ist gefährlich, weil <strong>Projekt</strong>manager sich der Verführung konfrontiert sehen, ein eigentlich obsoletes<br />
<strong>Projekt</strong> weiterzuführen, um nicht als Versager dazustehen. Es gibt oft gute, vertretbare Gründe, ein <strong>Projekt</strong><br />
abzubrechen. Der Abbruch ist dann weiser als die Fortführung.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Unvollständige Anforderungen (13 % 9 ):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
meistens häufig<br />
<strong>Projekt</strong> startet ohne klare Idee der<br />
Bedürfnisse und Prioritäten der<br />
Stakeholder.<br />
2009-02-09<br />
9 relativ zu den abgebrochenen <strong>Projekt</strong>en<br />
Stakeholder können sich nicht auf<br />
Anforderungen einigen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 93 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Unvollständige Anforderungen (13 % 9 ):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
meistens häufig<br />
<strong>Projekt</strong> startet ohne klare Idee der<br />
Bedürfnisse und Prioritäten der<br />
Stakeholder.<br />
9 relativ zu den abgebrochenen <strong>Projekt</strong>en<br />
Die angegebenen Zahlen hat Barry Boehm anhand von <strong>Projekt</strong>en ermittelt, bei denen er selbst involviert war (5-6<br />
<strong>Projekt</strong>e für digitale Bibliotheken pro Jahr, Begutachtung von ungefähr 20 Berichten über abgebrochene<br />
Industrieprojekte, die unter Beteiligung von den 30 Angehörigen des Center for <strong>Software</strong> Engineering, das er leitet.<br />
Andere Autoren berichten von Abbruchraten mit 40% und 50%, insbesondere für Gebiete, in denen neue Produkte<br />
eingeführt werden Hayes (1997).<br />
Die meisten hier genannten Ursachen für Abbrüche stellen handfeste Risiken für Ihr <strong>Software</strong>-<strong>Projekt</strong> dar, denen Sie<br />
sich bewusst sein sollten. Die Fehler, die bei schlecht geführten <strong>Projekt</strong>en gemacht werden, sollten Sie meiden.<br />
Für Sie folgt hier: Machen Sie die Anforderungen und Prioritäten Ihres Kunden fest, bevor Sie anfangen zu<br />
entwerfen und zu implementieren.<br />
Stakeholder können sich nicht auf<br />
Anforderungen einigen.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelhafte Einbeziehung der Benutzer (12 %):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
<strong>Projekt</strong> kommuniziert nicht mit<br />
Benutzer.<br />
2009-02-09<br />
gleich häufig<br />
Benutzer kommuniziert nicht mit<br />
<strong>Projekt</strong>.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 94 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelhafte Einbeziehung der Benutzer (12 %):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
gleich häufig<br />
<strong>Projekt</strong> kommuniziert nicht mit<br />
Benutzer.<br />
Für Sie folgt hier: Suchen Sie Ihren Kunden auf. Beziehen Sie ihn bei der Anforderungsanalyse ein. Machen Sie eine<br />
anständige und umfassende Ist-Analyse. Lassen Sie den Kunden das Pflichtenheft prüfen (verwenden Sie dabei eine<br />
ihm passende Terminologie; definieren Sie ein Begriffslexikon). Entwickeln Sie Prototypen, die Sie dem Kunden<br />
vorführen. Halten Sie Kontakt mit dem Kunden auch während der Implementierungsphase. Prüfen Sie periodisch,<br />
ob sich seine Prioritäten und Anforderungen geändert haben.<br />
Benutzer kommuniziert nicht mit<br />
<strong>Projekt</strong>.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangel an Ressourcen (11 %):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
gleich häufig; schlecht geführte <strong>Projekt</strong>e haben jedoch niedrigeren<br />
Geschäftswert und sind tendenziell eher betroffen<br />
<strong>Projekt</strong> hat wenig Geschäftswert.<br />
Budgeteinschnitte, Verkleinerungen, Repriorisierungen.<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 95 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangel an Ressourcen (11 %):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
gleich häufig; schlecht geführte <strong>Projekt</strong>e haben jedoch niedrigeren<br />
Geschäftswert und sind tendenziell eher betroffen<br />
<strong>Projekt</strong> hat wenig Geschäftswert.<br />
Budgeteinschnitte, Verkleinerungen, Repriorisierungen.<br />
Für Sie folgt hier: Ihre Ressource ist im Wesentlichen die Zeit; insbesondere auch die Zeit Ihrer Mitstreiter im<br />
<strong>Projekt</strong>. Deren Prioritäten sind nicht immer die Ihrigen. Manche <strong>Projekt</strong>teilnehmer werden es an Einsatz vermissen<br />
lassen.<br />
Weitere potenziell mangelnde Ressourcen sind Rechner, Netzwerke und <strong>Software</strong>-Werkzeuge, die Sie für Ihr <strong>Projekt</strong><br />
benötigen.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Unrealistische Erwartungen (10 %):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
gleich häufig<br />
Machbarkeit wurde nicht geprüft. Machbarkeitsprüfung fiel negativ<br />
aus.<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 96 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Unrealistische Erwartungen (10 %):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
gleich häufig<br />
Machbarkeit wurde nicht geprüft. Machbarkeitsprüfung fiel negativ<br />
aus.<br />
Unrealistische Erwartungen des Benutzers liegen in dessen Natur. Er kennt selten technische Randbedingungen und<br />
Grenzen der Berechenbarkeit. <strong>Software</strong> gilt als beliebig flexibel: “Ich dachte, da müssen Sie nur ein Bit umkippen.”.<br />
Und selbstverständlich will er stets noch einmal über den Preis reden.<br />
Die Tutoren werden versuchen, den Benutzer realistisch zu simulieren.<br />
Aber auch Sie selbst könnten zu unrealistischen Erwartungen neigen. Sie sind möglicherweise nicht mit dem<br />
Anwendungsbereich vertraut genug oder unterschätzen den Aufwand an Kommunikation, den ein<br />
Mehrpersonenprojekt mit sich bringt, und den Aufwand für die Analyse, den Entwurf und den Test.<br />
Letztlich steht Ihnen circa ein Tag pro Woche für das <strong>Projekt</strong> zur Verfügung, und diese <strong>Projekt</strong>tage sind<br />
unterbrochen von vielen anderen Aktivitäten.<br />
Für Sie folgt hier: Klopfen Sie frühzeitig die Anforderungen des Kunden auf Machbarkeit ab. Erstellen Sie<br />
Prototypen, um die Machbarkeit kritischer Anforderungen zu überprüfen. Planen Sie realistisch. Geben sie nicht in<br />
allen Punkten dem Kunden nach, wenn dieser seine Wünsche äußert. Es gilt “quid pro quo”: etwas für etwas. Will<br />
er X, muss er sich bei Y beschränken. Verlangen Sie ihm Prioritäten ab.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelnde Unterstützung bei der Ausführung (9 %):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
meistens häufig<br />
Manager machen unverifizierte<br />
Annahmen über Unterstützung (z.B.<br />
verlassen sich darauf, dass andere<br />
Initiativen repriorisiert werden, um<br />
<strong>Projekt</strong> zu unterstützen).<br />
2009-02-09<br />
Unterstützung wird entzogen<br />
(z.B. Verantwortliche werden<br />
ausgetauscht; neue<br />
Verantwortliche haben andere<br />
Prioritäten und Agenda).<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 97 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelnde Unterstützung bei der Ausführung (9 %):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
meistens häufig<br />
Manager machen unverifizierte<br />
Annahmen über Unterstützung (z.B.<br />
verlassen sich darauf, dass andere<br />
Initiativen repriorisiert werden, um<br />
<strong>Projekt</strong> zu unterstützen).<br />
Sie müssen sich mit Mitgliedern Ihrer Gruppe und auch mit anderen Gruppen auseinander setzen. Der Betreuer/die<br />
Betreuerin betreut mehrere Gruppen und hat noch viele andere Pflichten. Teilnehmer wie Betreuer sind<br />
möglicherweise zeitweise oder auch dauerhaft nicht verfügbar.<br />
Für Sie folgt hier: Seien Sie explizit darüber, was Sie von anderen erwarten und auch bis wann Sie etwas erwarten.<br />
Kommunizieren Sie!<br />
Unterstützung wird entzogen<br />
(z.B. Verantwortliche werden<br />
ausgetauscht; neue<br />
Verantwortliche haben andere<br />
Prioritäten und Agenda).
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Anforderungen ändern sich (9%):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
meistens nicht selten<br />
Änderungen werden akzeptiert, ohne<br />
dass Budget und <strong>Projekt</strong>plan<br />
angepasst werden.<br />
2009-02-09<br />
Folgekosten der Änderung<br />
überwiegen den Nutzen des<br />
<strong>Projekt</strong>s.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 98 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Anforderungen ändern sich (9%):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
meistens nicht selten<br />
Änderungen werden akzeptiert, ohne<br />
dass Budget und <strong>Projekt</strong>plan<br />
angepasst werden.<br />
Die Anforderungen sind am Anfang nicht klar verstanden. Der Kunde selbst wird sich im Laufe des <strong>Projekt</strong> klarer<br />
darüber, was er eigentlich will. Rahmenbedingungen ändern sich.<br />
Die Anforderungen sind selten als stabil zu betrachten.<br />
Für Sie folgt hier: Halten Sie vertraglich fest, wie Sie und der Kunde mit Änderungen umgehen wollen. Antizipieren<br />
Sie mögliche Änderungen. Überlegen Sie sich gut, welche Änderung Sie akzeptieren. Seien Sie sich über die<br />
Konsequenzen einer Änderung im Klaren.<br />
Folgekosten der Änderung<br />
überwiegen den Nutzen des<br />
<strong>Projekt</strong>s.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelhafte Planung (8%):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
immer —<br />
<strong>Projekt</strong>manager haben keine<br />
Ahnung, wo sie sich befinden und<br />
wann das <strong>Projekt</strong> fertig wird.<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 99 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelhafte Planung (8%):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
immer —<br />
<strong>Projekt</strong>manager haben keine<br />
Ahnung, wo sie sich befinden und<br />
wann das <strong>Projekt</strong> fertig wird.<br />
Sie sind weder mit dem Anwendungsbereich noch mit einem <strong>Projekt</strong> dieser Art vertraut. Sie werden es besonders<br />
schwer haben.<br />
Für Sie folgt: Seien Sie nicht zu optimistisch. Unterschätzen Sie nicht das Problem, insbesondere in seinen Details,<br />
und überschätzen Sie nicht sich selbst.<br />
Planen Sie und seien Sie sich zu jedem Zeitpunkt darüber im Klaren, wo sie sich tatsächlich befinden und was Ihr<br />
Planziel war. Seien Sie vorsichtig in dem Glauben “Das holen wir später wieder ein”.<br />
Wenn Soll und Ist zu weit auseinander klaffen, reagieren Sie. Sprechen Sie frühzeitig mit Ihrem Kunden über<br />
mögliche Einschränkungen bei der Leistung. Der Kunde ist sehr wahrscheinlich besser bedient, wenn er wenigsten<br />
etwas bekommt, und nicht gar nichts. Das Vertrauensverhältnis wäre auf immer zerrüttet, wenn Sie ihm erst am<br />
Tag der Auslieferung über den wahren Zustand Ihres <strong>Projekt</strong>s aufklären.<br />
Denken Sie an die Manager von TollCollect, die noch einen Monat vor der geplanten Einführung behauptet haben,<br />
sie würden den Termin halten.
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Kein Nutzen (8%):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
gleich häufig in Feldern mit schnellem Wandel<br />
Gute <strong>Projekt</strong>manager verfolgen<br />
Trends und erkennen<br />
nachlassenden Nutzen früher; sie<br />
reagieren frühzeitiger mit<br />
Abbruch.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 100 / 634<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelndes IT-Management (6%):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
immer —<br />
Offensichtlich mangelhaftes Management.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 101 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelndes IT-Management (6%):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
immer —<br />
Offensichtlich mangelhaftes Management.<br />
Gehen Sie in die Vorlesung. Die Vorlesung möchte Sie genau hiervor bewahren. Kommen Sie nicht allein weiter,<br />
holen sich den Rat eines externen Consultants, sprich Ihres Tutors, ein.<br />
Sollten Sie nicht selbst der <strong>Projekt</strong>manager sein, dann sprechen Sie mit ihm offen über das Problem. Ein<br />
<strong>Projekt</strong>leiter ist kein General, sondern ein Dienstleister für die <strong>Projekt</strong>mitglieder. Er soll die Übersicht wahren und<br />
das <strong>Projekt</strong> zusammenhalten. Schafft er dies nicht, obwohl Sie mit ihm darüber geredet haben, wechseln Sie Ihn aus.<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelndes Verständnis der Technologie (4%):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
allermeistens —<br />
Fehlende Kenntnisse der Entwickler<br />
und Manager; <strong>Projekt</strong>e, die niemals<br />
hätten begonnen werden sollen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 102 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Gründe für <strong>Projekt</strong>abbruch nach Boehm (2000)<br />
Mangelndes Verständnis der Technologie (4%):<br />
Ursache bei<br />
schlecht geführtem <strong>Projekt</strong> gut geführtem <strong>Projekt</strong><br />
allermeistens —<br />
Fehlende Kenntnisse der Entwickler<br />
und Manager; <strong>Projekt</strong>e, die niemals<br />
hätten begonnen werden sollen.<br />
Bilden Sie Experten, die sich mit spezifischen technischen Problemen gezielt auseinander setzen. Bauen Sie<br />
Prototypen in einer Technologie, die Sie noch nicht beherrschen. Drehen Sie nicht gleichzeitig an zu vielen<br />
Schrauben: Nicht allen Technologien gleichzeitig hinterherlaufen, sondern eine nach der anderen inkrementell<br />
einführen. Betrachten Sie das Problem unbekannter Technologien frühzeitig in ihrem <strong>Projekt</strong>plan (räumen Sie<br />
zusätzliche Zeit hierfür ein). Bedenken Sie, dass es nicht ausreicht, mehrere Technologien isoliert zu beherrschen.<br />
Sie könnten Ihr blaues Wunder erleben, wenn Sie versuchen, diese Technologien miteinander zu integrieren.<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Menschliche Wahrnehmung von Risiken<br />
Selbstgewählte Gefahren erscheinen geringer als aufgezwungene.<br />
Prinzipiell kontrollierbare Risiken sind akzeptabler als solche, auf die<br />
wir scheinbar keinen Einfluss haben.<br />
Natürliche Risiken werden eher hingenommen als von Menschen<br />
geschaffene.<br />
Katastrophen alarmieren uns mehr als der alltägliche Wahnsinn.<br />
Risiken, die von schwer fassbaren Techniken ausgehen, werden eher<br />
wahrgenommen als die von vertrauten Techniken.<br />
Schlechte Nachrichten werden eher geglaubt als positive.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 103 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Allgemein:<br />
Planung<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Menschliche Wahrnehmung von Risiken<br />
Menschliche Wahrnehmung von Risiken<br />
Selbstgewählte Gefahren erscheinen geringer als aufgezwungene.<br />
Prinzipiell kontrollierbare Risiken sind akzeptabler als solche, auf die<br />
wir scheinbar keinen Einfluss haben.<br />
Natürliche Risiken werden eher hingenommen als von Menschen<br />
geschaffene.<br />
Katastrophen alarmieren uns mehr als der alltägliche Wahnsinn.<br />
Risiken, die von schwer fassbaren Techniken ausgehen, werden eher<br />
wahrgenommen als die von vertrauten Techniken.<br />
Schlechte Nachrichten werden eher geglaubt als positive.<br />
• Die Risiken bestimmter Sportarten wie Skifahren oder Reiten gehen wir bewusst ein. Dagegen wehren wir uns gegen<br />
Konservierungsstoffe in der Nahrung.<br />
• Fettes, nährstoffarmes Essen ist beliebt, während Leitungswasser auch dann gemieden wird, wenn die Trinkqualität<br />
garantiert ist.<br />
• In der Erde vorkommendes Radon erscheint uns harmlos im Vergleich zur selben Strahlungsintensität aus künstlichen<br />
Quellen.<br />
• Werden nach einem Schiffsunglück Giftbeutel oder Ölklumpen an die Strände geschwemmt, ist die Aufregung groß,<br />
während die schleichende Vergiftung der Meere kaum zur Kenntnis genommen wird.<br />
• Eine Müllverbrennungsanlage mit relativ geringen Emissionen wird bekämpft, der Autoverkehr hingegen verteidigt.<br />
• Stürme und Überschwemmungen gelten als Beweis für den Treibhauseffekt, doch die geringer gewordene Verschmutzung<br />
des Rheins halten viele für Propaganda der Industrie.<br />
In der <strong>Software</strong>-Entwicklung:<br />
• Eine vom Kunden gewollte fremde Technologie erscheint uns riskanter als eine selbst gewollte fremde Technologie.<br />
• Wie scheuen uns eine <strong>Software</strong>-Bibliothek zu verwenden und implementieren unsere Hash-Tabelle lieber selbst.<br />
• Rutschige Straßenverhältnisse erscheinen uns harmlos im Vergleich zu Fehlern in der <strong>Software</strong> des Bremssystems im<br />
Auto.<br />
• Der <strong>Projekt</strong>abbruch alarmiert uns mehr als die schleichende Verschlechterung der Qualität, die wir ausliefern.<br />
• Die Einführung der Cleanroom-Development-Methode erscheint uns riskanter als die Code-and-Fix-Methode.<br />
• Das Gerücht, dass das <strong>Projekt</strong> in Schieflage geraten ist, macht hellhörig; eine Aussage, die Deadline werde eingehalten,<br />
glauben wir gerne.<br />
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Wiederholungsfragen I<br />
Erstellen Sie einen <strong>Projekt</strong>plan für ein <strong>Software</strong>-<strong>Projekt</strong>.<br />
Was sind die Elemente eines <strong>Projekt</strong>s? Insbesondere was ist ein<br />
Meilenstein und eine Baseline?<br />
Wann wird geplant?<br />
Wie geht man beim Planen vor?<br />
Was ist der Inhalt eines <strong>Projekt</strong>plans?<br />
Was ist ein Gantt-Diagramm?<br />
Was ist ein kritischer Pfad? Welche Bedeutung hat er?<br />
Was sind die Ressourcen eines <strong>Software</strong>-<strong>Projekt</strong>s? Was sind deren<br />
Besonderheiten?<br />
Was sind typische Risiken in einem <strong>Software</strong>-<strong>Projekt</strong>? Wie geht man<br />
mit ihnen um?<br />
Was sind die Besonderheiten eines <strong>Software</strong>-<strong>Projekt</strong>s?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 104 / 634
Planung eines <strong>Software</strong>-<strong>Projekt</strong>s<br />
Wiederholungsfragen II<br />
Welche Risiken sind typisch für <strong>Software</strong>-<strong>Projekt</strong>e? Wie ist mit ihnen<br />
umzugehen?<br />
Erläutern Sie Risiko-Management.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 105 / 634<br />
Anforderungsanalyse<br />
Anforderungsanalyse<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Rainer<strong>Projekt</strong> Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 106 / 634
Anforderungsanalyse<br />
Lernziele<br />
2009-02-09<br />
Ist- und Soll-Zustand ermitteln können<br />
Anforderungsspezifikation schreiben können<br />
Anforderungsspezifikation begutachten können<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 108 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Lernziele<br />
Lernziele<br />
Lernziele<br />
Ist- und Soll-Zustand ermitteln können<br />
Anforderungsspezifikation schreiben können<br />
Anforderungsspezifikation begutachten können<br />
Bevor ein System implementiert werden kann, müssen die Anforderungen an das System erhoben werden. Dieser<br />
Aufgabe widmet sich die Anforderungsanalyse. Ihr Ziel ist es, einen möglichst genauen und vollständigen Katalog<br />
von Anforderungen an ein System zu erfassen und zu beschreiben. Die Anforderungen beschreiben ein<br />
Soll-Konzept, das Verbesserung für ein Problem des Kunden schaffen soll. Damit dieses Konzept auch wirklich hilft,<br />
ist es notwendig, zuerst einmal zu verstehen, was das Problem des Kunden ist. Insofern ist die Analyse des<br />
Ist-Zustands und seiner Probleme Teil einer Anforderungsanalyse.<br />
Das Ergebnis der Anforderungsanalyse ist der Katalog der Anforderungen. In welcher Form dieser Katalog<br />
beschrieben ist, hängt vom Vorgehensmodell ab. Bei dokumentengetriebenen Vorgehensmodellen – wie dem<br />
Wasserfallmodell – werden die Anforderungen in Form einer Anforderungsspezifikation schriftlich festgehalten. In<br />
vielen agilen Vorgehensmodellen erfolgt die Anforderungsspezifikation als Zuruf des Kunden.<br />
Wann und wie oft die Anforderungsanalyse durchgeführt wird, hängt ebenso stark vom Vorgehensmodell zur<br />
<strong>Software</strong>entwicklung ab. Beim Wasserfallmodell wird die Anforderungsanalyse nur einmal und ganz zu Anfang<br />
durchgeführt. Beim inkrementellen Vorgehen, bei dem die Entwicklung in kleinen abgeschlossenen Inkrementen des<br />
zu entwickelnden Systems erfolgt, wird sie jedes Mal wieder vor der Entwicklung jedes Inkrements durchgeführt.<br />
Beim Extreme-Programming hat man durch die Präsenz eines Kundenvertreters vor Ort eine fast kontinuierlich<br />
stattfindende Anforderungsanalyse.<br />
In diesem Modul geht es um die Durchführung der Anforderungsanalyse. Wir streben hier die schriftliche<br />
Dokumentation der Anforderungen in Form einer Anforderungsspezifikation an, da dies in den meisten Fällen eine<br />
Reihe von Problemen vermeidet. Der Inhalt dieses Abschnitts ist jedoch auch für agiles Vorgehen ohne schriftliche<br />
Spezifikation der Anforderungen relevant, weil auch orale Überlieferung zu allen Aspekten der<br />
Anforderungsspezifikation Stellung nehmen muss.<br />
Übersicht:<br />
Zunächst widmen wir uns der Frage, warum die Anforderungsanalyse so wichtig aber leider auch schwierig ist.<br />
Dann lernen wir die grundsätzlichen Schritte der Anforderungsanalyse kennen. Dazu gehören die Erfassung des<br />
Ist-Zustands und seiner Probleme durch die Ist-Analyse, die angestrebte Verbesserung durch ein Soll-Konzept durch<br />
die Soll-Analyse und die genaue und vollständige Beschreibung der Anforderungen in Form einer<br />
Anforderungsspezifikation. Wir vertiefen alle Schritte und lernen Techniken für diese einzelnen Schritte kennen.
Anforderungsanalyse<br />
Wegweiser<br />
Herausforderungen<br />
Warum sind die Anforderungen so kritisch?<br />
Warum ist ihre Erhebung so schwer?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 109 / 634<br />
Anforderungsanalyse<br />
Kosten für Änderungen<br />
Kosten für Änderung<br />
1 x<br />
1,5 − 6 x<br />
Definition Entwicklung<br />
60 − 100 x<br />
nach Auslieferung<br />
Zeit<br />
Pressman (2003)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 110 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Herausforderungen<br />
Kosten für Änderungen<br />
Kosten für Änderungen<br />
Kosten für Änderung<br />
1 x<br />
1,5 − 6 x<br />
60 − 100 x<br />
Zeit<br />
Definition Entwicklung nach Auslieferung<br />
Die Anforderunganalyse ist von zentraler Bedeutung für den Erfolg eines <strong>Projekt</strong>es. Passieren hier Fehler, entsteht<br />
ein System, was an den Bedürfnissen des Kunden vorbei entwickelt und damit unbrauchbar wird. Fehler in der<br />
Anforderungsanalyse können zwar oft noch in späteren Phasen entdeckt und dann korrigiert werden, die Korrektur<br />
dieser Fehler ist jedoch meist mit einem erheblichen Mehraufwand verbunden. Pressman (2003) berichtet von den<br />
relativen Kosten für Korrekturen von Fehlern in der Anforderungsanalyse in Abhängigkeit vom Zeitpunkt, zu dem<br />
diese Fehler bekannt werden. Findet man einen Fehler der Anforderungsspezifikation in späteren Aktivitäten der<br />
Entwicklung, also beim Entwurf, der Implementierung oder dem Test noch vor Auslieferung, dann können die<br />
Kosten um einen Faktor 1,5 bis 6 höher sein als die Korrekturkosten, die entstanden wären, hätte man den Fehler<br />
noch während der Anforderungsanalyse gefunden. Wird der Fehler noch später gefunden, also nach der Auslieferung<br />
der <strong>Software</strong>, kann er gar um einen Faktor 60 bis 100 höher sein. Es entstehen dann nicht nur zusätzliche Kosten<br />
für die Nachbesserung von Anforderungsspezifikation und Entwurf, Fehlerkorrektur und Restrukturierung der<br />
Implementierung sowie Wiederholung des Tests. Es entstehen darüber hinaus auch Kosten für die Beseitigung von<br />
Auswirkungen des Fehlers. Hat eine eingebettete <strong>Software</strong> in einem Automobil beispielsweise einen Fehler, so<br />
müssen alle Fahrzeuge in der Werkstatt überholt werden. Dadurch entstehen hohe direkte Kosten, aber auch noch<br />
indirekte Kosten durch den Imageverlust des Automobilherstellers, wenn sich der Imageverlust auf die<br />
Verkaufszahlen auswirkt.<br />
Anforderungsanalyse<br />
Warum die Anforderungsanalyse so schwer ist<br />
Kunden wissen häufig nicht, was sie genau wollen, bzw. können es<br />
nicht genau äußern<br />
Kunden sprechen ihre Sprache, die von Entwicklern nicht verstanden<br />
wird<br />
unterschiedliche Kundengruppen haben unterschiedliche<br />
Anforderungen, die sich mitunter widersprechen<br />
politische Entscheidungen können Anforderungen beeinflussen<br />
die Welt ändert sich, die Anforderungen an die <strong>Software</strong> auch; auch<br />
während der Entwicklung<br />
Pressman (2003)<br />
– Sommerville (2004)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 111 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Herausforderungen<br />
Warum die Anforderungsanalyse so schwer ist<br />
Warum die Anforderungsanalyse so schwer ist<br />
Kunden wissen häufig nicht, was sie genau wollen, bzw. können es<br />
nicht genau äußern<br />
Kunden sprechen ihre Sprache, die von Entwicklern nicht verstanden<br />
wird<br />
unterschiedliche Kundengruppen haben unterschiedliche<br />
Anforderungen, die sich mitunter widersprechen<br />
politische Entscheidungen können Anforderungen beeinflussen<br />
die Welt ändert sich, die Anforderungen an die <strong>Software</strong> auch; auch<br />
während der Entwicklung<br />
Die Anforderungsanalyse ist schwierig, so dass die Wahrscheinlichkeit, dass wir Fehler machen, recht hoch ist.<br />
Sommerville (2004) nennt hierfür eine Reihe von Gründen:<br />
• Die Kunden wissen häufig nicht genau, was sie genau wollen, beziehungsweise können es nicht genau äußern.<br />
– Sommerville (2004)<br />
• Kunden sind Experten in ihrem Anwendungsbereich, haben jedoch in der Regel wenig Kenntnisse in der <strong>Informatik</strong>. Bei<br />
den <strong>Informatik</strong>ern verhält es sich meist umgekehrt. Es treffen also Menschen aufeinander, die erst zu einer gemeinsamen<br />
Sprache und einem gemeinsamen Verständnis finden müssen.<br />
• Es gibt meist nicht den Kunden oder Benutzer, sondern sehr viele mit recht unterschiedlichen Anforderungen, die sich<br />
nicht selten widersprechen. Bei der Anforderungsanalyse müssen also Konflikte aufgedeckt und Kompromisse<br />
geschlossen werden.<br />
• Die Anforderungen werden nicht selten durch politische Entscheidungen beeinflusst. Das aus organisatorischer und<br />
technischer Sicht bestmögliche Soll-Konzept kann dann immer noch aus rein politischen Gründen scheitern.<br />
Beispielsweise sieht der Abteilungsleiter durch eine Änderung im Arbeitsfluss dank softwaretechnischer Unterstützung<br />
plötzlich seinen Einfluss gefährdet und boykottiert die angestrebte Lösung.<br />
• Die Welt ist einem ständigen Wandel unterworfen. Weil sich die Welt ändert, ändern sich notwendigerweise auch die<br />
Anforderungen an die <strong>Software</strong>, die einen Arbeitsfluss dieser Welt automatisiert. Das geschieht sicherlich in der Zeit<br />
nach Auslieferung der <strong>Software</strong> in der so genannten Wartungsphase, d.h. während ihres Einsatzes, aber nicht selten auch<br />
schon während der Entwicklung. Mit der Anforderungsanalyse ist man also selten fertig. Man sollte deshalb idealerweise<br />
wahrscheinliche zukünftige Änderungen vorwegsehen und schon in der initialen Entwicklung berücksichtigen.<br />
Anforderungsanalyse<br />
Bewusstseinsebenen<br />
bewusstes Wissen (20-30%)<br />
Wissen, über das man sich im Klaren ist oder das in seiner vollen<br />
Bedeutung klar erkannt wird<br />
unbewusstes Wissen (≤40%)<br />
Wissen, das sich dem Bewusstsein im Moment nicht darbietet, aber<br />
dennoch handlungsbestimmend ist, und potenziell aufgerufen werden<br />
kann<br />
unterbewusstes Wissen<br />
unbekannte Wünsche, die erst von außen herangetragen werden<br />
müssen, um als Anforderungen erkannt zu werden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 112 / 634
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Herausforderungen<br />
Bewusstseinsebenen<br />
Bewusstseinsebenen<br />
bewusstes Wissen (20-30%)<br />
Wissen, über das man sich im Klaren ist oder das in seiner vollen<br />
Bedeutung klar erkannt wird<br />
unbewusstes Wissen (≤40%)<br />
Wissen, das sich dem Bewusstsein im Moment nicht darbietet, aber<br />
dennoch handlungsbestimmend ist, und potenziell aufgerufen werden<br />
kann<br />
unterbewusstes Wissen<br />
unbekannte Wünsche, die erst von außen herangetragen werden<br />
müssen, um als Anforderungen erkannt zu werden<br />
Dass Benutzer oft nicht genau wissen, was sie wollen beziehungsweise es nicht sagen, liegt meist nicht an einem<br />
Mangel an Kenntnis, Vorstellungsvermögen oder Kooperationsbereitschaft, sondern an der Gestalt menschlichen<br />
Wissens. Menschliches Wissen lässt sich unterteilen in drei ungefähr gleich große Bereiche.<br />
Das bewusste Wissen ist solches Wissen, über das man sich im Klaren ist oder das in seiner vollen Bedeutung klar<br />
erkannt wird. Fragt man einen Radfahrer danach, wie man mit einem Fahrrad eine Kurve fährt, so wird er einem<br />
sicherlich antworten, dass man hierfür den Lenker einschlagen muss. Das bewusste Wissen ist durch direkte Fragen<br />
unmittelbar zugänglich.<br />
Das unbewusste Wissen ist solches Wissen, das sich dem Bewusstsein im Moment nicht darbietet, aber dennoch<br />
handlungsbestimmend ist und potenziell aufgerufen werden kann. Wird man denselben Radfahrer darauf<br />
aufmerksam machen, dass man beobachtet habe, dass er seinen Körper neigt, bevor er den Lenker zur Kurve<br />
einschlägt, wird er die maßgebende Rolle des Körpergewichtes bestätigen. An das unbewusste Wissen vermag man<br />
durch Beobachtung und Nachfragen zu kommen.<br />
Während sowohl das bewusste als auch das unbewusste Wissen wenigstens indirekt erschlossen werden kann,<br />
kommt man an die dritte Gestalt menschlichen Wissens kaum oder nur sehr schwer heran. Ein Drittel des<br />
menschlichen Wissens ist dem Wissenden selbst nämlich gar nicht bewusst. Das unterbewusste Wissen besteht aus<br />
dem uns nicht bekannten Wissen, das dennoch für unsere Handlungen maßgebend ist. Oft sind es Ängste,<br />
unbewusste Wünsche oder Triebe, die für uns handlungsbestimmend sind. Warum der Radfahrer in bestimmten<br />
Situationen es scheut, eine Kurve schneller zu nehmen, hat vielleicht damit zu tun, dass er sich einmal kräftig durch<br />
einen Sturz blamiert hat, als er einst versuchte, eine Kurve besonders schnittig zu nehmen, um seinen Freunden zu<br />
imponieren. Unbewusste Anforderungen müssen erst von außen an uns herangetragen werden, um als<br />
Anforderungen erkannt zu werden.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Herausforderungen<br />
Bewusstseinsebenen<br />
Bewusstseinsebenen<br />
bewusstes Wissen (20-30%)<br />
Wissen, über das man sich im Klaren ist oder das in seiner vollen<br />
Bedeutung klar erkannt wird<br />
unbewusstes Wissen (≤40%)<br />
Wissen, das sich dem Bewusstsein im Moment nicht darbietet, aber<br />
dennoch handlungsbestimmend ist, und potenziell aufgerufen werden<br />
kann<br />
unterbewusstes Wissen<br />
unbekannte Wünsche, die erst von außen herangetragen werden<br />
müssen, um als Anforderungen erkannt zu werden<br />
Folgt für den <strong>Informatik</strong>er, der eine Anforderungsanalyse durchführt, nun daraus, dass er besser eine Ausbildung als<br />
Psychoanalytiker absolvieren sollte? Wenngleich das sicherlich helfen könnte, so ist es für unsere Zwecke meist<br />
ausreichend, sich über diese Formen des Wissens im Klaren zu sein und passende Techniken anzuwenden, um an<br />
möglichst viel Wissen und Anforderungen zu kommen. Mit reinen Fragetechniken wird man zum überwiegenden Teil<br />
allein das bewusste Wissen erschließen können. Mit Beobachtungen und Nachfragen kann man noch den Bereich<br />
des unbewussten Wissens erfassen. Bei der Einschätzung der Aussagen eines Benutzers sollte man sich aber auch<br />
Gedanken machen, warum er eine Antwort in einer bestimmten Weise geben könnte oder warum er sich auf eine<br />
bestimme Art und Weise verhält. Es könnten zum Beispiel Ängste vor der Umstellung durch die softwaretechnische<br />
Lösung sein, die einen Menschen unbewusst umtreiben – seien es berechtigte Ängste um den möglichen Verlust des<br />
Arbeitsplatzes oder einfach nur die allgemeine Angst, durch die Neuerungen überfordert zu werden.
Anforderungsanalyse<br />
Basisfaktoren<br />
Minimalanforderungen<br />
→ Mangel führt zu massiver<br />
Unzufriedenheit<br />
→ mehr als Zufriedenheit ist nicht möglich<br />
Leistungsfaktoren<br />
bewusst verlangte Sonderausstattung<br />
→ bei Erfüllung: Kundenzufriedenheit<br />
→ sonst: Unzufriedenheit<br />
Begeisternde Faktoren<br />
unbewusste Wünsche,<br />
nützliche/angenehme Überraschungen<br />
→ steigern Zufriedenheit überproportional<br />
2009-02-09<br />
Kano-Modell<br />
Kunde sehr zufrieden,<br />
begeistert Begeisternde Faktoren<br />
Erwartungen<br />
nicht erfüllt<br />
Leistungsfaktoren<br />
Erfüllungsgrad<br />
Basisfaktoren<br />
Kunde unzufrieden<br />
enttäuscht<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 113 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Herausforderungen<br />
Basisfaktoren<br />
Minimalanforderungen<br />
→ Mangel führt zu massiver<br />
Unzufriedenheit<br />
→ mehr als Zufriedenheit ist nicht möglich<br />
Leistungsfaktoren<br />
bewusst verlangte Sonderausstattung<br />
→ bei Erfüllung: Kundenzufriedenheit<br />
→ sonst: Unzufriedenheit<br />
Begeisternde Faktoren<br />
unbewusste Wünsche,<br />
nützliche/angenehme Überraschungen<br />
→ steigern Zufriedenheit überproportional<br />
Eine gute Anforderungsanalyse ist der Grundstock für den Erfolg. Dazu muss es uns gelingen, den Kunden mit<br />
unserem Produkt zu begeistern, indem wir auf alle seine Anforderungen eingehen und diese später auch umsetzen.<br />
Der Zusammenhang zwischen dem Erfüllungsgrad der Anforderungen und der Begeisterung, die wir damit beim<br />
Kunden wecken können, wird durch das Kano-Modell (Kano 1984) beschrieben. Generell gilt offensichtlich, dass<br />
wir mit einem höheren Erfüllungsgrad der Anforderungen auch eine höhere Zufriedenheit erreichen können. Ob eine<br />
erfüllte Anforderung den Kunden zur Begeisterung treibt oder ob es für ihn vielmehr eine Selbstverständlichkeit<br />
darstellt, hängt jedoch ab von der Art der Anforderung.<br />
Die erste Kategorie von Anforderungen sind die Basisfaktoren der <strong>Software</strong>. Diese Anforderungen stellen<br />
Mindestanforderungen dar, die die <strong>Software</strong> erfüllen muss, damit sie eingesetzt werden kann, Werden sie nicht<br />
erfüllt, ist die <strong>Software</strong> unbrauchbar. Dies führt zu massiver Unzufriedenheit. Da es sich um Mindestanforderungen<br />
handelt, werden wir den Kunden selbst mit einer hundertprozentigen Erfüllung allenfalls zufrieden, aber nicht<br />
begeistern können.<br />
Die Gesamtheit der Leistungsfaktoren ist die bewusst verlangte Sonderausstattung. Werden diese Anforderungen<br />
erfüllt, können wir den Kunden mehr als nur zufrieden stellen. Werden sie nicht erfüllt, ist der Kunde enttäuscht –<br />
er hatte sich diese Leistungsfaktoren ja explizit gewünscht. Es droht dann Unzufriedenheit.<br />
Den Kunden begeistern können wir, indem wir ihn überraschen. Die begeisternde Faktoren erfüllen ihm unbewusste<br />
Wünsche oder stellen nützliche und angenehme Überraschungen dar. Mit diesen Faktoren können wir die<br />
Zufriedenheit überproportional steigern, aber bei Nichterfüllen niemals enttäuschen, weil der Kunde diese<br />
Anforderungen nicht explizit verlangt hat.<br />
Kano-Modell<br />
Kunde sehr zufrieden,<br />
begeistert Begeisternde Faktoren<br />
Erwartungen<br />
nicht erfüllt<br />
Leistungsfaktoren<br />
Erfüllungsgrad<br />
Basisfaktoren<br />
Kunde unzufrieden<br />
enttäuscht
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Herausforderungen<br />
Basisfaktoren<br />
Minimalanforderungen<br />
→ Mangel führt zu massiver<br />
Unzufriedenheit<br />
→ mehr als Zufriedenheit ist nicht möglich<br />
Leistungsfaktoren<br />
bewusst verlangte Sonderausstattung<br />
→ bei Erfüllung: Kundenzufriedenheit<br />
→ sonst: Unzufriedenheit<br />
Begeisternde Faktoren<br />
unbewusste Wünsche,<br />
nützliche/angenehme Überraschungen<br />
→ steigern Zufriedenheit überproportional<br />
Daraus folgt nun nicht, dass wir eigene Anforderungen hinzu erfinden sollten, von denen wir glauben, dass sie den<br />
Kunden vom Hocker reißen werden. Schließlich müssen wir die Anforderungen implementieren und wenn sie vom<br />
Kunden nicht bestellt sind, müssen wir dafür bezahlen. Wenn es uns aber gelingt, solche Anforderungen in der<br />
Anforderungsanalyse zu identifizieren und dem Kunden vorzuschlagen, so können sie zum Vertragsgegenstand<br />
werden, für die er gerne Geld ausgibt. Allerdings werden sie so dann schnell zu Leistungsfaktoren, die bei<br />
Nichterfüllung Unzufriedenheit hervor rufen. Aber zumindest kann es für den Kunden den Ausschlag geben, sich für<br />
unsere Dienste und nicht für die unserer Mitbewerber zu entscheiden.<br />
Anforderungsanalyse<br />
Wegweiser<br />
Erhebung der Anforderungen<br />
Kano-Modell<br />
Kunde sehr zufrieden,<br />
begeistert Begeisternde Faktoren<br />
Erwartungen<br />
nicht erfüllt<br />
Leistungsfaktoren<br />
Erfüllungsgrad<br />
Basisfaktoren<br />
Kunde unzufrieden<br />
enttäuscht<br />
Was sind die wesentlichen Schritte zur Erhebung der<br />
Anforderungen?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 114 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Aktivitäten<br />
Wegweiser<br />
Wegweiser<br />
Erhebung der Anforderungen<br />
Was sind die wesentlichen Schritte zur Erhebung der<br />
Anforderungen?<br />
In diesem Abschnitt wenden wir uns den einzelnen Aktivitäten der Anforderungsanalyse zu. Dazu gehören die<br />
Ist-Analyse, die Soll-Analyse und das Festhalten der Anforderungen in Form einer Anforderungsspezifikation. Diese<br />
Aktivitäten haben eine natürlichen Abfolge, weil sie voneinander kausal abhängen. Allerdings werden sie in der<br />
Praxis meist wiederholt.<br />
Anforderungsanalyse<br />
Schritte der Anforderungsanalyse: Ist-Analyse<br />
Ist−Analyse<br />
Ist−Zustand<br />
Glossar<br />
Ziel: Verständnis der Welt, für die<br />
<strong>Software</strong>lösung angestrebt wird.<br />
Häufige Fehler:<br />
Entwickler sieht nicht, dass Kunde<br />
primär keine Veränderung, sondern<br />
Verbesserung anstrebt.<br />
Kunde beschreibt selten, was sich nicht<br />
ändern soll (weil es gut genug ist).<br />
Kunde = Endbenutzer; weiß nicht, was<br />
dieser braucht.<br />
Folgen von Mängeln: Eigentliches Problem<br />
wird ignoriert.<br />
Erforderlich: Beobachtungsgabe,<br />
Einfühlungsvermögen,<br />
Kommunikationsfähigkeit.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 115 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Aktivitäten<br />
Schritte der Anforderungsanalyse: Ist-Analyse<br />
Schritte der Anforderungsanalyse: Ist-Analyse<br />
Die Aktivität Ist-Analyse zielt darauf ab, den Ausschnitt der Welt zu verstehen, für den eine softwaretechnische<br />
Lösung angestrebt wird. Das heißt, wir streben an, den Ist-Zustand genau zu verstehen und zu analysieren. Über<br />
die Beschreibung des Ist-Zustands hinaus, entsteht in dieser Phase ein Glossar (Begriffslexikon), in dem wir die<br />
Begriffe aus der Anwendungsdomäne definieren, die der Kunde verwendet. Das Begriffslexikon ist notwendig, um<br />
Unklarheiten und Missverständnisse auszuschließen. In der Regel sind <strong>Software</strong>entwickler mit den Begriffen der<br />
Anwendungsdomäne nicht vertraut genug oder haben eine etwas falsche Vorstellung. Besonders problematisch sind<br />
die Fälle, in denen wir meinen zu wissen, was vermeintlich gemeint ist, aber leider daneben liegen, ohne es zu<br />
merken. Dieses Glossar wird vom Kunden gelesen und verifiziert. Es wird über die <strong>Projekt</strong>dauer gepflegt und<br />
angepasst.<br />
Ist−Analyse<br />
Ist−Zustand<br />
Glossar<br />
Ziel: Verständnis der Welt, für die<br />
<strong>Software</strong>lösung angestrebt wird.<br />
Häufige Fehler:<br />
Entwickler sieht nicht, dass Kunde<br />
primär keine Veränderung, sondern<br />
Verbesserung anstrebt.<br />
Kunde beschreibt selten, was sich nicht<br />
ändern soll (weil es gut genug ist).<br />
Kunde = Endbenutzer; weiß nicht, was<br />
dieser braucht.<br />
Folgen von Mängeln: Eigentliches Problem<br />
wird ignoriert.<br />
Erforderlich: Beobachtungsgabe,<br />
Einfühlungsvermögen,<br />
Kommunikationsfähigkeit.<br />
Ein häufiger Fehler bei der Ist-Analyse ist es, dass wir uns nicht bewusst werden, dass der Kunde primär keine<br />
Veränderung, sondern eine Verbesserung anstrebt. Das bedeutet, dass der Kunde mit vielen Dingen so wie sie sind<br />
bereits zufrieden ist und die auch weiterhin so bleiben sollen. Der Kunde beschreibt aber selten, was sich nicht<br />
ändern soll, weil es gut genug ist. Er konzentriert sich vielmehr darauf, was sich ändern soll. Nichtsdestotrotz<br />
müssen wir auch die Anforderungen kennen, die übernommen werden sollen. Wenn es darum geht, ein existierendes<br />
<strong>Software</strong>system abzulösen, bietet sich uns eine große Chance vom existierenden System zu lernen. Viele<br />
<strong>Informatik</strong>er machen jedoch den Fehler, das existierende Systeme allerhöchstens oberflächlich zu untersuchen.<br />
Dabei könnten wir den Kunden gezielt danach fragen, was wir vom existierenden System übernehmen<br />
beziehungsweise verbessern sollten.<br />
Erfolgt die Ist-Analyse mangelhaft, droht die Gefahr, dass wir das eigentliche Problem ignorieren. Für eine<br />
erfolgreiche Durchführung der Ist-Analyse benötigen wir Beobachtungsgabe, Einfühlungsvermögen und<br />
Kommunikationsfähigkeit.<br />
Anforderungsanalyse<br />
Schritte der Anforderungsanalyse: Soll-Analyse<br />
Ist−Analyse<br />
Soll−Analyse<br />
Ist−Zustand<br />
Glossar<br />
Lastenheft<br />
Ziel: Aufdeckung und Verbesserung<br />
bisheriger Schwächen durch <strong>Software</strong>lösung.<br />
Antizipation von Änderungen.<br />
Häufige Fehler:<br />
Entwickler gleiten in technische Details<br />
ab.<br />
Kunde hat keine klare Vorstellung bzw.<br />
kann sie nicht vermitteln.<br />
Folgen von Mängeln: falsche Lösung wird<br />
spezifiziert.<br />
Erforderlich: Analytische Fähigkeiten<br />
kombiniert mit Wissen über Machbarkeit von<br />
<strong>Software</strong>lösungen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 116 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Aktivitäten<br />
Schritte der Anforderungsanalyse: Soll-Analyse<br />
Schritte der Anforderungsanalyse: Soll-Analyse<br />
Ist−Analyse<br />
Ist−Zustand<br />
Glossar<br />
Ziel: Aufdeckung und Verbesserung<br />
bisheriger Schwächen durch <strong>Software</strong>lösung.<br />
Antizipation von<br />
Soll−Analyse<br />
Lastenheft<br />
Änderungen.<br />
Häufige Fehler:<br />
Entwickler gleiten in technische Details<br />
ab.<br />
Kunde hat keine klare Vorstellung bzw.<br />
kann sie nicht vermitteln.<br />
Folgen von Mängeln: falsche Lösung wird<br />
spezifiziert.<br />
Erforderlich: Analytische Fähigkeiten<br />
kombiniert mit Wissen über Machbarkeit von<br />
<strong>Software</strong>lösungen.<br />
Auf Basis der Ergebnisse der Ist-Analyse identifiziert die Soll-Analyse die bisherigen Schwächen und erarbeitet<br />
Verbesserungsmaßnahmen. Dabei interessieren uns nicht nur die unmittelbar anstehenden Anforderungen sondern<br />
auch jene, die in absehbarer Zukunft relevant werden können. Wahrscheinliche zusätzliche Anforderungen an das<br />
System, die in der Zukunft eintreffen werden, sollen beschrieben werden, damit die <strong>Software</strong>lösung so strukturiert<br />
werden kann, dass diese Änderungen später einfach zu realisieren sind.<br />
Das Ergebnis der Soll-Analyse ist das Lastenheft, in dem wir aus Sicht des Kunden beschreiben, was die Probleme<br />
der bisherigen Situation sind und was die neue <strong>Software</strong> verbessern soll.<br />
Häufig wird in der Soll-Analyse der Fehler gemacht, dass wir in technische Details der Lösung abgleiten, obwohl es<br />
doch zunächst um grobe Konzepte zur Verbesserung geht. Wir stoßen auch auf das oben bereits angeführte<br />
Problem, dass der Kunde nicht notwendigerweise eine klare Vorstellung von der möglichen softwaretechnischen<br />
Verbesserung hat beziehungsweise sie nicht vermitteln kann.<br />
Mängel in der Soll-Analyse führen dazu, dass eine falsche Lösung spezifiziert wird. Am Ende entsteht ein<br />
<strong>Software</strong>system, das nicht die relevanten Probleme beseitigt und damit unnütz ist. Um eine gute Soll-Analyse<br />
machen zu können, brauchen wir neben analytischen Fähigkeiten bei der Problemsuche auch softwaretechnisches<br />
Wissen, um abzuschätzen ob und mit welchem Aufwand, anvisierte softwaretechnische Lösungen machbar sind.<br />
Anforderungsanalyse<br />
Schritte der Anforderungsanalyse: Spezifikation<br />
Ist−Analyse<br />
Abnahme<br />
durch Kunden<br />
Soll−Analyse<br />
Spezifikation<br />
der Anforderungen<br />
Ist−Zustand<br />
Glossar<br />
Lastenheft<br />
Anforderungs−<br />
spezifikation<br />
abgenommene<br />
Anforderungs−<br />
spezifikation<br />
(Pflichtenheft)<br />
Ziel: Anforderungen genau beschreiben.<br />
Häufige Fehler:<br />
Anforderungen bleiben vage<br />
Implementierungsdetails statt<br />
Anforderungen<br />
Folgen von Mängeln:<br />
Vertragsstreitigkeiten am <strong>Projekt</strong>ende.<br />
Erforderlich: Kommunikationsfähigkeit.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 117 / 634
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Aktivitäten<br />
Schritte der Anforderungsanalyse: Spezifikation<br />
Schritte der Anforderungsanalyse: Spezifikation<br />
Ist−Zustand<br />
Ziel: Anforderungen genau beschreiben.<br />
Häufige Fehler:<br />
Ist−Analyse<br />
Glossar Anforderungen bleiben vage<br />
Implementierungsdetails statt<br />
Lastenheft Anforderungen<br />
Soll−Analyse<br />
Spezifikation<br />
der Anforderungen<br />
Folgen von Mängeln:<br />
Anforderungs−<br />
spezifikation Vertragsstreitigkeiten am <strong>Projekt</strong>ende.<br />
Erforderlich: Kommunikationsfähigkeit.<br />
Abnahme<br />
durch Kunden<br />
abgenommene<br />
Anforderungs−<br />
spezifikation<br />
(Pflichtenheft)<br />
Die Ist-Analyse untersucht die Anwendungsdomäne, für die eine softwaretechnische Lösung angestrebt wird. Diese<br />
Analyse ist rein deskriptiv. Die Soll-Analyse untersucht die Schwächen des Ist-Zustands und formuliert daraus<br />
Anforderungen an eine softwaretechnische Lösung, die diese Schwächen ausgleichen sollen. Die Soll-Analyse muss<br />
Prioritäten setzen (nicht alle Anforderungen sind gleich wichtig) und mögliche Konflikte auflösen (Anforderungen<br />
können sich widersprechen; z.B. Performanz versus Sicherheit). Bei der Soll-Analyse müssen eventuell auch Folgen<br />
von softwaretechnischen Lösungen abgeschätzt werden. Diese Abschätzung könnte dazu führen, eine andere<br />
softwaretechnische Lösung zu finden beziehungsweise – im Extremfall – eine softwaretechnische Lösung ganz<br />
auszuschließen.<br />
Mit Lösung ist hier nicht die Implementierung gemeint, sondern lediglich der Anforderungskatalog an die<br />
Implementierung. Es geht hier noch nicht darum, sich zu überlegen, wie die Anforderungen implementiert werden.<br />
Das Lastenheft beschreibt die Wünsche des Kunden aus dessen Sicht. Es ist häufig noch unscharf oder unstimmig.<br />
Erst die Anforderungsspezifikation (auch Pflichtenheft) beschreibt genau, was zu implementieren ist.<br />
Obwohl die Anforderungsspezifikation nur beschreiben soll, was implementiert und nicht wie implementiert werden<br />
soll, sind Überlegungen zu der generellen Machbarkeit notwendig. Eine Anforderungsspezifikation muss auch<br />
realisierbar sein. Dennoch sollten diese Überlegungen lediglich dazu führen, möglicherweise die Anforderungen<br />
abzuändern. Mögliche Wege, die Anforderungen zu implementieren, gehören in ein Entwurfsdokument und nicht in<br />
die Anforderungsspezifikation.<br />
Die Anforderungsspezifikation stellt den Vertrag zwischen Kunde und Entwickler dar und muss entsprechend genau<br />
geprüft werden. Meist geschieht dies durch ein Review mit dem Kunden.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Aktivitäten<br />
Schritte der Anforderungsanalyse: Spezifikation<br />
Schritte der Anforderungsanalyse: Spezifikation<br />
Ist−Zustand<br />
Ziel: Anforderungen genau beschreiben.<br />
Häufige Fehler:<br />
Ist−Analyse<br />
Glossar Anforderungen bleiben vage<br />
Implementierungsdetails statt<br />
Lastenheft Anforderungen<br />
Soll−Analyse<br />
Spezifikation<br />
der Anforderungen<br />
Folgen von Mängeln:<br />
Anforderungs−<br />
spezifikation Vertragsstreitigkeiten am <strong>Projekt</strong>ende.<br />
Erforderlich: Kommunikationsfähigkeit.<br />
Abnahme<br />
durch Kunden<br />
abgenommene<br />
Anforderungs−<br />
spezifikation<br />
(Pflichtenheft)<br />
Typische Fehler bei der Anforderungsspezifikation sind vage Anforderungen (z.B. dass die <strong>Software</strong><br />
benutzerfreundlich sein soll) und dass sie Implementierungsdetails beschreibt statt Anforderungen aus Kundensicht.<br />
Weil die Anforderungsspezikation den Vertragsgegenstand festlegt, führen Mängel nicht selten zu<br />
Vertragsstreitigkeiten am Ende des <strong>Projekt</strong>s. Wenn die Anforderungen nicht genau definiert wurden, ist eine<br />
gerichtliche Auseinandersetzung sehr mühselig. In jedem Falle ist ein solcher Streit für alle Parteien zum eigenen<br />
Schaden. Der Kunde hat nicht bekommen, was er wollte; wir bekommen möglicherweise unser Geld nicht. Ein<br />
enttäuschter Kunde schadet uns, denn Enttäuschung spricht sich schnell herum.<br />
Wir werden uns also große Mühen bei der Anforderungsspezifikation geben. In den folgenden Abschnitten werden<br />
wir hierzu verschiedene Techniken kennen lernen, die uns bei richtiger Ausführung vor Schaden bewahren können.<br />
Es sei auch hier nochmal darauf hingewiesen, dass die genannten Schritte der Ist- und Soll-Analyse sowie das<br />
Festhalten der Anforderungen hochgradig iterativ sind und keineswegs so sequentiell, wie durch den Datenfluss im<br />
Diagramm suggeriert. Das muss bei der Planung beachtet werden.
Anforderungsanalyse<br />
Wegweiser<br />
Ist-Analyse<br />
Was ist das Ziel und der Gegenstand der<br />
Ist-Analyse?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 118 / 634<br />
Anforderungsanalyse<br />
Soziotechnisches System<br />
Definition<br />
Soziotechnisches System: organisierte Menge von Menschen und<br />
Technologien, die in einer bestimmten Weise strukturiert sind, um eine<br />
Aufgabe zu erfüllen.<br />
Umgebung<br />
Eingabe<br />
Aufgaben<br />
Menschen<br />
Technisches<br />
Soziales<br />
Technologien<br />
Rolle/Struktur<br />
Ausgabe<br />
– Emery, Thorsrud & Trist 1964<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 119 / 634
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
. . . aus allen<br />
relevanten<br />
Blickwinkeln.<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 120 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
. . . aus allen<br />
relevanten<br />
Blickwinkeln.<br />
In diesem Abschnitt lernen wir Analysetechniken für die Ist-Analyse kennen. Zunächst untersuchen wir, was wir bei<br />
der Ist-Analyse überhaupt analysieren sollen.<br />
Durch die Ist-Analyse streben wir ein Verständnis folgender Aspekte des Ist-Zustands aus allen relevanten<br />
Blickwinkeln an:<br />
• Struktur: das organisatorische Gefüge des Systems, für das die <strong>Software</strong>lösung angestrebt wird.<br />
• Aufgaben: der Umfang und die Art der anfallenden Aufgaben (Operationen) und Besonderheiten im Ablauf<br />
• Kommunikation: die Vorrichtungen und Gelegenheiten zur Kommunikation und ihr Ablauf<br />
• Dokumenten: schriftliche oder elektronische Dokumente, die verwendet und produziert werden<br />
• Daten: Umfang und Art der verarbeiteten Daten in den Dokumenten und über sie hinaus<br />
• Schwachstellen: die bestehenden Mängel, Unvollständigkeiten und Redundanzen des Ist-Zustands<br />
Wie werden diese Aspekte nun vertiefen und benutzen als illustrierendes Beispiel eine Verkaufssituation in einem<br />
Fahrradladen, für die wir eine softwaretechnische Unterstützung entwickeln sollen.
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
2009-02-09<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile<br />
organisatorisches Gefüge des Systems, für das<br />
<strong>Software</strong>lösung angestrebt wird<br />
relevante Akteure<br />
Systemgrenzen<br />
Art und Umfang der Verbindungen innerhalb<br />
und nach außen<br />
Großhändler<br />
Ladenbesitzer<br />
Verkäufer 1<br />
Verkäufer 2<br />
Kunde 1<br />
Kunde 2<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 121 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bei der Analyse der Struktur identifizieren wir zunächst alle relevanten Akteure (Benutzer und andere<br />
<strong>Software</strong>systeme, die miteinander interagieren. Im Fahrradladen sind das Kunden und Verkäufer sowie der<br />
Ladenbesitzer und seine Lieferanten.<br />
Bestandteile<br />
organisatorisches Gefüge des Systems, für das<br />
<strong>Software</strong>lösung angestrebt wird<br />
relevante Akteure<br />
Systemgrenzen<br />
Art und Umfang der Verbindungen innerhalb<br />
und nach außen<br />
Großhändler Verkäufer 2<br />
Dann legen wir die Systemgrenzen fest. Mit System ist hier weder das <strong>Software</strong>system gemeint, das wir<br />
implementieren sollen (wir kennen ja die Anforderungen dafür noch gar nicht) noch etwa ein möglicherweise bereits<br />
existierendes <strong>Software</strong>system, das wir ablösen sollen. Vielmehr meinen wir damit den Ausschnitt der Welt, für den<br />
wir die softwaretechnische Verbesserung anstreben sollen. Diesen Ausschnitt fassen wir als ein System miteinander<br />
agierender Akteure auf.<br />
Wenn wir die Systemgrenzen festlegen, bestimmen wir also, was alles zu dem Ausschnitt der Welt gehört, der für<br />
uns relevant ist. Bsp.: Nehmen wir an, wir sind beauftragt, das Verkaufsgespräch zwischen Käufer und Verkäufer zu<br />
optimieren, dann gehören diese beiden Personengruppen zu unserem untersuchten System. Ihr Zusammenspiel<br />
sollen wir optimieren. Ladenbesitzer und Lieferanten hingegen sind außerhalb unseres Systems, aber dennoch<br />
relevant für unsere Aufgabenstellung, weil der Verkäufer den Ladenbesitzer bei bestimmten Entscheidungen zu Rate<br />
ziehen und Lieferanten zu Lieferzeiten befragen muss. <br />
Haben wir die Systemgrenzen gezogen, untersuchen wir die Art und den Umfang der Verbindungen innerhalb des<br />
Systems und nach außen. Wir bestimmen, wer innerhalb des System miteinander und welche unserer inneren<br />
Akteure mit welchen externen Akteuren interagiert. Die Interaktion zwischen externen Akteuren können wir in der<br />
Regel vernachlässigen.<br />
Das Ergebnis lässt sich als Graph repräsentieren, dessen Knoten die Akteure und dessen Kanten die Interaktionen<br />
darstellen.<br />
Ladenbesitzer<br />
Verkäufer 1 Kunde 1<br />
Kunde 2
Anforderungsanalyse<br />
Ist-Zustand: relevante Akteure<br />
Grundsatz: Kenne deinen Benutzer!<br />
Aber: Der Benutzer bzw. die Benutzerin ist eine Illusion. Es sind<br />
individuelle Menschen, um die es geht.<br />
Andererseits: Wir können nicht jeden betrachten und müssen<br />
zusammenfassen.<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 122 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: relevante Akteure<br />
Ist-Zustand: relevante Akteure<br />
Grundsatz: Kenne deinen Benutzer!<br />
Aber: Der Benutzer bzw. die Benutzerin ist eine Illusion. Es sind<br />
individuelle Menschen, um die es geht.<br />
Andererseits: Wir können nicht jeden betrachten und müssen<br />
zusammenfassen.<br />
Nachdem wir alle Akteure bestimmt haben, untersuchen wir die menschlichen Akteure weiter im Detail. Dies sind<br />
die potentiellen Benutzer unseres zukünftigen <strong>Software</strong>systems. Zum Teil erscheinen sie uns bisher noch recht<br />
abstrakt, etwa der Verkäufer und der Käufer. Diese Rollen definieren bestimmte Klassen von Benutzern mit<br />
unterschiedlichen Aufgaben und Zielen in unserem Systemgefüge. Diese Rollen abstrahieren aber von den<br />
Eigenschaften konkreter Benutzer. So können wir sicherlich ganz unterschiedliche Käufer in unserem Fahrradladen<br />
ausmachen, die sich in Erfahrungen, Vorlieben, Wünschen, Alter, Geschlecht und Finanzkraft unterscheiden. Alle<br />
wollen ein Fahrrad oder ein Fahrradbestandteil kaufen, aber ihre Auswahl und ihre Interaktion mit dem Käufer wird<br />
wesentlich durch ihre persönlichen Eigenschaften bestimmt. Es reicht also nicht aus, nur funktionale Rollen zu<br />
identifizieren. Da das <strong>Software</strong>system von konkreten Menschen benutzt werden wird, müssen wir deren Eigenheiten<br />
genau kennen, damit wir ein nützliches <strong>Software</strong>system für sie entwickeln können.<br />
Andererseits können wir auch nicht jedes mögliche Individium einzeln betrachten, da die Anzahl der Benutzer meist<br />
sehr hoch ist und uns nicht alle Benutzer bekannt sind. Aus ökonomischen Gründen müssen wir also mehrere<br />
Individuen mit ähnlichen Eigenschaften zu Klassen zusammenfassen.
Anforderungsanalyse<br />
Ist-Zustand: relevante Akteure<br />
Persona<br />
(in archetypischer Psychologie) die Maske oder Erscheinung, die man der<br />
Welt präsentiert.<br />
(in der <strong>Software</strong>ergonomie) erzählerische Beschreibung charakterischer<br />
Eigenschaften und Verhalten eines Benutzers oder Kunden, die spezifische<br />
Details nennt, statt Verallgemeinerungen.<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 123 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: relevante Akteure<br />
Ist-Zustand: relevante Akteure<br />
Persona<br />
(in archetypischer Psychologie) die Maske oder Erscheinung, die man der<br />
Welt präsentiert.<br />
(in der <strong>Software</strong>ergonomie) erzählerische Beschreibung charakterischer<br />
Eigenschaften und Verhalten eines Benutzers oder Kunden, die spezifische<br />
Details nennt, statt Verallgemeinerungen.<br />
Es ist die Aufgabe des Analysten, eine angemessene Menge von Benutzerklassen zu finden, die die richtige Balance<br />
zwischen abstrakten Rollen und individuellen Benutzern wahrt. Zur Beschreibung dieser Benutzerklassen kann man<br />
sich der so genannten Personas bedienen. Die Persona ist ursprünglich eine im griechischen Theater von den<br />
Schauspielern verwendete Maske, die die Rolle typisierte und als Schallverstärker benutzt wurde. In der<br />
archetypischen Psychologie ist es die Maske oder Erscheinung, die man der Welt präsentiert.<br />
In der Anforderungsanalyse der <strong>Software</strong>technik steht eine Persona für eine Benutzerklasse. Sie beschreibt deren<br />
gemeinsamen Eigenschaften, gibt ihnen aber ein konkretes Bild. Sie ist in der <strong>Software</strong>ergonomie eine erzählerische<br />
Beschreibung charakterischer Eigenschaften und Verhalten eines Benutzers oder Kunden, die spezifische Details<br />
nennt, statt nur Verallgemeinerungen.<br />
Neben der Konkretisierung statt Verallgemeinerung geben uns die Personas etwas Spielerisches im<br />
Entwicklungsprozess, das unsere Kreativität stimulieren kann. Wir können große Poster unserer Personas aufhängen<br />
und sie betrachten, während wir an der Anforderungsspezfikation schreiben. Wir leben damit die Idee, für und mit<br />
dem Benutzer zu entwickeln.
Anforderungsanalyse<br />
2009-02-09<br />
Persona-Poster:<br />
Bild (fiktiv)<br />
Name (fiktiv),<br />
Beruf, Motto<br />
Rolle, Ziele,<br />
Aufgaben, Ideen,<br />
Wünsche,<br />
Vorlieben,<br />
persönliche<br />
Details<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 124 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Die ursprüngliche Idee der Personas für die Anforderungsaanalyse stammt von Cooper. Zur Beschreibung einer<br />
Persona gehören ein fiktives Bild und ein fiktiver Name sowie weitere persönliche Eigenschaften, wie den Beruf oder<br />
ein charakterisierendes Motto. Statt von der abstrakten Benutzerklasse Verkäufer sprechen wir also von Herrn<br />
Schmidt, dem Verkäufer. Dann werden die gemeinsamen Eigenschaften der Benutzer, die sich hinter der Persona<br />
verbergen, aufgeführt. Dazu gehören die Rolle, die Herr Schmidt ausfüllt, die Ziele, die Herr Schmidt verfolgt, seine<br />
Ideen, Wünsche, Vorlieben und weitere persönliche Details, soweit sie von Relevanz für die Analyse sind.<br />
Quelle für das Bild:<br />
http://www.research.microsoft.com/research/coet/Grudin/Personas/Pruitt-Grudin.doc. Der Artikel<br />
erläutert auch wesentliche Ideen.<br />
Persona-Poster:<br />
Bild (fiktiv)<br />
Name (fiktiv),<br />
Beruf, Motto<br />
Rolle, Ziele,<br />
Aufgaben, Ideen,<br />
Wünsche,<br />
Vorlieben,<br />
persönliche<br />
Details
Anforderungsanalyse<br />
Bedeutung von Personas<br />
2009-02-09<br />
archetypische Benutzerbeschreibungen<br />
typisch für Zielgruppen<br />
decken deren Anforderungen, Bedürfnisse und Ziele ab<br />
stehen im Designprozess stellvertretend für die realen Benutzer (statt<br />
der relativ anonymen und pauschalen Größe “Benutzer”)<br />
können bei Design und beim Usability-Test der Benutzerinteraktion<br />
verwendet werden<br />
können beim Handbuchschreiben und -prüfen sowie Akzeptanztest<br />
verwendet werden<br />
– Astrid Beck, FHT Esslingen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 125 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Bedeutung von Personas<br />
Bedeutung von Personas<br />
archetypische Benutzerbeschreibungen<br />
typisch für Zielgruppen<br />
decken deren Anforderungen, Bedürfnisse und Ziele ab<br />
stehen im Designprozess stellvertretend für die realen Benutzer (statt<br />
der relativ anonymen und pauschalen Größe “Benutzer”)<br />
können bei Design und beim Usability-Test der Benutzerinteraktion<br />
verwendet werden<br />
können beim Handbuchschreiben und -prüfen sowie Akzeptanztest<br />
verwendet werden<br />
Astrid Beck, von der Fachhochschule für Technik in Esslingen, fasst die Bedeutung von Personas in der<br />
<strong>Software</strong>technik wie folgt zusammen. Personas sind archetypische Benutzerbeschreibungen und beschreiben<br />
typische Zielgruppen durch deren gemeinsame Eigenschaften. Die Gesamtheit der Anforderungen aller Personas<br />
deckt die Anforderungen, Bedürfnisse und Ziele aller Benutzer ab. Wie viele Personas man benötigt, hängt stark<br />
vom <strong>Projekt</strong> ab. In der Regel wird man mit zwischen 5 und 15 verschiedene Personas auskommen.<br />
Die Personas stehen im Designprozess stellvertretend für die realen Benutzer und bilden eine kreative und konkrete<br />
Alternative zu der relativ anonymen und pauschalen Größe ” Benutzer“. Die Anforderungsspezifikation muss die<br />
Anforderungen für jede Persona beinhalten. Sie können aber nicht nur während der Anforderungsanalyse der<br />
funktionalen Anforderungen an die <strong>Software</strong> verwendet werden. Die Personas helfen uns auch beim Design der<br />
Mensch-Maschine-Kommunikation und beim Usability-Test der Benutzerinteraktion. Hier muss die<br />
Benutzerinteraktion so gestaltet sein, dass alle Personas ihr Anwendungsproblem mit dem <strong>Software</strong>system effektiv<br />
und effizient lösen können. Aus den Personas lassen sich für den Usability-Test, der dies überprüfen soll,<br />
unmittelbar entsprechende Test-Benutzer ableiten, die das Profil der Personas erfüllen. Schließlich können die<br />
Personas beim Handbuchschreiben und -prüfen sowie beim Akzeptanztest verwendet werden. Auch hier helfen sie,<br />
sicher zu stellen, dass die Anforderungen zutreffend und vollständig sind, indem das Handbuch und System aus<br />
allen relevanten Blickwinkeln der Benutzersicht untersucht wird.<br />
– Astrid Beck, FHT Esslingen
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile<br />
Umfang und Art der anfallenden Aufgaben<br />
(Operationen) und Besonderheiten im Ablauf.<br />
Was wird gemacht?<br />
→ Kundenberatung<br />
Wer oder was führt Operation aus?<br />
→ Kunde + Verkäufer<br />
Wann und wie häufig?<br />
→ werktags: 50 Mal/Tag; samstags: 80<br />
Mal/Tag<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 126 / 634<br />
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile (Forts.)<br />
Zu welchem Zweck?<br />
→ Kauf eines Artikels<br />
Nach welchen Regeln wirken Operationen<br />
zusammen?<br />
→ Beratung vor Kauf-Operation, aber optional<br />
Was benutzt/produziert Operation?<br />
→ Zeit und Wissen des Verkäufers/Auswahl<br />
des Käufers<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 127 / 634
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile (Forts.)<br />
Nachdem wir uns durch die Personas einen Überblick verschafft haben, welche Benutzerklassen zu beachten sind,<br />
untersuchen wir als nächstes die Aufgaben der einzelnen Akteure, die im untersuchten System vorkommen. Die<br />
Aufgaben können wir als Operationen der Akteure auffassen. Hier interessiert uns, was eine Operation macht, wer<br />
sie ausführt, wann und wie häufig die Operation ausgeführt wird, zu welchem Zweck sie durchgeführt wird, welche<br />
Regeln der Ausführung der Operation selbst und welche dem Zusammenwirken der Operationen zu Grunde liegen<br />
sowie was eine Operation benutzt und produziert.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Zu welchem Zweck?<br />
→ Kauf eines Artikels<br />
Nach welchen Regeln wirken Operationen<br />
zusammen?<br />
→ Beratung vor Kauf-Operation, aber optional<br />
Was benutzt/produziert Operation?<br />
→ Zeit und Wissen des Verkäufers/Auswahl<br />
des Käufers<br />
Bestandteile (Forts.)<br />
Betrachten wir diese Fragen zu den Aufgaben an unserem Beispiel des Fahrradladens. Wir untersuchen hier die<br />
besondere Aufgabe des Einkaufes. Dies ist eine Operation unter vielen in einem Fahrradladen. Die Reparatur oder<br />
der Umtausch sind weitere Beispiele für Operationen in einem Fahrradladen.<br />
Zu welchem Zweck?<br />
→ Kauf eines Artikels<br />
Nach welchen Regeln wirken Operationen<br />
zusammen?<br />
→ Beratung vor Kauf-Operation, aber optional<br />
Was benutzt/produziert Operation?<br />
→ Zeit und Wissen des Verkäufers/Auswahl<br />
des Käufers<br />
Bsp.: Der Einkauf folgt im Wesentlichen dem folgenden Ablauf:<br />
1. Der Kunde betritt den Laden und äußert seinen Wunsch gegenüber dem Verkäufer.<br />
2. Der Verkäufer fragt nach den Details und berät den Kunden.<br />
3. Der Kunde wählt aus dem Angebot aus, kauft und bezahlt, wenn er etwas Passendes gefunden hat.<br />
4. Der Verkäufer übergibt den Artikel und den Kassenzettel, sobald der Betrag durch den Kunden beglichen wurde.<br />
• Wer oder was führt Operation aus?<br />
→ Die Ausführenden sind Kunde und Verkäufer in den oben beschriebenen Rollen.<br />
• Wann und wie häufig?<br />
→ Werktags findet diese Operation ca. 50 Mal am Tag statt; samstags ca. 80 Mal/Tag. Abends findet sie tendenziell<br />
häufiger statt als morgens.<br />
• Zu welchem Zweck?<br />
→ Der Käufer benötigt einen Fahrradartikel. Der Verkäufer möchte Umsatz erzielen.<br />
• Nach welchen Regeln wirken Operationen zusammen?<br />
→ Wenn der Kunde nichts Passendes findet oder der Verkäufer ihn unzureichend berät, geht der Kunde ohne zu kaufen.<br />
Wenn der Kunde nicht komplett bezahlen kann, schreibt der Verkäufer an, wenn er den Kunden gut genug kennt.<br />
Ansonsten übergibt ihm der Verkäufer den Artikel nicht. Ein Umtausch ist nur möglich, wenn ein Artikel vorher gekauft<br />
wurde. Käufer und Verkäufer verhalten sich kooperativ, das heißt, der Verkäufer berät nach bestem Wissen und<br />
Gewissen und der Kunde liefert ihm hierfür notwendige Hintergrundinformationen zu seinen bereits gekauften Artikeln<br />
und seinen Wünschen.<br />
• Was benutzt/produziert Operation?<br />
→ Die Operation überführt den Artikel aus dem Besitz des Ladens in den Besitz des Käufers. Sie überführt den Geldbetrag,<br />
der zu entrichten ist, vom Kunden in die Kasse des Verkäufers.
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
2009-02-09<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile<br />
Welche Vorrichtungen und Gelegenheiten zur<br />
Kommunikation gibt es (im Rahmen welcher<br />
Aufgaben)?<br />
→ Laden, Telefon<br />
Wie läuft Kommunikation ab?<br />
→ initiiert vom Kunden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 128 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile<br />
Welche Vorrichtungen und Gelegenheiten zur<br />
Kommunikation gibt es (im Rahmen welcher<br />
Aufgaben)?<br />
→ Laden, Telefon<br />
Wie läuft Kommunikation ab?<br />
→ initiiert vom Kunden<br />
Wenn wir die Kommunikation untersuchen, interessieren wir uns für die Vorrichtungen für die Kommunikation, die<br />
Gelegenheit, zu der die Kommunikation stattfindet, sowie den Ablauf der Kommunikation.<br />
Bsp.: Beim Verkaufsgespräch, wie oben dargestellt, verwenden die Akteure im Laden schlicht die menschliche<br />
Stimme, wenn das Gespräch im Laden stattfindet. Alternativ kann der Kunde sich aber auch über das Telefon vom<br />
Verkäufer beraten lassen und erst später den Laden betreten, um den passenden Artikel zu besorgen.<br />
Die Kommunikation findet während der Ladenöffnungszeiten statt und wird vom Kunden initiiert. Wenn der<br />
Verkäufer frei ist, spricht er jedoch auch Kunden an, wenn er den Eindruck hat, dass sie seine Hilfe benötigen.
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
2009-02-09<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
klara: Kundin<br />
volker : Verkäufer<br />
gib−artikel()<br />
gib−detail()<br />
Detail<br />
wähle−aus()<br />
Auswahl<br />
gib−geld()<br />
Geld<br />
Artikel<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 129 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Den Ablauf der Kommunikation kann man verbal beschreiben oder zu etwas formaleren Notationen greifen. Hierfür<br />
eignen sich insbesondere die UML-Sequenzdiagramme, die für solche Zwecke entworfen wurden.<br />
Wichtig ist bei allen gewählten Notationen, dass sie einerseits präzise genug sind – was für stark formalisierte<br />
Notationen spricht – und dass sie auch vom Kunden verstanden werden – was meist gegen stark formalisierte<br />
Notationen spricht. Sequenzdiagramme sind jedoch ein recht einfach zu erläuterndes Mittel, das nach kurzen<br />
Erläuterungen auch Nichtinformatikern verständlich sein kann. Für zustandsbasierte Kommunikation eignen sich<br />
auch Zustandsdiagramme. Ebenso kann man mit Aktivitätsdiagrammen komplexere Abläufe gut beschreiben.<br />
Bsp.: Das Diagramm hier beschreibt die Kommunikation als eine Abfolge von Nachrichten, die sich die Akteure<br />
gegenseitig zuschicken. Einige davon, wie z.B. gib-detail(), erhalten eine Antwort. Es bescheibt dieselbe Abfolge wie<br />
der natürlichsprachliche Text weiter oben. Das Sequenzdiagramm muss aber hierfür noch ergänzt werden um die<br />
Bedeutung der Nachrichten. <br />
klara: Kundin<br />
volker : Verkäufer<br />
gib−artikel()<br />
gib−detail()<br />
Detail<br />
wähle−aus()<br />
Auswahl<br />
gib−geld()<br />
Geld<br />
Artikel
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile<br />
Dokumente, die verwendet und produziert werden<br />
Bezeichnung<br />
→ Kassenzettel<br />
Inhalt<br />
→ gekaufte Ware, Preis, MWST, Datum,<br />
Verkäufer<br />
Grad der Formalisierung, Aufbau<br />
→ genügt Gesetz<br />
Verteiler<br />
→ Kunde und Laden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 130 / 634<br />
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile (Fortsetzung)<br />
Archivierung<br />
→ als Papier beim Kunden, elektronisch in der<br />
Ladenkasse<br />
von wem produziert/verwendet?<br />
→ produziert von Kasse/Verkäufer<br />
→ verwendet von Kunde beim Umtausch,<br />
Steuererklärung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 131 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile (Fortsetzung)<br />
Eine wichtige Informationsquelle bei der Ist-Analyse liefern existierende Dokumente, die verwendet und produziert<br />
werden. Meist müssen sie bei einer softwaretechnischen Lösung im Rechner nachgebildet werden. Dokumente<br />
können eher formalisiert sein, wie z.B. der Kassenbons im Fahrradladen, oder eher informell sein, wie z.B. der<br />
Notizzettel des Käufers, auf dem er sich aufgeschrieben hat, was er einkaufen möchte und zu welchem Fahrrad in<br />
seinem Besitz der neue Artikel passen soll.<br />
Archivierung<br />
→ als Papier beim Kunden, elektronisch in der<br />
Ladenkasse<br />
von wem produziert/verwendet?<br />
→ produziert von Kasse/Verkäufer<br />
→ verwendet von Kunde beim Umtausch,<br />
Steuererklärung<br />
Bei diesen Dokumenten interessieren uns die Bezeichnung, der Inhalt, der Grad der Formalisierung, der Aufbau, der<br />
Verteiler (d.h. wer das Dokument erhält), die Archivierung des Dokuments sowie die Produzenten und<br />
Konsumenten des Dokuments.<br />
Bsp.: Im Fahrradladen gibt es beispielsweise den Kassenzettel. Sein Inhalt ist die gekaufte Warte, der Preis, die<br />
anrechenbare Mehrwertsteuer, das Kaufdatum sowie der Verkäufer. Der Kassenzettel muss dem Gesetz genügen<br />
und ist darum recht formalisiert. Den Kassenzettel erhält der Kunde, ein Durchschlag bleibt in der Kasse des<br />
Ladens. Sowohl der Kunde als auch der Laden archivieren den Kassenzettel – der Kunde um gegebenenfalls seine<br />
Garantieansprüche durchzusetzen, der Laden für das Finanzamt. Produziert wird der Kassenzettel von der Kasse<br />
des Ladens durch den Verkäufer und verwendet wird er vom Kunden im Falle eines Umtausches beziehungsweise<br />
vom Ladenbesitzer für die Steuererklärung. <br />
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile<br />
Umfang und Art der verarbeiteten Daten<br />
Volumen und Wachstum<br />
→ 41 Flaschenhalter<br />
Wertebereiche<br />
→ Radius Halterung, Abstand Schrauben,<br />
versch. Farben etc.<br />
Datenträger<br />
→ Katalog in Papierform, Online-Katalog in<br />
HTML<br />
Ordnungsstrukturen<br />
→ Name, Hersteller, Typ<br />
Verarbeitungshäufigkeit<br />
→ wird alle drei Tage einmal verkauft<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 132 / 634
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
2009-02-09<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile (Fortsetzung)<br />
Art und Erfordernisse der Datensicherung<br />
→ Speicherung verkaufter Waren und des<br />
Inventars<br />
Abhängigkeiten zwischen den Daten<br />
→ passt nur an bestimmte Rahmen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 133 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile (Fortsetzung)<br />
Art und Erfordernisse der Datensicherung<br />
→ Speicherung verkaufter Waren und des<br />
Inventars<br />
Abhängigkeiten zwischen den Daten<br />
→ passt nur an bestimmte Rahmen<br />
Wir untersuchen die Dokumente, um die Daten zu ermitteln, die für die Ist-Analyse relevant sind. Oft sind es<br />
verschiedene Daten, die in den Dokumenten aufgeführt und verknüpft werden. Allerdings sind nicht alle relevanten<br />
Daten auf Dokumenten wiedergegeben. Im nächsten Schritt untersuchen wir weitere Daten, die möglicherweise nur<br />
mündlich ausgetauscht werden.<br />
Um die Daten präzise und vollständig zu modellieren, wird hierzu oft ein Datenmodell aufgestellt. Das<br />
Datenmodell beschreibt die wesentlichen Daten, ihre Eigenschaften, ihren Umfang und ihre Beziehungen. Zur<br />
Repräsentation eignen sich für eine Reihe der relevanten Aspekte beispielsweise UML-Klassendiagramme. Das<br />
Datenmodell beschreibt das Volumen und zukünftig erwartete Wachstum der Daten. Dies wird häufig als das<br />
Mengengerüst bezeichnet. Es ist unerlässlich für die Abschätzung des Speicherbedarfs und der Anforderungen an<br />
die Performanz der Algorithmen. Mit der Betrachtung des zukünftigen Wachstums stellen wir sicher, dass unser<br />
System skaliert und auch in einigen Jahren noch die notwendige Performanz zur Verfügung stellen wird. Die Daten<br />
haben einen Typ, für den wir den Wertebereich angeben. Sie werden in vielen Fällen dauerhaft gespeichert auf<br />
Datenträgern, die aber nicht notwendigerweise unmittelbar elektronisch verarbeitbar sind, z.B. weil sie von Hand<br />
auf Papier geschrieben werden. Viele Daten können sortiert werden, d.h. verfügen über ein oder mehrere<br />
Ordnungskriterien. Unsere Programme müssen sie meist nach diesen Ordnungskriterien sortieren können. Die<br />
Häufigkeit ihrer Verarbeitung ist für uns wichtig, weil wir damit die Zugriffe entsprechend organisieren müssen.<br />
Häufig verarbeitete Daten müssen schnell verfügbar sein. Schließlich interessieren uns die Art und Erfordernisse der<br />
Datensicherung sowie die Abhängigkeiten zwischen den Daten. Häufige solche Abhängigkeiten sind die<br />
Teil-Von-Beziehung in Form der Aggregation und Komposition. Andere Beziehungen werden in<br />
UML-Klassendiagrammen mit allgemeinen Assoziationen modelliert.
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile (Fortsetzung)<br />
Art und Erfordernisse der Datensicherung<br />
→ Speicherung verkaufter Waren und des<br />
Inventars<br />
Abhängigkeiten zwischen den Daten<br />
→ passt nur an bestimmte Rahmen<br />
Bsp.: In unserem Fahrradladen gibt es beispielsweise 41 Flaschenhalter in fünf verschiedenen Typen von drei<br />
verschiedenen Herstellern. Ein Flaschenhalter wird beschrieben durch die Attribute Radius der Halterung<br />
gemessen in Zentimetern, der Abstand der Schrauben gemessen in Zentimetern, die Farben in rot, grün, gelb, blau<br />
sowie der Preis im Bereich von 5 bis 25 Euro. Die Datenträger zu den Flaschenhaltern sind die Herstellerkataloge in<br />
Papierform als auch als Online-Kataloge in HTML. Name, Hersteller, Typ und Preis bilden die Ordnungsstrukturen.<br />
Von den Flaschenhaltern wird im Durchschnitt alle drei Tage einer verkauft. Dies bildet die Verarbeitungshäufigkeit.<br />
Die verkauften und im Lager befindlichen Flaschenhalter werden in einer Datenbank des Ladenbesitzers gespeichert.<br />
Die Flaschenhalter passen nur an bestimmte Rahmen; dies hängt vom Schraubenabstand und dem Radius ab. Eine<br />
weitere ” weiche“ Abhängigkeit ist die Farbe des Rahmens, zu der der Flaschenhalter passen soll. <br />
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile<br />
Untersuchung auf:<br />
Mängel<br />
Unvollständigkeiten<br />
Redundanzen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 134 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bestandteile<br />
Untersuchung auf:<br />
Mängel<br />
Unvollständigkeiten<br />
Redundanzen<br />
Nachdem wir die oben genannten relevanten Aspekte des Ist-Zustands erfasst haben, analysieren wir sie auf<br />
Schwachstellen und Probleme. Dazu gehören Mängel, Unvollständigkeiten oder Redundanzen. Auf die<br />
Schwachstellen werden wir sowohl durch eigene Analyse und Beobachtung der erhobenen Aspekte als auch durch<br />
Befragung und Beobachtung der Akteure selbst aufmerksam. Zu entsprechenden Techniken der Befragung und<br />
Beobachtung kommen wir weiter unten.<br />
Anforderungsanalyse<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Beispielschwachstellen<br />
Abhängigkeiten und wechselseitige Ausschlüsse<br />
von Teilen sind nirgendwo dokumentiert<br />
Verkäufer kennt nicht alle Einschränkungen<br />
Kunde kennt seine Konfiguration nicht<br />
Verkäufer kennt Sortiment nicht vollständig<br />
verschiedene überlappende Teilekataloge<br />
Inventarlisten sind obsolet<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 135 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Was?<br />
Ist-Zustand: Was?<br />
Verständnis von:<br />
Struktur<br />
Aufgaben<br />
Kommunikation<br />
Dokumenten<br />
Daten<br />
Schwachstellen<br />
Bsp.: In unserem Fahrradladen können wir beispielsweise durch unsere Analyse der erhobenen Aspekte und durch<br />
Beobachtung im Laden folgende Schwachstellen identifizieren:<br />
Anforderungsanalyse<br />
Wegweiser<br />
Beispielschwachstellen<br />
Abhängigkeiten und wechselseitige Ausschlüsse<br />
von Teilen sind nirgendwo dokumentiert<br />
Verkäufer kennt nicht alle Einschränkungen<br />
Kunde kennt seine Konfiguration nicht<br />
Verkäufer kennt Sortiment nicht vollständig<br />
verschiedene überlappende Teilekataloge<br />
Inventarlisten sind obsolet<br />
• Die Abhängigkeiten und wechselseitige Ausschlüsse der Bestandteile eines Fahrrads sind nirgendwo dokumentiert. Ein<br />
Verkäufer kann sie nicht nachschlagen und muss sie alle kennen, um einen Kunden zu beraten.<br />
• Nicht alle Verkäufer kennen aber alle Einschränkungen. Dies führt dazu, dass weniger erfahrene Verkäufer Rücksprache<br />
halten müssen mit erfahreneren Verkäufern oder gar Lieferanten und dass Kunden verärgert ihre falschen Artikel<br />
umtauschen müssen, wenn sie falsch beraten wurden.<br />
• Die Verkäufer können die Kunden nicht ausreichend beraten, weil der Kunde die bereits gekauften Fahrradbestandteile<br />
nicht genau kennt, zu denen der neu zu kaufende Artikel passen soll. Der Kunde muss in solchen Fällen unverrichteter<br />
Dinge den Laden wieder verlassen und die Information besorgen.<br />
• Verkäufer kennen das Sortiment nicht vollständig und wissen nicht genau, was im Laden selbst oder im Lager noch<br />
verfügbar ist.<br />
• Die Fahrradartikel sind in verschiedenen teilweise überlappenden Teilekatalogen beschrieben. Dies führt zu unnötigen<br />
Redundanzen.<br />
• Die Inventarlisten sind obsolet. Der Ladenbesitzer weiß nicht genau, welche Ware noch vorrätig, verkauft oder gar<br />
gestohlen ist.<br />
Ist-Analyse<br />
Welchen Techniken können wir in der Ist-Analyse<br />
nutzen?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 136 / 634
Anforderungsanalyse<br />
Ist-Zustand: Wie?<br />
Erhebungstechniken<br />
2009-02-09<br />
Auswertung vorhandener Dokumente<br />
Befragung<br />
schriftlicher Fragebogen<br />
Interview<br />
Beobachtung<br />
anekdotisch ↔ systematisch<br />
teilnehmend ↔ nicht-teilnehmend<br />
offen ↔ verdeckt<br />
selbst ↔ fremd<br />
Feld ↔ Labor<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 137 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Wie?<br />
Ist-Zustand: Wie?<br />
Erhebungstechniken<br />
Auswertung vorhandener Dokumente<br />
Befragung<br />
schriftlicher Fragebogen<br />
Interview<br />
Beobachtung<br />
anekdotisch ↔ systematisch<br />
teilnehmend ↔ nicht-teilnehmend<br />
offen ↔ verdeckt<br />
selbst ↔ fremd<br />
Feld ↔ Labor<br />
Wir wissen nun, was wir erheben sollen, aber leider noch nicht, wie wir das tun können. In diesem Abschnitt lernen<br />
wir hierfür verschiedene Erhebungstechniken kennen. Die Auswertung der vorhandenen Dokumente ist eine erste<br />
offensichtliche Technik. Darüber hinaus können wir jedoch auch die Akteure fragen oder beobachten.<br />
Um Akteure zu befragen, können wir sie selbst interviewen oder ihnen aber einen schriftlichen Fragebogen<br />
zuschicken. Beim Interview kann man auch mit einem vorher gründlich ausgearbeiteten Fragebogen arbeiten oder<br />
aber nur eine grobe Skizze der Fragen haben, um dann die Fragen an die Situation spontan anzupassen. Ganz zu<br />
Anfang, wenn man sich ein Gebiet erschließen möchte, ist man oft gar nicht in der Lage, präzise Fragen<br />
auszuarbeiten. Das Interview hat gegenüber der Befragung durch einen schriftlichen Fragebogen, den der Befragte<br />
ohne unser Beisein ausfüllt, den Vorteil, dass wir auch Gestik und Mimik des Befragten sehen, seine Gegenfragen<br />
direkt klären können und individuell auf die Situation reagieren können. Allerdings kann die Anwesenheit eines<br />
Fragenden die Antworten des Befragten beeinflussen. Zum einen lässt sich die Anonymität hier nicht sicher stellen,<br />
zum anderen fallen die Antworten oft auch abhängig davon aus, inwieweit der Fragende dem Befragten<br />
sympathisch ist. Außerdem ist das individuelle Interview erheblich zeitaufwändiger und teurer. Bei den schriftlichen<br />
Fragebögen verhält es sich gerade umgekehrt. Aus diesem Grunde werden wir meistens sowohl Interviews als auch<br />
schriftliche Fragebögen anwenden, weil sie sich bestens ergänzen. Wir werden meist zu Anfang eine kleinere Zahl<br />
von Interviews führen. Später können wir auf Basis dieser Interviews präzise Fragebögen aufstellen, um eine größere<br />
Datenbasis zu schaffen.
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Ist-Zustand: Wie?<br />
Ist-Zustand: Wie?<br />
Erhebungstechniken<br />
Auswertung vorhandener Dokumente<br />
Befragung<br />
schriftlicher Fragebogen<br />
Interview<br />
Beobachtung<br />
anekdotisch ↔ systematisch<br />
teilnehmend ↔ nicht-teilnehmend<br />
offen ↔ verdeckt<br />
selbst ↔ fremd<br />
Feld ↔ Labor<br />
Statt zu fragen können wir auch beobachten. Beobachtungen haben aber viele Facetten, aus denen wir die<br />
geeignete Beobachtungsart zusammen stellen müssen. Hier müssen wir zunächst entscheiden, ob wir systematisch<br />
oder eher anekdotisch vorgehen wollen. Wenn wir z.B. ganz einfach einmal den Fahrradladen betreten und dort eine<br />
Stunde verbringen, liefert das eher anekdotisches Wissen. Bei einem systematischen Vorgehen würden wir vorher<br />
ermitteln, wie sich die Kundenbesuche über die Ladenöffnungszeiten verteilen. Dann würden wir zu qualitativ<br />
unterschiedlichen Zeiten den Laden betreten, z.B. Montag morgens, wenn nicht viel los ist, Mittwoch abends, wenn<br />
mehr los ist, und Samstag vormittags, wenn der Laden meist voll ist. Außerdem müssen wir entscheiden, ob wir bei<br />
der Beobachtung teilnehmen. Wir könnten uns also einerseits nur einfach in den Laden stellen und beobachten,<br />
oder aber könnten wir selbst Kunde spielen und uns beraten lassen. Die Beobachtung kann offen oder verdeckt<br />
erfolgen. Erfolgt sie offen, kann das den Beobachtungsgegenstand beeinflussen. Ein Verkäufer wird sich in einer<br />
solchen Situation zum Beispiel eher freundlich verhalten, als wenn er sich unbeobachtet fühlt. Andererseits werfen<br />
verdeckte Beobachtungen ethische Fragen auf und sind möglicherweise schlicht verboten. Dann müssen wir uns<br />
entscheiden, ob wir selbst beobachten oder die Beobachtung Dritten überlassen. Wenn wir selbst beobachten,<br />
haben wir ein unmittelbareres Bild. Andererseits sind wir möglicherweise ungeübt, und ausgebildete und erfahrene<br />
dritte Beobachter sehen mehr als wir. Schließlich müssen wir uns zwischen einer Feld- oder Laborbeobachtung<br />
entscheiden. Im Labor können wir viel stärker beeinflussende Faktoren kontrollieren, um so spezielle Situationen<br />
und den Einfluss der Faktoren durch deren Variation genauer zu studieren. So könnten wir z.B. eine stressige<br />
Ladensituation im Labor nachbilden, indem wir sehr viele Menschen unzufriedene Kunden schauspielern lassen. Das<br />
natürlichere Bild ergibt sich aber durch die Feldbeobachtung. Hier lassen sich aber keine Situationen nachstellen.<br />
Auch hier gilt wieder, dass man Für und Wider anhand der konkreten Ausgangslage und des Ziels abwägen muss.<br />
Eine Feldbeobachtung ist jedoch immer vernünftig. Im Labor kann man dann bestimmte Situationen nachstellen<br />
und näher untersuchen.<br />
Anforderungsanalyse<br />
Befragung<br />
Fragen zu Fragen:<br />
Wird die Frage verstanden?<br />
Bezugsrahmen der Befragten?<br />
Informationsstand der Befragten?<br />
Art der Frage?<br />
Anordnung der Fragen?<br />
Erhebungssituation (Interviewereinfluss)?<br />
Gründe für die Antwort der Befragten?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 138 / 634
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Befragung<br />
Befragung<br />
Fragen zu Fragen:<br />
Wird die Frage verstanden?<br />
Bezugsrahmen der Befragten?<br />
Informationsstand der Befragten?<br />
Art der Frage?<br />
Anordnung der Fragen?<br />
Erhebungssituation (Interviewereinfluss)?<br />
Gründe für die Antwort der Befragten?<br />
Die Antwort auf eine Frage hängt nicht nur vom Inhalt der Frage selbst, sondern auch vom Kontext und von der<br />
Art und Weise ab, wie man die Frage stellt. Aus diesem Grunde sollte man sich bei der Gestaltung eines<br />
Fragebogens die Fragen und die Art der Frage sorgfältig überlegen und sich über den Einfluss des Kontextes im<br />
Klaren werden. Die Sozialwissenschaften haben hierzu umfangreiche Lehrbücher entwickelt.<br />
Zu unseren Fragen müssen wir uns selbst folgende Fragen stellen:<br />
• Wird die Frage überhaupt richtig verstanden? Benutzen wir Begriffe, zu denen der Befragte die gleichen Vorstellungen<br />
hat wie der Fragende? Bsp.: Wenn wir <strong>Software</strong>techniker von Server sprechen und damit einen Prozess meinen, dann<br />
versteht der Befragte darunter möglicherweise den Rechner, auf dem seine Applikation laufen, wenn er etwas<br />
Hintergrund in Computer-Hardware hat, oder gar lediglich Diener, wenn er Computer-Laie ist. <br />
• Was ist der Bezugsrahmen der Befragten? Was ist seine Rolle, was kann er wissen, was sind seine Ziele sowohl<br />
beruflicher als auch persönlicher Art? Bsp.: Es hat keinen Sinn den Besitzer unseres Fahrradladens zum üblichen Ablauf<br />
von Verkaufsgesprächen zu fragen, wenn er selbst seit langer Zeit das Verkaufen nicht mehr selbst praktiziert hat und<br />
lediglich Managementaufgaben wahrnimmt. <br />
• Informationsstand der Befragten? Was kann der Befragte überhaupt wissen? Fragen wir ihn zu Dingen, die er nicht<br />
wissen kann, wird er keine Antwort abgeben können oder schlimmer noch, eine Antwort erfinden.<br />
• Art der Frage? Ist eine offene, geschlossene oder hybride Frage angebracht (siehe unten)?<br />
• Anordnung der Fragen? Die Reihenfolge der Fragen kann das Ergebnis beeinflussen. Über jede Frage denkt der Befragte<br />
nach. Die Assoziationen können einen Kontext herstellen, der die Antwort auf die nächste Frage beeinflusst. Bsp.: Um<br />
ein krasses Beispiel zu nennen: Wenn wir den Verkäufer in unserem Fahrradladen als erstes fragen würden, ob er sich<br />
durch den geplanten Einsatz unseres <strong>Software</strong>systems unnütz fühlen würde, wird das vermutlich Einfluss auf den Verlauf<br />
der weiteren Befragung nehmen. <br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Befragung<br />
Befragung<br />
Fragen zu Fragen:<br />
Wird die Frage verstanden?<br />
Bezugsrahmen der Befragten?<br />
Informationsstand der Befragten?<br />
Art der Frage?<br />
Anordnung der Fragen?<br />
Erhebungssituation (Interviewereinfluss)?<br />
Gründe für die Antwort der Befragten?<br />
• Was ist der mögliche Einfluss der Situation, in der der Fragebogen erhoben wird? Was ist insbesondere der Einfluss des<br />
Interviewers, falls die Fragen in einem Interview gestellt werden? Bsp.: Fragt man Menschen, die eben aus einem<br />
Kinofilm zu einer Naturkatastrophe – wie z.B. einer Flutwelle – kommen, zum Thema Naturschutz, sind andere<br />
Antworten zu erwarten, wie wenn wir die selben Menschen bei einem Transatlantikflug zu ihrem Urlaubsort fragen. <br />
Auch der Fragende hat einen möglichen Einfluss auf die Antworten. Ob uns jemand sympathisch oder unsympathisch ist,<br />
beeinflusst, wie kooperativ wir in einem Interview sind. Fatal wäre es, wenn der Befragte vor dem Fragenden etwas zu<br />
befürchten hätte. Bsp.: So wäre der Ladenbesitzer eher ungeeignet, Fragen zum Thema Auslastung und Schwächen der<br />
Verkäufer zu stellen, wenn sie zu befürchten haben, dass ihnen aus ehrlichen Antworten negative Konsequenzen<br />
erwachsen könnten. <br />
• Was sind die möglichen Gründe für die Antwort der Befragten? Der Befragte könnte uns einen Gefallen tun wollen oder<br />
will uns sabotieren. Er könnte bewusst oder unbewusst falsche Antworten liefern, weil er hinter den Fragen ein<br />
bestimmtes Ziel vermutet, mit dem er nicht einverstanden ist.
Anforderungsanalyse<br />
Fragetypen: Geschlossene Fragen<br />
Geschlossene Fragen:<br />
2009-02-09<br />
Welche Qualität hat die GUI? Bitte ankreuzen.<br />
sehr gut<br />
gut<br />
schlecht<br />
weiß nicht<br />
Antwortalternativen vorgegeben<br />
auch Mehrfachantworten<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 139 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Fragetypen: Geschlossene Fragen<br />
Fragetypen: Geschlossene Fragen<br />
Geschlossene Fragen:<br />
Welche Qualität hat die GUI? Bitte ankreuzen.<br />
sehr gut<br />
gut<br />
schlecht<br />
weiß nicht<br />
Antwortalternativen vorgegeben<br />
auch Mehrfachantworten<br />
Fragen können in drei unterschiedlichen Formen verfasst sein: geschlossene, offene oder hybride Fragen. Sie<br />
unterscheiden sich durch die Form der Antworten, die auf sie möglich sind.<br />
Bei geschlossenen Fragen sind alternative Antworten bereits vorgegeben, aus denen der Befragte eine oder<br />
gegebenenfalls mehrere auswählen kann. Häufig findet man solche Fragen für Aspekte, die anhand einer Skala<br />
eingeschätzt werden sollen, also zum Beispiel die Frage, ob einem die GUI sehr gut, gut oder nicht gefällt.<br />
Durch die Vorgabe möglicher Antworten schafft man eine Normierung und kann die Antworten leicht automatisiert<br />
statistisch auswerten.<br />
Diesen Fragentyp kann man gut einsetzen, wenn man die möglichen Antworten gut vorwegsehen kann. Wenn man<br />
also bereits eine bestimmte Hypothese hat, kann man sie durch solche Fragen leicht überprüfen. In Bereichen, in<br />
denen man jedoch die Antworten nur schlecht abschätzen kann, besteht die Gefahr, dass die Antwort, die jemand<br />
eigentlich geben möchte, nicht dabei ist. Hier sind solche Fragetypen eher ungeeignet. In jedem Falle sollte es bei<br />
der Antwort immer möglich sein, dass der Befragte die Frage nicht beantworten kann oder will, um erzwungene<br />
Falschantworten zu vermeiden.
Anforderungsanalyse<br />
Fragetypen: Offene Fragen<br />
Offene Fragen:<br />
2009-02-09<br />
Wie sollte die GUI verbessert werden?<br />
Antworten in eigenen Worten, im eigenen Referenzsystem<br />
erfordert Ausdrucksfähigkeit der Befragten<br />
starker Einfluss des Fragenden, wenn präsent (durch Aufschreiben,<br />
Weglassen)<br />
hoher Auswertungsaufwand<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 140 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Fragetypen: Offene Fragen<br />
Fragetypen: Offene Fragen<br />
Offene Fragen:<br />
Wie sollte die GUI verbessert werden?<br />
Antworten in eigenen Worten, im eigenen Referenzsystem<br />
erfordert Ausdrucksfähigkeit der Befragten<br />
starker Einfluss des Fragenden, wenn präsent (durch Aufschreiben,<br />
Weglassen)<br />
hoher Auswertungsaufwand<br />
Offene Fragen sind solche, bei denen keine Antwort vorgegeben wird. Der Befragte beantwortet die Frage mit<br />
seinen eigenen Worten. Dazu kann er seine eigene Terminologie benutzen. Dies erfordert vom Befragten, dass er<br />
sich selbst ausdrücken kann. Da jede Antwort möglich ist, kann der Befragte in seiner Formulierung stark durch den<br />
anwesenden Fragenden beeinflusst werden. Dies gilt umso mehr, wenn nicht der Befragte die Antworten<br />
aufschreibt, sondern der Fragende, wie das meist üblich ist. Dadurch werden die Aussagen vom Fragenden oft<br />
gefiltert und aufbereitet, statt nur wörtlich wiedergegeben. Das Mindeste, was man dann tun sollte, ist es, dem<br />
Befragten das Protokoll seiner Antworten nochmals zur Kontrolle vorzulegen, um sicher zu stellen, dass man seine<br />
Aussagen korrekt wieder gegeben hat.<br />
Da die Antworten nicht vorgegeben sind, muss ein Mensch sie durchlesen, verstehen und einordnen. Damit ist die<br />
Auswertung erheblich aufwändiger als bei geschlossenen Fragen. Dem hohen Auswerteaufwand steht als Vorteil<br />
gegenüber, dass man die Antworten nicht schon beim Entwurf des Fragebogens vorwegsehen muss, wie das bei<br />
geschlossenen Fragen der Falle ist. Man hat also die Chance, Neues zu erfahren. Aus diesem Grund wendet man<br />
diesen Fragetyp an, wenn man noch keine rechte Hypothese zu den möglichen Antworten hat.
Anforderungsanalyse<br />
Fragetypen: Hybride Fragen<br />
Hybride Fragen:<br />
2009-02-09<br />
Was stört Sie an der GUI?<br />
lange Reaktionszeit<br />
mangelnde Selbsterklärungsfähigkeit<br />
fehlendes ” Undo“<br />
umständliche Dialogführung<br />
<br />
Kombination von geschlossenen und offenen Fragen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 141 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Fragetypen: Hybride Fragen<br />
Fragetypen: Hybride Fragen<br />
Hybride Fragen:<br />
Was stört Sie an der GUI?<br />
lange Reaktionszeit<br />
mangelnde Selbsterklärungsfähigkeit<br />
fehlendes ” Undo“<br />
umständliche Dialogführung<br />
<br />
Kombination von geschlossenen und offenen Fragen<br />
Hybride Antworten kombinieren geschlossene und offene Fragen, indem eine Menge alternativer Antworten<br />
vorgegeben wird, es aber dennoch möglich ist, durch Freitextfelder eigene Antworten zu formulieren. Dies ist in<br />
vielen Fällen ein guter Kompromiss, der leichte Auswertbarkeit und die Möglichkeit, unvorhergesehene Antworten<br />
zu liefern, bestmöglich vereint, solange die vorgegebenen Antworten möglichst viele echte Antworten abdecken.
Anforderungsanalyse<br />
Wann welche Erhebungsform?<br />
weniger strukturiertes Interview<br />
2009-02-09<br />
unstrukturiertes<br />
Untersuchungsgebiet<br />
offene Gesprächsführung und<br />
größere Antwortspielräume<br />
persönlicher Kontakt möglich<br />
Ortsbegehung möglich<br />
stark strukturierter Fragebogen<br />
vorstrukturiertes<br />
Untersuchungsgebiet<br />
gute Kenntnisse des<br />
Untersuchungsgebiets<br />
Operationalisierung der<br />
Hypothesen möglich<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 142 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Wann welche Erhebungsform?<br />
Wann welche Erhebungsform?<br />
weniger strukturiertes Interview<br />
unstrukturiertes<br />
Untersuchungsgebiet<br />
offene Gesprächsführung und<br />
größere Antwortspielräume<br />
persönlicher Kontakt möglich<br />
Ortsbegehung möglich<br />
Welche Form der Erhebung, ob stark oder weniger strukturiertes Vorgehen, nun angemessen ist, hängt im<br />
Wesentlichen davon ab, wie gut wir unser Untersuchungsgebiet bereits durchdrungen haben.<br />
In einer frühen Phase, in der wir uns noch wenig auskennen und mögliche Antworten nicht vorweg sehen können,<br />
werden wir eher ein weniger strukturiertes Interview durchführen. Das Gespräch kann offen geführt werden, und der<br />
Befragte hat einen größeren Spielraum bei Antworten. Der Fragende kann spontaner auf die Situation reagieren.<br />
Der persönliche Kontakt und die Ortsbegehung werden uns weitere Einblicke gewähren.<br />
Ist unser Untersuchungsgebiet bereits gut vorstrukturiert, dann kommt auch ein strukturierteres Vorgehen in Frage.<br />
Da wir bereits über gute Kenntnisse des Untersuchungsgebiets verfügen, sind wir in der Lage, operationale<br />
Hypothesen aufzustellen, das heißt, Hypothesen, die wir objektiv durch Fragebögen überprüfen können.<br />
stark strukturierter Fragebogen<br />
vorstrukturiertes<br />
Untersuchungsgebiet<br />
gute Kenntnisse des<br />
Untersuchungsgebiets<br />
Operationalisierung der<br />
Hypothesen möglich
Anforderungsanalyse<br />
Frageformulierung<br />
2009-02-09<br />
einfache Worte<br />
kurz und konkret<br />
keine doppelten Negationen<br />
nur auf einen Sachverhalt bezogen<br />
nicht hypothetisch<br />
neutral, nicht suggestiv<br />
Befragten nicht überfordern<br />
balanciert (negative und positive Antwortmöglichkeiten)<br />
immer eine ” weiß-nicht“-Kategorie bieten<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 143 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Frageformulierung<br />
Frageformulierung<br />
einfache Worte<br />
kurz und konkret<br />
keine doppelten Negationen<br />
nur auf einen Sachverhalt bezogen<br />
nicht hypothetisch<br />
neutral, nicht suggestiv<br />
Befragten nicht überfordern<br />
balanciert (negative und positive Antwortmöglichkeiten)<br />
immer eine ” weiß-nicht“-Kategorie bieten<br />
Auch über die Formulierung der Fragen muss man sich vorher sorgfältig Gedanken machen, da sie einen Einfluss auf<br />
die Antwort hat. Man wähle möglichst einfache, klare Worte, so dass die Frage sicher verstanden werden kann. Die<br />
Fragen sollten kurz und konkret sein. Lange Fragen beinhalten viele Aspekte, auf die man kaum eine klare,<br />
abgeschlossene Antwort geben kann. Auf abstrakte Fragen fällt die Antwort schwer. Doppelt negierte Fragen gilt es<br />
zu vermeiden, um den Befragten nicht zu verwirren. Gleichermaßen sollte man auf hypothetische Fragen mit vielen<br />
Konjunktiven verzichten. Ansonsten kann eine negative Antwort unterschiedliche Ursachen haben: die, die sich auf<br />
den eigentlichen Frageinhalt beziehen, oder jene, die die Prämissen in Frage stellen. Die Frage sollte neutral und<br />
nicht suggestiv gestellt werden, ansonsten legt man dem Befragten die Antwort bereits in den Mund. Man sollte<br />
eine gleiche Anzahl negativer und positiver Antwortmöglichkeiten vorsehen. Eine Disbalance von entweder<br />
negativen oder positiven Fragen wirkt suggestiv. Außerdem gibt es eine menschliche Tendenz, eher positiv zu<br />
antworten. Auch bei geschlossenen Fragen sollte es stets möglich sein, dass der Befragte aussagen kann, dass er auf<br />
eine Frage nicht antworten kann oder will, um erzwungene Falschaussagen zu vermeiden.
Anforderungsanalyse<br />
Beobachtung<br />
Prinzipien der Ethnographie (teilnehmende Beobachtung in der<br />
Feldforschung):<br />
2009-02-09<br />
Natürliche Umgebung<br />
→ Aktivitäten in Alltagsumgebung untersuchen<br />
Ganzheitlichkeit<br />
→ Einzelverhalten im Kontext untersuchen<br />
Beschreiben, nicht bewerten<br />
→ Ist-Verhalten, nicht Soll-Verhalten<br />
Sicht der Handelnden einnehmen<br />
→ Verhalten beschreiben in Begriffen, die für den Handelnden relevant<br />
und bedeutungsvoll sind<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 144 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Beobachtung<br />
Beobachtung<br />
Prinzipien der Ethnographie (teilnehmende Beobachtung in der<br />
Feldforschung):<br />
Natürliche Umgebung<br />
→ Aktivitäten in Alltagsumgebung untersuchen<br />
Ganzheitlichkeit<br />
→ Einzelverhalten im Kontext untersuchen<br />
Beschreiben, nicht bewerten<br />
→ Ist-Verhalten, nicht Soll-Verhalten<br />
Sicht der Handelnden einnehmen<br />
→ Verhalten beschreiben in Begriffen, die für den Handelnden relevant<br />
und bedeutungsvoll sind<br />
In der Befragung adressieren wir hauptsächlich das bewusste Wissen. Wir haben weiter oben schon gelernt, dass<br />
das nur rund ein Drittel des menschlichen Wissens ausmacht. Durch Beobachtung können wir uns noch weiteres<br />
Wissen erschließen.<br />
In der Sozialwissenschaft hat sich die Ethnographie als Technik etabliert. Die Ethnographie ist eine teilnehmende<br />
Beobachtung. Es hat offensichtlich keinen Sinn, das Leben von Urvölker zu ergründen, indem man sie ihrer Heimat<br />
entreißt und sie im Labor untersucht. Eigenschaften von Sozialgemeinschaften sind abhängig vom Kontext und<br />
müssen deshalb in diesem Kontext untersucht werden.<br />
Die Ethnographie folgt bei der Beobachtung einer Reihe von Prinzipien:<br />
• Die soziale Gemeinschaft wird in ihrer natürlichen Umgebung beobachtet. Auf diese Weise werden ihre Aktivitäten in der<br />
Alltagsumgebung untersucht.<br />
• Das Einzelverhalten wird im Kontext untersucht. Verhaltensweisen sind meist sehr komplex und lassen sich nur schwer<br />
isolieren und kontrollieren, wie das für Laborversuche versucht wird.<br />
• Im Vordergrund steht das neutrale Beschreiben und nicht die Bewertung. Wertung sozialen Handelns orientiert sich an<br />
moralischen Maßstäben, die jedoch kontextabhängig sind. Setzen wir uns die eigene moralische Brille auf, werden wir<br />
meist schlechtsichtiger und übersehen wichtige Details. Wir sind bei der Ist-Analyse am Ist- und nicht am Soll-Verhalten<br />
interessiert.<br />
• Wir versuchen, die Sicht der Handelnden einzunehmen, d.h. wir beschreiben das Verhalten in Begriffen, die für den<br />
Handelnden relevant und bedeutungsvoll sind.<br />
Die Einhaltung dieser Prinzipien sichert uns einen besseren Einblick.
Anforderungsanalyse<br />
Interview im Kontext<br />
2009-02-09<br />
ist eine Form der ethnographischen Untersuchung<br />
nach dem Meister-Lehrling-Modell<br />
Lernen durch Vormachen und Beobachten sowie Fragen und Klären<br />
geprägt durch<br />
Bescheidenheit<br />
Neugier<br />
Aufmerksamkeit<br />
konkrete (statt abstrakter) Fragen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 145 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Interview im Kontext<br />
Interview im Kontext<br />
ist eine Form der ethnographischen Untersuchung<br />
nach dem Meister-Lehrling-Modell<br />
Lernen durch Vormachen und Beobachten sowie Fragen und Klären<br />
geprägt durch<br />
Bescheidenheit<br />
Neugier<br />
Aufmerksamkeit<br />
konkrete (statt abstrakter) Fragen<br />
Eine spezielle Form der ethnographischen Untersuchung ist das Interview im Kontext. Es orientiert sich am<br />
Meister-Lehrling-Modell. Lernen findet hier in der Beobachtung des Meisters, im aktiven Nachfragen und Zeigen<br />
sowie im Mitmachen statt. Statt in einem Frontalunterricht im Hörsaal zu theoretisieren, nimmt der Meister seinen<br />
Lehrling mit auf die Baustelle. Der Meister arbeitet vor und der Lehrling lernt aus der Beobachtung. Der Lehrling<br />
fragt nach, wenn ihm etwas nicht klar ist, und er versucht sich auch selbst. Das Meister-Lehrling-Modell ist geprägt<br />
durch Bescheidenheit, Neugier, Aufmerksamkeit und konkrete (statt abstrakter) Fragen des Lehrlings im<br />
unmittelbaren Kontext.
Anforderungsanalyse<br />
Beispiel eines Ablaufes<br />
2009-02-09<br />
1 Einleitung (15 min)<br />
Vorstellung, Ziele, Dank<br />
Zustimmung zu Aufzeichnung, Vertraulichkeit<br />
Arbeit, nicht Person wird betrachtet!<br />
Meinungen zu technischer Unterstützung?<br />
Überblick gewinnen<br />
2 Übergang (1 min)<br />
Regeln, Rollen, Beziehung<br />
ich frage, Sie dürfen abwehren<br />
3 Erhebung im Kontext (2 Std.)<br />
Beobachtung und Nachfragen<br />
Notizen machen, mitlaufen, sich unsichtbar machen<br />
Pausen nach Wunsch<br />
4 Zusammenfassung (15 min)<br />
was die Beschäftigte tut, ihre Rolle<br />
was wichtig ist<br />
Ergänzungen, Korrekturen?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 146 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Ist-Analyse<br />
Beispiel eines Ablaufes<br />
Beispiel eines Ablaufes<br />
1 Einleitung (15 min)<br />
Vorstellung, Ziele, Dank<br />
Zustimmung zu Aufzeichnung, Vertraulichkeit<br />
Arbeit, nicht Person wird betrachtet!<br />
Meinungen zu technischer Unterstützung?<br />
Überblick gewinnen<br />
2 Übergang (1 min)<br />
Regeln, Rollen, Beziehung<br />
ich frage, Sie dürfen abwehren<br />
3 Erhebung im Kontext (2 Std.)<br />
Beobachtung und Nachfragen<br />
Notizen machen, mitlaufen, sich unsichtbar machen<br />
Pausen nach Wunsch<br />
4 Zusammenfassung (15 min)<br />
was die Beschäftigte tut, ihre Rolle<br />
was wichtig ist<br />
Ergänzungen, Korrekturen?<br />
Ein Interview im Kontext dauert in der Regel zwei Stunden plus direkte Vor- und Nachbearbeitung. Es könnte wie<br />
folgt ablaufen:<br />
1. In einer Einleitung (15 min) stellt sich der Fragende kurz vor und erläutert das Ziel der Befragung. Er vergisst nicht,<br />
sich ausdrücklich für das Interview zu bedanken. Er sichert absolute Vertraulichkeit zu und vergewissert sich über das<br />
Einverständnis des Befragten. Er weist darauf hin, dass die Arbeit betrachtet werden soll und nicht die Person. Man<br />
kann technische Hilfen für das Interview mitbringen, wie z.B. ein Audio- oder Videoaufnahmegerät. Wenn das der Fall<br />
ist, holt man sich spätestens jetzt noch das Einverständnis des Beobachteten ein.<br />
2. Im Übergang zur Erhebung im Kontext (1 min) bespricht man die Regeln, Rollen und die Beziehung zwischen<br />
Beobachter und Beobachtetem. Die Rolle des Beobachters ist es, zu beobachten und Fragen zu stellen. Die Rolle des<br />
Beobachteten ist es, sich möglichst wie gewöhnlich zu verhalten. Eine Grundregel lautet, dass der Beobachtete Fragen<br />
auch abwehren darf.<br />
3. Der Hauptteil ist die Erhebung im Kontext, die zwei Stunden möglichst nicht überschreiten sollte, weil spätestens dann<br />
die Konzentration auf beiden Seiten nachgelassen hat. In der Erhebung beobachtet man und fragt nach. Man macht<br />
sich Notizen, läuft mit, macht sich aber möglichst unsichtbar, um das beobachtete Geschehen so wenig wie möglich zu<br />
beeinflussen. Pausen können nach Wunsch gemacht werden.<br />
4. In der Zusammenfassung (15 min), erläutert man, was man beobachtet hat und lässt den Beobachteten korrigieren und<br />
ergänzen. Der Beobachtete erläutert sein Tun und seine Rolle und weist auf Wichtiges hin.
Anforderungsanalyse<br />
Wegweiser<br />
2009-02-09<br />
Soll-Analyse<br />
Wie können wir dem Benutzer frühzeitig ein<br />
konkretes Bild vermitteln, wie wir das Problem zu<br />
lösen gedenken?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 147 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Wegweiser<br />
Wegweiser<br />
Soll-Analyse<br />
Wie können wir dem Benutzer frühzeitig ein<br />
konkretes Bild vermitteln, wie wir das Problem zu<br />
lösen gedenken?<br />
Durch Analyse von Dokumenten, Beobachtungen und Fragen haben wir den Ist-Zustand erfasst. Die Analyse des<br />
Erfassten deckt die Schwachstellen auf, die wir mit einer softwaretechnischen Lösung beseitigen sollen. Der nächste<br />
Schritt ist nun auszuarbeiten, was die softwaretechnische Lösung dazu leisten muss. Dieser Aufgabe widmet sich<br />
die Soll-Analyse. Die Soll-Analyse muss die Anforderungen an die zu implementierende <strong>Software</strong> aufstellen. Dazu<br />
gehört es auch, diese Anforderungen hinsichtlich ihrer Machbarkeit und Folgen einzuschätzen. In diesem Abschnitt<br />
lernen wir eine Technik kennen, mit der wir sowohl Anforderungen überprüfen als auch technische Machbarkeit<br />
untersuchen können.<br />
Beobachtungen setzen den beobachteten Gegenstand voraus. Somit zielen Beobachtungen klar auf den Ist-Zustand<br />
ab. Unsere softwaretechnische Lösung existiert aber noch nicht. Fragen hingegen sind sowohl hilfreiche Mittel für<br />
die Ist-Analyse als auch für die Soll-Analyse. Wir können z.B. die Benutzer fragen, wie etwas sein soll. Auf welche<br />
Probleme wir dabei allerdings stoßen, haben wir schon ganz zu Anfang bei der Einführung zur Anforderungsanalyse<br />
besprochen. Die Benutzer können oft auf Problem hinweisen, sie tun sich oft aber schwerer, eine geeignete Lösung<br />
zu ersinnen. Insbesondere fehlt ihnen dazu meist die realistische Einschätzung zur technischen Machbarkeit, für die<br />
sie einen softwaretechnischen Hintergrund bräuchten. Zudem richten sich Fragen an das bewusste Wissen und wir<br />
können damit nur eingeschränkt relevante Aspekte erfassen.<br />
Wenn aber Beobachtungen ausscheiden und Fragen nicht hinreichend sind, wie können wir dann vorgehen? Es gibt<br />
das geflügelte Wort des Benutzers: I know it when I see it. Ich weiß, was ich will, sobald ich es sehe. Dieses Prinzip<br />
können wir umsetzen: Wir führen dem Benutzer unsere Lösung vor, zu der er dann Stellung nehmen kann.<br />
Natürlich können wir uns es nicht leisten, gleich das gesamte System zu implementieren, denn der Schaden wäre<br />
groß, wenn diese Lösung dann doch nicht das war, was der Benutzer haben möchte. Statt dessen implementieren<br />
wir einen so genannten Prototypen.
Anforderungsanalyse<br />
Prototyping<br />
Zielsetzung:<br />
Idee:<br />
Anforderungen anhand eines Beispiels erheben und überprüfen<br />
technische Möglichkeiten überprüfen und demonstrieren<br />
frühzeitig mögliche Lösungsansätze präsentieren<br />
rasche und billige Entwicklung eines prototypischen Systems als<br />
Diskussionsgrundlage<br />
Typen unterscheiden sich in . . .<br />
2009-02-09<br />
Lebensdauer: Wegwerfprototyp, evolutionärer Prototyp<br />
Zweck: technische Machbarkeit, Demonstration der Funktionalität<br />
oder Interaktion<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 148 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Prototyping<br />
Prototyping<br />
Zielsetzung:<br />
Anforderungen anhand eines Beispiels erheben und überprüfen<br />
technische Möglichkeiten überprüfen und demonstrieren<br />
frühzeitig mögliche Lösungsansätze präsentieren<br />
Idee:<br />
rasche und billige Entwicklung eines prototypischen Systems als<br />
Diskussionsgrundlage<br />
Typen unterscheiden sich in . . .<br />
Lebensdauer: Wegwerfprototyp, evolutionärer Prototyp<br />
Zweck: technische Machbarkeit, Demonstration der Funktionalität<br />
oder Interaktion<br />
Prototypen sind Zwischenprodukte in der Entwicklung, die dem Endprodukt in bestimmten relevanten Aspekten<br />
bereits stark ähneln sollen, die aber noch nicht vollständig sind. Eine andere Sichtweise von Prototypen ist es, sie<br />
als ein kostengünstigeres Modell für das Endprodukt zu betrachten.<br />
Prototypen sind in anderen Ingenieursdisziplinen allgegenwärtig. Architekten lassen dreidimensionale<br />
maßstabsgetreue kleine Modelle eines Gebäudes anfertigen. Ein zukünftiger Bewohner kann auf diese Weise einen<br />
wesentlich lebendigeren Eindruck erhalten als es ihm mit einem Bauplan möglich wäre. Flugzeugbauer erproben an<br />
Prototypen den Windwiderstand im Windkanal.<br />
Diese Idee übernimmt die <strong>Software</strong>technik. Die Ziele hierbei sind meist, die Anforderungen anhand eines Beispiels<br />
zu erheben und überprüfen, technische Möglichkeiten zu überprüfen und demonstrieren oder frühzeitig mögliche<br />
Lösungsansätze zu präsentieren (letztere Prototypen werden auch als Demonstratoren bezeichnet). Die Idee der<br />
Prototypen in der <strong>Software</strong>technik ist dieselbe wie bei anderen Ingenieursdisziplinen: die rasche und billige<br />
Entwicklung eines prototypischen Systems zur Erprobung.<br />
Unter dem Begriff Prototypen versammeln sich in der <strong>Software</strong>technik aber sehr unterschiedliche Formen. Man<br />
kann sie unterscheiden anhand zweier unterschiedlicher Merkmale: zum einen anhand der Lebensdauer<br />
(Wegwerfprototyp, evolutionärer Prototyp), zum anderen anhand des Zwecks (Überprüfung der technischen<br />
Machbarkeit oder Demonstration der Funktionalität oder Interaktion).<br />
Wir werden sie im Folgenden näher kennen lernen.
Anforderungsanalyse<br />
Typen von Prototypen in Bezug auf Lebensdauer<br />
Wegwerf-Prototyp:<br />
2009-02-09<br />
beschreibt ein <strong>Software</strong>system exemplarisch<br />
dient zur Erhebung und Analyse von Anforderungen oder zur<br />
Überprüfung technischer Machbarkeit<br />
demonstriert die Funktionalität, die mit Stakeholdern diskutiert<br />
werden soll<br />
implementiert nicht notwendigerweise die gezeigte Funktionalität<br />
(z.B. GUI-Prototyp)<br />
ist als Komponente für das Endprodukt ungeeignet, weil billig erstellt<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 149 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Typen von Prototypen in Bezug auf Lebensdauer<br />
Typen von Prototypen in Bezug auf Lebensdauer<br />
Wegwerf-Prototyp:<br />
beschreibt ein <strong>Software</strong>system exemplarisch<br />
dient zur Erhebung und Analyse von Anforderungen oder zur<br />
Überprüfung technischer Machbarkeit<br />
demonstriert die Funktionalität, die mit Stakeholdern diskutiert<br />
werden soll<br />
implementiert nicht notwendigerweise die gezeigte Funktionalität<br />
(z.B. GUI-Prototyp)<br />
ist als Komponente für das Endprodukt ungeeignet, weil billig erstellt<br />
Der Wegwerfprototyp hat eine sehr begrenzte Lebensdauer. Er wird in keinem Fall zum Endprodukt werden. Sein<br />
Ziel ist es, einen Aspekt – sei es Funktionalität oder Interaktion – exemplarisch zu untersuchen oder zu<br />
demonstrieren. Dazu wird der relevante Aspekt mit möglichst billigen Mitteln realisiert (nicht notwendigerweise<br />
immer dadurch, dass tatsächlich Code geschrieben wird; siehe unten). Alle anderen Aspekte sind nicht realisiert.<br />
Weil der Prototyp unvollständig ist und mit billigen Mitteln erstellt wird, ist er für das Endprodukt ungeeignet –<br />
daher sein Name. Hat er den Aspekt demonstriert, wird er weggeworfen.
Anforderungsanalyse<br />
Typen von Prototypen in Bezug auf Lebensdauer<br />
Evolutionärer Prototyp:<br />
2009-02-09<br />
dient zur schnellen Bereitstellung eines funktionsfähigen Systems im<br />
Rahmen von evolutionären Prozessmodellen zur <strong>Software</strong>entwicklung<br />
wird in weiteren Ausbaustufen zum endgültigen Produkt<br />
weiterentwickelt<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 150 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Typen von Prototypen in Bezug auf Lebensdauer<br />
Typen von Prototypen in Bezug auf Lebensdauer<br />
Evolutionärer Prototyp:<br />
dient zur schnellen Bereitstellung eines funktionsfähigen Systems im<br />
Rahmen von evolutionären Prozessmodellen zur <strong>Software</strong>entwicklung<br />
wird in weiteren Ausbaustufen zum endgültigen Produkt<br />
weiterentwickelt<br />
Im Gegensatz zum Wegwerf-Prototypen ist es beim evolutionären Prototypen vorgesehen, ihn schrittweise zum<br />
Endprodukt auszubauen. Er dient dazu, ein funktionsfähiges Systems möglichst schnell bereit zu stellen, wobei aber<br />
zu Anfang nicht die vollständige Funktionalität erwartet wird. Evolutionäre Prototypen finden ihren Einsatz unter<br />
anderem im Rahmen von evolutionären Prozessmodellen zur <strong>Software</strong>entwicklung.<br />
Der Vorteil dieser inkrementellen Entwicklung ist es, dass jede funktionstüchtige Ausbaustufe vom Benutzer erprobt<br />
werden kann. Die Erfahrung und Kritik der Benutzer mit der Ausbaustufe nimmt Einfluss auf die nächste<br />
Ausbaustufe. Iterativ wird der evolutionäre Prototyp in weiteren Ausbaustufen zum endgültigen Produkt<br />
weiterentwickelt.<br />
Bsp.: Die Ausbaustufen für die evolutionäre Entwicklung eines Textverarbeitungssystems könnten zum Beispiel so<br />
aussehen:<br />
1. grundlegende Funktionalität: Datei-Management, Editor, Textausgabe<br />
2. erweiterte Funktionalität: Style-Files, Bearbeitung mathematischer Formeln, Einbinden von Graphiken<br />
3. zusätzliche Funktionalität: Rechtschreibprüfung, Grammatiküberprüfung, Überarbeitungsmodus<br />
4. ergänzende Funktionalität: Tabellenkalkulation, Geschäftsgraphiken, E-Mail, Web-Browser, Scanner-Anbindung
Anforderungsanalyse<br />
Typen von Prototypen in Bezug auf Zweck<br />
Technischer Prototyp:<br />
2009-02-09<br />
zeigt die technische Umsetzbarkeit von Ansätzen zur Problemlösung<br />
implementiert einen (kleinen) Ausschnitt der Funktionalität des<br />
Systems<br />
wird eher zur Machbarkeitsabschätzung und -demonstration eingesetzt<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 151 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Typen von Prototypen in Bezug auf Zweck<br />
Typen von Prototypen in Bezug auf Zweck<br />
Technischer Prototyp:<br />
zeigt die technische Umsetzbarkeit von Ansätzen zur Problemlösung<br />
implementiert einen (kleinen) Ausschnitt der Funktionalität des<br />
Systems<br />
wird eher zur Machbarkeitsabschätzung und -demonstration eingesetzt<br />
Wegwerfprototypen und evolutionäre Prototypen unterscheiden sich anhand ihrer Lebensdauer. Ein völlig anderes<br />
Unterscheidungsmerkmal ist der Zweck, den man mit dem Prototypen verfolgt. Technische Prototypen zielen auf<br />
die technische Umsetzbarkeit von Ansätzen zur Problemlösung. Dazu implementiert der Prototyp einen (kleinen)<br />
Ausschnitt der Funktionalität des Systems. Technische Prototypen werden somit eher zur Machbarkeitsabschätzung<br />
und -demonstration eingesetzt. Sie gleichen dem Crash-Test-Stand, mit dessen Hilfe man das Verhalten von<br />
Karosserien im Automobilbau untersucht.<br />
Technische Prototypen können sowohl für den Wegwurf oder den evolutionären Ausbau vorgesehen sein. Sie<br />
können sich des Weiteren unterschieden in Bezug auf die <strong>Software</strong>architektur.
Anforderungsanalyse<br />
Horizontaler vs. vertikaler technischer Prototyp<br />
Horizontaler Prototyp: realisiert Aspekte einer spezifischen Ebene des<br />
<strong>Software</strong>systems; Bsp: Oberflächenprototyp<br />
Benutzungsschnittstelle<br />
Anwendungslogik<br />
Netzwerk Datenhaltung<br />
System−<strong>Software</strong><br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 153 / 634<br />
Anforderungsanalyse<br />
Horizontaler vs. vertikaler technischer Prototyp<br />
Horizontaler Prototyp: realisiert Aspekte einer spezifischen Ebene des<br />
<strong>Software</strong>systems; Bsp: Anwendungsprototyp<br />
Benutzungsschnittstelle<br />
Anwendungslogik<br />
Netzwerk Datenhaltung<br />
System−<strong>Software</strong><br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 154 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Horizontaler vs. vertikaler technischer Prototyp<br />
Horizontaler vs. vertikaler technischer Prototyp<br />
Horizontaler Prototyp: realisiert Aspekte einer spezifischen Ebene des<br />
<strong>Software</strong>systems; Bsp: Anwendungsprototyp<br />
Benutzungsschnittstelle<br />
Anwendungslogik<br />
Netzwerk Datenhaltung<br />
System−<strong>Software</strong><br />
<strong>Software</strong>systeme können zumindest konzeptionell in verschiedene Schichten eingeteilt werden, die jeweils von<br />
bestimmten Aspekten abstrahieren. Grob kann die Implementierung einteilen in die Schicht der Systemsoftware, die<br />
durch das Betriebssystem zur Verfügung gestellt wird, Schichten mit technischen Diensten, wie<br />
Netzwerkkommunikation oder Datenhaltung, sowie die Schicht, die die eigentlich anwendungsspezifische Logik<br />
implementiert und die Schicht der Benutzungsschnittstelle, die die Interaktion mit dem Benutzer übernimmt.<br />
Hinsichtlich dieses konzeptionellen Aufbaus, kann man technische Prototypen weiter in horizontale und vertikale<br />
Prototypen unterscheiden.<br />
Der horizontale technische Prototyp realisiert Aspekte einer spezifischen Ebene des <strong>Software</strong>systems. Der<br />
Anwendungsprototyp implementiert zum Beispiel die Anwendungslogik und der Oberflächenprototyp die<br />
Benutzungsschnittstelle. Hiermit untersucht oder demonstriert man die Funktionalität einer ausgesuchten Schicht.<br />
Da eine Schicht auf die andere aufbaut, aber nur eine Schicht implementiert wird, benötigen wir neben der<br />
Implementierung der relevanten Schicht selbst noch einen Simulator für die Schicht, auf die sich die relevante<br />
Schicht stützt. Man kann diese als Stumpf implementieren. Ein Stumpf bietet nicht die volle Funktionalität,<br />
sondern liefert auf die Anfragen der höheren Schicht einfach nur vorgefertigte Ergebnisse. Oberflächenprototypen<br />
können zum Beispiel so implementiert werden, dass die Anwendungsschicht alle Daten, die in der Oberfläche für<br />
bestimmte Anwendungsszenarien sichtbar sein sollen, in internen Tabellen abgespeichert hat und sie ohne weitere<br />
Berechnungen einfach als Ergebnis einer aufgerufenen Operation zurück liefert. Damit zeigt der Oberflächentyp<br />
möglicherweise falsche Daten an, aber zumindest die Interaktion lässt sich demonstrieren.<br />
Anforderungsanalyse<br />
Horizontaler vs. vertikaler technischer Prototyp<br />
Vertikaler Prototyp: realisiert ausgewählte Aspekte des <strong>Software</strong>systems<br />
vollständig<br />
Benutzungsschnittstelle<br />
Anwendungslogik<br />
Netzwerk Datenhaltung<br />
System−<strong>Software</strong><br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 155 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Horizontaler vs. vertikaler technischer Prototyp<br />
Horizontaler vs. vertikaler technischer Prototyp<br />
Vertikaler Prototyp: realisiert ausgewählte Aspekte des <strong>Software</strong>systems<br />
vollständig<br />
Benutzungsschnittstelle<br />
Anwendungslogik<br />
Netzwerk Datenhaltung<br />
System−<strong>Software</strong><br />
Der vertikale technische Prototyp realisiert ausgewählte Aspekte des <strong>Software</strong>systems vollständig durch alle<br />
Schichten hindurch. Er stellt einen Durchstich durch das System dar. Mit seiner Hilfe lässt sich die Zusammenarbeit<br />
verschiedener Schichten untersuchen. Er findet auch bei inkrementeller Entwicklung Einsatz, bei der die erste<br />
Ausbaustufe funktionstüchtig ist (wenn auch nicht alle Funktionen implementiert sind). Dann wird der Durchstich<br />
in die Breite in den weiteren Ausbausstufen ausgedehnt, um die restliche Funktionalität zu implementieren. Man<br />
geht also zuerst in die Tiefe und dann in die Breite bei diesem Vorgehen.<br />
Wir setzen solche Prototypen während der Anforderungsanalyse ein, wenn wir kritische Anforderungen haben, von<br />
denen wir nicht sicher sind, dass wir sie realisieren können. Ansonsten werden sie auch gerne vor Entwurf der<br />
Architektur angewandt, um einzusetzende Technologien oder geplante Entwürfe zu untersuchen.<br />
Anforderungsanalyse<br />
Prototypen für Interaktion: Storyboards<br />
Storyboards:<br />
Typen:<br />
Prototypen für die Interaktion zwischen Mensch und Maschine<br />
demonstrieren das zu diskutierende Systemverhalten als ” Geschichte“<br />
passives Storyboard (Papierprototyp)<br />
aktives Storyboard (animierter Prototyp)<br />
interaktives Storyboard (ausführbarer Prototyp)<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
Aufwand<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 156 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Prototypen für Interaktion: Storyboards<br />
Prototypen für Interaktion: Storyboards<br />
Storyboards:<br />
Typen:<br />
Prototypen für die Interaktion zwischen Mensch und Maschine<br />
demonstrieren das zu diskutierende Systemverhalten als ” Geschichte“<br />
passives Storyboard (Papierprototyp)<br />
aktives Storyboard (animierter Prototyp)<br />
interaktives Storyboard (ausführbarer Prototyp)<br />
In der Anforderungsanalyse müssen wir die Interaktion zwischen Benutzer und Anwender festlegen. Dieser<br />
Interaktion nimmt eine Schlüsselrolle ein, weil ein <strong>Software</strong>system, das alle gewünschten Funktionalitäten bietet,<br />
dennoch unbrauchbar sein kann, wenn man es nicht benutzen kann. Aus diesem Grunde wollen schon sehr früh,<br />
Interaktion ausprobieren können und sie Kunden und Benutzern vorstellen. Hier können wir Oberflächenprototypen<br />
entwickeln.<br />
Oberflächenprototypen sind horizontale Prototypen, bei denen die Interaktion untersucht oder demonstriert werden<br />
soll. Meist dienen sie weniger der technischen Machbarkeit, sondern vielmehr der konzeptionellen Angemessenheit<br />
und Schlüssigkeit. Wir untersuchen damit, ob der Benutzer später mit unserem System effizient und effektiv<br />
interagieren kann.<br />
Dem Oberflächenprototypen kommt unter den Prototypen eine Sonderstellung zu, weil es die Oberfläche ist, die der<br />
Benutzer später sehen und bedienen wird. Alle anderen Schichten sind für ihn unsichtbar. Wenn wir die von uns<br />
einzusetzenden Implementierungsechnologien bereits sicher beherrschen, können wir auf solche technische<br />
Prototypen tieferer Schichten verzichten. Weil wir aber in der Anforderungsspezifikation auch die<br />
Benutzungsschnittstelle beschreiben müssen und die Qualität einer <strong>Software</strong> aus Benutzersicht steht und fällt mit<br />
ihrer Benutzbarkeit, sind Oberflächenprototypen für die Anforderungsanalyse unerlässlich.<br />
Aus diesem Grunde genießen Oberflächenprototypen hier unser Hauptaugenmerk. Wir unterscheiden dabei die<br />
folgenden Typen:<br />
• passives Storyboard (Papierprototyp)<br />
• aktives Storyboard (animierter Prototyp)<br />
• interaktives Storyboard (ausführbarer Prototyp)<br />
Alle Typen von Storyboards beschreiben die zukünftige Interaktion mit dem System als eine Art Drehbuch, daher<br />
ihr Name. Sie unterscheiden sich jedoch im Grad ihrer Interaktivität. Das interaktive Storyboard bietet dabei die<br />
höchste Interaktivität. Mit dem Grad der Interaktivität steigen aber auch die Kosten für die Entwicklung des<br />
Storyboards. Wir werden im Folgenden diese drei Typen näher beschreiben.<br />
Anforderungsanalyse<br />
Passive Storyboards<br />
Demonstration:<br />
Mittel:<br />
Analytiker spielt die Bedienung mit dem System durch, indem er<br />
entlang eines Anwendungsszenarios Eingabemöglichkeiten und<br />
Systemreaktionen demonstriert<br />
Skizzen<br />
Bildschirm-Masken (Screenshots)<br />
mögliche Systemausgaben<br />
Bemerkung:<br />
+ ermöglicht einfache und billige Prototyperstellung<br />
+ ermöglicht Interaktion mit Beteiligten am Beispiel<br />
- erfordert Anwesenheit des Analytikers<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 157 / 634<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
000000000000000<br />
111111111111111<br />
Aufwand
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Passive Storyboards<br />
Demonstration:<br />
Analytiker spielt die Bedienung mit dem System durch, indem er<br />
entlang eines Anwendungsszenarios Eingabemöglichkeiten und<br />
Systemreaktionen demonstriert<br />
Mittel:<br />
Skizzen<br />
Bildschirm-Masken (Screenshots)<br />
mögliche Systemausgaben<br />
Bemerkung:<br />
+ ermöglicht einfache und billige Prototyperstellung<br />
+ ermöglicht Interaktion mit Beteiligten am Beispiel<br />
- erfordert Anwesenheit des Analytikers<br />
Passive Storyboards erlauben selbst keine Interaktion. Statt dessen spielt der Analytiker bei der Demonstration die<br />
Bedienung mit dem System durch, indem er entlang eines Anwendungsszenarios die Eingabemöglichkeiten und<br />
Systemreaktionen demonstriert.<br />
Als Mittel werden Skizzen, Bildschirm-Masken in Form von Bildschirmabzügen (Screenshots) und mögliche<br />
Systemausgaben verwendet. Die einfachsten Materialien sind Papier und Bleistift. Dafür sprechen die besonders<br />
einfache und billige Prototyperstellung sowie die Möglichkeit zur Interaktion mit den Beteiligten am konkreten<br />
Beispiel. Der Benutzer selbst kann mit diesen Materialien selbst umgehen und an der Entwicklung des Prototypen<br />
direkt mitwirken.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Beispiel passives Storyboard<br />
Passive Storyboards<br />
Demonstration:<br />
Analytiker spielt die Bedienung mit dem System durch, indem er<br />
entlang eines Anwendungsszenarios Eingabemöglichkeiten und<br />
Systemreaktionen demonstriert<br />
Mittel:<br />
Skizzen<br />
Bildschirm-Masken (Screenshots)<br />
mögliche Systemausgaben<br />
Bemerkung:<br />
+ ermöglicht einfache und billige Prototyperstellung<br />
+ ermöglicht Interaktion mit Beteiligten am Beispiel<br />
- erfordert Anwesenheit des Analytikers<br />
Bsp.: Unsere Analyse der Schwachstellen in der Ist-Analyse zu unserem Fahrradladenbeispiel hat ergeben, dass es<br />
oft schwierig ist, einen Kunden beim Einkauf eines Artikels für ein Fahrrad, das sich schon in seinem Besitz<br />
befindet, richtig zu beraten, weil er nicht weiß, welche Daten das Fahrrad hat. Wenn er einen Flaschenhalter kaufen<br />
möchte, so muss er zu den Ausmaßen und Bohrungen sowie der Farbe des Rahmens passen. Wenn er sie nicht<br />
kennt, kann ihm der Verkäufer keine Empfehlung aussprechen.<br />
Wir haben uns entschlossen, einen Einkaufsassistenten auf Basis eines PDAs zu entwickeln. Auf diesem tragbaren<br />
Kleinrechner sind alle Einkäufe des Kunden erfasst und zwar branchenübergreifend, also Fahrradteile genauso wie<br />
Computer-Hardware etc. Wir möchten dem Benutzer die zukünftige Interaktion mit einem solchen PDA<br />
demonstrieren. Die Interaktion mit einem PDA hat besondere Herausforderungen, weil die darstellbare Fläche sehr<br />
begrenzt und typische Eingabegeräte wie Maus und Tastatur nicht vorhanden sind.<br />
Bild 1: Wir fertigen einen Papierprototypen an, indem wir einen realen PDA hernehmen und die dargestellten<br />
Elemente zeichnen und auf das Display legen. Das Bild zeigt die Einstiegsmaske mit den Produktgruppen des<br />
Käufers, die mit dem PDA verwaltet werden. Im Fahrradladen wählt er das Fahrradsymbol aus, wenn er einen<br />
Artikel für sein Fahrrad kaufen möchte. Dadurch gelangt er zum nächsten Dialog.
Anforderungsanalyse<br />
Beispiel passives Storyboard<br />
2009-02-09<br />
abfragen<br />
ändern<br />
entfernen<br />
ersetzen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 159 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Beispiel passives Storyboard<br />
Beispiel passives Storyboard<br />
Bsp.: Bild 2: Im nächsten Dialog wird sein Fahrrad angezeigt. Er kann dann mit dem Stift auf ein Bestandteil<br />
seines Rades tippen. Darauf hin wird ein Menü eingeblendet, in dem er die nächste Aktion auswählen kann. Er kann<br />
einen Artikel abfragen, um Daten über ihn abzufragen, ändern, um den Artikel in seinen Eigenschaften zu ändern,<br />
entfernen, um ihn aus seiner Konfiguration zu löschen, oder ersetzen, um ihn durch einen neuen Artikel zu ersetzen.<br />
<br />
abfragen<br />
ändern<br />
entfernen<br />
ersetzen
Anforderungsanalyse<br />
Beispiel passives Storyboard<br />
2009-02-09<br />
1<br />
4<br />
145 Euro<br />
100 Euro<br />
78 Euro<br />
47 Euro<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 160 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Beispiel passives Storyboard<br />
5<br />
6<br />
2<br />
3<br />
Beispiel passives Storyboard<br />
Bsp.: Bild 3: Nehmen wir an, wir wählen den Sattel aus, und wählen ersetzen. Dann gelangen wir zum nächsten<br />
Dialog. Als nächstes werden alle Sättel angezeigt, die zum Fahrrad des Kunden passen, sortiert nach dem Preis. Es<br />
werden maximal vier Artikel angezeigt. Diese Liste kann weiter verarbeitet werden, indem wir mit den Stift tippen<br />
oder die Tasten bedienen. Berühren wir mit dem Stift das Bild des Sattels (1), den Beschreibungstext (2) oder den<br />
Preis, dann gelangen wir zum Kaufdialog. Bedienen wir auf dem Tastenfeld die Nach-Oben- (4) beziehungsweise<br />
die Nach-Unten-Taste (5) können wir den sichtbaren Ausschnitt in der Liste der gefundenen Artikel nach oben<br />
beziehungsweise nach unten bewegen. Mit der Auswahltaste (5) gelangen wir zum Kaufdialog. <br />
1<br />
4<br />
145 Euro<br />
100 Euro<br />
78 Euro<br />
47 Euro<br />
5<br />
6<br />
2<br />
3
Anforderungsanalyse<br />
Beispiel passives Storyboard<br />
1<br />
2009-02-09<br />
Screen Auswahl Screen Kaufen<br />
100 Euro<br />
78 Euro<br />
47 Euro<br />
2 1<br />
145 Euro 145 Euro<br />
7<br />
5 6 4 4<br />
Wollen Sie diesen<br />
Artikel kaufen?<br />
ja<br />
nein<br />
5 6<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 161 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Beispiel passives Storyboard<br />
Beispiel passives Storyboard<br />
1<br />
100 Euro<br />
78 Euro<br />
47 Euro<br />
2 1<br />
7<br />
2<br />
8<br />
Screen Auswahl Screen Kaufen<br />
145 Euro 145 Euro<br />
5 6 4 4<br />
Bsp.: Bild 4: Im Kaufdialog wird nur der ausgewählte Artikel angezeigt und der Kunde wird gefragt, ob er den<br />
Artikel kaufen möchte. Bestätigt er mit der Schaltfläche “Ja” (7), dann wird der Artikel in den virtuellen<br />
Warenkorb des elektronischen Verkaufsassistenten gelegt, der vom Verkäufer an der Kasse ausgelesen werden kann.<br />
Mit der Schaltfläche “Nein” wird der Vorgang abgebrochen, und man gelangt zum Auswahldialog zurück.<br />
Die Entscheidung, maximal vier Artikel anzuzeigen, haben wir in der Vorbereitung des Papierprototypen getroffen.<br />
Wir hatten sehr schnell im maßstabgetreuen Modell feststellen können, dass mehr als vier Artikel nicht auf dem<br />
kleinen Monitor zu präsentieren sind. Wir haben jedoch versäumt, irgendwie kenntlich zu machen, dass mehr als<br />
vier Artikel als Ergebnis der Suchanfrage geliefert wurden, aber nicht alle sichtbar sind. Der Kunde fragt uns<br />
während der Vorführung, wie das denn zu erkennen sei. Der Kunde nimmt dann einen roten Farbstift, zeichnet<br />
dafür rote Pfeile nach oben beziehungsweise unten über dem ersten beziehungsweise letzten angezeigten Element<br />
ein und sagt uns, dass er das gerne so hätte. Während wir dem Kunden diesen Prototypen vorführen, bemerkt<br />
dieser außerdem, dass wir im Auswahldialog keine Möglichkeit vorgesehen haben, den Dialog durch einen anderen<br />
Weg als zum Kaufdialog zu verlassen. Uns ist also glücklicherweise früh genug vom Kunden klar gemacht worden,<br />
dass wir in der Dialogführung einige Dinge übersehen haben. Die Überarbeitung unseres Papierprototypen ist aber<br />
einfach. So einfach, dass es der Kunde gleich selbst übernehmen konnte. <br />
Passive Storyboards eignen sich besonders in der frühen Phase des Interaktions-Designs, in der man den Benutzer<br />
aktiv in den Design-Prozess einbeziehen möchte.<br />
Wollen Sie diesen<br />
Artikel kaufen?<br />
ja<br />
nein<br />
5 6<br />
2<br />
8
Anforderungsanalyse<br />
Aktive Storyboards<br />
Demonstration:<br />
Mittel:<br />
Abspielen einer selbstablaufenden Präsentation des Systemverhaltens<br />
Film, Diashow<br />
selbstablaufende Präsentation<br />
Bemerkung:<br />
2009-02-09<br />
+ ermöglicht einfache automatisierte Darstellung von typischen<br />
Anwendungsszenarien<br />
+ erfordert nicht unbedingt die Anwesenheit von Analytikern<br />
- erlaubt keine Interaktion während der Präsentation<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 162 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Aktive Storyboards<br />
Demonstration:<br />
Abspielen einer selbstablaufenden Präsentation des Systemverhaltens<br />
Mittel:<br />
Film, Diashow<br />
selbstablaufende Präsentation<br />
Bemerkung:<br />
+ ermöglicht einfache automatisierte Darstellung von typischen<br />
Anwendungsszenarien<br />
+ erfordert nicht unbedingt die Anwesenheit von Analytikern<br />
- erlaubt keine Interaktion während der Präsentation<br />
Während passive Storyboards durch den Analytiker demonstriert werden müssen, sind aktive Storyboards<br />
Präsentationen des Systemverhaltens, die von selbst ablaufen. Sie laufen wie ein Film ab. Dazu kann man<br />
tatsächlich kontinuierliche Sequenzen wie in einem Film darstellen (z.B. mit Werkzeugen wie Macromedia Flash<br />
oder Camtesia) oder aber Einzelbilder der Dialoge (z.B. mit einer Präsentationssoftware wie OpenOffice oder<br />
Powerpoint) anzeigen.<br />
Typische Anwendungsszenarien können automatisiert dargestellt werden. Weil ein aktives Storyboard von allein<br />
abläuft, ist die Anwesenheit von Analytikern nicht unbedingt erforderlich. Damit können solche Demos an eine<br />
Vielzahl von möglichen Benutzern verschickt und deren Meinung eingeholt werden. Allerdings erlauben aktive<br />
Storyboards keine Interaktion während der Präsentation, was gerade in der frühen Phase des Interaktions-Designs<br />
wünschenswert ist.<br />
Aktive Storyboards eignen sich besonders in einer fortgeschritteneren Phase des Interaktions-Designs, in der man<br />
ein ausgearbeitetes Konzept sehr vielen Benutzern vorstellen möchte.
Anforderungsanalyse<br />
Interaktive Storyboards<br />
Demonstration:<br />
Mittel:<br />
Prototyp ermöglicht dem Benutzer die frühzeitige Interaktion mit dem<br />
möglichen System; Funktionalität kann evtl. durch Analytiker ” von<br />
Hand“ simuliert werden<br />
ausführbares Programm, das Teile der Funktionalität realisiert<br />
Bemerkung:<br />
2009-02-09<br />
+ ermöglicht Interaktion des Nutzers mit dem System<br />
+ erlaubt größtmögliche Nähe zum realen System<br />
- erfordert höheren Aufwand bei Prototyp-Erstellung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 163 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Interaktive Storyboards<br />
Demonstration:<br />
Prototyp ermöglicht dem Benutzer die frühzeitige Interaktion mit dem<br />
möglichen System; Funktionalität kann evtl. durch Analytiker ” von<br />
Hand“ simuliert werden<br />
Mittel:<br />
ausführbares Programm, das Teile der Funktionalität realisiert<br />
Bemerkung:<br />
+ ermöglicht Interaktion des Nutzers mit dem System<br />
+ erlaubt größtmögliche Nähe zum realen System<br />
- erfordert höheren Aufwand bei Prototyp-Erstellung<br />
Interaktive Storyboards bieten die größtmögliche Interaktion mit dem System. Dazu wird ein ausführbares<br />
Programm entwickelt, was die Eigenschaften der Benutzungsschnittstelle demonstriert. Es können einzelne Teile der<br />
Funktionalität bereits prototypisch implementiert sein. Meist genügen aber auch vorbereitete Daten für bestimmte<br />
Szenarien, die nicht wirklich berechnet, sondern nur in Reaktion auf die Eingabe des Benutzers angezeigt werden.<br />
Die Daten müssen auch nicht korrekt sein, solange es nur um die Demonstration der Interaktion geht. Die<br />
Funktionalität kann unter Umständen auch durch den Analytiker ” von Hand“ simuliert werden.<br />
Interaktive Storyboards ermöglichen echte Interaktion des Nutzers mit dem System mit einer größtmöglichen Nähe<br />
zum realen System. Dabei muss der Analytiker nicht bei der Demonstration anwesend sein. Allerdings kann der<br />
Benutzer auch hier nicht selbst eingreifen, um eigene Vorstellungen einzubringen, und wir haben einen höheren<br />
Aufwand bei der Prototyp-Erstellung. GUI-Design-Werkzeuge können jedoch einen Teil des Aufwands reduzieren.<br />
Interaktive Storyboards werden in der Regel in späteren Phasen des Interaktions-Designs entwickelt, bei denen man<br />
schon genaue Vorstellungen entwickelt hat. Sie können für Nutzertests zur Gebrauchsttauglichkeit des Systems<br />
eingesetzt werden, indem man verschiedene Nutzer (pro Persona mindestens einen) mit dem System interagieren<br />
lässt und diese Interaktion beobachtet und auswertet.
Anforderungsanalyse<br />
Vor- und Nachteile des Einsatzes von Prototypen<br />
2009-02-09<br />
+ erlauben frühzeitige Demonstration von Lösungsansätzen<br />
+ erlauben frühzeitige Beteiligung der Benutzer<br />
+ vermeiden das ” Leere-Blatt-Syndrom“<br />
+ reduzieren Entwicklungsrisiken durch frühzeitige Diskussion mit<br />
Beteiligten<br />
+ geeignete Werkzeuge ermöglichen die schnelle Erstellung von<br />
Prototypen<br />
– erfordern erhöhten Entwicklungsaufwand durch (zusätzliche)<br />
Prototyp-Entwicklung<br />
– Gefahr, dass Wegwerf-Prototyp Teil des Produkts wird (z.B. aus<br />
Zeitdruck)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 164 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Vor- und Nachteile des Einsatzes von Prototypen<br />
Zum Ende des Abschnitts über Prototypen fassen wir die Vor- und Nachteile von Prototypen zusammen.<br />
Vorteile:<br />
Vor- und Nachteile des Einsatzes von Prototypen<br />
+ erlauben frühzeitige Demonstration von Lösungsansätzen<br />
+ erlauben frühzeitige Beteiligung der Benutzer<br />
+ vermeiden das ” Leere-Blatt-Syndrom“<br />
+ reduzieren Entwicklungsrisiken durch frühzeitige Diskussion mit<br />
Beteiligten<br />
+ geeignete Werkzeuge ermöglichen die schnelle Erstellung von<br />
Prototypen<br />
– erfordern erhöhten Entwicklungsaufwand durch (zusätzliche)<br />
Prototyp-Entwicklung<br />
– Gefahr, dass Wegwerf-Prototyp Teil des Produkts wird (z.B. aus<br />
Zeitdruck)<br />
+ Prototypen erlauben eine frühzeitige Demonstration von Lösungsansätzen mit vertretbaren Kosten. Gerade weil der<br />
Interaktion eine hohe Bedeutung zukommt und sie auch in der Anforderungsspezifikation genau beschrieben sein sollte,<br />
sollten wir in der Anforderungsanalyse präzise Konzepte entwickeln und sie dem Kunden und Benutzer vorführen, um die<br />
Konzepte zu evaluieren und zu verbessern. Andererseits können wir zu einem so frühen Zeitpunkt nicht die ganze<br />
Applikation bereits entwickeln. Darum also Prototypen.<br />
+ Prototypen erlauben damit eine frühzeitige Beteiligung der Benutzer. Der Benutzer selbst kann sich ein genaueres Bild<br />
des späteren Systems machen und frühzeitig korrigierend eingreifen.<br />
+ Prototypen vermeiden das ” Leere-Blatt-Syndrom“, das wir von Schriftstellern kennen, die die erste Seite ihres neuen<br />
Romans schreiben sollen. Mit Prototypen können wir direkt loslegen. Insbesondere Papierprototypen helfen uns einen<br />
schnellen Einstieg zu finden, weil sie billig herzustellen und leicht änderbar sind.<br />
+ Prototypen reduzieren Entwicklungsrisiken durch frühzeitige Diskussion mit Beteiligten. Wir wissen, wie teuer uns späte<br />
Änderungen kommen. Darum stellen wir durch frühes Vorzeigen und Einbeziehen der Benutzer sicher, dass wir auf dem<br />
richtigen Weg sind. Dafür ist eine Anfangsinvestition notwendig, um den Prototypen zu entwickeln, die sich aber im<br />
Verlaufe des <strong>Projekt</strong>s mit sehr hoher Wahrscheinlichkeit amortisiert, weil weniger Fehler in der Anforderungsanalyse<br />
gemacht werden.<br />
+ Geeignete Werkzeuge ermöglichen die schnelle Erstellung von Prototypen, so dass sich die Kosten in Grenzen halten.<br />
Beispielsweise gibt es GUI-Builder, mit denen man sich rasch graphische Benutzeroberflächen zusammen klicken kann.<br />
Oder man benutzt Werkzeuge wie Graphikprogramme (auch scripting-fähige, wie Adobe Flash) und<br />
Präsentationssoftware.
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Nachteile:<br />
Anforderungsanalyse<br />
Wegweiser<br />
Anforderungsanalyse<br />
Soll-Analyse: Prototyping<br />
Vor- und Nachteile des Einsatzes von Prototypen<br />
Vor- und Nachteile des Einsatzes von Prototypen<br />
+ erlauben frühzeitige Demonstration von Lösungsansätzen<br />
+ erlauben frühzeitige Beteiligung der Benutzer<br />
+ vermeiden das ” Leere-Blatt-Syndrom“<br />
+ reduzieren Entwicklungsrisiken durch frühzeitige Diskussion mit<br />
Beteiligten<br />
+ geeignete Werkzeuge ermöglichen die schnelle Erstellung von<br />
Prototypen<br />
– erfordern erhöhten Entwicklungsaufwand durch (zusätzliche)<br />
Prototyp-Entwicklung<br />
– Gefahr, dass Wegwerf-Prototyp Teil des Produkts wird (z.B. aus<br />
Zeitdruck)<br />
– Auch wenn Prototypen billiger sind als das Endprodukt, so erfordern Prototypen einen erhöhten Entwicklungsaufwand<br />
durch die zusätzlich Prototyp-Entwicklung. Je nach Ausbau des Prototypen können die Kosten erheblich sein.<br />
– Bei der Entwicklung von Wegwerfprototypen wird kein großer Wert auf Qualität gelegt; sie müssen zeigen, was sie<br />
zeigen sollen, und ansonsten möglichst billig sein. Der größte Nachteil dieser Prototypen ist somit die Gefahr, dass sie<br />
zum Teil des Produkts werden (z.B. aus Zeitdruck). Bei interaktiven Storyboards erhalten Kunde und <strong>Projekt</strong>manager<br />
den Eindruck, dass das System schon beinahe fertig ist. Die Versuchung ist groß, den Wegwerfprototypen auszubauen,<br />
statt ihn wie geplant wegzuwerfen. Das rächt sich jedoch in der Regel, weil die Qualität des Wegwerfprototypen ein<br />
solches Vorgehen nicht unterstützt. Dieser Gefahr kann man durch Papierprototypen oder durch eine Entwicklung mit<br />
einer Programmiersprachen, die man später für das Endprodukt nicht benutzen möchte, vorbeugen.<br />
Analysetechniken<br />
Wann wird welche Analysetechnik eingesetzt?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 165 / 634
Anforderungsanalyse<br />
Analysetechniken<br />
Ist-Zustand Soll-Zustand Folgen<br />
Auswertung vorhandener + - -<br />
Daten/Dokumente<br />
Beobachtungen + ◦ -<br />
Befragung<br />
- geschlossene Fragen + ◦ -<br />
- offene Fragen + ◦ -<br />
- hybride Fragen + ◦ -<br />
Prototyping - + +<br />
partizipative Entwicklung - + +<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 166 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Zusammenfassung der Techniken<br />
Analysetechniken<br />
Analysetechniken<br />
Ist-Zustand Soll-Zustand Folgen<br />
Auswertung vorhandener + - -<br />
Daten/Dokumente<br />
Beobachtungen + ◦ -<br />
Befragung<br />
- geschlossene Fragen + ◦ -<br />
- offene Fragen + ◦ -<br />
- hybride Fragen + ◦ -<br />
Prototyping - + +<br />
partizipative Entwicklung - + +<br />
Zum Abschluss der Ist- und Sollanalyse fassen wir noch einmal die Techniken, die wir kennen gelernt haben,<br />
zusammen und bewerten ihre Eignung für das Erfassen des Ist-Zustands, der Planung des Soll-Zustands und der<br />
Abschätzung mittel- und langfristiger Folgen unserer anvisierten <strong>Software</strong>lösung. Die folgende Tabelle gibt einen<br />
Überblick:<br />
Ist-Zustand Soll-Zustand Folgen<br />
Auswertung vorhandener + - -<br />
Daten/Dokumente<br />
Beobachtungen + ◦ -<br />
Befragung<br />
- geschlossene Fragen + ◦ -<br />
- offene Fragen + ◦ -<br />
- hybride Fragen + ◦ -<br />
Prototyping - + +<br />
partizipative Entwicklung - + +<br />
Die Auswertung vorhandener Dokumente ist ein Instrument rein für die Erhebung des Ist-Zustands, weil sie auf<br />
Existierendem basiert. Befragung und Beobachtung setzen auch etwas Existierendes voraus. Man kann sie aber<br />
auch einsetzen, um Prototypen zu evaluieren. Prototypen sind eine Vision des Soll-Zustandes, die handfest und<br />
überprüfbar ist. Mit ihnen kann man durch geeignete Evaluierung auch die Folgen des Einsatzes des späterens<br />
Systems abschätzen. Man kann also zum Beispiel demonstrieren, dass frühere Redundanzen und manuelle Eingriffe<br />
nicht mehr existieren werden, was die Fehleranfälligkeit reduziert. Außerdem kann man nachweisen, dass ein<br />
Benutzer schneller seine Aufgabe erledigen kann, als das vorher der Fall war.
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Zusammenfassung der Techniken<br />
Analysetechniken<br />
Analysetechniken<br />
Ist-Zustand Soll-Zustand Folgen<br />
Auswertung vorhandener + - -<br />
Daten/Dokumente<br />
Beobachtungen + ◦ -<br />
Befragung<br />
- geschlossene Fragen + ◦ -<br />
- offene Fragen + ◦ -<br />
- hybride Fragen + ◦ -<br />
Prototyping - + +<br />
partizipative Entwicklung - + +<br />
Die partizipative Entwicklung ist die <strong>Software</strong>entwicklung, die die späteren Benutzer einbezieht – wohl gemerkt, die<br />
Benutzer, nicht nur den Kunden. Es gibt hierfür verschiedene Ausprägungen. Die Benutzer können zu Anfang in der<br />
Phase des Interaktions-Designs bei der Entwicklung von Prototypen einbezogen werden und gegen Ende beim<br />
Akzeptanztest. Bei inkrementellen Entwicklungsprozessen, bei denen ein System in kleineren funktionstüchtigen<br />
Inkrementen entwickelt werden, werden sie noch stärker einbezogen. Dort evaluieren sie jedes einzelne Inkrement –<br />
also Zwischenprodukt – und nicht nur das Endprodukt. Da die Anforderungsanalyse bei der Entwicklungsphase des<br />
nächsten Inkrements wieder durchlaufen wird, kann der Benutzer an vielen Punkten der Entwicklung Einfluss<br />
nehmen. Diese Idee wird beim Extreme Programming, einem agilen Entwicklungsprozess, zum Extrem getrieben,<br />
indem ein Benutzer vor Ort der Entwicklung ist und wöchentlich das System testet und Verbesserungsvorschläge<br />
unterbreitet. Die Gebrauchstauglichkeit kann auf diese Weise besser sicher gestellt werden. Außerdem haben<br />
Benutzer die Möglichkeit, das System, das sie später einsetzen sollen, mitzugestalten, was zu einer höheren<br />
Akzeptanz führen sollte.<br />
Anforderungsanalyse<br />
Wegweiser<br />
Anforderungsspezifikation<br />
Wie halten wir die Anforderungen fest?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 167 / 634
Anforderungsanalyse<br />
Anforderungsspezifikation nach IEEE Std 610.12-1990<br />
Definition<br />
requirement: condition or capability needed by a user to solve a problem<br />
or achieve an objective.<br />
specification: document that specifies, in a complete, precise, verifiable<br />
manner, the requirements (, ...) of a system or component, and, often, the<br />
procedures for determining whether these provisions have been satisfied.<br />
software requirements specification (SRS): documentation of the<br />
essential requirements (functions, performance, design constraints, and<br />
attributes) of the software and its external interfaces.<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 168 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Anforderungsspezifikation nach IEEE Std 610.12-1990<br />
Anforderungsspezifikation nach IEEE Std 610.12-1990<br />
Definition<br />
requirement: condition or capability needed by a user to solve a problem<br />
or achieve an objective.<br />
specification: document that specifies, in a complete, precise, verifiable<br />
manner, the requirements (, ...) of a system or component, and, often, the<br />
procedures for determining whether these provisions have been satisfied.<br />
software requirements specification (SRS): documentation of the<br />
essential requirements (functions, performance, design constraints, and<br />
attributes) of the software and its external interfaces.<br />
An die Ist- und Sollanalyse schließt sich die Formulierung der Anforderungen an. Die Sollanalyse ergibt, was die<br />
<strong>Software</strong> leisten muss, um die Schwachstellen, die durch die Ist-Analyse offenbar wurden, zu beseitigen. Die<br />
Sollanalyse hat jedoch nur die prinzipiellen Konzepte erarbeitet. Diese müssen wir nun präzise ausarbeiten und am<br />
besten schriftlich festhalten. In diesem Abschnitt setzen wir uns deshalb mit der Frage auseinander, wie die<br />
Anforderungen formuliert sein sollen. Bevor wir jedoch dazu kommen, müssen wir über ein paar grundlegende<br />
Begriffe einig werden. Was ist denn eine Anforderungsspezifikation genau?<br />
Im Englischen wird die Anforderungsspezifikation Requirement Specification genannt, was sich aus Requirement für<br />
Anforderung und Specification zusammen setzt. Das <strong>Software</strong>-Engineering-Glossar IEEE Std 610.12-1990 definiert<br />
Requirement wie folgt:<br />
Requirement : condition or capability needed by a user to solve a problem or achieve an objective.<br />
Zu Deutsch: eine Anforderung ist eine Bedingung oder Fähigkeit, die von einem Benutzer benötigt wird, um ein<br />
Problem zu lösen oder ein Ziel zu erreichen.<br />
Eine Spezifikation ist wie folgt definiert:<br />
Specification : document that specifies, in a complete, precise, verifiable manner, the requirements (, ...) of a system<br />
or component, and, often, the procedures for determining whether these provisions have been satisfied.<br />
Eine Spezifikation ist ein Dokument, das vollständig, präzise und überprüfbar die Anforderungen an ein System<br />
oder eine Komponente spezifiziert und oft auch die Prüfprozeduren nennt, um festzustellen, ob diese Forderungen<br />
tatsächlich erfüllt sind.<br />
Diese Definition erläutert nicht nur den Begriff Spezifikation, sondern stellt auch eine Reihe von Forderungen für<br />
Spezifikation auf. Sie sollen vollständig, präzise und überprüfbar sein. Vollständig bedeutet, dass die Spezifikation<br />
alle relevanten Anforderungen nennt. Präzise heißt, dass keine Anforderung missverstanden werden kann.<br />
Überprüfbar bedeutet, dass man für jede Anforderung eine Prüfprozedur angeben kann, anhand derer man objektiv<br />
nachweisen kann, dass eine Anforderung erfüllt ist. Wir werden uns mit diesen Eigenschaften und mit weiteren<br />
Qualitäten, die eine gute Anforderungsspezifikation auszeichnen, in diesem Abschnitt noch auseinander setzen.
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Anforderungsspezifikation nach IEEE Std 610.12-1990<br />
Der zusammengesetzte Begriff <strong>Software</strong> Requirements Specification ist wie folgt definiert:<br />
Anforderungsspezifikation nach IEEE Std 610.12-1990<br />
Definition<br />
requirement: condition or capability needed by a user to solve a problem<br />
or achieve an objective.<br />
specification: document that specifies, in a complete, precise, verifiable<br />
manner, the requirements (, ...) of a system or component, and, often, the<br />
procedures for determining whether these provisions have been satisfied.<br />
software requirements specification (SRS): documentation of the<br />
essential requirements (functions, performance, design constraints, and<br />
attributes) of the software and its external interfaces.<br />
<strong>Software</strong> Requirements Specification : documentation of the essential requirements (functions, performance, design constraints,<br />
and attributes) of the software and its external interfaces.<br />
Diese Definition ergänzt die einzelnen Definitionen von Anforderung und Spezifikation um den Inhalt, der in einer<br />
Anforderungsspezifikation aufgeführt ist. Die Anforderungsspezifikation ist demnach eine Dokumentation der<br />
wesentlichen Anforderungen (Funktionen, Performanz, Entwurfseinschränkungen, und Attribute) einer <strong>Software</strong><br />
sowie ihrer externen Schnittstellen. Diese Inhalte entstammen einer anderen IEEE-Norm, die beschreibt, wie<br />
Anforderungsspezifikation aufgebaut sind und welche Inhalte sie haben. Mit dieser Norm werden wir uns hier noch<br />
auseinander setzen.<br />
Anforderungsanalyse<br />
Anforderungen<br />
Anforderungen sind gleichbedeutend mit Minimalbedingungen hinsichtlich<br />
Funktion und Qualität.<br />
⇒ Wir müssen also die Funktion und Qualität definieren.<br />
Definition<br />
Funktion: in der Zeit ablaufende Transformation<br />
von Eingabedaten<br />
in Ausgabedaten<br />
unter Verwendung von Ressourcen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 169 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Anforderungen<br />
Anforderungen<br />
Anforderungen sind gleichbedeutend mit Minimalbedingungen hinsichtlich<br />
Funktion und Qualität.<br />
⇒ Wir müssen also die Funktion und Qualität definieren.<br />
Definition<br />
Funktion: in der Zeit ablaufende Transformation<br />
von Eingabedaten<br />
in Ausgabedaten<br />
unter Verwendung von Ressourcen<br />
Anforderungen legen die Minimalbedingungen hinsichtlich Funktion und Qualität fest. Was aber sind Funktionen<br />
und wie definiert man Qualität für <strong>Software</strong>?<br />
Während sich Funktionen über den Zusammenhang von Eingaben des Benutzers und darauf hin erwartete<br />
Ausgaben unter Verwendung einer maximalen Menge von Ressourcen definieren lassen, ist der Begriff<br />
<strong>Software</strong>qualität weniger offensichtlich.<br />
Anforderungsanalyse<br />
Produktqualitäten nach ISO/IEC-Standard 9126 (2001)<br />
Änderbarkeit<br />
Übertragbarkeit<br />
Stabilität<br />
Zuverlässigkeit<br />
Prüfbarkeit<br />
Analysierbarkeit<br />
Reife<br />
Modifizierbarkeit<br />
Funktionalität<br />
Fehlertoleranz<br />
Wiederherstellbarkeit<br />
Ordnungsmäßigkeit<br />
Angemessenheit<br />
Interoperabilität<br />
Sicherheit<br />
Richtigkeit<br />
<strong>Software</strong>qualität<br />
Austauschbarkeit<br />
Installierbarkeit<br />
Konformität<br />
Verständlichkeit<br />
Erlernbarkeit<br />
Verbrauchsverhalten<br />
Zeitverhalten<br />
Anpassbarkeit<br />
Bedienbarkeit<br />
Benutzbarkeit<br />
Effizienz<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 170 / 634
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Produktqualitäten nach ISO/IEC-Standard 9126 (2001)<br />
Produktqualitäten nach ISO/IEC-Standard 9126 (2001)<br />
Änderbarkeit<br />
Übertragbarkeit<br />
Zuverlässigkeit Funktionalität<br />
Ordnungsmäßigkeit<br />
Stabilität Reife<br />
Prüfbarkeit<br />
Fehlertoleranz<br />
Angemessenheit<br />
Interoperabilität<br />
Analysierbarkeit<br />
Wiederher-<br />
Modifizierbarkeit<br />
stellbarkeit<br />
Sicherheit<br />
Richtigkeit<br />
<strong>Software</strong>qualität<br />
Austauschbarkeit<br />
Verständlichkeit Verbrauchs-<br />
Installierbarkeit<br />
verhalten<br />
Erlernbarkeit<br />
Konformität Zeitverhalten<br />
Bedienbarkeit<br />
Anpassbarkeit<br />
Der Begriff <strong>Software</strong>qualität ist sehr vielschichtig. Im Allgemeinen bedeutet Qualität lediglich, zu welchem Grad ein<br />
Gegenstand bestimmte Attribute aufweist. Während die Qualität einer Schraube recht einfach durch die Attribute<br />
Festigkeit, Gewicht, Material, Preis etc. festgelegt werden kann, sind die wesentlichen Attribute bei <strong>Software</strong> nicht<br />
ohne Weiteres offensichtlich.<br />
Im internationalen Standard ISO/IEC-Standard 9126 (2001) werden typische <strong>Software</strong>qualitäten in Form<br />
allgemeiner Kategorien und Subkategorien wie folgt aufgeführt:<br />
Funktionalität: Vorhandensein von Funktionen mit festgelegten Eigenschaften, die die definierten Anforderungen<br />
erfüllen:<br />
• Richtigkeit: Liefern der richtigen oder vereinbarten Ergebnisse oder Wirkungen, z.B. die benötigte Genauigkeit von<br />
berechneten Werten<br />
• Angemessenheit: Eignung der Funktionen für spezifizierte Aufgaben, z.B. aufgabenorientierte Zusammensetzung von<br />
Funktionen aus Teilfunktionen<br />
• Interoperabilität: Fähigkeit, mit vorgegebenen Systemen zusammen zu wirken<br />
• Ordnungsmäßigkeit: Erfüllung von anwendungsspezifischen Normen, Vereinbarungen, gesetzlichen Bestimmungen und<br />
ähnlichen Vorschriften<br />
• Sicherheit: Fähigkeit, unberechtigten Zugriff, sowohl versehentlich als auch vorsätzlich, auf Programme und Daten zu<br />
verhindern<br />
Zuverlässigkeit: Fähigkeit der <strong>Software</strong>, ihr Leistungsniveau unter festgelegten Bedingungen über einen festgelegten<br />
Zeitraum zu bewahren:<br />
• Reife: Geringe Versagenshäufigkeit durch Fehlerzustände<br />
• Fehlertoleranz: Fähigkeit, ein spezifiziertes Leistungsniveau bei <strong>Software</strong>fehlern oder Nicht-Einhaltung ihrer spezifizierten<br />
Schnittstelle zu bewahren<br />
• Wiederherstellbarkeit: Fähigkeit, bei einem Versagen das Leistungsniveau wiederherzustellen und die direkt betroffenen<br />
Daten wiederzugewinnen<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Produktqualitäten nach ISO/IEC-Standard 9126 (2001)<br />
Benutzbarkeit<br />
Effizienz<br />
Produktqualitäten nach ISO/IEC-Standard 9126 (2001)<br />
Änderbarkeit<br />
Übertragbarkeit<br />
Zuverlässigkeit Funktionalität<br />
Ordnungsmäßigkeit<br />
Stabilität Reife<br />
Prüfbarkeit<br />
Fehlertoleranz<br />
Angemessenheit<br />
Interoperabilität<br />
Analysierbarkeit<br />
Wiederher-<br />
Modifizierbarkeit<br />
stellbarkeit<br />
Sicherheit<br />
Richtigkeit<br />
<strong>Software</strong>qualität<br />
Austauschbarkeit<br />
Verständlichkeit Verbrauchs-<br />
Installierbarkeit<br />
verhalten<br />
Erlernbarkeit<br />
Konformität Zeitverhalten<br />
Bedienbarkeit<br />
Anpassbarkeit<br />
Benutzbarkeit: Aufwand, der zur Benutzung erforderlich ist, und individuelle Beurteilung der Benutzung durch eine<br />
festgelegte oder vorausgesetzte Benutzergruppe:<br />
• Verständlichkeit: Aufwand für den Benutzer, das Konzept und die Anwendung zu verstehen<br />
• Erlernbarkeit: Aufwand für den Benutzer, die Anwendung zu erlernen (z.B. Bedienung, Ein-, Ausgabe)<br />
• Bedienbarkeit: Aufwand für den Benutzer, die Anwendung zu bedienen<br />
Effizienz: Verhältnis zwischen dem Leistungsniveau der <strong>Software</strong> und dem Umfang der eingesetzten Betriebsmittel<br />
unter festgelegten Bedingungen:<br />
• Zeitverhalten: Antwort- und Verarbeitungszeiten sowie Durchsatz bei der Funktionsausführung<br />
• Verbrauchsverhalten: Anzahl und Dauer der benötigten Betriebsmittel für die Erfüllung der Funktionen<br />
Änderbarkeit: Aufwand, der zur Durchführung vorgegebener Änderungen notwendig ist; Änderungen: Korrekturen,<br />
Verbesserungen oder Anpassungen an Änderungen der Umgebung, der Anforderungen und der funktionalen<br />
Spezifikationen:<br />
• Analysierbarkeit: Aufwand, um Mängel oder Ursachen von Versagen zu diagnostizieren oder um änderungsbedürftige<br />
Teile zu bestimmen<br />
• Modifizierbarkeit: Aufwand zur Ausführung von Verbesserungen, zur Fehlerbeseitigung oder Anpassung an<br />
Umgebungsänderungen<br />
• Stabilität: Wahrscheinlichkeit des Auftretens unerwarteter Wirkungen von Änderungen<br />
• Prüfbarkeit: Aufwand, der zur Prüfung der geänderten <strong>Software</strong> notwendig ist<br />
Übertragbarkeit: Eignung der <strong>Software</strong>, von einer Umgebung in eine andere übertragen zu werden (Umgebung<br />
kann organisatorische Umgebung, Hardware oder <strong>Software</strong>umgebung einschließen):<br />
• Anpassbarkeit: <strong>Software</strong> an verschiedene festgelegte Umgebungen anpassen<br />
• Installierbarkeit: Aufwand, der zum Installieren der <strong>Software</strong> in einer festgelegten Umgebung notwendig ist<br />
• Konformität: Grad, in dem die <strong>Software</strong> Normen oder Vereinbarungen zur Übertragbarkeit erfüllt<br />
• Austauschbarkeit: Möglichkeit, diese <strong>Software</strong> anstelle einer spezifizierten anderen in der Umgebung jener <strong>Software</strong> zu<br />
verwenden, sowie der dafür notwendige Aufwand<br />
Benutzbarkeit<br />
Effizienz
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Produktqualitäten nach ISO/IEC-Standard 9126 (2001)<br />
Produktqualitäten nach ISO/IEC-Standard 9126 (2001)<br />
Änderbarkeit<br />
Übertragbarkeit<br />
Zuverlässigkeit Funktionalität<br />
Ordnungsmäßigkeit<br />
Stabilität Reife<br />
Prüfbarkeit<br />
Fehlertoleranz<br />
Angemessenheit<br />
Interoperabilität<br />
Analysierbarkeit<br />
Wiederher-<br />
Modifizierbarkeit<br />
stellbarkeit<br />
Sicherheit<br />
Richtigkeit<br />
<strong>Software</strong>qualität<br />
Austauschbarkeit<br />
Verständlichkeit Verbrauchs-<br />
Installierbarkeit<br />
verhalten<br />
Erlernbarkeit<br />
Konformität Zeitverhalten<br />
Bedienbarkeit<br />
Anpassbarkeit<br />
Diese Kategorien sind immer noch sehr allgemein und müssen für die Anforderungen an eine bestimmte <strong>Software</strong><br />
konkretisiert und gewichtet werden. Dabei ist zu beachten, dass sich Qualitätsattribute gegenseitig (auch negativ)<br />
beeinflussen können. So stehen hohe Performanz und hohe Wartbarkeit meist in einem Spannungsfeld zueinander.<br />
Die Konkretisierung und Gewichtung der Qualitätsattribute liefert das Qualitätsmodell. Für das Qualitätsmodell<br />
müssen dann Prüfkriterien festgelegt werden, anhand derer das Vorhandensein der gewünschten Eigenschaften<br />
überprüft werden kann. Im ISO/IEC-Standard 25000 (2005), der die Nachfolge von ISO/IEC-Standard 9126 (2001)<br />
angetreten hat, werden hierfür Metriken angegeben. Metriken sind ein numerisches Maß, das beschreibt, inwieweit<br />
eine bestimmte Qualität vorliegt. Durch Einsatz der Metriken wird die Qualität messbar. Über die wesentlichen<br />
Qualitätsattribute und sinnvolle Metriken zu ihrer Messung herrscht jedoch nicht immer Konsens.<br />
Auch die Kategorisierung der Qualitätsattribute ist nicht immer gleich. Ludewig (2003) beispielsweise unterscheidet<br />
auf oberster Ebene nach inneren und äußeren Qualitäten. Äußere Qualitäten sind solche, die für den Benutzer<br />
direkt spürbar sind. Innere Qualitäten richten sich primär an den Entwickler, sind jedoch zumindest indirekt auch<br />
für den Benutzer spürbar durch den Aufwand und die Dauer für Änderungen an der <strong>Software</strong>, um sie an neue und<br />
geänderte Anforderungen anzupassen. Die folgende Grafik zeigt die Aufteilung nach Ludewig (2003):<br />
Produktqualität<br />
innere<br />
äußere<br />
Wartbarkeit<br />
...<br />
Integrierbarkeit ...<br />
... ...<br />
Erstellbarkeit ...<br />
...<br />
Wiederverwendbarkeit<br />
...<br />
Zuverlässigkeit ...<br />
... ...<br />
Nützlichkeit ...<br />
... ...<br />
Robustheit ...<br />
... ...<br />
Bedienbarkeit ...<br />
... ...<br />
Sicherheit ...<br />
...<br />
Prüfbarkeit<br />
Änderbarkeit<br />
Portabilität<br />
Anforderungsanalyse<br />
Bedeutung einer Anforderungsspezifikation<br />
Zweck Folge von Mängeln<br />
Abstimmung mit<br />
Kunden<br />
...<br />
...<br />
...<br />
Die Anforderungen bleiben ungeklärt, Wünsche des<br />
Kunden bleiben unberücksichtigt.<br />
Entwurf Entwerfer fehlt Vorgabe, darum mehr Kommunikation<br />
/ eigene Vorstellung als Vorgabe.<br />
Benutzerhandbuch Basis für das Handbuch fehlt, es wird darum phänomenologisch<br />
verfasst.<br />
Testvorbereitung systematischer Test ist unmöglich<br />
Abnahme Korrektheit ist subjektiv, Streit ist unvermeidbar.<br />
Wiederverwendung nicht spezifizierte Systeme sind kaum durchschaubar,<br />
darum schwer wiederzuverwenden.<br />
spätere Reimplementierung<br />
Kompatibilität setzt voraus, dass man weiß, womit<br />
die neue <strong>Software</strong> kompatibel sein soll.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 171 / 634<br />
...<br />
...<br />
.....<br />
...<br />
... ...<br />
...<br />
...<br />
Benutzbarkeit<br />
Effizienz
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Bedeutung einer Anforderungsspezifikation<br />
Bedeutung einer Anforderungsspezifikation<br />
Zweck Folge von Mängeln<br />
Abstimmung mit<br />
Kunden<br />
Die Anforderungen bleiben ungeklärt, Wünsche des<br />
Kunden bleiben unberücksichtigt.<br />
Entwurf Entwerfer fehlt Vorgabe, darum mehr Kommunikation<br />
/ eigene Vorstellung als Vorgabe.<br />
Benutzerhandbuch Basis für das Handbuch fehlt, es wird darum phänomenologisch<br />
verfasst.<br />
Testvorbereitung systematischer Test ist unmöglich<br />
Abnahme Korrektheit ist subjektiv, Streit ist unvermeidbar.<br />
Wiederverwendung nicht spezifizierte Systeme sind kaum durchschaubar,<br />
darum schwer wiederzuverwenden.<br />
spätere Reimplementierung<br />
Kompatibilität setzt voraus, dass man weiß, womit<br />
die neue <strong>Software</strong> kompatibel sein soll.<br />
Die Anforderungsspezifikation ist von zentraler Bedeutung für die Entwicklung. Sie wird von vielen Personen, die<br />
am Entwicklungsprozess beteiligt sind, als Grundlage ihrer Arbeit verwendet. Eine minderwertige<br />
Anforderungsspezifikation führt zwangsläufig zu Mängeln aller davon abhängiger weiterer Arbeitsprodukte. Da alle<br />
weiteren Arbeitspakete von der Anforderungsspezifikation abhängig sind, haben solche Mängel also eine nachhaltige<br />
Auswirkung auf die Qualität. Deshalb sollte man sich die Mühe machen, die Anforderungen genau zu beschreiben<br />
und sie am auch aufzuschreiben.<br />
Man kann die Auswirkungen einer mangelhaften Anforderungsspezifikation unterscheiden anhand der Zwecke, die<br />
man mit der Anforderungsspezifikation verfolgt:<br />
• Abstimmung: Die Anforderungsspezifikation dient der Abstimmung mit dem Kunden. Mängel in der<br />
Anforderungsspezifikation führen dazu, dass Anforderungen ungeklärt und Wünsche des Kunden unberücksichtigt<br />
bleiben. Ohne eine ausgearbeitete Anforderungsspezifikation kann der Kunde nicht ohne Weiteres in frühen Phasen des<br />
<strong>Projekt</strong>s überprüfen, ob er richtig verstanden wurde und seine Wünsche wirklich umgesetzt werden.<br />
• Entwurf: Der <strong>Software</strong>architekt entwirft auf Basis der Anforderungsspezifikation die <strong>Software</strong>architektur. Bei einer<br />
unzureichenden Anforderungsspezifikation fehlt dem Architekten dafür die notwendige Vorgabe. Dies führt zu einem<br />
erhöhten Bedarf an Kommunikation. Der Architekt muss beim Analytiker beziehungsweise beim Kunden nachfragen.<br />
Außerdem besteht die Gefahr, dass der Architekt seine eigene Vorstellung der Anforderungen entwickelt, die von der des<br />
Kunden abweichen könnte.<br />
• Benutzerhandbuch: Anhand der Anforderungsspezifikation wird das Benutzerhandbuch geschrieben. Ohne<br />
Anforderungsspezifikation fehlt die Basis für das Handbuch. Dies führt dazu, dass es phänomenologisch erfasst wird; d.h.<br />
der Autor des Benutzerhandbuchs schreibt auf, was er beim lauffähigen System beobachtet. Das ist oft unzureichend,<br />
weil er nicht alle Möglichkeiten kennt und damit beobachten kann.<br />
• Testvorbereitung: Ohne präzise und vollständige Anforderungen ist ein systematischer Test unmöglich.<br />
• Vertrag und Abnahme: In der Regel bildet die Anforderungsspezifikation die vertragliche Grundlage für den Auftrag. Am<br />
Ende des <strong>Projekt</strong>s wird bei der Abnahme überprüft, ob die Anforderungen erfüllt sind. Damit wird die Überprüfung der<br />
Korrektheit subjektiv und Streit ist unvermeidbar. Das führt zur Unzufriedenheit des Kunden und häufig zu<br />
Vertragsstreitigkeiten. Da aber die Anforderungen nicht vollständig und präzise beschrieben sind, ist ein Streit um das<br />
Recht mühsam.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Bedeutung einer Anforderungsspezifikation<br />
Bedeutung einer Anforderungsspezifikation<br />
Zweck Folge von Mängeln<br />
Abstimmung mit<br />
Kunden<br />
Die Anforderungen bleiben ungeklärt, Wünsche des<br />
Kunden bleiben unberücksichtigt.<br />
Entwurf Entwerfer fehlt Vorgabe, darum mehr Kommunikation<br />
/ eigene Vorstellung als Vorgabe.<br />
Benutzerhandbuch Basis für das Handbuch fehlt, es wird darum phänomenologisch<br />
verfasst.<br />
Testvorbereitung systematischer Test ist unmöglich<br />
Abnahme Korrektheit ist subjektiv, Streit ist unvermeidbar.<br />
Wiederverwendung nicht spezifizierte Systeme sind kaum durchschaubar,<br />
darum schwer wiederzuverwenden.<br />
spätere Reimplementierung<br />
Kompatibilität setzt voraus, dass man weiß, womit<br />
die neue <strong>Software</strong> kompatibel sein soll.<br />
• Wiederverwendung: Ohne eine Beschreibung, was die <strong>Software</strong> leistet, kann man nicht ohne Weiteres beurteilen, ob<br />
man die <strong>Software</strong> wiederverwenden kann. Nicht spezifizierte Systeme sind kaum durchschaubar, darum schwer<br />
wiederzuverwenden.<br />
• Spätere Reimplementierung: Soll das System später gegen ein neues System ersetzt werden, muss man wissen, was es<br />
tut. Kompatibilität setzt voraus, dass man weiß, womit die neue <strong>Software</strong> kompatibel sein soll.
Anforderungsanalyse<br />
Angestrebte Eigenschaften der Spezifikation<br />
inhaltlich<br />
(1) zutreffend (nicht ” korrekt“!)<br />
(2) vollständig (relativ zu den Wünschen des Kunden)<br />
(3) widerspruchsfrei (oder konsistent, damit auch realisierbar)<br />
(4) neutral d.h. abstrakt (und damit offen für beliebigen Entwurf)<br />
in der Darstellung<br />
(5) leicht verständlich (für alle Zielgruppen!)<br />
(6) präzise (schließt Umgangssprache aus)<br />
in der Form<br />
(7) leicht erstellbar (was die Notationen und Modelle betrifft)<br />
(8) leicht verwaltbar (also auch zweckmäßig strukturiert)<br />
(9) objektivierbar (auch – nicht sinnvoll – ” testbar“ genannt)<br />
Diese Merkmale konkurrieren, d.h. die Erfüllung des einen erschwert oder<br />
verhindert die Erfüllung des anderen.<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 172 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Angestrebte Eigenschaften der Spezifikation<br />
Angestrebte Eigenschaften der Spezifikation<br />
inhaltlich<br />
(1) zutreffend (nicht ” korrekt“!)<br />
(2) vollständig (relativ zu den Wünschen des Kunden)<br />
(3) widerspruchsfrei (oder konsistent, damit auch realisierbar)<br />
(4) neutral d.h. abstrakt (und damit offen für beliebigen Entwurf)<br />
in der Darstellung<br />
(5) leicht verständlich (für alle Zielgruppen!)<br />
(6) präzise (schließt Umgangssprache aus)<br />
in der Form<br />
(7) leicht erstellbar (was die Notationen und Modelle betrifft)<br />
(8) leicht verwaltbar (also auch zweckmäßig strukturiert)<br />
(9) objektivierbar (auch – nicht sinnvoll – ” testbar“ genannt)<br />
Diese Merkmale konkurrieren, d.h. die Erfüllung des einen erschwert oder<br />
verhindert die Erfüllung des anderen.<br />
Weil eine Anforderungsspezifikation von so tragender Bedeutung ist, streben wir eine hochqualitative an. Welche<br />
Eigenschaften müssen wir aber hierzu anstreben? Die anzustrebenden Eigenschaften lassen sich wie folgt<br />
kategorisieren:<br />
Den Inhalt betreffend:<br />
(1) zutreffend: die Anforderungen des Kunden werden richtig wieder gegeben; an manchen Stellen wird für zutreffend auch<br />
der Begriff korrekt synonym verwendet; wir werden aber im Folgenden den Begriff korrekt für das Verhältnis der<br />
Implementierung zur Anforderungsspezifikation reservieren; eine Implementierung ist dann korrekt, wenn sie die<br />
spezifizierten Anforderungen richtig erfüllt. Daraus kann man jedoch noch nicht unmittelbar schließen, dass die<br />
Implementierung auch das implementiert, was der Kunde tatsächlich will. Hierzu ist es noch notwendig, dass die<br />
Anforderungsspezifikation auch die Wünsche des Kunden zutreffend wiedergibt.<br />
(2) vollständig: alle Wünsche des Kunden werden berücksichtigt.<br />
(3) widerspruchsfrei (oder konsistent, damit auch realisierbar): die Anforderungen widersprechen sich nicht; würden sie sich<br />
widersprechen, könnte man nichts implementieren, was alle Anforderungen erfüllt.<br />
(4) neutral, d.h. abstrakt: die Anforderungen sind aus Sicht des Kunden formuliert und nehmen keine unnötigen technischen<br />
Details vorweg. Implementierungsaspekte gehören nicht in die Anforderungsspezifikation, weil sie den Kunden in der<br />
Regel nicht interessieren, sondern eher verwirren. Außerdem bleibt damit dem Architekten beim Entwurf ein<br />
größtmöglicher Gestaltungsspielraum.
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Die Darstellung betreffend:<br />
Angestrebte Eigenschaften der Spezifikation<br />
Angestrebte Eigenschaften der Spezifikation<br />
inhaltlich<br />
(1) zutreffend (nicht ” korrekt“!)<br />
(2) vollständig (relativ zu den Wünschen des Kunden)<br />
(3) widerspruchsfrei (oder konsistent, damit auch realisierbar)<br />
(4) neutral d.h. abstrakt (und damit offen für beliebigen Entwurf)<br />
in der Darstellung<br />
(5) leicht verständlich (für alle Zielgruppen!)<br />
(6) präzise (schließt Umgangssprache aus)<br />
in der Form<br />
(7) leicht erstellbar (was die Notationen und Modelle betrifft)<br />
(8) leicht verwaltbar (also auch zweckmäßig strukturiert)<br />
(9) objektivierbar (auch – nicht sinnvoll – ” testbar“ genannt)<br />
Diese Merkmale konkurrieren, d.h. die Erfüllung des einen erschwert oder<br />
verhindert die Erfüllung des anderen.<br />
(5) leicht verständlich: Die Anforderungsspezifikation ist leicht verständlich für alle Zielgruppen. Dazu gehören neben<br />
Entwicklern mit technischem Verständnis auch Kunden und Benutzer, die meist mit formalen Methoden und Notation<br />
nichts anzufangen wissen. Selbst die Verwendung der Unified Modeling Language ist für einen Kunden und Benutzer<br />
nicht ohne Weiteres zumutbar, auch wenn manche sie als Notation für die Kommunikation mit Kunden und Benutzern<br />
anpreisen. Die Vorteile einer (semi-)formalen Notation ist ihre Präzision und Prägnanz. Aus diesem Grund würde man<br />
sich ihren Einsatz wünschen. Wird eine solche Notation verwendet, muss der Kunde aber darin geschult werden – oder<br />
würden wir einen Vertrag in Hieroglyphen unterzeichnen?<br />
(6) präzise: die Anforderungen müssen unmissverständlich formuliert sein, sonst besteht die Gefahr, dass etwas Falsches<br />
implementiert wird. Dies schließt Umgangssprache, die sich durch vage Begriffe und Mehrdeutigkeiten auszeichnet, aus.<br />
Ebenso sollten sprachliche Weichmacher wie könnte, müsste, circa, ungefähr etc. vermieden werden.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Die Form betreffend:<br />
Angestrebte Eigenschaften der Spezifikation<br />
Angestrebte Eigenschaften der Spezifikation<br />
inhaltlich<br />
(1) zutreffend (nicht ” korrekt“!)<br />
(2) vollständig (relativ zu den Wünschen des Kunden)<br />
(3) widerspruchsfrei (oder konsistent, damit auch realisierbar)<br />
(4) neutral d.h. abstrakt (und damit offen für beliebigen Entwurf)<br />
in der Darstellung<br />
(5) leicht verständlich (für alle Zielgruppen!)<br />
(6) präzise (schließt Umgangssprache aus)<br />
in der Form<br />
(7) leicht erstellbar (was die Notationen und Modelle betrifft)<br />
(8) leicht verwaltbar (also auch zweckmäßig strukturiert)<br />
(9) objektivierbar (auch – nicht sinnvoll – ” testbar“ genannt)<br />
Diese Merkmale konkurrieren, d.h. die Erfüllung des einen erschwert oder<br />
verhindert die Erfüllung des anderen.<br />
(7) leicht erstellbar: die Anforderungsspezifikation ist in vielen Fällen ein sehr umfangreiches Dokument. Darum ist es<br />
wichtig, das es leicht erstellt werden kann. Somit ist die Auswahl geeigneter Notationen und Modelle bedeutsam. Häufig<br />
wird sie nicht nur von einem Autoren erstellt, so dass die Zusammenarbeit mehrerer Autoren unterstützt werden muss.<br />
Die Anforderungsspezifikation muss also modular aufgebaut sein.<br />
(8) leicht verwaltbar: die Anforderungsspezifikation muss durch zweckmäßige Strukturierung, eindeutige Referenzierbarkeit<br />
und explizite Querbezüge leicht überarbeitet und versioniert werden können. Idealerweise ist der Code über den Entwurf<br />
hin zu den Anforderungen verknüpft, um eine hohe Nachvollziehbarkeit zwischen diesen Dokumenten zu gewährleisten,<br />
da die Dokumente nachgeführt werden müssen, wenn sich Dinge ändern. Hierfür wurden eine Reihe von Werkzeugen,<br />
wie z.B. Doors, entwickelt<br />
(9) objektivierbar: für jede Anforderung muss es möglich sein, eine Prüfprozedur anzugeben, mit deren Hilfe man objektiv<br />
entscheiden kann, ob das resultierende System die Anforderung erfüllt; synonym zu objektivierbar wird häufig auch der<br />
Begriff testbar verwendet; dieser Begriff suggeriert jedoch, dass man das System für die Prüfung ausführen können muss<br />
(vgl. das Kursmodul Test); die meisten Prüfungen lassen sich aber ohne Ausführung des Systems durchführen.<br />
Die Anforderung ” Die Programm soll eine hohe Performanz aufweisen“ ist ein Negativbeispiel für eine objektivierbare<br />
Anforderung. Hier ist unklar, was ” hohe Performanz“ genau bedeutet. Statt dessen sollte die Anforderung vielmehr in<br />
der folgenden Weise formuliert werden: ” Die Ausgabe soll in mindestens 60 % aller Fälle nach spätestens 20 Sekunden<br />
erfolgen; nach höchstens 30 Sekunden soll die Ausgabe in 100 % aller Fälle erfolgen. Die Berechnung muss mit maximal<br />
5 MB Hauptspeicher und 100 MB Plattenplatz auskommen“.<br />
Leider ist es nicht immer möglich, alle diese Merkmale bei einer Anforderungsspezifikation zu erfüllen, weil die<br />
Merkmale konkurrieren können, das heißt die Erfüllung des einen erschwert oder verhindert die Erfüllung des<br />
anderen. Präzise Anforderungen sind in der Regel nur mit Hilfe formaler Spezifikationsprachen zu erreichen, die sind<br />
aber für einen Kunden meist nicht verständlich.
Anforderungsanalyse<br />
Regeln für Analyse und Spezifikation<br />
2009-02-09<br />
Ein Begriffslexikon anlegen und entwickeln<br />
Von der Aufgabe ausgehen, nicht von ihrer Lösung<br />
Daten suchen, nicht Programmabläufe beschreiben<br />
Abstraktionsebene nicht in einer Darstellung wechseln<br />
Die Spezifikation nach Aspekten organisieren<br />
Ein Mengengerüst bilden<br />
Den Kunden (Benutzer) einbeziehen<br />
Geeignete Sprachen und Werkzeuge verwenden<br />
Die Spezifikation so früh wie möglich prüfen und dem<br />
Konfigurationsmanagement unterstellen<br />
Die Spezifikation intensiv verwenden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 173 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Regeln für Analyse und Spezifikation<br />
Um eine gute Anforderungsspezifikation zu erreichen, ist es ratsam, einige Regeln zu befolgen.<br />
Regeln für Analyse und Spezifikation<br />
Ein Begriffslexikon anlegen und entwickeln<br />
Von der Aufgabe ausgehen, nicht von ihrer Lösung<br />
Daten suchen, nicht Programmabläufe beschreiben<br />
Abstraktionsebene nicht in einer Darstellung wechseln<br />
Die Spezifikation nach Aspekten organisieren<br />
Ein Mengengerüst bilden<br />
Den Kunden (Benutzer) einbeziehen<br />
Geeignete Sprachen und Werkzeuge verwenden<br />
Die Spezifikation so früh wie möglich prüfen und dem<br />
Konfigurationsmanagement unterstellen<br />
Die Spezifikation intensiv verwenden<br />
• Ein Begriffslexikon (auch: Glossar) anlegen und entwickeln. Das Begriffslexikon beschreibt alle Begriffe, die der Kunde<br />
und wir benützen, die nicht unmittelbar offensichtlich sind. Die schriftliche Niederlegung der Bedeutung aller Begriffe<br />
zwingt uns und den Kunden zur notwendigen Präzision in unserem Dialog und hilft damit, Missverständnisse zu<br />
vermeiden. Hier sollten auch alle Synonyme aufgezählt werden. Im eigentlichen Inhalt der schriftlichen<br />
Anforderungsspezifikation sollten wir aber Synonyme vermeiden und immer nur dasselbe Wort benutzen. Die<br />
Anforderungsspezifikation ist kein literatisches Werk, das durch hohe Sprachvariation gefallen will, sondern soll ein<br />
präzises, leicht verständliches technisches Dokument sein. Unterschiedliche Worte für denselben Sachverhalten verwirren<br />
nur.<br />
• Von der Aufgabe ausgehen, nicht von ihrer Lösung. Die Anforderungsspezifkation beschreibt das zu implementierende<br />
System aus Sicht des Kunden. Wie das System intern implementiert wird, interessiert den Kunden nicht, sondern<br />
verwirrt ihn eher, weil er sich mit Implementierungsfragen in der Regel nicht auskennt. Implementierungsfragen gehören<br />
in ein Entwurfsdokument, wie z.B. die Architekturbeschreibung. Wir sollten den Gestaltungsraum des<br />
<strong>Software</strong>architekten durch die Anforderungsspezifikation nicht unnötig einschränken.<br />
• Daten suchen, nicht Programmabläufe beschreiben. Primär sind wir an den Daten, d.h. den Objekten, der<br />
Anwendungsdomäne interessiert. Sie ändern sich meist weniger als die Abläufe, in denen sie verarbeitet werden.<br />
Natürlich gehören zur Beschreibung in der Anforderungsspezifikation die Kommunikation zwischen den Objekten und<br />
welche Operationen sie prinzipiell beherrschen. Die <strong>Software</strong> muss ja Arbeitsflüsse abbilden. Wie aber diese Operationen<br />
intern implementiert werden (der Programmablauf) ist ein Detail der Implementierung und sollte erst später im Entwurf<br />
oder in der Implementierungsphase spezifiziert werden.<br />
• Abstraktionsebene nicht in einer Darstellung wechseln. Um den Leser zu führen statt ihn zu verwirren, sollten wir uns<br />
Details für vertiefende Abschnitte aufheben. Die Anforderungsspezifikation sollte so gestaltet sein, dass der Leser erst<br />
einen allgemeinen Überblick über alle Anforderungen an das System erhält und erst dann einen detaillierten Einblick in<br />
die einzelnen Anforderungen. Ein Wechsel zwischen diesen Ebenen verwirrt unnötig.
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Regeln für Analyse und Spezifikation<br />
Regeln für Analyse und Spezifikation<br />
Ein Begriffslexikon anlegen und entwickeln<br />
Von der Aufgabe ausgehen, nicht von ihrer Lösung<br />
Daten suchen, nicht Programmabläufe beschreiben<br />
Abstraktionsebene nicht in einer Darstellung wechseln<br />
Die Spezifikation nach Aspekten organisieren<br />
Ein Mengengerüst bilden<br />
Den Kunden (Benutzer) einbeziehen<br />
Geeignete Sprachen und Werkzeuge verwenden<br />
Die Spezifikation so früh wie möglich prüfen und dem<br />
Konfigurationsmanagement unterstellen<br />
Die Spezifikation intensiv verwenden<br />
• Die Spezifikation nach Aspekten organisieren. Die Spezifikation ist nicht selten ein Dokument mit mehreren hundert<br />
Seiten. Es kann nicht ohne Unterbrechung gelesen werden. Außerdem wird es von Lesern mit sehr unterschiedlichen<br />
Interessen gelesen. Dazu gehören auf Kundenseite neben dem Auftraggeber (auch hier gibt es meist verschiedene Rollen:<br />
der Auftraggeber, der für den Inhalt verantwortlich ist und der Auftraggeber, der für die Finanzierung und Termintreue<br />
verantwortlich ist) die verschiedenen Benutzerklassen. Auf der Seite der Hersteller wird das Dokument von den<br />
Architekten, den Programmierern, den Handbuchautoren und den Testern gelesen. Alle interessieren sich für<br />
unterschiedliche Belange. Um die vielen Arten von Lesern zu unterstützen, muss die Spezifikation uniform nach<br />
relevanten Aspekten organisiert werden.<br />
• Ein Mengengerüst bilden. Damit der Architekt eine Vorstellung über die Anforderungen an die Belastbarkeit des Systems<br />
erhält, um das System dafür entsprechend auszulegen, muss er wissen, mit wie vielen Daten er es zu tun haben wird. Es<br />
macht einen gravierenden Unterschied, ob ein System etwa 10 oder 10.000 Benutzer unterstützen muss. Damit der<br />
Architekt das System auch für zukünftige Anforderungen skalierbar entwerfen kann, sollten neben dem heutigen<br />
Mengengerüst auch realistische Prognosen gemacht werden, wie sich das Mengengerüst in Zukunft entwickeln wird.<br />
• Den Kunden (Benutzer) einbeziehen. Wir entwickeln für den Kunden, der uns dafür bezahlt, und für die Benutzer, die<br />
unser System später benutzen sollen. Ihre Belange sind Ausgangspunkt unseres <strong>Projekt</strong>s. Sie können an verschiedenen<br />
Stellen im Entwicklungsprozess eingebunden werden, nicht nur während der Anforderungsanalyse und am Ende beim<br />
Akzeptanztest. Beim partizipativen Vorgehen beispielsweise werden wir in kurzen Zeitabständen Prototypen und<br />
verschiedene Inkremente des Systems vorführen, um ihr Feedback einzuholen. Ganz besonders benötigen wir sie aber<br />
während der initialen Anforderungsanalyse. Um sicher zu stellen, dass wir die Anforderungsspezifikation die Wünsche des<br />
Kunden und der Benutzer treffend widerspiegelt, sollte die Anforderungsspezifikation in einem Review mit Kunden und<br />
Benutzern abgenommen werden.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Regeln für Analyse und Spezifikation<br />
Regeln für Analyse und Spezifikation<br />
Ein Begriffslexikon anlegen und entwickeln<br />
Von der Aufgabe ausgehen, nicht von ihrer Lösung<br />
Daten suchen, nicht Programmabläufe beschreiben<br />
Abstraktionsebene nicht in einer Darstellung wechseln<br />
Die Spezifikation nach Aspekten organisieren<br />
Ein Mengengerüst bilden<br />
Den Kunden (Benutzer) einbeziehen<br />
Geeignete Sprachen und Werkzeuge verwenden<br />
Die Spezifikation so früh wie möglich prüfen und dem<br />
Konfigurationsmanagement unterstellen<br />
Die Spezifikation intensiv verwenden<br />
• Geeignete Sprachen und Werkzeuge verwenden. Die Anforderungsspezifikation sollte möglichst präzise, aber eben auch<br />
verständlich sein. Hierzu kann man Diagrammen benutzen. Die UML beispielsweise enthält eine Reihe von<br />
Diagrammtypen, mit deren Hilfe man bestimmte Aspekte verständlich und genau beschreiben kann. Für das<br />
Datenmodell eignen sich zum Beispiel Klassendiagramme. Es versteht sich von selbst, dass wir dem Kunden unsere<br />
Notation erklären müssen. Zur Erstellung des Dokuments bedient man sich am besten spezieller Werkzeuge. Neben<br />
herkömmlicher Editierfunktionen können uns hierbei Werkzeuge helfen, Anforderungen eindeutig zu nummerieren sowie<br />
Verweise einzufügen, zu verfolgen und zu prüfen. Diese Werkzeuge können uns auch einen festen Rahmen vorgeben.<br />
Einfache Prüfungen auf Vollständigkeit werden damit möglich.<br />
• Die Spezifikation so früh wie möglich prüfen und dem Konfigurationsmanagement unterstellen. Die<br />
Anforderungsspezifikation sollte wir selbst mit internen Reviews überprüfen. Nach Fertigstellung der<br />
Anforderungsspezifikation sollte mindestens eine Prüfung mit dem Kunden und den Benutzern stattfinden. Weitere noch<br />
frühere Prüfungen kann man mit Hilfe von Prototypen erreichen.<br />
Die Anforderungsspezifikation wird sich ändern, weil in Prüfungen und auch später Fehler und Lücken gefunden werden.<br />
Außerdem können sich bei einer längeren <strong>Projekt</strong>laufzeit Anforderungen auch noch während der Entwicklung ändern<br />
aufgrund geänderter Rahmenbedingungen. Zudem arbeiten meist mehrere Personen an der Anforderungsspezifikation.<br />
Aus diesem Grund muss die Anforderungsspezifikation von Anbeginn unter das Konfigurationsmanagement gestellt<br />
werden.<br />
• Die Spezifikation intensiv verwenden. Die Anforderungsspezifikation ist der Ausgang für alle weiteren Entwicklungen. Sie<br />
wird nicht nur benutzt beim Vertragsabschluss von Auftragnehmer und -geber sondern für eine Reihe weiterer Personen,<br />
die für die Entwicklung verantwortlich sind. Dazu gehören Architekten, Programmierer, Tester und Handbuchautoren. Es<br />
sollte eine Selbstverständlichkeit sein, dass diese Menschen die Spezifikation intensiv nutzen. Leider hat die Praxis<br />
gezeigt, dass z.B. viele Programmierer Fehler deshalb machen, weil sie die Anforderungsspezifikation niemals gelesen<br />
haben.
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Regeln für Analyse und Spezifikation<br />
Regeln für Analyse und Spezifikation<br />
Ein Begriffslexikon anlegen und entwickeln<br />
Von der Aufgabe ausgehen, nicht von ihrer Lösung<br />
Daten suchen, nicht Programmabläufe beschreiben<br />
Abstraktionsebene nicht in einer Darstellung wechseln<br />
Die Spezifikation nach Aspekten organisieren<br />
Ein Mengengerüst bilden<br />
Den Kunden (Benutzer) einbeziehen<br />
Geeignete Sprachen und Werkzeuge verwenden<br />
Die Spezifikation so früh wie möglich prüfen und dem<br />
Konfigurationsmanagement unterstellen<br />
Die Spezifikation intensiv verwenden<br />
Nachdem wir wissen, welche Qualitäten der Anforderungsspezifikation wir anstreben und welche Regeln wir<br />
einhalten sollen, werden wir uns nun mit ihrem Inhalt und ihrer Struktur auseinander setzen. Glücklicherweise<br />
haben sich dazu bereits viele Spezialisten Gedanken gemacht, die sogar in einen Standard gemündet sind. Da wir<br />
das Rad nicht neu erfinden wollen und die Orientierung an Standards eine gute Ingenieurstugend ist, nehmen wir<br />
uns diesen Standard zum Vorbild. Wir können diesen Standard als einen Rahmen für unsere Spezifikation<br />
verwenden und laufen so weniger Gefahr, etwas zu vergessen.<br />
Es handelt sich dabei um den IEEE Recommended Practice for <strong>Software</strong> Requirements Specifications, IEEE<br />
Standard 830.1998. Er setzt vieles von dem um, was wir bislang kennen gelernt haben. Wir werden hierzu<br />
Konkretisierungen und darüber hinaus führende Ergänzungen kennen lernen (Ergebnisse der Soll-Analyse,<br />
Datenmodell und Prognosen für zukünftige Anforderungen), die auch beschrieben sein sollten.<br />
Anforderungsanalyse<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
1. Einführung<br />
1.1 Zweck<br />
1.2 Rahmen<br />
1.3 Definitionen, Akronyme und Abkürzungen<br />
1.4 Referenzen<br />
1.5 Übersicht über das Dokument<br />
2. Allgemeine Beschreibung<br />
2.1 Produktperspektive<br />
2.2 Produktfunktionen<br />
2.3 Charakteristika der Benutzer<br />
2.4 Einschränkungen<br />
2.5 Annahmen und Abhängigkeiten<br />
3. Detaillierte Beschreibung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 174 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
1. Einführung<br />
1.1 Zweck<br />
1.2 Rahmen<br />
1.3 Definitionen, Akronyme und Abkürzungen<br />
1.4 Referenzen<br />
1.5 Übersicht über das Dokument<br />
2. Allgemeine Beschreibung<br />
2.1 Produktperspektive<br />
2.2 Produktfunktionen<br />
2.3 Charakteristika der Benutzer<br />
2.4 Einschränkungen<br />
2.5 Annahmen und Abhängigkeiten<br />
3. Detaillierte Beschreibung<br />
Der Standard gibt eine dreiteilige Struktur vor: eine Einführung, eine allgemeine Beschreibung und eine detaillierte<br />
Beschreibung. Er folgt hierin den oben erwähnten Regeln, nach Aspekten und Detaillierungsgrad zu ordnen. Die<br />
Struktur bis in die zweite Gliederungsebene ist wie folgt:<br />
1. Einführung<br />
1.1 Zweck<br />
1.2 Rahmen<br />
1.3 Definitionen, Akronyme und Abkürzungen<br />
1.4 Referenzen<br />
1.5 Übersicht über das Dokument<br />
2. Allgemeine Beschreibung<br />
2.1 Produktperspektive<br />
2.2 Produktfunktionen<br />
2.3 Charakteristika der Benutzer<br />
2.4 Einschränkungen<br />
2.5 Annahmen und Abhängigkeiten<br />
3. Detaillierte Beschreibung<br />
Wir werden diese Abschnitte nun im Einzelnen im Detail kennen lernen. Ein Beispiel für eine ausführliche<br />
Anforderungsspezifikation finden Sie unter . . . <br />
Anforderungsanalyse<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
1. Einführung<br />
1.1 Zweck<br />
Zweck der Spezifikation<br />
adressierte Leser<br />
1.2 Rahmen<br />
herzustellende <strong>Software</strong> mit Name<br />
was die <strong>Software</strong> tut und nicht tut<br />
Anwendung der <strong>Software</strong> mit Nutzen und Zielen<br />
1.3 Definitionen, Akronyme und Abkürzungen<br />
1.4 Referenzen<br />
1.5 Übersicht über das Dokument<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 175 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
1. Einführung<br />
1.1 Zweck<br />
Zweck der Spezifikation<br />
adressierte Leser<br />
1.2 Rahmen<br />
herzustellende <strong>Software</strong> mit Name<br />
was die <strong>Software</strong> tut und nicht tut<br />
Anwendung der <strong>Software</strong> mit Nutzen und Zielen<br />
1.3 Definitionen, Akronyme und Abkürzungen<br />
1.4 Referenzen<br />
1.5 Übersicht über das Dokument<br />
Das Ziel der Einführung ist es, den Kontext und Rahmen der Anforderungsspezifikation abzustecken. Sie hat<br />
folgende Struktur:<br />
1.1 Zweck<br />
Dieser Abschnitt beschreibt den Zweck der Spezifikation und an welche Leser sie sich wendet. Meist geschieht dies<br />
durch eine kurze Beschreibung des <strong>Projekt</strong>kontextes und der Ziele des <strong>Projekt</strong>s. Dann folgt der Hinweis, dass in diesem<br />
Dokument die Anforderungen dieses System spezifiziert werden sollen und oft die Aussage, dass dieses Dokument die<br />
vertragliche Grundlage bildet. Für die adressierten Leser werden mindestens die konkreten Namen der Kunden und<br />
Vertreter möglicher Benutzer genannt.<br />
1.2 Rahmen<br />
Hier geben wir der zu erstellenden <strong>Software</strong> einen Namen und beschreiben ganz kurz, was die herzustellende <strong>Software</strong><br />
leisten soll und auch, was wir explizit nicht von ihr erwarten, um gleich zu Anfang falschen Vorstellungen Einhalt zu<br />
gebieten. Es folgt die Beschreibung der Anwendung der <strong>Software</strong> mit ihrem Nutzen und ihren Zielen. Dieser Abschnitt<br />
soll nur einen ersten Überblick vermitteln, was die <strong>Software</strong> genau machen soll, folgt in den zwei nachfolgenden Kapiteln.<br />
Bsp.: Der PDA-basierte Einkaufsassistent, den wir als laufendes Beispiel verwenden, soll den Namen PDAss tragen. <br />
1.3 Definitionen, Akronyme und Abkürzungen<br />
Hier ist er der Ort, an dem Begriffe definiert und Akronyme und Abkürzungen eingeführt werden können, die im<br />
weiteren Dokument benutzt werden. Damit wird der Standard unserer oben geäußerten Forderung gerecht, ein<br />
Begriffslexikon (Glossar) zum Ausschluss von Missverständnissen zu verwenden.<br />
Bsp.: Wir würden hier beispielsweise das Akronym PDA für ” Personal Digital Assistant“ erläutern. <br />
1.4 Referenzen<br />
Hier können weitere Dokumente aufgeführt werden, die für das Verständnis der Anforderungsspezifikation hilfreich sind<br />
und im folgenden Text referenziert werden. Dazu sollte auch z.B. der IEEE-Standard für diese Anforderungsspezifikation<br />
gehören.<br />
Bsp.: Hier könnten wir die Fahrradherstellerkataloge und weitere Dokumente, die wir in der Ist-Analyse gefunden haben,<br />
nennen. <br />
1.5 Übersicht über das Dokument<br />
Schließlich erfolgt hier in diesem Abschnitt eine kurze Übersicht für den Leser über die weiteren Kapitel und Abschnitte<br />
dieser Anforderungsspezfikation.<br />
Anforderungsanalyse<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
2. Allgemeine Beschreibung<br />
2.1 Produktperspektive<br />
Einbettung in ein Gesamtsystem<br />
2.1.1 Systemschnittstellen<br />
2.1.2 Benutzungsschnittstelle (logische Charakteristika. z.B. Monitorformat,<br />
Seiten- oder Fensterlayout, Inhalt von Berichten oder Menüs,<br />
Verfügbarkeit von Funktionstasten) sowie Regeln für die Schnittstelle<br />
2.1.3 Hardwareschnittstellen<br />
2.1.4 <strong>Software</strong>schnittstellen<br />
2.1.5 Kommunikationsschnittstellen (Netzwerkprotokolle etc.)<br />
2.1.6 Speicherbeschränkungen<br />
2.1.7 Betriebsoperationen (Operationsmodi, Dauer interaktiver und<br />
nichtinteraktiver Operationen, unterstützende<br />
Datenverarbeitungsfunktionen, Sicherungs- und<br />
Wiederherstellungsoperationen)<br />
2.1.8 Möglichkeiten der lokalen Anpassung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 176 / 634
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
2. Allgemeine Beschreibung<br />
2.1 Produktperspektive<br />
Einbettung in ein Gesamtsystem<br />
2.1.1 Systemschnittstellen<br />
2.1.2 Benutzungsschnittstelle (logische Charakteristika. z.B. Monitorformat,<br />
Seiten- oder Fensterlayout, Inhalt von Berichten oder Menüs,<br />
Verfügbarkeit von Funktionstasten) sowie Regeln für die Schnittstelle<br />
2.1.3 Hardwareschnittstellen<br />
2.1.4 <strong>Software</strong>schnittstellen<br />
2.1.5 Kommunikationsschnittstellen (Netzwerkprotokolle etc.)<br />
2.1.6 Speicherbeschränkungen<br />
2.1.7 Betriebsoperationen (Operationsmodi, Dauer interaktiver und<br />
nichtinteraktiver Operationen, unterstützende<br />
Datenverarbeitungsfunktionen, Sicherungs- und<br />
Wiederherstellungsoperationen)<br />
2.1.8 Möglichkeiten der lokalen Anpassung<br />
Das Kapitel 2 beschreibt Allgemeines sowie die Anforderungen im Einzelnen, ohne jedoch gleich alle möglichen<br />
Details zu nennen (letztere folgen im dritten Kapitel).<br />
2.1 Produktperspektive<br />
Dieser Abschnitt bettet das zu implementierende System in ein Gesamtsystem ein. Dazu werden alle seine<br />
Schnittstellen zu anderen Systemen und zum Benutzer beschrieben sowie weitere globale Einschränkungen.<br />
Wir werden bei der Beschreibung der Schnittstellen feststellen, dass es nicht immer einfach ist, eine Schnittstelle<br />
einer der unten aufgeführten Kategorien eindeutig zuzuordnen. Im Zweifel entscheiden wir uns für eine und fügen in<br />
den anderen Abschnitten einen Querbezug zu dieser Beschreibung ein. Primär ist wichtig, dass die Schnittstelle<br />
beschrieben ist. Durch die Querbezüge stellen wir sicher, dass wir diese Beschreibung finden werden, egal in<br />
welchem Abschnitt wir intuitiv suchen.<br />
2.1.1 Systemschnittstellen<br />
Über Systemschnittstellen ist das zu implementierende System mit anderen Systemen verbunden, mit denen es<br />
zusammen arbeiten soll. Dazu gehören z.B. Import- und Exportschnittstellen für den Datenaustausch,<br />
Scripting-Schnittstellen, über die sich das System programmieren lässt, sowie Application Interfaces (API), über das<br />
man das System programmatisch steuern kann.<br />
Bsp.: Hier könnten wir für PDAss fordern, dass man die Herstellerkataloge in einem zu definierenden elektronischen<br />
XML-basierten Format einlesen können soll. <br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
2. Allgemeine Beschreibung<br />
2.1 Produktperspektive<br />
Einbettung in ein Gesamtsystem<br />
2.1.1 Systemschnittstellen<br />
2.1.2 Benutzungsschnittstelle (logische Charakteristika. z.B. Monitorformat,<br />
Seiten- oder Fensterlayout, Inhalt von Berichten oder Menüs,<br />
Verfügbarkeit von Funktionstasten) sowie Regeln für die Schnittstelle<br />
2.1.3 Hardwareschnittstellen<br />
2.1.4 <strong>Software</strong>schnittstellen<br />
2.1.5 Kommunikationsschnittstellen (Netzwerkprotokolle etc.)<br />
2.1.6 Speicherbeschränkungen<br />
2.1.7 Betriebsoperationen (Operationsmodi, Dauer interaktiver und<br />
nichtinteraktiver Operationen, unterstützende<br />
Datenverarbeitungsfunktionen, Sicherungs- und<br />
Wiederherstellungsoperationen)<br />
2.1.8 Möglichkeiten der lokalen Anpassung<br />
2.1.2 Benutzungsschnittstelle<br />
Eine besondere Schnittstelle ist die, die dem Benutzer angeboten wird. Die detaillierte Beschreibung dieser Schnittstelle<br />
erfolgt in Abschnitt 3.1.1. Hier werden lediglich die logischen Charakteristika der Schnittstelle erläutert, z.B. das<br />
Monitorformat, das Seiten- oder Fensterlayout, den Inhalt von Berichten oder Menüs oder die Verfügbarkeit von<br />
Funktionstasten. Außerdem werden alle relevanten Regeln für das Design der Schnittstelle genannt, wie z.B. die<br />
allgemeinen (in aller Regel ohnehin verbindlichen) Richtlinien der Norm EN ISO 9241-10:1995 (1995) für die<br />
Gebrauchstauglichkeit von <strong>Software</strong>. Die Angaben müssen aber hinreichend konkretisiert werden. Diese Regeln können<br />
auch eine einfache Liste von “Dos and Don’ts” sein, wie sich die Schnittstelle dem Benutzer darstellen soll.<br />
Beispielsweise ob kurze oder lange Fehlermeldungen vorzuziehen sind. In jedem Fall gilt auch hier, dass die<br />
Anforderungen objektivierbar sein müssen. Statt ” benutzerfreundlich“ sollte es also besser ” Persona X kann die Funktion<br />
Sortiment einsehen in zwei Minuten ausführen (nach einer Schulung von zehn Minuten)“ heißen.<br />
Charakteristika der Benutzer werden in Abschnitt 2.3 angegeben.<br />
Bsp.: Hier würden wir z.B. die Auflösung des PDA-Monitors für PDAss, die Farbtiefe, die Eingabemöglichkeiten über<br />
Stift und nur wenige Tasten und die minimalen Schriftgrößen etc. angeben. <br />
2.1.3 Hardwareschnittstellen<br />
Hardwareschnittstellen sind Schnittstellen zu Hardware, die das System voraussetzt beziehungsweise bedient. Dieser<br />
Abschnitt ist insbesondere für eingebettete Systeme von großer Bedeutung. Für alle Arten von Systemen würde man<br />
hier aber die zu unterstützenden Prozessortypen beschreiben, auf denen die <strong>Software</strong> später laufen soll. Hardware, die<br />
eher der Benutzungsschnittstelle zuzuordnen ist, wird in Abschnitt 2.1.2 beschrieben.
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
2. Allgemeine Beschreibung<br />
2.1 Produktperspektive<br />
Einbettung in ein Gesamtsystem<br />
2.1.1 Systemschnittstellen<br />
2.1.2 Benutzungsschnittstelle (logische Charakteristika. z.B. Monitorformat,<br />
Seiten- oder Fensterlayout, Inhalt von Berichten oder Menüs,<br />
Verfügbarkeit von Funktionstasten) sowie Regeln für die Schnittstelle<br />
2.1.3 Hardwareschnittstellen<br />
2.1.4 <strong>Software</strong>schnittstellen<br />
2.1.5 Kommunikationsschnittstellen (Netzwerkprotokolle etc.)<br />
2.1.6 Speicherbeschränkungen<br />
2.1.7 Betriebsoperationen (Operationsmodi, Dauer interaktiver und<br />
nichtinteraktiver Operationen, unterstützende<br />
Datenverarbeitungsfunktionen, Sicherungs- und<br />
Wiederherstellungsoperationen)<br />
2.1.8 Möglichkeiten der lokalen Anpassung<br />
2.1.4 <strong>Software</strong>schnittstellen<br />
<strong>Software</strong>schnittstellen sind Schnittstellen zu <strong>Software</strong>, die Bestandteil des System werden soll. Dazu gehören<br />
Betriebssysteme, höhere Dienste wie z.B. Datenbanken sowie wiederverwendbare Bibliotheken, die eingebunden werden<br />
sollen.<br />
Wir erinnern uns, dass Implementierungsdetails eigentlich nicht in die Anforderungsspezifikation gehören. Insofern dürfen<br />
wir nur solche <strong>Software</strong>schnittstellen hier aufzählen, die tatsächlich von Interesse für den Kunden sind, z.B. dann wenn<br />
er diese <strong>Software</strong> bereits einsetzt und in diesem Kontext wieder verwenden möchte bzw. wenn sich aus ihrer Verwendung<br />
weitere lizenzrechtliche Aspekte für den Kunden ergeben würden.<br />
Bsp.: Der Ladenverkäufer hat eine MySQL-Datenbank der Version 4.1 bereits im Einsatz und besteht darauf, dass<br />
unsere <strong>Software</strong> alle persistenten Daten darin speichern soll. <br />
2.1.5 Kommunikationsschnittstellen<br />
Sofern das System mit anderen Systemen über ein Netzwerk kommuniziert, beschreiben wir hierfür die<br />
Kommunikationsschnittstelle sowie Netzwerkprotokolle etc. Auch hier gilt wieder, dass nur solche Schnittstellen<br />
interessieren, die zu anderen Systemen führen beziehungsweise für die der Kunde sorgen muss, damit unser System<br />
arbeiten kann. Ist eine solche Schnittstelle vollständig intern und wird von uns mitgeliefert, handelt es sich um ein<br />
Implementierungsdetail, das wir nicht in der Anforderungsspezifikation nennen.<br />
Bsp.: Wir wollen den PDA mit dem Ladenrechner über WLAN kommunizieren lassen. Wir setzen voraus, dass der Kunde<br />
für das WLAN in seinem Laden sorgt. Dann wäre WLAN mit einem Netzwerkprotokoll wie TCP/IP in der<br />
Anforderungsspezifikation zu erwähnen. Wir dürfen dann in unserer Implementierung voraussetzen, dass die<br />
Ausführungsumgebung diese Komponenten bereit hält. <br />
2.1.6 Speicherbeschränkungen<br />
Hier nennen wir die mindestens verfügbare Größe des Hauptspeichers und der Festplatten, die das korrekte Funktionieren<br />
unserer <strong>Software</strong> voraussetzen darf. Anforderungen an die Laufzeit werden im Kontext der Operationen festgelegt.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
2. Allgemeine Beschreibung<br />
2.1 Produktperspektive<br />
Einbettung in ein Gesamtsystem<br />
2.1.1 Systemschnittstellen<br />
2.1.2 Benutzungsschnittstelle (logische Charakteristika. z.B. Monitorformat,<br />
Seiten- oder Fensterlayout, Inhalt von Berichten oder Menüs,<br />
Verfügbarkeit von Funktionstasten) sowie Regeln für die Schnittstelle<br />
2.1.3 Hardwareschnittstellen<br />
2.1.4 <strong>Software</strong>schnittstellen<br />
2.1.5 Kommunikationsschnittstellen (Netzwerkprotokolle etc.)<br />
2.1.6 Speicherbeschränkungen<br />
2.1.7 Betriebsoperationen (Operationsmodi, Dauer interaktiver und<br />
nichtinteraktiver Operationen, unterstützende<br />
Datenverarbeitungsfunktionen, Sicherungs- und<br />
Wiederherstellungsoperationen)<br />
2.1.8 Möglichkeiten der lokalen Anpassung<br />
2.1.7 Betriebsoperationen<br />
Neben den eigentlichen Produktfunktionen bietet ein System meist noch eine Menge allgemeiner Operationen, die für<br />
den Betrieb der <strong>Software</strong> notwendig oder hilfreich sind. Dazu gehören beispielsweise unterstützende<br />
Datenverarbeitungsfunktionen (wie z.B. Konsistenzprüfungen oder allgemeine Statistiken über die Datenvolumen) sowie<br />
Sicherungs- und Wiederherstellungsoperationen. Außerdem unterstützen viele Systeme verschiedene Operationsmodi, in<br />
denen unterschiedliche Produktfunktionen und Betriebsoperationen verfügbar beziehungsweise nicht verfügbar sind.<br />
Beispielsweise bietet eine Bank-<strong>Software</strong> einen Wartungsmodus, während dessen Kunden keine Transaktionen<br />
veranlassen können, weil Jahresabschlüsse berechnet werden.<br />
In diesem Abschnitt werden diese allgemeinen Betriebsoperationen, die relevanten Operationsmodi und die Dauer und<br />
Häufigkeit interaktiver und nichtinteraktiver Operationen aufgeführt.<br />
2.1.8 Möglichkeiten der lokalen Anpassung<br />
Systeme bieten häufig die Möglichkeit, dass Benutzer lokale Anpassungen vornehmen können. Diese werden hier<br />
beschrieben.<br />
Bsp.: Der Ladenbesitzer soll beispielsweise einstellen können, wie viele Benutzer maximal gleichzeitig auf den<br />
Ladenrechner zugreifen dürfen. <br />
Die Norm ISO 9241-11:1998 (1998) weist Individualisierbarkeit als anzustrebendes Qualitätsmerkmal aus. Beispielsweise<br />
sollen Schriftgrößen einstellbar sein. Möglichkeiten der lokalen Anpassung der Benutzungsschnittstelle werden jedoch in<br />
Abschnitt 2.3 beschrieben.
Anforderungsanalyse<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
2.2 Produktfunktionen<br />
Zusammenfassung der Funktionen<br />
2.3 Charakteristika der Benutzer<br />
Bildungsstand, Erfahrung, technische Kenntnisse<br />
2.4 Einschränkungen<br />
Beispiele:<br />
Gesetzliche Rahmenbedingungen<br />
Hardwarebeschränkungen<br />
parallelisierte Ausführung<br />
erforderliche Zuverlässigkeit<br />
sicherheitskritische Aspekte<br />
Datenschutzaspekte<br />
2.5 Annahmen und Abhängigkeiten<br />
z.B. Betriebssystem ist auf Hardware verfügbar<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 177 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
2.2 Produktfunktionen<br />
Zusammenfassung der Funktionen<br />
2.3 Charakteristika der Benutzer<br />
Bildungsstand, Erfahrung, technische Kenntnisse<br />
2.4 Einschränkungen<br />
Beispiele:<br />
Gesetzliche Rahmenbedingungen<br />
Hardwarebeschränkungen<br />
parallelisierte Ausführung<br />
erforderliche Zuverlässigkeit<br />
sicherheitskritische Aspekte<br />
Datenschutzaspekte<br />
2.5 Annahmen und Abhängigkeiten<br />
z.B. Betriebssystem ist auf Hardware verfügbar<br />
2.2 Produktfunktionen<br />
Hier werden alle Produktfunktionen, die unterstützt werden sollen, kurz zusammengefasst. Ihre Detaillierung folgt in<br />
Kapitel 3.<br />
2.3 Charakteristika der Benutzer<br />
In diesem Abschnitt werden die Charakteristika der Benutzer beschrieben. Dies kann in Form der oben eingeführten<br />
Personas geschehen. Alle für uns als Entwickler relevanten Details sollten erwähnt werden. Dazu gehören meist der<br />
Bildungsstand, die Erfahrung und vorhandene technische Kenntnisse.<br />
2.4 Einschränkungen<br />
Alle maßgebenden Einschränkungen, die die Entwicklung betreffen, werden in diesem Abschnitt aufgeführt. Dazu<br />
gehören sowohl die so genannten nicht-funktionalen Produktattribute als auch organisatorische Rahmenbedingungen.<br />
Hier sind zum Beispiel gesetzliche Rahmenbedingungen, weitere Hardwarebeschränkungen, Zwang zur parallelisierten<br />
Ausführung, erforderliche Zuverlässigkeit, sicherheitskritische Aspekte sowie Aspekte des Datenschutzes zu nennen.<br />
2.5 Annahmen und Abhängigkeiten<br />
Unsere Entwicklung startet oft mit Annahmen, bei denen wir zum gegenwärtigen Zeitpunkt nicht sicher sind, ob sie<br />
zutreffen. Wenn die Entwicklung von solche Annahmen abhängt, stellen die Annahmen ein Risiko dar, das wir in diesem<br />
Abschnitt explizit benennen. Der Architekt kann dann versuchen, die potentiellen Auswirkungen dieser Risiken im<br />
Architekturentwurf zu minimieren.<br />
Jede Abhängigkeit von Dritten stellt ein weiteres Risiko dar. Sie führen zur Annahme, dass die, von denen wir abhängen,<br />
die von uns erwünschte Leistung erbringen. Aus diesem Grund werden alle Abhängigkeiten hier auch explizit aufgeführt.
Anforderungsanalyse<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
3. Detaillierte Beschreibung<br />
3.1 Externe Schnittstellen<br />
3.1.1 Benutzungsschnittstelle<br />
3.1.2 Hardwareschnittstelle<br />
3.1.3 <strong>Software</strong>schnittstelle<br />
3.1.4 Kommunikationsschnittstelle<br />
3.2 Produktfunktionen<br />
3.3 Performanzanforderungen<br />
3.4 Entwurfseinschränkungen<br />
z.B. Standards<br />
3.5 <strong>Software</strong>systemattribute<br />
z.B. Zuverlässigkeit, Verfügbarkeit, Sicherheit, Wartbarkeit,<br />
Portabilität<br />
3.6 Andere Anforderungen<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 178 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
3. Detaillierte Beschreibung<br />
3.1 Externe Schnittstellen<br />
3.1.1 Benutzungsschnittstelle<br />
3.1.2 Hardwareschnittstelle<br />
3.1.3 <strong>Software</strong>schnittstelle<br />
3.1.4 Kommunikationsschnittstelle<br />
3.2 Produktfunktionen<br />
3.3 Performanzanforderungen<br />
3.4 Entwurfseinschränkungen<br />
z.B. Standards<br />
3.5 <strong>Software</strong>systemattribute<br />
z.B. Zuverlässigkeit, Verfügbarkeit, Sicherheit, Wartbarkeit,<br />
Portabilität<br />
3.6 Andere Anforderungen<br />
Den größten Anteil der Anforderungsspezifikation nimmt das Kapitel 3 ein, in dem die Anforderungen in größerem<br />
Detail beschrieben werden.<br />
3. Detaillierte Beschreibung<br />
3.1 Externe Schnittstellen<br />
In den vier folgenden Abschnitten werden die verschiedenen Schnittstellen im Detail beschrieben. Auf die Spezifikation<br />
der Benutzungsschnittstelle gehen wir an dieser Stelle besonders ein.<br />
3.1.1 Benutzungsschnittstelle<br />
Die Benutzungsschnittstelle kann durch einen GUI-Prototypen beschrieben werden. Wenn dieser ausführbar ist,<br />
dann werden im Text hier die wesentlichen Interaktionskonzepte beschrieben; ansonsten wird auf den<br />
ausführbaren Prototypen verwiesen, der vom Kunden abgenommen sein muss. Ist der GUI-Prototyp nicht<br />
ausführbar, dann kann man hier die Screenshots und Skizzen einfügen, die in der Soll-Analyse erstellt wurden,<br />
um die Benutzungsschnittstelle vorzuführen. Es genügt jedoch nicht, nur Bildschirmmasken aufzulisten. Es muss<br />
auch der Zusammenhang der Dialoge und der anderen Interaktionselementen mit den Anwendungsfällen (d.h.<br />
der Funktionalität im Kontext des Arbeitsflusses, der unterstützt werden soll) beschrieben werden. Für jede<br />
Eingabemöglichkeit muss beschrieben sein, was damit ausgelöst werden kann und welche Ausgabe erfolgt.<br />
Ebenso muss die Navigation zwischen allen Dialogen und etwaige Zustände der Schnittstelle beschrieben sein.<br />
Die Beschreibung soll so genau sein, dass man daraus ohne weitere Schritte ein Benutzerhandbuch erstellen<br />
kann. Die Entscheidung, wie die Benutzungsschnittstelle auszusehen hat, liegt also nicht beim Programmierer<br />
später, sondern steht von Anfang an fest.<br />
3.1.2 Hardwareschnittstelle<br />
3.1.3 <strong>Software</strong>schnittstelle<br />
3.1.4 Kommunikationsschnittstelle<br />
3.2 Produktfunktionen<br />
In diesem Abschnitt werden die Produktfunktionen im Detail beschrieben. Dieser Abschnitt bildet in der Regel mit der<br />
Benutzungsschnittstelle zusammen den umfangreichsten Teil. Deshalb ist eine sinnvolle Glieder unabdingbar. Wir werden<br />
weiter unten auf alternative Gliederungen eingehen. Der Zusammenhang zwischen Benutzungsschnittstellen (sowie allen<br />
anderen Schnittstellen) und der hier beschriebenen Produktfunktionen muss klar gemacht werden.
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
3. Detaillierte Beschreibung<br />
3.1 Externe Schnittstellen<br />
3.1.1 Benutzungsschnittstelle<br />
3.1.2 Hardwareschnittstelle<br />
3.1.3 <strong>Software</strong>schnittstelle<br />
3.1.4 Kommunikationsschnittstelle<br />
3.2 Produktfunktionen<br />
3.3 Performanzanforderungen<br />
3.4 Entwurfseinschränkungen<br />
z.B. Standards<br />
3.5 <strong>Software</strong>systemattribute<br />
z.B. Zuverlässigkeit, Verfügbarkeit, Sicherheit, Wartbarkeit,<br />
Portabilität<br />
3.6 Andere Anforderungen<br />
3.3 Performanzanforderungen<br />
Funktionale Anforderungen beschreiben die erwartete Ausgabe auf eine Eingabe hin. Bei Echtzeitsystemen mit harten<br />
Deadlines muss nicht nur die erwartete Ausgabe angegeben werden, sondern auch nach welcher Zeit die Antwort<br />
erfolgen muss, da sie ansonsten nicht mehr gebraucht wird. Bei Systemen ohne Echtzeitanforderungen hingegen werden<br />
zeitliche Aspekte häufig nicht explizit angegeben. Das ist jedoch falsch. Denn auch bei interaktiven Systemen erwarten<br />
wir eine zeitnahe Reaktion des Systems auf unsere Eingabe hin, weil wir das Programm sonst nicht verwenden wollen.<br />
Erfolgen keine konkreten Angaben zur maximalen Reaktionszeit ist es schwer, über die Vertragserfüllung bei der Abgabe<br />
zu diskutieren. Deshalb sollte man grundsätzlich Aussagen zur erforderlichen Performanz jeder Funktionalität machen.<br />
Dies kann relativ zum Datenvolumen erfolgen oder in absoluten Zeitangaben. Im letzteren Fall nimmt das Mengengerüst<br />
eine noch gewichtigere Stellung ein. Denn nur durch das Mengengerüst können wir zu absoluten Zeiten kommen, die<br />
später überprüfbar sind.<br />
In diesem Abschnitt ist der Platz für die Beschreibung der Performanzanforderungen aller Produktfunktionen. Alternativ<br />
kann man diese Anforderungen auch bei der Beschreibung der Produktfunktionen angeben und dann auf diesen<br />
Abschnitt verzichten. Das Prinzip der Trennung von Aspekten, dem wir bei einer Anforderungsspezifikation folgen, legt<br />
aber einen eigenen Abschnitt nahe. Die Beschreibung kann z.B. durch einfache Tabellen erfolgen, in denen die<br />
Produktfunktionen aufgeführt sind und die maximale Reaktionszeit in Abhängigkeit der Eingabe angegeben wird.<br />
3.4 Entwurfseinschränkungen<br />
Implementierungsdetails gehören – wie schon mehrfach gesagt – nicht in die Anforderungsspezifikation. Es gibt aber<br />
dennoch häufig Aspekte, die beim Entwurf berücksichtigt werden müssen. Dazu gehören z.B. Standards, an die sich die<br />
<strong>Software</strong> halten muss. In der Luft- und Raumfahrt beispielsweise gibt es Codierungsstandards wie MISRA, deren<br />
Einhaltung zuverlässigere Systeme verspricht. Hersteller von <strong>Software</strong> müssen sich an solche Standards halten, sonst<br />
wird ihr System nicht verwendet. In diesem Abschnitt werden aus diesem Grund alle weiteren Einschränkungen des<br />
Entwurfs beschrieben, sofern sie aus Kundensicht relevant sind.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
3. Detaillierte Beschreibung<br />
3.1 Externe Schnittstellen<br />
3.1.1 Benutzungsschnittstelle<br />
3.1.2 Hardwareschnittstelle<br />
3.1.3 <strong>Software</strong>schnittstelle<br />
3.1.4 Kommunikationsschnittstelle<br />
3.2 Produktfunktionen<br />
3.3 Performanzanforderungen<br />
3.4 Entwurfseinschränkungen<br />
z.B. Standards<br />
3.5 <strong>Software</strong>systemattribute<br />
z.B. Zuverlässigkeit, Verfügbarkeit, Sicherheit, Wartbarkeit,<br />
Portabilität<br />
3.6 Andere Anforderungen<br />
3.5 <strong>Software</strong>systemattribute<br />
Neben Performanzanforderungen gibt es noch weitere Systemattribute, zu denen die Anforderungsspezifikation Aussagen<br />
machen muss. Dazu gehören Zuverlässigkeit, Verfügbarkeit, Sicherheit, Wartbarkeit, Portabilität und weitere<br />
<strong>Software</strong>qualitäten (oft auch nichtfunktionale Anforderungen genannt). Wir werden weiter unten noch darauf zu<br />
sprechen kommen, dass diese Art Anforderungen konkret beschrieben werden müssen. Die Forderung ” Das System muss<br />
sicher sein“ ist viel zu allgemein als dass man sie erfüllen könnte.<br />
3.6 Andere Anforderungen<br />
In diesem Abschnitt können weitere relevante Anforderungen beschrieben werden, die in keine der oben genannten<br />
Abschnitte passen.
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Ergänzungen zum Standard:<br />
Inhalt der Anforderungsspezifikation nach IEEE<br />
Standard 830.1998<br />
Inhalt der Anforderungsspezifikation nach IEEE Standard<br />
830.1998<br />
3. Detaillierte Beschreibung<br />
3.1 Externe Schnittstellen<br />
3.1.1 Benutzungsschnittstelle<br />
3.1.2 Hardwareschnittstelle<br />
3.1.3 <strong>Software</strong>schnittstelle<br />
3.1.4 Kommunikationsschnittstelle<br />
3.2 Produktfunktionen<br />
3.3 Performanzanforderungen<br />
3.4 Entwurfseinschränkungen<br />
z.B. Standards<br />
3.5 <strong>Software</strong>systemattribute<br />
z.B. Zuverlässigkeit, Verfügbarkeit, Sicherheit, Wartbarkeit,<br />
Portabilität<br />
3.6 Andere Anforderungen<br />
Die Anforderungsspezifikation nach IEEE Standard 830.1998 verlangt nirgendwo, dass die Ergebnisse der<br />
Ist-Analyse beschrieben werden sollen. Diese Ergebnisse sind jedoch wichtig, um die Anforderungen zu verstehen<br />
und einschätzen zu können. Man sollte deshalb entweder ein eigenes Dokument hierfür anlegen, das in der<br />
Anforderungsspezifikation referenziert wird, oder aber im Einführungskapitel einen entsprechenden Abschnitt<br />
verfassen.<br />
Außerdem weist der Standard an keiner Stelle darauf hin, dass auch die möglichen zukünftigen Änderungen der<br />
Anforderungen beschrieben sein sollten. Diese sind jedoch wichtig, damit der Architekt die Architektur so entwerfen<br />
kann, dass diese Änderungen – so sie eintreffen – relativ einfach umgesetzt werden können. Aus diesem Grunde<br />
empfiehlt sich in Kapitel 2 beziehungsweise Kapitel 3 (je nach Detaillierungsgrad) ein Abschnitt zu zukünftigen<br />
Entwicklungen der Anforderungen.<br />
Im Datenmodell modellieren wir die Objekte der Anwendungsdomäne, die für die Beschreibung unserer<br />
Anforderungen relevant sind. Im Standard wird kein Ort explizit genannt, an dem das Datenmodell beschrieben<br />
werden soll. Hier bietet sich ein Unterabschnitt in Abschnitt 2.2 an.<br />
Anforderungsanalyse<br />
<strong>Software</strong>systemattribute<br />
<strong>Software</strong>systemattribute:<br />
versus:<br />
oft als nicht-funktionale Anforderungen bezeichnet<br />
müssen objektivierbar sein<br />
Das System soll sicher sein.<br />
PGP-Verschlüsselung wird verwendet<br />
Logging aller Aktionen<br />
Nachrichten dürfen nur über Verschlüsselungskomponente geschehen<br />
Indizierte Zugriffe auf Felder müssen zur Laufzeit geprüft werden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 179 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
<strong>Software</strong>systemattribute<br />
<strong>Software</strong>systemattribute<br />
<strong>Software</strong>systemattribute:<br />
versus:<br />
oft als nicht-funktionale Anforderungen bezeichnet<br />
müssen objektivierbar sein<br />
Das System soll sicher sein.<br />
PGP-Verschlüsselung wird verwendet<br />
Logging aller Aktionen<br />
Nachrichten dürfen nur über Verschlüsselungskomponente geschehen<br />
Indizierte Zugriffe auf Felder müssen zur Laufzeit geprüft werden<br />
Wie oben beim Abschnitt 3.5 <strong>Software</strong>systemattribute erwähnt sind neben den funktionalen Anforderungen auch<br />
die so genannten nicht-funktionalen Anforderungen, wie Portierbarkeit etc., zu beschreiben. Wie wir auch schon<br />
oben diskutiert haben, sollen alle Anforderungen überprüfbar sein. Das heißt die Aussagen zu den<br />
nicht-funktionalen Eigenschaften müssen so genau und konkret sein, dass man eine Prüfprozedur angeben kann, um<br />
bei Auslieferung überprüfen zu können, ob die Anforderung erfüllt wurde. Die Forderung ” Das System muss sicher<br />
sein“ genügt diesem Anspruch nicht, weil nicht klar ist, wogegen das System gesichert werden soll. Konkreter sollte<br />
man also etwa fordern:<br />
• Alle Netzwerktransaktionen werden mit PGP verschlüsselt.<br />
• Alle Operationen des Administrators werden aufgezeichnet.<br />
• Alle Benutzer müssen sich mit einem mindestens acht Zeichen langen Passwort authentifizieren.<br />
Diese Aussagen sind überprüfbar. Interessanterweise stellen wir an dieser Stelle fest, dass aus den so genannten<br />
nicht-funktionalen Eigenschaften durch die Konkretisierung funktionale Eigenschaften werden können. Die<br />
Trennung in funktionale und nicht-funktionale Eigenschaften ist also etwas künstlich bei allen Eigenschaften, die<br />
externe Eigenschaften betreffen. Externe Eigenschaften sind solche, die der Benutzer direkt wahrnehmen kann.<br />
Interne Eigenschaften betreffen vielmehr den inneren Aufbau.<br />
Anforderungsanalyse<br />
<strong>Software</strong>systemattribute<br />
versus:<br />
Das System soll portierbar sein.<br />
Anteil der plattformabhängigen Komponenten < 2%<br />
Anteil der plattformabhängigen Codezeilen < 5%<br />
Verwendung einer portierbaren Hochsprache<br />
Einschränkung auf portierbare Sprachkonstrukte<br />
Verwendung eines verbreiteten Betriebssystems<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 180 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
<strong>Software</strong>systemattribute<br />
<strong>Software</strong>systemattribute<br />
versus:<br />
Das System soll portierbar sein.<br />
Anteil der plattformabhängigen Komponenten < 2%<br />
Anteil der plattformabhängigen Codezeilen < 5%<br />
Verwendung einer portierbaren Hochsprache<br />
Einschränkung auf portierbare Sprachkonstrukte<br />
Verwendung eines verbreiteten Betriebssystems<br />
Aber auch Anforderungen zu inneren Eigenschaften der <strong>Software</strong> müssen hinreichend genau angegeben sein. Die<br />
Aussage ” Das System soll portierbar sein“, die eine innere Qualität darstellt, kann nicht überprüft werden, weil<br />
nicht klar ist, wohin portiert werden soll und was Portierbarkeit genau bedeuten soll. Besser muss angegeben<br />
werden, auf welcher Hardware und für welches Betriebssystem die <strong>Software</strong> portiert werden soll. Dann muss der<br />
Begriff portierbar konkretisiert werden, z.B. auf die folgende Weise:<br />
• Der Anteil der plattformabhängigen Komponenten soll weniger als 2% ausmachen.<br />
• Der Anteil der plattformabhängigen Codezeilen soll weniger als 5% sein.<br />
• Es soll eine Hochsprache als Implementierungssprache verwendet werden, die auf allen Plattformen verfügbar ist, auf die<br />
portiert werden soll.<br />
• Alle verwendeten Konstrukte der Programmiersprache müssen auf allen Zielplattformen verfügbar sein.<br />
Anforderungsanalyse<br />
Präsentation der Anforderungen<br />
Funktionale Anforderungen geordnet nach:<br />
Operationsmodus<br />
z.B. Kontrollsysteme: Training, Normal, Notfall<br />
Benutzerklassen<br />
z.B. Fahrzeugsteuerung: Fahrer, Fahrgäste, Wartungstechniker<br />
Objekte und Klassen<br />
z.B. Patientenmonitorsystem: Patienten, Sensoren, Pflegepersonal,<br />
Räume,<br />
Ärztinnen, Medizin<br />
jede Klasse wird beschrieben durch ihre Attribute und Methoden<br />
Features oder auch Anwendungsfälle (gewünschter nach außen<br />
sichtbarer Service)<br />
z.B. Telefonsystem: Nahgespräch, Weiterleitung, Konferenzgespräch<br />
Stimuli (bei reaktiven Systemen)<br />
z.B. Landesystem eines Flugzeugs: Energieverlust, Windwechsel,<br />
Schlingern<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 181 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Anforderungsanalyse<br />
Anforderungsspezifikation<br />
Präsentation der Anforderungen<br />
Präsentation der Anforderungen<br />
Funktionale Anforderungen geordnet nach:<br />
Operationsmodus<br />
z.B. Kontrollsysteme: Training, Normal, Notfall<br />
Benutzerklassen<br />
z.B. Fahrzeugsteuerung: Fahrer, Fahrgäste, Wartungstechniker<br />
Objekte und Klassen<br />
z.B. Patientenmonitorsystem: Patienten, Sensoren, Pflegepersonal,<br />
Räume, Ärztinnen, Medizin<br />
jede Klasse wird beschrieben durch ihre Attribute und Methoden<br />
Features oder auch Anwendungsfälle (gewünschter nach außen<br />
sichtbarer Service)<br />
z.B. Telefonsystem: Nahgespräch, Weiterleitung, Konferenzgespräch<br />
Stimuli (bei reaktiven Systemen)<br />
z.B. Landesystem eines Flugzeugs: Energieverlust, Windwechsel,<br />
Schlingern<br />
Wie oben erwähnt, kommt der Strukturierung des Abschnitts 3.2 Produktfunktionen eine große Bedeutung zu.<br />
Dieses Kapitel ist sehr umfangreich und alle Leser sollen sich möglichst einfach darin zurecht finden.<br />
Welche Kategorisierung zu verwenden ist, hängt von der Art der Anwendung ab. Bei reaktiven Systemen, also z.B.<br />
Steuerungssystemen, kann man nach den Stimuli gruppieren, auf die die <strong>Software</strong> reagieren muss. Bei einer<br />
<strong>Software</strong>, die das Landen eines Flugzeugs steuert, könnte man z.B. nach plötzlichem Energieverlust, Windwechsel<br />
oder Schlingern etc. ordnen. Zu den allgemeineren Ordnungskriterien, die bei sehr vielen Arten von Systemen<br />
Anwendung finden können, zählen Operationsmodi. Kontrollsysteme haben z.B. häufig die Operationsmodi<br />
Training, Normal und Notfall. Ein weiteres allgemeines Kriterium ist das der Benutzerklassen. Die <strong>Software</strong> eines<br />
Busses könnte unterscheiden in Produktfunktionen, die Fahrer, Fahrgäste oder Wartungstechniker betreffen. Bei<br />
objektorientiertem Vorgehen ergeben sich in der Analyse Objekte und Klassen, nach denen man gruppieren könnte.<br />
In einem Patientenmonitorsystem erwarten wir als Klassen z.B. Patienten, Sensoren, Pflegepersonal, Räume,<br />
Ärztinnen, Medizin. Jede dieser Klassen wird dann beschrieben durch ihre Attribute und Nachrichten, die sie<br />
versteht. Schließlich können wir auch nach Anwendungsfällen kategorisieren. Bei einem Telefonsystem wären das<br />
zum Beispiel das Nahgespräch, die Weiterleitung und das Konferenzgespräch.<br />
Wie immer man sich entscheidet, man sollte in jedem Falle die Kategorisierung uniform anwenden. Es kann<br />
dennoch sinnvoll sein, Kategorien zu kombinieren, was kein Widerspruch zur Uniformität sein muss. Dem Ziel der<br />
Uniformität genügend könnte man z.B. auf erster Ebene nach Benutzerklassen ordnen und auf zweiter Ebene nach<br />
Anwendungsfällen.<br />
Anforderungsanalyse<br />
Wiederholungsfragen I<br />
Was ist an der Erhebung der Anforderungen so schwierig?<br />
Erläutern Sie das Kano-Modell. Was folgt daraus für die<br />
Anforderungsspezifikation?<br />
Wozu dient die Anforderungsspezifikation und welche Folgen haben<br />
ihre Mängel?<br />
Was sind die Schritte der Anforderungsspezifikation?<br />
Was sind Personas und welches Ziel wird mit ihnen verfolgt?<br />
In welchen Phasen des Entwicklungsprozesses können Personas<br />
verwendet werden?<br />
Was ist das Ziel der Ist-Analyse und aus welchen Schritten besteht<br />
sie?<br />
Erläutern Sie Techniken zur Ist-Analyse. Bewerten Sie sie.<br />
Insbesondere: Auf welchen Prinzipien basiert das Interview im<br />
Kontext und wie wird es durchgeführt?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 182 / 634
Anforderungsanalyse<br />
Wiederholungsfragen II<br />
Welche Arten des Prototypings gibt es und wozu dienen sie?<br />
Wegwerf-, technischer und evolutionärer Prototyp<br />
horizontaler versus vertikaler Prototyp<br />
passive, aktive, interaktive Storyboards<br />
Welche Eigenschaften der Anforderungsspezifikation streben wir an?<br />
Welche Bestandteile hat eine Anforderungsspezifikation?<br />
Welche Systemattribute spielen in der Anforderungsspezifikation eine<br />
Rolle und worauf ist bei ihrer Spezifikation zu achten?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 183 / 634<br />
Objektorientierte Modellierung<br />
Objektorientierte Modellierung<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Rainer<strong>Projekt</strong> Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 184 / 634
Objektorientierte Modellierung<br />
Lernziele<br />
objektorientiert modellieren können<br />
wesentliche Konstrukte der Unified Modeling Language (UML) lesen<br />
und anwenden können<br />
Anmerkung: kein UML-Kurs; zur UML siehe z.B.: Störrle (2005).<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 185 / 634<br />
Objektorientierte Modellierung<br />
Modellierung<br />
Was ist ein Modell?<br />
Abbild eines Originals<br />
Wozu modellieren wir?<br />
um etwas zu verstehen<br />
um Vorhersagen machen zu können<br />
um etwas zu dokumentieren<br />
Wann modellieren wir?<br />
jederzeit: <strong>Projekt</strong>plan, Anforderungen, Architektur, . . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 187 / 634
Objektorientierte Modellierung<br />
Objektorientierte Modellierung<br />
Ausgehend von Geschäftsprozessen. . .<br />
2009-02-09<br />
Identifiziere Aktoren<br />
Beschreibe Anwendungsfälle<br />
Bestimme statisches Modell<br />
Identifiziere Objekte<br />
Identifiziere Eigenschaften der Objekte<br />
Bestimme Assoziationen zwischen Objekten<br />
Fasse Objekte zu Klassen zusammen<br />
Ordne Klassen in Vererbungshierarchien ein<br />
Bestimme Multiplizitäten der Assoziationen<br />
Erstelle Verhaltensmodell<br />
Identifiziere Ereignisse und modelliere Interaktionen in<br />
Anwendungsfällen<br />
Identifiziere Verhalten der Objekte<br />
Beschreibe das Verhalten (Vor- und Nachbedingungen)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 188 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Objektorientierte Modellierung<br />
Objektorientierte Modellierung<br />
Dies ist keine streng sequenzielle Folge. Die Aktivitäten verlaufen vielmehr parallel und iterativ.<br />
Objektorientierte Modellierung<br />
Ausgehend von Geschäftsprozessen. . .<br />
Identifiziere Aktoren<br />
Beschreibe Anwendungsfälle<br />
Bestimme statisches Modell<br />
Identifiziere Objekte<br />
Identifiziere Eigenschaften der Objekte<br />
Bestimme Assoziationen zwischen Objekten<br />
Fasse Objekte zu Klassen zusammen<br />
Ordne Klassen in Vererbungshierarchien ein<br />
Bestimme Multiplizitäten der Assoziationen<br />
Erstelle Verhaltensmodell<br />
Identifiziere Ereignisse und modelliere Interaktionen in<br />
Anwendungsfällen<br />
Identifiziere Verhalten der Objekte<br />
Beschreibe das Verhalten (Vor- und Nachbedingungen)
Objektorientierte Modellierung<br />
Ist → Soll<br />
Schwierig: Dinge im Abstrakten beschreiben.<br />
Einfacher: von konkreten Geschäftsprozessen ausgehen.<br />
Definition<br />
Ein Geschäftsprozess ist eine Folge von Schritten oder ein Rezept, um<br />
ein Geschäftsresultat zu erzielen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 189 / 634<br />
Objektorientierte Modellierung<br />
Prosaische Geschäftsprozessbeschreibung im Fahrradladen<br />
Geschäftsprozess Einkauf<br />
Kunde König möchte Flaschenhalter kaufen; besitzt mehrere<br />
Fahrräder<br />
König tritt in den Laden und zückt sein PDA<br />
PDA bietet alle Räder des Kunden an<br />
König wählt sein 28”-Rennrad mit Rahmen-Standardbohrung aus;<br />
Rahmenfarbe: magenta<br />
König wählt “Hinzufügen” aus<br />
König gibt “Flaschenhalter” ein und quittiert<br />
PDA nimmt Verbindung mit Laden-Host-Rechner auf<br />
PDA übermittelt Anfrage für Flaschenhalter (verschlüsselt!)<br />
Host-Rechner übermittelt Sortiment Flaschenhalter (verschlüsselt!)<br />
PDA prüft auf Verträglichkeit mit ausgewähltem Rad<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 191 / 634
Objektorientierte Modellierung<br />
Beispiel Fahrradladen (Forts.)<br />
Geschäftsprozess Einkauf (Forts.)<br />
PDA präsentiert alle Flaschenhalter, die passen (hartes Kriterium)<br />
König deselektiert alle Flaschenhalter mit unpassender Farbe (weiches<br />
Kriterium)<br />
König lässt nach Preis sortieren<br />
König wählt Flaschenhalter in bestimmtem Preissegment aus<br />
König geht mit Auswahl zu Verkäufer<br />
Verkäufer Volker betrachtet Auswahl und berät<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 192 / 634<br />
Objektorientierte Modellierung<br />
Geschäftsprozess und Anwendungsfall (Use-Case)<br />
Merkmale von Geschäftsprozessen:<br />
systemübergreifend,<br />
unterbrechbar,<br />
lang laufend,<br />
erfordern fortlaufende Interaktion zwischen vielen Akteuren,<br />
bestehen aus Anwendungsfällen.<br />
Definition<br />
Anwendungsfall (auch: Nutzfall)<br />
beschreibt eine Menge von Aktionssequenzen (Varianten<br />
eingeschlossen)<br />
jede Sequenz repräsentiert die Interaktion zwischen externen Aktoren<br />
mit dem System<br />
Folge ist beobachtbares Resultat, relevant für Aktor<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 193 / 634
Objektorientierte Modellierung<br />
Aktor<br />
Definition<br />
Aktor<br />
Beispiel:<br />
repräsentiert eine kohärente Menge von Rollen, die von Benutzern in<br />
der Interaktion mit dem System eingenommen werden können<br />
können Menschen und andere Dinge sein (z.B. andere automatisierte<br />
Systeme)<br />
Geschäftsprozess Einkauf im Fahrradladen<br />
ein Anwendungsfall darin: Kunde verbindet seinen PDA mit dem<br />
Ladenrechner<br />
→ Akteure: Kunde, Ladenrechner<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 194 / 634<br />
Objektorientierte Modellierung<br />
Textuelle Beschreibung von Anwendungsfällen<br />
Name: Artikelergänzung<br />
Aktoren:<br />
Kunde und Verkäufer<br />
Vorbedingung:<br />
Kunde möchte ergänzenden Artikel kaufen<br />
Kunde und Verkäufer sind im Laden<br />
PDA und Ladenrechner sind verbunden<br />
Nachbedingung:<br />
Kunde hat Artikel ausgewählt<br />
Ablauf:<br />
1 Kunde wählt zu ergänzenden Artikeltyp für Rad R aus<br />
2 Ladenrechner liefert alle Artikel dieses Typs, die zu R passen<br />
3 Kunde wählt aus dieser Liste aus<br />
Varianten:<br />
Kunde findet keinen passenden Artikel<br />
→ Verkäufer berät Kunde<br />
keine Verbindung zwischen PDA und Ladenrechner<br />
→ Verkäufer berät Kunde<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 195 / 634
Objektorientierte Modellierung<br />
Aktoren und Anwendungsfälle<br />
1 Identifiziere Aktoren<br />
2 Betrachte System aus der Sicht der Aktoren<br />
3 Bestimme Anwendungsfälle für Aktoren<br />
→ liefert möglicherweise neue Aktoren<br />
4 zurück zu 1, bis keine neuen Aktoren/Anwendungsfälle mehr<br />
gefunden werden können<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 197 / 634<br />
Objektorientierte Modellierung<br />
UML-Notation für Anwendungsfälle (OMG)<br />
obsoletes<br />
Produkt<br />
entfernen<br />
Passendes<br />
Produkt<br />
finden<br />
Waren−<br />
sortiment<br />
pflegen<br />
Anwendungsfall<br />
Assoziation<br />
Kunde Verkäufer<br />
System<br />
Aktor<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 200 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
UML-Notation für Anwendungsfälle<br />
UML-Notation für Anwendungsfälle (OMG)<br />
UML-Notation für Anwendungsfälle (OMG)<br />
Assoziationen werden in Anwendungsfalldiagrammen nicht benannt. Assoziationen sind keine Datenflüsse;<br />
Assoziationen beschreiben Kommunikationsbeziehungen zwischen Aktoren und dem System.<br />
Objektorientierte Modellierung<br />
Aktoren und Anwendungsfälle<br />
Strukturiere Anwendungsfälle<br />
obsoletes<br />
Produkt<br />
entfernen<br />
Passendes<br />
Produkt<br />
finden<br />
Kunde Verkäufer<br />
Waren−<br />
sortiment<br />
pflegen<br />
Anwendungsfall<br />
Aktor<br />
Assoziation<br />
1 identifiziere gemeinsame Anteile in Anwendungsfällen und faktorisiere<br />
entsprechend<br />
2 fasse ähnliche Anwendungsfälle und Aktoren in Vererbungshierarchien<br />
zusammen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 201 / 634<br />
System
Objektorientierte Modellierung<br />
UML-Notation für Anwendungsfälle (OMG)<br />
2009-02-09<br />
Waren−<br />
sortiment<br />
pflegen<br />
Kunden−<br />
daten<br />
pflegen<br />
<br />
<br />
Passwort−<br />
abfrage<br />
Authentifizierung<br />
inherits<br />
Person<br />
Retinatest<br />
Verkäufer<br />
Ladenbesitzer<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 205 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
UML-Notation für Anwendungsfälle<br />
UML-Notation für Anwendungsfälle (OMG)<br />
UML-Notation für Anwendungsfälle (OMG)<br />
<br />
Authentifizierung<br />
Mit Hilfe von kann man gemeinsames Verhalten aus Anwendungsfällen herausfaktorisieren und nur<br />
einmal beschreiben; hilft, Redundanz zu vermeiden.<br />
Bedeutung B A:<br />
• Anwendungsfall B (Base) inkludiert das Verhalten von Anwendungsfall A (Inklusion)<br />
• Anwendungsfall B ist ohne Inklusion A nicht notwendigerweise ein vollständiger Anwendungsfall<br />
• Inklusion B kann ein Fragment sein<br />
Verwendung<br />
• Verhalten von Inklusion A wird in mehreren Anwendungsfällen benötigt<br />
Generalisierung: Anwendungsfälle können durch die inherit-Beziehung spezialisiert werden. Entspricht der<br />
objektorientierten Vererbung.<br />
Bedeutung<br />
• Anwendungsfall A (Child) erbt das Verhalten von Anwendungsfall B (Parent)<br />
• Anwendungsfall B ist ein vollständiger, von A unabhängiger Anwendungsfall<br />
• Anwendungsfall A ist ein vollständiger Anwendungsfall<br />
Verwendung<br />
• Verhalten eines Anwendungsfalls wird spezialisiert<br />
Waren−<br />
sortiment<br />
pflegen<br />
Kunden−<br />
daten<br />
pflegen<br />
Passwort−<br />
abfrage<br />
inherits<br />
Person<br />
Retinatest<br />
Verkäufer<br />
Ladenbesitzer
Objektorientierte Modellierung<br />
UML-Notation für Anwendungsfälle (OMG)<br />
Spezialanwendungsfall<br />
2009-02-09<br />
Express−<br />
bestellung<br />
Erweiterungsrelation<br />
<br />
(setze Priorität)<br />
ausführen Bestellung<br />
ausführen<br />
Extension Points:<br />
Priorität setzen<br />
Basisanwendungsfall<br />
Variationspunkt<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 206 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
UML-Notation für Anwendungsfälle<br />
UML-Notation für Anwendungsfälle (OMG)<br />
UML-Notation für Anwendungsfälle (OMG)<br />
Express−<br />
bestellung<br />
Spezialanwendungsfall<br />
Erweiterungsrelation<br />
<br />
(setze Priorität)<br />
ausführen Bestellung<br />
ausführen<br />
Extension Points:<br />
Priorität setzen<br />
Basisanwendungsfall<br />
Extend-Relation erlaubt die Beschreibung optionalen Verhaltens. Erlaubt damit die Trennung des optionalen vom<br />
notwendigen Verhalten. Kann auch benutzt werden, um ein alternatives Teilverhalten zu beschreiben, das an<br />
Bedingungen geknüpft ist (z.B. Fehlerausgabe und Benachrichtigung des Systemadministrators falls Passwort falsch<br />
ist). Kann auch verwendet werden, um Teilsequenzen zu kombinieren, deren Ausführung vom Benutzer bestimmt<br />
wird (z.B. Dialog zur Auswahl von Operationen).<br />
Bedeutung: A B:<br />
• Anwendungsfall A (Extension) erweitert das Verhalten von Anwendungsfall B (Base)<br />
• Anwendungsfall B ist auch ohne Extension A ein vollständiger Anwendungsfall<br />
• Extension A kann ein Fragment sein<br />
Verwendung<br />
• Verhalten eines Anwendungsfalls wird erweitert<br />
Variationspunkt
Objektorientierte Modellierung<br />
Beschreibung von Anwendungsfällen<br />
Anwendungsfalldiagramme:<br />
deklarieren voneinander unabhängige Anwendungsfälle<br />
beschreiben die Einbettung der Anwendungsfälle in den<br />
Systemkontext (externe Akteure)<br />
beschreiben (konkretisieren) die Anwendungsfälle jedoch nicht<br />
→ folgt später<br />
sind Ausgangspunkt für die objektorientierte Modellierung<br />
statische Eigenschaften (Attribute)<br />
dynamische Eigenschaften (Verhalten)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 207 / 634<br />
Objektorientierte Modellierung<br />
Beispiel Fahrradladen<br />
Identifiziere Objekte: Suche nach Substantiven in Anwendungsfällen.<br />
Operation: Einkauf<br />
Kunde König möchte Sattel kaufen; besitzt mehrere Fahrräder<br />
. . .<br />
König wählt sein 28”-Rennrad mit aus; Rahmenfarbe: magenta<br />
. . .<br />
PDA nimmt Verbindung mit Laden-Host-Rechner auf<br />
. . .<br />
König lässt nach Preis sortieren<br />
. . .<br />
Verkäufer Volker betrachtet Auswahl und berät<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 209 / 634
Objektorientierte Modellierung<br />
Anwendungsfall → Objekte<br />
Objekt: ” Ding“ (Gegenstand, Entität) mit eigener Identität<br />
Eigenschaft/Attribut<br />
König :<br />
+geld = 40 EUR<br />
Königs Hollandrad :<br />
+preis = 400 EUR<br />
+farbe = schwarz<br />
+größe = 58 cm<br />
Objekt (unterstrichen)<br />
Wert<br />
Königs Rennrad :<br />
+preis = 1500 EUR<br />
+farbe = magenta<br />
+größe = 60 cm<br />
Volker :<br />
Sattel #1234 :<br />
+preis = 20 EUR<br />
+farbe = schwarz<br />
+härte = knallhart<br />
+gewicht = 200 g<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 210 / 634<br />
Objektorientierte Modellierung<br />
Anwendungsfall → Objekte<br />
Assoziation: Beziehung zwischen Objekten<br />
König :<br />
+geld = 40 EUR<br />
besitzt<br />
Königs Hollandrad :<br />
+preis = 400 EUR<br />
+farbe = schwarz<br />
+größe = 58 cm<br />
+Interessent<br />
besitzt<br />
Rolle<br />
Königs Rennrad :<br />
+preis = 1500 EUR<br />
+farbe = magenta<br />
+größe = 60 cm<br />
Assoziation<br />
Richtung<br />
berät<br />
+Berater<br />
passt-zu<br />
Assoziationsname<br />
Volker :<br />
Sattel #1234 :<br />
im-sortiment<br />
+preis = 20 EUR<br />
+farbe = schwarz<br />
+härte = knallhart<br />
+gewicht = 200 g<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 212 / 634
Objektorientierte Modellierung<br />
Objekte versus Klassen<br />
Instanz-Ebene<br />
Objektdiagramme beschreiben statische Zusammenhänge auf der<br />
Ebene einzelner, konkreter Dinge<br />
Schema-Ebene<br />
2009-02-09<br />
Klassendiagramme beschreiben statische Zusammenhänge<br />
unabhängig von Details konkreter Objekte, auf der Ebene mehrerer<br />
gleichartiger Dinge<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 214 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Bemerkung<br />
Statische Eigenschaften: Klassendiagramme<br />
Objekte versus Klassen<br />
• Objektdiagramme werden in der UML als Teil der Klassendiagramme aufgefasst<br />
Objekte versus Klassen<br />
Instanz-Ebene<br />
Objektdiagramme beschreiben statische Zusammenhänge auf der<br />
Ebene einzelner, konkreter Dinge<br />
Schema-Ebene<br />
Klassendiagramme beschreiben statische Zusammenhänge<br />
unabhängig von Details konkreter Objekte, auf der Ebene mehrerer<br />
gleichartiger Dinge
Objektorientierte Modellierung<br />
Objekte → Klassen<br />
Klasse: Menge von gleichartigen Objekten mit gemeinsamen Eigenschaften<br />
Kunde<br />
+name<br />
+geld<br />
*<br />
Rad<br />
+preis<br />
+farbe<br />
+größe<br />
Klasse<br />
besitzt<br />
*<br />
1<br />
berät<br />
passt-zu<br />
1<br />
Multiplizität<br />
Verkäufer<br />
+name<br />
Sattel<br />
+artikelnummer<br />
+preis<br />
+farbe<br />
+härte<br />
+gewicht<br />
im-sortiment<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 215 / 634<br />
Objektorientierte Modellierung<br />
Generalisierungen<br />
sind spezielle Beziehung auf Schema-Ebene<br />
beschreiben Beziehungen zwischen einer allgemeineren Klasse<br />
(Oberklasse, Superclass) und einer spezielleren Klasse (Unterklasse,<br />
Subclass)<br />
die Unterklasse ” erbt“ die Eigenschaften der Oberklasse:<br />
Attribute<br />
Methoden und deren Aufrufschnittstellen<br />
Assoziationen<br />
Unterklassen können<br />
neue Attribute, Methoden und Assoziationen definieren<br />
ererbte Attribute, Methoden und Assoziationen redefinieren<br />
(überschreiben)<br />
von mehreren Oberklassen erben (Mehrfachvererbung)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 217 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Statische Eigenschaften: Klassendiagramme<br />
Generalisierungen<br />
Generalisierungen<br />
sind spezielle Beziehung auf Schema-Ebene<br />
beschreiben Beziehungen zwischen einer allgemeineren Klasse<br />
(Oberklasse, Superclass) und einer spezielleren Klasse (Unterklasse,<br />
Subclass)<br />
die Unterklasse ” erbt“ die Eigenschaften der Oberklasse:<br />
Attribute<br />
Methoden und deren Aufrufschnittstellen<br />
Assoziationen<br />
Unterklassen können<br />
neue Attribute, Methoden und Assoziationen definieren<br />
ererbte Attribute, Methoden und Assoziationen redefinieren<br />
(überschreiben)<br />
von mehreren Oberklassen erben (Mehrfachvererbung)<br />
Bemerkung: unterschiedliche Umsetzung in verschiedenen Programmierumgebungen bzgl. Überschreiben und<br />
Mehrfachvererbung<br />
Objektorientierte Modellierung<br />
Klassen → Klassenhierarchien<br />
abstrakt<br />
Kunde<br />
+geld<br />
Rad<br />
+farbe<br />
+größe<br />
besitzt<br />
Person<br />
+name<br />
Artikel<br />
+preis<br />
+artikelnummer<br />
passt-zu<br />
berät<br />
{XOR}<br />
ist-ein-Relation<br />
Verkäufer<br />
Sattel<br />
+farbe<br />
+härte<br />
+gewicht<br />
Oberklasse<br />
im-sortiment<br />
Unterklasse<br />
Einschränkung<br />
zweier<br />
Beziehungen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 218 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Statische Eigenschaften: Klassendiagramme<br />
Klassen → Klassenhierarchien<br />
Klassen → Klassenhierarchien<br />
abstrakt<br />
Kunde<br />
+geld<br />
Rad<br />
+farbe<br />
+größe<br />
Person<br />
+name<br />
Verkäufer<br />
berät<br />
Gemeinsame Attribute werden in gemeinsamen Oberklassen zusammengefasst. Kunde und Verkäufer haben jeweils<br />
Namen. Rad und Sattel haben einen Preis und eine Artikelnummer. Das Attribut Farbe taucht in diesem Beispiel<br />
nicht in der Oberklasse auf. Die Konsequenz wäre sonst, dass jeder mögliche Artikel dieses Attribut hat. Bei vielen<br />
Artikeln, wie z.B. bei einem Sattelrohr oder einer Schraube, spielt Farbe aber keine Rolle. Deshalb tritt Farbe nur<br />
bei Rad und Sattel auf. Eine alternative Modellierung wäre eine weitere Oberklasse Gefärbte Artikel von Rad und<br />
Sattel, die dieses Attribut einführt. Allerdings könnte es noch eine weitere Klasse Sattelrohr geben, die zwar keine<br />
Farbe, aber eine Härte hätte. Dann müssten auch Sattel und Sattelrohr eine gemeinsame Oberklasse mit dem<br />
Attribut Härte haben. Dies führte dann zu Mehrfachvererbung, weil ein Sattel sowohl Farbe als auch Härte hat.<br />
Bei der Modellierung von Anwendungskonzepten kann es gelegentlich zu Mehrfachvererbungen kommen. Dies ist<br />
nicht weiter tragisch, solange in jedem Falle Liskovs Substitutionsprinzip erfüllt ist. Bei der Abbildung des<br />
Analysemodells auf eine konkrete Implementierung mit einer Programmiersprache ohne Mehrfachvererbung wird es<br />
dann allerdings zu einem Bruch kommen. In der Analysephase konzentrieren wir uns jedoch auf eine genaue und<br />
einfache Modellierung und sollten uns deshalb von solchen Implementierungseinschränkungen noch nicht beirren<br />
lassen.<br />
Meist sind diese neuen Oberklassen abstrakt, d.h. es gibt eigentlich kein Objekt, das genau von diesem Typ ist. So<br />
ist Person natürlich ein abstraktes Gebilde: Es gibt eigentlich nur Kunden oder Verkäufer, aber nichts, was man nur<br />
als Person bezeichnen würde.<br />
Abstrakte Klassen sind daran zu erkennen, dass ihr Name kursiv geschrieben wird. In diesem Beispiel sind Person<br />
und Artikel abstrakt.<br />
Objektorientierte Modellierung<br />
Attributierte Assoziationen<br />
Assoziationsklassen<br />
beschreiben Beziehungen, die gleichzeitig Klassen sind<br />
werden genutzt, um Assoziationen Attribute zuzuordnen<br />
können eigene Beziehungen eingehen<br />
Assoziationsklasse<br />
im-sortiment<br />
+anzahl<br />
Verkäufer<br />
Sattel<br />
+artikelnummer<br />
+preis<br />
+farbe<br />
+härte<br />
+gewicht<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 219 / 634<br />
besitzt<br />
Artikel<br />
+preis<br />
+artikelnummer<br />
passt-zu<br />
{XOR}<br />
ist-ein-Relation<br />
Sattel<br />
+farbe<br />
+härte<br />
+gewicht<br />
Oberklasse<br />
im-sortiment<br />
Unterklasse<br />
Einschränkung<br />
zweier<br />
Beziehungen
Objektorientierte Modellierung<br />
Mehrstellige Assoziationen<br />
Assoziationsklassen<br />
können auch mehrere Klassen in Beziehung setzen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 220 / 634<br />
Objektorientierte Modellierung<br />
Aufbau von Objekten<br />
Aggregation<br />
ist spezielle Assoziation zur Verdeutlichung von<br />
” Teil-Ganzes-Beziehungen“<br />
beschreibt Zusammenfassung von Komponenten zu einem Aggregat<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 222 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Statische Eigenschaften: Klassendiagramme<br />
Aufbau von Objekten<br />
Aufbau von Objekten<br />
Aggregation<br />
ist spezielle Assoziation zur Verdeutlichung von<br />
” Teil-Ganzes-Beziehungen“<br />
beschreibt Zusammenfassung von Komponenten zu einem Aggregat<br />
Leserichtung der Aggregation: Rad besteht aus einem Rahmen; ein Rahmen kann Teil eines oder gar keines Rads<br />
sein.<br />
Objektorientierte Modellierung<br />
Aufbau von Objekten<br />
Komposition ist spezielle Aggregation:<br />
Existenz der Komponenten ist an die Existenz des Aggregats<br />
gekoppelt,<br />
jede Komponente gehört zu genau einem Aggregat (strong ownership)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 223 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Statische Eigenschaften: Klassendiagramme<br />
Aufbau von Objekten<br />
Aufbau von Objekten<br />
Komposition ist spezielle Aggregation:<br />
Existenz der Komponenten ist an die Existenz des Aggregats<br />
gekoppelt,<br />
jede Komponente gehört zu genau einem Aggregat (strong ownership)<br />
Brennt der Laden ab, sind auch alle seine Artikel verloren. Ein Verkäufer ohne einen Laden, ist kein Verkäufer mehr<br />
(auch wenn er als Person weiter existiert).<br />
Man würde kaum behaupten wollen, dass ein Artikel Teil eines Kunden ist. Die normale Assoziation erscheint hier<br />
angemessener. Kauft ein Kunde einen Artikel in einem Laden, ist dieser nicht länger Teil des Ladens; er geht in den<br />
Besitz des Kunden über.<br />
Objektorientierte Modellierung<br />
Vergleich der Assoziationstypen<br />
Vererbung: ist-ein-Relation (Liskovs Substitutionsprinzip erfüllt)<br />
Aggregation: teil-von-Relation<br />
Komposition: teil-von-Relation<br />
Teil gehört zu genau einem Ganzen<br />
Teil existiert nur im Kontext des Ganzen<br />
allgemeine Assoziation: sonst<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 224 / 634
Objektorientierte Modellierung<br />
Liskovs Substitutionsprinzip (1988; 1994)<br />
Definition<br />
Liskovs Substitutionsprinzip: jede Instanz der Unterklasse kann immer<br />
und überall dort eingesetzt werden, wo Instanzen der Oberklasse auftreten.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 225 / 634<br />
Objektorientierte Modellierung<br />
Zusammenfassung Klassendiagramme<br />
Beschreibungsinhalt<br />
statische Systemaspekte<br />
Beschreibung der wesentlichen, unterscheidbaren Dinge eines Systems<br />
und ihrer Beziehungen<br />
zentrale Modellierungskonstrukte:<br />
Klassen<br />
Assoziationen (Beziehungsklassen)<br />
spezielle Assoziationen: Generalisierung und Aggregation/Komposition<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 226 / 634
Objektorientierte Modellierung<br />
Beschreibung von Anwendungsfällen<br />
textuelle Szenario-Beschreibungen (siehe oben)<br />
Interaktionsdiagramme<br />
Aktivitätsdiagramme<br />
Zustandsdiagramme<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 228 / 634<br />
Objektorientierte Modellierung<br />
UML-Notation für Anwendungsfälle (OMG)<br />
Passendes<br />
Produkt<br />
finden<br />
Anwendungsfall<br />
Realisierung<br />
Produkt−<br />
suche<br />
Kollaboration<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 229 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Verhaltenseigenschaften<br />
UML-Notation für Anwendungsfälle (OMG)<br />
UML-Notation für Anwendungsfälle (OMG)<br />
Passendes<br />
Produkt<br />
finden<br />
Anwendungsfall<br />
Anwendungsfälle können durch die inherit-Beziehung spezialisiert werden. Entspricht der objektorientierten<br />
Vererbung.<br />
Objektorientierte Modellierung<br />
UML-Interaktionsdiagramme (OMG)<br />
Beschreibungsinhalt:<br />
dynamische Systemaspekte<br />
exemplarische Beschreibung von Interaktionsabfolgen zwischen<br />
kollaborierenden Objekten (Inter-Objektverhalten)<br />
zentrale Modellierungskonstrukte:<br />
Objekte: ” Dinge“ mit eigener Identität<br />
Nachrichten<br />
beschreiben den Austausch von Informationen zwischen Objekten zum<br />
Auslösen von Aktivitäten<br />
sind Signale/Ereignisse oder Methodenaufrufe<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 230 / 634<br />
Realisierung<br />
Produkt−<br />
suche<br />
Kollaboration
Objektorientierte Modellierung<br />
UML-Interaktionsdiagramme (OMG)<br />
Anwendung<br />
Präzisierung von Szenarien (exemplarische Folgen von Aktivitäten)<br />
Protokollierung des Nachrichtenaustausches<br />
Erhebung der von einzelnen Objekten bereit gestellten Funktionalität<br />
(Dienste, Methoden)<br />
Varianten<br />
Grenzen:<br />
Sequenzdiagramme<br />
betonen zeitlichen Ablauf<br />
Kommunikationsdiagramme<br />
betonen Objektstruktur<br />
beschreiben Verhalten nur beispielhaft und nicht vollständig<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 231 / 634<br />
Objektorientierte Modellierung<br />
UML-Sequenzdiagramme (OMG)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 232 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Sequenzdiagramme<br />
UML-Sequenzdiagramme (OMG)<br />
UML-Sequenzdiagramme (OMG)<br />
Aufruf: synchrone Nachricht dargestellt durch durchgezogenen Pfeil vom Sender zum Empfänger mit gefüllter<br />
Pfeilspitze. Sender setzt Aktivität aus (gestrichelter Aktivierungsbalken); Empfänger wird aktiviert<br />
(Aktivierungsbalken beim Empfänger beginnt).<br />
Antwort synchrone Nachricht als Reaktion auf einen Aufruf dargestellt durch gestrichelter Pfeil vom Sender zum<br />
Empfänger mit offener Pfeilspitze). Antwortender Sender wird deaktiviert, ausgesetzter Empfänger lebt<br />
wieder auf.<br />
Signal asynchrone Nachricht dargestellt durch durchgezogenen Pfeil vom Sender zum Empfänger mit offener<br />
Pfeilspitze; Sender und Empfänger setzen ihre Aktivität parallel fort.<br />
Bei synchroner Nachricht (Aufruf):<br />
• Sender schickt Nachricht an Empfänger und gibt die Kontrolle über den weiteren Prozess an den Empfänger<br />
• Empfänger gibt nach Bearbeitung der Nachricht die Kontrolle an den Sender zurück<br />
• Interaktionen des Empfängers, die nach Erhalt der Nachricht begonnen wurden, müssen beendet sein, bevor der<br />
Empfänger die Kontrolle an den Sender zurückgibt (nested flow of control, method-call).<br />
Anmerkung: Die Notation hat sich hier ab UML 2.0 geändert.<br />
Objektorientierte Modellierung<br />
UML-Kommunikationsdiagramme (OMG)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 233 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Kommunikationsdiagramme<br />
Kommunikationsdiagramme<br />
UML-Kommunikationsdiagramme (OMG)<br />
• beschreiben Interaktionen zwischen Objekten durch gerichtete Graphen<br />
• die Abfolge der Nachrichten wird durch Nummerierung angezeigt<br />
UML-Kommunikationsdiagramme (OMG)<br />
Sequenz- und Kommunikationsdiagramme beschreiben semantisch identische Inhalte mit unterschiedlichem Fokus<br />
(zeitlicher Ablauf bzw. Objekte stehen im Vordergrund).<br />
Objektorientierte Modellierung<br />
Interaktions- und Klassendiagramme<br />
Bemerkung:<br />
Interaktionsdiagramme beschreiben exemplarische<br />
Interaktionsszenarien eines Systems aus dynamischer Sicht<br />
Klassendiagramme beschreiben diese Systeme aus statischer,<br />
schematischer Sicht<br />
Interaktionsdiagramme dienen als Ausgangspunkt zur Ergänzung und<br />
Überprüfung von Klassendiagrammen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 235 / 634
Objektorientierte Modellierung<br />
Interaktionen → Methoden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 236 / 634<br />
Objektorientierte Modellierung<br />
Interaktionen versus Methoden<br />
Interaktionen<br />
beschreiben das Wechselspiel zwischen Akteuren über<br />
Botschaften/Methoden 10<br />
liefern Methoden für die modellierten Klassen<br />
beschreiben jedoch nicht die Methoden selbst<br />
10 Methoden beschreiben hier abstraktes Verhalten im Kontext der Anforderungen;<br />
sind noch nicht notwendigerweise die Methoden im Sinne der Implementierung (führen<br />
letztlich aber zu diesen hin).<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 237 / 634
Objektorientierte Modellierung<br />
Methoden<br />
Beschreibung:<br />
Parameter: Eingabe und Ausgabe<br />
Vorbedingung: beschreibt die Annahmen der Methode, die gelten<br />
müssen, damit sie ausgeführt werden kann<br />
Nachbedingung: beschreibt das Resultat der Methode<br />
Fehlerbedingungen: Verletzung der Vorbedingungen und Fehler, die<br />
während der Ausführung auftreten können<br />
Verhalten in Fehlersituationen: Nachbedingung für jeden<br />
aufgetretenen Fehler<br />
Reaktionszeit: Maximale Dauer, bis Resultat vorliegt (sowohl im<br />
Normal- als auch im Fehlerfall)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 239 / 634<br />
Objektorientierte Modellierung<br />
Methoden<br />
Beispiel Sortierung und Ausgabe der Artikelliste:<br />
Parameter:<br />
Eingabe: Artikelliste, Attribut<br />
Ausgabe: Artikelliste’<br />
Vorbedingung:<br />
Attribut kommt bei allen Artikeln der Artikelliste vor<br />
Nachbedingung:<br />
Artikelliste’ ist sortiert, d.h.:<br />
∀ i : 1 ≤ i < len(Artikelliste ′ )<br />
⇒ element(Artikelliste ′ , i) ≤Attribut element(Artikelliste ′ , i + 1)<br />
Artikelliste’ ist eine Permutation von Artikelliste<br />
Fehlerbedingungen: keine, außer Vorbedingung nicht erfüllt<br />
Verhalten in Fehlersituationen:<br />
Artikelliste wird zurückgegeben<br />
Fehlermeldung wird ausgegeben<br />
Reaktionszeit: n · log(n) · 0, 001 [sec], wobei n die Länge der Liste ist<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 240 / 634
Objektorientierte Modellierung<br />
Beschreibung der Benutzeroberfläche<br />
1<br />
4<br />
145 Euro<br />
100 Euro<br />
78 Euro<br />
47 Euro<br />
5<br />
6<br />
2<br />
3<br />
1 Grafik des Artikels in der Größe<br />
40x40 Pixel<br />
2 Artikeldaten (10pt-Schrift)<br />
3 Attribut, nach dem sortiert<br />
wurde (rot, 12pt-Schrift)<br />
4 Scrolling nach oben; es wird<br />
immer um einen Artikel nach<br />
oben geschoben<br />
5 Scrolling nach unten; es wird<br />
immer um einen Artikel nach<br />
unten geschoben<br />
6 Auswahl des Artikels; alternativ<br />
kann man mit dem Stift durch<br />
rasches doppeltes Anklicken<br />
einen Artikel auswählen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 241 / 634<br />
Objektorientierte Modellierung<br />
Zusammenhang von Benutzernachrichten und GUI<br />
Nachrichten an Benutzer: Anzeige in GUI<br />
Nachrichten vom Benutzer: Aktionen des Benutzers mit GUI (Texteingabe,<br />
Mausklicks etc.)<br />
Screen Auswahl Screen Kaufen<br />
1<br />
2 1<br />
145 Euro 145 Euro<br />
100 Euro<br />
78 Euro<br />
47 Euro<br />
7<br />
5 6 4 4<br />
Wollen Sie diesen<br />
Artikel kaufen?<br />
ja<br />
nein<br />
5 6<br />
2<br />
8<br />
beschaffe (artikel-nr)<br />
Einfachklick auf Auswahl.1<br />
Einfachklick auf Kaufen.7<br />
ermittle (artikel-typ)<br />
. . .<br />
ende<br />
. . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 242 / 634
Objektorientierte Modellierung<br />
Aktivitätsdiagramme<br />
2009-02-09<br />
Wurzeln: Flussdiagramme, Petrinetze<br />
modellieren klassenübergreifendes Verhalten (Kontrollfluss)<br />
beschreiben häufig Anwendungsfälle<br />
Einsatz empfohlen bei hauptsächlich intern ausgelösten<br />
Zustandsübergängen (einfacher Kontrollfluss)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 243 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Aktivitätsdiagramme<br />
Aktivitätsdiagramme<br />
Aktivitätsdiagramme<br />
Wurzeln: Flussdiagramme, Petrinetze<br />
modellieren klassenübergreifendes Verhalten (Kontrollfluss)<br />
beschreiben häufig Anwendungsfälle<br />
Einsatz empfohlen bei hauptsächlich intern ausgelösten<br />
Zustandsübergängen (einfacher Kontrollfluss)<br />
Laut UML-Standard 1.x ist ein Aktivitätsdiagramm der ” Zustandsautomat einer Berechnung“. Ab UML 2.0 wird es<br />
auf Token-Konzept von Petri-Netzen zurück geführt.<br />
Eine gute Darstellung findet man unter: http://informatik.unibas.ch/lehre/hs07/cs203/se5full.pdf
Objektorientierte Modellierung<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 244 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Aktivitätsdiagramme<br />
Aktivitätsdiagramme: Bestandteile<br />
• Aktionszustände: Zustände mit nur einer Eingangsaktion und ohne interne Transitionen<br />
• Aufrufzustände: Aufruf einer Operation<br />
• Subaktivitätszustände: Zustände mit internen Aktivitätsdiagrammen<br />
• Entscheidungen ( ” if −then−else“)<br />
• Aktions-/Objekts-Flussbeziehungen<br />
• Schwimmbahnen: unterteilen Zuständigkeiten für auszuführende Aktionen<br />
• Kontroll-Icons für Signale
Objektorientierte Modellierung<br />
Nebenläufigkeit in Aktivitätsdiagrammen: Signale<br />
Machine<br />
anschalten<br />
an<br />
braue Kaffee<br />
Leuchte aus<br />
Kaffee<br />
einschenken<br />
Kaffeetasse<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 245 / 634<br />
Objektorientierte Kontroll-Icons Modellierungdeuten<br />
Richtung des Signals an<br />
UML-Zustandsautomatendiagramme<br />
modellieren Objektlebenszyklus: Verhalten eines Objekts in Bezug auf<br />
die verfügbaren Operationen seiner Klasse<br />
gehen zurück auf Zustandsautomaten nach Harel (1987)<br />
Zustand: Menge von Attributwerten eines Objekts<br />
Transition: Zustandsänderung<br />
geeignet auch zur Beschreibung von Anwendungsfällen und<br />
Protokollen<br />
erlauben Verschachtelung von Zuständen und Automaten<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 246 / 634
Objektorientierte Modellierung<br />
Zustandsautomatendiagramme: Beispiel<br />
Idle<br />
caller hangs up<br />
/disconnect<br />
lift receiver<br />
/get dial tone<br />
DialTone<br />
do/ play dial tone<br />
callee<br />
answers<br />
Invalid<br />
Timeout<br />
do/ play message<br />
after (15 sec.) after (15 sec.)<br />
Pinned<br />
Talking<br />
do/ play message<br />
Busy<br />
callee<br />
hangs up<br />
dial digit(n)<br />
do/ play busy tone<br />
callee answers<br />
/enable speech<br />
dial digit(n)<br />
[invalid]<br />
busy<br />
Ringing<br />
Dialing<br />
dial digit(n)<br />
[valid]<br />
Connecting<br />
dial digit(n)<br />
[incomplete]<br />
connected<br />
do/ play ringing tone<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 248 / 634<br />
Objektorientierte Modellierung<br />
Zustände<br />
lift receiver<br />
/get dial tone<br />
Idle<br />
caller hangs up<br />
/disconnect<br />
Active<br />
DialTone<br />
do/ play dial tone<br />
callee<br />
answers<br />
Invalid<br />
Timeout<br />
do/ play message<br />
after (15 sec.) after (15 sec.)<br />
Pinned<br />
Talking<br />
einfach/zusammengesetzt<br />
do/ play message<br />
Busy<br />
callee<br />
hangs up<br />
dial digit(n)<br />
do/ play busy tone<br />
callee answers<br />
/enable speech<br />
dial digit(n)<br />
[invalid]<br />
busy<br />
Ringing<br />
Dialing<br />
dial digit(n)<br />
[valid]<br />
Connecting<br />
dial digit(n)<br />
[incomplete]<br />
connected<br />
do/ play ringing tone<br />
” interne“ Aktionen: entry, exit, do, include, frei definierbare Events<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 249 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Transitionen<br />
Objektorientierte Modellierung<br />
Zustandsautomatendiagramme<br />
• do/ activity : Aktivität, die im Zustand ausgeführt wird<br />
• entry/ action : bei Eintritt ausgeführte Aktivität<br />
• exit/ action : bei Austritt ausgeführte Aktivität<br />
• include/ : Zustandsmaschine wird importiert<br />
• ereignisabhängig: Event [Condition] / ActionˆSend Event<br />
lift receiver<br />
/get dial tone<br />
Idle<br />
caller hangs up<br />
/disconnect<br />
Active<br />
DialTone<br />
do/ play dial tone<br />
callee<br />
answers<br />
Invalid<br />
Timeout<br />
do/ play message<br />
after (15 sec.) after (15 sec.)<br />
Pinned<br />
Talking<br />
do/ play message<br />
Busy<br />
callee<br />
hangs up<br />
Auslöser: Ereignis, Bedingung, Zeit<br />
dial digit(n)<br />
do/ play busy tone<br />
callee answers<br />
/enable speech<br />
dial digit(n)<br />
[invalid]<br />
busy<br />
Ringing<br />
Dialing<br />
Connecting<br />
connected<br />
do/ play ringing tone<br />
lift receiver<br />
/get dial tone<br />
Idle<br />
caller hangs up<br />
/disconnect<br />
Active<br />
DialTone<br />
do/ play dial tone<br />
Invalid<br />
Timeout<br />
do/ play message<br />
after (15 sec.) after (15 sec.)<br />
do/ play message<br />
Busy<br />
dial digit(n)<br />
dial digit(n)<br />
[invalid]<br />
Dialing<br />
dial digit(n)<br />
[valid]<br />
Connecting<br />
dial digit(n)<br />
[incomplete]<br />
Pinned<br />
do/ play busy tone<br />
busy<br />
connected<br />
callee callee<br />
answers hangs up<br />
Ringing<br />
Talking<br />
callee answers<br />
/enable speech<br />
do/ play ringing tone<br />
Zustände<br />
einfach/zusammengesetzt<br />
” interne“ Aktionen: entry, exit, do, include, frei definierbare Events<br />
dial digit(n)<br />
[incomplete]<br />
dial digit(n)<br />
[valid]<br />
Auswirkung: Aktion (z.B. Methodenaufruf), Zustandsänderung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 250 / 634
Objektorientierte Modellierung<br />
Nebenläufigkeit<br />
mehrere nebenläufige Regionen<br />
Parallelität durch Gabelung/Join (bedingungsfrei!)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 251 / 634<br />
Objektorientierte Modellierung<br />
Synchronisation nebenläufiger Regionen<br />
” Pseudozustände“ zur Synchronisation<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 252 / 634
Objektorientierte Modellierung<br />
Auswahl (Choice)<br />
2009-02-09<br />
n-fache Verzweigung des Kontrollflusses gesteuert von einer logischen<br />
Bedingung<br />
dynamische bedingungsabhängige Verzweigung: Guards an den<br />
ausgehenden Transitionen werden ausgewertet, nachdem die Aktion<br />
an der eingehenden Transition ausgeführt wurde.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 253 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Objektorientierte Modellierung<br />
Zustandsautomatendiagramme<br />
Auswahl (Choice)<br />
Dynamische Auswertung der Bedingungen der ausgehenden Transitionen<br />
Auswahl (Choice)<br />
n-fache Verzweigung des Kontrollflusses gesteuert von einer logischen<br />
Bedingung<br />
dynamische bedingungsabhängige Verzweigung: Guards an den<br />
ausgehenden Transitionen werden ausgewertet, nachdem die Aktion<br />
an der eingehenden Transition ausgeführt wurde.
Objektorientierte Modellierung<br />
Mehrfachkreuzung (Junction)<br />
State2<br />
State0 State1<br />
e1[b>0] e1[b>0]<br />
/ a:=a+1 / a:=a+2<br />
[a0]<br />
State3 State4<br />
Kombination aus mehrfacher Fallunterscheidung und mehrfacher<br />
Verzweigung<br />
Vereinigung mehrerer Transitionen<br />
Verschmelzung eingehender Transitionen und/oder<br />
Erzeugung einer statischen bedingungsabhängigen Verzweigung:<br />
Guards an den ausgehenden Transitionen werden ausgewertet, bevor<br />
die Aktion an der eingehenden Transition ausgeführt wird.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 254 / 634<br />
Objektorientierte Modellierung<br />
Anwendung von Zustandsdiagrammen<br />
Beschreibung von Objektlebenszyklen pro Klasse<br />
Beschreibung von Protokollen<br />
Verfeinerung von Anwendungsfällen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 255 / 634
Objektorientierte Modellierung<br />
Wiederholungsfragen I<br />
Was ist ein Modell? Wann und wozu modellieren wir?<br />
Welches sind die wesentlichen Schritte der objektorientierten<br />
Modellierung im Kontext der Anforderungsspezifikation?<br />
Was ist ein Anwendungsfall? Wie können Sie Anwendungsfälle<br />
beschrieben?<br />
Was ist ein Aktor?<br />
Welche Beziehungen zwischen Anwendungsfällen unterstützt die<br />
UML?<br />
Was ist der Unterschied zwischen Objekt- und Klassendiagrammen?<br />
Erläutern Sie Klassendiagramme für die Datenmodellierung.<br />
Was ist eine Generalisierung?<br />
Worin besteht das Liskovsche Substitutionsprinzip?<br />
Wie lassen sich attributierte Assoziationen und n-stellige<br />
Assoziationen mit n > 2 darstellen?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 256 / 634<br />
Objektorientierte Modellierung<br />
Wiederholungsfragen II<br />
Was ist eine Aggregation bzw. eine Komposition?<br />
Wie wird ein Anwendungsfall textuell beschrieben?<br />
Erläutern Sie Interaktionsdiagramme (Sequenzdiagramme und<br />
Kommunikationsdiagramme).<br />
Erstellen Sie ein Sequenzdiagramm für ein bestimmtes Szenario.<br />
Überführen Sie dieses Sequenzdiagramm in ein<br />
Kommunikationsdiagramm.<br />
Wie lassen sich Methoden aus den Interaktionsdiagrammen ableiten?<br />
Wie sind Methoden zu beschreiben?<br />
Erläutern Sie Aktivitätsdiagramme der UML. Erstellen Sie ein<br />
Aktivitätsdiagramm für ein bestimmtes Szenario.<br />
Erläutern Sie Zustandsautomatendiagramme der UML. Erstellen Sie<br />
ein Zustandsautomatendiagramm für ein bestimmtes Szenario.<br />
Wofür können die genannten Diagrammarten benutzt werden?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 257 / 634
Objektorientierte Modellierung<br />
Weiterführende Literatur/Links<br />
Buchtipp: Störrle (2005)<br />
Ein kurzes Tutorial in Deutsch:<br />
http://ivs.cs.uni-magdeburg.de/~dumke/UML/<br />
Eine sehr kurze Übersicht in Englisch:<br />
http://bdn.borland.com/article/0,1410,31863,00.html<br />
Weitere ausführlichere Tutorials in Englisch:<br />
http:<br />
//pigseye.kennesaw.edu/~dbraun/csis4650/A&D/UML_tutorial/<br />
http://uml.tutorials.trireme.com/<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 258 / 634<br />
Prüfung der Anforderungsspezifikation<br />
Prüfung der Anforderungsspezifikation<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Rainer<strong>Projekt</strong> Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 259 / 634
Prüfung der Anforderungsspezifikation<br />
Motivation<br />
Anforderung−<br />
analyse<br />
Anforderungs−<br />
spezifikation<br />
Entwurf<br />
Entwicklung = Sequenz von Aktivitäten mit<br />
Zwischenprodukten (Anforderungsspezifikation,<br />
Entwurf, Code, Testfälle etc.)<br />
Qualität der Zwischenprodukte bestimmt<br />
wesentlich Qualität der von ihnen abhängigen<br />
Aktivitäten<br />
→ die Qualität der Zwischenprodukte muss gesichert werden<br />
→ wir müssen sicher stellen, dass alle Beteiligten sich über das<br />
Zwischenprodukt einig sind<br />
Quellcode kann durch Tests überprüft werden<br />
aber was machen wir mit nicht direkt ausführbaren Dokumenten wie<br />
Anforderungsspezifikation und Entwurf?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 260 / 634<br />
Prüfung der Anforderungsspezifikation<br />
Lernziele<br />
Im Allgemeinen:<br />
Überblick über <strong>Software</strong>-Prüfungen haben<br />
Reviews beliebiger Dokumente durchführen können<br />
Im Speziellen:<br />
Bedeutung der Prüfung für die Anforderungsspezifikation kennen<br />
Anforderungsspezifikation prüfen können<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 261 / 634
Prüfung der Anforderungsspezifikation<br />
Arten der Prüfungen<br />
2009-02-09<br />
Validierung: Are we doing the right thing?<br />
Prüfung, ob das, was entwickelt wird, gewünscht ist.<br />
Verifikation: Are we doing the thing right?<br />
Prüfung, ob der Entwicklungsschritt X richtig durchgeführt wurde.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 262 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Reviews<br />
<strong>Software</strong>-Prüfungen<br />
Arten der Prüfungen<br />
Arten der Prüfungen<br />
Zur Qualitätssicherung gehören Prüfungen; eine Prüfung in der Entwicklung kann grundsätzlich nach zwei<br />
Prinzipien erfolgen.<br />
Vergleich mit einer Fahrt auf der Basis einer Wegbeschreibung:<br />
A: Haben wir das vorgesehene Ziel erreicht?<br />
Validierung: Are we doing the right thing?<br />
Prüfung, ob das, was entwickelt wird, gewünscht ist.<br />
Verifikation: Are we doing the thing right?<br />
Prüfung, ob der Entwicklungsschritt X richtig durchgeführt wurde.<br />
B: Sind wir, wie es die Beschreibung verlangt, an der richtigen Stelle auf die richtige Straße abgebogen?<br />
Offenbar sind beide Prüfungen sinnvoll: (A) ergibt die wichtigere Aussage, lässt sich aber nur anwenden, wenn das<br />
Endziel oder ein definiertes Zwischenziel erreicht wurde. (B) lässt sich nach jedem Schritt anwenden.<br />
Man beachte aber, dass die Wörter Validierung und Verifikation auch anders gebraucht werden, nämlich<br />
• Validierung als Oberbegriff für alle Prüfungen,<br />
• Verifikation speziell für Prüfungen formaler Art (Programmbeweis und ähnliches).<br />
Zur Vermeidung von Missverständnissen spricht man dann von externer und interner Validierung (entsprechend A<br />
und B) bzw. von formaler Verifikation.
Prüfung der Anforderungsspezifikation<br />
<strong>Software</strong>-Prüfung<br />
2009-02-09<br />
nicht−mechanisch<br />
(durch Menschen)<br />
Reviews<br />
Inspektionen<br />
<strong>Software</strong>−Prüfung<br />
mechanisch<br />
(durch den Rechner)<br />
statisch dynamisch<br />
Programm−<br />
analysen<br />
Tests<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 263 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Reviews<br />
<strong>Software</strong>-Prüfungen<br />
<strong>Software</strong>-Prüfung<br />
<strong>Software</strong>-Prüfung<br />
nicht−mechanisch<br />
(durch Menschen)<br />
Reviews<br />
Inspektionen<br />
<strong>Software</strong>−Prüfung<br />
Am populärsten ist der Test; aber man kann mit dem Rechner auch statisch prüfen. Fast immer kann man aber<br />
inspizieren.<br />
mechanisch<br />
(durch den Rechner)<br />
statisch dynamisch<br />
Programm−<br />
analysen<br />
Tests
Prüfung der Anforderungsspezifikation<br />
. . . ist prüfbar durch<br />
das Dokument . . . Inspektion Test<br />
Lastenheft X<br />
Pflichtenheft X<br />
Systementwurf X<br />
Definition der Daten und Algorithmen X<br />
Benutzerhandbuch X<br />
Testdaten X<br />
Code X X<br />
Anleitungen etc. X<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 264 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Reviews<br />
<strong>Software</strong>-Prüfungen<br />
. . . ist prüfbar durch<br />
das Dokument . . . Inspektion Test<br />
Lastenheft X<br />
Pflichtenheft X<br />
Systementwurf X<br />
Definition der Daten und Algorithmen X<br />
Benutzerhandbuch X<br />
Testdaten X<br />
Code X X<br />
Anleitungen etc. X<br />
Naturgemäß lassen sich mechanische Prüfungen nur dann anwenden, wenn die zu prüfenden Informationen einer<br />
mechanischen Analyse zugänglich sind. Darum kommt in der <strong>Software</strong>-Entwicklung als Prüfverfahren ganz<br />
überwiegend die Inspektion in Frage.
Prüfung der Anforderungsspezifikation<br />
Reviews (Frühauf u. a. 2000)<br />
Prinzip<br />
Ziel<br />
2009-02-09<br />
Eine <strong>Software</strong>-Einheit wird (dezentral) von mehreren Gutachtern<br />
inspiziert;<br />
in einer gemeinsamen Sitzung werden die Mängel zusammengetragen<br />
und dokumentiert.<br />
Fehler zu finden,<br />
nicht, die Fehler auch zu beheben.<br />
Fehlerbehebung ist ein separater Arbeitsschritt, den der Entwickler im<br />
Allgemeinen wieder ohne Mitwirkung Dritter durchführt.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 265 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Reviews<br />
Reviews<br />
Reviews (Frühauf u. a. 2000)<br />
Reviews (Frühauf u. a. 2000)<br />
Prinzip<br />
Eine <strong>Software</strong>-Einheit wird (dezentral) von mehreren Gutachtern<br />
inspiziert;<br />
in einer gemeinsamen Sitzung werden die Mängel zusammengetragen<br />
und dokumentiert.<br />
Ziel<br />
Fehler zu finden,<br />
nicht, die Fehler auch zu beheben.<br />
Fehlerbehebung ist ein separater Arbeitsschritt, den der Entwickler im<br />
Allgemeinen wieder ohne Mitwirkung Dritter durchführt.<br />
Nachfolgend wird das technische Review beschrieben. In der Praxis gibt es zahlreiche Varianten. Zwischen diesen<br />
Formen gibt es keine simple Qualitätsordnung! Das heißt, wir wissen nicht, welche davon effektiver und effizienter<br />
ist in der Fehlersuche.
Prüfung der Anforderungsspezifikation<br />
Reviews (Frühauf u. a. 2000)<br />
Prüfling<br />
kann jeder in sich abgeschlossene, für Menschen lesbare Teil von<br />
<strong>Software</strong> sein<br />
Beispiele: ein einzelnes Dokument, ein Codemodul, ein Testfall<br />
Voraussetzung:<br />
Referenzunterlagen benötigt, die eine Beurteilung erlauben<br />
dazu gehören eine Vorgabe oder Spezifikation sowie die relevanten<br />
Richtlinien<br />
zusätzlich können Fragenkataloge (Checklisten) verwendet werden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 266 / 634<br />
Prüfung der Anforderungsspezifikation<br />
Reviews (Frühauf u. a. 2000)<br />
Rollen<br />
Moderator leitet das Review, ist also für den ordnungsgemäßen<br />
Ablauf verantwortlich.<br />
Sekretär führt das Protokoll.<br />
Gutachter sind Experten (z.B. Kollegen), die den Prüfling beurteilen<br />
können.<br />
Autor ist der Urheber des Prüflings oder ein Repräsentant des Teams,<br />
das den Prüfling erstellt hat.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 267 / 634
Prüfung der Anforderungsspezifikation<br />
Review-Prozess<br />
1−2 W<br />
vorher<br />
2 h<br />
[akzeptabel]<br />
Planung<br />
Vorbereitung<br />
Sitzung<br />
Freigabe<br />
Analyse<br />
Nacharbeit<br />
[nicht akzeptabel]<br />
1−2 W<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 268 / 634<br />
Prüfung der Anforderungsspezifikation<br />
Review<br />
Gutachter: andere Entwickler, Benutzer, Auftraggeber, Produkt-Manager,<br />
Tester, Architekten, Handbuchautoren, Wartungspersonal.<br />
Aufgaben:<br />
Vorbereitung: Prüfling lesen und nach bestimmten, ihnen individuell<br />
zugeteilten Gesichtspunkten prüfen.<br />
Sitzung: gefundene Probleme vorbringen; Befund gemeinsam erheben,<br />
gewichten und protokollieren<br />
begutachten<br />
nicht korrigieren<br />
Nacharbeit: Autor korrigiert nach Auflagen der Gutachter<br />
eventuell weitere Iteration mit Gutachtern<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 269 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Reviews<br />
Ablauf von Reviews<br />
Review<br />
Review<br />
Gutachter: andere Entwickler, Benutzer, Auftraggeber, Produkt-Manager,<br />
Tester, Architekten, Handbuchautoren, Wartungspersonal.<br />
Aufgaben:<br />
Vorbereitung: Prüfling lesen und nach bestimmten, ihnen individuell<br />
zugeteilten Gesichtspunkten prüfen.<br />
Sitzung: gefundene Probleme vorbringen; Befund gemeinsam erheben,<br />
gewichten und protokollieren<br />
begutachten<br />
nicht korrigieren<br />
Nacharbeit: Autor korrigiert nach Auflagen der Gutachter<br />
eventuell weitere Iteration mit Gutachtern<br />
Beim technischen Review werden Kollegen als Gutachter beigezogen. Dafür kommen vor allem andere Entwickler in<br />
Frage, aber auch Benutzer, Produkt-Manager oder Auftraggeber. Die Gutachter erhalten im technischen Review<br />
konkrete Aufträge:<br />
• Im ersten Schritt des Reviews, in der Vorbereitung, müssen die Gutachter das zu prüfende Dokument lesen und nach<br />
bestimmten, ihnen individuell zugeteilten Gesichtspunkten prüfen.<br />
• Den zweiten Schritt bildet die Review-Sitzung, in der die Gutachter ihre in der Vorbereitung gefundenen Probleme<br />
vorbringen. Gemeinsam erheben, gewichten und protokollieren sie die Befunde. Der Auftrag für die Review-Sitzung<br />
lautet also, das Dokument oder Programm zu begutachten und nicht zu korrigieren, d.h. die Sitzung hat das Ziel,<br />
Probleme aufzuzeigen, nicht sie zu lösen.<br />
• Die Nacharbeit selbst wird dem Autor oder den Autoren zugeteilt. Die Gutachter kommen bei der Überprüfung der<br />
Nacharbeit evtl. nochmals zum Zug.<br />
Prüfung der Anforderungsspezifikation<br />
Review-Regeln<br />
Review-Sitzung ist auf 2h beschränkt.<br />
Falls nötig wird eine weitere Sitzung, frühestens am nächsten Tag,<br />
einberufen.<br />
Der Moderator kann die Sitzung absagen oder abbrechen. Grund des<br />
Abbruchs ist zu protokollieren.<br />
z.B. weil Gutachter nicht erscheinen oder ungenügend vorbereitet sind<br />
Moderator ist nicht zugleich Gutachter.<br />
Jeder Gutachter bekommt Gelegenheit, seine Befunde angemessen zu<br />
präsentieren.<br />
Der Prüfling – nicht der Autor – steht zur Diskussion. Das heißt:<br />
Gutachter müssen auf ihre Ausdrucksweise achten.<br />
Autor darf weder sich noch das Resultat verteidigen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 270 / 634
Prüfung der Anforderungsspezifikation<br />
Review-Regeln II<br />
Stilfragen (außerhalb der Richtlinien) werden nicht diskutiert.<br />
Das Review-Team identifiziert Schwachpunkte und Fehler.<br />
Team macht keine konstruktiven Vorschläge, wie Mängel zu beheben<br />
sind;<br />
Befunde werden nicht in der Form von Anweisungen an den Autor<br />
protokolliert.<br />
Der Konsens der Gutachter zu einem Befund wird laufend<br />
protokolliert. Die einzelnen Befunde werden gewichtet als<br />
kritischer Fehler (Prüfling für den vorgesehenen Zweck unbrauchbar,<br />
Fehler muss vor der Freigabe behoben werden)<br />
Hauptfehler (Nutzbarkeit des Prüflings beeinträchtigt, Fehler sollte vor<br />
der Freigabe behoben werden),<br />
Nebenfehler (beeinträchtigen den Nutzen kaum),<br />
gut (fehlerfrei, bei Überarbeitung nicht ändern)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 271 / 634<br />
Prüfung der Anforderungsspezifikation<br />
Review-Regeln III<br />
Review-Team gibt Empfehlung über die Annahme des Prüflings:<br />
akzeptieren ohne Änderungen<br />
akzeptieren mit Änderungen (kein weiteres Review)<br />
nicht akzeptieren (weiteres Review erforderlich)<br />
Alle Sitzungsteilnehmer unterschreiben das Protokoll<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 272 / 634
Prüfung der Anforderungsspezifikation<br />
Checklisten: Fragenkatalog für ein Anforderungsdokument<br />
Prüfen Sie bitte das Dokument als Vorbereitung zur Sitzung gemäß den<br />
Ihnen in Punkt D der Einladung zugeteilten Aspekten aus der folgenden<br />
Liste.<br />
Aspekt Form: Ist die Darstellung im Dokument sinnvoll?<br />
a1 Sind Anforderungen als solche erkennbar, d.h. von Erklärungen<br />
unterscheidbar?<br />
a2 Sind alle Anforderungen eindeutig referenzierbar?<br />
a3 Ist die Spezifikation jeder Anforderung eindeutig?<br />
a4 Sind alle Anforderungen überprüfbar formuliert?<br />
Aspekt Schnittstellen: Sind alle Schnittstellen eindeutig spezifiziert?<br />
b1 Sind alle Objekte der Umgebung (Benutzer, andere Systeme,<br />
Basis-<strong>Software</strong> etc.) sowie alle Informationsflüsse von und nach diesen<br />
Objekten spezifiziert?<br />
b2 Sind alle Benutzerklassen (Dauerbenutzer, gelegentliche Benutzer,<br />
System-Administrator, etc.) des Systems identifiziert?<br />
b3 . . .<br />
b7 Sind Vorgaben gemacht bezüglich Verwendung von<br />
Betriebssystem-Funktionen, Bibliotheken und Hilfsprogrammen?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 273 / 634<br />
Prüfung der Anforderungsspezifikation<br />
Checklisten: Fragenkatalog für ein Anforderungsdokument<br />
(Fortsetzung)<br />
Aspekt Vertraulichkeit: Sind die wesentlichen Aspekte des<br />
Datenschutzes berücksichtigt?<br />
d1 Ist spezifiziert, welche Information vertraulich zu behandeln ist?<br />
d2 Sind die Zugriffsrechte aller Benutzerklassen definiert?<br />
d3 Ist definiert, gegen welche Art von unberechtigtem Zugriff die<br />
Information geschützt werden muss?<br />
. . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 274 / 634
Prüfung der Anforderungsspezifikation<br />
Varianten des <strong>Software</strong>-Reviews<br />
Design and Code Inspection (nach Fagan)<br />
mit Einführungssitzung, Gutachter-Notizen, die abgegeben werden,<br />
Vorleser, Entscheidungskompetenz, Metriken-Erhebung.<br />
Schreibtischtest (besser: die Selbstkontrolle)<br />
führt jeder Entwickler allein durch (vgl. Humphreys PSP);<br />
ersetzt die eigentliche Prüfung nicht.<br />
Stellungnahme<br />
ist ein ” off-line“–Review unter der Regie des Autors;<br />
den Vorteilen (geringer Organisationsaufwand) stehen erhebliche<br />
Nachteile gegenüber (Prüfling nicht vor Weiterbearbeitung geschützt,<br />
Qualität der Prüfung und Umsetzung der Resultate nicht kontrolliert).<br />
Structured Walkthrough<br />
ist die Billig-Variante des Reviews: Autor ist Moderator;<br />
er kompensiert durch seine Präsentation die Einsparung (oder<br />
Reduktion) der Vorbereitung;<br />
während seiner Vorbereitung entdeckt er selbst viele Fehler.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 275 / 634<br />
Prüfung der Anforderungsspezifikation<br />
Varianten des <strong>Software</strong>-Reviews<br />
Perspektivisches Review<br />
Prinzip:<br />
Prüfling wird von Gutachtern mit unterschiedlichem Interesse geprüft<br />
Gutachter haben konkreten Auftrag: Prüfling (hypothetisch) benutzen<br />
Beispiel:<br />
Tester → Testfälle entwickeln<br />
Benutzer → System benutzen<br />
Handbuchautor → Handbuch schreiben<br />
Architekt → Entwurf erstellen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 276 / 634
Prüfung der Anforderungsspezifikation<br />
Varianten des <strong>Software</strong>-Reviews<br />
Empirische Studien legen nahe (Berling und Runeson 2003; Fusaro u. a.<br />
1997; Hayes 1999; Miller u. a. 1998; Porter u. a. 1995; Porter und Votta<br />
1998; Sandahl u. a. 1998):<br />
Reviews, die auf Checklisten basieren, sind effektiver als<br />
Ad-Hoc-Reviews;<br />
perspektivische Reviews sind effektiver und effizienter als Reviews, die<br />
auf Checklisten basieren:<br />
mehr Fehler/Mängel gefunden<br />
mehr Fehler/Mängel in gleicher Zeiteinheit gefunden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 277 / 634<br />
Prüfung der Anforderungsspezifikation<br />
Woran scheitern Reviews? Fallen und Gegenmittel<br />
Probleme bei der Ein-/Durchführung von Reviews:<br />
Es fehlen gute Moderatoren<br />
→ Leute aussuchen und ausbilden<br />
Es fehlen Bezugsdokumente<br />
→ suchen, anpassen, bereitstellen<br />
Entwickler haben Angst<br />
→ erste Reviews gründlich vorbereiten (und auf die Ängste eingehen,<br />
selbst wenn sie geleugnet werden)<br />
Reviews beißen sich an Äußerlichkeiten fest<br />
→ Bedeutung der Äußerlichkeiten klarstellen, aber dann weitergehen;<br />
→ beim zweiten Review sicherstellen, dass die Äußerlichkeiten in Ordnung<br />
sind.<br />
Bezugsdokumente sind ungeeignet<br />
→ diskutieren und verbessern<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 278 / 634
Prüfung der Anforderungsspezifikation<br />
Woran scheitern Reviews? Fallen und Gegenmittel II<br />
Zeitdruck sabotiert Prüfungen<br />
→ klare Entscheidungen über die Prioritäten treffen<br />
Geprüfte Dokumente werden verändert<br />
→ Konfigurationsmanagement verbessern<br />
Interesse an Reviews kühlt sich ab (,,Jetzt ist doch eigentlich alles in<br />
Ordnung!”)<br />
→ Statistiken führen, Erfolg nachweisen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 279 / 634<br />
Prüfung der Anforderungsspezifikation<br />
Wiederholungsfragen<br />
Was ist der Unterschied zwischen Verifikation und Validierung?<br />
Welche Arten der <strong>Software</strong>-Prüfung gibt es?<br />
Was ist ein Review? Welche Rollen sieht es vor? Wie wird es<br />
durchgeführt?<br />
Welche Review-Varianten gibt es?<br />
Worauf ist bei Reviews zu achten?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 280 / 634
Prüfung der Anforderungsspezifikation<br />
Weiterführende Literatur<br />
Frühauf u. a. (2000) führen in <strong>Software</strong>-Prüfung ein.<br />
Shull u. a. (2000) zeigen in ihren empirischen Untersuchungen, dass<br />
perspektivische Reviews effektiver sein können als Reviews, die nur<br />
auf allgemeinen Check-Listen basieren<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 281 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Entwurf von Benutzungsschnittstellen<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Rainer<strong>Projekt</strong> Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 282 / 634
Entwurf von Benutzungsschnittstellen<br />
Lernziele<br />
Ergonomische <strong>Software</strong> erstellen können:<br />
Bedienelemente graphischer Benutzungsschnittstellen kennen und<br />
einsetzen können<br />
Ergonomie bewerten können<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 285 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Ergonomie<br />
Definition<br />
Ergonomie: (von ergon (Arbeit, Werk) und nomos (Gesetz, Regel)) ist die<br />
Wissenschaft der Arbeitsbedingungen und deren optimale Anpassung an<br />
den Anwender.<br />
“Design for Use”<br />
Anpassung von Maschinen, Computern und Systemen an menschliche<br />
(Denk- und Kommunikations-) Fähigkeiten und Bedürfnisse<br />
zentral ist Schnittstelle zwischen Mensch und Maschine<br />
(Mensch-Computer-Interaktion)<br />
Auswirkungen auf zum Beispiel: Arbeitsabläufe, Menü-Hierarchien,<br />
Kommandosprachen, Farb- und Schriftwahl und die<br />
Funktionsaufteilung zwischen Mensch und Computer<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 286 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Entwurf von Benutzungsschnittstellen<br />
Ergonomie<br />
Ergonomie<br />
Ergonomie<br />
Definition<br />
Ergonomie: (von ergon (Arbeit, Werk) und nomos (Gesetz, Regel)) ist die<br />
Wissenschaft der Arbeitsbedingungen und deren optimale Anpassung an<br />
den Anwender.<br />
“Design for Use”<br />
Anpassung von Maschinen, Computern und Systemen an menschliche<br />
(Denk- und Kommunikations-) Fähigkeiten und Bedürfnisse<br />
zentral ist Schnittstelle zwischen Mensch und Maschine<br />
(Mensch-Computer-Interaktion)<br />
Auswirkungen auf zum Beispiel: Arbeitsabläufe, Menü-Hierarchien,<br />
Kommandosprachen, Farb- und Schriftwahl und die<br />
Funktionsaufteilung zwischen Mensch und Computer<br />
Alternative Definition<br />
” Der <strong>Software</strong>-Ergonomie geht es um eine Optimierung des Zusammenspiels aller Komponenten, die die<br />
Arbeitssituation von Computerbenutzern bestimmen: Mensch, Aufgabe, Technik und organisatorischer Rahmen. Sie<br />
beschränkt sich ausdrücklich nicht - wie oft fälschlich angenommen - auf die Behandlung der Präsentationsaspekte<br />
interaktiver <strong>Software</strong>.“<br />
– nach Susanne Maaß, <strong>Software</strong>-Ergonomie, ” benutzer- und aufgabengerechte Systemgestaltung“,<br />
<strong>Informatik</strong>-Spektrum, 16, 1993, 191-205<br />
Entwurf von Benutzungsschnittstellen<br />
Usability<br />
Definition<br />
Usability: eines Produktes ist das Ausmaß, in dem es von einem<br />
bestimmten Benutzer verwendet werden kann, um bestimmte Ziele in<br />
einem bestimmten Kontext effektiv, effizient und zufriedenstellend zu<br />
erreichen. — Part 11: “Guidance on Usability” (ISO 9241-11:1998 1998)<br />
übersetzt als ” Benutzerfreundlichkeit” oder ” Benutzbarkeit”<br />
Verbesserung ist Ziel der (<strong>Software</strong>-)Ergonomie<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 287 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Entwurf von Benutzungsschnittstellen<br />
Ergonomie<br />
Usability<br />
Usability<br />
Definition<br />
Usability: eines Produktes ist das Ausmaß, in dem es von einem<br />
bestimmten Benutzer verwendet werden kann, um bestimmte Ziele in<br />
einem bestimmten Kontext effektiv, effizient und zufriedenstellend zu<br />
erreichen. — Part 11: “Guidance on Usability” (ISO 9241-11:1998 1998)<br />
übersetzt als ” Benutzerfreundlichkeit” oder ” Benutzbarkeit”<br />
Verbesserung ist Ziel der (<strong>Software</strong>-)Ergonomie<br />
Wird auch als ” Ein Maß für die Qualität, mit der ein Benutzer die Interaktion mit einer Maschine erlebt.“ definiert.<br />
Entwurf von Benutzungsschnittstellen<br />
Psychologische und kognitive Grundlagen<br />
Kurzzeitgedächtnis<br />
Information strukturieren und begrenzen: 7 ± 2<br />
menschliche Gestaltwahrnehmung<br />
→ bei Präsentation beachten<br />
z.B. Superzeichenbildung: 0 4 2 1 2 1 8 2 4 2 1 versus 0421/218-2421<br />
geteilte Aufmerksamkeit<br />
→ Fortsetzung nach Unterbrechung unterstützen<br />
begrenzte Konzentrationsfähigkeit<br />
→ nicht überfordern, Sicherheiten einbauen<br />
Unerfahrenheit verunsichert<br />
→ Metaphern verwenden, z.B. Ikonen wie Mülleimer, Briefkasten<br />
→ explorative Untersuchung unterstützen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 288 / 634
Entwurf von Benutzungsschnittstellen<br />
Vergleich von GUI und Kommandosprachen<br />
Kommandosprachen Graphical User Interface (GUI)<br />
komplexe Operationen einfache Operationen<br />
intensive Nutzung, gelegentlicher Einsatz,<br />
Experten leichte Erlernbarkeit<br />
funktionale Bedienung, Objektorientierung<br />
Berechnungen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 291 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Wegweiser<br />
Meilensteine in der Geschichte graphischer<br />
Benutzungsschnittstellen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 292 / 634
Entwurf von Benutzungsschnittstellen<br />
Die ersten Ideen<br />
Memex (Memory Extender) von Bush (1945)<br />
2009-02-09<br />
Kompakt-Analog-Rechner zur Verwaltung<br />
verlinkter Informationen<br />
berührungssensitive Bildschirme projizieren<br />
Mikrofilme<br />
Mikrofilme verknüpft<br />
Vor- und Zurückblättern über Hebel<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 293 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Entwurf von Benutzungsschnittstellen<br />
Geschichte graphischer Benutzungsschnittstellen<br />
Die ersten Ideen<br />
Dank auch an Matthias Kirschner für einige seiner Folien.<br />
Die ersten Ideen<br />
Memex (Memory Extender) von Bush (1945)<br />
Kompakt-Analog-Rechner zur Verwaltung<br />
verlinkter Informationen<br />
berührungssensitive Bildschirme projizieren<br />
Mikrofilme<br />
Mikrofilme verknüpft<br />
Vor- und Zurückblättern über Hebel
Entwurf von Benutzungsschnittstellen<br />
Semi Automatic Ground Environment<br />
Bedienung durch Laien<br />
Lichtgriffel (Light-Pen)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 294 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Sketchpad<br />
von Ivan Sutherland (1963)<br />
Objektorientierung statt<br />
Bitmaps<br />
Generische Operationen für<br />
verschiedene Objekte<br />
Constraints zu den graphischen<br />
Objekten (z.B. Länge)<br />
Copy & Paste<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 295 / 634
Entwurf von Benutzungsschnittstellen<br />
Computermaus<br />
von Douglas Engelbart und Bill English (1963)<br />
relative Positionsveränderung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 296 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Windows Icons Menus & Pointer<br />
Frühe Ideen: Xerox Palo Alto Research Center (1970)<br />
Prinzipien:<br />
abstrakte Datensicht, Visualisierung<br />
Raum und Objekte<br />
Metaphorisierung: Schreibtisch (Desktop)<br />
“What you see is what you get” (Texteditor BRAVO, Vorläufer von<br />
Microsoft Word)<br />
einheitliche Visualisierung und Interaktion<br />
wenige Modi, generische Kommandos<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 297 / 634
Entwurf von Benutzungsschnittstellen<br />
Xerox Star GUI<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 298 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Marktreife<br />
1984 X-Windows System, Apple Lisa<br />
1985 Atari ST, Amiga, Windows 1.0<br />
1987 farbige GUI, Apple II<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 299 / 634
Entwurf von Benutzungsschnittstellen<br />
Wegweiser<br />
Möglichkeiten graphischer Benutzungsschnittstellen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 300 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Direkte Manipulation<br />
Direkte Manipulation:<br />
Metaphern visualisiert in Form von Ikonen (Gegenstände)<br />
physische Aktionen mittels Zeigegeräten<br />
permanente visuelle Rückkopplung<br />
nützt Intuition und Erfahrungen der Anwender in der metaphorisierten<br />
Welt aus<br />
Interaktionen:<br />
Auswahl: “Point & Click”<br />
Verschieben:<br />
Unmittelbar: “Drag & Drop”<br />
Unterbrechbar: “Cut & Paste”<br />
Vervielfältigen: “Copy & Paste”<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 301 / 634
Entwurf von Benutzungsschnittstellen<br />
Rückkopplung an Nutzer<br />
Metaphern der physischen<br />
Welt, z.B. Räumlichkeit,<br />
→ Wiedererkennungswert<br />
Verbergen von Irrelevantem,<br />
Information auf Abruf,<br />
Kontextsensitivität<br />
Fortschrittsanzeige,<br />
Aktivitätsanzeige<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 302 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Fenster I<br />
Fokus<br />
Desktop, Hauptfenster<br />
Handles, Scrollbars<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 303 / 634
Entwurf von Benutzungsschnittstellen<br />
Fenster II<br />
Reiter, Split-Fenster<br />
Layout Manager<br />
Dialogfenster<br />
modal: Dialog muss abgeschlossen werden, bevor nächster Dialog<br />
beginnt<br />
nicht-modal: Dialoge können ko-existieren<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 304 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Menüs und Schaltflächen I<br />
” Pull-Down-Menü“<br />
Paneele, Gruppen<br />
Baumstruktur<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 305 / 634
Entwurf von Benutzungsschnittstellen<br />
Menüs und Schaltflächen II<br />
Kontextmenü<br />
Schaltfläche, Button<br />
Toolbars<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 306 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Textelemente<br />
Mnemonics, Tooltips<br />
Formularfelder<br />
Listen, Tabellen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 307 / 634
Entwurf von Benutzungsschnittstellen<br />
Ikone, Metaphern<br />
Dateisymbole<br />
Programmverknüpfungen<br />
Thumbnails<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 308 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Manipulatoren und Attribute<br />
Checkbox<br />
(Boolean)<br />
Radio-Button<br />
(Alternativen)<br />
Slider<br />
(Zahlenwerte)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 309 / 634
Entwurf von Benutzungsschnittstellen<br />
Listen<br />
Teilmenge,<br />
Permutation<br />
statisch vs.<br />
erweiterbar<br />
Combo-Box<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 310 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Wegweiser<br />
Eigenschaften guter graphischer<br />
Benutzungsschnittstellen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 311 / 634
Entwurf von Benutzungsschnittstellen<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Definition<br />
Aufgabenangemessenheit: Benutzer wird unterstützt, Arbeitsaufgabe<br />
effektiv und effizient zu erledigen<br />
2009-02-09<br />
Dialoge sollten nur sachdienliche Informationen enthalten<br />
Vermeidung von Ablenkungen<br />
weniger ist mehr (Funktionen)<br />
den Bildschirm nicht überfüllen<br />
vermeide es, Befehle redundant anzubieten<br />
keine unnötigen Dialoge und Popups<br />
Optimieren von häufigen Aufgaben<br />
kleine Anzahl von benötigten Schritten; Anzahl ” Klicks“ klein halten<br />
große Knöpfe für Hauptbefehle, Tastaturkürzel<br />
die häufigsten Funktionen auf dem ersten Bildschirm<br />
wichtige Befehle → hervorstehende Stelle<br />
weniger häufig benutzte Befehle → weniger hervorstehende Stelle<br />
(Untermenü, Einstellungsdialog)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 312 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Entwurf von Benutzungsschnittstellen<br />
<strong>Software</strong>-ergonomische Richtlinien<br />
Weitere Qualitätsaspekte<br />
• Fehler verringern<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
• Sicherheit erhöhen<br />
• Zuverlässigkeit erhöhen<br />
• Lernanforderungen verringern<br />
• Wartbarkeit verbessern<br />
• Wirksamkeit erhöhen<br />
• Produktivität erhöhen<br />
• Arbeitsumgebung verbessern<br />
• Ermüdung verringern<br />
• Langeweile und Eintönigkeit verringern<br />
• Zugang zur Anwendung erleichtern<br />
• Akzeptanz verbessern<br />
• Arbeitszufriedenheit steigern<br />
• Tätigkeitserweiterung ermöglichen<br />
• Lebensqualität verbessern<br />
• . . .<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Definition<br />
Aufgabenangemessenheit: Benutzer wird unterstützt, Arbeitsaufgabe<br />
effektiv und effizient zu erledigen<br />
Dialoge sollten nur sachdienliche Informationen enthalten<br />
Vermeidung von Ablenkungen<br />
weniger ist mehr (Funktionen)<br />
den Bildschirm nicht überfüllen<br />
vermeide es, Befehle redundant anzubieten<br />
keine unnötigen Dialoge und Popups<br />
Optimieren von häufigen Aufgaben<br />
kleine Anzahl von benötigten Schritten; Anzahl ” Klicks“ klein halten<br />
große Knöpfe für Hauptbefehle, Tastaturkürzel<br />
die häufigsten Funktionen auf dem ersten Bildschirm<br />
wichtige Befehle → hervorstehende Stelle<br />
weniger häufig benutzte Befehle → weniger hervorstehende Stelle<br />
(Untermenü, Einstellungsdialog)
Entwurf von Benutzungsschnittstellen<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Definition<br />
Selbstbeschreibungsfähigkeit: jeder einzelne Dialogschritt ist durch<br />
Rückmeldung unmittelbar verständlich bzw. eine Erklärung ist auf Anfrage<br />
verfügbar<br />
verständliche Benennung von Feldern<br />
Online-Hilfe<br />
Erläuterung der Konsequenzen des nächsten Schritts<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 313 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Definition<br />
Erwartungskonformität: Dialog ist konsistent und entspricht den<br />
Merkmalen des Benutzers (z.B. Kenntnisse aus dem Arbeitsgebiet,<br />
Ausbildung u. Erfahrung sowie allgemeinen Konventionen)<br />
vorhersagbares Verhalten<br />
passende Rückmeldung in angemessener Zeit<br />
Konsistenz von Benutzeraktionen, Präsentation, Anordnung von<br />
Elementen, Text<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 314 / 634
Entwurf von Benutzungsschnittstellen<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Definition<br />
Steuerbarkeit: Benutzer ist in der Lage, den Dialogablauf zu starten sowie<br />
seine Richtung und Geschwindigkeit zu beeinflussen, bis Ziel erreicht ist<br />
2009-02-09<br />
erlaube es dem Benutzer, jederzeit die Anwendung zu verlassen oder<br />
zur Startseite zurückzukommen<br />
benutze modale Formulare sparsam<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 315 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Entwurf von Benutzungsschnittstellen<br />
<strong>Software</strong>-ergonomische Richtlinien<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Definition<br />
Steuerbarkeit: Benutzer ist in der Lage, den Dialogablauf zu starten sowie<br />
seine Richtung und Geschwindigkeit zu beeinflussen, bis Ziel erreicht ist<br />
erlaube es dem Benutzer, jederzeit die Anwendung zu verlassen oder<br />
zur Startseite zurückzukommen<br />
benutze modale Formulare sparsam<br />
Modaler Dialog: ein Dialog, der geschlossen werden muss, bevor weitere Aktionen anderer Dialoge durchgeführt<br />
werden können. Beispiel: Datei- Öffnen-Dialog.
Entwurf von Benutzungsschnittstellen<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Definition<br />
Fehlertoleranz: Ziel kann trotz erkennbarer fehlerhafter Eingabe mit<br />
minimalem Korrekturaufwand durch den Benutzer erreicht werden<br />
Hinweise sind sichtbar oder einfach erreichbar<br />
aussagekräftige Fehlermeldungen mit Hinweisen<br />
einfaches Wiederaufsetzen nach Fehlern, z.B. fehlerhafte Eingabe in<br />
Textfeld wird nicht einfach gelöscht,<br />
Fehler werden vor Eintreten verhindert<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 316 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Definition<br />
Individualisierbarkeit: Anpassungen an Erfordernisse der Arbeitsaufgabe,<br />
individuelle Vorlieben des Benutzers und Benutzerfähigkeiten sind möglich<br />
Sprache ist einstellbar<br />
Zeichensätze/-größe sind einstellbar<br />
Farben sind einstellbar<br />
eigene Tastaturbefehle für erfahrene Benutzer<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 317 / 634
Entwurf von Benutzungsschnittstellen<br />
Qualitätskriterien (EN ISO 9241-10:1995 1995)<br />
Definition<br />
Lernförderlichkeit: Benutzer wird beim Erlernen des Dialogsystems<br />
unterstützt und angeleitet<br />
Guided Tour<br />
Undo erlaubt gefahrlose Exploration<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 318 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Wegweiser<br />
Usability messen und verbessern<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 319 / 634
Entwurf von Benutzungsschnittstellen<br />
Usability-Engineering<br />
Iterative Verbesserung der Usability<br />
1 Festlegen der Parameter<br />
2 Bewerten des Systems<br />
3 Verbessern des Systems<br />
4 Wiederhole ab 2 solange, bis Qualität akzeptabel<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 320 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Parameter für Bestimmung der Usability<br />
Beispiel Textverarbeitung:<br />
Ziel: Erstellen eines Textdokuments nach einer Papiervorlage<br />
Aufgaben: Eingeben des Textes<br />
Formatieren<br />
Einfügen eines Bildes<br />
Rechtschreibung überprüfen<br />
. . .<br />
Benutzer: wenig Vorkenntnisse über Computerbenutzung im<br />
Allgemeinen und Textverarbeitung im Speziellen<br />
Umgebung: Büroumgebung mit erheblichem Zeitdruck<br />
Meßgrößen: Zeitaufwand, Unterschiede im Text (mit Gewichtung) und<br />
Unterschiede im Layout und Stil (auch mit Gewichtung)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 321 / 634
Entwurf von Benutzungsschnittstellen<br />
Evaluationsverfahren<br />
Wie kann man Usability messen?<br />
objektiv versus subjektiv<br />
Fakten versus Gründe<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 322 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Subjektive Messungen<br />
Benutzerbefragung (Fragebögen oder Interviews)<br />
subjektiv<br />
breit anwendbar und statistisch auswertbar<br />
Standardfragebögen existieren (z.B. ErgoNorm, SUMI, QUIS, PUTQ)<br />
Experten-Reviews<br />
Checklisten für Normkonformität<br />
Heuristiken<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 323 / 634
Entwurf von Benutzungsschnittstellen<br />
Objektive Messungen<br />
Evaluation eines Modells<br />
direkte Beobachtung der Benutzer<br />
Labor oder echte Arbeitsumgebung<br />
Aufzeichnung: Video, Audio (Think-Aloud), Eye-Tracking<br />
indirekte Beobachtung: Mitschnitte von Aktionen (z.B. Web-Logs)<br />
breiter anwendbar<br />
viel Fakten, wenig Hinweise auf Gründe<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 324 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
A-Posteriori Messungen<br />
Messungen nach Auslieferung im Einsatz:<br />
Anzahl der Hotline-Anrufe<br />
Verkaufsrate<br />
siehe oben<br />
Speziell fürs Web:<br />
Traffic / Netzaufkommen<br />
Besucherzahl<br />
Anteil der Besucher, die zum Kauf eines Produkts animiert werden<br />
konnten<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 325 / 634
Entwurf von Benutzungsschnittstellen<br />
Zusammenfassung<br />
entwickle für den Benutzer<br />
entwickle mit dem Benutzer<br />
Usability ist entscheidend für den Erfolg des Produktes<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 327 / 634<br />
Entwurf von Benutzungsschnittstellen<br />
Wiederholungsfragen<br />
Wie kann Usability verbessert werden?<br />
Wie lässt sich Usability messen?<br />
Was sind die Qualitätskriterien von Benutzungsschnittstellen nach EN<br />
ISO 9241-10:1995 (1995)? Erläutern Sie die Aspekte anhand eines<br />
konkreten Szenarios.<br />
Wie haben Sie diese konkret in Ihrem <strong>Projekt</strong> umgesetzt?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 328 / 634
<strong>Software</strong>-Architektur<br />
<strong>Software</strong>-Architektur<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
<strong>Projekt</strong><br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 329 / 634<br />
<strong>Software</strong>-Architektur<br />
Vorgehen<br />
Lernziele<br />
Inhalt<br />
Zeitplan<br />
Planung und Aufwand im SWP 05/06<br />
Risiken<br />
Risiko-Management<br />
Erfahrungen aus dem SWP 05/06<br />
Verstehen, Allgemeinewas Risiken <strong>Software</strong>-Architektur in einem <strong>Software</strong>-<strong>Projekt</strong> ist<br />
Verschiedene Wiederholungsfragen Architektursichten kennen<br />
Lernziele<br />
Qualitäten einer Architektur kennen<br />
Herausforderungen<br />
Eine Aktivitäten angemessene <strong>Software</strong>-Architektur entwerfen können<br />
Die Ist-Analyse Änderbarkeit einer <strong>Software</strong>-Architektur bewerten können<br />
Erhebungstechniken<br />
Befragung<br />
Beobachtung<br />
Soll-Analyse: Prototyping<br />
Zusammenfassung der Techniken<br />
Anforderungsspezifikation<br />
Bedeutung<br />
Anzustrebende Eigenschaften<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 330 / 634
<strong>Software</strong>-Architektur<br />
Kontext<br />
Analyse<br />
Architektur<br />
Entwurf<br />
Datenstrukturen<br />
und Algorithmen<br />
Implemen−<br />
tierung<br />
Test<br />
Wartung<br />
& Evolution<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 331 / 634<br />
<strong>Software</strong>-Architektur<br />
Client-Server-Architektur: Dynamische Sicht<br />
1 : PDA Client<br />
queries<br />
queries<br />
2 : PDA Client<br />
: Shop Server<br />
queries<br />
n : PDA Client<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 336 / 634
<strong>Software</strong>-Architektur<br />
Client-Server-Architektur: Statische Sicht<br />
PDA Client Shop Server<br />
Schnittstelle<br />
<br />
send receive<br />
Network<br />
Stereotyp<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 337 / 634<br />
<strong>Software</strong>-Architektur<br />
Was ist Architektur?<br />
Architecture is the human organization of empty space using<br />
raw material.<br />
Richard Hooker, 1996.<br />
Definition<br />
<strong>Software</strong>-Architektur ist die grundlegende Organisation eines Systems<br />
verkörpert (IEEE P1471 2002)<br />
in seinen Komponenten,<br />
deren Beziehungen untereinander und zu der Umgebung<br />
und die Prinzipien, die den Entwurf und die Evolution leiten.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 338 / 634
<strong>Software</strong>-Architektur<br />
Bedeutung von <strong>Software</strong>-Architektur<br />
2009-02-09<br />
Kommunikation zwischen allen Interessenten<br />
hoher Abstraktionsgrad, der von vielen verstanden werden kann<br />
Frühe Entwurfsentscheidungen<br />
→ nachhaltige Auswirkungen<br />
→ frühzeitige Analyse<br />
Transferierbare Abstraktion des Systems<br />
→ eigenständig wiederverwendbar<br />
→ unterstützt Wiederverwendung im großen Stil (<strong>Software</strong>-Produktlinien)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 339 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Was ist <strong>Software</strong>-Architektur?<br />
Bedeutung von <strong>Software</strong>-Architektur<br />
Bedeutung von <strong>Software</strong>-Architektur<br />
Kommunikation zwischen allen Interessenten<br />
hoher Abstraktionsgrad, der von vielen verstanden werden kann<br />
Frühe Entwurfsentscheidungen<br />
→ nachhaltige Auswirkungen<br />
→ frühzeitige Analyse<br />
Transferierbare Abstraktion des Systems<br />
→ eigenständig wiederverwendbar<br />
→ unterstützt Wiederverwendung im großen Stil (<strong>Software</strong>-Produktlinien)<br />
Die <strong>Software</strong>architektur repräsentiert hohe Abstraktion eines Systems, die von den meisten Interessenten<br />
verstanden werden kann und damit eine Grundlage zum gegenseitigen Verständnis, zur Konsensbildung und zur<br />
Kommunikation darstellt.<br />
Die <strong>Software</strong>architektur ist die Manifestation früher Entwurfsentscheidungen; diese frühe Fixierung kann<br />
nachhaltige Auswirkungen haben auf die nachfolgende Entwicklung, Auslieferung sowie Wartung und Evolution. SA<br />
ist auch die früheste Systembeschreibung, die analysiert werden kann.<br />
Die <strong>Software</strong>architektur konstitutiert ein relativ kleines intellektuell fassbares Modell darüber, wie das System<br />
struktiert ist und wie seine Komponenten zusammenwirken; dieses Modell ist eigenständig nutzbar und kann über<br />
das spezifische System hinaus transferiert werden; insbesondere kann es für Systeme mit ähnlichen Eigenschaften<br />
und Anforderungen wiederverwendet werden, um so Wiederverwendung im großen Stil zu unterstützen (Stichwort:<br />
<strong>Software</strong>-Produktlinien).
<strong>Software</strong>-Architektur<br />
Beispielsystem IS2000 (Hofmeister u. a. 2000)<br />
IS2000<br />
Probe<br />
01<br />
01<br />
01<br />
01<br />
01<br />
01<br />
00000<br />
11111<br />
00000<br />
11111<br />
0000000000000<br />
111111111111100000<br />
11111<br />
Imaging<br />
Computer<br />
Remote Imaging<br />
Computers<br />
User Control<br />
Panel<br />
Network<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 340 / 634<br />
<strong>Software</strong>-Architektur<br />
Einflussfaktoren/Anliegen (Concerns)<br />
Einflussfaktoren<br />
Produktfunktionen und -attribute<br />
z.B. Performanz, Ansprüche an Zuverlässigkeit, Umfang und Stabilität<br />
der Anforderungen<br />
Organisation<br />
z.B. Budget, verfügbare Zeit, Team-Größe und -erfahrung<br />
Technologie<br />
z.B. verfügbare Hard- und <strong>Software</strong><br />
Keiner der Faktoren kann isoliert behandelt werden → globale Analyse.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 341 / 634
<strong>Software</strong>-Architektur<br />
Einflussfaktoren<br />
Anmerkung<br />
Ein Faktor ist nur dann relevant, wenn er Einfluss auf die Architektur hat.<br />
Test:<br />
Architektur A1 ergibt sich mit Betrachtung des Faktors<br />
Architektur A2 ergibt sich ohne Betrachtung des Faktors<br />
Nur wenn A1 und A2 sich unterscheiden, ist der Faktor relevant.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 342 / 634<br />
<strong>Software</strong>-Architektur<br />
Globale Analyse<br />
Organisatorische,und<br />
technologische Faktoren,<br />
Produktfaktoren<br />
Globale Analyse<br />
Analysiere Faktoren<br />
1. Identifiziere und beschreibe Faktoren<br />
2. Charaktersiere ihre Flexibilität und Änderbarkeit<br />
3. Analysiere ihre Auswirkungen<br />
Faktortabelle neue Faktoren<br />
Entwickle Strategien<br />
1. Identifiziere Probleme und Einflussfaktoren<br />
2. Entwickle Lösungen und spezifische Strategien<br />
3. Identifiziere verwandte Strategien<br />
neue Faktoren<br />
neue Probleme<br />
oder Strategien<br />
Problem−<br />
karten<br />
Einfluss<br />
Rückkopplung<br />
Blickwinkel<br />
Abschließende<br />
Entwurfsaufgabe<br />
Zentrale Entwurfs−<br />
aufgabe<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 343 / 634
<strong>Software</strong>-Architektur<br />
Globale Analyse: Analysiere Faktoren<br />
1. Identifiziere und beschreibe Faktoren<br />
Beispiele:<br />
Faktoren, die viele Komponenten betreffen<br />
Faktoren, die sich über die Zeit ändern<br />
Faktoren, die schwer zu erfüllen sind<br />
Faktoren, mit denen man wenig Erfahrung hat<br />
Umfang funktionaler Anforderungen<br />
Abgabetermin<br />
Stabilität der Hardware-Plattform<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 344 / 634<br />
<strong>Software</strong>-Architektur<br />
Globale Analyse: Analysiere Faktoren<br />
2.a Charakterisiere ihre Flexibilität<br />
Flexibilität<br />
Kann zu Beginn über Faktoren verhandelt werden mit Beteiligten<br />
(Manager, Marketingleute, Kunde, Benutzer etc.)?<br />
Relevante Fragen zur Flexibilität (am Beispiel Auslieferung der<br />
Funktionalität):<br />
Kann der Faktor beeinflusst oder geändert werden, so dass der<br />
Architekturentwurf vereinfacht werden kann?<br />
Auslieferung der Funktionalität ist verhandelbar. Weniger wichtige<br />
Funktionalität kann in späterem Release ausgeliefert werden.<br />
Wie kann man ihn beeinflussen?<br />
Nur nach rechtzeitiger Absprache mit dem Kunden.<br />
Zu welchem Grad kann man ihn beeinflussen?<br />
Der Kunde hat Mindestanforderungen, die erfüllt werden müssen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 345 / 634
<strong>Software</strong>-Architektur<br />
Globale Analyse: Analysiere Faktoren<br />
2.b Charakterisiere ihre Veränderlichkeit<br />
Veränderlichkeit<br />
Kann sich der Faktor während der Entwicklung ändern?<br />
Relevante Fragen (am Beispiel Auslieferung der Funktionalität):<br />
In welcher Weise kann sich der Faktor ändern?<br />
Prioritäten könnten sich ändern.<br />
Anforderungen könnten wegfallen, weil nicht mehr relevant.<br />
Anforderungen könnten hinzukommen, weil sich Rahmenbedingungen<br />
geändert haben.<br />
Wie wahrscheinlich ist die Änderung während und nach der<br />
Entwicklung?<br />
Moderat während der Entwicklung; sehr hoch danach.<br />
Wie oft wird er sich ändern?<br />
Alle 3 Monate.<br />
Wird der Faktor betroffen von Änderungen anderer Faktoren?<br />
Änderung technologischer Aspekte (<strong>Software</strong>-/Hardware-Plattform).<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 346 / 634<br />
<strong>Software</strong>-Architektur<br />
Globale Analyse: Analysiere Faktoren<br />
3. Analysiere die Auswirkungen der Änderung von Faktoren auf Architektur<br />
Auswirkungen<br />
Wenn sich der Faktor ändert, was würde davon betroffen und wie?<br />
Auswirkungen auf:<br />
Andere Faktoren<br />
Z.B. moderater Einfluss auf Einhaltung des Zeitplans und damit darauf,<br />
was zu welchem Zeitpunkt ausgeliefert werden kann<br />
Systemkomponenten<br />
Z.B. geplante Komponenten müssen überarbeitet werden;<br />
Komponenten können hinzu kommen oder wegfallen.<br />
Operationsmodi des Systems<br />
Andere Entwurfsentscheidungen<br />
. . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 347 / 634
<strong>Software</strong>-Architektur<br />
Faktortabelle zu organisatorischen Aspekten<br />
Faktor Flexibilität und<br />
Veränderlichkeit<br />
Auswirkung<br />
O1 : Entwicklungsplan<br />
O1.1 : Time-To-Market<br />
Auslieferung Keine Flexibilität Nicht alle Funktionen können<br />
Juli 2009<br />
implementiert werden<br />
O1.2 : Auslieferung von Produktfunktionen<br />
priorisierte Funktionen sind verhandelbar Die Reihenfolge bei der<br />
Funktionen<br />
Implementierung der<br />
Funktionen kann sich ändern<br />
O2 : Enwicklungsbudget<br />
O2.1 : Anzahl Entwickler<br />
5 Entwick- Keine neuen Entwickler Moderater Einfluss auf<br />
ler<br />
können eingestellt werden. Zeitplan; partielle<br />
Entwickler können (temporär)<br />
ausfallen.<br />
Implementierung droht<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 348 / 634<br />
<strong>Software</strong>-Architektur<br />
Weitere organisatorische Beispielfaktoren I<br />
O1: Management<br />
Selbst herstellen versus kaufen<br />
Zeitplan versus Funktionsumfang<br />
Umgebung<br />
Geschäftsziele<br />
O2: Personal: Fähigkeiten, Interessen, Stärken, Schwächen<br />
Anwendungsdomäne<br />
<strong>Software</strong>entwurf<br />
Spezielle Implementierungstechniken<br />
Spezielle Analysetechniken<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 349 / 634
<strong>Software</strong>-Architektur<br />
Weitere organisatorische Beispielfaktoren II<br />
O3: Prozess und Entwicklungsumgebung<br />
Entwicklungsplattform<br />
Entwicklungsprozess und -werkzeuge<br />
Prozesse und Werkzeuge des Konfigurationsmanagements<br />
Produktionsprozesse und -werkzeuge<br />
Testprozesse und -werkzeuge<br />
Releaseprozesse und -werkzeuge<br />
O4: Entwicklungszeitplan<br />
Time-To-Market<br />
Auslieferung der Produktfunktionen<br />
Release-Zeitplan<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 350 / 634<br />
<strong>Software</strong>-Architektur<br />
Weitere organisatorische Beispielfaktoren III<br />
O5: Entwicklungsbudget<br />
Anzahl Entwickler<br />
Kosten von Entwicklungswerkzeugen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 351 / 634
<strong>Software</strong>-Architektur<br />
Faktortabelle zu technischen Aspekten<br />
Faktor Flexibilität und<br />
Veränderlichkeit<br />
T2 : Domänenspezifische Hardware<br />
T2.1 : Aufzeichungs-Hardware<br />
Nimmt Signal auf. Neuere Versionen alle 3<br />
Jahre.<br />
T2.2 : Netzwerk<br />
Kommunikation<br />
zwischen Aufzeichnung<br />
und allgemeiner<br />
Hardware<br />
Neuere Versionen alle 4<br />
Jahre<br />
Auswirkung<br />
Großer Einfluss auf<br />
Aufzeichnungs- und<br />
Bildverarbeitungskomponenten<br />
Großer Einfluss auf<br />
Aufzeichnungs- und<br />
Bildverarbeitungskomponenten<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 352 / 634<br />
<strong>Software</strong>-Architektur<br />
Technische Beispielfaktoren I<br />
T1: Hardware<br />
Prozessoren<br />
Netzwerk<br />
Hauptspeicher<br />
Plattenspeicher<br />
domänenspezifische Hardware<br />
T2: <strong>Software</strong><br />
Betriebssystem<br />
Benutzerschnittstelle<br />
<strong>Software</strong>-Komponenten<br />
Implementierungssprache<br />
Entwurfsmuster<br />
Rahmenwerke<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 353 / 634
<strong>Software</strong>-Architektur<br />
Technische Beispielfaktoren II<br />
T3: Architekturtechnologie<br />
Architekturstile/-muster und -rahmenwerke<br />
Domänenspezifische Architekturen oder Referenzarchitekturen<br />
Architekturbeschreibungssprachen<br />
<strong>Software</strong>-Produktlinien-Technologien<br />
Werkzeuge zur Analyse und Validierung von Architekturen<br />
T4: Standards<br />
Schnittstelle zum Betriebssystem (z.B. Posix)<br />
Datenbanken (z.B. SQL)<br />
Datenformate<br />
Kommunikation (z.B. TCP/IP)<br />
Kodierrichtlinien<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 354 / 634<br />
<strong>Software</strong>-Architektur<br />
Faktortabelle zu Produktfaktoren<br />
Faktor Flexibilität und<br />
Veränderlichkeit<br />
Auswirkung<br />
P3 : Funktionale Eigenschaften<br />
P3.2 : Performanz der Aufzeichnung<br />
Performanz: Größe und Etwas flexibel. Große Auswirkung auf<br />
Anzahl von Bildern;<br />
alle Komponenten für<br />
Antwortszeit:<br />
Aufzeichnung,<br />
Ein-Ausgabe-Deadlines<br />
Bildverarbeitung,<br />
Speicherung und<br />
Betrachtung;<br />
Auswirkung variiert mit<br />
Performanztuning.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 355 / 634
<strong>Software</strong>-Architektur<br />
Beispielproduktfaktoren I<br />
P1: Produktfunktionen<br />
P2: Benutzerschnittstelle<br />
Interaktionsmodell<br />
Funktionen der Benutzerschnittstelle<br />
P3: Performanz<br />
Ausführungszeiten<br />
Speicherbedarf<br />
Dauer des Systemstarts und -endes<br />
Wiederherstellungszeit nach Fehlern<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 356 / 634<br />
<strong>Software</strong>-Architektur<br />
Beispielproduktfaktoren II<br />
P4: Verlässlichkeit<br />
Verfügbarkeit<br />
Zuverlässigkeit<br />
Sicherheit<br />
P5: Fehlererkennung, -bericht, -behandlung<br />
Fehlerklassifikation<br />
Fehlerprotokollierung<br />
Diagnostik<br />
Wiederherstellung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 357 / 634
<strong>Software</strong>-Architektur<br />
Beispielproduktfaktoren III<br />
P6: Service<br />
Service-Dienste (Konfigurations- und Wartungsdienste) für den<br />
Betrieb des System<br />
Installation und Aktualisierung<br />
Test der <strong>Software</strong><br />
Wartung und Erweiterung der Systemimplementierung<br />
P7: Produktkosten<br />
Hardwarebudget<br />
<strong>Software</strong>lizenzbudget (für verwendete <strong>Software</strong>)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 358 / 634<br />
<strong>Software</strong>-Architektur<br />
Globale Analyse: Entwickle Strategien I<br />
1. Identifiziere Probleme und deren Einflussfaktoren<br />
Analysiere Faktorentabelle:<br />
Grenzen oder Einschränkungen durch Faktoren<br />
Unverrückbarer Abgabetermin erlaubt keinen vollen Funktionsumfang<br />
Notwendigkeit, Auswirkung eines Faktors zu begrenzen<br />
Entwurf muss Portierbarkeit vorsehen<br />
Schwierigkeit, einen Produktfaktor zu erfüllen<br />
Speicher- und Prozessorbegrenzung erlaubt keine beliebig komplexen<br />
Algorithmen<br />
Notwendigkeit einer allgemeinen Lösung zu globalen Anforderungen<br />
wie Fehlerbehandlung und Wiederaufsetzen nach Fehlern<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 360 / 634
<strong>Software</strong>-Architektur<br />
Globale Analyse: Entwickle Strategien II<br />
2. Entwickle Lösungen und spezifische Strategien<br />
. . . für die Behandlung der Probleme, die sich implementieren lassen und<br />
die notwendige Änderbarkeit unterstützen.<br />
Strategie muss konsistent sein zu:<br />
Einflussfaktor,<br />
dessen Veränderlichkeit<br />
und dessen Interaktion mit anderen Faktoren.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 361 / 634<br />
<strong>Software</strong>-Architektur<br />
Globale Analyse: Entwickle Strategien III<br />
2. Entwickle Lösungen und spezifische Strategien<br />
Ziele:<br />
Reduzierung oder Kapselung des Faktoreinflusses<br />
Reduzierung der Auswirkung einer Änderung des Faktors auf den<br />
Entwurf und andere Faktoren<br />
Reduzierung oder Kapselung notwendiger Bereiche von<br />
Expertenwissen oder -fähigkeiten<br />
Reduzierung der Gesamtentwicklungsdauer und -kosten<br />
3. Identifiziere verwandte Strategien<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 362 / 634
<strong>Software</strong>-Architektur<br />
Globale Analyse: Entwickle Strategien IV<br />
Problemkarten (Issue Cards) beschreiben Problem und passende Strategien<br />
einmalig:<br />
Name des Problems<br />
Beschreibung des Problems<br />
Einflussfaktoren<br />
Liste aller Einflussfaktoren<br />
Lösung<br />
Diskussion einer allgemeinen Lösung<br />
Strategie: Name der Strategie A<br />
Erläuterung der Strategie A<br />
Strategie: Name der Strategie B<br />
Erläuterung der Strategie B<br />
. . .<br />
Verwandte Strategien<br />
Referenzen zu verwandten Strategien.<br />
Diskussion, in welcher Weise sie verwandt sind.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 363 / 634<br />
<strong>Software</strong>-Architektur<br />
Beispiele<br />
Ambitionierter Zeitplan<br />
Abgabetermin ist fix, Ressourcen sind begrenzt. Möglicherweise können<br />
nicht alle Produktfunktionen realisiert werden.<br />
Einflussfaktoren<br />
O1.1 : Time-To-Market<br />
O1.2 : Auslieferung von Produktfunktionen<br />
O2.1 : Anzahl Entwickler<br />
Lösung<br />
Strategie: Schrittweiser Ausbau<br />
System wird schrittweise ausgebaut. Anforderungen werden in der Reihenfolge<br />
ihrer Priorität realisiert.<br />
Strategie: Einkaufen statt Selbstentwickeln<br />
Einbindung externer COTS-Komponenten.<br />
Strategie: Wiederverwendung<br />
Einbindung interner wiederverwendbarer Komponenten.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 364 / 634
<strong>Software</strong>-Architektur<br />
Änderungen in allgemeiner und domänenspezifischer Hardware<br />
Regelmäßige Änderungen der Hardware; <strong>Software</strong> soll mit minimalen<br />
Aufwand an Änderungen angepasst werden können.<br />
Einflussfaktoren<br />
T1.1: Prozessoren werden leistungsfähiger.<br />
T2.1: Aufzeichnungs-Hardware ändert sich alle drei Jahre<br />
T2.2: Netzwerktechnologie ändert sich alle vier Jahre<br />
Lösung<br />
Strategie: Kapselung domänenspezifischer Hardware:<br />
Kapsle Details, die sich ändern können.<br />
Strategie: Kapselung allgemeiner Hardware:<br />
Kapsle Details, die sich ändern können.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 365 / 634<br />
<strong>Software</strong>-Architektur<br />
Betriebssystemanpassung<br />
Weiterentwicklung des Betriebssystems (BS) und Wechsel auf ein neues<br />
BS machen Anpassungen an betriebssystemspezifischen Komponenten<br />
notwendig. Für die Wartung steht nur ein Entwickler zur Verfügung. Die<br />
Anpassungen müssen schnell vorgenommen werden.<br />
Einflussfaktoren<br />
O1.1: Time-To-Market<br />
O2.1: Anzahl Entwickler<br />
T2.3: Betriebssystem<br />
Lösung<br />
Strategie: Kapselung der BS-abhängigen Anteile<br />
BS-abhängige Anteile werden in Komponenten isoliert. Diese bilden eine<br />
virtuelle Maschine für alle anderen Komponenten.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 366 / 634
<strong>Software</strong>-Architektur<br />
Gebäudearchitektur<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 367 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Architektursichten und -blickwinkel<br />
Gebäudearchitektur<br />
Gebäudearchitektur<br />
In der Gebäudearchitektur ist es üblich, von einem zu bauenden Gebäude verschiedene Modelle zu erstellen, bevor<br />
das Gebäude tatsächlich gebaut wird. Teilweise werden die Modelle als Prototypen benutzt, um dem zukünftigen<br />
Hausbesitzer einen Eindruck von der Ästhetik oder Funktion zu vermitteln. Teilweise sind die Modelle Pläne, wie es<br />
nachher tatsächlich werden soll. Es wird dabei stets eine Vielzahl unterschiedlicher Modelle erstellt, die jeweils<br />
bestimmte Aspekte betonen und von anderen abstrahieren. Der Grund liegt daran, dass unterschiedliche Personen,<br />
die am Gebäudebau beteiligt sind, das Gebäude aus unterschiedlichen Perspektiven betrachten wollen. Der spätere<br />
Besitzer interessiert sich für das Gesamterscheinungsbild, der Maurer für den Gebäuderahmen und der Elektriker für<br />
Kabelschächte, Steckdosen, Schalter etc. Das Prinzip, Unterschiedliches auseinander zu halten, ist in der<br />
<strong>Software</strong>technik als Separation of Concerns bekannt: die Trennung unterschiedlicher Belange. Dieses Prinzip wird<br />
auch beim <strong>Software</strong>architekturentwurf angewandt. Man nennt diese unterschiedlichen Baupläne oft Sichten der<br />
Architektur.<br />
Während sich in der Gebäudearchitektur über viele Jahre feste Normen zu Bauzeichnungen, das heißt,<br />
Architektursichten, etabliert haben, stehen wir in der <strong>Software</strong>technik noch ganz am Anfang einer Entwicklung hin<br />
zu normierten Architektursichten. Ein erster Meilenstand auf diesem Weg ist der IEEE-Standard IEEE P1471<br />
(2002) Recommended Practice for Architectural Description of <strong>Software</strong>-intensive Systems. Er stellt Richtlinien auf,<br />
wie man Sichten der <strong>Software</strong>architektur beschreiben soll. Da aber noch Uneinigkeit herrscht, welche Sichten der<br />
<strong>Software</strong>architektur überhaupt relevant sind, legt er uns nicht auf eine feste Menge solcher Sichten fest. Er geht<br />
viel mehr einen indirekten Weg. Er überlässt es uns, zu entscheiden, welche Sichten wir beschreiben wollen, fordert<br />
aber, dass für alle unsere Sichten definiert ist, was sie bedeuten.
<strong>Software</strong>-Architektur<br />
Architektursichten und -blickwinkel<br />
Definition<br />
Architektursicht (View): Repräsentation eines ganzen Systems aus der<br />
Perspektive einer kohärenten Menge von Anliegen (IEEE P1471 2002).<br />
Definition<br />
Architekturblickwinkel (Viewpoint): Spezifikation der Regeln und<br />
Konventionen, um eine Architektursicht zu konstruieren und zu<br />
benutzen (IEEE P1471 2002).<br />
Ein Blickwinkel ist ein Muster oder eine Vorlage, von der aus individuelle<br />
Sichten entwickelt werden können, durch Festlegung von<br />
Zweck,<br />
adressierte Betrachter<br />
und Techniken für Erstellung, Gebrauch und Analyse.<br />
Unterschiedliche Sichten helfen der Strukturierung: Separation of<br />
Concerns.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 368 / 634<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Architektursichten und -blickwinkel<br />
Architektursichten und -blickwinkel<br />
Architektursichten und -blickwinkel<br />
Definition<br />
Architektursicht (View): Repräsentation eines ganzen Systems aus der<br />
Perspektive einer kohärenten Menge von Anliegen (IEEE P1471 2002).<br />
Definition<br />
Architekturblickwinkel (Viewpoint): Spezifikation der Regeln und<br />
Konventionen, um eine Architektursicht zu konstruieren und zu<br />
benutzen (IEEE P1471 2002).<br />
Ein Blickwinkel ist ein Muster oder eine Vorlage, von der aus individuelle<br />
Sichten entwickelt werden können, durch Festlegung von<br />
Zweck,<br />
adressierte Betrachter<br />
und Techniken für Erstellung, Gebrauch und Analyse.<br />
Unterschiedliche Sichten helfen der Strukturierung: Separation of<br />
Concerns.<br />
Dazu führt der Standard eine Trennung von konkretem Inhalt und Bedeutung einer Sicht ein. Eine Architektursicht<br />
(im Englischen: View) ist die Repräsentation eines ganzen Systems aus der Perspektive einer kohärenten Menge von<br />
Anliegen (IEEE P1471 2002). Eine Architektursicht beschreibt also immer ein bestimmtes System, im Sinne der<br />
Gebäudearchitektur ist das also zum Beispiel die Facadenansicht des neuen Bürogebäudes in der <strong>Universität</strong>sallee<br />
15. In der <strong>Software</strong> ist die Beschreibung der Klassen und ihrer Abhängigkeiten der Banksoftware PayMe der Version<br />
1.3 in Form eines Klassendiagramms eine Architektursicht. Damit man ein Klassendiagramme jedoch verstehen<br />
kann, muss beschrieben sein, welche Konstrukte in solch einem Diagramm auftauchen dürfen, was sie bedeuten und<br />
wie sie kombiniert werden können. Während das Klassendiagramm für PayMe spezifisch und damit nur für PayMe<br />
relevant ist, ist die Beschreibung, wie Klassendiagrammme an sich aussehen können und was sie bedeuten,<br />
übergreifend gültig für alle denkbaren Klassendiagramme unabhängig von den Systemen, die sie beschreiben.<br />
Für die Beschreibung aller möglichen Klassendiagramme führt der IEEE-Standard den Begriff<br />
Architekturblickwinkel (im Englischen: Viewpoint) ein. Ein Architekturblickwinkel (Viewpoint) ist die Spezifikation<br />
der Regeln und Konventionen, um eine Architektursicht zu konstruieren und zu benutzen (IEEE P1471 2002). Ein<br />
Blickwinkel ist ein Muster oder eine Vorlage, von der aus individuelle Sichten entwickelt werden können, durch<br />
Festlegung des Zwecks, der adressierten Betrachter und der Techniken für die Erstellung, den Gebrauch und die<br />
Analyse aller Sichten, die durch den Blickwinkel spezifiziert werden.<br />
Diese Trennung zwischen Sicht und Blickwinkel ist der eigentlich bedeutende Beitrag des genannten Standards.<br />
Das heißt für uns, wenn wir eine Architektur durch eine Sicht beschreiben wollen, müssen wir zunächst in Form des<br />
Blickwinkels die Bedeutung der Sicht spezifizieren.
<strong>Software</strong>-Architektur<br />
Siemens-Blickwinkel (Hofmeister u. a. 2000)<br />
2009-02-09<br />
Konzeptioneller Blickwinkel: beschreibt logische Struktur des<br />
Systems; abstrahiert weitgehend von technologischen Details<br />
Modulblickwinkel: beschreibt die statische logische Struktur des<br />
Systems<br />
Ausführungsblickwinkel: beschreibt die dynamische logische<br />
Struktur des Systems<br />
Code-Blickwinkel: beschreibt die ” anfassbaren“ Elemente des<br />
Systems (Quelldateien, Bibliotheken, ausführbare Dateien etc.)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 369 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Architektursichten und -blickwinkel<br />
Siemens-Blickwinkel (Hofmeister u. a. 2000)<br />
Siemens-Blickwinkel (Hofmeister u. a. 2000)<br />
Konzeptioneller Blickwinkel: beschreibt logische Struktur des<br />
Systems; abstrahiert weitgehend von technologischen Details<br />
Modulblickwinkel: beschreibt die statische logische Struktur des<br />
Systems<br />
Ausführungsblickwinkel: beschreibt die dynamische logische<br />
Struktur des Systems<br />
Code-Blickwinkel: beschreibt die ” anfassbaren“ Elemente des<br />
Systems (Quelldateien, Bibliotheken, ausführbare Dateien etc.)<br />
In der Literatur wurden sehr viele unterschiedliche Blickwinkel zur Beschreibung von <strong>Software</strong>architektur<br />
vorgeschlagen. Zachman (1987); Sowa und Zachman (1992); Zachman (1999) war einer der ersten Autoren, der<br />
Blickwinkel vorgeschlagen hat. Er schlug vor, Informationssysteme durch 6 × 6 verschiedene Blickwinkel zu<br />
beschreiben. Perry und Wolf (1992) haben mehrere Blickwinkel von Zachman zusammen gefasst und die Anzahl<br />
der Blickwinkel damit auf drei reduziert, die letzten Endes aber äquivalent sind und lediglich unterschiedliche<br />
Aspekte hervor heben. Von Kruchten (1995) stammen die 4+1-Blickwinkel. Dazu gehören der logische Blickwinkel,<br />
der das System abstrakt und anwendungsnah beschreibt, der Prozessblickwinkel, der die dynamische Ausführung<br />
beschreibt sowie der statische Entwicklungsblickwinkel und der physikalische Blickwinkel, der das System in die<br />
Hardware einbettet. Diese vier Blickwinkel werden zusammen gehalten durch einen redundanten Blickwinkel, der<br />
mittels Anwendungsszenarien beschreibt, wie die vier anderen Blickwinkel zusammen spielen.<br />
Die unterschiedlichen Blickwinkel in der Literatur sind verwirrend, zumal sehr viele Blickwinkel unterschiedlicher<br />
Autoren sehr ähnlich sind. Etwas Ordnung hat hier das Buch von (Clements u. a. 2002) geschaffen, in dem<br />
Kategorien von Blickwinkeln beschrieben sind. Dieses Buch ist auch zu empfehlen für die Frage, wie man<br />
<strong>Software</strong>architektur dokumentiert.<br />
Immerhin ist festzuhalten, dass viele der Blickwinkel sich auch auf die vier Siemens-Blickwinkel abbilden lassen<br />
(Hofmeister u. a. 2000). Es scheint, als ob mindestens die folgenden Aspekte zur Beschreibung eines Systems<br />
notwendig sind, die durch die vier Siemens-Blickwinkel abgedeckt werden:<br />
• Konzeptioneller Blickwinkel: beschreibt die logische Struktur des Systems. Er abstrahiert weitgehend von<br />
technologischen Details wie z.B. konkrete Technologien, mit denen das System implementiert wird. Dieser Blickwinkel<br />
ist der Anwendungsdomäne am nächsten.<br />
• Modulblickwinkel: beschreibt die statische logische Struktur des Systems in Form von Modulen und ihren<br />
Abhängigkeiten.<br />
• Ausführungsblickwinkel: beschreibt die dynamische logische Struktur des Systems, das heißt, die Ausführung und<br />
Einbettung in die ausführende Hardware.<br />
• Code-Blickwinkel: beschreibt die ” anfassbaren“ Elemente des Systems (Quelldateien, Bibliotheken, ausführbare Dateien<br />
etc.).<br />
Die vier Siemens-Blickwinkel wurden durch Befragung praktizierender <strong>Software</strong>architekten bei Siemens ermittelt,
<strong>Software</strong>-Architektur<br />
Siemens-Blickwinkel (Hofmeister u. a. 2000)<br />
2009-02-09<br />
<strong>Software</strong>−Architektur<br />
Konzeptioneller Blickwinkel<br />
Komponenten<br />
Konnektoren<br />
Konfiguration<br />
Module<br />
Subsysteme<br />
Schichten<br />
Modulblickwinkel<br />
Modul−<br />
beschränkungen<br />
neue<br />
Modula−<br />
risierung<br />
Code−Blickwinkel<br />
Quell−Code<br />
Komponenten<br />
Konnektoren<br />
Konfiguration<br />
Laufzeit−<br />
beschränk−<br />
ungen<br />
Module<br />
neue<br />
Modula−<br />
risierung<br />
Laufzeit−<br />
elemente<br />
Änderungen<br />
an Laufzeit−<br />
elementen<br />
Ausführungsblickwinkel<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 370 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Architektursichten und -blickwinkel<br />
Siemens-Blickwinkel (Hofmeister u. a. 2000)<br />
Siemens-Blickwinkel (Hofmeister u. a. 2000)<br />
<strong>Software</strong>−Architektur<br />
Konzeptioneller Blickwinkel<br />
Komponenten<br />
Konnektoren<br />
Konfiguration<br />
Module<br />
Subsysteme<br />
Schichten<br />
Modulblickwinkel<br />
Modul−<br />
beschränkungen<br />
neue<br />
Modula−<br />
risierung<br />
Code−Blickwinkel<br />
Quell−Code<br />
Komponenten<br />
Konnektoren<br />
Konfiguration<br />
Laufzeit−<br />
beschränk−<br />
ungen<br />
Module<br />
neue<br />
Modula−<br />
risierung<br />
Laufzeit−<br />
elemente<br />
Änderungen<br />
an Laufzeit−<br />
elementen<br />
In der Methode von Hofmeister u. a. (2000) sind diese vier Blickwinkel der Gegenstand des Entwurfes. Die<br />
<strong>Software</strong>architektur wird entworfen, indem Sichten zu diesen vier Blickwinkeln erstellt werden.<br />
Wir werden im Folgenden näher auf diese Blickwinkel eingehen, indem wir sie im Kontext der Hofmeister-Methode<br />
beschreiben.<br />
Ausführungsblickwinkel<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung
<strong>Software</strong>-Architektur<br />
2009-02-09<br />
Organisatorische,und<br />
technologische Faktoren,<br />
Produktfaktoren<br />
Konzeptioneller Blickwinkel<br />
Globale Analyse<br />
− Faktoren<br />
− Strategien<br />
Zentrale Entwurfs−<br />
aufgabe<br />
− Komponenten<br />
− Konnektoren<br />
− Konfiguration<br />
globale Evaluation<br />
Modulblickwinkel<br />
Code−Blickwinkel<br />
Quell−Code<br />
Abschließende<br />
Entwurfsaufgabe<br />
− Ressourcenbudget<br />
Ausführungsblickwinkel<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 371 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Organisatorische,und<br />
technologische Faktoren,<br />
Produktfaktoren<br />
Konzeptioneller Blickwinkel<br />
Globale Analyse<br />
− Faktoren<br />
− Strategien<br />
Zentrale Entwurfs−<br />
aufgabe<br />
− Komponenten<br />
− Konnektoren<br />
− Konfiguration<br />
globale Evaluation<br />
Modulblickwinkel<br />
Code−Blickwinkel<br />
Quell−Code<br />
Abschließende<br />
Entwurfsaufgabe<br />
− Ressourcenbudget<br />
Der Ausgangspunkt des Architekturentwurfes ist der konzeptionelle Blickwinkel. Mit Hilfe dieses Blickwinkels wird<br />
die logische Struktur der angestrebten Architektur beschrieben. Ähnlich wie beim Datenbankentwurf, wo wir<br />
zunächst von einem konzeptionelle Schema ausgehen, das die Daten beschreibt so wie sie in der<br />
Anwendungsdomäne sind. Es handelt sich noch nicht um den Entwurf einer konkreten Datenbank für das<br />
Anwendungsproblem, der ja letztlich stark von der verwendeten Technologie abhängt. In der Gebäudearchitektur<br />
gleicht der logische Blickwinkel, den ersten Skizzen, die der Architekt von dem späteren Haus macht. Dabei will er<br />
den Kopf noch frei haben von Detailentscheidungen, welche Heizung eingebaut wird etc.<br />
Ausgehend von der globalen Analyse der Einflussfaktoren, entwirft der <strong>Software</strong>architekt die Hauptkomponenten<br />
und -konnektoren des Systems. Eine Komponente ist eine Berechnungseinheit oder eine Einheit, die Daten<br />
speichert. Dabei geht es nicht um einzelne Klassen oder gar spezifischen Algorithmen und Datenstrukturen,<br />
sondern um die grobe Verteilung der Zuständigkeiten in einem System auf größere Bausteine. Wie umfangreich so<br />
ein Baustein ausfällt, hängt von der Größe des Systems ab. Je größer das System, desto größer werden die<br />
Komponenten initial ausfallen. Große Komponenten können dann später verfeinert werden. Ein Beispiel für eine<br />
Komponente in einem größeren System ist etwa eine Datenbank, in einer Client-Server-Architektur wären sowohl<br />
Client als auch Server erste Komponenten.<br />
Komponenten interagieren miteinander, um eine gemeinsame Aufgabe zu erfüllen. Hierzu sind sie über so genannte<br />
Konnektoren verbunden. Ein Konnektor stellt den Kontroll- und Datenfluss zwischen Komponenten dar. Primitive<br />
Konnektoren sind Methodenaufrufe, Parameterübergabe und Zugriffe auf Attribute. Komplexere Konnektoren sind<br />
beispielsweise Mechanismen zur Interprozesskommunikation.<br />
Die Verbindung der Komponenten durch Konnektoren ergibt die Konfiguration. Ist eine Konfiguration entstanden,<br />
kann sie durch ein Review begutachtet werden. Ein Evaluationskriterium ist zum Beispiel, ob die Komponenten und<br />
Konnektoren alle geforderten Anwendungsfälle auch tatsächlich unterstützen. Hierzu kann man auf dem Papier<br />
überlegen, was die Komponenten und Konnektoren alles machen würden für jeden einzelnen Anwendungsfall.<br />
Abschließend werden noch die Ressourcen für Komponenten und Konnektoren eingeplant, also wie viel Speicher<br />
und Rechenzeit Komponenten und Konnektoren zuerkannt bekommen.<br />
Ausführungsblickwinkel<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)<br />
ist der Anwendungsdomäne am nächsten<br />
Systemfunktionalität wird abgebildet auf<br />
Konzeptionelle Komponenten: rechenbetonte Elemente oder<br />
Datenhaltung<br />
Konnektoren: Kontroll- und Datenfluss zwischen konzeptionellen<br />
Komponenten<br />
Engineering-Belange:<br />
2009-02-09<br />
Wie erfüllt das System seine Anforderungen?<br />
Wie werden Commercial-off-the-Shelf-Components (COTS) in das<br />
System integriert?<br />
Wie wird domänenspezifische Soft- und Hardware einbezogen?<br />
Wie kann die Auswirkung von Anforderungen oder der<br />
Anwendungsdomäne minimiert werden?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 372 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)<br />
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)<br />
ist der Anwendungsdomäne am nächsten<br />
Systemfunktionalität wird abgebildet auf<br />
Konzeptionelle Komponenten: rechenbetonte Elemente oder<br />
Datenhaltung<br />
Konnektoren: Kontroll- und Datenfluss zwischen konzeptionellen<br />
Komponenten<br />
Engineering-Belange:<br />
Wie erfüllt das System seine Anforderungen?<br />
Wie werden Commercial-off-the-Shelf-Components (COTS) in das<br />
System integriert?<br />
Wie wird domänenspezifische Soft- und Hardware einbezogen?<br />
Wie kann die Auswirkung von Anforderungen oder der<br />
Anwendungsdomäne minimiert werden?<br />
Wie gesagt, steckt hinter der Aufteilung in Blickwinkel das Prinzip der Trennung unterschiedlicher Belange. Welche<br />
Belange adressiert der konzeptionelle Blickwinkel also? Es geht dabei um die folgenden Fragen:<br />
• Wie erfüllt das System seine Anforderungen?<br />
• Wie werden Commercial-off-the-Shelf-Components (COTS) in das System integriert, falls dies geplant ist?<br />
• Wie wird domänenspezifische Soft- und Hardware einbezogen?<br />
• Wie kann die Auswirkung von Anforderungen oder der Anwendungsdomäne minimiert werden? Idealerweise sollte man<br />
nur eine Komponente anfassen müssen, wenn sich eine neue Anforderung aus der Anwendungsdomäne ergibt. Dazu<br />
muss man jedoch die möglichen Änderungen vorwegsehen und die Architektur entsprechend so entwerfen, dass es leicht<br />
fallen wird, die zukünftige Anforderung zu realisieren.
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)<br />
2009-02-09<br />
*<br />
CComponent<br />
cbinding<br />
*<br />
*<br />
*<br />
CPort<br />
Conceptual Configuration<br />
* connection *<br />
obeys<br />
1<br />
*<br />
0..1<br />
CConnector<br />
0..1 0..1 0..1 * 0..1<br />
0..1<br />
CRole<br />
* *<br />
obeys<br />
Protocol<br />
1 1 conjugate<br />
1<br />
*<br />
*<br />
cbinding<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 373 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)<br />
*<br />
*<br />
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)<br />
*<br />
*<br />
CComponent<br />
Conceptual Configuration<br />
1<br />
*<br />
CConnector<br />
0..1 0..1 0..1 * 0..1<br />
0..1<br />
cbinding<br />
cbinding<br />
*<br />
*<br />
*<br />
CPort<br />
* connection *<br />
CRole<br />
*<br />
* *<br />
0..1<br />
obeys<br />
obeys<br />
Protocol<br />
1 1 conjugate<br />
Nachdem wir nun die Rolle und den Zweck des konzeptionellen Blickwinkels kennen, betrachten wir näher, wie eine<br />
konzeptionelle Sicht aufgebaut sein kann. Wir wenden uns also der Frage zu, wie der logische Blickwinkel eigentlich<br />
aussieht.<br />
Wir haben bereits über die prinzipiellen Modellierungselemente gesprochen: Komponenten, Konnektoren und die<br />
Art und Weise, wie sie in einer Konfiguration angeordnet werden.<br />
Das folgende Diagramm in UML beschreibt den logischen Blickwinkel genauer:<br />
*<br />
CComponent<br />
cbinding<br />
*<br />
*<br />
*<br />
CPort<br />
Conceptual Configuration<br />
* connection *<br />
obeys<br />
1<br />
*<br />
CConnector<br />
0..1 0..1 0..1 * 0..1<br />
0..1<br />
0..1<br />
CRole<br />
* *<br />
obeys<br />
Protocol<br />
1 1 conjugate<br />
1<br />
*<br />
*<br />
cbinding<br />
Wie wir sehen, besteht eine Konfiguration aus einer Menge von Komponenten und Konnektoren. Sowohl<br />
Komponenten als auch Konnektoren können verfeinert werden, was die Komposition andeutet. Wenn eine<br />
Komponente verfeinert wird in Teilkomponenten, müssen diese selbstverständlich auch über Konnektoren wieder<br />
verbunden werden. Aus diesem Grunde ist auch die Komposition zwischen Konnektoren und Komponenten<br />
zwingend notwendig. Ähnliches gilt für die Verfeinerung von Komponenten. Hiermit können wir beschreiben, wie<br />
ein Konnektor durch Teilkomponenten und deren Konnektoren implementiert wird.<br />
*<br />
*<br />
1<br />
*<br />
*
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)<br />
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)<br />
*<br />
*<br />
CComponent<br />
Conceptual Configuration<br />
1<br />
*<br />
CConnector<br />
0..1 0..1 0..1 * 0..1<br />
0..1<br />
cbinding<br />
cbinding<br />
*<br />
*<br />
*<br />
CPort<br />
* connection *<br />
CRole<br />
*<br />
* *<br />
0..1<br />
obeys<br />
obeys<br />
Protocol<br />
1 1 conjugate<br />
Zur Verbindung von Komponenten und Konnektoren existieren entsprechende Beschreibungselemente: Anschlüsse<br />
(Ports) und Rollen (Roles). Ein Anschluss (Port) ist ein Teil der Komponente. Das Pendant hierzu für Konnektoren<br />
ist die Rolle (Role). Wenn wir also beispielsweise eine Kommunikation zwischen einem Client und einem Server<br />
beschreiben wollen, dann werden diese zwei Komponenten über einen Konnektor für die Interprozesskommunikation<br />
verbunden, wie im oberen Teil der folgenden Grafik dargestellt:<br />
Die Kommunikation dient dem Datenaustausch, deshalb wird hierfür ein Query-Konnektor verwendet, der für<br />
Anfragen an Server gedacht ist. UML-Stereotypen beschreiben die Diagrammelemente. Die Stereotypen<br />
entstammen dem konzeptionellen Blickwinkel.<br />
<strong>Software</strong>-Architektur<br />
Komponenten und Konnektoren<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 374 / 634<br />
1<br />
*<br />
*
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Komponenten und Konnektoren<br />
Komponenten und Konnektoren<br />
Eine solche Kommunikation ist im Falle einer Client-Server-Architektur asymmetrisch, das heißt, der Konnektor<br />
wird unterschiedlich benutzt von den Komponenten. Während der Server am Konnektor auf eingehende Anfragen<br />
wartet und diese dann beantwortet, ergreift der Client die Initiative und schickt dem Server seine Anfragen. Der<br />
Query-Konnektor für die Interprozesskommunikation hat also eine Rolle für den Client und eine für den Server. Der<br />
Teil der Komponente, der die jeweilige Rolle, die durch einen Konnektor vorgegeben wird, anspricht ist der Port.<br />
Angenommen der Query-Konnektor wird durch später durch Remote Method Invocation (RMI) in Java<br />
implementiert, dann kann man sich den Port konkret vorstellen als der Code in der Komponente, der den<br />
RMI-Aufruf absetzt.<br />
Konnektoren beschreiben Kontroll- und/oder Datenfluss. Man kann entweder auf die allgemeinen Databeziehungsweise<br />
Control-Konnektoren zurück greifen oder aber sich seine eigenen Konnektoren definieren. In der<br />
zweiten Zeile des Diagramms sehen wir zum Beispiel einen allgemeinen Data-Konnektor für den Datenaustausch<br />
zwischen einem Produzenten und Konsumenten und in der dritten Zeile einen Control-Konnektor, der einen<br />
Observer benachrichtigt, wann immer sich eine observierte Komponenten in ihrem Zustand ändert. Die letzte Zeile<br />
beschreibt einen selbst definierten Konnektor für den Datenaustausch über eine Pipe, wie das zum Beispiel in Unix<br />
unterstützt wird.<br />
Die Verbindung von Komponenten und Konnektoren ist bislang rein strukturell dargestellt. Das bisher Gesagte<br />
beschreibt nur, dass Komponenten und Konnektoren interagieren, aber nicht wie. Wie eine Interaktion aussieht,<br />
wird durch ein Protokoll beschrieben, also etwa die Reihenfolge, in der Operationen ausgeführt werden. Der Port<br />
einer Komponente hat ein Protokoll, ebenso erwartet der Konnektor für eine Rolle eine vorgegeben<br />
Verwendungsweise, hat also auch ein Protokoll. Diese beiden Protokoll müssen selbstverständlich kompatibel sein.<br />
Zu der Bedeutung und den Einschränkungen von cbinding kommen wir später noch.<br />
<strong>Software</strong>-Architektur<br />
Strategie<br />
Lege externe Schnittstellen fest.<br />
probeCommands<br />
probeData<br />
:IS2000<br />
networkAccess<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 376 / 634<br />
userAcqControl userAcqDisplay userImageExport
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Strategie<br />
Lege externe Schnittstellen fest.<br />
Wir illustrieren nun an unserem laufenden Beispiel, wie die Hofmeister-Methode eine konzeptionellen Sicht entwirft.<br />
Ausgangspunkt sind die Strategien, die wir in der globalen Analyse aufgestellt haben, um mit Entwurfskonflikten<br />
umzugehen. Sie werden nun eingesetzt.<br />
Wir beschreiben den Entwurfsprozess top-down, das heißt, wir beginnen im Folgenden mit dem System als eine<br />
große Komponente und verfeinern sie weiter. Das ist ein gängiges Vorgehen. Sollen aber existierende Komponenten<br />
wiederverwendet werden, dann kombiniert man den Top-Down-Ansatz mit einem Bottom-Up-Vorgehen. Letzterer<br />
geht von den existierenden Komponenten aus und baut sie zu einem größeren Ganzen sukzessive zusammen. In der<br />
Kombination entwirft man sowohl top-down als auch bottum-up und versucht, die beiden Entwurfsrichtungen<br />
aufeinander zuzuführen. Beim reinen Top-Down-Vorgehen kann es dazu kommen, dass existierende Komponenten<br />
nicht wiederverwendet werden, weil sie nicht das Gefüge passen; außerdem können redundante Komponenten<br />
entstehen. Erfahrene Architekten beherrschen beide Richtungen.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
probeCommands<br />
probeData<br />
:IS2000<br />
Strategie<br />
Lege externe Schnittstellen fest.<br />
Wir beginnen hier also zunächst mit dem System als eine einzige Komponente. In der Anforderungsanalyse haben<br />
wir uns bereits damit auseinander gesetzt, welche Schnittstellen nach außen das System bieten muss. Diese werden<br />
nun eingezogen. Es ergibt sich das folgende Bild:<br />
probeCommands<br />
probeData<br />
:IS2000<br />
networkAccess<br />
Die schwarzen Kästchen am Rande der Komponente sind ihre Ports, das heißt, ihre Schnittstellen nach außen.<br />
userAcqControl userAcqDisplay userImageExport<br />
probeCommands<br />
probeData<br />
:IS2000<br />
networkAccess<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport<br />
userAcqControl userAcqDisplay userImageExport
<strong>Software</strong>-Architektur<br />
Strategie<br />
Führe Komponenten für Aufzeichnung, Bearbeitung und Export ein.<br />
2009-02-09<br />
probeCommands<br />
probeData<br />
:IS2000<br />
receiver sender<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Imaging<br />
:Data<br />
:Exporting<br />
networkAccess<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 377 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
userAcqControl userAcqDisplay userImageExport<br />
Strategie<br />
Führe Komponenten für Aufzeichnung, Bearbeitung und Export ein.<br />
Nun führen wir Komponenten für Aufzeichnung, Bearbeitung und Export ein. Diese Aufteilung folgt dem<br />
EVA-Prinzip (Eingabe/Verarbeitung/Ausgabe) und stellt eine Umsetzung des Strategie Separation of Concern dar.<br />
Die inneren Komponenten werden über innere Konnektoren verbunden. Hier gilt die Regel, dass eine Verbindung<br />
zwischen einem Port und einer Rolle nur möglich ist, wenn die zugehörigen Komponenten und Konnektoren im<br />
selben anderen Element (Komponente oder Konnektor) enthalten sind. Mit anderen Worten, die Verbindung kann<br />
keine Abstraktionsebene durchqueren. Wir stellen fest, dass die Komponenten und Konnektoren wie gefordert Teil<br />
der selben Komponente sind. Damit ist das Diagramm in diesem Punkt wohlgeformt.<br />
probeCommands<br />
probeData<br />
:IS2000<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Imaging<br />
:Data<br />
:Exporting<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport<br />
probeCommands<br />
probeData<br />
:IS2000<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Data<br />
:Imaging<br />
:Exporting<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Strategie<br />
Führe Komponenten für Aufzeichnung, Bearbeitung und Export ein.<br />
Wir erkennen des Weiteren eine Verbindung zwischen zwei Ports und zwar von den inneren Komponenten zu den<br />
Ports der umgebenden Komponente. Dies sind die so genannten CBindings, auf die wir bislang noch nicht<br />
eingegangen sind. Sie dienen dazu, darzustellen wie die äußeren Ports auf die inneren Ports beziehungsweise die<br />
äußeren Rollen auf die inneren Rollen abgebildet werden, stellen also den Kontext der äußeren Schnittstellen zum<br />
inneren Aufbau her. Hier ist die Regel, dass ein CBinding von einem inneren Ports nur zu einem Port der<br />
unmittelbar umschließenden Komponente verlaufen darf. Entsprechendes gilt für ein CBinding zwischen Rollen. Das<br />
Diagramm hält sich auch an diese Regel.<br />
<strong>Software</strong>-Architektur<br />
Strategie<br />
Kapselung domänenspezifischer Hardware.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
receiver sender<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
receiver sender<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Imaging<br />
:Data<br />
:Exporting<br />
probeCommands<br />
probeData<br />
:IS2000<br />
networkAccess<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 378 / 634<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Data<br />
:Imaging<br />
userAcqControl userAcqDisplay userImageExport<br />
:Exporting<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Strategie<br />
Kapselung domänenspezifischer Hardware.<br />
Im nächsten Schritt wenden wir die Strategie der Kapselung domänenspezifischer Hardware an, damit wir vor<br />
Änderungen dieser Hardware weitgehend geschützt sind. Dazu führen wir zwei weitere Teilkomponenten ein, die<br />
von den Eigenschaften der Eingabe-Hardware abstrahieren, die sich ändern können. Diese beiden Komponenten<br />
stellen Gerätetreiber dar.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Imaging<br />
:Data<br />
:Exporting<br />
networkAccess<br />
Wir erkennen in diesem Diagramm, wie die Anschlussbindung der innersten Komponenten zu den äußersten<br />
Systemschnittstellen von IS2000 über zwei Ebenen hinweg erfolgt.<br />
<strong>Software</strong>-Architektur<br />
Strategie<br />
Entkopple Interaktionsmodell.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
receiver sender<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
receiver sender<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Imaging<br />
:Data<br />
userAcqControl userAcqDisplay userImageExport<br />
:Exporting<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
:Acquire<br />
:Monitor<br />
networkAccess<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 379 / 634<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Data<br />
:Imaging<br />
userAcqControl userAcqDisplay userImageExport<br />
:Exporting<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Strategie<br />
Entkopple Interaktionsmodell.<br />
Um auch gefeit zu sein gegen Änderungen in der Art und Weise, wie mit dem Benutzer interaktiv kommuniziert<br />
wird, führen wir analog zu den Gerätetreibern eigene Teilkomponenten ein, die von Eingabe beziehungsweise<br />
Ausgabe von und zum Benutzer abstrahieren. Wir wenden damit eine Strategie zur Entkopplung des<br />
Interaktionsmodells an.<br />
<strong>Software</strong>-Architektur<br />
Strategie<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Imaging<br />
:Data<br />
:Exporting<br />
Separiere nach Anliegen: Separation of Concern.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
receiver sender<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
:Acquire<br />
:Monitor<br />
networkAccess<br />
receiver sender<br />
receiver sender<br />
:Control :Control<br />
receiver sender<br />
:Control<br />
:Acquisition<br />
Management<br />
source dest<br />
:Imaging<br />
:Data<br />
userAcqControl userAcqDisplay userImageExport<br />
:Exporting<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
:Acquisition<br />
:Acquire<br />
:Monitor<br />
networkAccess<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 380 / 634<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
source dest<br />
:Data<br />
:Imaging<br />
userAcqControl userAcqDisplay userImageExport<br />
:Exporting<br />
:Acquire<br />
:Monitor<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Strategie<br />
Separiere nach Anliegen: Separation of Concern.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
:Acquisition<br />
receiver sender<br />
receiver sender<br />
:Acquisition<br />
:Control :Control<br />
Management<br />
:Acquire<br />
Die Trennung in der Komponente Acquisition in zwei Teilkomponenten führt dazu, dass die verbleibende<br />
Funktionalität dieser Komponente, die weder hardware-spezifisch noch spezifisch für das Interaktionsmodell ist, in<br />
einer weiteren Komponente Aquisition-Management versammelt werden muss.<br />
<strong>Software</strong>-Architektur<br />
Strategie<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
:Acquisition<br />
Management<br />
receiver sender<br />
receiver sender<br />
:Control :Control<br />
sender<br />
receiver<br />
:Control<br />
source dest<br />
Separiere zeitkritische Komponenten.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
receiver sender<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
:Image<br />
Processing<br />
:Imaging<br />
source dest source dest<br />
:Data<br />
:Exporting<br />
:Acquisition<br />
:Acquire<br />
:Monitor<br />
networkAccess<br />
receiver sender<br />
receiver sender<br />
:Control :Control<br />
receiver sender<br />
:Control<br />
:Acquisition<br />
Management<br />
:Data :Data :Data<br />
source dest<br />
:Data<br />
receiver sender<br />
:Control<br />
:Post<br />
Processing<br />
userAcqControl userAcqDisplay userImageExport<br />
source dest<br />
:Exporting<br />
:Acquisition<br />
:Acquire<br />
:Imaging<br />
:Monitor<br />
networkAccess<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 381 / 634<br />
sender<br />
receiver<br />
:Control<br />
source dest<br />
:Data<br />
:Imaging<br />
userAcqControl userAcqDisplay userImageExport<br />
:Exporting<br />
:Monitor<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Strategie<br />
Separiere zeitkritische Komponenten.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
receiver sender<br />
receiver sender<br />
:Acquisition<br />
:Control :Control<br />
Management<br />
:Acquire<br />
sender<br />
receiver<br />
:Control<br />
:Imaging<br />
source dest source dest<br />
source dest<br />
:Data<br />
:Image<br />
:Post<br />
:Data :Data :Data<br />
Collection<br />
Processing<br />
Processing<br />
:Monitor<br />
In analoger Weise müssen wir auch bei der Komponente Imaging so verfahren. Hier nehmen wir aber noch eine<br />
weitere Verfeinerung vor. Und zwar trennen wir Algorithmen mit Echtzeitanforderungen (also z.B. das komprimierte<br />
Abspeichern des aufgenommenen Bildes, damit kein Bild verloren geht) und weiterführende Algorithmen ohne<br />
Echtzeitanforderungen (wie z.B. das Aufhellen dunkler Bilder). Auf diese Weise können die Algorithmen mit<br />
unterschiedlichen Prioritäten versehen und auch auf unterschiedlichen Prozessoren ausgeführt werden.<br />
<strong>Software</strong>-Architektur<br />
Strategie<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
receiver sender<br />
receiver sender<br />
:Control :Control<br />
receiver<br />
:Control<br />
:Image<br />
Processing<br />
:Acquisition<br />
Management<br />
source dest source dest<br />
sender<br />
receiver sender<br />
:Control<br />
:Post<br />
Processing<br />
source dest<br />
:Data :Data :Data<br />
source dest<br />
Kapselung domänenspezifischer Bild-Daten.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
receiver sender<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
:Data<br />
:Exporting<br />
:Image<br />
Collection<br />
:Acquisition<br />
:Acquire<br />
:Imaging<br />
:Monitor<br />
networkAccess<br />
receiver sender<br />
receiver sender<br />
:Control :Control<br />
receiver sender<br />
:Control<br />
:Image<br />
Processing<br />
:Acquisition<br />
Management<br />
source dest source dest<br />
:Data :Data :Data<br />
source dest<br />
:Data<br />
receiver sender<br />
:Control<br />
:Post<br />
Processing<br />
:Data<br />
:Data<br />
userAcqControl userAcqDisplay userImageExport<br />
source dest<br />
source dest<br />
source dest<br />
receiver sender<br />
:Control<br />
:IS2000<br />
:Acquisition<br />
:Acquire<br />
:Exporting<br />
:Export<br />
:Comm<br />
:Imaging<br />
:Monitor<br />
networkAccess<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 382 / 634<br />
source dest<br />
:Data<br />
receiver sender<br />
:Control<br />
userAcqControl userAcqDisplay userImageExport<br />
:Exporting<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
Strategie<br />
Kapselung domänenspezifischer Bild-Daten.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
receiver sender<br />
receiver sender<br />
:Acquisition<br />
:Control :Control<br />
Management<br />
:Acquire<br />
sender<br />
receiver<br />
:Control<br />
:Imaging<br />
source dest source dest<br />
source dest<br />
:Data<br />
:Image<br />
:Post<br />
:Data :Data :Data<br />
Collection<br />
Processing<br />
Processing<br />
:Monitor<br />
:IS2000<br />
source dest<br />
:Data<br />
receiver sender<br />
:Control<br />
:Image<br />
Collection<br />
source dest<br />
:Data<br />
Schließlich verfeinern wir noch die Komponenten Exporting. Hier wollen wir den Aufwand für den Export in<br />
unterschiedliche Bildformate minimieren. Wir wenden dazu eine Strategie an, die domänenspezifischer Bild-Daten<br />
kapselt. Wir wählen hierfür eine interne Repräsentation unserer Bild-Daten in einer Datenhaltungskomponente<br />
Image Collection. Für den Export gibt es dann je eine Transformation des internen in das gewünschte Format. Die<br />
Komponente Export übernimmt hierfür die notwendige Interaktion mit dem Benutzer. Außerdem können die Bilder<br />
auch noch über ein Netzwerk verschickt werden. Diese Aufgabe übernimmt die Komponente Comm.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
sender<br />
receiver<br />
:Control<br />
:Data<br />
Collection<br />
:IS2000<br />
<strong>Software</strong>-Architektur<br />
Konzeptioneller Blickwinkel<br />
receiver sender<br />
receiver sender<br />
:Control :Control<br />
receiver<br />
:Control<br />
:Image<br />
Processing<br />
:Acquisition<br />
Management<br />
source dest source dest<br />
sender<br />
receiver sender<br />
:Control<br />
:Post<br />
Processing<br />
:Data :Data :Data<br />
source dest<br />
:Data<br />
:Image<br />
Collection<br />
source dest<br />
source dest<br />
:Data<br />
source dest<br />
:Data<br />
sender<br />
receiver<br />
:Control<br />
:Acquisition<br />
:Acquire<br />
:Exporting<br />
:Export<br />
:Comm<br />
:Imaging<br />
:Monitor<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport<br />
Strategie<br />
Kapselung domänenspezifischer Bild-Daten.<br />
sender<br />
receiver<br />
:Control<br />
sender<br />
receiver<br />
:Control<br />
:Exporting<br />
:Export<br />
source dest<br />
:Data :Comm<br />
:Image<br />
Collection<br />
source dest<br />
:Data<br />
networkAccess<br />
:Acquisition<br />
receiver sender<br />
receiver sender<br />
:Acquisition<br />
:Control :Control<br />
Management<br />
:Acquire<br />
:Imaging<br />
source dest source dest<br />
source dest<br />
:Data<br />
:Image<br />
:Post<br />
:Data :Data :Data<br />
Collection<br />
Processing<br />
Processing<br />
:Monitor<br />
Wir haben in diesem Abschnitt gesehen, wie man eine konzeptionelle Sicht sukzessive durch Anwendung der<br />
vorbereiteten Strategien verfeinert. Dabei sollte jede Anwendung einer Strategie unbedingt dokumentiert werden,<br />
damit die Entwurfsentscheidungen nachvollziehbar werden. Die Begründungen für bestimmte<br />
Entwurfsentscheidungen lassen sich nämlich auch nicht durch Reverse-Engineering-Techniken, die allein vom<br />
Quellcode ausgehen, nicht wieder rekonstruieren. Der Quellcode ist die sicherste Beschreibung dafür, was die<br />
<strong>Software</strong> macht. Er enthält aber keinen Hinweis darauf, was er hätte machen sollen, warum er was macht und<br />
warum er es gerade so macht.<br />
probeCommands<br />
probeData<br />
:Probe<br />
Control<br />
:IS2000<br />
sender<br />
receiver<br />
:Control<br />
source dest<br />
:Data<br />
receiver sender<br />
:Control<br />
sender<br />
receiver<br />
:Control<br />
:Exporting<br />
:Export<br />
source dest<br />
:Data :Comm<br />
networkAccess<br />
userAcqControl userAcqDisplay userImageExport<br />
userAcqControl userAcqDisplay userImageExport
<strong>Software</strong>-Architektur<br />
2009-02-09<br />
Organisatorische,und<br />
technologische Faktoren,<br />
Produktfaktoren<br />
Modulblickwinkel<br />
Globale Analyse<br />
− Faktoren<br />
− Strategien<br />
Konzeptioneller Blickwinkel<br />
Zentrale Entwurfs−<br />
aufgabe<br />
− Module<br />
− Schichten<br />
− Subsysteme<br />
globale Evaluation<br />
Code−Blickwinkel<br />
Quell−Code<br />
Abschließende<br />
Entwurfsaufgabe<br />
− Schnittstellen<br />
Ausführungsblickwinkel<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 383 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Modulblickwinkel<br />
Organisatorische,und<br />
technologische Faktoren,<br />
Produktfaktoren<br />
Modulblickwinkel<br />
Globale Analyse<br />
− Faktoren<br />
− Strategien<br />
Konzeptioneller Blickwinkel<br />
Zentrale Entwurfs−<br />
aufgabe<br />
− Module<br />
− Schichten<br />
− Subsysteme<br />
globale Evaluation<br />
Code−Blickwinkel<br />
Quell−Code<br />
Abschließende<br />
Entwurfsaufgabe<br />
− Schnittstellen<br />
Im nächsten Schritt überführen wir die konzeptionelle Sicht in die Modulsicht, die den statischen Aufbau des<br />
Systems beschreibt in Form von Modulen, Schnittstellen, Subsystemen und Schichten. Es ist gut möglich, dass sich<br />
beim Entwurf der konzeptionellen Sicht, sich neue Aspekte ergeben haben, so dass wir die globale Analyse<br />
gegebenfalls wiederholen, bevor wir uns an die zentrale Entwurfsaufgaben machen, die Module zu entwerfen. Nach<br />
Entwurf der Module und ihre Anordnung in Schichten und Subsystemen, entwerfen wir abschließend deren<br />
Schnittstellen.<br />
In diesem Abschnitt vertiefen wir den Modulsichtentwurf. Es sei voraus geschickt, dass wir nicht streng sequentiell<br />
Modulsicht, dann Ausführungs- und dann Code-Sicht entwerfen. Vielmehr ist der Entwurfsprozess meist iterativ.<br />
Ausführungsblickwinkel<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung
<strong>Software</strong>-Architektur<br />
Modulblickwinkel<br />
bildet Komponenten und Konnektoren auf Module, Schichten und<br />
Subsysteme ab<br />
setzt konzeptionelle Lösung mit aktuellen <strong>Software</strong>plattformen<br />
(Programmiersprachen, Bibliotheken) und Technologien um<br />
beschreibt statische Aspekte<br />
Engineering-Belange:<br />
2009-02-09<br />
Wie wird das Produkt auf die <strong>Software</strong>-Plattform abgebildet?<br />
Welche <strong>Software</strong>dienste werden benutzt und von wem?<br />
Wie wird das Testen unterstützt?<br />
Wie können Abhängigkeiten zwischen Modulen minimiert werden?<br />
Wie kann die Wiederverwendung von Modulen maximiert werden?<br />
Welche Techniken können eingesetzt werden, um Auswirkungen von<br />
Änderungen zu minimieren.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 384 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Modulblickwinkel<br />
Modulblickwinkel<br />
Modulblickwinkel<br />
bildet Komponenten und Konnektoren auf Module, Schichten und<br />
Subsysteme ab<br />
setzt konzeptionelle Lösung mit aktuellen <strong>Software</strong>plattformen<br />
(Programmiersprachen, Bibliotheken) und Technologien um<br />
beschreibt statische Aspekte<br />
Engineering-Belange:<br />
Wie wird das Produkt auf die <strong>Software</strong>-Plattform abgebildet?<br />
Welche <strong>Software</strong>dienste werden benutzt und von wem?<br />
Wie wird das Testen unterstützt?<br />
Wie können Abhängigkeiten zwischen Modulen minimiert werden?<br />
Wie kann die Wiederverwendung von Modulen maximiert werden?<br />
Welche Techniken können eingesetzt werden, um Auswirkungen von<br />
Änderungen zu minimieren.<br />
Beim Entwurf der Modulsicht bilden wir die Komponenten und Konnektoren der konzeptionellen Sicht auf Module,<br />
Schichten und Subsysteme ab. Hierzu setzen wir die konzeptionelle Lösung mit der aktuellen <strong>Software</strong>plattforme<br />
(Programmiersprachen, Bibliotheken, Werkzeuge) und Technologien um. Dabei werden rein statische Aspekte<br />
beschrieben.<br />
Die Belange, die durch die statische Modulsicht adressiert werden sind die folgenden:<br />
• Wie wird das Produkt auf die <strong>Software</strong>-Plattform abgebildet?<br />
• Welche <strong>Software</strong>dienste werden benutzt und von wem?<br />
• Wie wird das Testen unterstützt?<br />
• Wie können Abhängigkeiten zwischen Modulen minimiert werden?<br />
• Wie kann die Wiederverwendung von Modulen maximiert werden?<br />
• Welche Techniken können eingesetzt werden, um Auswirkungen von Änderungen zu minimieren.<br />
Für die Modulsichten interessieren sich Programmierer für die Programmierung. Tester interessieren für den<br />
Blackbox-Komponententest sowie den Integrationstest. Ein <strong>Projekt</strong>leiter kann von der Modulsicht Gebrauch<br />
machen, um festzulegen, welcher Entwickler welches Modul implementieren soll.
<strong>Software</strong>-Architektur<br />
Modulblickwinkel (Hofmeister u. a. 2000)<br />
2009-02-09<br />
0..1<br />
Subsystem<br />
contain<br />
*<br />
Module<br />
0..1<br />
*<br />
*<br />
require<br />
provide<br />
*<br />
*<br />
*<br />
use<br />
*<br />
*<br />
Interface<br />
assigned−to<br />
Module (layer) A uses<br />
module (layer) B when<br />
A requires an interface<br />
that B provides<br />
*<br />
require<br />
* provide<br />
0..1<br />
* *<br />
Layer<br />
*<br />
* 0..1<br />
use<br />
*<br />
contain<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 385 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Modulblickwinkel<br />
Modulblickwinkel (Hofmeister u. a. 2000)<br />
Der Modulblickwinkel wird durch das folgende UML-Diagramm beschrieben:<br />
0..1<br />
Subsystem<br />
contain<br />
*<br />
Module<br />
0..1<br />
*<br />
*<br />
require<br />
provide<br />
*<br />
*<br />
*<br />
use<br />
*<br />
*<br />
Interface<br />
assigned−to<br />
Module (layer) A uses<br />
module (layer) B when<br />
A requires an interface<br />
that B provides<br />
*<br />
require<br />
* provide<br />
0..1<br />
* *<br />
Layer<br />
*<br />
* 0..1<br />
use<br />
*<br />
Modulblickwinkel (Hofmeister u. a. 2000)<br />
0..1<br />
Subsystem<br />
contain<br />
*<br />
Module<br />
0..1<br />
*<br />
*<br />
require<br />
provide<br />
*<br />
*<br />
*<br />
use<br />
*<br />
*<br />
Module (layer) A uses<br />
module (layer) B when<br />
A requires an interface<br />
that B provides<br />
*<br />
require<br />
Interface<br />
* provide<br />
0..1<br />
* *<br />
assigned−to<br />
Layer<br />
*<br />
* 0..1<br />
Ein Modul ist eine statische, austauschbare Gliederungseinheit mit einem bestimmten Zweck. Es kann in der<br />
Beschreibung durch Teilmodule verfeinert werden. Ein Modul hat zwei Kategorien von Schnittstellen: die<br />
Schnittstellen, die es selbst anderen anbietet (provides) und jene, die es von anderen benötigt require). In den<br />
meisten Programmiersprachen kann man nur die zur Verfügung gestellten Schnittstellen angeben, aber nicht jene,<br />
die das Modul voraussetzt. Wenn Module aber ausgetauscht werden und die Auswirkung von Änderungen analysiert<br />
werden sollen, dann benötigt man auch Wissen darüber, welche Schnittstelle ein Modul voraussetzt.<br />
Module können zu Schichten angeordnet werden. Damit wird die Sichtbarkeit von Modulen festgelegt. Bei einem<br />
strikten Schichtenmodell dürfen Module einer Schicht nur auf Module der nächst tieferen Schicht zugreifen. Dies<br />
erhöht die Austauschbarkeit. Ein Schicht implementiert eine Art virtuelle Maschine. Auch Schichten haben beide<br />
Arten von Schnittstellen und können wieder weiter in Teilschichten verfeinert werden.<br />
Schließlich können Module nochmal unabhängig von Schichten zu einem Subsystem zusammen gefasst werden. Ein<br />
Subsystem ist eine weitere Gliederungseinheit, die orthogonal zu hierarchischen Modulen und zu Schichten ist. Ihre<br />
Daseinberechtigung wird später im Kontext des Code-Blickwinkels deutlicher.<br />
contain<br />
use<br />
*<br />
contain
<strong>Software</strong>-Architektur<br />
Notation für Module<br />
2009-02-09<br />
<br />
A<br />
+sichtbar<br />
-unsichtbar<br />
<br />
<br />
<br />
C<br />
+sichtbar<br />
-unsichtbar<br />
<br />
<br />
B<br />
+sichtbar<br />
-unsichtbar<br />
Schnittstelle<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 386 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Modulblickwinkel<br />
Notation für Module<br />
Notation für Module<br />
<br />
A<br />
+sichtbar<br />
-unsichtbar<br />
<br />
<br />
<br />
C<br />
+sichtbar<br />
-unsichtbar<br />
<br />
B<br />
+sichtbar<br />
-unsichtbar<br />
Module sind ein etwas allgemeineres Konzept als Klassen. Klassen sind ein Konzept einer Programmiersprache und<br />
des objektorientierten Paradigmas. Module können aber in C auch durch Dateien implementiert werden. Oft werden<br />
sie durch mehrere Dateien oder Klassen implementiert. Insofern hat das Konzept Modul seine Berechtigung.<br />
Weil Module aber Klassen ähneln, kann man für sie auch eine ähnliche Notation verwenden. Im folgenden<br />
Diagramm verwenden wir den Stereotyp Modul um zu kennzeichnen, dass die Klassenikone als Module zu<br />
interpretieren sind.<br />
<br />
A<br />
+sichtbar<br />
-unsichtbar<br />
<br />
<br />
<br />
C<br />
+sichtbar<br />
-unsichtbar<br />
<br />
<br />
B<br />
+sichtbar<br />
-unsichtbar<br />
Schnittstelle<br />
Die UML-Notation für sichtbare und unsichtbare Elemente können zur Spezifikation der provides-Schnittstelle<br />
verwendet werden. Alternativ kann man auch auf die UML-Darstellungen für Schnittstellen zurück greifen. Der<br />
Lolipop an Modul B besagt, dass B eine Schnittstelle zur Verfügung stellt, von der Modul C abhängt.<br />
<br />
Schnittstelle
<strong>Software</strong>-Architektur<br />
Beispiel einer Modulsicht<br />
2009-02-09<br />
<br />
<br />
Network<br />
Comm<br />
sender receiver<br />
<br />
forwarder<br />
<br />
TCP/IP<br />
<br />
dispatcher<br />
<br />
wrapper<br />
<br />
sockets<br />
+socket()<br />
+bind()<br />
+listen()<br />
+accept()<br />
+recvmsg()<br />
+sendmsg()<br />
<br />
Remote Imaging<br />
<br />
receiver<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 388 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Modulblickwinkel<br />
Beispiel einer Modulsicht<br />
Beispiel einer Modulsicht<br />
<br />
Comm<br />
<br />
Network<br />
sender receiver<br />
Als Beispiel für eine Modulsicht verfeinern wir einen Aspekt der konzeptionellen Sicht unseres laufenden Beispiels<br />
der IS2000. Wir wenden uns hierzu der Komponente Comm der konzeptionellen Sicht zu. Ihre Aufgabe ist es, die<br />
Netzwerkkommunikation zu realisieren.<br />
Das folgende Beispieldiagramm beschreibt diesen kleinen Ausschnitt:<br />
<br />
Comm<br />
<br />
Network<br />
sender receiver<br />
<br />
forwarder<br />
<br />
TCP/IP<br />
<br />
dispatcher<br />
<br />
wrapper<br />
<br />
sockets<br />
+socket()<br />
+bind()<br />
+listen()<br />
+accept()<br />
+recvmsg()<br />
+sendmsg()<br />
<br />
Remote Imaging<br />
<br />
receiver<br />
<br />
forwarder<br />
<br />
TCP/IP<br />
<br />
dispatcher<br />
<br />
wrapper<br />
<br />
sockets<br />
+socket()<br />
+bind()<br />
+listen()<br />
+accept()<br />
+recvmsg()<br />
+sendmsg()<br />
<br />
Remote Imaging<br />
<br />
receiver
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Modulblickwinkel<br />
Beispiel einer Modulsicht<br />
Beispiel einer Modulsicht<br />
<br />
Comm<br />
<br />
Network<br />
sender receiver<br />
Das Diagramm beschreibt, wie die Comm-Komponente den Netzwerkzugriff realisiert. Wir haben uns dazu<br />
entschlossen das Netzwerkprotokoll TCP/IP zu verwenden, um Daten über das Internet auszutauschen. Da der<br />
Datentransfer zwischen einer heterogenen Rechnerlandschaft geschieht und deshalb Binärdaten konvertiert werden<br />
müssen, legen wir über die TCP/IP-Schicht noch eine weitere Schicht, die das Ein- und Auspacken der<br />
transferierten Daten vornimmt. Außerdem können wir auf diese Weise von TCP/IP abstrahieren und es bei Bedarf<br />
leicht gegen ein anderes Protokoll austauschen. Die Schicht Network wird sowohl von der IS2000 als auch von<br />
anderen Prozessen, die auf entfernten Rechnern ausgeführt werden, verwendet (stellvertretend steht hierfür das<br />
Module Remote Imaging). Die Schicht Network gliedert sich in ein Dispatcher-Modul, der die Verwaltung des<br />
Sendens und Empfangens übernimmt, und in ein Modul forwarder für das Einpacken für den Datenversand und ein<br />
Modul receiver für das Entpacken der Daten. Letztere beiden Module müssen sich auf eine gemeinsame<br />
Datenrepräsentation einigen. Aus diesem Grund sind sie dem selben Modul wrapper zugeordnet.<br />
Wir haben hier ein vergleichsweise kleines Detail der logischen Sicht auf Module abgebildet und bereits eine<br />
ansehnliche Anzahl von Modulen erhalten. Das Beispiel sollte deutlich machen, dass wir für die gesamte<br />
konzeptionelle Sicht eine große Anzahl von Modulen erhalten werden. Damit wir uns in diesem Abbildungsprozess<br />
verlieren, haben wir glücklicherweise die konzeptionelle Sicht, die alles zusammen hält und an der wir uns<br />
orientieren können.<br />
<strong>Software</strong>-Architektur<br />
Organisatorische,und<br />
technologische Faktoren,<br />
Produktfaktoren<br />
Konzeptioneller Blickwinkel<br />
Modulblickwinkel<br />
Code−Blickwinkel<br />
Quell−Code<br />
Ausführungsblickwinkel<br />
Globale Analyse<br />
− Faktoren<br />
− Strategien<br />
Zentrale Entwurfs−<br />
aufgabe<br />
− Laufzeitelemente<br />
− Kommunikationspfade<br />
− Ausführungskonfiguration<br />
globale Evaluation<br />
Abschließende<br />
Entwurfsaufgabe<br />
− Ressourcenzuweisung<br />
<br />
forwarder<br />
<br />
TCP/IP<br />
<br />
dispatcher<br />
<br />
wrapper<br />
<br />
sockets<br />
+socket()<br />
+bind()<br />
+listen()<br />
+accept()<br />
+recvmsg()<br />
+sendmsg()<br />
<br />
Remote Imaging<br />
<br />
receiver<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 389 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel<br />
Organisatorische,und<br />
technologische Faktoren,<br />
Produktfaktoren<br />
Konzeptioneller Blickwinkel<br />
Modulblickwinkel<br />
Code−Blickwinkel<br />
Quell−Code<br />
Ausführungsblickwinkel<br />
Globale Analyse<br />
− Faktoren<br />
− Strategien<br />
Zentrale Entwurfs−<br />
aufgabe<br />
− Laufzeitelemente<br />
− Kommunikationspfade<br />
− Ausführungskonfiguration<br />
globale Evaluation<br />
<strong>Software</strong> ist primär Verhalten. Durch die Modulsicht wird aber nur der innere strukturelle Aufbau beschrieben. Im<br />
nächsten Schritt kümmern wir uns um dynamische Aspekte, also Dinge, die zur Laufzeit relevant sind. Dazu bilden<br />
wir die Module auf Elemente der Ausführungsplattform (sowohl Hardware als auch <strong>Software</strong>) ab. Dazu dient der<br />
Ausführungsblickwinkel.<br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel<br />
beschreibt dynamische Aspekte<br />
beschreibt, wie Module auf Elemente der Ausführungs- und<br />
Hardwareplattform abgebildet werden<br />
definiert Laufzeitelemente und deren Attribute (Speicher- und<br />
Zeitbedarf, Allokation auf Hardware)<br />
Engineering-Belange:<br />
Abschließende<br />
Entwurfsaufgabe<br />
− Ressourcenzuweisung<br />
Wie verläuft Kontroll- und Datenfluss zwischen Laufzeitkomponenten?<br />
Wie kann Ressourcenverbrauch ausgewogen werden?<br />
Wie können Nebenläufigkeit, Replikation und Verteilung erreicht<br />
werden, ohne die Algorithmen unnötig zu verkomplizieren?<br />
Wie können Auswirkungen von Änderungen in der<br />
Ausführungsplattform minimiert werden?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 390 / 634<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel<br />
Ausführungsblickwinkel<br />
Ausführungsblickwinkel<br />
beschreibt dynamische Aspekte<br />
beschreibt, wie Module auf Elemente der Ausführungs- und<br />
Hardwareplattform abgebildet werden<br />
definiert Laufzeitelemente und deren Attribute (Speicher- und<br />
Zeitbedarf, Allokation auf Hardware)<br />
Engineering-Belange:<br />
Wie verläuft Kontroll- und Datenfluss zwischen Laufzeitkomponenten?<br />
Wie kann Ressourcenverbrauch ausgewogen werden?<br />
Wie können Nebenläufigkeit, Replikation und Verteilung erreicht<br />
werden, ohne die Algorithmen unnötig zu verkomplizieren?<br />
Wie können Auswirkungen von Änderungen in der<br />
Ausführungsplattform minimiert werden?<br />
Der Ausführungsblickwinkel definiert die Laufzeitelemente und deren Attribute wie Speicher- und Zeitbedarf und<br />
Allokation auf Hardware. Wir beschreiben hierbei, welche Prozesse und Objekte existieren, wie sie miteinander zu<br />
Ausführungszeit kommunizieren und wie sie auf die ausführende Hardware abgebildet werden.<br />
Die adressierten Belange des Ausführungsblickwinkels sind damit:<br />
• Wie verläuft der Kontroll- und Datenfluss zwischen den Laufzeitkomponenten (Prozesse, Objekte etc.)?<br />
• Wie kann der Ressourcenverbrauch (Speicher, Rechenzeit etc.) ausgewogen werden?<br />
• Wie können Nebenläufigkeit, Replikation und Verteilung erreicht werden, ohne die Algorithmen unnötig zu<br />
verkomplizieren?<br />
• Wie können Auswirkungen von Änderungen in der Ausführungsplattform minimiert werden (also Änderungen der<br />
Hardware)?<br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
*<br />
Communication<br />
Mechanism<br />
1<br />
*<br />
Communication<br />
Path<br />
*<br />
*<br />
*<br />
consume<br />
use mechanism<br />
communicate over<br />
<strong>Software</strong><br />
Platform<br />
Platform<br />
Element<br />
* 1 * *<br />
is a<br />
*<br />
Runtime<br />
Entity<br />
2..*<br />
*<br />
consume<br />
*<br />
contain<br />
Platform<br />
Resource<br />
assigned to<br />
assigned to<br />
* 1<br />
*<br />
Hardware<br />
Resource<br />
Module<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 391 / 634
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
Das folgende UML-Diagramm beschreibt den Ausführungsblickwinkel:<br />
*<br />
Communication<br />
Mechanism<br />
1<br />
*<br />
use mechanism<br />
Communication<br />
Path<br />
*<br />
*<br />
*<br />
consume<br />
communicate over<br />
<strong>Software</strong><br />
Platform<br />
*<br />
Platform<br />
Element<br />
* 1 * *<br />
is a<br />
*<br />
Runtime<br />
Entity<br />
2..*<br />
consume<br />
*<br />
contain<br />
Platform<br />
Resource<br />
assigned to<br />
assigned to<br />
* 1<br />
*<br />
Hardware<br />
Resource<br />
Module<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
*<br />
Communication<br />
Mechanism<br />
1<br />
*<br />
Communication<br />
Path<br />
*<br />
*<br />
*<br />
consume<br />
use mechanism<br />
communicate over<br />
<strong>Software</strong><br />
Platform<br />
*<br />
Platform<br />
Element<br />
* 1 * *<br />
Die <strong>Software</strong>-Plattform hält alle Aspekte der Ausführung zusammen. Sie besteht zunächst aus Plattformelementen,<br />
dies sind Dinge, die zur Laufzeit angelegt werden und ausgeführt werden können (z.B. Prozesse; wir lernen weitere<br />
Beispiele weiter unten kennen).<br />
Die Plattformelemente haben Instanzen, die Laufzeiteinheiten (Runtime Entity). Die Laufzeiteinheiten<br />
kommunizieren über Kommunikationspfade (Communication Path) mit einander. Mindestens zwei konkrete<br />
Laufzeitinstanzen kommunizieren dabei. Die Kommunikationspfade verwenden hierzu einen<br />
Kommunikationsmechanismus, wie beispielsweise eine Remote Method Invocation in Java oder eine<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel<br />
Corba-Interprozesskommunikation.<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
is a<br />
*<br />
Runtime<br />
Entity<br />
2..*<br />
consume<br />
*<br />
contain<br />
Platform<br />
Resource<br />
assigned to<br />
assigned to<br />
* 1<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
*<br />
Communication<br />
Mechanism<br />
*<br />
Communication<br />
Path<br />
*<br />
consume<br />
communicate over<br />
<strong>Software</strong><br />
Platform<br />
*<br />
Platform<br />
Element<br />
* 1 * *<br />
Bei der Ausführung konsumiert eine Laufzeiteinheit Laufzeitressourcen wie Speicher oder Rechenzeit.<br />
Auf der rechten Seite des Diagramms sehen wir die Einbettung in die Hardwareumgebung und in die statische<br />
Modulsicht. Module sind den Laufzeiteinheiten, die sie ausführen. Dabei kann ein Modul natürlich von vielen<br />
Laufzeiteinheiten verwendet werden. Durch diese Bezüge zur Modulsicht werden die beiden Sichten miteinander<br />
verknüpft.<br />
Die Plattformressourcen werden auf konkrete Hardware-Ressourcen abgebildet, die sie zur Verfügung stellen, wie<br />
beispielsweise Prozessoren oder gemeinsamer Speicher.<br />
1<br />
*<br />
*<br />
use mechanism<br />
is a<br />
*<br />
Runtime<br />
Entity<br />
2..*<br />
consume<br />
*<br />
contain<br />
Platform<br />
Resource<br />
assigned to<br />
*<br />
assigned to<br />
* 1<br />
*<br />
Hardware<br />
Resource<br />
Module<br />
Hardware<br />
Resource<br />
Module
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
2009-02-09<br />
Platform Element<br />
Thread<br />
Process<br />
Task<br />
Socket<br />
Queue<br />
File<br />
Shared Memory<br />
Shared Library<br />
DLL<br />
Platform Resource<br />
...<br />
CPU Time<br />
Address Space<br />
Memory<br />
Semaphore<br />
Timer<br />
Communication Mechanism<br />
DCOM<br />
Rainer Koschke (Uni <strong>Bremen</strong>) ...<br />
<strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 392 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
...<br />
IPC<br />
RPC<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
Die Konzepte des Ausführungsblickwinkels sind noch relativ abstrakt. Die folgende Vererbungshierarchie<br />
konkretisiert die Konzepte. Ein Plattformelement ist eine <strong>Software</strong>einheit, die zur Laufzeit existiert. Dazu gehören<br />
zum Beispiel Objekte als Instanzen von Klassen. Für die Realisierung von paralleler Ausführung haben wir Threads<br />
(als leichtgewichtige Prozesse mit gemeinsamem Speicher), Prozesse mit getrennten Speicher oder Tasks (als<br />
eigenes Sprachkonstrukt aus einer Programmiersprache). Diese Prozesse kommunizieren über weitere<br />
Plattformelemente wie Sockets, Warteschlangen, Dateien oder geteiltem Speicher. Außerdem kann man Module<br />
bündeln in dynamischen Bibliotheken und auf unterschiedlichen Rechnern installieren.<br />
Platform Element<br />
...<br />
Thread<br />
Process<br />
Task<br />
Socket<br />
Queue<br />
File<br />
Shared Memory<br />
Shared Library<br />
DLL<br />
Platform Resource<br />
...<br />
CPU Time<br />
Address Space<br />
Memory<br />
Semaphore<br />
Timer<br />
Communication Mechanism<br />
...<br />
DCOM<br />
IPC<br />
RPC<br />
Platform Element<br />
...<br />
Thread<br />
Process<br />
Task<br />
Socket<br />
Queue<br />
File<br />
Shared Memory<br />
Shared Library<br />
DLL<br />
Platform Resource<br />
...<br />
CPU Time<br />
Address Space<br />
Memory<br />
Semaphore<br />
Timer<br />
Communication Mechanism<br />
...<br />
DCOM<br />
IPC<br />
RPC
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
Plattformressourcen sind Ressourcen, die uns von der <strong>Software</strong>- und Hardwareplattform zur Verfügung gestellt<br />
werden, die von den Plattformelementen konsumiert werden, während sie ihre Arbeit erledigen. Dazu gehöhren<br />
neben Speicher und CPU-Zeit Betriebsmittel für die Synchronisation wie Semaphore oder Timer.<br />
Kommunikationsmechanismen schließlich dienen den Plattformelementen zum Nachrichtenaustausch. Unter dem<br />
Betriebssystem Windows gibt es hierfür zum Beispiel DCOM. Plattformunabhängigere Mechanismen sind die<br />
Interprozesskommunikation (IPC) oder der Remote Procedure Call (RPC), bei Java auch bekannt als Remote<br />
Method Invocation (RMI).<br />
<strong>Software</strong>-Architektur<br />
Beispiel einer Ausführungssicht<br />
Platform Element<br />
...<br />
Thread<br />
Process<br />
Task<br />
Socket<br />
Queue<br />
File<br />
Shared Memory<br />
Shared Library<br />
DLL<br />
Platform Resource<br />
...<br />
CPU Time<br />
Address Space<br />
Memory<br />
Semaphore<br />
Timer<br />
Communication Mechanism<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 393 / 634<br />
...<br />
DCOM<br />
IPC<br />
RPC
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel<br />
Beispiel einer Ausführungssicht<br />
Beispiel einer Ausführungssicht<br />
Für Diagramme, die die Ausführungssicht beschreiben, gibt keine Standardnotation. Die Diagrammart in der UML,<br />
die der Ausführungssicht am nächsten kommt, ist das Deployment-Diagramm. Es zeigt aber nicht alle Aspekte, die<br />
im Ausführungsblickwinkel nach Hofmeister u. a. (2000) möglich sind. Hofmeister u. a. (2000) schlagen deshalb<br />
eine eigene Notation vor, die an das Deployment-Diagramm der UML angelehnt ist. Das folgende Diagramm ist ein<br />
Beispiel hierfür:<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Ausführungsblickwinkel<br />
Beispiel einer Ausführungssicht<br />
Beispiel einer Ausführungssicht<br />
Wir erkennen darin drei Rechnertypen, die als Quader dargestellt sind. In ihnen geschachtelt tauchen drei<br />
Prozesstypen, die mit dem Stereotyp process gekennzeichnet sind. Die Schachtelung drückt aus, dass der<br />
geschachtelte Prozess auf dem jeweiligen Rechner ausgeführt wird. Die Module, die die Prozesse dabei ausführen,<br />
sind in den Prozessen geschachtelt. Die Kommunikationspfade werden als Assoziationen zwischen den Prozessen<br />
dargestellt. Die Beschriftung der Assoziation gibt den Kommunikationsmechanismus wieder. Die Multiplizitäten an<br />
den Kommunikationspfaden gibt an, wie viele Prozess jeden Typs in der Kommunikation involviert sind. In unserem<br />
Fall ist das je eine n:1-Beziehungen, das heißt, mehrere Shop-Assistents kommunizieren mit einem Shop-Server und<br />
mehrere Shop-Server kommunizieren mit einem Datenbank-Server.<br />
Wie viele Instanzen es von den Typen von Hardware-Ressourcen und Plattformelementen zur Laufzeit gibt, wird<br />
durch die Zahl in den Kästen wieder gegeben. Den Ladenrechner und Datenbankrechner gibt es nur einmal, es kann<br />
aber beliebig viele PDAs geben. Auf jedem PDA wird nur ein Prozess vom Typ Personal Shop Assistent gestartet.<br />
Gleiches gilt für den Datenbankrechner, auf dem nur eine Instanz des Prozesstyps Data Base Server existiert. Um<br />
Ausfallsicherheit und Skalierbarkeit zu sichern, hat sich der Architekt entschlossen, auf dem Ladenrechner n<br />
Instanzen von Shop Server anzulegen.
<strong>Software</strong>-Architektur<br />
2009-02-09<br />
Organisatorische,und<br />
technologische Faktoren,<br />
Produktfaktoren<br />
Code−Blickwinkel<br />
Globale Analyse<br />
− Faktoren<br />
− Strategien<br />
Konzeptioneller Blickwinkel<br />
Modulblickwinkel<br />
Zentrale Entwurfs−<br />
aufgabe<br />
− Quellkomponenten<br />
− Zwischenprodukte<br />
− Auslieferungskomp.<br />
globale Evaluation<br />
Quell−Code<br />
Abschließende<br />
Entwurfsaufgabe<br />
− Build−Prozess<br />
− Konfigurations−<br />
management<br />
Ausführungsblickwinkel<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 394 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Code-Sicht<br />
Organisatorische,und<br />
technologische Faktoren,<br />
Produktfaktoren<br />
Code−Blickwinkel<br />
Globale Analyse<br />
− Faktoren<br />
− Strategien<br />
Konzeptioneller Blickwinkel<br />
Modulblickwinkel<br />
Zentrale Entwurfs−<br />
aufgabe<br />
− Quellkomponenten<br />
− Zwischenprodukte<br />
− Auslieferungskomp.<br />
globale Evaluation<br />
Quell−Code<br />
Abschließende<br />
Entwurfsaufgabe<br />
− Build−Prozess<br />
− Konfigurations−<br />
management<br />
Nachdem wir Modulsicht und Ausführungssicht entworfen haben, planen wir die konkrete Implementierung.<br />
Elemente aus der Modulsicht und Ausführungssicht sind abstrakte Konzepte, die dann in einer<br />
Programmiersprachen realisiert werden müssen. Dies geschieht, indem Programmierer Dateien anlegen, in denen<br />
der Implementierungscode (textuell oder graphisch) aufgeführt ist. Wir nennen dies die Quellkomponenten. Aus<br />
den Quellkomponenten werden dann möglicherweise über Zwischenprodukte das erzeugt, was schließlich als Code<br />
an den Kunden ausgeliefert wird. Beispielsweise haben wir unser Programm in C geschrieben. Dann erzeugt der<br />
Compiler daraus als Zwischenprodukt Objektdateien und möglicherweise Bibliotheken. Daraus erzeugt der Linker<br />
schließlich das ausführbare Programm. Das ausführbare Programm und alle dynamischen Bibliotheken stellen die<br />
Ausführungskomponenten dar. Da Dateien meist die Einheit sind, in der Aufgaben an Programmierer verteilt<br />
werden, und die meisten Versionskontrollsysteme nur ganze Dateien verwalten, bestimmt die Aufteilung in Dateien<br />
die Aufgabenverteilung und das Konfigurationsmanagement. Außerdem kann der Build-Prozess unter Umständen<br />
bei großen Systemen, die nicht selten in vielen unterschiedlichen Programmiersprachen geschrieben wird, sehr<br />
komplex werden. Der Build-Prozess benötigt nicht selten viel Zeit selbst auf mächtiger Hardware. Aus diesen<br />
Gründen sollte für mittlere und große Systeme die Abbildung der abstrakten Konzepte aus der Modulsicht und<br />
Ausführungssicht auf “anfassbare” Dateien und auch der Build-Prozess geplant und dokumentiert werden. Dies ist<br />
die Aufgabe der Code-Sicht.<br />
Bevor wir die Code-Sicht entwerfen, ist es möglicherweise notwendig, die globale Analyse nochmals zu wiederholen,<br />
wenn sich durch den Entwurf der vorherigen Sichten Einflussfaktoren und Strategien geändert haben sollten.<br />
Ausführungsblickwinkel<br />
Hardware−Architektur<br />
Einfluss<br />
Rückkopplung
<strong>Software</strong>-Architektur<br />
Code-Blickwinkel<br />
bildet Laufzeiteinheiten auf installierbare Objekte (ausführbare<br />
Dateien, dynamische Link-Bibliotheken etc.) ab<br />
bildet Module auf Quellkomponenten (Dateien) ab<br />
zeigt, wie die installierbaren Dateien aus den Quellkomponenten<br />
generiert werden<br />
Engineering-Belange:<br />
2009-02-09<br />
Wie kann die Zeit und der Aufwand für Produkt-Upgrades verringert<br />
werden?<br />
Wie sollen Produktversionen verwaltet werden?<br />
Wie kann die Build-Zeit verringert werden?<br />
Welche Werkzeuge werden in der Entwicklungsumgebung benötigt?<br />
Wie wird Integration und Test unterstützt?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 395 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Code-Sicht<br />
Code-Blickwinkel<br />
Code-Blickwinkel<br />
bildet Laufzeiteinheiten auf installierbare Objekte (ausführbare<br />
Dateien, dynamische Link-Bibliotheken etc.) ab<br />
bildet Module auf Quellkomponenten (Dateien) ab<br />
zeigt, wie die installierbaren Dateien aus den Quellkomponenten<br />
generiert werden<br />
Engineering-Belange:<br />
Wie kann die Zeit und der Aufwand für Produkt-Upgrades verringert<br />
werden?<br />
Wie sollen Produktversionen verwaltet werden?<br />
Wie kann die Build-Zeit verringert werden?<br />
Welche Werkzeuge werden in der Entwicklungsumgebung benötigt?<br />
Wie wird Integration und Test unterstützt?<br />
Die Code-Sicht bildet die Laufzeiteinheiten auf installierbare Objekte (ausführbare Dateien, dynamische<br />
Link-Bibliotheken etc.) ab. Außerdem bildet sie Module auf Quellkomponenten (Dateien) ab und zeigt, wie die<br />
installierbaren Dateien aus den Quellkomponenten generiert werden.<br />
Die Belange, die mit der Code-Sicht adressiert werden, sind wie folgt:<br />
• Wie kann die Zeit und der Aufwand für Produkt-Upgrades verringert werden? Dazu müssen wir wissen, welche<br />
ausgelieferten Einheiten wir erneuern müssen. Im schlimmsten Fall muss der Kunde alles neu installieren. Dies wollen wir<br />
aber vermeiden.<br />
• Wie sollen Produktversionen verwaltet werden? Unter Umständen müssen wir nachvollziehen können, welche einzelnen<br />
Dateien für die Installation bei einem bestimmten Kunden eingeflossen sind, um zum Beispiel Fehler zu diagnostizieren.<br />
Diese Information muss durch das Konfigurationsmanagement bereit gehalten werden.<br />
• Wie kann die Build-Zeit verringert werden? Die Zeit für die vollständige Übersetzung kann erheblich sein und damit die<br />
Entwicklung stark hemmen. Bei großen Systemen kann es viele Stunden dauern, bis ein System vollständig übersetzt ist.<br />
Wir wollen deshalb die Abhängigkeiten zwischen den Dateien möglichst gering halten, um den Build-Prozess so kurz wie<br />
möglich zu halten.<br />
• Welche Werkzeuge werden in der Entwicklungsumgebung benötigt? In manchen Fällen können zum Beispiel Teile des<br />
Code automatisch generiert werden.<br />
• Wie wird Integration und Test unterstützt? Bei der inkrementellen Integration werden Systemteile sukzessiv<br />
hinzugenommen und in ihrer Interaktion getestet. Dazu muss man den inneren Aufbau und die Abhängigkeiten aus der<br />
Modulsicht kennen und wissen, welche Dateien dazu jeweils zu übersetzen und zu testen sind.
<strong>Software</strong>-Architektur<br />
Code-Blickwinkel (Hofmeister u. a. 2000)<br />
Subsystem<br />
Layer<br />
Module<br />
Interface<br />
2009-02-09<br />
0..1<br />
Runtime<br />
Entity<br />
0..1<br />
0..1<br />
trace<br />
trace<br />
<strong>Software</strong><br />
Platform<br />
trace<br />
0..1<br />
*<br />
* * *<br />
Source<br />
Component<br />
import *<br />
Binary<br />
* Component<br />
*<br />
Library<br />
*<br />
Executable<br />
*<br />
Configuration<br />
Description<br />
* *<br />
generate<br />
trace<br />
1 1 *<br />
compile<br />
* 1 *<br />
link<br />
* * *<br />
link<br />
* 1 1 *<br />
use at runtime<br />
compile<br />
link<br />
*<br />
*<br />
*<br />
instantiate<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 396 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Code-Sicht<br />
Code-Blickwinkel (Hofmeister u. a. 2000)<br />
Code-Sichten werden durch den folgenden Code-Blickwinkel beschrieben:<br />
Subsystem<br />
Layer<br />
Module<br />
Interface<br />
0..1<br />
Runtime<br />
Entity<br />
0..1<br />
0..1<br />
trace<br />
trace<br />
<strong>Software</strong><br />
Platform<br />
Code-Blickwinkel (Hofmeister u. a. 2000)<br />
Subsystem 0..1 trace<br />
Layer<br />
0..1 trace<br />
*<br />
*<br />
<strong>Software</strong><br />
Platform<br />
Module<br />
Interface<br />
0..1<br />
Runtime<br />
trace<br />
0..1<br />
import * * * *<br />
* * *<br />
Source<br />
Binary<br />
Library Executable Configuration<br />
* Component * Component<br />
Description<br />
* * 1 1 * * 1 * * * * * 1 1 *<br />
generate<br />
compile<br />
link<br />
link<br />
use at runtime<br />
trace<br />
compile<br />
link<br />
Entity *<br />
instantiate<br />
trace<br />
0..1<br />
*<br />
* * *<br />
Source<br />
Component<br />
import *<br />
Binary<br />
* Component<br />
*<br />
Library<br />
*<br />
Executable<br />
*<br />
Configuration<br />
Description<br />
* *<br />
generate<br />
trace<br />
1 1 *<br />
compile<br />
* 1 *<br />
link<br />
* * *<br />
link<br />
* 1 1 *<br />
use at runtime<br />
compile<br />
link<br />
*<br />
*<br />
*<br />
instantiate
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Code-Sicht<br />
Code-Blickwinkel (Hofmeister u. a. 2000)<br />
Code-Blickwinkel (Hofmeister u. a. 2000)<br />
Subsystem 0..1 trace<br />
Layer<br />
0..1 trace<br />
*<br />
*<br />
<strong>Software</strong><br />
Platform<br />
Module<br />
Interface<br />
0..1<br />
Runtime<br />
trace<br />
0..1<br />
import * * * *<br />
* * *<br />
Source<br />
Binary<br />
Library Executable Configuration<br />
* Component * Component<br />
Description<br />
* * 1 1 * * 1 * * * * * 1 1 *<br />
generate<br />
compile<br />
link<br />
link<br />
use at runtime<br />
trace<br />
compile<br />
link<br />
Entity *<br />
instantiate<br />
Alles, was für die Konstruktion des Systems notwendig ist, wird versammelt unter der <strong>Software</strong>-Plattform (<strong>Software</strong><br />
Platform). Dazu gehören primär die Quell-Komponenten (Source Component), die die Module und Schnittstellen<br />
implementieren. Das sind in Java beispielsweise die Java-Quelldateien. Sie hängen zum Teil von einander ab, indem<br />
sie sich importieren. In Java gibt es dafür die import-Anweisung. Außer reinen Code-Dateien betrachten wir auch<br />
zum Beispiel UML-Diagramme als Quell-Komponenten, wenn aus ihnen Quell-Code generiert wird. Die<br />
Quell-Komponenten werden bei kompilierten Sprachen von einem Compiler in eine Binärform übersetzt. In Java ist<br />
das der Java-Bytecode. Die Binärdateien werden in einem weiteren Schritt oft in statischen oder dynamischen<br />
Bibliotheken zusammen gefasst. In Java sind das die JAR-Bibliotheken. Ein Linker linkt die Binärdateien und<br />
Bibliotheken schließlich zu einem ausführbaren Programm. Das Linken kann auch erst zum Zeitpunkt des<br />
Programms stattfinden, dann spricht man von einem dynamischen Linker. Die ausführbaren Programme können<br />
häufig durch Konfigurationsdateien (Configuration Description) zur Start- oder Laufzeit konfiguriert werden.<br />
Beispielsweise kann die Sprache, in der mit dem Anwender kommuniziert wird, bei internationalisierten<br />
Programmen eingestellt werden.<br />
Auf der linken Seite des Diagramms zum Code-Blickwinkel finden wir Elemente des statischen Modulblickwinkels<br />
und des Ausführungsblickwinkels. Auf diese Weise werden die verschiedenen Sichten miteinander verbunden.<br />
Zwischen Quell-Komponenten und Modulen und Schnittstellen haben wir eine trace-Beziehung. Sie beschreibt,<br />
welche Module durch welche Dateien implementiert werden, und ermöglicht damit die Nachvollziehbarkeit (im<br />
Englischen: Traceability) zwischen unterschiedlichen Ebenen eines Systems. Schichten und Subsysteme sind meist<br />
keiner einzelnen Quell-Komponente zuzuordnen. Vielmehr bilden wir sie ab auf die <strong>Software</strong>-Plattform. Eine Schicht<br />
oder ein Subsystem implementiert damit eine <strong>Software</strong>-Plattform.<br />
Die Programme erzeugen (instantiate) während ihrer Ausführung die Laufzeiteinheiten (Runtime Entity).<br />
<strong>Software</strong>-Architektur<br />
Code-Blickwinkel: Beispiel<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 397 / 634
2009-02-09<br />
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Code-Sicht<br />
Code-Blickwinkel: Beispiel<br />
Das folgende Diagramm ist ein Beispiel für eine Code-Sicht:<br />
Code-Blickwinkel: Beispiel<br />
Die Modul dispatcher wird durch die Datei dispatcher.java implementiert. Das Modul wrapper sowie seine<br />
Die Teilmodule forwarder und receiver werden durch die Dateien forwarder.java und receiver.java umgesetzt. Das<br />
zusammengesetzte Modul wrapper wird nicht unmittelbar durch eine Quell-Komponente implementiert. Vielmehr<br />
besteht es aus den oben genannten Teilmodulen, die bestimmten Quell-Komponenten zugeordnet sind.<br />
Hierarchische Module werden als reine Gliederungseinheiten verwendet. Die Moduldekomposition ergibt einen<br />
Baum. Nur die Blätter dieses Baumes stellen Module dar, für die auch Code geschrieben werden muss.<br />
Die aus den Java-Dateien generierten Class-Dateien werden in einer JAR-Bibliothek für den Server abgelegt. Bei<br />
Ausführung der Bibliothek, indem die entsprechende main-Methode aktiviert wird, wird dann der Server-Prozess<br />
erzeugt.<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Code-Sicht<br />
Code-Blickwinkel: Beispiel<br />
Code-Blickwinkel: Beispiel<br />
Das Modell von Hofmeister ist sehr stark an herkömmlichen Sprachen wie C oder C++ orientiert. Im Falle von<br />
Java sind einige Spezialisierungen beziehungsweise Anpassungen sinnvoll.<br />
Eine Erleichterung in Java ist der Umstand, dass eine Class-Datei mit genau einer Java-Quelldatei korrespondiert<br />
(und umgekehrt; außer für innere Klassen). Und die Package-Struktur korrespondiert mit der physischen<br />
Dateisystem-Struktur.<br />
Die Bibliotheken in Java heißen JAR-Dateien (Java Archive; im Wesentlichen nichts anderes als ein Zip-Archiv mit<br />
Java-Class-Dateien). Die Class-Dateien werden nicht zu den Bibliotheken gelinkt, sondern lediglich hinzugefügt.<br />
Es gibt in Java eigentlich kein Exectuable wie bei C oder C++. Jede Klasse, die eine statische Methode main hat,<br />
kann zum Hauptprogramm werden. Enthält eine JAR-Datei mindestens eine solche Klasse, kann sie als Executable<br />
betrachtet werden. Eine JAR-Datei (oder auch eine Class-Datei) instantiates eine Runtime Entity, wenn ihr main<br />
aufgerufen wird, oder wenn ein Thread aktiviert wird.
<strong>Software</strong>-Architektur<br />
Code-Blickwinkel: Beispiel<br />
Tabellendarstellung:<br />
Module Source File JAR<br />
dispatcher dispatcher.java server.jar<br />
forwarder forwarder.java server.jar<br />
receiver receiver.java server.jar<br />
. . . . . . . . .<br />
JAR instantiates<br />
server.jar Shop Server<br />
. . . . . .<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 398 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Code-Sicht<br />
Code-Blickwinkel: Beispiel<br />
Code-Blickwinkel: Beispiel<br />
Tabellendarstellung:<br />
Module Source File JAR<br />
dispatcher dispatcher.java server.jar<br />
forwarder forwarder.java server.jar<br />
receiver receiver.java server.jar<br />
. . . . . . . . .<br />
JAR instantiates<br />
server.jar Shop Server<br />
. . . . . .<br />
In der Praxis wird man kaum für die in der Code-Sicht auftretenden Relationen ein UML-Diagramm zeichnen, da es<br />
viel zu viele sind. Einfacher beschreibt man sie durch Tabellen, wie zum Beispiel:<br />
Module Source File JAR<br />
dispatcher dispatcher.java server.jar<br />
forwarder forwarder.java server.jar<br />
receiver receiver.java server.jar<br />
. . . . . . . . .<br />
JAR instantiates<br />
server.jar Shop Server<br />
. . . . . .<br />
Wenn Namenskonventionen existieren (im Falle von Java heißt die Class-Datei, die zu einer Java-Datei<br />
myfile.java gehört, schlicht myfile.class, wenn es sich nicht um eine innere Klasse handelt) müssen nicht alle<br />
Relationen durch Tabellen beschrieben werden.
<strong>Software</strong>-Architektur<br />
Was ist Modularisierung?<br />
Definition<br />
Modularisierung: Dekomposition eines Systems in Module.<br />
Modul: austauschbares Programmteil, das eine geschlossene<br />
Funktionseinheit bildet.<br />
Arbeitspaket: von einer Person oder einer kleinen Gruppe von Entwicklern<br />
entwerfbar, implementierbar, testbar, verstehbar, änderbar, . . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 399 / 634<br />
<strong>Software</strong>-Architektur<br />
Conways Gesetz:<br />
Conways Gesetz:<br />
Die Struktur der <strong>Software</strong> spiegelt die Struktur der Organisation wider.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 405 / 634
<strong>Software</strong>-Architektur<br />
Schnittstellen<br />
Definition<br />
Schnittstelle (allgemein): Teil eines Systems, das dem Austausch von<br />
Informationen, Energie oder Materie mit anderen Systemen dient.<br />
– Wikipedia, die freie Enzyklopädie<br />
Definition<br />
Schnittstelle: Menge der Annahmen, die das Modul über seine Umgebung<br />
macht, sowie jene, die die Umgebung über das Modul macht.<br />
Definition<br />
Syntaktische Schnittstelle: öffentliche Attribute und Methoden mit<br />
deren Signaturen.<br />
Zwei Module sind über ihre Schnittstellen verbunden und damit abhängig.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 406 / 634<br />
<strong>Software</strong>-Architektur<br />
Ein Wort zu Schnittstellen<br />
Rectangle<br />
Figure<br />
+ Draw()<br />
Circle<br />
+ height + radius<br />
+ width<br />
+ Draw()<br />
+ Draw()<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 407 / 634
<strong>Software</strong>-Architektur<br />
Eine offene Schnittstelle<br />
a b s t r a c t c l a s s F i g u r e {<br />
p u b l i c a b s t r a c t v o i d Draw ( ) ;<br />
}<br />
c l a s s C i r c l e e x t e n d s F i g u r e {<br />
p u b l i c v o i d Draw ( ) { } ;<br />
p u b l i c i n t r a d i u s ;<br />
}<br />
c l a s s R e c t a n g l e e x t e n d s F i g u r e {<br />
}<br />
p u b l i c v o i d Draw ( ) { } ;<br />
p u b l i c i n t h e i g h t ;<br />
p u b l i c i n t width ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 408 / 634<br />
<strong>Software</strong>-Architektur<br />
Geheimnisprinzip (Information Hiding) nach Parnas (1972)<br />
Schnittstellen sind ein Kontrakt zwischen:<br />
Verwender:<br />
darf sich nur auf zugesicherte Annahmen verlassen<br />
muss Vorbedingungen einhalten<br />
Anbieter:<br />
muss zugesichertes Verhalten implementieren<br />
darf sich nur auf zugesicherte Vorbedingungen verlassen<br />
Der Kontrakt führt zu einer Kopplung zwischen Verwender und Anbieter.<br />
Schnittstellen werden so entworfen, dass<br />
Kopplung auf das Mindestmaß beschränkt wird;<br />
d.h. die Details, die sich ändern können, werden hinter Schnittstelle<br />
verborgen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 409 / 634
<strong>Software</strong>-Architektur<br />
Programmiersprachenunterstützung<br />
a b s t r a c t c l a s s F i g u r e {<br />
p u b l i c a b s t r a c t v o i d Draw ( ) ;<br />
}<br />
c l a s s C i r c l e e x t e n d s F i g u r e {<br />
p u b l i c v o i d Draw ( ) { } ;<br />
p r i v a t e i n t r a d i u s ;<br />
}<br />
c l a s s R e c t a n g l e e x t e n d s F i g u r e {<br />
}<br />
p u b l i c v o i d Draw ( ) { } ;<br />
p r i v a t e i n t h e i g h t ;<br />
p r i v a t e i n t width ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 410 / 634<br />
<strong>Software</strong>-Architektur<br />
Verwender der Klasse<br />
p u b l i c v o i d Drawing ( F i g u r e A Figure , i n t Times ) {<br />
}<br />
f o r ( i n t i = 0 ; i < Times ; i ++) {<br />
A F i g u r e . Draw ( ) ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 411 / 634
<strong>Software</strong>-Architektur<br />
Klassendiagramm<br />
Rectangle<br />
+ Draw()<br />
Figure<br />
+ Draw()<br />
Circle<br />
+ Draw()<br />
Drawing<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 412 / 634<br />
<strong>Software</strong>-Architektur<br />
Klassendiagramm<br />
Rectangle<br />
+ Draw()<br />
Figure<br />
+ Draw()<br />
Circle<br />
+ Draw()<br />
Drawing<br />
Graphs<br />
Node<br />
+ Draw()<br />
Edge<br />
+ Draw()<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 413 / 634
<strong>Software</strong>-Architektur<br />
Klassendiagramm<br />
Rectangle<br />
+ Draw()<br />
Figure<br />
+ Draw()<br />
Circle<br />
+ Draw()<br />
Drawable<br />
Drawing<br />
Graphs<br />
Node<br />
+ Draw()<br />
Edge<br />
+ Draw()<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 415 / 634<br />
<strong>Software</strong>-Architektur<br />
Schnittstelle als eigenes Sprachkonstrukt<br />
Schnittstelle:<br />
i n t e r f a c e Drawable {<br />
v o i d Draw ( ) ;<br />
}<br />
Schnittstellenverwender:<br />
p u b l i c v o i d Drawing ( Drawable Drawable Object , i n t Times ) {<br />
}<br />
f o r ( i n t i = 0 ; i < Times ; i ++) {<br />
D r a w a b l e O b j e c t . Draw ( ) ;<br />
}<br />
Schnittstellenanbieter:<br />
a b s t r a c t c l a s s F i g u r e implements Drawable {}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 416 / 634
<strong>Software</strong>-Architektur<br />
Zusammenfassung zu Schnittstellen<br />
Schnittstelle ist Kontrakt zwischen Anbieter und Verwender, der die<br />
erlaubten wechselseitigen Annahmen festlegt<br />
Programmiersprachen erlauben die Spezifikation syntaktischer<br />
Eigenschaften von Schnittstellen<br />
moderne Programmiersprachen bieten Schnittstellen als eigenes<br />
Sprachkonstrukt an<br />
nur wenige erlauben die Spezifikation semantischer Eigenschaften<br />
Vor- und Nachbedingungen<br />
weitere Zusicherungen, wie z.B. Speicher- und Zeitkomplexität<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 417 / 634<br />
<strong>Software</strong>-Architektur<br />
Kopplung und Zusammenhalt<br />
Definition<br />
Kopplung: Grad der Abhängigkeit zwischen Modulen.<br />
Definition<br />
Zusammenhalt (Kohärenz): Verwandtschaft der Teile eines Moduls.<br />
Modul A Modul B<br />
Modul A Modul B<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 418 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Architektur<br />
Kopplung und Zusammenhalt<br />
Kopplung und Zusammenhalt<br />
Kopplung und Zusammenhalt<br />
Definition<br />
Kopplung: Grad der Abhängigkeit zwischen Modulen.<br />
Definition<br />
Zusammenhalt (Kohärenz): Verwandtschaft der Teile eines Moduls.<br />
Modul A Modul B<br />
Modul A Modul B<br />
Der Architekt eines Konzertsaals bemüht sich, den Saal so zu bauen, dass die akustische Störung von außen extrem<br />
gering ist, die Hörbarkeit im Saal dagegen extrem hoch. Dem entspricht bei der Arbeit des <strong>Software</strong>-Architekten die<br />
Gliederung in Module so, dass<br />
• die Kopplung (d.h. die Breite und Komplexität der Schnittstellen) zwischen den Modulen möglichst gering,<br />
• der Zusammenhalt (d.h. die Verwandtschaft zwischen den Teilen eines Moduls) möglichst hoch wird.<br />
Das Konzept von Kopplung und Zusammenhalt basiert ursprünglich auf den FORTRAN- und COBOL-Programmen<br />
der frühen 70‘er Jahre. Heute haben wir Sprachen, die uns mehrere Abstraktionsebenen bieten. Dabei streben wir<br />
auf der Modulebene vor allem niedrige Kopplung (bei mäßigem Zusammenhalt), auf der Prozedurebene vor allem<br />
hohen Zusammenhalt (bei erheblicher Kopplung) an.<br />
<strong>Software</strong>-Architektur<br />
Stufen des Zusammenhalts (von schlecht nach gut)<br />
Stufe innerhalb einer Funktion/Moduls betrifft<br />
kein<br />
Zusammenhalt<br />
rein zufällige Zusammenstellung Module<br />
Ähnlichkeit z.B. ähnlicher Zweck, also etwa alle<br />
Matrixoperationen; auch<br />
Fehlerbehandlung<br />
Module<br />
zeitliche Nähe Verwendung zum selben Zeitpunkt, Module,<br />
z.B. Initialisierung, Abschluss Funktionen<br />
gemeinsame Zugriff auf bestimmte Daten, Funktionen,<br />
Daten<br />
exklusiv, z.B. Kalenderpaket<br />
(Systemuhr)<br />
Module<br />
Hersteller / ein Teil erzeugt, was der andere Module,<br />
Verbraucher verwendet<br />
Funktionen<br />
einziges Datum Kapselung einer Datenstruktur, Module,<br />
Zusammenfassung der Operationen Funktionen<br />
einzige Operation Operation, die nicht mehr zerlegbar<br />
ist<br />
Funktionen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 419 / 634
<strong>Software</strong>-Architektur<br />
Stufen der Kopplung (von schlecht nach gut)<br />
Stufe zwischen Funktionen/Modulen betrifft<br />
Einbruch Veränderung des Codes Funktionen<br />
volle<br />
selektive<br />
Öffnung<br />
Funktionskopplung<br />
keine<br />
Kopplung<br />
Öffnung Zugriff auf alle Daten, z.B. auf alle<br />
Attribute einer Klasse<br />
bestimmte Attribute sind zugänglich oder<br />
global durch expliziten Export/Import<br />
(Module)<br />
Funktionen<br />
Module,<br />
Funktionen<br />
nur Funktionsaufruf und Parameter Module<br />
(Funktion)<br />
Es besteht keine logische Beziehung Module<br />
(Zugriff ist syntaktisch unmöglich)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 420 / 634<br />
<strong>Software</strong>-Architektur<br />
Kriterien für einen guten <strong>Software</strong>-Entwurf<br />
Jeder Entwurf ist ein Kompromiss.<br />
Geringe Kopplung zwischen allen Modulen<br />
Hoher Zusammenhalt in allen Funktionen und Modulen<br />
Kriterium der naiven Suche: Jede Einheit sollte einen leicht<br />
erkennbaren Sinn haben.<br />
Abstraktion: Implementierungsdetails verbergen<br />
Kapselung von Dingen, die sich ändern können (Geheimnisprinzip;<br />
Information Hiding)<br />
Etwa gleich große Einheiten (Module, Funktionen). Abweichungen<br />
sollten plausibel sein; generell dürfen einfache Objekte größer sein als<br />
komplizierte.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 421 / 634
<strong>Software</strong>-Architektur<br />
Kriterien für einen guten <strong>Software</strong>-Entwurf (Forts.)<br />
Uniforme Entwurfsstrategie; wenn z.B. eine Schichtenstruktur gewählt<br />
wurde, sollte sie nicht an irgendeiner Stelle korrumpiert sein.<br />
Uniforme Gestaltung der Schnittstellen.<br />
Uniforme Benennung.<br />
Prinzip der Isomorphie zur Realität (Michael Jackson11 ): Die <strong>Software</strong><br />
sollte der Realität strukturell gleichen, damit die Änderungen der<br />
Realität in der <strong>Software</strong> leicht nachvollzogen werden können.<br />
11 Nein, nicht der Michael Jackson.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 422 / 634<br />
<strong>Software</strong>-Architektur<br />
Bewertung von Modularisierung<br />
<strong>Software</strong> Architecture Analysis Method (SAAM) (Kazman u. a. 1996):<br />
1 Lege wichtige Qualitätsaspekte fest<br />
2 Beschreibe alternative Modularisierungen<br />
3 Entwickle Szenarien für die Qualitätsaspekte<br />
4 Spiele die Szenarien durch und bewerte die Modularisierungen<br />
5 Betrachte Wechselwirkungen zwischen den Qualitätsaspekten<br />
6 Fasse die Evaluation zusammen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 423 / 634
<strong>Software</strong>-Architektur<br />
Beispiel: Key Word in Context (KWIC) (Parnas 1972)<br />
westfälischer Friede<br />
Friede<br />
von<br />
zyklische Vertauschung<br />
jeder Zeile<br />
Osnabrück<br />
Bistum Osnabrück<br />
westfälischer Friede<br />
Friede westfälischer<br />
Friede von Osnabrück<br />
Osnabrück Friede<br />
von Osnabrück<br />
Bistum Osnabrück<br />
Osnabrück Bistum<br />
Sortierung der<br />
Zeilen<br />
von<br />
Friede<br />
Bistum Osnabrück<br />
Friede von Osnabrück<br />
Friede westfälischer<br />
Osnabrück Bistum<br />
Osnabrück Friede<br />
von Osnabrück<br />
von<br />
Friede<br />
westfälischer Friede<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 426 / 634<br />
<strong>Software</strong>-Architektur<br />
Betrachtete Qualitätsaspekte und Szenarien<br />
Änderbarkeit<br />
Eingabeformat ändert sich<br />
größere Dateien müssen verarbeitet werden<br />
riesige Dateien müssen verarbeitet werden<br />
separate Entwickelbarkeit<br />
verteile Arbeit an Entwicklungsteams<br />
Performanz<br />
berechne KWIC für FB3-Webseiten<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 427 / 634
<strong>Software</strong>-Architektur<br />
Ablauf<br />
1 Eingabe der Daten<br />
2 Interne Speicherung der Daten<br />
3 Indizierung (Zeile, Wortanfang, Wortende)<br />
W e s t f ä l i s c h e r F r i e d e<br />
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20<br />
B i s t u m O s n a b r ü c k<br />
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16<br />
F r i e d e v o n O s n a b r ü c k<br />
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20<br />
4 Zyklische Rotation der Indizierung<br />
5 Sortierung der Indizierung<br />
6 Ausgabe der Indizierung<br />
(1, 1, 13)<br />
(1, 15, 20)<br />
(2, 1, 6)<br />
(2, 8, 16)<br />
(3, 1, 6)<br />
(3, 8, 10)<br />
(3, 12, 20)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 428 / 634<br />
<strong>Software</strong>-Architektur<br />
Erste Modularisierung (ablauforientiert)<br />
Eingabe<br />
<br />
<br />
<br />
Input<br />
<br />
1.<br />
<br />
Master Control<br />
<br />
<br />
Shifter<br />
<br />
2.<br />
<br />
<br />
3. 4.<br />
<br />
<br />
Sorter<br />
Wissen über Eingabeformat<br />
<br />
characters index sorted_index<br />
Wissen über internes Datenformat<br />
Wissen, dass alle Daten im Speicher sind<br />
<br />
<br />
<br />
Output<br />
<br />
Ausgabe<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 430 / 634
<strong>Software</strong>-Architektur<br />
Qualitäten<br />
Änderbarkeit:<br />
betroffene Module<br />
Input Shifter Sorter Output<br />
Eingabeformat ×<br />
größere Dateien × × × ×<br />
riesige Dateien × × × ×<br />
Getrennte Entwicklung:<br />
alle Datenstrukturen müssen bekannt sein<br />
komplexe Beschreibung notwendig<br />
Performanz:<br />
schneller Zugriff auf globale Variablen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 431 / 634<br />
<strong>Software</strong>-Architektur<br />
Geheimnisprinzip (Information Hiding) (Parnas 1972)<br />
Definition<br />
Geheimnisprinzip: Module verbergen alle<br />
Implementierungsentscheidungen, die sich ändern können, hinter einer<br />
abstrakten Schnittstelle.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 432 / 634
<strong>Software</strong>-Architektur<br />
Zweite Modularisierung (objektbasiert)<br />
. . . nach dem Geheimnisprinzip (Information Hiding) (Parnas 1972)<br />
<br />
Master Control<br />
Eingabe <br />
<br />
<br />
Ausgabe<br />
Input<br />
-Eingabeformat<br />
<br />
<br />
<br />
Lines<br />
1.<br />
<br />
Indexer<br />
-zyklisches Schieben<br />
<br />
-int. Speicherung<br />
+add(c:char)<br />
+ Iteration()<br />
+get(l:linenr,w:wordnr)<br />
2.<br />
3.<br />
4.<br />
<br />
Sorter<br />
-Sortieralg.<br />
<br />
<br />
<br />
Index<br />
<br />
-Indexstruktur<br />
+add(l:linenr,w:wordnr)<br />
+ Iteration()<br />
+swap(p1:pos,p2:pos)<br />
Output<br />
-Ausgabeformat<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 433 / 634<br />
<strong>Software</strong>-Architektur<br />
Qualitäten<br />
<br />
Änderbarkeit:<br />
betroffene Module<br />
Input Lines Index Indexer Sorter Output<br />
Eingabeformat ×<br />
größere Dateien ×<br />
riesige Dateien ×<br />
Getrennte Entwicklung:<br />
nur Schnittstellen müssen bekannt sein<br />
Performanz:<br />
zusätzliche Aufrufe<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 434 / 634
<strong>Software</strong>-Architektur<br />
Abschließendes Wort zur Modularisierung<br />
Es gibt viele Modularisierungsmöglichkeiten.<br />
Jede ist gut für einen Zweck, schlecht für einen anderen.<br />
Mit gängigen Programmiersprachen muss man sich auf eine festlegen.<br />
Definition<br />
Querschnittsbelange (Cross-Cutting Concerns):<br />
Implementierungsaspekte, die eine große Zahl von Modulen betreffen.<br />
Beispiele: Fehlerbehandlung, Logging-Mechanismen, Vermeidung von<br />
Speicherlöchern etc.<br />
Aspektorientierte Programmiersprachen erlauben eine separate<br />
Beschreibung dieser Aspekte und ein ” Einweben“ des Aspekts in das<br />
System.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 435 / 634<br />
<strong>Software</strong>-Architektur<br />
Wiederholungsfragen I<br />
Was ist <strong>Software</strong>-Architektur und welche Bedeutung hat sie?<br />
Welche Faktoren spielen eine Rolle für die Architektur?<br />
Erläutern Sie den Prozess von Hofmeister et al. zum Entwurf einer<br />
Architektur (globale Analyse, Faktoren, Strategien,<br />
Blickwinkelentwurf).<br />
Was ist ein Architekturblickwinkel bzw. eine Architektursicht?<br />
Erläutern Sie die Blickwinkel von Hofmeister et al. Wer hat jeweils ein<br />
Interesse an diesen Blickwinkeln?<br />
Warum verschiedene Blickwinkel? Warum gerade diese vier<br />
Blickwinkel?<br />
Wie lautet das Gesetz von Conway?<br />
Was ist Modularisierung?<br />
Was ist eine Schnittstelle?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 436 / 634
<strong>Software</strong>-Architektur<br />
Wiederholungsfragen II<br />
Was ist das Prinzip des Information-Hidings?<br />
Was versteht man unter Kopplung und Zusammenhalt?<br />
Nennen Sie Regeln für einen guten Architekturentwurf.<br />
Wie lässt sich Architektur prüfen? Erläutern Sie insbesondere SAAM.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 437 / 634<br />
<strong>Software</strong>-Architektur<br />
Weiterführende Literatur<br />
Bass u. a. (2003) geben eine gute Übersicht zu allen relevanten<br />
Aspekten von <strong>Software</strong>-Architektur<br />
Hofmeister u. a. (2000) beschreiben eine Methode für den<br />
Architekturentwurf, die auf vier verschiedenen Architektursichten<br />
beruht<br />
Shaw und Garlan (1996) geben eine Einführung in<br />
<strong>Software</strong>-Architektur und beschreiben einige Architekturstile bzw.<br />
-muster<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 438 / 634
Architekturstile und Entwurfsmuster<br />
Architekturstile und Entwurfsmuster<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
<strong>Projekt</strong><br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 439 / 634<br />
Vorgehen<br />
Architekturstile und Entwurfsmuster<br />
Lernziele<br />
Inhalt<br />
Zeitplan<br />
Planung und Aufwand im SWP 05/06<br />
Risiken<br />
Risiko-Management<br />
Erfahrungen aus dem SWP 05/06<br />
Allgemeine Risiken in einem <strong>Software</strong>-<strong>Projekt</strong><br />
Verstehen, Wiederholungsfragen was Entwurfsmuster und Architekturstile sind<br />
Qualitäten Lernziele und Einsetzbarkeit der Entwurfsmuster/Architekturstile<br />
kennen Herausforderungen<br />
Aktivitäten<br />
Ist-Analyse<br />
Erhebungstechniken<br />
Befragung<br />
Beobachtung<br />
Soll-Analyse: Prototyping<br />
Zusammenfassung der Techniken<br />
Anforderungsspezifikation<br />
Bedeutung<br />
Anzustrebende Eigenschaften<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 440 / 634
Architekturstile und Entwurfsmuster<br />
Kontext<br />
Analyse<br />
Architektur<br />
Entwurf<br />
Datenstrukturen<br />
und Algorithmen<br />
Implemen−<br />
tierung<br />
Test<br />
Wartung<br />
& Evolution<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 441 / 634<br />
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster<br />
Each pattern describes a problem which occurs over and over<br />
again in our environment, and then describes the core of the<br />
solution to that problem, in such a way that you can use this<br />
solution a million times over, without ever doing it the same way<br />
twice.<br />
Christopher Alexander (Architekt und Mathematiker),<br />
“A pattern language”, 1977.<br />
Definition<br />
Entwurfsmuster: ” Musterlösung“ für ein wiederkehrendes<br />
Entwurfsproblem.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 442 / 634
Architekturstile und Entwurfsmuster<br />
Bestandteile eines Entwurfsmusters<br />
Name (kurz und beschreibend)<br />
Problem: Was das Entwurfsmuster löst<br />
Lösung: Wie es das Problem löst<br />
Konsequenzen: Folgen und Kompromisse des Musters<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 443 / 634<br />
Architekturstile und Entwurfsmuster<br />
Beispielentwurfsproblem<br />
Mantel<br />
+entfernen()<br />
1<br />
0..1<br />
Artikel<br />
+entfernen()<br />
Rad<br />
+entfernen()<br />
0..1<br />
1..2<br />
Laufrad<br />
+entfernen()<br />
0..1<br />
0..1<br />
1<br />
1<br />
Rahmen<br />
+entfernen()<br />
Felge<br />
+entfernen()<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 444 / 634
Architekturstile und Entwurfsmuster<br />
Beschreibung von Mustern (Gamma u. a. 2003) I<br />
Name: Composite<br />
Zweck: Teil-von-Hierarchie mit einheitlicher Schnittstelle beschreiben<br />
(überall wo ein Ganzes benutzt werden kann, kann auch ein Teil<br />
benutzt werden und umgekehrt)<br />
Motivation: . . . Einführung anhand eines konkreten Beispiels. . .<br />
Anwendbarkeit:<br />
wenn Teil-von-Beziehung beschrieben werden soll<br />
uniforme Schnittstelle für alle Elemente der Hierarchie<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 445 / 634<br />
Architekturstile und Entwurfsmuster<br />
Beschreibung von Mustern (Gamma u. a. 2003) II<br />
Struktur:<br />
Client<br />
Leaf<br />
+operation()<br />
operation()<br />
myElem<br />
+operation()<br />
Component<br />
+operation()<br />
for each c in children<br />
c.operation()<br />
spezifische<br />
Erweiterungen<br />
children<br />
Composite<br />
+operation()<br />
+add(component)<br />
+remove(component)<br />
+getChild(int)<br />
myComp<br />
+operation()<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 446 / 634
Architekturstile und Entwurfsmuster<br />
Beschreibung von Mustern (Gamma u. a. 2003) I<br />
Teilnehmer:<br />
Client:<br />
manipuliert Objekte der Komponenten nur durch die Schnittstelle von<br />
Composite<br />
Component:<br />
deklariert einheitliche Schnittstelle<br />
(optional) implementiert Standardverhalten<br />
p u b l i c a b s t r a c t c l a s s Component {<br />
p u b l i c a b s t r a c t v o i d o p e r a t i o n ( ) ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 447 / 634<br />
Architekturstile und Entwurfsmuster<br />
Beschreibung von Mustern (Gamma u. a. 2003) II<br />
Leaf :<br />
repräsentiert atomare Komponente<br />
definiert Verhalten für atomare Komponenten<br />
p u b l i c a b s t r a c t c l a s s L e a f e x t e n d s Component {<br />
p u b l i c a b s t r a c t v o i d o p e r a t i o n ( ) ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 448 / 634
Architekturstile und Entwurfsmuster<br />
Beschreibung von Mustern (Gamma u. a. 2003) III<br />
Composite:<br />
definiert Standardverhalten für zusammengesetzte Komponenten<br />
speichert Teile<br />
implementiert Operationen zur Verwaltung von Teilen<br />
import j a v a . u t i l . L i s t ;<br />
import j a v a . u t i l . A r r a y L i s t ;<br />
p u b l i c a b s t r a c t c l a s s Composite e x t e n d s Component {<br />
p r i v a t e L i s t c h i l d r e n<br />
= new A r r a y L i s t ();<br />
p u b l i c v o i d o p e r a t i o n ( ) {<br />
f o r ( Component c : c h i l d r e n ) c . o p e r a t i o n ( ) ;<br />
}<br />
p u b l i c v o i d add ( Component c ) { c h i l d r e n . add ( c ) ; }<br />
p u b l i c v o i d remove ( Component c ) { c h i l d r e n . remove ( c ) ; }<br />
p u b l i c Component g e t C h i l d ( i n t i ) { r e t u r n c h i l d r e n . g e t ( i ) ; }<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 449 / 634<br />
Architekturstile und Entwurfsmuster<br />
Beschreibung von Mustern (Gamma u. a. 2003) I<br />
Kollaborationen:<br />
Clients benutzen Component-Schnittstelle<br />
falls Empfänger ein Leaf ist, antwortet es direkt<br />
falls Empfänger ein Composite ist, wird die Anfrage an Teile<br />
weitergeleitet (möglicherweise mit weiteren eigenen Operationen vor<br />
und/oder nach der Weiterleitung)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 450 / 634
Architekturstile und Entwurfsmuster<br />
Beschreibung von Mustern (Gamma u. a. 2003) II<br />
Konsequenzen:<br />
zweiteilt die Klassenhierarchie in Leaf und Composite mit<br />
einheitlicher Schnittstelle<br />
uniforme Verwendung auf Seiten des Clients<br />
neue Komponenten können leicht hinzugefügt werden<br />
könnte die Struktur unnötig allgemein machen (dynamische versus<br />
statische Typisierung)<br />
Implementierung: . . . Hinweise zur Implementierung . . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 451 / 634<br />
Architekturstile und Entwurfsmuster<br />
Dynamische versus statische Typisierung<br />
Mantel<br />
+entfernen()<br />
Verwender<br />
Mantel<br />
+entfernen()<br />
Blatt<br />
+entfernen()<br />
+hinzufügen(Artikel)<br />
Felge<br />
+entfernen()<br />
1<br />
0..1<br />
Artikel<br />
+entfernen()<br />
Rad<br />
+entfernen()<br />
0..1<br />
1..2<br />
Laufrad<br />
+entfernen()<br />
Artikel<br />
0..1<br />
0..1<br />
+entfernen()<br />
+hinzufügen(Artikel)<br />
+alleTeile(): list of Artikel<br />
Rahmen<br />
+entfernen()<br />
Laufrad<br />
+entfernen()<br />
1<br />
1<br />
Behälter<br />
+entfernen()<br />
Rahmen<br />
+entfernen()<br />
Felge<br />
+entfernen()<br />
Teile<br />
Rad<br />
+entfernen()<br />
for each t in Teile<br />
t.entfernen()<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 452 / 634
Architekturstile und Entwurfsmuster<br />
Kategorien von Entwurfsmustern<br />
Erzeugungsmuster<br />
betreffen die Erzeugung von Objekten<br />
Beispiel: Factory Method<br />
Strukturelle Muster:<br />
betreffen Komposition von Klassen und Objekten<br />
Beispiel: Composite<br />
Verhaltensmuster:<br />
betreffen Interaktion und Verantwortlichkeiten<br />
Beispiel: Observer<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 453 / 634<br />
Architekturstile und Entwurfsmuster<br />
Fahrradladenbeispiel: Erweiterung für andere Domänen<br />
Anforderungen:<br />
Artikeldaten sollen von einer Datei gelesen werden können<br />
zukünftig sollen andere Domänen unterstützt werden (Fahrrad,<br />
Computer und Klettern)<br />
die Objekte dieser Domänen sind unterschiedlich<br />
notwendige Anpassungen sollen einfach realisiert werden können<br />
Lösungsstrategien:<br />
die Klassen der Benutzungsschnittstelle beziehen sich nur auf die<br />
Schnittstelle der abstrakten Klasse Artikel<br />
Datei hat gleiche Syntax für alle Domänen (nur die Inhalte variieren)<br />
die Artikel werden beim Einlesen der Datei als Objekte erzeugt<br />
→ aber der Leser muss doch die Konstruktoren der Objekte kennen, oder<br />
was?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 454 / 634
Architekturstile und Entwurfsmuster<br />
Lösungsstrategie<br />
GUI<br />
Artikel<br />
+ Preis()<br />
ComputerArtikel FahrradArtikel<br />
≪create≫<br />
Rahmen<br />
Felge<br />
Leser<br />
+ lies(dateiname)<br />
≪create≫ ≪create≫<br />
id=datei.liesId()<br />
s.FabrikMethode(id)<br />
FahrradSchöpfer<br />
ArtikelSchöpfer<br />
+ Artikel FabrikMethode(id)<br />
+FabrikMethode(id)<br />
if (id == ”rahmen”)<br />
return new Rahmen<br />
if (id == ”felge”)<br />
return new Felge<br />
ComputerSchöpfer<br />
+FabrikMethode(id)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 455 / 634<br />
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster: Factory Method<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 456 / 634
Architekturstile und Entwurfsmuster<br />
Anwendbarkeit<br />
eine Klasse weiß in manchen Fällen nicht im Voraus, von welcher<br />
Klasse ein zu erzeugendes Objekt sein soll<br />
die konkreten Unterklassen einer Klasse sollen dies entscheiden<br />
Verantwortlichkeit wird an Unterklassen delegiert, und das Wissen<br />
über die Unterklasse, an die delegiert wird, soll nur an einem Punkt<br />
vorhanden sein<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 457 / 634<br />
Architekturstile und Entwurfsmuster<br />
Teilnehmer<br />
Product<br />
deklariert die Schnittstelle von Objekten, die die Fabrikmethode<br />
erschafft<br />
ConcreteProduct<br />
implementiert die Product-Schnittstelle<br />
Creator<br />
deklariert die Fabrikmethode<br />
(optional) implementiert eine Standardfabrikmethode, die ein<br />
spezifisches konkretes Objekt erzeugt<br />
kann Fabrikmethode aufrufen, um ein Product-Objekt zu erzeugen<br />
ConcreteCreator<br />
überschreibt die Fabrikmethode, um konkretes Product-Objekt zu<br />
erschaffen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 458 / 634
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster Observer<br />
Anwendbarkeit<br />
Komponenten hängen von anderen Komponenten ab<br />
Änderung der einen Komponente muss Änderung der anderen nach<br />
sich ziehen<br />
Komponenten sollen lose gekoppelt sein: Komponente kennt seine<br />
Abhängigen nicht im Voraus (zur Übersetzungszeit)<br />
Lösungsstrategie<br />
Abhängige registrieren sich bei Komponente<br />
Komponente informiert alle registrierten Abhängigen über<br />
Zustandsänderung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 459 / 634<br />
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster Observer: Struktur<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 460 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster Observer<br />
Entwurfsmuster Observer: Struktur<br />
Man beachte die Beziehung zu den Architekturmustern Blackboard und Model-View-Controller.<br />
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster Observer: Teilnehmer Subject<br />
Entwurfsmuster Observer: Struktur<br />
kennt seine Observer (zur Laufzeit)<br />
kann beliebig viele Observer haben<br />
stellt Schnittstelle zur Verfügung, um Observer zu registrieren und<br />
abzutrennen<br />
import j a v a . u t i l . L i s t ;<br />
import j a v a . u t i l . A r r a y L i s t ;<br />
p u b l i c a b s t r a c t c l a s s S u b j e c t {<br />
p r i v a t e L i s t o b s e r v e r s<br />
= new A r r a y L i s t ();<br />
p u b l i c v o i d Attach ( O b s e r v e r c ) { o b s e r v e r s . add ( c ) ; }<br />
p u b l i c v o i d Detach ( O b s e r v e r c ) { o b s e r v e r s . remove ( c ) ; }<br />
p u b l i c v o i d N o t i f y ( ) {<br />
f o r ( O b s e r v e r o : o b s e r v e r s ) o . update ( ) ;<br />
}<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 461 / 634
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster Observer: Teilnehmer Observer<br />
deklariert Schnittstelle für die Update-Nachricht<br />
p u b l i c a b s t r a c t c l a s s O b s e r v e r {<br />
p u b l i c a b s t r a c t v o i d update ( ) ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 462 / 634<br />
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster Observer: Teilnehmer ConcreteSubject<br />
hat einen Zustand, der ConcreteObserver interessiert<br />
sendet Bekanntmachung via Notify(), wenn sich Zustand ändert<br />
(SetState)<br />
p u b l i c c l a s s Ampel e x t e n d s S u b j e c t {<br />
}<br />
p r i v a t e b o o l e a n r o t = f a l s e ;<br />
p u b l i c b o o l e a n i s t r o t ( ) { r e t u r n r o t ; }<br />
p u b l i c v o i d s c h a l t e n ( ) {<br />
s e t ( ! r o t ) ;<br />
}<br />
p r i v a t e v o i d s e t ( b o o l e a n newValue ) {<br />
r o t = newValue ;<br />
N o t i f y ( ) ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 463 / 634
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster Observer: Teilnehmer ConcreteObserver<br />
kennt ConcreteSubject-Objekt<br />
verarbeitet Zustand dieses Subjects<br />
implementiert Update, um auf veränderten Zustand zu reagieren<br />
p u b l i c c l a s s Auto e x t e n d s O b s e r v e r {<br />
p r i v a t e Ampel ampel ;<br />
p r i v a t e b o o l e a n g a s p e d a l = f a l s e ;<br />
p u b l i c v o i d update ( ) {<br />
i f ( ! ampel . i s t r o t ( ) ) f a h r e n ( ) ;<br />
}<br />
p u b l i c v o i d f a h r e n ( ) {<br />
ampel . Detach ( t h i s ) ;<br />
g a s p e d a l = t r u e ;<br />
}<br />
p u b l i c v o i d stoppen ( Ampel a ) {<br />
ampel = a ;<br />
ampel . Attach ( t h i s ) ;<br />
g a s p e d a l = f a l s e ;<br />
}<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 464 / 634<br />
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster Observer: Konsequenzen<br />
abstrakte Kopplung zwischen Subject und Observer<br />
unterstützt Rundfunk (Broadcast)<br />
unerwartete Updates, komplizierter Kontrollfluss<br />
viel Nachrichtenverkehr, auch dann wenn sich ein irrelevanter Aspekt<br />
geändert hat<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 465 / 634
Architekturstile und Entwurfsmuster<br />
Entwurfsmuster Observer: Verfeinerungen<br />
Push-Modell<br />
Subject sendet detaillierte Beschreibung der Änderung<br />
→ umfangreiches Update<br />
→ vermeidet GetState(), aber nicht Update()<br />
Pull-Modell<br />
Subject sendet minimale Beschreibung der Änderung<br />
→ Observer fragt gegebenfalls die Details nach<br />
→ erfordert weitere Nachrichten, um Details abzufragen<br />
Explizite Interessen<br />
Observers melden Interesse an spezifischem Aspekt an; Aspekt wird<br />
zusätzlicher Parameter von Update<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 466 / 634<br />
Architekturstile und Entwurfsmuster<br />
Architekturstile<br />
Definition<br />
Architekturstil: beschreibt eine Familie von Architekturen/Systeme als<br />
ein Muster der strukturellen Organisation durch<br />
ein Vokabular (Komponenten- und Konnektorentypen)<br />
und eine Menge von Einschränkungen, wie Komponenten und<br />
Konnektoren verbunden werden dürfen.<br />
Synonyme: Architekturmuster oder Architekturidiom.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 467 / 634
Architekturstile und Entwurfsmuster<br />
Architekturstil: Schichtung<br />
Netzwerk<br />
Nutzungsoberfläche<br />
Anwendungslogik<br />
Datenhaltung Utilities<br />
System−<strong>Software</strong><br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 468 / 634<br />
Architekturstile und Entwurfsmuster<br />
Architekturstil: Schichtung I<br />
Vokabular:<br />
Komponenten: Module und Schichten<br />
Konnektoren: Use-Beziehung<br />
Struktur:<br />
Module sind eindeutig einer Schicht zugeordnet<br />
Module einer Schicht dürfen nur auf Module derselben und der direkt<br />
darunter liegenden Schicht zugreifen<br />
Ausführungsmodell:<br />
Aufruf von Methoden tieferer Schichten<br />
Datenfluss in beide Richtungen (von der unteren Schicht zur oberen<br />
durch Rückgabeparameter)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 469 / 634
Architekturstile und Entwurfsmuster<br />
Architekturstil: Schichtung II<br />
Vorteile:<br />
Schicht implementiert virtuelle Maschine, deren Implementierung leicht<br />
ausgetauscht werden kann, ohne dass höhere Schichten geändert<br />
werden müssen<br />
Nachteile:<br />
höherer Aufwand durch das ” Durchreichen“ von Information<br />
Redundanz durch Dienste tieferer Schichten, die in hohen Schichten<br />
benutzt und auf allen Ebenen dazwischen repliziert werden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 470 / 634<br />
Architekturstile und Entwurfsmuster<br />
Anforderungen<br />
Sättel: 12%<br />
Rahmen: 4%<br />
Felgen: 23%<br />
Mäntel: 43%<br />
Sonstige: 18%<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 471 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Architekturstile und Entwurfsmuster<br />
Architekturstil Model-View-Controller<br />
Anforderungen<br />
Anforderungen<br />
Sättel: 12%<br />
Rahmen: 4%<br />
Felgen: 23%<br />
Mäntel: 43%<br />
Sonstige: 18%<br />
Unterschiedliche Diagrammarten stellen statistische Daten über die nachgefragten Artikel dar. Die Diagramme<br />
müssen alle konsistent zu den aktuellen Daten sein. Neue Diagramme sollen leicht hinzugefügt werden können.<br />
Architekturstile und Entwurfsmuster<br />
Model-View-Controller (Buschmann u. a. 1996)<br />
4. call service<br />
GUI<br />
Controller<br />
− akzeptiert Benutzer−<br />
eingaben<br />
− übersetzt Eingaben<br />
in Nachrichten an<br />
Model (Fachlogik) bzw.<br />
an View (Anzeige)<br />
Subject<br />
2. display<br />
Model<br />
Observer<br />
update<br />
View<br />
− implementiert<br />
Fachlogik<br />
− registriert Views<br />
und Controllers<br />
− informiert Observer<br />
über Änderung<br />
− visualisiert Informationen<br />
über Model<br />
− holt sich Information<br />
vom Model<br />
1. register<br />
5. update<br />
3. getData<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 472 / 634
Architekturstile und Entwurfsmuster<br />
Model-View-Controller Beispiel<br />
Ein Model: Wert in festem Bereich<br />
ProgressView<br />
SliderView<br />
Ein Controller: Verschiebung in SliderView verändert Model<br />
2009-02-09<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 473 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
Architekturstile und Entwurfsmuster<br />
Architekturstil Model-View-Controller<br />
Model-View-Controller Beispiel<br />
Dieses Beispiel und der Code dazu stammen von Thilo Mende. Ihm gilt mein Dank.<br />
Model-View-Controller Beispiel<br />
Ein Model: Wert in festem Bereich<br />
ProgressView<br />
SliderView<br />
Ein Controller: Verschiebung in SliderView verändert Model
Architekturstile und Entwurfsmuster<br />
Beispiel-Model: Zustand<br />
1 import j a v a . u t i l . A r r a y L i s t ;<br />
2 import j a v a . u t i l . L i s t ;<br />
3 import j a v a x . swing . e v e n t . ChangeEvent ;<br />
4 import j a v a x . swing . e v e n t . C h a n g e L i s t e n e r ;<br />
5<br />
6 p u b l i c c l a s s Model {<br />
7<br />
8 // W e r t e b e r e i c h :<br />
9 p r i v a t e f i n a l i n t min = 0 ; // u n t e r e Grenze<br />
10 p r i v a t e f i n a l i n t max = 1 0 0 ; // o b e r e Grenze<br />
11<br />
12 // Zustand<br />
13 p r i v a t e i n t v a l u e = 5 0 ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 474 / 634<br />
Architekturstile und Entwurfsmuster<br />
Beispiel-Model: Oberver-Behandlung<br />
1 // a l l e O b s e r v e r<br />
2 p r i v a t e L i s t o b s e r v e r s ;<br />
3<br />
4 // K o n t r u k t o r<br />
5 p u b l i c Model ( ) {<br />
6 o b s e r v e r s = new A r r a y L i s t ();<br />
7 }<br />
8<br />
9 // neuen O b s e r v e r r e g i s t r i e r e n<br />
10 p u b l i c v o i d a d d C h a n g e L i s t e n e r ( C h a n g e L i s t e n e r o b s e r v e r ) {<br />
11 o b s e r v e r s . add ( o b s e r v e r ) ;<br />
12 }<br />
13<br />
14 // B e n a c h r i c h t i g u n g a l l e r O b s e r v e r ;<br />
15 // a u f z u r u f e n b e i a l l e n Zustandsänderungen<br />
16 p r i v a t e v o i d N o t i f y ( ) {<br />
17 f o r ( C h a n g e L i s t e n e r o b s e r v e r : o b s e r v e r s ){<br />
18 o b s e r v e r . stateChanged ( new ChangeEvent ( t h i s ) ) ;<br />
19 }<br />
20 }<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 475 / 634
Architekturstile und Entwurfsmuster<br />
Beispiel-Model: Setter und Getter<br />
1 p u b l i c i n t getMin ( ) { r e t u r n min ; }<br />
2<br />
3 p u b l i c i n t getMax ( ) { r e t u r n max ; }<br />
4<br />
5 p u b l i c i n t g e t V a l u e ( ) { r e t u r n v a l u e ; }<br />
6<br />
7 p u b l i c v o i d s e t V a l u e ( i n t v a l u e ) {<br />
8 i f ( v a l u e < min ){<br />
9 t h i s . v a l u e = min ;<br />
10 } e l s e i f ( v a l u e > max){<br />
11 t h i s . v a l u e = max ;<br />
12 } e l s e {<br />
13 t h i s . v a l u e = v a l u e ;<br />
14 }<br />
15 t h i s . N o t i f y ( ) ;<br />
16 // Zustand hat s i c h g e ä n d e r t<br />
17 }<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 476 / 634<br />
Architekturstile und Entwurfsmuster<br />
Beispiel-Controller<br />
1 p u b l i c c l a s s C o n t r o l l e r {<br />
2<br />
3 p r i v a t e Model model ; // das Model des C o n t r o l l e r s<br />
4<br />
5 // I n d i e s e r V a r i a n t e kennt d e r C o n t r o l l e r s e i n e<br />
6 // View n i c h t ; d i e A s s o z i a t i o n von View und C o n t r o l l e r<br />
7 // w i r d vom Hauptprogramm e t a b l i e r t<br />
8<br />
9 p u b l i c C o n t r o l l e r ( Model model ) {<br />
10 t h i s . model = model ;<br />
11 }<br />
12<br />
13 p u b l i c v o i d s e t V a l u e ( i n t v a l u e ) {<br />
14 model . s e t V a l u e ( v a l u e ) ;<br />
15 }<br />
16 }<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 477 / 634
Architekturstile und Entwurfsmuster<br />
Beispiel-ProgressView I<br />
1 import j a v a x . swing . J P r o g r e s s B a r ;<br />
2 import j a v a x . swing . e v e n t . ChangeEvent ;<br />
3 import j a v a x . swing . e v e n t . C h a n g e L i s t e n e r ;<br />
4<br />
5 p u b l i c c l a s s P r o g r e s s V i e w e x t e n d s J P r o g r e s s B a r<br />
6 implements C h a n g e L i s t e n e r {<br />
7<br />
8 p r i v a t e C o n t r o l l e r c o n t r o l l e r ; // View kennt C o n t r o l l e r<br />
9 p r i v a t e Model my model ;<br />
10<br />
11 p u b l i c P r o g r e s s V i e w ( C o n t r o l l e r c o n t r o l l e r , Model my model ){<br />
12 s u p e r (VERTICAL ) ;<br />
13 t h i s . c o n t r o l l e r = c o n t r o l l e r ;<br />
14 t h i s . my model = my model ;<br />
15<br />
16 // Zustand von Model d a r s t e l l e n :<br />
17 t h i s . s e t V a l u e ( my model . g e t V a l u e ( ) ) ;<br />
18<br />
19 // R e g i s t r i e r u n g b e i Model<br />
20 my model . a d d C h a n g e L i s t e n e r ( t h i s ) ;<br />
21 }<br />
Rainer Koschke (Uni <strong>Bremen</strong>)<br />
22<br />
Architekturstile und Entwurfsmuster<br />
<strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 478 / 634<br />
23 // R e d e f i n i t i o n ; e r e r b t<br />
24 Beispiel-ProgressView // e n t s p r i c h t update II<br />
von C h a n g e L i s t e n e r ;<br />
25 p u b l i c v o i d stateChanged ( ChangeEvent arg0 ) {<br />
26 s y n c h r o n i z e d ( t h i s ){<br />
27 t h i s . s e t V a l u e ( my model . g e t V a l u e ( ) ) ; }<br />
28 }<br />
29 }<br />
1 // R e d e f i n i t i o n ; e r e r b t von C h a n g e L i s t e n e r ;<br />
2 // e n t s p r i c h t update<br />
3 p u b l i c v o i d stateChanged ( ChangeEvent arg0 ) {<br />
4 s y n c h r o n i z e d ( t h i s ){<br />
5 t h i s . s e t V a l u e ( my model . g e t V a l u e ( ) ) ; }<br />
6 }<br />
7<br />
8 } // Ende P r o g r e s s V i e w<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 479 / 634
Architekturstile und Entwurfsmuster<br />
Beispiel-SliderView I<br />
1 import j a v a x . swing . J S l i d e r ;<br />
2 import j a v a x . swing . e v e n t . ChangeEvent ;<br />
3 import j a v a x . swing . e v e n t . C h a n g e L i s t e n e r ;<br />
4<br />
5 p u b l i c c l a s s S l i d e r V i e w e x t e n d s J S l i d e r<br />
6 implements C h a n g e L i s t e n e r {<br />
7 p r i v a t e C o n t r o l l e r m y c o n t r o l l e r ; // View kennt C o n t r o l l e r<br />
8 p r i v a t e Model my model ;<br />
9<br />
10 // R e d e f i n i t i o n ; e r e r b t von C h a n g e L i s t e n e r ;<br />
11 // e n t s p r i c h t update<br />
12 p u b l i c v o i d stateChanged ( ChangeEvent arg0 ) {<br />
13 t h i s . s e t V a l u e ( my model . g e t V a l u e ( ) ) ;<br />
14 }<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 480 / 634<br />
Architekturstile und Entwurfsmuster<br />
Beispiel-SliderView II<br />
1 // K o n s t r u k t o r<br />
2 p u b l i c S l i d e r V i e w ( f i n a l C o n t r o l l e r c o n t r o l l e r , Model model ) {<br />
3 s u p e r ( model . getMin ( ) , model . getMax ( ) , model . g e t V a l u e ( ) ) ;<br />
4 t h i s . my model = model ;<br />
5 t h i s . m y c o n t r o l l e r = c o n t r o l l e r ;<br />
6<br />
7 // R e g i s t r i e r u n g b e i Model<br />
8 model . a d d C h a n g e L i s t e n e r ( t h i s ) ;<br />
9<br />
10 // Zustand von Model d a r s t e l l e n :<br />
11 t h i s . a d d C h a n g e L i s t e n e r ( new C h a n g e L i s t e n e r ( ) {<br />
12 p u b l i c v o i d stateChanged ( ChangeEvent arg0 ) {<br />
13 i f ( ! g e t V a l u e I s A d j u s t i n g ( ) ) {<br />
14 m y c o n t r o l l e r . s e t V a l u e ( g e t V a l u e ( ) ) ;<br />
15 }<br />
16 }<br />
17 } ) ;<br />
18 }<br />
19 } // Ende von S l i d e r V i e w<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 481 / 634
Architekturstile und Entwurfsmuster<br />
Beispiel-Hauptprogramm I<br />
1 import j a v a . awt . BorderLayout ;<br />
2 import j a v a x . swing . JFrame ;<br />
3 import j a v a x . swing . WindowConstants ;<br />
4<br />
5 p u b l i c c l a s s MVCDemo {<br />
6 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {<br />
7 MVCDemo demo = new MVCDemo ( ) ;<br />
8 }<br />
9 }<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 482 / 634<br />
Architekturstile und Entwurfsmuster<br />
Beispiel-Hauptprogramm II<br />
1 p u b l i c MVCDemo( ) {<br />
2 Model model = new Model ( ) ;<br />
3<br />
4 // A s s o z i a t i o n d e s s e l b e n C o n t r o l l e r s mit b e i d e n Views<br />
5 C o n t r o l l e r c o n t r o l l e r = new C o n t r o l l e r ( model ) ;<br />
6 P r o g r e s s V i e w p r o g r e s s = new P r o g r e s s V i e w ( c o n t r o l l e r , model ) ;<br />
7 S l i d e r V i e w s l i d e r = new S l i d e r V i e w ( c o n t r o l l e r , model ) ;<br />
8<br />
9 // F e n s t e r um a l l e s<br />
10 JFrame d i s p l a y F r a m e = new JFrame ( ” D i s p l a y ” ) ;<br />
11 d i s p l a y F r a m e . getContentPane ( )<br />
12 . add ( p r o g r e s s , BorderLayout .CENTER ) ;<br />
13 d i s p l a y F r a m e . getContentPane ( )<br />
14 . add ( s l i d e r , BorderLayout .SOUTH) ;<br />
15 d i s p l a y F r a m e . s e t D e f a u l t C l o s e O p e r a t i o n<br />
16 ( WindowConstants . EXIT ON CLOSE ) ;<br />
17 d i s p l a y F r a m e . pack ( ) ;<br />
18 d i s p l a y F r a m e . s e t V i s i b l e ( t r u e ) ;<br />
19 }<br />
20<br />
21 } // End MVCDemo<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 483 / 634
Architekturstile und Entwurfsmuster<br />
Wiederholungsfragen<br />
Was ist ein Entwurfsmuster?<br />
Warum sind sie interessant für die <strong>Software</strong>-Entwicklung?<br />
Erläutern Sie eines der in der Vorlesung vorgestellten Entwurfsmuster.<br />
Was ist ein Architekturstil?<br />
Nennen Sie Beispiele für Architekturstile. Erläutern Sie die Stile.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 484 / 634<br />
Architekturstile und Entwurfsmuster<br />
Weiterführende Literatur<br />
Buschmann u. a. (1996) beschreiben Architekturstile bzw. -muster<br />
Shaw und Garlan (1996) geben eine Einführung in<br />
<strong>Software</strong>-Architektur und beschreiben einige Architekturstile bzw.<br />
-muster<br />
Das Standardbuch zu Entwurfsmustern ist das von Gamma u. a.<br />
(2003)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 485 / 634
<strong>Software</strong>-Test<br />
<strong>Software</strong>-Test<br />
<strong>Software</strong>-Test<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
<strong>Projekt</strong><br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 486 / 634<br />
Vorgehen<br />
Lernziele<br />
Inhalt<br />
Zeitplan<br />
Planung und Aufwand im SWP 05/06<br />
Risiken<br />
Risiko-Management<br />
Notwendigkeit Erfahrungen aus unddem Grenzen SWP des 05/06 Tests verstehen<br />
Arten<br />
Allgemeine<br />
und Varianten<br />
Risiken in<br />
des<br />
einem<br />
<strong>Software</strong>-Tests<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
kennen<br />
Wiederholungsfragen<br />
eine geeignete Test-Strategie auswählen können<br />
Lernziele<br />
Testpläne Herausforderungen erstellen können<br />
Tests Aktivitäten durchführen können<br />
Ist-Analyse<br />
N.B.: Diese Darstellung folgt in weiten Teilen Kapitel 11 des Buchs von<br />
Erhebungstechniken<br />
Brügge und Dutoit (2004).<br />
Befragung<br />
Beobachtung<br />
Soll-Analyse: Prototyping<br />
Zusammenfassung der Techniken<br />
Anforderungsspezifikation<br />
Bedeutung<br />
Anzustrebende Eigenschaften<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 487 / 634
<strong>Software</strong>-Test<br />
Ein korrektes Programm?<br />
c l a s s K a l e n d e r {<br />
p u b l i c s t a t i c c l a s s MonatUngueltig e x t e n d s E x c e p t i o n { } ;<br />
p u b l i c s t a t i c c l a s s J a h r U n g u e l t i g e x t e n d s E x c e p t i o n { } ;<br />
p u b l i c s t a t i c b o o l e a n i s t S c h a l t J a h r ( i n t j a h r )<br />
{ r e t u r n ( j a h r % 4) == 0 ; }<br />
p u b l i c s t a t i c i n t TageProMonat ( i n t monat , i n t j a h r )<br />
throws MonatUngueltig , J a h r U n g u e l t i g {<br />
i n t anzTage ;<br />
i f ( j a h r < 1) { throw new J a h r U n g u e l t i g ( ) ; }<br />
i f ( monat i n {1 , 3 , 5 , 7 , 10 , 12}) { anzTage = 3 2 ; }<br />
e l s e i f ( monat i n {4 , 6 , 9 , 11}) { anzTage = 3 0 ; }<br />
e l s e i f ( monat == 2) {<br />
i f ( i s t S c h a l t J a h r ( j a h r ) ) anzTage = 2 9 ;<br />
e l s e anzTage = 2 8 ;<br />
} e l s e throw new MonatUngueltig ( ) ;<br />
r e t u r n anzTage ;<br />
}<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 488 / 634<br />
<strong>Software</strong>-Test<br />
Testen und seine Begriffe<br />
Definition<br />
Zuverlässigkeit: Maß für den Erfolg, inwieweit das beobachtete Verhalten<br />
mit dem spezifizierten übereinstimmt.<br />
<strong>Software</strong>-Zuverlässigkeit: Wahrscheinlichkeit, dass ein <strong>Software</strong>-System<br />
während einer festgelegten Zeit unter festgelegten Bedingungen keinen<br />
Systemausfall verursachen wird (IEEE Std. 982-1989 1989).<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 489 / 634
<strong>Software</strong>-Test<br />
Definition<br />
Fehlerbegriff<br />
Störfall (Ausfall, Failure): jegliche Abweichung des beobachteten<br />
Verhaltens vom spezifizierten.<br />
Im Nicht-Schaltjahr 200 wird für den Monat Februar 29 ausgegeben.<br />
Fehlerhafter Zustand (Error): Zustand, in dem ein Weiterlaufen des<br />
Systems zu einem Störfall führen würde.<br />
Die Funktion istSchaltjahr(200) liefert true.<br />
Fehler (Defekt, Fault): mechanische oder algorithmische Ursache eines<br />
fehlerhaften Zustands.<br />
2009-02-09<br />
Die Prüfung in istSchaltjahr ist falsch.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 491 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Begriffe des Testens<br />
Fehlerbegriff<br />
Fehlerbegriff<br />
Definition<br />
Störfall (Ausfall, Failure): jegliche Abweichung des beobachteten<br />
Verhaltens vom spezifizierten.<br />
Im Nicht-Schaltjahr 200 wird für den Monat Februar 29 ausgegeben.<br />
Fehlerhafter Zustand (Error): Zustand, in dem ein Weiterlaufen des<br />
Systems zu einem Störfall führen würde.<br />
Die Funktion istSchaltjahr(200) liefert true.<br />
Fehler (Defekt, Fault): mechanische oder algorithmische Ursache eines<br />
fehlerhaften Zustands.<br />
Die Prüfung in istSchaltjahr ist falsch.<br />
Mechanische Ursache: Fehler in der virtuellen Maschine (Plattform); z.B. Bug in Java-Virtual-Machine, Compiler<br />
oder Hardwaredefekt.<br />
Algorithmische Ursache: Fehler im Algorithmus, z.B. Off-by-One-Fehler, uninitialisierte Variable,<br />
Performanzengpässe aufgrund eines schlechten Entwurfs.
<strong>Software</strong>-Test<br />
Testen und seine Begriffe<br />
Definition<br />
Test: systematischer Versuch, in der implementierten <strong>Software</strong> Defekte zu<br />
finden.<br />
Erfolgreicher (positiver) Test: Test, der Defekt aufgedeckt hat.<br />
Erfolgloser (negativer) Test: Test, der keinen Defekt aufgedeckt hat.<br />
→ Tests sind Experimente zur Falsifikation der Hypothese “System ist<br />
korrekt”.<br />
→ Aus negativem Test folgt noch lange nicht, dass kein Defekt<br />
vorhanden ist.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 492 / 634<br />
<strong>Software</strong>-Test<br />
Der Test und seine Verwandten<br />
Tests sind nur ein Mittel, die Zuverlässigkeit zu steigern:<br />
Fehlervermeidung (z.B. Entwicklungsmethoden, Verifikation, statische<br />
Analyse)<br />
Fehlerentdeckung (z.B. Tests, assert, “Quality-Feedback-Agent”,<br />
Flugschreiber)<br />
Fehlertoleranz: Behandlung von Fehlern zur Laufzeit, um Programm<br />
fortzusetzen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 493 / 634
<strong>Software</strong>-Test<br />
Soziologie des Testens<br />
Testen wird häufig (aber zu unrecht) als niedere Arbeit angesehen<br />
→ Frischlinge werden zu Testern<br />
Tester brauchen jedoch ein umfassendes Systemverständnis<br />
(Anforderungen, Entwurf, Implementierung)<br />
Tester brauchen darüber hinaus, Wissen über Prüftechniken<br />
Autoren haben eine Lesart der Spezifikation verinnerlicht<br />
Denkfehler in der Implementierung werden sich bei Erstellung von<br />
Testfällen wiederholen<br />
→ Tester sollten nicht gleichzeitig Autoren sein<br />
Tester versuchen, Fehler zu finden<br />
das Produkt wird kritisiert, dann fühlen sich Autoren selbst kritisiert<br />
→ Egoless-Programming (eine schöne Illusion)<br />
<strong>Software</strong>-Test<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 494 / 634<br />
Managementplan<br />
Klassenentwurf<br />
Integrationsstrategie<br />
Subsystemzerlegung<br />
Funktionale<br />
Anforderungen<br />
Nichtfunktionale<br />
Anforderungen<br />
Entwickler Kunde Benutzer<br />
Testplan<br />
Komponententest<br />
Integrationstest<br />
Strukturtest<br />
Funktionstest<br />
Leistungstest<br />
Benutzungsschnittstellenentwurf<br />
Akzeptanztest<br />
Installationstest<br />
Benutzbarkeitstest<br />
Benutzungshandbuch<br />
Feldtest<br />
<strong>Projekt</strong>vereinbarung<br />
Normalbetrieb<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 495 / 634
2009-02-09<br />
<strong>Software</strong>-Test<br />
Testfall<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Testaktivitäten<br />
Quelle: Brügge und Dutoit (2004)<br />
• Testplanung: Betriebsmittelzuteilung und Zeitplan<br />
Managementplan<br />
Klassenentwurf<br />
Integrationsstrategie<br />
Subsystemzerlegung<br />
Funktionale<br />
Anforderungen<br />
Nichtfunktionale<br />
Anforderungen<br />
• Benutzbarkeitstest: Fehler im Benutzerschnittstellenentwurf aufdecken; siehe (Papier-)Prototypen<br />
• Komponententest: Fehler in einzelner Komponente (Klasse, Paket o.Ä.) aufdecken<br />
• Integrationstest: Fehler im Zusammenspiel von Komponenten aufdecken<br />
Entwickler Kunde Benutzer<br />
• Strukturtest: Integrationstest mit allen Komponenten (abschließender und vollständiger Integrationstest)<br />
• Systemtest: Test aller in einem System zusammengefasster Subsysteme mit dem Ziel, Fehler bezüglich der Szenarien aus<br />
der problemstellung sowie der Anforderungen und Entwurfsziele, die in der Analyse bzw. im Systementwurf identifiziert<br />
wurden, zu finden<br />
• Funktionstest: testet die Anforderungen aus dem Lastenheft und die Beschreibung des Benutzerhandbuchs<br />
• Leistungstest: Test der Leistungsanforderungen (Performanz und Speicherbedarf)<br />
• Installationstest: Test der Installation beim Kunden (evtl. mit der Hilfe der Entwickler)<br />
• Akzeptanztest: Prüfung bzgl. <strong>Projekt</strong>vereinbarung durch den Kunden (evtl. mit der Hilfe der Entwickler)<br />
Ein Testfall besteht aus:<br />
Name<br />
Ort: vollständiger Pfadname des<br />
lauffähigen Testprogramms<br />
Eingabe: Eingabedaten oder<br />
Befehle<br />
Orakel: erwartete<br />
Testergebnisse, die mit den<br />
aktuellen Testergebnissen des<br />
Testlaufs verglichen werden<br />
Protokoll: gesamte Ausgabe, die<br />
durch Test erzeugt wird<br />
Testplan<br />
Komponententest<br />
Integrationstest<br />
Strukturtest<br />
Funktionstest<br />
Leistungstest<br />
Eingabe Prüfling Ist-Ergebnis<br />
Benutzungsschnittstellenentwurf<br />
Akzeptanztest<br />
Installationstest<br />
Benutzbarkeitstest<br />
Benutzungshandbuch<br />
Feldtest<br />
<strong>Projekt</strong>vereinbarung<br />
Normalbetrieb<br />
Vergleich Protokoll<br />
Soll-Ergebnis<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 496 / 634
<strong>Software</strong>-Test<br />
Komponententest: Teststümpfe und -treiber<br />
2009-02-09<br />
spätere Umgebung Testumgebung<br />
Benutzerklasse Y<br />
Prüfling C<br />
Benutzerklasse X<br />
Benutzte Klasse A Benutzte Klasse B<br />
Testtreiber<br />
Prüfling C<br />
Benutzte Klasse A Teststumpf für benutzte Klasse B<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 497 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Teststümpfe und -treiber<br />
Komponententest: Teststümpfe und -treiber<br />
Komponententest: Teststümpfe und -treiber<br />
spätere Umgebung Testumgebung<br />
Benutzerklasse Y<br />
Prüfling C<br />
Benutzerklasse X<br />
Benutzte Klasse A Benutzte Klasse B<br />
Bestreben: Komponenten so früh wie möglich testen.<br />
Problem: die benutzenden Komponenten und die benutzten Komponenten existieren möglicherweise noch nicht.<br />
Lösung: Testtreiber und -stümpfe<br />
• Prüfling/Testkomponente: die zu testende Klasse/Komponente<br />
• Testtreiber: simuliert den Teil des Systems, der die Testkomponente benutzt<br />
• Teststumpf: simuliert die Komponenten, die die Testkomponente benutzt<br />
In vielen Fällen: Aufwand für Teststumpf entspricht Aufwand für die eigentliche Komponente →<br />
Bottom-Up-Entwicklung der Komponenten<br />
Testtreiber<br />
Prüfling C<br />
Benutzte Klasse A Teststumpf für benutzte Klasse B
<strong>Software</strong>-Test<br />
Typen von Komponententests<br />
Definition<br />
Black-Box-Tests: Komponente wird nur mit Kenntnis der<br />
Schnittstellenbeschreibung entworfen (Implementierung unbekannt).<br />
Techniken:<br />
Äquivalenztest<br />
Grenztest<br />
(zustandsbasierter Test)<br />
. . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 498 / 634<br />
<strong>Software</strong>-Test<br />
Typen von Komponententests<br />
Definition<br />
White-/Glass-Box-Tests: Testfall wird mit Kenntnis der Implementierung<br />
entworfen.<br />
Techniken:<br />
Pfadtest<br />
(zustandsbasierter Test)<br />
. . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 499 / 634
<strong>Software</strong>-Test<br />
Äquivalenztest I<br />
Ziel: Testfälle minimieren.<br />
Idee:<br />
Kriterien:<br />
Äquivalente Testfälle werden zusammengefasst.<br />
Ein Testfall wird als Repräsentant der Äquivalenzklasse aufgestellt.<br />
Abdeckung: Jede mögliche Eingabe gehört zu einer der<br />
Äquivalenzklassen<br />
Disjunktion: Keine Eingabe gehört zu mehr als einer einzigen<br />
Äquivalenzklasse<br />
Repräsentation (die Hoffnung): Falls Ausführung einen fehlerhaften<br />
Zustand anzeigt, sobald ein bestimmtes Mitglied einer<br />
Äquivalenzklasse als Eingabe benutzt wird, dann kann derselbe<br />
fehlerhafte Zustand entdeckt werden, wenn irgendein anderes Mitglied<br />
dieser Äquivalenzklasse als Eingabe verwendet wird<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 500 / 634<br />
<strong>Software</strong>-Test<br />
Äquivalenztest II<br />
Für jede Äquivalenzklasse werden mindestens zwei Testeingaben<br />
ausgewählt:<br />
typische Eingabe, die den allgemeinen Fall abprüft<br />
unvollständige Eingabe, die auf korrektes Verhalten im Fehlerfall prüft<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 501 / 634
<strong>Software</strong>-Test<br />
Ein korrektes Programm?<br />
c l a s s K a l e n d e r {<br />
p u b l i c s t a t i c c l a s s MonatUngueltig e x t e n d s E x c e p t i o n { } ;<br />
p u b l i c s t a t i c c l a s s J a h r U n g u e l t i g e x t e n d s E x c e p t i o n { } ;<br />
p u b l i c s t a t i c b o o l e a n i s t S c h a l t J a h r ( i n t j a h r )<br />
{ r e t u r n ( j a h r % 4) == 0 ; }<br />
p u b l i c s t a t i c i n t TageProMonat ( i n t monat , i n t j a h r )<br />
throws MonatUngueltig , J a h r U n g u e l t i g {<br />
i n t anzTage ;<br />
i f ( j a h r < 1) { throw new J a h r U n g u e l t i g ( ) ; }<br />
i f ( monat i n {1 , 3 , 5 , 7 , 10 , 12}) { anzTage = 3 2 ; }<br />
e l s e i f ( monat i n {4 , 6 , 9 , 11}) { anzTage = 3 0 ; }<br />
e l s e i f ( monat == 2) {<br />
i f ( i s t S c h a l t J a h r ( j a h r ) ) anzTage = 2 9 ;<br />
e l s e anzTage = 2 8 ;<br />
} e l s e throw new MonatUngueltig ( ) ;<br />
r e t u r n anzTage ;<br />
}<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 502 / 634<br />
<strong>Software</strong>-Test<br />
Beispielspezifikation<br />
Kalender.TageProMonat(monat,jahr) liefere die Tage eines Monats<br />
wie folgt:<br />
Fehlerfall<br />
monat ∈ {1, 3, 5, 7, 8, 10, 12} ⇒ 31<br />
monat ∈ {4, 6, 9, 11} ⇒ 30<br />
jahr ist ein Schaltjahr ∧ monat = 2 ⇒ 29<br />
jahr ist kein Schaltjahr ∧ monat = 2 ⇒ 28<br />
monat < 1 ∨ monat > 12 ⇒ throw MonatUngueltig<br />
jahr < 0 ⇒ throw JahrUngueltig<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 503 / 634
<strong>Software</strong>-Test<br />
Beispieläquivalenzklassen<br />
Äquivalenzklassen:<br />
für Monate:<br />
Monate mit 31 Tagen<br />
Monate mit 30 Tagen<br />
Monate mit 28 oder 29 Tagen<br />
monat außerhalb gültigen Bereichs<br />
für Jahre:<br />
Schaltjahre<br />
Jahre, die keine Schaltjahre sind<br />
jahr außerhalb gültigen Bereichs<br />
→ Kombination der Äquivalenzklassen für alle Eingabeparameter ergibt<br />
Äquivalenzklassen für TageProMonat<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 504 / 634<br />
<strong>Software</strong>-Test<br />
Beispieltestfälle<br />
Test der Interaktion von monat und jahr durch Kombination:<br />
Äquivalenzklasse monat jahr Soll<br />
31-Tage-Monat, Nicht-Schaltjahre 7 1901 31<br />
31-Tage-Monat, Schaltjahre 7 1904 31<br />
30 Tage-Monat, Nicht-Schaltjahre 6 1901 30<br />
30 Tage-Monat, Schaltjahre 6 1904 30<br />
Februar, Nicht-Schaltjahre 2 1901 28<br />
Februar, Schaltjahre 2 1904 29<br />
monat inkorrekt, jahr korrekt 17 1901 MonatUngueltig<br />
monat korrekt, jahr inkorrekt 7 -1901 JahrUngueltig<br />
monat inkorrekt, jahr inkorrekt 17 -1901 MonatUngueltig<br />
∨JahrUngueltig<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 505 / 634
<strong>Software</strong>-Test<br />
Komponententest mit JUnit<br />
import j u n i t . framework . ∗ ;<br />
p u b l i c c l a s s K a l e n d e r T e s t e x t e n d s TestCase {<br />
}<br />
p u b l i c K a l e n d e r T e s t ( S t r i n g name ) {<br />
s u p e r ( name ) ;<br />
}<br />
. . .<br />
// Test−Methoden<br />
. . .<br />
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {<br />
j u n i t . s w i n g u i . TestRunner . run ( K a l e n d e r T e s t . c l a s s ) ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 506 / 634<br />
<strong>Software</strong>-Test<br />
Komponententest mit JUnit<br />
p u b l i c v o i d testTageProMonat1 ( ) {<br />
// 31−Tage−Monat , Nicht−S c h a l t j a h r e<br />
a s s e r t E q u a l s ( 3 1 , K a l e n d e r . TageProMonat ( 7 , 1 9 0 1 ) ) ;<br />
}<br />
p u b l i c v o i d testTageProMonat9 ( ) {<br />
// monat i n k o r r e k t , j a h r i n k o r r e k t<br />
t r y { i n t t = K a l e n d e r . TageProMonat ( 1 3 , −1901);<br />
a s s e r t T r u e ( f a l s e ) ; }<br />
c a t c h ( K a l e n d e r . J a h r U n g u e l t i g j e ) {} // e x p e c t e d<br />
c a t c h ( K a l e n d e r . MonatUngueltig me) {} // e x p e c t e d<br />
c a t c h ( E x c e p t i o n e ) { f a i l ( ” E x c e p t i o n e x p e c t e d ” ) ; }<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 507 / 634
<strong>Software</strong>-Test<br />
Komponententest mit JUnit<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 508 / 634<br />
<strong>Software</strong>-Test<br />
Grenztest<br />
Beobachtung: “Off-by-one”-Fehler kommen häufig vor.<br />
Idee: Grenzen (Randbereiche) von<br />
Äquivalenzklassen testen.<br />
Schaltjahrregel: Ein Jahr ist ein Schaltjahr, wenn<br />
es durch 4 teilbar ist,<br />
es sei denn, es ist durch 100 teilbar,<br />
es sei denn, es ist durch 400 teilbar<br />
2000 ist ein Schaltjahr, 1900 ist kein Schaltjahr.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 509 / 634
<strong>Software</strong>-Test<br />
Grenztest<br />
Äquivalenzklasse monat jahr Soll<br />
Schaltjahre teilbar durch 400 2 2000 29<br />
Nicht-Schaltjahre teilbar durch 100 2 1900 28<br />
gültige Monate 1 2000 31<br />
gültige Monate 12 2000 31<br />
Nichtpositive ungültige Monate 0 1234 MonatUngueltig<br />
Positive ungültige Monate 13 1234 MonatUngueltig<br />
gültiges Jahr 2 0 29<br />
gültiges Jahr 3 Max-Int 31<br />
ungültiges Jahr 2 -1 JahrUngueltig<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 510 / 634<br />
<strong>Software</strong>-Test<br />
Pfadtest<br />
Ziel: Testfälle sollten alle Code-Teile testen.<br />
Idee: Konstruiere Testfälle, die jeden möglichen Pfad mindestens einmal<br />
ausführen.<br />
Ausgangspunkt: Kontrollflussgraph (KFG) pro Methode.<br />
Knoten: Anweisungen und Prädikate<br />
zwei weitere Knoten: eindeutiger Anfang und Ende einer Methode<br />
Kanten: Kontrollfluss zwischen Anweisungen (unbedingt) und<br />
Prädikaten (bedingt)<br />
Pfad: Menge von Kanten, die vom Anfang zum Ende des KFGs führen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 511 / 634
<strong>Software</strong>-Test<br />
Verzweigung<br />
[jahr < 1]<br />
[monat in {1,3,5,7,10,12}]<br />
[monat in {4,6,9,11}]<br />
[monat == 2]<br />
throw new MonatUngueltig<br />
Ende<br />
Anfang<br />
throw new JahrUngueltig<br />
Bedingung<br />
n = 30<br />
n = 32<br />
[istSchaltJahr(jahr)]<br />
n = 29 n = 28<br />
return n<br />
Aktivität<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 512 / 634<br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
C0, Anweisungsüberdeckung (Befehlsabdeckung/Statement-Coverage):<br />
Verhältnis von Anzahl der mit Testdaten durchlaufenen<br />
Anweisungen zur Gesamtanzahl der Anweisungen.<br />
Verzweigung<br />
[jahr < 1]<br />
[monat in {1,3,5,7,10,12}]<br />
[monat in {4,6,9,11}]<br />
[monat == 2]<br />
throw new MonatUngueltig<br />
Ende<br />
Anfang<br />
throw new JahrUngueltig<br />
Bedingung<br />
n = 30<br />
n = 32<br />
[istSchaltJahr(jahr)]<br />
n = 29 n = 28<br />
return n<br />
Aktivität<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 513 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
C0, Anweisungsüberdeckung (Befehlsabdeckung/Statement-Coverage):<br />
Verhältnis von Anzahl der mit Testdaten durchlaufenen<br />
Anweisungen zur Gesamtanzahl der Anweisungen.<br />
Befehlsabdeckung / statement coverage / C0-Abdeckung: Gesucht ist eine Menge von Testfällen, die jeden Befehl<br />
in dem zu testenden Code mindestens einmal ausführen. Dieses Kriterium ist sehr schwach, denn es werden in der<br />
Regel nur sehr wenige Fehler (20%) gefunden. Fehler entstehen meist dadurch, dass Befehle in bestimmten<br />
Zuständen ausgeführt werden und nicht nur in irgendeinem.<br />
Ein Code-Coverage-Tool kann helfen, um zu sehen, welche Befehle nicht oder selten ausgeführt werden. Denn ein<br />
notwendiges Kriterium ist die Befehlsabdeckung allemal.<br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
C1, Zweig-/Entscheidungsüberdeckung Verhältnis von Anzahl der mit<br />
Testdaten durchlaufenen Zweige zur Gesamtanzahl der<br />
Zweige.<br />
Verzweigung<br />
[jahr < 1]<br />
[monat in {1,3,5,7,10,12}]<br />
[monat in {4,6,9,11}]<br />
[monat == 2]<br />
throw new MonatUngueltig<br />
Ende<br />
Anfang<br />
throw new JahrUngueltig<br />
Bedingung<br />
n = 30<br />
n = 32<br />
n = 29 n = 28<br />
return n<br />
Aktivität<br />
[istSchaltJahr(jahr)]<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 514 / 634<br />
Verzweigung<br />
[jahr < 1]<br />
[monat in {1,3,5,7,10,12}]<br />
[monat in {4,6,9,11}]<br />
[monat == 2]<br />
throw new MonatUngueltig<br />
Ende<br />
Anfang<br />
throw new JahrUngueltig<br />
Bedingung<br />
n = 30<br />
n = 32<br />
[istSchaltJahr(jahr)]<br />
n = 29 n = 28<br />
return n<br />
Aktivität
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
C1, Zweig-/Entscheidungsüberdeckung Verhältnis von Anzahl der mit<br />
Testdaten durchlaufenen Zweige zur Gesamtanzahl der<br />
Zweige.<br />
Jedes Prädikat muss im Code mindestens einmal wahr und einmal falsch sein. Schließt die Befehlabdeckung mit ein<br />
(es sei denn, es gibt unerreichbare Befehle) und ist äquivalent zur Befehlsabdeckung, wenn jeder wahr/falsch-Fall<br />
auch mindestens einen Befehl beinhaltet. Dieses Kriterium ist weiterhin relativ schwach. Erfahrungsgemäß 25%<br />
Fehlerfindung.<br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
C2, Bedingungsabdeckung Verhältnis von Anzahl der mit Testdaten<br />
durchlaufenen Terme innerhalb von Entscheidungen zur<br />
Gesamtanzahl der Terme.<br />
i := 1 ;<br />
l o o p<br />
found := a ( i ) = key ;<br />
e x i t when found or i = M a x E n t r i e s ;<br />
i := i + 1 ;<br />
end l o o p ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 515 / 634<br />
Verzweigung<br />
[jahr < 1]<br />
[monat in {1,3,5,7,10,12}]<br />
[monat in {4,6,9,11}]<br />
[monat == 2]<br />
throw new MonatUngueltig<br />
Ende<br />
Anfang<br />
throw new JahrUngueltig<br />
Bedingung<br />
n = 30<br />
n = 32<br />
[istSchaltJahr(jahr)]<br />
n = 29 n = 28<br />
return n<br />
Aktivität
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
C2, Bedingungsabdeckung Verhältnis von Anzahl der mit Testdaten<br />
durchlaufenen Terme innerhalb von Entscheidungen zur<br />
Gesamtanzahl der Terme.<br />
i := 1 ;<br />
l o o p<br />
found := a ( i ) = key ;<br />
e x i t when found or i = M a x E n t r i e s ;<br />
i := i + 1 ;<br />
end l o o p ;<br />
Nur verschieden von C1, wenn logische Operatoren keine Short-Circuit-Operatoren sind (d.h. es werden<br />
grundsätzlich alle Operanden eines logischen Operators ausgewertet).<br />
In jedem Prädikat wird jeder Bedingungsteil (Konjunktions- oder Alternationsglied) mindestens einmal wahr und<br />
einmal falsch gesetzt.<br />
N.B.: Das umfasst nicht die Entscheidungsfallabdeckung:<br />
true and false → false-Kante<br />
false and true → false-Kante<br />
(sofern der Operator and kein Short-Circuit-Operator ist).<br />
Man sollte beide kombinieren.<br />
Man bedenke, dass false and x → false ist wenn x keine Seiteneffekte hat.<br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
C3, Abdeckung aller Bedingungskombinationen Verhältnis von Anzahl der<br />
mit Testdaten durchlaufenen Bedingungskombinationen zur<br />
Gesamtanzahl der Bedingungskombinationen.<br />
Verzweigung<br />
[jahr < 1]<br />
[monat in {1,3,5,7,10,12}]<br />
[monat in {4,6,9,11}]<br />
[monat == 2]<br />
throw new MonatUngueltig<br />
Ende<br />
Anfang<br />
throw new JahrUngueltig<br />
Bedingung<br />
n = 30<br />
n = 32<br />
[istSchaltJahr(jahr)]<br />
n = 29 n = 28<br />
return n<br />
Aktivität<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 516 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
C3, Abdeckung aller Bedingungskombinationen Verhältnis von Anzahl der<br />
mit Testdaten durchlaufenen Bedingungskombinationen zur<br />
Gesamtanzahl der Bedingungskombinationen.<br />
Bedingungenkombinationsabdeckung / multiple condition coverage: Hier werden Prädikate gemäß einer<br />
Wahrheitstabelle alle Bedingungskombinationen aller in allen Kombinationen mal wahr und mal falsch gesetzt.<br />
Interessanterweise bringt dies nicht viel mehr an Erfolg, aber viel mehr an Aufwand. ·<br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
C4, Pfadabdeckung Verhältnis von Anzahl der mit Testdaten<br />
durchlaufenen Pfade zur Gesamtanzahl der Pfade.<br />
Verzweigung<br />
[jahr < 1]<br />
[monat in {1,3,5,7,10,12}]<br />
[monat in {4,6,9,11}]<br />
[monat == 2]<br />
throw new MonatUngueltig<br />
Ende<br />
Anfang<br />
throw new JahrUngueltig<br />
Bedingung<br />
n = 30<br />
n = 32<br />
n = 29 n = 28<br />
return n<br />
Aktivität<br />
[istSchaltJahr(jahr)]<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 517 / 634<br />
Verzweigung<br />
[jahr < 1]<br />
[monat in {1,3,5,7,10,12}]<br />
[monat in {4,6,9,11}]<br />
[monat == 2]<br />
throw new MonatUngueltig<br />
Ende<br />
Anfang<br />
throw new JahrUngueltig<br />
Bedingung<br />
n = 30<br />
n = 32<br />
[istSchaltJahr(jahr)]<br />
n = 29 n = 28<br />
return n<br />
Aktivität
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
Maße der Testabdeckung<br />
C4, Pfadabdeckung Verhältnis von Anzahl der mit Testdaten<br />
durchlaufenen Pfade zur Gesamtanzahl der Pfade.<br />
(Eingeschränkte) Pfadabdeckung: Hier werden auch bei Schleifen mehrere Durchläufe gemacht (keinmal, einmal,<br />
zweimal, typische Anzahl, maximale Anzahl). In aller Regel wird nicht auf diese Weise getestet, da der Aufwand<br />
sehr groß ist.<br />
<strong>Software</strong>-Test<br />
Probleme beim Pfadtest<br />
Unrealisierbare Pfade:<br />
f o r ( i = 0 ; i < o . f o o ( ) ; i ++) // immer o . f o o ( ) == 0 ?<br />
{<br />
x = . . .<br />
}<br />
. . .x. . . // hat x d e f i n i e r t e n Wert ?<br />
i f ( p ) {. . .}<br />
i f ( q ) { // p => not q ??<br />
. . .<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 518 / 634<br />
Verzweigung<br />
[jahr < 1]<br />
[monat in {1,3,5,7,10,12}]<br />
[monat in {4,6,9,11}]<br />
[monat == 2]<br />
throw new MonatUngueltig<br />
Ende<br />
Anfang<br />
throw new JahrUngueltig<br />
Bedingung<br />
n = 30<br />
n = 32<br />
[istSchaltJahr(jahr)]<br />
n = 29 n = 28<br />
return n<br />
Aktivität
<strong>Software</strong>-Test<br />
Polymorphismustest<br />
2009-02-09<br />
c l a s s T { p u b l i c i n t f o o ( ) ; }<br />
c l a s s NT e x t e n d s T { p u b l i c i n t f o o ( ) ; }<br />
c l a s s F a c t o r y { T c r e a t e ( i n t i ) ; }<br />
c l a s s UnderTest {<br />
v o i d bar ( i n t i )<br />
{ T t = ( new F a c t o r y ) . c r e a t e ( i ) ;<br />
}<br />
}<br />
i f ( t . f o o ( ) > 0)<br />
doSomething ( ) ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 519 / 634<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Maße der Testabdeckung<br />
Polymorphismustest<br />
Polymorphismustest<br />
c l a s s T { p u b l i c i n t f o o ( ) ; }<br />
c l a s s NT e x t e n d s T { p u b l i c i n t f o o ( ) ; }<br />
c l a s s F a c t o r y { T c r e a t e ( i n t i ) ; }<br />
c l a s s UnderTest {<br />
v o i d bar ( i n t i )<br />
{ T t = ( new F a c t o r y ) . c r e a t e ( i ) ;<br />
}<br />
}<br />
i f ( t . f o o ( ) > 0)<br />
doSomething ( ) ;<br />
Methode bar kann nicht in Isolation getestet werden. Welches foo im Beispiel ausgeführt wird, hängt vom<br />
dynamischen Typ von t ab. Davon hängen wiederum die weiteren Pfade ab.
<strong>Software</strong>-Test<br />
Zustandsbasiertes Testen<br />
Verhalten von Komponente hängt ab von<br />
der Eingabe<br />
ihrem Zustand<br />
c l a s s Stack {<br />
p u b l i c s t a t i c c l a s s EmptyStack e x t e n d s E x c e p t i o n { } ;<br />
p u b l i c s t a t i c c l a s s F u l l S t a c k e x t e n d s E x c e p t i o n { } ;<br />
}<br />
p u b l i c Stack ( i n t maxSize ) {. . . } ;<br />
p u b l i c b o o l e a n isEmpty ( ) {. . . } ;<br />
p u b l i c i n t s i z e ( ) {. . . } ;<br />
p u b l i c Object top ( ) throws EmptyStack {. . . } ;<br />
p u b l i c v o i d push ( Object o ) throws F u l l S t a c k {. . . } ;<br />
p u b l i c v o i d pop ( ) throws EmptyStack {. . . } ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 520 / 634<br />
<strong>Software</strong>-Test<br />
Zustände eines Stacks<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 521 / 634
<strong>Software</strong>-Test<br />
Zustandsbasiertes Testen<br />
Für alle Zustände einer Komponente:<br />
Komponente wird in zu testenden Zustand gebracht<br />
Test für alle möglichen Stimuli:<br />
korrekte Eingaben,<br />
fehlerhafte Eingaben<br />
und Aktionen, die Zustandsübergänge bewirken<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 522 / 634<br />
<strong>Software</strong>-Test<br />
Zustandsbasiertes Testen I<br />
p u b l i c v o i d t e s t S t a t e F u l l ( ) {<br />
// t e s t o f S t a t e f u l l<br />
f i n a l i n t max = 1 0 0 ;<br />
Stack s = new Stack ( max ) ;<br />
Object l a s t = new Object ( ) ;<br />
// put Stack i n t o s t a t e f u l l<br />
f o r ( i n t i = 1 ; i
<strong>Software</strong>-Test<br />
Zustandsbasiertes Testen II<br />
}<br />
// t e s t l e g a l a c t i o n ’ isEmpty ’ ; no t r a n s i t i o n<br />
a s s e r t E q u a l s ( f a l s e , s . isEmpty ( ) ) ;<br />
// t e s t i l l e g a l a c t i o n ’ push ’<br />
t r y { s . push ( new Object ( ) ) ; f a i l ( ” e x c e p t i o n e x p e c t e d ” ) ; }<br />
c a t c h ( Stack . F u l l S t a c k e ) {} // OK<br />
// t e s t l e g a l a c t i o n / t r a n s i t i o n ’ pop ’<br />
s . pop ( ) ;<br />
// r e v e r s e t r a n s i t i o n<br />
s . push ( new Object ( ) ) ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 524 / 634<br />
<strong>Software</strong>-Test<br />
Vergleich von White- und Black-Box-Tests<br />
Black-Box-Tests (Funktionstests) betrachten den Prüfling als schwarze<br />
Box. Sie setzen keine Kenntnisse über die Interna voraus.<br />
White-Box-Tests (Strukturtests, Glass-Box-Tests) betrachten Interna des<br />
Prüflings, um Testfälle zu entwickeln.<br />
Eigenschaft Black-Box-Test White-Box-Test<br />
Test auf Basis von Schnittstellen- Lösung<br />
spezifikation<br />
Wiederverwendung bei ja eingeschränkt<br />
Änderung der Struktur<br />
Geeignet für Testart alle Komponententest<br />
Finden Fehler aufgrund von Abweichung von Spez. eher Kodierfehler<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 525 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Zustandsbasiertes Testen<br />
Vergleich von White- und Black-Box-Tests<br />
Vergleich von White- und Black-Box-Tests<br />
Black-Box-Tests (Funktionstests) betrachten den Prüfling als schwarze<br />
Box. Sie setzen keine Kenntnisse über die Interna voraus.<br />
White-Box-Tests (Strukturtests, Glass-Box-Tests) betrachten Interna des<br />
Prüflings, um Testfälle zu entwickeln.<br />
Eigenschaft Black-Box-Test White-Box-Test<br />
Test auf Basis von Schnittstellen- Lösung<br />
spezifikation<br />
Wiederverwendung bei ja eingeschränkt<br />
Änderung der Struktur<br />
Geeignet für Testart alle Komponententest<br />
Finden Fehler aufgrund von Abweichung von Spez. eher Kodierfehler<br />
White-Box Methoden eignen sich lediglich für den Modultest, allenfalls noch für den Integrationstest. Die Idee ist<br />
es, die Testfälle anhand der inneren Programmstruktur zu finden.<br />
Achtung: White-Box-Testing testet keine fehlenden Pfade oder Anweisungen. Das ist eine echte Schwäche, denn es<br />
wird nur das getestet, woran der Programmierer auch wirklich (wenn auch evtl. fehlerhaft) gedacht hat!<br />
Black-Box-Tests können wiederverwendet werden, wenn sie die Struktur, aber nicht das Verhalten ändert.<br />
<strong>Software</strong>-Test<br />
Black- versus White-Box-Tests<br />
Nicht entweder-oder, sondern sowohl-als-auch!<br />
Komplementäre Verwendung:<br />
1 Erstelle Funktionstest<br />
2 Messe Abdeckung<br />
3 Wenn Abdeckung nicht ausreichend; ergänze durch Strukturtest;<br />
zurück zu 2.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 526 / 634
<strong>Software</strong>-Test<br />
Strategien des Integrationstests I<br />
Urknalltest: alle Komponenten werden einzeln entwickelt und dann in<br />
einem Schritt integriert<br />
→ erschwert Fehlersuche<br />
Bottom-Up: Integration erfolgt inkrementell in umgekehrter Richtung<br />
zur Benutzt-Beziehung<br />
→ keine Testrümpfe notwendig (aber Testtreiber)<br />
→ Fehler in der obersten Schicht werden sehr spät entdeckt; die enthalten<br />
jedoch die Applikationslogik<br />
Top-Down: Integration erfolgt in Richtung der Benutzt-Beziehung<br />
→ Fehler in der obersten Schicht werden sehr früh entdeckt<br />
→ Testrümpfe notwendig<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 527 / 634<br />
<strong>Software</strong>-Test<br />
Strategien des Integrationstests II<br />
Sandwich-Test-Strategie: Kombination von Top-Down und<br />
Bottom-Up<br />
Identifikation der zu testenden Schicht: Zielschicht<br />
zuerst: individuelle Komponententests<br />
dann: kombinierte Schichttests:<br />
- Oberschichttest mit Zielschicht<br />
- Zielschicht mit Unterschicht<br />
- alle Schichten zusammen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 528 / 634
<strong>Software</strong>-Test<br />
Leistungstests<br />
Härtetest: viele gleichzeitige Anfragen<br />
Volumentest: große Datenmengen<br />
Sicherheitstests: Sicherheitslücken aufspüren<br />
Zeitvorgabentests: werden spezifizierte Antwortzeiten eingehalten?<br />
Erholungstests: Tests auf Erholung von fehlerhaften Zuständen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 529 / 634<br />
<strong>Software</strong>-Test<br />
Zusammenfassung der Testarten<br />
Komponententest<br />
Black−Box−Test<br />
Grenztest zustands−<br />
basierter Test<br />
Äquivalenztest<br />
White−Box−Test<br />
Pfadtest<br />
Integrationstest<br />
Strategie:<br />
− Urknall<br />
− Top−Down<br />
− Bottom−Up<br />
− Sandwich<br />
Härtetest<br />
Leistungstest<br />
Systemtest<br />
Funktionstest Feldtest Installationstest<br />
Volumentest<br />
Sicherheitstest<br />
Akzeptanztest<br />
Erholungstest<br />
Zeitvorgabentest<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 530 / 634
<strong>Software</strong>-Test<br />
Testdokumentation: Aufzeichnung der Testaktivitäten<br />
Testplan: <strong>Projekt</strong>plan fürs Testen<br />
Testfallspezifikation: Dokumentation eines jeden Testfalls<br />
Testvorfallbericht (Testprotokoll): Ergebnisse des Tests und<br />
Unterschiede zu erwarteten Ergebnissen<br />
Testübersicht: Auflistung aller Fehler (entdeckt und noch zu<br />
untersuchen)<br />
→ Analyse und Priorisierung aller Fehler und deren Korrekturen<br />
Testplan und Testfallspezifikation können sehr früh schon erstellt werden.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 531 / 634<br />
<strong>Software</strong>-Test<br />
Testplan (IEEE Std. 829-1998 1998)<br />
1. Einführung<br />
2. Beziehung zu anderen Dokumenten<br />
3. Systemüberblick<br />
4. Merkmale, die getestet/nicht getestet werden müssen<br />
5. Abnahmekriterien<br />
6. Vorgehensweise<br />
7. Aufhebung und Wiederaufnahme<br />
8. Zu prüfendes Material (Hardware-/<strong>Software</strong>anforderungen)<br />
9. Testfälle<br />
10. Testzeitplan: Verantwortlichkeiten, Personalausstattung und<br />
Weiterbildungsbelange, Risiken und Schadensmöglichkeiten, Zeitplan<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 532 / 634
2009-02-09<br />
<strong>Software</strong>-<strong>Projekt</strong><br />
<strong>Software</strong>-Test<br />
Testplan<br />
Testplan (IEEE Std. 829-1998 1998)<br />
Testplan (IEEE Std. 829-1998 1998)<br />
1. Einführung<br />
2. Beziehung zu anderen Dokumenten<br />
3. Systemüberblick<br />
4. Merkmale, die getestet/nicht getestet werden müssen<br />
5. Abnahmekriterien<br />
6. Vorgehensweise<br />
7. Aufhebung und Wiederaufnahme<br />
8. Zu prüfendes Material (Hardware-/<strong>Software</strong>anforderungen)<br />
9. Testfälle<br />
10. Testzeitplan: Verantwortlichkeiten, Personalausstattung und<br />
Weiterbildungsbelange, Risiken und Schadensmöglichkeiten, Zeitplan<br />
(Entspricht einer vereinfachten Variante von IEEE Std. 829-1998 (1998).)<br />
2.: Beziehung zu Anforderungsspezifikation und Architekturbeschreibung; Einführung von Namenskonventionen, um<br />
Tests und Anforderungen/Architektur in Beziehung zu setzen.<br />
3.: Überblick über System hinsichtlich jener Komponenten, die durch Komponententests geprüft werden sollen.<br />
Granularität der Komponenten und ihre Abhängigkeiten.<br />
4.: Konzentration auf funktionale Gesichtspunkte beim Testen; identifiziert alle merkmale und Kombinationen von<br />
Merkmalen, die getestet werden müssen. Beschreibt auch diejenigen Merkmale, die nicht getestet werden und gibt<br />
Gründe dafür an.<br />
5.: Spezifiziert Abnahmekriterien für die Tests (z.B. Testabdeckung).<br />
6.: Allgemeine Vorgehensweisen beim Testablauf; Integrationsstrategien.<br />
7.: Kriterien, wann Testaktivitäten ausgesetzt werden. Testaktivitäten, die wiederholt werden müssen, wenn das<br />
Testen wieder aufgenommen wird.<br />
8.: Notwendige Betriebsmittel: physikalische Eigenarten der Umgebung sowie Anforderungen an <strong>Software</strong>,<br />
Hardware, Testwerkzeuge und andere Betriebsmittel (z.B. Arbeitsraum).<br />
9.: (das Herzstück des Testplans) Auflistung aller Testfälle anhand individueller Testfallspezifikationen.<br />
<strong>Software</strong>-Test<br />
Testfallspezifikation<br />
Testfallbezeichner: eindeutiger Name des Testfalls; am Besten<br />
Namenskonventionen benutzen<br />
Testobjekte: Komponenten (und deren Merkmale), die getestet<br />
werden sollen<br />
Eingabespezifikationen: erwartete Eingaben<br />
Ausgabespezifikationen: erwartete Ausgaben<br />
Umgebungserfordernisse: notwendige <strong>Software</strong>- und<br />
Hardware-Plattform sowie Testrümpfe und -stümpfe<br />
Besondere prozedurale Anforderungen: Einschränkungen wie<br />
Zeitvorgaben, Belastung oder Eingreifen durch den Operateur<br />
Abhängigkeiten zwischen Testfällen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 533 / 634
<strong>Software</strong>-Test<br />
Testschadensbericht<br />
welche Merkmale wurden getestet?<br />
wurden sie erfüllt?<br />
bei Störfällen: wie können sie reproduziert werden?<br />
→ Sammlung und Priorisierung in der Testübersicht<br />
→ Test = Fehlersuche bzw. -korrektur!<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 534 / 634<br />
<strong>Software</strong>-Test<br />
Wiederholungsfragen I<br />
Erläutern Sie die Unterschiede in den Fehlerbegriffen Störfall,<br />
fehlerhafter Zustand und Fehler.<br />
Was ist ein positiver, was ein negativer Testfall?<br />
Wer sollte testen?<br />
Welche Arten von Tests gibt es?<br />
Was ist ein Testfall?<br />
Welche Aufgabe erfüllen Teststümpfe und -treiber für den<br />
Komponententest?<br />
Was ist der Unterschied von Black- und Glass-Box-Tests?<br />
Welche Techniken des Komponententests gibt es?<br />
Erläutern Sie die Idee von<br />
Äquivalenztests am konkreten Beispiel.<br />
Erläutern Sie die Idee von Grenztests am konkreten Beispiel.<br />
Erläutern Sie die Idee von Pfadtests am konkreten Beispiel.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 535 / 634
<strong>Software</strong>-Test<br />
Wiederholungsfragen II<br />
Wie benutzt man JUnit für den Komponententest?<br />
Wozu benötigt man Polymorphismustests?<br />
Erläutern Sie die Idee von zustandsbasierten Tests am konkreten<br />
Beispiel.<br />
Welche Testabdeckungsmaße gibt es?<br />
Nennen Sie Strategien für Integrationstests und diskutieren Sie sie.<br />
Erläutern Sie Leistungstests.<br />
Was ist ein Testplan?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 536 / 634<br />
Implementierung<br />
Implementierung<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Rainer<strong>Projekt</strong> Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 537 / 634
Implementierung<br />
Lernziele<br />
Feinentwurf eines Systems durchführen können<br />
Programmierrichtlinien entwerfen, kennen und einhalten<br />
Verständnis für Codequalität entwickeln<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 538 / 634<br />
Implementierung<br />
Feinentwurf<br />
Der Feinentwurf ist die Brücke zwischen abstrakter Architektur und<br />
detailliertem Code.<br />
Er legt fest:<br />
Datenstrukturen<br />
→ Klassendiagramme mit zusätzlichen Implementierungsdetails; (z.B.<br />
Navigierbarkeit, Implementierung von Assoziationen, Behandlung von<br />
Mehrfachvererbung oder weiteren Implementierungsklassen etc.)<br />
Abläufe<br />
→ Zustandsautomaten<br />
→ Aktivitätsdiagramme<br />
→ Sequenzdiagramme<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 539 / 634
Implementierung<br />
Architekturkonformität<br />
Architekturbeschreibung und Quellcode sind zwei voneinander<br />
abhängige, aber separate Dokumente<br />
in der Weiterentwicklung werden oft Änderungen im Quellcode<br />
gemacht, die in der Architekturbeschreibung nicht nachgezogen<br />
werden<br />
Folge: Architekturbeschreibung wird obsolet<br />
Planung erfolgt aber meist auf Basis der Architekturbeschreibung<br />
Folge: böses Erwachen in der Umsetzung<br />
→ Reflektionsmethode von Murphy u. a. (1995, 2001) zur<br />
Synchronisation von Modulsicht und Quellcode<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 540 / 634<br />
Implementierung<br />
Reflektionsmethode (Murphy u. a. 2001)<br />
1 Stelle Architekturmodell auf<br />
2 Extrahiere Implementierungsmodell<br />
3 Bilde Modelle aufeinander ab<br />
4 Berechne Reflektionsmodell<br />
5 Verfeinere/korrigiere<br />
Beispiel<br />
H1<br />
H2<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 541 / 634<br />
H3
Implementierung<br />
Warum Programmierrichtlinien?<br />
bis zu 80% der Gesamtkosten für <strong>Software</strong> sind Wartungskosten<br />
Originalautor wartet <strong>Software</strong> oft nicht selbst<br />
Code muss lesbar und verständlich sein<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 543 / 634<br />
Implementierung<br />
Programmierrichtlinien: Schlechte Beispiele<br />
// i n k o n s i s t e n t e Methodennamen<br />
T e x t F i e l d . s e t T e x t ( ) ;<br />
L a b e l . s e t T e x t ( ) ;<br />
Button . s e t L a b e l ( ) ;<br />
A b s t r a c t B u t t o n . s e t T e x t ( ) ;<br />
// i n k o n s i s t e n t e P a r a m e t e r s o r t i e r u n g<br />
S t r i n g B u f f e r . setCharAt ( i n t index , c h a r c ) ;<br />
Vector . s e t E l e m e n t A t ( Object o , i n t i n d e x ) ;<br />
L i s t . s e t ( i n t index , Object o ) ;<br />
// l e n g t h oder s i z e ?<br />
l e n O f A r r a y = myArray . l e n g t h ;<br />
l e n O f S t r i n g = myString . l e n g t h ( ) ;<br />
myList . s i z e ( ) ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 545 / 634
Implementierung<br />
Programmierrichtlinien: Sinnvolle Namen<br />
// S i n n l o s e Namen<br />
s t a t i c f i n a l i n t ONE = 1 ;<br />
s t a t i c f i n a l i n t TEN = 1 0 ;<br />
s t a t i c f i n a l i n t TWENTY = 3 0 ;<br />
// b e s s e r<br />
s t a t i c f i n a l i n t INPUT MODE = 1 ;<br />
s t a t i c f i n a l i n t INPUT BUFSIZE = 1 0 ;<br />
s t a t i c f i n a l i n t OUTPUT BUFSIZE = 3 0 ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 546 / 634<br />
Implementierung<br />
Programmierrichtlinien: Lokale Variablen<br />
// Man kann ’ s auch ü b e r t r e i b e n . . .<br />
f o r ( i n t o u t e r I n d e x = 0 ; o u t e r I n d e x < maxOuterIndex ;<br />
o u t e r I n d e x++)<br />
{<br />
f o r ( i n t i n n e r I n d e x = 0 ; i n n e r I n d e x < o u t e r I n d e x ;<br />
i n n e r I n d e x++)<br />
{<br />
r e s u l t M a t r i x [ o u t e r I n d e x ] [ i n n e r I n d e x ]<br />
= o u t e r I n d e x ∗ i n n e r I n d e x ;<br />
}<br />
}<br />
// S c h l e i f e n v a r i a b l e n / I n d i z e s => k u r z e Namen<br />
f o r ( i n t i = 0 ; i < max ; i ++)<br />
{<br />
f o r ( i n t j = 0 ; j < i ; j ++)<br />
{<br />
r e s u l t [ i ] [ j ] = i ∗ j ;<br />
}<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 547 / 634
Implementierung<br />
Ausdrücke in natürlicher Form<br />
// schwer v e r s t ä n d l i c h e r Ausdruck<br />
i f ( ! ( b l o c k I d < a c t b l k s ) | | ! ( b l o c k I d >= u n b l o c k s ) )<br />
// b e s s e r<br />
i f ( ( b l o c k I d >= a c t b l k s ) | | ( b l o c k I d < u n b l o c k s ) )<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 548 / 634<br />
Implementierung<br />
Magische Zahlen<br />
// Wer v e r s t e h t d i e s e Zahlen ?<br />
m = 60 ∗ h + em ;<br />
s = 60 ∗ m + e s ;<br />
t c = 60 ∗ b + l c ;<br />
// So i s t ’ s b e s s e r .<br />
s t a t i c f i n a l s h o r t MINUTES PER HOUR = 6 0 ;<br />
s t a t i c f i n a l s h o r t SECONDS PER MINUTE = 6 0 ;<br />
s t a t i c f i n a l s h o r t CLIPS PER BOX = 6 0 ;<br />
.<br />
.<br />
.<br />
minutes = MINUTES PER HOUR ∗ h o u r s + e x t r a M i n u t e s ;<br />
s e c o n d s = SECONDS PER MINUTE ∗ minutes + e x t r a S e c o n d s ;<br />
t o t a l C l i p s = CLIPS PER BOX ∗ boxes + l o o s e C l i p s ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 549 / 634
Implementierung<br />
Hartcodiert: String-Literale im Code<br />
t r y<br />
{<br />
s t o r e . o p e n S t o r e ( ” . / c o n f i g . xml ” , ”PSA” ) ;<br />
manager . r e a d C o n f i g u r a t i o n ( s t o r e ) ;<br />
}<br />
c a t c h ( T r e e S t o r e E x c e p t i o n e )<br />
{<br />
System . e r r . p r i n t l n<br />
( ” Konnte K o n f i g u r a t i o n s d a t e i n i c h t l e s e n . ” ) ;<br />
}<br />
c a t c h ( C o n f i g E x c e p t i o n x )<br />
{<br />
System . e r r . p r i n t l n<br />
( ” F e h l e r beim A u s l e s e n d e r K o n f i g u r a t i o n s d a t e i . ” ) ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 550 / 634<br />
Implementierung<br />
Character sind zwar Zahlen, aber...<br />
// Wie b i t t e ?<br />
i f ( ( c >= 65) && ( c = ’A ’ ) && ( c
Implementierung<br />
Sprachkonstrukte zur Berechnung von Größen<br />
// Doppelte Z a h l e n r e f e r e n z<br />
c h a r buf [ ] = new c h a r [ 1 0 2 4 ] ;<br />
f o r ( i n t i = 0 ; i < 1024; i ++)<br />
// Sprachmechanismus nutzen !<br />
c h a r buf [ ] = new c h a r [ 1 0 2 4 ] ;<br />
f o r ( i n t i = 0 ; i < buf . l e n g t h ; i ++)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 552 / 634<br />
Implementierung<br />
Überflüssige Kommentare<br />
/∗<br />
∗ d e f a u l t<br />
∗/<br />
d e f a u l t :<br />
break ;<br />
/∗ r e t u r n SUCCESS ∗/<br />
r e t u r n SUCCESS ;<br />
zeroCount++: /∗ I n c r e m e n t z e r o e n t r y c o u n t e r ∗/<br />
/∗ I n i t i a l i z e t o t a l to numberReceived . ∗/<br />
Node . t o t a l = Node . numberReceived ;<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 553 / 634
Implementierung<br />
Überflüssige Kommentare<br />
w h i l e ( ( ( c = getChar ( ) ) != EOF) && ( i s S p a c e ( c ) ) )<br />
; /∗ s k i p w h i t e s p a c e ∗/<br />
i f ( c == EOF) /∗ end o f f i l e ∗/<br />
t y p e = END OF FILE ;<br />
e l s e i f ( c == ’ ( ’ ) /∗ l e f t paren ∗/<br />
t y p e = LEFT PAREN ;<br />
e l s e i f ( c == ’ ) ’ ) /∗ r i g h t paren ∗/<br />
t y p e = RIGHT PAREN ;<br />
e l s e i f ( c == ’ ; ’ ) /∗ s e m i c o l o n ∗/<br />
t y p e = SEMICOLON ;<br />
e l s e i f ( isOp ( c ) ) /∗ o p e r a t o r ∗/<br />
t y p e = OPERATOR;<br />
e l s e i f ( i s D i g i t ( c ) ) /∗ number ∗/<br />
t y p e = NUMBER;<br />
. . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 554 / 634<br />
Implementierung<br />
Verschluckte (hicks) Exceptions<br />
t r y<br />
{<br />
F i l e O u t p u t S t r e a m out = new F i l e O u t p u t S t r e a m ( strName ) ;<br />
. . .<br />
out . f l u s h ( ) ;<br />
out . c l o s e ( ) ;<br />
}<br />
c a t c h ( I O E x c e p t i o n e )<br />
{ ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 555 / 634
Implementierung<br />
idKldW<br />
i n t f ( i n t f [ ] , i n t l , Item k )<br />
{ i n t i ;<br />
f o r ( i =0; i < l ; i ++)<br />
i f ( f [ i ] == k ) r e t u r n i ;<br />
}<br />
In der Kürze liegt die Würze (idKldW)?<br />
i n t I n d e x ( i n t ∗ f i e l d , i n t l e n g t h , Item key )<br />
{ i n t i ;<br />
f o r ( i =0; i < l e n g t h ; i ++)<br />
i f ( f i e l d [ i ] == key ) r e t u r n i ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 556 / 634<br />
Implementierung<br />
<strong>Software</strong>-Redundanz<br />
...<br />
for (i = 1; i < MAX; i++) {<br />
...<br />
x = func() * y + x;<br />
} for (i = 1; i < MAX; i++) {<br />
x = func() * y + x;<br />
...<br />
}<br />
for (j = 1; j < MAX; j++) {<br />
x = func() * y + x;<br />
}<br />
...<br />
foo.c bar.c fred.c<br />
Typisch: 5 – 30 % des Codes sind redundant. . .<br />
...<br />
...<br />
for (i = 1; i < MAX; i++) {<br />
x1 = func() * y1 + x1;<br />
}<br />
...<br />
for (i = 1; i < MAX; i++) {<br />
x2 = func() * y2 + x2;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 557 / 634<br />
...
Implementierung<br />
<strong>Software</strong>-Redundanz<br />
...<br />
...<br />
...<br />
foo.c bar.c fred.c<br />
set_coordinate (&x, y);<br />
set_coordinate (&x, y);<br />
void set_coordinate (<br />
float *x, float y) {<br />
}<br />
...<br />
...<br />
int i;<br />
. . . und können abstrahiert werden<br />
set_coordinate (&x, y);<br />
for (i = 1; i < MAX; i++) {<br />
*x = func() * y + *x;<br />
}<br />
...<br />
set_coordinate (&x1, y1);<br />
...<br />
set_coordinate (&x2, y2);<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 558 / 634<br />
Implementierung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 559 / 634<br />
...
Implementierung<br />
Überlange Methoden<br />
Gedruckt von Rainer Koschke<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 1/12<br />
//<br />
// java provides a variety of conditional branch instructions, so<br />
// that a number of operators merit special handling:<br />
// constant operand<br />
5 // negation (we eliminate it)<br />
// equality<br />
// ?: && and || (partial evaluation)<br />
// comparisons<br />
// Other expressions are just evaluated and the appropriate<br />
10 // branch emitted.<br />
//<br />
// TODO: return a bool that is true if the statement being branched over is<br />
// even needed (if statements and other places might have a constant false<br />
// expression, allowing the next block of code to be skipped entirely).<br />
15 //<br />
void ByteCode::EmitBranchIfExpression(AstExpression* p, bool cond, Label& lab,<br />
AstStatement* over)<br />
{<br />
p = StripNops(p);<br />
20 assert(p −> Type() == control.boolean_type);<br />
if (p −> IsConstant())<br />
{<br />
if (IsZero(p) != cond)<br />
25 EmitBranch(OP_GOTO, lab, over);<br />
return;<br />
}<br />
AstPreUnaryExpression* pre = p −> PreUnaryExpressionCast();<br />
30 if (pre) // must be !<br />
{<br />
//<br />
// branch_if(!e,c,l) => branch_if(e,!c,l)<br />
//<br />
35 assert(pre −> Tag() == AstPreUnaryExpression::NOT);<br />
EmitBranchIfExpression(pre −> expression, ! cond, lab, over);<br />
return;<br />
}<br />
40 AstConditionalExpression* conditional = p −> ConditionalExpressionCast();<br />
if (conditional)<br />
{<br />
if (conditional −> test_expression −> IsConstant())<br />
{<br />
45 //<br />
// branch_if(true?a:b, cond, lab) => branch_if(a, cond, lab);<br />
// branch_if(false?a:b, cond, lab) => branch_if(b, cond, lab);<br />
//<br />
EmitBranchIfExpression((IsZero(conditional −> test_expression)<br />
50 ? conditional −> false_expression<br />
: conditional −> true_expression),<br />
cond, lab, over);<br />
}<br />
else if (IsOne(conditional −> true_expression))<br />
55 {<br />
//<br />
// branch_if(expr?true:true, c, l) => expr, branch if c<br />
// branch_if(expr?true:false, c, l) => branch_if(expr, c, l);<br />
// branch_if(expr?true:b, c, l) => branch_if(expr || b, c, l);<br />
60 //<br />
if (IsOne(conditional −> false_expression))<br />
{<br />
EmitExpression(conditional −> test_expression, false);<br />
if (cond)<br />
65 EmitBranch(OP_GOTO, lab, over);<br />
}<br />
else if (IsZero(conditional −> false_expression))<br />
{<br />
EmitBranchIfExpression(conditional −> test_expression,<br />
70 cond, lab, over);<br />
Dienstag Mai 31, 2005 1/12<br />
Gedruckt von Rainer Koschke<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 3/12<br />
EmitBranchIfExpression(conditional −> test_expression, false,<br />
skip, over);<br />
EmitBranchIfExpression(conditional −> true_expression, false,<br />
lab, over);<br />
145 DefineLabel(skip);<br />
CompleteLabel(skip);<br />
}<br />
}<br />
else if (IsZero(conditional −> false_expression))<br />
150 {<br />
//<br />
// branch_if(expr?a:false, c, l) => branch_if(expr && a, c, l);<br />
//<br />
if (! cond)<br />
155 {<br />
EmitBranchIfExpression(conditional −> test_expression, false,<br />
lab, over);<br />
EmitBranchIfExpression(conditional −> true_expression, false,<br />
lab, over);<br />
160 }<br />
else<br />
{<br />
Label skip;<br />
EmitBranchIfExpression(conditional −> test_expression, false,<br />
165 skip, over);<br />
EmitBranchIfExpression(conditional −> true_expression, true,<br />
lab, over);<br />
DefineLabel(skip);<br />
CompleteLabel(skip);<br />
170 }<br />
}<br />
else<br />
{<br />
//<br />
175 // branch_if(expr?a:b, c, l) =><br />
// branch_if(expr, false, lab1)<br />
// branch_if(a, c, l)<br />
// goto lab2<br />
// lab1: branch_if(b, c, l)<br />
180 // lab2:<br />
//<br />
Label lab1, lab2;<br />
EmitBranchIfExpression(conditional −> test_expression, false, lab1,<br />
over);<br />
185 EmitBranchIfExpression(conditional −> true_expression, cond, lab,<br />
over);<br />
EmitBranch(OP_GOTO, lab2, over);<br />
DefineLabel(lab1);<br />
CompleteLabel(lab1);<br />
190 EmitBranchIfExpression(conditional −> false_expression, cond, lab,<br />
over);<br />
DefineLabel(lab2);<br />
CompleteLabel(lab2);<br />
}<br />
195 return;<br />
}<br />
AstInstanceofExpression* instanceof = p −> InstanceofExpressionCast();<br />
if (instanceof)<br />
200 {<br />
AstExpression* expr = StripNops(instanceof −> expression);<br />
TypeSymbol* left_type = expr −> Type();<br />
TypeSymbol* right_type = instanceof −> type −> symbol;<br />
if (right_type −> num_dimensions > 255)<br />
205 {<br />
semantic.ReportSemError(SemanticError::ARRAY_OVERFLOW,<br />
instanceof −> type);<br />
}<br />
if (left_type == control.null_type)<br />
210 {<br />
Dienstag Mai 31, 2005 3/12<br />
Gedruckt von Rainer Koschke<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 2/12<br />
}<br />
else if (cond)<br />
{<br />
EmitBranchIfExpression(conditional −> test_expression, true,<br />
75 lab, over);<br />
EmitBranchIfExpression(conditional −> false_expression, true,<br />
lab, over);<br />
}<br />
else<br />
80 {<br />
Label skip;<br />
EmitBranchIfExpression(conditional −> test_expression, true,<br />
skip, over);<br />
EmitBranchIfExpression(conditional −> false_expression, false,<br />
85 lab, over);<br />
DefineLabel(skip);<br />
CompleteLabel(skip);<br />
}<br />
}<br />
90 else if (IsZero(conditional −> true_expression))<br />
{<br />
//<br />
// branch_if(expr?false:true, c, l) => branch_if(expr, ! c, l);<br />
// branch_if(expr?false:false, c, l) => expr, branch if ! c<br />
95 // branch_if(expr?false:b, c, l) => branch_if(!expr && b, c, l);<br />
//<br />
if (IsOne(conditional −> false_expression))<br />
{<br />
EmitBranchIfExpression(conditional −> test_expression,<br />
100 ! cond, lab, over);<br />
}<br />
else if (IsZero(conditional −> false_expression))<br />
{<br />
EmitExpression(conditional −> test_expression, false);<br />
105 if (! cond)<br />
EmitBranch(OP_GOTO, lab, over);<br />
}<br />
else if (! cond)<br />
{<br />
110 EmitBranchIfExpression(conditional −> test_expression, true,<br />
lab, over);<br />
EmitBranchIfExpression(conditional −> false_expression, false,<br />
lab, over);<br />
}<br />
115 else<br />
{<br />
Label skip;<br />
EmitBranchIfExpression(conditional −> test_expression, true,<br />
skip, over);<br />
120 EmitBranchIfExpression(conditional −> false_expression, true,<br />
lab, over);<br />
DefineLabel(skip);<br />
CompleteLabel(skip);<br />
}<br />
125 }<br />
else if (IsOne(conditional −> false_expression))<br />
{<br />
//<br />
// branch_if(expr?a:true, c, l) => branch_if(!expr || a, c, l);<br />
130 //<br />
if (cond)<br />
{<br />
EmitBranchIfExpression(conditional −> test_expression, false,<br />
lab, over);<br />
135 EmitBranchIfExpression(conditional −> true_expression, true,<br />
lab, over);<br />
}<br />
else<br />
{<br />
140 Label skip;<br />
2/12 Dienstag Mai 31, 2005<br />
Gedruckt von Rainer Koschke<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 4/12<br />
//<br />
// We know the result: false. But emit the left expression,<br />
// in case of side effects in (expr ? null : null).<br />
//<br />
215 EmitExpression(expr, false);<br />
if (! cond)<br />
EmitBranch(OP_GOTO, lab, over);<br />
}<br />
else if (expr −> IsConstant() || // a String constant<br />
220 expr −> BinaryExpressionCast()) // a String concat<br />
{<br />
//<br />
// We know the result: true, since the expression is non−null<br />
// and String is a final class.<br />
225 //<br />
assert(left_type == control.String());<br />
EmitExpression(expr, false);<br />
if (cond)<br />
EmitBranch(OP_GOTO, lab, over);<br />
230 }<br />
else if ((expr −> ThisExpressionCast() ||<br />
expr −> SuperExpressionCast() ||<br />
expr −> ClassLiteralCast() ||<br />
expr −> ClassCreationExpressionCast() ||<br />
235 expr −> ArrayCreationExpressionCast()) &&<br />
left_type −> IsSubtype(right_type))<br />
{<br />
//<br />
// We know the result: true, since the expression is non−null.<br />
240 //<br />
EmitExpression(expr, false);<br />
if (cond)<br />
EmitBranch(OP_GOTO, lab, over);<br />
}<br />
245 else<br />
{<br />
EmitExpression(expr);<br />
PutOp(OP_INSTANCEOF);<br />
PutU2(RegisterClass(right_type));<br />
250 EmitBranch((cond ? OP_IFNE : OP_IFEQ), lab, over);<br />
}<br />
return;<br />
}<br />
255 //<br />
// dispose of non−binary expression case by just evaluating<br />
// operand and emitting appropiate test.<br />
//<br />
AstBinaryExpression* bp = p −> BinaryExpressionCast();<br />
260 if (! bp)<br />
{<br />
EmitExpression(p);<br />
EmitBranch((cond ? OP_IFNE : OP_IFEQ), lab, over);<br />
return;<br />
265 }<br />
//<br />
// Here if binary expression, so extract operands<br />
//<br />
270 AstExpression* left = StripNops(bp −> left_expression);<br />
AstExpression* right = StripNops(bp −> right_expression);<br />
TypeSymbol* left_type = left −> Type();<br />
TypeSymbol* right_type = right −> Type();<br />
275 switch (bp −> Tag())<br />
{<br />
case AstBinaryExpression::AND_AND:<br />
//<br />
// branch_if(true&&b, cond, lab) => branch_if(b, cond, lab);<br />
280 // branch_if(false&&b, cond, lab) => branch_if(false, cond, lab);<br />
4/12 Dienstag Mai 31, 2005<br />
Gedruckt von Rainer Koschke<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 7/12<br />
420 //<br />
if (control.IsSimpleIntegerValueType(left_type) ||<br />
left_type == control.boolean_type)<br />
{<br />
assert(control.IsSimpleIntegerValueType(right_type) ||<br />
425 right_type == control.boolean_type);<br />
if (IsZero(left) || IsZero(right))<br />
{<br />
if (left_type == control.boolean_type)<br />
430 {<br />
//<br />
// One of the operands is false. Branch on the other.<br />
//<br />
EmitBranchIfExpression(IsZero(left) ? right : left,<br />
435 cond == (bp −> Tag() != AstBinaryExpr<br />
ession::EQUAL_EQUAL),<br />
lab, over);<br />
}<br />
else<br />
{<br />
440 //<br />
// One of the operands is zero. Only emit the other.<br />
//<br />
EmitExpression(IsZero(left) ? right : left);<br />
445 if (bp −> Tag() == AstBinaryExpression::EQUAL_EQUAL)<br />
EmitBranch((cond ? OP_IFEQ : OP_IFNE), lab, over);<br />
else EmitBranch((cond ? OP_IFNE : OP_IFEQ), lab, over);<br />
}<br />
}<br />
450 else<br />
{<br />
EmitExpression(left);<br />
EmitExpression(right);<br />
455 if (bp −> Tag() == AstBinaryExpression::EQUAL_EQUAL)<br />
EmitBranch((cond ? OP_IF_ICMPEQ : OP_IF_ICMPNE), lab, over);<br />
else<br />
EmitBranch((cond ? OP_IF_ICMPNE : OP_IF_ICMPEQ), lab, over);<br />
}<br />
460<br />
return;<br />
}<br />
//<br />
465 // Both operands are reference types: just do the comparison.<br />
//<br />
if (IsReferenceType(left_type))<br />
{<br />
assert(IsReferenceType(right_type));<br />
470 EmitExpression(left);<br />
EmitExpression(right);<br />
if (bp −> Tag() == AstBinaryExpression::EQUAL_EQUAL)<br />
EmitBranch((cond ? OP_IF_ACMPEQ : OP_IF_ACMPNE), lab, over);<br />
475 else EmitBranch((cond ? OP_IF_ACMPNE : OP_IF_ACMPEQ), lab, over);<br />
return;<br />
}<br />
480 break;<br />
case AstBinaryExpression::IOR:<br />
//<br />
// One argument is false. Branch on other.<br />
//<br />
485 if (IsZero(left) || IsZero(right))<br />
{<br />
EmitBranchIfExpression(IsZero(left) ? right : left,<br />
cond, lab, over);<br />
Dienstag Mai 31, 2005 7/12<br />
Gedruckt von Rainer Koschke<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 9/12<br />
assert(left_type != control.boolean_type);<br />
560 if (control.IsSimpleIntegerValueType(left_type))<br />
{<br />
//<br />
// we have already dealt with EQUAL_EQUAL and NOT_EQUAL for the case<br />
// of two integers, but still need to look for comparisons for which<br />
565 // one operand may be zero.<br />
//<br />
if (IsZero(left))<br />
{<br />
EmitExpression(right);<br />
570 switch (bp −> Tag())<br />
{<br />
case AstBinaryExpression::LESS:<br />
// if (0 < x) same as if (x > 0)<br />
op_true = OP_IFGT;<br />
575 op_false = OP_IFLE;<br />
break;<br />
case AstBinaryExpression::LESS_EQUAL:<br />
// if (0 = 0)<br />
op_true = OP_IFGE;<br />
580 op_false = OP_IFLT;<br />
break;<br />
case AstBinaryExpression::GREATER:<br />
// if (0 > x) same as if (x < 0)<br />
op_true = OP_IFLT;<br />
585 op_false = OP_IFGE;<br />
break;<br />
case AstBinaryExpression::GREATER_EQUAL:<br />
// if (0 >= x) same as if (x Tag())<br />
{<br />
case AstBinaryExpression::LESS:<br />
op_true = OP_IFLT;<br />
605 op_false = OP_IFGE;<br />
break;<br />
case AstBinaryExpression::LESS_EQUAL:<br />
op_true = OP_IFLE;<br />
op_false = OP_IFGT;<br />
610 break;<br />
case AstBinaryExpression::GREATER:<br />
op_true = OP_IFGT;<br />
op_false = OP_IFLE;<br />
break;<br />
615 case AstBinaryExpression::GREATER_EQUAL:<br />
op_true = OP_IFGE;<br />
op_false = OP_IFLT;<br />
break;<br />
default:<br />
620 assert(false);<br />
break;<br />
}<br />
}<br />
else<br />
625 {<br />
EmitExpression(left);<br />
EmitExpression(right);<br />
Dienstag Mai 31, 2005 9/12<br />
Gedruckt von Rainer Koschke<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 8/12<br />
return;<br />
490 }<br />
//<br />
// One argument is true. Emit the other, and result is true.<br />
//<br />
495 if (IsOne(left) || IsOne(right))<br />
{<br />
EmitExpression(IsOne(left) ? right : left, false);<br />
if (cond)<br />
EmitBranch(OP_GOTO, lab, over);<br />
500 return;<br />
}<br />
break;<br />
case AstBinaryExpression::AND:<br />
//<br />
505 // One argument is true. Branch on other.<br />
//<br />
if (IsOne(left) || IsOne(right))<br />
{<br />
EmitBranchIfExpression(IsOne(left) ? right : left,<br />
510 cond, lab, over);<br />
return;<br />
}<br />
//<br />
515 // One argument is false. Emit the other, and result is false.<br />
//<br />
if (IsZero(left) || IsZero(right))<br />
{<br />
EmitExpression(IsZero(left) ? right : left, false);<br />
520 if (! cond)<br />
EmitBranch(OP_GOTO, lab, over);<br />
return;<br />
}<br />
break;<br />
525 default:<br />
break;<br />
}<br />
//<br />
530 // here if not comparison, comparison for non−integral numeric types, or<br />
// integral comparison for which no special casing needed.<br />
// Begin by dealing with non−comparisons<br />
//<br />
switch (bp −> Tag())<br />
535 {<br />
case AstBinaryExpression::LESS:<br />
case AstBinaryExpression::LESS_EQUAL:<br />
case AstBinaryExpression::GREATER:<br />
case AstBinaryExpression::GREATER_EQUAL:<br />
540 case AstBinaryExpression::EQUAL_EQUAL:<br />
case AstBinaryExpression::NOT_EQUAL:<br />
break; // break to continue comparison processing<br />
default:<br />
//<br />
545 // not a comparison, get the (necessarily boolean) value<br />
// of the expression and branch on the result<br />
//<br />
EmitExpression(p);<br />
EmitBranch(cond ? OP_IFNE : OP_IFEQ, lab, over);<br />
550 return;<br />
}<br />
//<br />
//<br />
555 //<br />
Opcode opcode = OP_NOP,<br />
op_true,<br />
op_false;<br />
8/12 Dienstag Mai 31, 2005<br />
Gedruckt von Rainer Koschke<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 10/12<br />
switch (bp −> Tag())<br />
630 {<br />
case AstBinaryExpression::LESS:<br />
op_true = OP_IF_ICMPLT;<br />
op_false = OP_IF_ICMPGE;<br />
break;<br />
635 case AstBinaryExpression::LESS_EQUAL:<br />
op_true = OP_IF_ICMPLE;<br />
op_false = OP_IF_ICMPGT;<br />
break;<br />
case AstBinaryExpression::GREATER:<br />
640 op_true = OP_IF_ICMPGT;<br />
op_false = OP_IF_ICMPLE;<br />
break;<br />
case AstBinaryExpression::GREATER_EQUAL:<br />
op_true = OP_IF_ICMPGE;<br />
645 op_false = OP_IF_ICMPLT;<br />
break;<br />
default:<br />
assert(false);<br />
break;<br />
650 }<br />
}<br />
}<br />
else if (left_type == control.long_type)<br />
{<br />
655 EmitExpression(left);<br />
EmitExpression(right);<br />
opcode = OP_LCMP;<br />
660 //<br />
// branch according to result value on stack<br />
//<br />
switch (bp −> Tag())<br />
{<br />
665 case AstBinaryExpression::EQUAL_EQUAL:<br />
op_true = OP_IFEQ;<br />
op_false = OP_IFNE;<br />
break;<br />
case AstBinaryExpression::NOT_EQUAL:<br />
670 op_true = OP_IFNE;<br />
op_false = OP_IFEQ;<br />
break;<br />
case AstBinaryExpression::LESS:<br />
op_true = OP_IFLT;<br />
675 op_false = OP_IFGE;<br />
break;<br />
case AstBinaryExpression::LESS_EQUAL:<br />
op_true = OP_IFLE;<br />
op_false = OP_IFGT;<br />
680 break;<br />
case AstBinaryExpression::GREATER:<br />
op_true = OP_IFGT;<br />
op_false = OP_IFLE;<br />
break;<br />
685 case AstBinaryExpression::GREATER_EQUAL:<br />
op_true = OP_IFGE;<br />
op_false = OP_IFLT;<br />
break;<br />
default:<br />
690 assert(false);<br />
break;<br />
}<br />
}<br />
else if (left_type == control.float_type)<br />
695 {<br />
EmitExpression(left);<br />
EmitExpression(right);<br />
10/12 Dienstag Mai 31, 2005<br />
Gedruckt von Rainer Koschke<br />
Gedruckt von Rainer Koschke<br />
Gedruckt von Rainer Koschke<br />
Gedruckt von Rainer Koschke<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 5/12<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 6/12<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 11/12<br />
Mai 31, 05 7:18 b.cpp<br />
Seite 12/12<br />
//<br />
EmitBranch(OP_GOTO, lab, over);<br />
switch (bp −> Tag())<br />
op_true = OP_IFGE;<br />
if (left −> IsConstant())<br />
}<br />
700 {<br />
770 op_false = OP_IFLT;<br />
{<br />
}<br />
case AstBinaryExpression::EQUAL_EQUAL:<br />
break;<br />
if (IsOne(left))<br />
//<br />
opcode = OP_FCMPL;<br />
default:<br />
285 EmitBranchIfExpression(right, cond, lab, over);<br />
355 // branch_if(a||b,true,lab) =><br />
op_true = OP_IFEQ;<br />
assert(false);<br />
else if (! cond)<br />
// branch_if(a,true,lab);<br />
op_false = OP_IFNE;<br />
break;<br />
EmitBranch(OP_GOTO, lab, over);<br />
// branch_if(b,true,lab);<br />
705 break;<br />
775 }<br />
}<br />
// branch_if(a||b,false,lab) =><br />
case AstBinaryExpression::NOT_EQUAL:<br />
}<br />
//<br />
// branch_if(a,true,skip);<br />
opcode = OP_FCMPL;<br />
else assert(false && "comparison of unsupported type");<br />
290 // branch_if(a&&true, cond, lab) => branch_if(a, cond, lab);<br />
360 // branch_if(b,false,lab);<br />
op_true = OP_IFNE;<br />
// branch_if(a&&false, cond, lab) => emit(a), pop; for side effects<br />
// skip:<br />
op_false = OP_IFEQ;<br />
if (opcode != OP_NOP)<br />
//<br />
//<br />
710 break;<br />
780 PutOp(opcode); // if need to emit comparison before branch<br />
else if (right −> IsConstant())<br />
else if (cond)<br />
case AstBinaryExpression::LESS:<br />
{<br />
{<br />
opcode = OP_FCMPG;<br />
EmitBranch (cond ? op_true : op_false, lab, over);<br />
295 if (IsOne(right))<br />
365 EmitBranchIfExpression(left, true, lab, over);<br />
op_true = OP_IFLT;<br />
}<br />
EmitBranchIfExpression(left, cond, lab, over);<br />
EmitBranchIfExpression(right, true, lab, over);<br />
op_false = OP_IFGE;<br />
else<br />
}<br />
715 break;<br />
{<br />
else<br />
case AstBinaryExpression::LESS_EQUAL:<br />
EmitExpression(left, false);<br />
{<br />
opcode = OP_FCMPG;<br />
300 if (! cond)<br />
370 Label skip;<br />
op_true = OP_IFLE;<br />
EmitBranch(OP_GOTO, lab, over);<br />
EmitBranchIfExpression(left, true, skip, over);<br />
op_false = OP_IFGT;<br />
}<br />
EmitBranchIfExpression(right, false, lab, over);<br />
720 break;<br />
}<br />
DefineLabel(skip);<br />
case AstBinaryExpression::GREATER:<br />
//<br />
CompleteLabel(skip);<br />
opcode = OP_FCMPL;<br />
305 // branch_if(a&&b, true, lab) =><br />
375 }<br />
op_true = OP_IFGT;<br />
// branch_if(a,false,skip);<br />
return;<br />
op_false = OP_IFLE;<br />
// branch_if(b,true,lab);<br />
case AstBinaryExpression::XOR: // ^ on booleans is equavalent to !=<br />
725 break;<br />
// skip:<br />
assert(left_type == control.boolean_type);<br />
case AstBinaryExpression::GREATER_EQUAL:<br />
// branch_if(a&&b, false, lab) =><br />
// Fallthrough!<br />
opcode = OP_FCMPL;<br />
310 // branch_if(a,false,lab);<br />
380 case AstBinaryExpression::EQUAL_EQUAL:<br />
op_true = OP_IFGE;<br />
// branch_if(b,false,lab);<br />
case AstBinaryExpression::NOT_EQUAL:<br />
op_false = OP_IFLT;<br />
//<br />
//<br />
730 break;<br />
else if (cond)<br />
// One of the operands is null. We must evaluate both operands, to get<br />
default:<br />
{<br />
// any side effects in (expr ? null : null).<br />
assert(false);<br />
315 Label skip;<br />
385 //<br />
break;<br />
EmitBranchIfExpression(left, false, skip, over);<br />
if (left_type == control.null_type || right_type == control.null_type)<br />
}<br />
EmitBranchIfExpression(right, true, lab, over);<br />
{<br />
735 }<br />
DefineLabel(skip);<br />
EmitExpression(left, left_type != control.null_type);<br />
else if (left_type == control.double_type)<br />
CompleteLabel(skip);<br />
EmitExpression(right, right_type != control.null_type);<br />
{<br />
320 }<br />
390 if (left_type == right_type)<br />
EmitExpression(left);<br />
else<br />
{<br />
EmitExpression(right);<br />
{<br />
if (cond == (bp −> Tag() == AstBinaryExpression::EQUAL_EQUAL))<br />
740 switch (bp −> Tag())<br />
EmitBranchIfExpression(left, false, lab, over);<br />
{<br />
{<br />
EmitBranchIfExpression(right, false, lab, over);<br />
EmitBranch(OP_GOTO, lab, over);<br />
case AstBinaryExpression::EQUAL_EQUAL:<br />
325 }<br />
395 }<br />
opcode = OP_DCMPL;<br />
return;<br />
}<br />
op_true = OP_IFEQ;<br />
case AstBinaryExpression::OR_OR:<br />
else<br />
745 op_false = OP_IFNE;<br />
//<br />
{<br />
break;<br />
// branch_if(false||b, cond, lab) => branch_if(b, cond, lab);<br />
if (bp −> Tag() == AstBinaryExpression::EQUAL_EQUAL)<br />
case AstBinaryExpression::NOT_EQUAL:<br />
330 // branch_if(true||b, cond, lab) => branch_if(true, cond, lab);<br />
400 EmitBranch(cond ? OP_IFNULL : OP_IFNONNULL, lab, over);<br />
opcode = OP_DCMPL;<br />
//<br />
else EmitBranch(cond ? OP_IFNONNULL : OP_IFNULL, lab, over);<br />
op_true = OP_IFNE;<br />
if (left −> IsConstant())<br />
}<br />
750 op_false = OP_IFEQ;<br />
{<br />
return;<br />
break;<br />
if (IsZero(left))<br />
}<br />
case AstBinaryExpression::LESS:<br />
335 EmitBranchIfExpression(right, cond, lab, over);<br />
405<br />
opcode = OP_DCMPG;<br />
else if (cond)<br />
//<br />
op_true = OP_IFLT;<br />
EmitBranch(OP_GOTO, lab, over);<br />
// One of the operands is true. Branch on the other.<br />
755 op_false = OP_IFGE;<br />
}<br />
//<br />
break;<br />
//<br />
if (left_type == control.boolean_type &&<br />
case AstBinaryExpression::LESS_EQUAL:<br />
340 // branch_if(a||false, cond, lab) => branch_if(a, cond, lab);<br />
410 (IsOne(left) || IsOne(right)))<br />
opcode = OP_DCMPG;<br />
// branch_if(a||true, cond, lab) => emit(a), pop; for side effects<br />
{<br />
op_true = OP_IFLE;<br />
//<br />
EmitBranchIfExpression(IsOne(left) ? right : left,<br />
760 op_false = OP_IFGT;<br />
else if (right −> IsConstant())<br />
cond == (bp −> Tag() == AstBinaryExpression::<br />
break;<br />
{<br />
EQUAL_EQUAL),<br />
case AstBinaryExpression::GREATER:<br />
345 if (IsZero(right))<br />
lab, over);<br />
opcode = OP_DCMPL;<br />
EmitBranchIfExpression(left, cond, lab, over);<br />
415 return;<br />
op_true = OP_IFGT;<br />
else<br />
}<br />
765 op_false = OP_IFLE;<br />
{<br />
break;<br />
EmitExpression(left, false);<br />
//<br />
case AstBinaryExpression::GREATER_EQUAL:<br />
350 if (cond)<br />
// Both operands are integer.<br />
opcode = OP_DCMPL;<br />
Dienstag Mai 31, 2005 5/12<br />
6/12 Dienstag Mai 31, 2005<br />
Dienstag Mai 31, 2005 11/12<br />
12/12 Dienstag Mai 31, 2005<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 560 / 634<br />
Implementierung<br />
Ignoranz, Not-Invented-Here-Syndrom oder die<br />
neuerfundenen Räder<br />
p u b l i c c l a s s A r t i c l e s {<br />
p r i v a t e A r t i c l e item ;<br />
p r i v a t e A r t i c l e s n e x t ;<br />
}<br />
p u b l i c A r t i c l e s ( ) { . . . }<br />
p u b l i c v o i d Add ( A r t i c l e a r t ) { . . . }<br />
p u b l i c v o i d Show ( ) { . . . }<br />
p u b l i c c l a s s A r t i c l e s {<br />
p r i v a t e j a v a . u t i l . L i n k e d L i s t a r t i c l e s ;<br />
}<br />
p u b l i c A r t i c l e s ( ) { . . . }<br />
p u b l i c v o i d Add ( A r t i c l e a r t ) { . . . }<br />
p u b l i c v o i d Show ( ) { . . . }<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 561 / 634
Implementierung<br />
Die Oglala des 21. Jahrhunderts<br />
p u b l i c c l a s s A r t i c l e s {<br />
p r i v a t e j a v a . u t i l . L i n k e d L i s t a r t i c l e s ;<br />
}<br />
p u b l i c A r t i c l e s ( ) { . . . }<br />
p u b l i c v o i d Add ( A r t i c l e a r t ) { a r t i c l e s . addLast ( a r t ) ; }<br />
p u b l i c v o i d Show ( ) {<br />
L i s t I t e r a t o r l i s t I t r = a r t i c l e s . l i s t I t e r a t o r ( ) ;<br />
w h i l e ( l i s t I t r . hasNext ( ) ) {<br />
A r t i c l e a r t = ( A r t i c l e ) l i s t I t r . n e x t ( ) ;<br />
a r t . show ( ) ;<br />
}<br />
}<br />
Oglala (bedeutet: ” Die ihre Habe verschleudern“ im Sinne von<br />
Großzügigkeit) sind ein Stamm der Lakota-Sioux-Indianer.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 562 / 634<br />
Implementierung<br />
Prinzipien<br />
einheitlich<br />
so einfach wie möglich<br />
sprechend, direkt verständlich<br />
prägnant<br />
frei von Redundanz<br />
übersichtlich<br />
strukturiert<br />
abgeschlossen<br />
abstrakt<br />
Separation of Concerns<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 563 / 634
Implementierung<br />
Was alles in den Code-Inspektionen 2004/05 auffiel<br />
Verwendung von verketteten Listen, wo Maps angebracht wären;<br />
manuelle Implementierung der entsprechenden Map-Zugriffe<br />
Verwendung von verketteten Listen, wo ArrayList angebrachter wäre;<br />
z.B. Iterieren durch die LinkedList über Indexzugriffe...<br />
alle Methoden einer Klasse static; die statischen Variablen werden<br />
über den Konstruktor initialisiert<br />
alle Methoden einer Klasse static, die Instanz, auf der die Methoden<br />
arbeiten, werden z.B. als LinkedList jeweils übergeben<br />
Neuimplementierung von Sortieralgorithmen<br />
die gesamte GUI wird in einer einzigen Klasse implementiert<br />
Datenbankzugriffe werden über alle Klassen verteilt, statt gekapselt<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 564 / 634<br />
Implementierung<br />
Was alles in den Code-Inspektionen 2004/05 auffiel<br />
Query wird mit select * gemacht, danach werden manuell die<br />
benötigten Spalten rausgefiltert<br />
Datenbanknamen usw. werden hartcodiert<br />
manuelle Implementierung von Parsern für verschiedene Zwecke (wo<br />
z.B. XML oder Properties-Datei angebracht wäre)<br />
mehrfache Implementierung der gleichen Hilfsklassen von<br />
verschiedenen Leuten, z.B. Übersetzungen (dementsprechend auch<br />
mit verschiedenen Dateiformaten)<br />
keine Berücksichtigung von Performance (z.B. bei Operationen auf<br />
verketteter Liste, Dateioperationen; Konfigurationsdatei wird bei<br />
jedem Methodenaufruf neu eingelesen)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 565 / 634
Implementierung<br />
Wiederholungsfragen<br />
Was sind Refactorings und Bad Smells?<br />
Wie wird Refactoring durchgeführt?<br />
Nennen Sie Beispiele für Bad Smells.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 566 / 634<br />
Benutzerdokumentation<br />
Benutzerdokumentation<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Rainer<strong>Projekt</strong> Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 567 / 634
Benutzerdokumentation<br />
Lernziele<br />
Eine Benutzerdokumentation erstellen können<br />
wissen, was hinein gehört<br />
Arten kennen<br />
ihre Qualitäten kennen<br />
Prozess ihrer Erstellung kennen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 568 / 634<br />
Benutzerdokumentation<br />
Was ist Benutzerdokumentation?<br />
Definition (Benutzerdokumentation)<br />
ist eine Methode, technische Information einer <strong>Software</strong> an Nichttechniker<br />
zu vermitteln, um sie in ihrer Aufgabe zu unterstützen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 572 / 634
Benutzerdokumentation<br />
Ist eine Methode. . . zu vermitteln. . .<br />
Es ist nur eine Methode unter vielen:<br />
Schulungen<br />
Seminare<br />
Coaching<br />
Versuch-und-Irrtum<br />
Selbsterklärungsfähigkeit der <strong>Software</strong><br />
Hotline (Help-Desk)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 573 / 634<br />
Benutzerdokumentation<br />
. . . Nichttechnikern . . .<br />
Benutzer sind keine <strong>Software</strong>-Experten und wollen auch keine werden.<br />
Sie wollen das wissen, was Sie für Ihre Aufgabe benötigen und nicht mehr.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 574 / 634
Benutzerdokumentation<br />
. . . um sie in ihrer Aufgabe zu unterstützen. . .<br />
Ihre Aufgabe ist es nicht, <strong>Software</strong> zu bedienen, sondern ein reales<br />
Problem zu lösen.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 575 / 634<br />
Benutzerdokumentation<br />
Arten der Dokumentation<br />
Benutzungshandbuch<br />
Referenzhandbuch<br />
Tutorial<br />
Administrationshandbuch<br />
Installationshandbuch<br />
Quick Start Guide<br />
Reference Card<br />
Wall Charts und Poster<br />
Online-Dokumentation (Multi-Media)<br />
Online-Kontexthilfe<br />
Readme.txt<br />
Known-Bugs<br />
. . .<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 576 / 634
Benutzerdokumentation<br />
Arten und Leser der Dokumentation (Sommerville 2004)<br />
System<br />
evaluators<br />
Functional<br />
description<br />
Description<br />
of services<br />
provided<br />
System<br />
administrator<br />
Installation<br />
document<br />
How to<br />
install<br />
Novice<br />
users<br />
Introductory<br />
manual<br />
Getting<br />
started<br />
Experienced<br />
users<br />
Reference<br />
manual<br />
Details of all<br />
system<br />
facilities<br />
System<br />
adminstrator<br />
System<br />
admin. guide<br />
Operate<br />
and maintain<br />
system<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 577 / 634<br />
Benutzerdokumentation<br />
Wie findet man, was zu dokumentieren ist?<br />
Quellen:<br />
Kommandos und Menüs in der Benutzungsoberfläche<br />
Aufgaben der Benutzer (was sie tun)<br />
Definition von Begriffen (Glossar)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 578 / 634
Benutzerdokumentation<br />
Struktur I<br />
Titel<br />
Inhaltsverzeichnis<br />
1. Einführung<br />
a. Adressierte Leser<br />
b. Zweck<br />
c. Verwandte Dokumente<br />
d. Konventionen<br />
e. Information über die Verwendung des Dokuments<br />
f. Instruktionen für Problemberichte<br />
2. Übersicht<br />
a. Zugrunde liegende Konzepte, Einbettung<br />
b. Funktionale Beschreibung<br />
c. Gefahren und Warnungen<br />
3. Instruktionen (für jeden Benutzertyp einzeln)<br />
a. Produktfunktionen (mit Beispielen)<br />
b. Problembehandlung: Ursachen und Gründe<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 579 / 634<br />
Benutzerdokumentation<br />
Struktur II<br />
4. Referenz<br />
a. Fehlermeldungen und -ursachen<br />
b. Index der Operationen<br />
Anhang<br />
A Glossar<br />
B Index (notwendig für ≥ 30 Seiten, sonst mindestens nützlich)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 580 / 634
Benutzerdokumentation<br />
Scheibchen toter Bäume oder doch besser Elektrizität?<br />
Papier:<br />
” 150 Euro — und dafür nur eine CD?“<br />
deutsches Gesetz schreibt Handbuch vor<br />
Papier ist die zuverlässigere und bedienbarere Technologie<br />
erschwert <strong>Software</strong>-Piraterie<br />
Online-Dokumentation:<br />
einfachere Suche<br />
Information kann in vielen Formaten verpackt werden<br />
interaktiv (z.B. Tool-Tips)<br />
niedrigere Produktionskosten<br />
→ beides, aber mindestens Papier<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 581 / 634<br />
Benutzerdokumentation<br />
Wer sollte schreiben?<br />
Programmierer technischer Schreiber<br />
Technische Detailkenntnisse + -<br />
Schreibqualitäten - +<br />
Anwenderbrille - +<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 582 / 634
Benutzerdokumentation<br />
Wozu Dokumentation?<br />
Zwecke der Dokumentation:<br />
Erläuterung<br />
Definitionen, Beschreibungen, Erklärungen, Übersichten,<br />
Prozessbeschreibung<br />
Instruktion<br />
Produktfunktionen, Aufgaben<br />
Referenz<br />
Regelungen, Listen, Tabellen, spezifische Funktionen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 583 / 634<br />
Benutzerdokumentation<br />
Wann werden Benutzer die Dokumentation benutzen?<br />
. . . wenn sie zuversichtlich sind, dass<br />
sie finden, was sie suchen<br />
sie verstehen, was sie finden<br />
die Information korrekt ist<br />
die Information vollständig ist<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 584 / 634
Benutzerdokumentation<br />
Der Prozess, eine Dokumentation zu erstellen (Stimely<br />
1990)<br />
1 Definition<br />
2 Entwurf<br />
3 Schreiben<br />
4 Editieren<br />
5 Korrekturlesen<br />
6 Produktion<br />
7 Anpassung/Änderung<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 585 / 634<br />
Benutzerdokumentation<br />
1. Definition<br />
(5-10% der Gesamtzeit für Dokumentation)<br />
Erste Frage: Wer sind die Leser?<br />
Identifiziere den ” normalen“ Leser. Beschreibe, was Du über ihn weißt.<br />
Identifiziere die Annahmen über den Leser.<br />
Es könnte mehrere Kategorien von Lesern geben. Identifiziere sie alle.<br />
Beschreibe, was sie benötigen (Erläuterung, Instruktion, Referenz).<br />
Lege Gegenstände der Dokumentation (mit Namen) und Medien fest<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 586 / 634
Benutzerdokumentation<br />
2. Entwurf<br />
(10-30% der Gesamtzeit für Dokumentation)<br />
Plane für jeden Gegenstand:<br />
Inhaltsverzeichnis<br />
Schätzung der Anzahl Seiten/Fenster<br />
Musterlayout<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 587 / 634<br />
Benutzerdokumentation<br />
3. Schreiben<br />
(1-3 Stunden pro Seite/Fenster)<br />
Erste Fassung so schnell wie möglich schreiben. Dabei nicht editieren.<br />
Schreibblockade überkommen durch<br />
Verbalisieren (z.B. einem Unbedarften erklären)<br />
Zerlegung eines komplexen Gegenstands in seine Einzelteile<br />
Brain-Dump<br />
Mind-Map<br />
Auszeit nehmen und ausruhen<br />
(temporär) aufgeben und zum nächsten Abschnitt übergehen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 588 / 634
Benutzerdokumentation<br />
4. Editing<br />
(1-3 Stunden pro Seite/Fenster)<br />
Iterative Verbesserung:<br />
Bedürfnisse des Lesers Grammatik<br />
Struktur Orthographie<br />
Relevanz Konsistenz<br />
Vollständigkeit Konformität<br />
ansprechende graphische Darstellung Ausdrucksweise<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 589 / 634<br />
Benutzerdokumentation<br />
5. Korrekturlesen<br />
(5-20 Minuten pro Seite/Fenster)<br />
Unabhängige Begutachtung von<br />
technischer Korrektheit<br />
Vollständigkeit<br />
Verwendbarkeit<br />
Einhaltung des Stils<br />
Rechtmäßigkeit<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 590 / 634
Benutzerdokumentation<br />
6. Produktion<br />
(dauert immer länger als man denkt)<br />
Druck und Verteilung<br />
Herstellung der CD und Verteilung<br />
Publikation im Web<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 591 / 634<br />
Benutzerdokumentation<br />
7. Anpassung/ Änderung<br />
(benötigt Zeit – muss eingeplant werden)<br />
regelmäßige Überprüfung, um sicher zu stellen, dass Dokumentation<br />
aktuell bleibt<br />
Programmierer müssen Handbuch kennen!<br />
Dokumentation muss bei Analyse von Änderungsauswirkungen<br />
(Change-Impact) berücksichtigt werden<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 592 / 634
Benutzerdokumentation<br />
Hinweise und Regeln<br />
erkläre das zu lösende Problem<br />
stelle die Konzepte dar, nicht nur die Produktfunktionen<br />
beschreibe auch Anwendungsdomäne, nicht nur die <strong>Software</strong> selbst<br />
die Lektüre soll Spaß machen<br />
schreibe zur Leserschaft, nicht über sie<br />
konsistentes (und eingeschränktes) Vokabular benutzen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 593 / 634<br />
Benutzerdokumentation<br />
Hinweise und Regeln<br />
sei bestimmt<br />
fasse dich kurz (kurze Sätze, Paragraphen, Abschnitte)<br />
benutze einfache Sprache<br />
aktive statt passive Sprache<br />
erkläre den Zweck eines jeden Schritts<br />
sage, was in jedem Schritt passieren wird<br />
teste mit echten Benutzern<br />
kenne deinen Leser<br />
beachte Markenzeichen und Copyrights<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 594 / 634
Benutzerdokumentation<br />
Wiederholungsfragen<br />
Auf welche Weisen können Benutzer die Bedienung von <strong>Software</strong><br />
erlernen?<br />
Was ist Benutzerdokumentation?<br />
Nennen Sie Beispiele für <strong>Software</strong>-Dokumentationen.<br />
Wie sollte eine Benutzerdokumentation strukturiert werden?<br />
Wer sollte eine Benutzerdokumentation erstellen?<br />
Wie verläuft der Prozess, um eine Benutzerdokumentation zu<br />
erstellen?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 595 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Antworten auf gesammelte Fragen im Wiki<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Rainer<strong>Projekt</strong> Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 596 / 634
Antworten auf gesammelte Fragen im Wiki<br />
Objektorientierte Modellierung<br />
Übersicht über alle UML Diagramme: Welche gibt es alle und<br />
was ist ihr Verwendungsgebiet? (Keine Wiederholung über die<br />
Erstellung, Eigenschaften u.ä.)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 597 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Objektorientierte Modellierung<br />
Anwendungsfalldiagramm<br />
→ Übersicht von Anwendungsfällen, Zusammenhang mit Akteuren,<br />
Beziehungen zwischen Anwendungsfällen<br />
Klassendiagramm<br />
→ statische Beziehungen zwischen Dingen:<br />
Daten- bzw. Domänenmodell<br />
Klassenentwurf<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 598 / 634
Antworten auf gesammelte Fragen im Wiki<br />
Objektorientierte Modellierung<br />
Sequenzdiagramm<br />
→ Interaktionen zwischen Akteuren<br />
Interaktionen in Anwendungsfällen<br />
Interaktionen zwischen Komponenten der Architektur<br />
Programmablauf (Methoden und Klassen)<br />
Kollaborationsdiagramme<br />
→ äquivalent zu Sequenzdiagrammen<br />
→ heben Akteure und deren prinzipielle Interaktion hervor, Reihenfolge<br />
tritt in den Hintergrund<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 599 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Objektorientierte Modellierung<br />
Zustandsdiagramme<br />
→ zustandsbasiertes Verhalten, Reaktion auf Stimuli<br />
Modellierung von Anwendungsfällen mit Zuständen<br />
Objektlebenszyklus<br />
Protokolle in Architektur<br />
zustandsbasiertes Testen<br />
Aktivitätsdiagramme<br />
→ Abläufe: Aktionen und ihre Reihenfolge<br />
Modellierung von Geschäftsprozessen<br />
Beschreibung von Anwendungsfällen<br />
Spezifikation/Entwurf von Algorithmen<br />
Pfadtest<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 600 / 634
Antworten auf gesammelte Fragen im Wiki<br />
<strong>Software</strong>architektur<br />
Außerdem aus gegebenem Anlass, zu den unterschiedlichen<br />
Blickwinkel des Architekturentwurfs.<br />
Konzeptionelle Sicht nach Hofmeister u. a. 2000: Data und<br />
Control Konnektoren, Unterschiede? (Wir haben z.B. bei jeder<br />
Verbindung beides benutzt...??)<br />
Alternative Modellierung der Konzeptionellen Sicht mit UML?<br />
Vielleicht ein kleines Beispiel?<br />
Die Unterschiede und Zusammenhänge zwischen System,<br />
Subsystem, Modul und Komponente nochmal erläutern<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 601 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Konzeptioneller Blickwinkel (Hofmeister u. a. 2000)<br />
*<br />
CComponent<br />
cbinding<br />
*<br />
*<br />
*<br />
CPort<br />
Conceptual Configuration<br />
* connection *<br />
obeys<br />
1<br />
*<br />
CConnector<br />
0..1 0..1 0..1 * 0..1<br />
0..1<br />
0..1<br />
CRole<br />
* *<br />
obeys<br />
Protocol<br />
1 1 conjugate<br />
1<br />
*<br />
*<br />
cbinding<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 602 / 634<br />
*<br />
*
Antworten auf gesammelte Fragen im Wiki<br />
Konzeptionelle Sicht<br />
«Data»<br />
Text-Pipe<br />
Compiler<br />
«Component»<br />
FrontEnd<br />
«call»<br />
Producer<br />
«Data»<br />
AST-Pipe<br />
«Component»<br />
Main<br />
«call»<br />
«bind» «bind»<br />
«Component»<br />
MiddleEnd<br />
Consumer<br />
call ist ein Control-Konnektor;<br />
ein einfacher Aufruf<br />
«call»<br />
«bind» «bind»<br />
Producer<br />
«Data»<br />
IL-Pipe<br />
«Component»<br />
BackEnd<br />
Consumer<br />
«Data»<br />
Assembler-Pipe<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 603 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Modulblickwinkel (Hofmeister u. a. 2000)<br />
0..1<br />
Subsystem<br />
contain<br />
*<br />
Module<br />
0..1<br />
*<br />
*<br />
require<br />
provide<br />
*<br />
*<br />
*<br />
use<br />
*<br />
*<br />
Interface<br />
assigned−to<br />
Module (layer) A uses<br />
module (layer) B when<br />
A requires an interface<br />
that B provides<br />
*<br />
require<br />
* provide<br />
0..1<br />
* *<br />
Layer<br />
*<br />
* 0..1<br />
use<br />
*<br />
contain<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 604 / 634
Antworten auf gesammelte Fragen im Wiki<br />
Modulsicht<br />
FrontEnd<br />
<br />
Programrepresentation<br />
GetToken<br />
Lexer SyntaxAnalysis SemanticAnalysis<br />
Open<br />
TextBuffer<br />
GetText<br />
Main<br />
Parse Decorate<br />
Create<br />
AST<br />
Lookup<br />
Annotate<br />
Traverse<br />
Run<br />
<br />
MiddleEnd<br />
ILGenerator<br />
Optimizer<br />
Run<br />
Generate<br />
IL<br />
ControlFlowAnalyzer<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 605 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Ausführungsblickwinkel (Hofmeister u. a. 2000)<br />
*<br />
Communication<br />
Mechanism<br />
1<br />
*<br />
Communication<br />
Path<br />
*<br />
*<br />
*<br />
consume<br />
use mechanism<br />
communicate over<br />
<strong>Software</strong><br />
Platform<br />
Platform<br />
Element<br />
* 1 * *<br />
is a<br />
*<br />
Runtime<br />
Entity<br />
2..*<br />
*<br />
consume<br />
*<br />
contain<br />
Platform<br />
Resource<br />
assigned to<br />
assigned to<br />
* 1<br />
*<br />
Traverse<br />
Hardware<br />
Resource<br />
Module<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 606 / 634<br />
Run
Antworten auf gesammelte Fragen im Wiki<br />
Ausführungssicht<br />
Processor1<br />
*<br />
Lexer<br />
TextBuffer<br />
Shared Memory<br />
1<br />
1<br />
Processor2<br />
Main SyntaxAnalysis<br />
AST<br />
SemanticAnalysis<br />
ILGenerator<br />
Optimizer<br />
ControlFlowAnalyzer<br />
IL<br />
<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 607 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Entwurfsmuster und Architekturstile<br />
die factory method an einem kleinen konkreten<br />
Implementierungsbeispiel darstellen<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 608 / 634<br />
1
Antworten auf gesammelte Fragen im Wiki<br />
Fahrradladenbeispiel: Erweiterung für andere Domänen<br />
Anforderungen:<br />
Artikeldaten sollen von einer Datei gelesen werden können<br />
zukünftig sollen andere Domänen unterstützt werden (Fahrrad,<br />
Computer und Klettern)<br />
die Objekte dieser Domänen sind unterschiedlich<br />
notwendige Anpassungen sollen einfach realisiert werden können<br />
Lösungsstrategien:<br />
die Klassen der Benutzungsschnittstelle beziehen sich nur auf die<br />
Schnittstelle der abstrakten Klasse Artikel<br />
Datei hat gleiche Syntax für alle Domänen (nur die Inhalte variieren)<br />
die Artikel werden beim Einlesen der Datei als Objekte erzeugt<br />
→ aber der Leser muss doch die Konstruktoren der Objekte kennen, oder<br />
was?<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 609 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Lösungsstrategie<br />
GUI<br />
Artikel<br />
+ Preis()<br />
ComputerArtikel FahrradArtikel<br />
≪create≫<br />
Rahmen<br />
Felge<br />
Leser<br />
+ lies(dateiname)<br />
≪create≫ ≪create≫<br />
id=datei.liesId()<br />
s.FabrikMethode(id)<br />
FahrradSchöpfer<br />
ArtikelSchöpfer<br />
+ Artikel FabrikMethode(id)<br />
+FabrikMethode(id)<br />
if (id == ”rahmen”)<br />
return new Rahmen<br />
if (id == ”felge”)<br />
return new Felge<br />
ComputerSchöpfer<br />
+FabrikMethode(id)<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 610 / 634
Antworten auf gesammelte Fragen im Wiki<br />
Artikelklassen<br />
p u b l i c a b s t r a c t c l a s s A r t i k e l {<br />
d o u b l e P r e i s ( ) { . . . }<br />
}<br />
p u b l i c a b s t r a c t c l a s s F a h r r a d A r t i k e l e x t e n d s A r t i k e l {. . . }<br />
p u b l i c c l a s s F e l g e e x t e n d s F a h r r a d A r t i k e l {. . . }<br />
p u b l i c c l a s s Rahmen e x t e n d s F a h r r a d A r t i k e l {. . . }<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 611 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Leser<br />
p u b l i c c l a s s L e s e r {<br />
}<br />
A r t i k e l S c h o e p f e r s c h o e p f e r ;<br />
L e s e r ( A r t i k e l S c h o e p f e r s c h o e p f e r ) {<br />
t h i s . s c h o e p f e r = s c h o e p f e r ;<br />
}<br />
p r i v a t e S t r i n g r e a d i d ( F i l e I n p u t S t r e a m i n ) {. . . }<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 612 / 634
Antworten auf gesammelte Fragen im Wiki<br />
Leser (Forts.)<br />
p u b l i c v o i d l i e s ( S t r i n g dateiname ) throws j a v a . i o . I O E x c e p t i o n {<br />
F i l e I n p u t S t r e a m i n = new F i l e I n p u t S t r e a m ( dateiname ) ;<br />
S t r i n g i d ;<br />
A r t i k e l a r t i k e l ;<br />
w h i l e ( i n . a v a i l a b l e ( ) > 0) {<br />
i d = r e a d i d ( i n ) ;<br />
t r y {<br />
a r t i k e l = s c h o e p f e r . FabrikMethode ( i d ) ;<br />
}<br />
c a t c h ( A r t i k e l S c h o e p f e r . Unknown Id e ) {<br />
System . out . p r i n t ( ”unknown i d ” + i d ) ;<br />
// keep g o i n g<br />
}<br />
}<br />
i n . c l o s e ( ) ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 613 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Schöpfer<br />
p u b l i c a b s t r a c t c l a s s A r t i k e l S c h o e p f e r {<br />
}<br />
p u b l i c c l a s s Unknown Id e x t e n d s E x c e p t i o n { } ;<br />
a b s t r a c t A r t i k e l FabrikMethode ( S t r i n g i d ) throws Unknown Id ;<br />
p u b l i c c l a s s F a h r r a d S c h o e p f e r e x t e n d s A r t i k e l S c h o e p f e r {<br />
}<br />
F a h r r a d A r t i k e l FabrikMethode ( S t r i n g i d ) throws Unknown Id {<br />
i f ( i d == ” rahmen ” ) r e t u r n new Rahmen ( ) ;<br />
e l s e i f ( i d == ” f e l g e ” ) r e t u r n new F e l g e ( ) ;<br />
throw new Unknown Id ( ) ;<br />
}<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 614 / 634
Antworten auf gesammelte Fragen im Wiki<br />
<strong>Software</strong>technik im Allgemeinen<br />
kleiner Exkurs über agile <strong>Software</strong>entwicklung im Vergleich zum<br />
Wasserfallmodell<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 615 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Extreme Programming (Beck 2000)<br />
Wasserfallmodell — Extreme Programming — Code&Fix<br />
Extreme Programming (XP) ist eine agile Methode für<br />
kleinere bis größere Entwicklerteams (max. 10-15 Personen),<br />
Probleme mit vagen Anforderungen<br />
und <strong>Projekt</strong>e, bei denen ein Kundenrepräsentant stets greifbar ist.<br />
http://www.extremeprogramming.org/<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 616 / 634
Antworten auf gesammelte Fragen im Wiki<br />
Extreme Programming (Beck 2000)<br />
Anerkannte Prinzipien und Praktiken werden ” extrem“ umgesetzt:<br />
Code-Reviews → permanente Reviews durch Pair-Programming<br />
Testen → ständiges Testen: Unit-Tests sowie Akzeptanztests durch<br />
den Kunden/Benutzer<br />
klare Struktur → jeder verbessert sie kontinuierlich durch Refactoring<br />
Einfachheit → stets die einfachste Struktur wählen, die die aktuellen<br />
Anforderungen erfüllt<br />
Integration → permanente Integration auch mehrmals am Tag<br />
Validierung:<br />
Kunde/Benutzer ist stets involviert bei der Planung neuer Iterationen<br />
und verantwortlich für Akzeptanztest<br />
kurze Iterationen → Dauer in Minuten und Stunden, nicht Wochen,<br />
Tage, Jahre<br />
aber auch Auslassung anerkannter Prinzipien:<br />
Dokumentation: mündliche Überlieferung, Tests und Quellcode<br />
Planung: sehr begrenzter Horizont<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 617 / 634<br />
Antworten auf gesammelte Fragen im Wiki<br />
Weitere XP-Charakteristika<br />
Kunde vor Ort<br />
eine Metapher statt einer Architekturbeschreibung<br />
40-Stundenwoche<br />
Code ist kollektives Eigentum<br />
Kodierungsstandards<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 618 / 634
Antworten auf gesammelte Fragen im Wiki<br />
Agile versus weit voraus planende Prozessmodelle (Boehm<br />
und Turner 2003)<br />
Risiken agiler Methode:<br />
Skalierbarkeit, Kritikalität, Einfachheit des Entwurfs,<br />
Personalfluktuation, Personalfähigkeiten<br />
Risiken weit voraus planender Prozessmodelle:<br />
Stabilität der Anforderungen, steter Wandel, Notwendigkeit schneller<br />
Resultate, Personalfähigkeiten<br />
Generelle Risiken:<br />
Unsicherheiten bei der Technologie, unterschiedliche<br />
Interessengruppen, komplexe Systeme<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 619 / 634<br />
Das SWP-Lied<br />
Das SWP-Lied<br />
Ziele und Inhalt<br />
Angestrebte Resultate<br />
Aktivitäten der <strong>Software</strong>-Entwicklung<br />
Ablauf<br />
Zeitplan<br />
Anmeldung<br />
Scheinbedingungen<br />
<strong>Projekt</strong>plan<br />
Vorstellung der Aufgabe<br />
Kontaktdaten<br />
Ressourcen<br />
Lehrbücher<br />
Eigenschaften von <strong>Software</strong><br />
<strong>Software</strong>-Lebenszyklus<br />
<strong>Software</strong>-Evolution<br />
Entstehung der <strong>Software</strong>technik<br />
Merkmale der <strong>Software</strong>technik<br />
Rainer<strong>Projekt</strong> Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 620 / 634
Das SWP-Lied<br />
SWP-Lied<br />
Melodie: Paul McCartney: ” Let it be“; Text: Jochen Quante<br />
Irgendwann im <strong>Informatik</strong>-Studium<br />
kommt was, was ich nicht versteh’:<br />
<strong>Software</strong> Engineering – SWP.<br />
Pflichtenheft, Entwurfsbeschreibung. . .<br />
Sowas braucht man doch wohl nie?!<br />
Wir soll’n all das schreiben – SWP.<br />
SWP, SWP, SWP, SWP.<br />
Koschke sagt: ” Des g’hört so“– SWP.<br />
Wir wollen lieber programmieren,<br />
Java hacken, schnell was dreh’n!<br />
Soviel Dokumente – SWP.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 621 / 634<br />
Das SWP-Lied<br />
SWP-Lied (Forts.)<br />
Und wenn wir endlich starten dürfen,<br />
ist das Wissen ganz passé:<br />
Wie ging noch mal Java? – SWP.<br />
SWP, SWP, SWP, SWP.<br />
Was war noch mal Java? – SWP.<br />
Die Zeit wird knapp, die Nächte kürzer,<br />
manch einer fällt aus – oh je.<br />
Keine Zeit für’s Testen – SWP.<br />
Die <strong>Software</strong> wurde grad’ noch fertig,<br />
war’n wir doch zuviel am See?<br />
Dafür war die Planung – SWP.<br />
SWP, SWP, SWP, SWP.<br />
Dafür also Planung – SWP.<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 622 / 634
Das SWP-Lied<br />
1 Balzert 1998 Balzert, Helmut: Lehrbuch der <strong>Software</strong>-Technik.<br />
Spektrum Akademischer Verlag, 1998. – derzeit nicht mehr verfügbar,<br />
wird neu aufgelegt. – ISBN 978-3827403018<br />
2 Bass u. a. 2003 Bass, Len ; Clements, Paul ; Kazman, Rick:<br />
<strong>Software</strong> Architecture in Practice. 2nd edition. Addison Wesley, 2003<br />
3 Beck 2000 Beck, Kent: Extreme Programming Explained.<br />
Addison-Wesley, 2000 (The XP Series). – ISBN 201-61641-6<br />
4 Berling und Runeson 2003 Berling, T. ; Runeson, P.: Evaluation<br />
of a perspective based review method applied in an industrial setting.<br />
In: IEE Proceedings 150 (2003), Juni, Nr. 3<br />
5 Boehm und Turner 2003 Boehm, B. ; Turner, R.: Using risk to<br />
balance agile and plan-driven methods. In: IEEE Computer 36 (2003),<br />
Juni, Nr. 6, S. 57–66<br />
6 Boehm 2000 Boehm, Barry: Project Termination Doesn’t Equal<br />
Project Failure. In: IEEE Computer (2000), September, S. 94–96<br />
Das SWP-Lied<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 623 / 634<br />
7 Brügge und Dutoit 2004 Brügge, Bernd ; Dutoit, Allen H.:<br />
Objektorientierte <strong>Software</strong>technik. Prentice Hall, 2004<br />
8 Buschermöhle u. a. 2006 Buschermöhle, Ralf ; Eekhoff, Heike ;<br />
Josko, Bernhard: Success – Erfolgs- und Misserfolgsfaktoren bei der<br />
Durchfuhrung von Hard- und <strong>Software</strong>entwicklungsprojekten in<br />
Deutschland. www.offis.de/umfragesuccess. 2006<br />
9 Buschmann u. a. 1996 Buschmann, Frank ; Meunier, Regine ;<br />
Rohnert, Hans ; Sommerlad, Peter ; Stal, Michael:<br />
Pattern-oriented <strong>Software</strong> Architecture: A System of Patterns. Bd. 1.<br />
Wiley, 1996<br />
10 Bush 1945 Bush, Vannevar: As We May Think. In: Atlantic Monthly<br />
(1945), Juli, S. 101 ff<br />
11 Clements u. a. 2002 Clements, Paul ; Bachmann, Felix ; Bass,<br />
Len ; Garlan, David ; Ivers, James ; Little, Reed ; Nord,<br />
Robert ; Stafford, Judith: Documenting <strong>Software</strong> Architecture.<br />
Boston : Addison-Wesley, 2002<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 624 / 634
Das SWP-Lied<br />
12 EN ISO 9241-10:1995 1995 : Ergonomische Anforderungen für<br />
Bürotätigkeiten mit Bildschirmgeräten – Teil 10: Grundsätze der<br />
Dialoggestaltung. Europäische Norm, ISO-Standard. 1995<br />
13 Fjeldstadt und Hamlen 1984 Fjeldstadt ; Hamlen: Application<br />
Program Maintenance Study: Report to Our Respondents. In: Proc.<br />
GUIDE 48, IEEE Computer Society Press, April 1984<br />
14 Frühauf u. a. 2000 Frühauf ; Ludewig ; Sandmayr:<br />
<strong>Software</strong>-Prüfung. 4. Auflage. vdf Zürich, 2000<br />
15 Fusaro u. a. 1997 Fusaro, P. ; Lunibile, F. ; Visaggio, G.: A<br />
replicated experiment to assess requirements inspection techniques. In:<br />
Empirical <strong>Software</strong> Engineering 2 (1997), S. 39–57<br />
16 Gamma u. a. 2003 Gamma, Erich ; Helm, Richard ; Johnson,<br />
Ralph ; Vlissides, John: Desig Patterns—Elements of Reusable<br />
Object-Oriented <strong>Software</strong>. Addison Wesley, 2003<br />
17 Gilb 1988 Gilb, Tom: Principles of <strong>Software</strong> Engineering<br />
Management. Harlow, UK : Addison-Wesley, 1988<br />
Das SWP-Lied<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 625 / 634<br />
18 Harel 1987 Harel, David: State Charts: a Visual Formalism for<br />
Complex Systems. In: Science of Computer Programming 8 (1987),<br />
Nr. 3, S. 231–274<br />
19 Hayes 1997 Hayes, Frank: Managing User Expectations. In:<br />
Computerworld (1997), November<br />
20 Hayes 1999 Hayes, W.: Research synthesis in software engineering: a<br />
case for meta-analysis. In: Proc. 6th Int. Symp. on <strong>Software</strong> Metrics,<br />
IEEE Computer Society Press, November 1999, S. 143–151<br />
21 Hofmeister u. a. 2000 Hofmeister, Christine ; Nord, Robert ;<br />
Soni, Dilip: Applied <strong>Software</strong> Architecture. Addison Wesley, 2000<br />
(Object Technology Series)<br />
22 IEEE P1471 2002 : IEEE Recommended Practice for Architectural<br />
Description of <strong>Software</strong>-intensive Systems—Std. 1471-2000. ISBN<br />
0-7381-2518-0, IEEE, New York, NY, USA. 2002<br />
23 IEEE Standard 830.1998 1998 : IEEE Recommended Practice for<br />
<strong>Software</strong> Requirements Specifications, IEEE Standard 830.1998. 1998<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 626 / 634
Das SWP-Lied<br />
24 IEEE-Std-1058 1987 : ANSI/IEEE Standard for <strong>Software</strong> Project<br />
Management Plans. ANSI/IEEE Std. 1058.1-1987. 1987<br />
25 IEEE Std 610.12-1990 1990 : IEEE Standard Glossary of <strong>Software</strong><br />
Engineering Terminology. IEEE Standard 610.12-1990. 1990<br />
26 IEEE Std. 829-1998 1998 : IEEE Standard for <strong>Software</strong> Test<br />
Documentation. IEEE Standards Board, IEEE Std. 829-1998. 1998<br />
27 IEEE Std. 982-1989 1989 : IEEE Standard Guide for the Use of IEEE<br />
Standard Dictionary of Measures to Produce Reliable <strong>Software</strong>. IEEE<br />
Standards Board, IEEE Std. 982-1989. Juli 1989<br />
28 ISO 9241-11:1998 1998 : Ergonomic requirements for office work with<br />
visual display terminals (VDTs) – Part 11: Guidance on usability.<br />
ISO-Standard. 1998<br />
29 ISO/IEC-Standard 25000 2005 ISO/IEC 25000:2005 <strong>Software</strong><br />
Engineering – <strong>Software</strong> product Quality Requirements and Evaluation<br />
(SQuaRE). 2005. – umgesetzt in DIN 66272<br />
30 ISO/IEC-Standard 9126 2001 ISO/IEC 9126-1:2001 <strong>Software</strong><br />
engineering – Product quality. 2001. – umgesetzt in DIN 66272<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 627 / 634<br />
Das SWP-Lied<br />
31 Kano 1984 Kano, N.: Attractive Quality and Must-be Quality. In:<br />
Journal of the Japanese Society for Quality Control 4 (1984), S. 39–48<br />
32 Kazman u. a. 1996 Kazman, Rick ; Abowd, Gregory ; Bass, Len ;<br />
Clements, Paul: Scenario-Based Analysis of <strong>Software</strong> Architecture. In:<br />
IEEE <strong>Software</strong> (1996), November, S. 47–55<br />
33 Kruchten 1995 Kruchten, Phillipe: The 4+1 View Model of<br />
Architecture. In: IEEE <strong>Software</strong> 12 (1995), November, Nr. 6, S. 42–50<br />
34 Lehman und Belady 1985 Lehman, M. ; Belady, L.: Program<br />
Evolution: Processes of <strong>Software</strong> Change. London : Academic Press,<br />
1985<br />
35 Liskov 1988 Liskov, Barbara: Data Abstraction and Hierarchy. In:<br />
SIGPLAN Notices 23 (1988), Mai, Nr. 5<br />
36 Liskov und Wing 1994 Liskov, Barbara ; Wing, Jeanette M.: A<br />
Behavioral Notion of Subtyping. In: ACM Transactions on Programming<br />
Lnguages and Systems 16 (1994), Nr. 6, S. 1811–1841<br />
37 Ludewig 2003 Ludewig, Jochen: Einführung in die <strong>Software</strong>technik.<br />
Vorlesungs-Skriptum. 2003<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 628 / 634
Das SWP-Lied<br />
38 Ludewig und Lichter 2006 Ludewig, Jochen ; Lichter, Horst:<br />
<strong>Software</strong> Engineering – Grundlagen, Menschen, Prozesse, Techniken.<br />
dpunkt.verlag, 2006<br />
39 Maaß 2001 Maaß, Susanne: Soziotechnische Systeme.<br />
Vorlesungs-Skriptum. 2001<br />
40 McKee 1984 McKee, J.R.: Maintenance as a Function of Design. In:<br />
AFIPS National Computer Conference, Las Vegas (Ch. 27), 1984<br />
41 Miller u. a. 1998 Miller, J. ; Wood, M. ; Roper, M.: Further<br />
experiences with scenarios and checklists. In: Empirical <strong>Software</strong><br />
Engineering 3 (1998), S. 37–64<br />
42 Murphy u. a. 1995 Murphy, Gail C. ; Notkin, David ; Sullivan,<br />
Kevin: <strong>Software</strong> Reflexion Models: Bridging the Gap Between Source<br />
and High-Level Models. In: Proc. of the Third ACM SIGSOFT<br />
Symposium on the Foundations of <strong>Software</strong> Engineering, 1995, S. 18–28<br />
Das SWP-Lied<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 629 / 634<br />
43 Murphy u. a. 2001 Murphy, Gail C. ; Notkin, David ; Sullivan,<br />
Kevin J.: <strong>Software</strong> Reflexion Models: Bridging the Gap between Design<br />
and Implementation. In: IEEE Transactions on <strong>Software</strong> Engineering 27<br />
(2001), April, Nr. 4, S. 364–380<br />
44 Neumann 1999 Neumann, Peter G.: Risks to the Public in<br />
Computers and Related Systems. In: ACM SIGSOFT <strong>Software</strong><br />
Engineering Notes 24 (1999), Nr. 1, S. 31<br />
45 Object Management Group 2003 Object Management Group:<br />
OMG Unified Modeling Language Specification. March 2003. – Version<br />
1.5<br />
46 OMG Object Management Group (OMG): Unified Modeling<br />
Language. http://www.uml.org<br />
47 Parnas 1972 Parnas, David L.: On the Criteria to Be Used in<br />
Decomposing Systems into Modules. In: Communications of the ACM<br />
15 (1972), Dezember, Nr. 12<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 630 / 634
Das SWP-Lied<br />
48 Partsch 1998 Partsch, H.: Requirements-Engineering systematisch -<br />
Modellierung für softwaregestützte Systeme. Berlin, Heidelberg, New<br />
York : Springer-Verlag, 1998<br />
49 Perry und Wolf 1992 Perry, Dewayne E. ; Wolf, Alexander L.:<br />
Foundations for the Study of <strong>Software</strong>. In: ACM SIGSOFT 17 (1992),<br />
Oktober, Nr. 4, S. 40–52<br />
50 Porter und Votta 1998 Porter, A. ; Votta, L.: Comparing<br />
detection methods for software requirements inspection: a replication<br />
using professional subjects. In: Empirical <strong>Software</strong> Engineering 3 (1998),<br />
S. 355–379<br />
51 Porter u. a. 1995 Porter, A. ; Votta, L. ; Basili, V.: Comparing<br />
detection methods for software requirements inspection: a replicated<br />
experiment. In: IEEE Transactions on <strong>Software</strong> Engineering 21 (1995),<br />
Nr. 5, S. 563–575<br />
52 Pressman 2003 Pressman, Roger: <strong>Software</strong> Engineering – A<br />
Practioner’s Approach. Fünfte Ausgabe. McGraw-Hill, 2003<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 631 / 634<br />
Das SWP-Lied<br />
53 Rödiger 2004 Rödiger, Karl-Heinz: Vortrag<br />
Rechtlicher Rahmen der <strong>Software</strong>-Entwicklung in der Vorlesung<br />
<strong>Software</strong>-<strong>Projekt</strong>. Vorlesungs-Skriptum. 2004<br />
54 Sandahl u. a. 1998 Sandahl, K. ; Blomkvist, O. ; Karlsson, J. ;<br />
Krysander, C. ; Lindvall, M. ; Ohlsson, N.: An extended<br />
replication of an experiment for assessing methods for software<br />
requirements inspections. In: Empirical <strong>Software</strong> Engineering 3 (1998),<br />
S. 327–354<br />
55 Sauer und Cuthbertson 2003 Sauer, C. ; Cuthbertson, C.: The<br />
State of IT Project Management in the UK.<br />
http://www.cw360ms.com/pmsurveyresults/surveyresults. 2003<br />
56 Shaw und Garlan 1996 Shaw, Mary ; Garlan, David: <strong>Software</strong><br />
Architecture – Perspectives on an Emerging Discipline. Upper Saddle<br />
River, NJ : Prentice Hall, 1996. – ISBN ISBN 0-13-182957-2<br />
57 Shull u. a. 2000 Shull, Forrest ; Rus, Ioana ; Basili, Victor: How<br />
Perspective-Based Reading Can Improve Requirements Inspections. In:<br />
IEEE Computer 33 (2000), Nr. 7, S. 73–79<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 632 / 634
Das SWP-Lied<br />
58 Sommerville 2004 Sommerville, Ian: <strong>Software</strong> Engineering. Siebte<br />
Ausgabe. Addison-Wesley, 2004<br />
59 Sowa und Zachman 1992 Sowa, J. F. ; Zachman, J. A.: Extending<br />
and formalising the framework for information systems architecture. In:<br />
IBM Systems Journal (1992)<br />
60 Standish Group 1994<br />
61 Standish Group 2004 Standish Group: Third Quarter Research<br />
Report. http://www.standishgroup.com. 2004<br />
62 Stimely 1990 Stimely, Gwen L.: A stepwise approach to developing<br />
software documentation. In: ACM SIGDOC Asterisk Journal of<br />
Computer Documentation 14 (1990), Nr. 4, S. 121–124<br />
63 Störrle 2005 Störrle, Harald: UML 2 für Studenten. Pearson<br />
Studium, 2005. – ISBN 3-8273-7143-0<br />
64 Sun microsystems 1999 Sun microsystems: Code Conventions for<br />
the Java TM Programming Language. April 1999. – URL http:<br />
//java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html<br />
Das SWP-Lied<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 633 / 634<br />
65 Winter 2003 Winter, Andreas: Einführung in die <strong>Software</strong>technik.<br />
Vorlesungs-Skriptum. 2003<br />
66 Zachman 1987 Zachman, J. A.: A framework for information systems<br />
architecture. In: IBM Systems Journal 26 (1987), Nr. 3<br />
67 Zachman 1999 Zachman, J. A.: A framework for information systems<br />
architecture. In: IBM Systems Journal 38 (1999), Nr. 2&3, S. 454—470<br />
68 Zuser u. a. 2004 Zuser, W. ; Grechenig, T. ; Köhle, M.: <strong>Software</strong><br />
Engineering mit UML und dem Unified Process. Zweite Ausgabe.<br />
Pearson Studium, 2004<br />
Rainer Koschke (Uni <strong>Bremen</strong>) <strong>Software</strong>-<strong>Projekt</strong> Wintersemester 2008/09 634 / 634