Softwareentwicklungsprozesse 18. Oktober 2012
Überblick Was soll ein Softwareentwicklungsprozess leisten? Überblick über Softwareentwicklungsprozesse Welche gibt es? Warum gibt es mehrere? Diskussion: Die Rolle des Modellierens in der bisherigen Softwareentwicklung Taentzer Modellgetriebene Softwareentwicklung 21
Softwareentwicklungsprozesse Wasserfallmodell Spiralmodell V-Modell Iterativer Entwicklungsprozess Unified Process Agile Softwareentwicklung Extreme Programming SCRUM Anforderungsanalyse Entwurf Implementierung Inbetriebnahme Testen Taentzer Modellgetriebene Softwareentwicklung 22
Unified Process (Anfang) (Vertiefung ) (Konstruktion) (Inbetriebnahme) (Geschäftsprozessmodellierung) (Softwareverteilung) Kern- Arbeitsschritte Unterstützende Arbeitsschritte Quelle: IBM - Rational Taentzer Modellgetriebene Softwareentwicklung 23
Prozessphasen 1. Anfang (inception): grundlegender Umfang des Projekts ist bekannt, endet mit der Zusage des Auftraggebenden 2. Vertiefung (elaboration): Endet mit Grundlegender Systemarchitektur Konstruktionsplan Identifizierten Risiken 3. Konstruktion (construction): iterativ, endet mit Beta-Release 4. Inbetriebnahme (transition): Einführung des Systems beim Anwender Taentzer Modellgetriebene Softwareentwicklung 24
Unified Process ( UP ) Jede Iteration führt zu einem ausführbaren Gesamtsystem. Neue Anforderungen können nach einer Iterationsstufe noch berücksichtigt werden. Die Phasen sind zeitlich geordnet. Die Iterationen beschreiben verschiedene Abschnitte innerhalb einer Phase. Die Disziplinen beschreiben die Aktivitäten im Prozess. Der Prozess ist anwendungsfallgetrieben. Wichtige Anwendungsfälle werden zuerst behandelt. Parallel zur UML von Ivar Jacobson, Grady Booch und James Rumbaugh entwickelt Rational UP als Implementierung (aktuell: Ver. 9) Taentzer Modellgetriebene Softwareentwicklung 25
Agile Softwareentwicklung Eine agile Methodik stellt die beteiligten Menschen in den Mittelpunkt und versucht die Kommunikation und Zusammenarbeit der Beteiligten effektiv und effizient zu gestalten. Menschen und Kooperationen bzw. Interaktionen sind wichtiger als Werkzeuge und starre Prozesse. Funktionsfähige Software ist wichtiger als eine ausführliche Dokumentation. Die stetige Zusammenarbeit mit den Auftraggebern ist wichtiger als bürokratische Vertragsverhandlungen. Offenheit für neue Erkenntnisse und damit die Bereitschaft zu dynamischen Veränderungen sind wichtiger als das strikte Festhalten an einem festgelegten Plan....flexibler und schlanker als der Unified Process Taentzer Modellgetriebene Softwareentwicklung 26
Agile Praktiken iterative Entwicklung (getrieben durch neue oder geänderte Anforderungen) testgetriebene Entwicklung ständige Refaktorisierungen Paarprogrammierung: Softwareartefakte (Code, Modelle, Dokumentationen) werden immer von zwei Entwicklern/innen gleichzeitig entwickelt. Schnelle und häufige Code-Reviews Taentzer Modellgetriebene Softwareentwicklung 27
Extremes Programmieren eine Form der agilen Entwicklung möglichst simples Design schnelle testbare Resultate permanentes Testen Entwicklung von Testfällen schon in frühen Phasen Test-First-Ansatz Testen von kleinen Einheiten, nicht nur Systemtests Refactoring: ständiges Überarbeiten der Implementierung ohne Änderung der Funktionalität Taentzer Modellgetriebene Softwareentwicklung 28
Extremes Programmieren (2) gemeinsame Verantwortung für den Code: Jede(r) kann jedes Dokument jederzeit ändern. häufige Integration von Teilen gemeinsame Kodierungsrichtlinien Z.B. SUN Code Conventions for Java Taentzer Modellgetriebene Softwareentwicklung 29
SCRUM Neue Variante der agilen Softwareentwicklung Iterationen heißen hier Sprints. Ein Sprint ist 1-4 Wochen lang. Das Team organisiert die Sprints selbst. Typisch: Daily Scrum ein maximal 15-minütiges Treffen des Teams Welche Aufgaben wurden fertiggestellt? Welche Aufgaben sind als nächste zu bearbeiten? Welche Probleme gibt es dabei? www.scrum.org Taentzer Modellgetriebene Softwareentwicklung 30
Qualitätsmerkmale für Software Funktionalität: Korrektheit, Angemessenheit, Interoperabilität, Ordnungsmäßigkeit, Sicherheit Zuverlässigkeit: Reife, Fehlertoleranz, Wiederherstellbarkeit Benutzbarkeit: Verständlichkeit, Bedienbarkeit, Erlernbarkeit, Robustheit Effizienz: Wirtschaftlichkeit, Zeitverhalten, Verbrauchsverhalten Wartungsfreundlichkeit: Analysierbarkeit, Änderbarkeit, Stabilität, Testbarkeit Übertragbarkeit: Anpassbarkeit, Installierbarkeit, Konformität, Austauschbarkeit Wie unterstützen die Prozesse die Qualitätssicherung? Taentzer Modellgetriebene Softwareentwicklung 31
SW-Qualität - Konfliktzonen mangelndes Qualitätsbewusstsein Alle beteiligten Personen müssen über das Vorhandensein von möglichen Qualitätskriterien informiert sein. unterschiedl. Interessen der entscheidenden Personen z.b. Anwender: Einfachheit des Systems z.b. Entwickler: Verfolgbarkeit der Entwicklung Zeit- und Kostenrahmen Welche Kriterien sind wirklich wichtig? z.b.: Korrektheit kostet Zeit. z.b. Effizienz behindert die Entwicklung und die Wartung. Taentzer Modellgetriebene Softwareentwicklung 32
Die Rolle des Modellierens in bisherigen SW-Entwicklungsprozessen Modellieren ist nur Zeitverschwendung. Haltung vieler Entwickler, die Extreme Programming favorisieren Modellierung ist nötig, um die Anforderungen des Kunden zu erfüllen. Der Kunde interessiert sich nicht sonderlich für Modelle. Aber: Modelle können den Entwicklern helfen, eine bessere Lösung zu finden. Taentzer Modellgetriebene Softwareentwicklung 33
Die Rolle des Modellierens in bisherigen SW-Entwicklungsprozessen Modellieren hilft, die Software richtig zu entwerfen. Man durchdenkt schon im Voraus die auftretenden Probleme. Modellierungs- und Programmiersprachen sind unterschiedlich, das Problem wird auf zwei verschiedene Weisen beschrieben. Grob gesagt: Das Modell beschreibt, was gemacht wird, während das Programm beschreibt, wie es gemacht werden soll. Designmodelle helfen beim Softwareentwurf. Modellieren hilft, die auftretenden Strukturen richtig zu erfassen. Insbesondere strukturelle Aspekte eines Softwaresystems lassen sich gut durch visuelle Modellierungssprachen erfassen. Taentzer Modellgetriebene Softwareentwicklung 34
Die Rolle des Modellierens in bisherigen SW-Entwicklungsprozessen Es ist ein großer Aufwand, Modelle und Code zueinander kohärent zu halten. Das lohnt sich nicht. Die Kohärenz von Modellen und Code wird in Werkzeugen meist nicht genügend unterstützt. Klassenmodelle sind häufig kohärent zum Code, da das unterliegende Modell dasselbe ist. Modelle werden für die Dokumentation eines Softwaresystems gebraucht. Modelle können nur zur Dokumentation verwendet werden, wenn sie aktuell gehalten werden. Taentzer Modellgetriebene Softwareentwicklung 35
Die Rolle des Modellierens in bisherigen SW-Entwicklungsprozessen Wenn in einem SW-Projekt modelliert wird, kann die Programmierung nach Indien ausgelagert werden. Der Kunde muss das Modell verstanden und so abgenommen haben. Wenn ein System sehr ausführlich und detailliert modelliert wurde, kann die Programmierung ausgelagert werden. (Stichwort: Implementierungsmodelle) Taentzer Modellgetriebene Softwareentwicklung 36
Zusammenfassung kontinuierliche Entwicklung des Softwareentwicklungsmodells vom Wasserfallmodell zu iterativer Entwicklung Trend zu...kürzeren Entwicklungszyklen...systematischeren Entwicklungsschritten...systematischerer Qualitätssicherung Die Rolle des Modellierens ist in verschiedenen SW- Entwicklungsprozessen verschieden wichtig. Probleme in der klassischen Modellierung: adäquate Modellierungssprachen für alle Systemaspekte Semantik der Modelle nicht immer klar Kohärenz von Modellen und Code Taentzer Modellgetriebene Softwareentwicklung 37