Teil IX Software Engineering
Überblick 1 Einführung 2 Der Softwareentwicklungsprozess 3 Methoden und Werkzeuge Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 636/666
Die Softwarekrise Allgemeine Feststellung: die Entwicklung komplexer Software-Systeme ist inhärent problematisch Projekte schwer planbar: brauchen oft mehr finanzielle Mittel, Zeit und Personal als ursprünglich beabsichtigt Häufig sehr spezifische und deshalb schwer vorhersehbare Probleme und Risiken Entwickelte Software entspricht oft nicht Anforderungen: allgemein geringe Qualität, fehleranfällig, nicht effizient, keine Akzeptanz durch Nutzer Projekte oft nicht nicht erfolgreich (Abbruch oder Software wird nicht ausgeliefert/eingesetzt) Wartung und Weiterentwicklung oft noch aufwändiger als Entwicklung wurde Ende der 1960er als Softwarekrise bezeichnet beschreibt Zustand bis heute keine allgemeine Lösung nur Handhabung der zunehmenden Komplexität Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 637/666
Software Engineering Definition (Software Engineering) Das Software Engineering ist die systematische Anwendung von Prinzipien, Methoden und Werkzeugen zur Entwicklung, zum Betrieb und zur Wartung von Software. Entspricht Übertragung von Konzepten aus dem Ingenieurwesen Angelehnt an technische Entwicklung gegenständlicher Produkte Berücksichtigung spezifischer Aspekte von Software Prinzip der Best Practices (Erfolgsmethoden): Systematisierung der aus Erfolgen und Mißerfolgen gewonnenen Erfahrungen Zu erreichende Ziele: Software als Produkt erfüllt bestimmte Qualitätskriterien Deren Entwicklung als Prozess erfüllt wirtschaftliche Eike Schallehn, FIN/ITI Kriterien Grundlagen der Informatik für Ingenieure 638/666
Wichtige Qualitätskriterien für Software Korrektheit: Flexibilität: Verständlichkeit: Robustheit: Effizienz: Grad der Erfüllung der Anforderungen an Software durch die umgesetzte Lösung Grad der Einsetzbarkeit der Software unter unterschiedlichen oder sich ändernden Bedingungen Grad der Nachvollziehbarkeit der Funktionsweise für Nutzer (Anwendbarkeit) sowie der inneren Struktur fü Entwickler (Pflege, Wartung und Weiterentwicklung) Grad der Sicherheit vor Funktionsfehlern bei unvorhersehbaren Eingaben oder Abläufen Verhältnis zwischen Aufwand und Nutzen des Einsatzes der Software Können durch Analyse oder Tests in vielen Facetten auch quantifiziert werden (Softwaremetriken) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 639/666
Softwareentwicklungsprozess Strukturierung des Vorgehens bei der Softwareentwicklung zur Verbesserung der Handhabbarkeit Seit Anfang der 1970er zahlreiche Vorgehensmodelle (Prozessmodelle) entwickelt Beschreibender Charakter: abgeleitet aus Erfahrungen erfolgreicher Projekte (Best Practice) Empfehlender Charakter: Leitpfaden für Durchführung eigener Entwicklungsprojekte Kein Modell mit Anspruch auf Allgemeingültigkeit Einsatz erfordert immer kritisches Hinterfragen im Kontext des aktuellen Projektes Grundprinzipien: Unterteilung in Phasen, Arbeitsschritte, Teilaufgaben Festlegung von möglichen zeitlichen Abläufen bzw. geeigneten Organisationsstrukturen Teil des Softwarelebenszyklus, der nach der Entwicklung auch Nutzung und Weiterentwicklung berücksichtigt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 640/666
Konventionelles Phasenmodell Anforderungsanalyse Spezifikation Entwurf Implementierung Test Nutzung und Wartung Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 641/666
Konventionelles Phasenmodell /2 Auch bezeichnet als Wasserfallmodell, da streng sequentieller Prozessfortschritt ohne Rückkopplung Sehr Früher Ansatz, der so in der Praxis kaum zur Anwendung kommt Bedeutung aber vor allem in Aufteilung auf Phasen so oder ähnlich in zahlreichen Vorgehensmodellen zu finden Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 642/666
Phasen der Softwareentwicklung /1 Anforderungsanalyse: Ermitteln und informales Festhalten der Zielstellung der Softwareentwicklung Basiert auf Informationen von Auftraggebern, zukünftigen Anwendern über Anwendungsbreich, existierende Systeme, etc. Abwägen von Anforderungen bzgl. Aufwand zur Umsetzung Verwandte Bezeichnungen: Problemdefinition, Planungsphase Spezifikation: Entwurf: Formale Beschreibung des umzusetzenden System und und Festlegung der Funktionen Konzeptuelle, formale Beschreibung der Umsetzung durch geeignete (noch relativ) implementierungsunabhängige Ausdrucksmittel Systemstrukturen, z.b. Architektur, Klassen, etc. Verhalten, z.b. Funktionen, Abläufe, etc. Entwurf oft in weitere Phasen unterteilt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 643/666
Phasen der Softwareentwicklung /2 Implementierung: Test: Programmierung der lauffähigen Software unter Verwendung einer (oder mehrerer) Programmiersprachen und -werkzeuge Systematische Erprobung und Korrektur bzgl. Robustheit, Flexibilität, Effizienz und weiterer Qualitätseigenschaften Nutzung und Wartung: Einsatz der Software in einem oder vielen konkreten Anwendungsszenarien Von der Auslieferung über die Installation bis zur Weiterentwicklung der Software (Re-Engineering ) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 644/666
Begleitende Aufgaben Bei jeder Softwareentwicklung und in allen Phasen (unabhängig von Vorgehensmodell): Dokumentation: Festhalten und Erklären von erzielten Ergebnissen gewährleistet Nachvollziehbarkeit der Entscheidungen im Entwicklungsprozess Einfache Weiterentwicklung Qualitätsmanagement: Bewertung und Sicherstellung von Qualitätskriterien für den Entwicklungsprozess und das zu entwickelnde Softwareprodukt Projektmanagement: Planung und Zuteilung von für die Softwareentwicklung notwendigen Ressourcen zur Sicherstellung wirtschaftlicher Kriterien Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 645/666
Kritik am konventionellen Phasenmodell Rein sequentieller Phasenverlauf kaum praktikabel Strikte Sequenz berücksichtigt nicht: Häufig Rückschritt zu vorhergehenden Phasen notwendig Beliebige Sprünge (vorwärts/rückwärts) zwischen Phasen oft sinnvoll (z.b. frühe Prototypen als Proof of Concept) Iterative Natur der Softwareentwicklung: Wiederholung von Abfolgen (z.b.... Implementierung Test Änderung des Entwurfs Implementierung Test...) Weiteres Vorgehen nach Abschluss der Entwicklung und Einsatz der Software Softwarelebenszyklus Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 646/666
Spiralmodell Planung: Ziele und Anforderungen Alternativen: Risikoanalyse und Prototypen Bewertung: und nächste Iteration starten Realisierung: Entwurf und Implementierung Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 647/666
Spiralmodell Spiralmodell illustriert iterativen Charakter der Softwareentwicklung Wiederholtes Durchlaufen grundlegender Phasen mit veränderlichen Zielen und Inhalten Zunehmende Konkretisierung der Planung Wachsende Detaillierung der Spezifikation Verfeinerung des Entwurfs Präzisierung von Anforderungen Wachsen des implementierten Funktionsumfangs... Aktuelle Ansätze wie Agile Software Engineering und Extreme Programming greifen dieses Grundkonzept meist auf Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 648/666
V-Modell Analyse Einsatz Spezifikation Auslieferung / Installation Feinenwturf Systemintegration Grobentwurf Implementierung der Systemelemente Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 649/666
V-Modell V-Modell illustriert Rückkopplungen zwecks Verifikation und Validierung angelehnt an einfaches Phasenmodell Entwickelt ursprünglich in Deutschland Empfohlenes Vorgehensmodell für Softwareprojekte der öffentlichen Hand in Deutschland Aktuell sehr umfangreiches Vorgehensmodell mit Berücksichtigung zahlreicher weiterer Aspekte (Re-Engineering, Projektmanagement, etc.) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 650/666
Softwarelebenszyklus Fokus bei vielen einfachen Vorgehensmodellen auf initiale Entwicklung eines Softwareproduktes Wartung umfasst aber Änderung der Software aus verschiedenen Gründen, z.b. Erweiterung des Funktionumfangs Anpassung an neue Anforderungen Beseitigung von Fehlern Portierung auf neue Hardware- oder Betriebssystemplattform Anpassung an neue Infrastrukturen Neue Schnittstellen... Softwareentwicklung in der Regel kontinuierlichen Prozess im gesamten Softwarelebenszyklus Softwarealterung (sinkende Qualität) und -tod (Einstellung von Entwicklung, Ausklingen des Einsatzes) oft erst nach vielen Versionen Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 651/666
Re-Engineering Re-Engineering: Anpassung, Fehlerkorrektur und Erweiterung Version i+1 Version i Initiale Entwicklung Initiale Version des Systems Systemnutzung Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 652/666
Aktuelle Ansätze des Software Engineering Agile Software Development Extreme Programming (XP) Keine Fokussierung auf festen Vorgaben für Abläufe Stattdessen Zuständigkeiten, (Selbt-)Organisation von Individuen in Teams und Kommunikationsstrukturen Ziel: hohes Maß an Adaptivität und Flexibilität im Entwicklungsprozess Bzgl. Abläufen angelehnt an iterative Modelle wie Spiramodell Spezialfall des Agile Software Development Berücksichtigt zahlreiche weitere Ansätze in schlüssigem Gesamtmodell Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 653/666
Methoden und Werkzeuge Methoden: Verfahren, die zur Unterstützung in einer konkreten Phase (Analyse, Spezifikation, Entwurf,...) der Softwareentwicklung angewendet werden können Werkzeuge: sind Softwareprogramme, die Softwareentwickler bei ihrer Arbeit unterstützen und ggf. Enwicklungsmethoden ( ) implementieren. Im folgenden Fokus auf Methoden und Werkzeuge für die Modellierung (vor allem Spezifikation und Entwurf) Methoden und Werkzeuge für die Programmierung (Implementierung und Test) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 654/666
Grundprinzipien von Methoden Dekomposition von Problemen in kleiner Teilprobleme hierarchische Strukturen (Teile und herrsche) Abgrenzung von statischen (Daten, Komponenten,...) und dynamischen Aspekten (Funktionen, Zustände, Nachrichten,...) Unterstützung verschiedener Abstraktionsstufen, z.b. Schnittstelle vs. Implementierung Formale Modelle (für Verifizierbarkeit, Überführung in Code, etc.) vs. semi- oder informale Modelle (für Diskussion und weiter Überführung durch Entwickler) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 655/666
Methoden der Modellierung Verbreitet vor allem Modellierungsmethoden (auch Modellierungssprachen) mit grafischer Notation Zum Teil mit formal definierter Semantik Zwei wesentliche Klassen von Methoden 1 Strukturmodellierung (statische Aspekte) 2 Verhaltensmodellierung (dynamische Aspekte) Im Rahmen der Vorlesung bereits vorgestellte Modellierungsmethoden Struktogramm (Verhalten) Programmablaufplan (Verhalten) Entity Relationship- Modell (Struktur) Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 656/666
Weitere Methoden der Modellierung Beispiele für Methoden zur Strukturmodellierung IDEF1X (abgeleitet von ER-Modell) für Datenbanken EXPRESS und EXPRESS-G (grafische Notation) für Produktdaten (Teil des Standard for the Exchange of Product Data STEP) Beispiele für Methoden zur Verhaltensmodellierung Petri-Netze für Bedingungen und Ereignisse in nebenläufigen Abläufen (formales Modell) Business Process Modeling Notation (BPMN) für Prozesse Jackson Structured Programming (JSP) für strukturierte Programmierung Specification and Description Language (SDL) für Zustände und Kommunikation in verteilten System Unified Modeling Language (UML ) entwickelt sich zu Quasi-Standard für viele Modellierungsaufgaben Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 657/666
Die Unified Modeling Language (UML) Entwickelt seit Mitte der 1990er Vereinigt zahlreiche Ansätze der objektorientierten Modellierung Umfaßt verschiedene Spracheinheiten/Diagrammtypen Struktur Klassendiagramme Komponentendiagramme Verteilungsdiagramme... Verhalten Anwendungsfälle Aktionsdiagramme Sequenzdiagramme Zustandsdiagramme... Heute von den meisten Werkzeugen der Softwareentwicklung unterstützt Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 658/666
UML-Beispiel: Klassendiagramm Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 659/666
UML-Beispiel: Zustandsdiagramm Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 660/666
UML-Beispiel: Sequenzdiagramm Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 661/666
Werkzeuge zur Modellierung Computer Aided Software Engineering (CASE) CASE-Tools Ideal: gesamtheitliche Unterstützung des Entwicklungsprozesses über alle Entwicklungsphasen (Analyse, Spezifikation, Entwurf, Implementierung, Test) Unterstützen zum Teil Übergang zwischen Phasen, z.b. Code-Generierung oder Reverse Engineering (Ableitung von Modellen aus Code) als Grundlage für Re-Engineering Beispiel: Rational Rose (IBM), Together (Borland), Umbrello (Open Source) Integrierte Programmierumgebungen (IDE = Integrated Development Environment) Aktueller Trend: ausgewählte Modellierungsmethoden heute mitunter in Entwicklungsumgebungen für Programmiersprachen integriert Fokus bleibt aber auf Implementierung Unterstützung der Code-Generierung Beispiele: NetBeans IDE (Sun, Open Source), IntelliJ IDEA Eike Schallehn, FIN/ITI (JetBrains) Grundlagen der Informatik für Ingenieure 662/666
CASE-Tool: Umbrello Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 663/666
IDE: NetBeans Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 664/666
Methoden und Werkzeuge zur Implementierung Methoden entsprechen im weiteren Sinne Programmierparadigmen, vor allem Strukturierte Programmierung Prozedurale/funktionale Programmierung Objektorientierte Programmierung... Werkzeuge sind Programmierumgebung (Editor, Compiler bis hin zur IDE) Debugger zur Fehlersuche (meist Teil der IDE) Code- und Versionsmanagement Profiler zum Effizienztest Testumgebungen zur Validierung Im weiteren Sinne Systeme im Umfeld der Entwickler: Workflow Management, Projektmanagement, etc. Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 665/666
Zusammenfassung: Software Engineering Software Engineering: Teil der Informatik, der sich mit der systematischen Entwicklung von Software beschäftigt Notwendig zur Handhabbarkeit von Risiken Prozessmodelle als Richtlinie für Vorgehen bei der Softwareentwicklung Konkrete Prinzipien, Methoden und Werkzeuge für alle Phasen des Prozesses Allheilmittel für Probleme existiert aber nicht: laut aktueller Studie 40% aller Software-Projekte scheitern Weitere 33% dauern zu lange bzw. haben zu hohe Kosten Eike Schallehn, FIN/ITI Grundlagen der Informatik für Ingenieure 666/666