13.04.2013 Aufrufe

Software-Projekt ¨Uberblick I - Informatik - Universität Bremen

Software-Projekt ¨Uberblick I - Informatik - Universität Bremen

Software-Projekt ¨Uberblick I - Informatik - Universität Bremen

MEHR ANZEIGEN
WENIGER ANZEIGEN

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 Ist­Stunden<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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!