Klassische Softwareentwicklung - Software Engineering - Von: Claus Christofzik, Vincent Strelow Inhaltsverzeichnis: 1. WAS IST SOFTWARE- ENGINEERING 1 2. WORAUS BESTEHT SOFTWARE- ENGINEERING 1 3. VORGEHENSMODELLE. 3 4. HERAUSFORDERUNGEN DES SOFTWARE- ENGINEERING. 5 5. KLASSISCHE S.E. VS. EXTREME PROGRAMMING. 5 6. QUELLEN. 5 1. Was ist Software- Engineering? Der Begriff Software- Engineering wurde erstmals 1968 eingeführt und heißt soviel wie Ingenieurmäßiges bauen von Software. Dieser Gedanke der Ingenieurmäßigen Herangehensweise an Softwareentwicklung entstammt aus der Zeit der Softwarekrise, in der die Software-Projekte immer größer und komplexer wurden, aber die richtigen Konzepte fehlten um den gestiegenen Anforderungen gerecht zu werden. Die Folge: Jahrelange Terminverzögerungen, mangelnde Qualität, eine Kostenexplosion für Software und das scheitern von Projekten. Software- Engineering versucht diesen Problemen zu begegnen durch ein möglichst planvolles und strukturiertes herangehen an die Softwareentwicklung. Es Gedanke ist, das es ebenso wie man ein komplexes Gebäude baut auch Software bauen können müsste. Bei einem Gebäude hätte man zuerst einen Grundriss, einen Bauplan und wüsste schon bevor der erste Stein gesetzt wird, wie das Endergebnis aussieht. Analog sollte auch eine Software im Voraus planbar sein! Ziele des Software-Engineering: Herstellung von Software hoher Qualität Hohe Qualität des Herstellungsprozesses (zeitlich und finanziell) Dabei umfasst Software-Enginering: Entwicklung von Software Aber auch: Verbesserung des Softwareprozesses durch Entwicklung von Methoden, Werkzeugen und Theorien 2. Woraus besteht Software- Engineering? Software Engineering besteht grundsätzlich aus den drei gleichbedeutenden Säulen: Management Qualitätssicherung Entwicklung 2.1. Management
Obwohl man bei dem Begriff Software- Engineering oder Softwareentwicklung nicht unbedingt an Managementaufgaben denkt, ist dies ein wichtiger Bereich. Im Gegensatz zum Ansatz des Extreme Programmings (vgl. Vortrag Extreme Programming ) gibt es hier stärkere Hierarchien. Man kann die Managementaufgaben in vier Teilbereiche gliedern: Projektmanagement ist dabei ein Teilbereich in dem es vor allem um die Terminplanung (Meilensteine, Versionen, etc.), die Beschaffung und Verteilung von Ressourcen, die richtige Aufgabenverteilung an Entwickler (Fachwissen richtig einschätzen und nutzen) sowie die Überwachung des gesamten Entwicklungsprozesses geht. Personalmanagement umfasst die Auswahl und die Bewertung von Personal, aber auch das Einschätzen von Fachwissen welches im Projekt benötigt wird. Risikomanagement besteht aus dem voraussehen, vermeiden und überwachen von Risiken. Risiken tauchen in fast jedem Projekt auf, und können Überschreitungen des Zeit oder Budgetplans sein aber z.b. auch das ein wichtiger Mitarbeiter kündigt. 2.2. Qualitätssicherung Qualitätssicherung umfasst sowohl die Sicherstellung der Qualität des Produktes (also der Software) als auch des Prozesses der Softwareentwicklung. Dabei gehört zur Qualitätssicherung: Verifikation Erstellen wir das Produkt richtig? Validierung Erstellen wir das richtige Produkt? Testen (Fehlertest) Stellt das Vorhandensein von Fehlern fest Debuggen Fehlerquelle finden und entfernen Aber auch: die Planung sowie Kontrolle von Testdaten 2.3. Entwicklung Die Entwicklung von Software wird bei Software- Engineering in vier grundlegende Phasen eingeteilt: Software-Analyse & Spezifikation Analyse, ob das Projekt überhaupt durchführbar ist, und eine Spezifikation der Anforderungen an die Software. Die Anforderungen müssen regelmäßig auf Vollständigkeit, Korrektheit und Widerspruchsfreiheit geprüft werden. Dabei muß auch die Zielgruppe für eine Spezifikation im Auge behalten werden, der Kunde möchte wohl eher natürlichsprachlichen Text, der Entwickler formale Schreibweisen. Software-Entwurf & Implementierung Aus der Spezifikation wird erst die Architektur des Systems entworfen, dann werden die Merkmale der Software Spezifiziert, dann schließlich die Schnittstellen, Komponenten und Datenstrukturen entworfen. Erst danach werden die Algorithmen entworfen und implementiert. Software-Validierung Fehler in der Software sollte möglichst früh gefunden werden, da die Fehler sonst teurer werden. Daher wird Software in möglichst kleinen Modulen getestet und dann langsam die Interaktion zwischen den Modulen. Getestet wird ob die Software die Spezifikation erfüllt. Software-Evolution Die Weiterentwicklung von Software wird immer wichtiger und nimmt im Lebenszyklus einer Software meist einen größeren Kostenpunkt ein, als die eigentliche Entwicklung der Software. Sich ändernde Anforderungen werden aufgenommen und Spezifiziert. Diese werden mit der bestehenden Software
verglichen und dann Veränderungen Entworfen. Diese fließen im Standart Fall in die neue Software ein. Dieser Zyklus kann sich beliebig oft wiederholen. 3. Vorgehensmodelle Vorgehensmodelle sind eine vereinfachte Darstellung des Softwareprozesses. Wir werden hier das Wasserfallmodell und das Spiralmodell näher betrachten. Anforderungsdefinition Wasserfallmodell System- und Softwareentwurf Implementierung und Komponententest Integration und Systemtests Betrieb und Wartung Abb.1 Das erste veröffentlichte Modell für die Softwareentwicklung ist das Wasserfallmodell (Abb.1). Die einzelnen Phasen dieses Modells lassen sich wie folgt beschreiben. 1. Analyse und Definition der Anforderungen: Hier werden die Anforderungen an das System zusammen mit den Systembenutzern aufgestellt und daraus wird dann eine detaillierte Systemspezifikation erstellt. Es geht also um die Softwareanalyse und Spezifikation. 2. System- und Softwareentwurf : Die Anforderungen werden in Soft- und Hardwaresysteme aufgeteilt und es wird eine Systemarchitektur festgelegt. S.o. die Anmerkungen zum Softwareentwurf. 3. Implementierung und Komponententest: In dieser Phase des Softwareprozesses wird der Softwareentwurf in Programme und Programmeinheiten implementiert. Außerdem wird jede Einheit getestet um die Übereinstimmung jeder Einheit mit der Spezifikation zu garantieren. 4. Integration und Systemtest: Die einzelnen Programme und Programmeinheiten werden zu einem Gesamtsystem zusammengefügt und dann als ganzes getestet um die Übereinstimmung mit der Spezifikation des Systems sicherzustellen. Danach wird das System an den Kunden ausgeliefert. 5. Betrieb und Wartung: Normalerweise ist dies die längste Phase des Lebenszyklus. Das System wird installiert. Fehler die in den früheren Phasen nicht entdeckt wurden müssen behoben werden. Die Implementierung des Systems kann verbessert werden und auch die anderen Phasen des Softwareprozesses könnten überarbeitet werden, falls neue Anforderungen entdeckt werden.
Die Vorteile dieses Vorgehensmodells sind die gute Zeitplanung für das Management, da jede abgeschlossene Phase als ein erreichter Meilenstein im Projektzeitplan gesehen werden kann und natürlich auch eine gute Struktur der Software. Gleichzeitig ist die starre Aufteilung des Prozesses in verschiedene Phasen auch ein Nachteil. Da der Kunde nur in der ersten Phase die Möglichkeit hat die Software mitzugestalten. Und sicherlich lässt sich diese starre Aufteilung nicht immer wirklich realisieren, weil z.b. erst bei der Softwareentwicklung Fehler in den Anforderungen erkannt werden könnten. Was zur Folge hat das irgendwann die Weiterentwicklung der vorherigen Phase eingestellt wird um die nächste Phase einleiten zu können. D.h. es ist möglich das wir eine Software entwickeln die nicht mit den wirklichen Anforderungen des Kunden übereinstimmt. Bei größeren Systemen wird dieses Modell jedoch meistens angewendet. Spiralförmige Entwicklung Determine objectiv es alternatives and cons traints Plan next phase REVIEW Requirements plan Life-cycle plan Development plan Integration and test p lan analysis analys is analys is Prototype 2 analysis Prototype 1 Concept o f Operation S/W requirements Requirement validation Design V&V Serv ice Acceptance test Ev aluate alternatives identify, resolve risks Prototyp e 3 Operational protoype Simulations, models, bench marks Product design C ode Unit tes t Integration test Detailed design Develop, v erify next-level p roduct Abb.2 Anstelle den Softwareprozess als eine Folge von Aktivitäten und Rückwärtsbezügen von einer Aktivität zur anderen darzustellen, wird der Softwareprozess als eine Spirale(Abb.2) veranschaulicht. Jede Windung der Spirale steht für eine Phase des Prozesses. Die innere Windung beschäftigt sich mit der Machbarkeit, die nächste mit der Definition der Systemanforderungen die folgenden mit dem Systementwurf usw. Jede Windung der Spirale ist in 4 Segmente aufgeteilt: 1. Ziele aufstellen : Hier werden die Ziele für dieser Projektphase aufgestellt. Randbedingungen werden bestimmt und ein Managementplan wird erstellt. Auch die Projektrisiken sind aufzulisten. 2. Risiken einschätzen und verringern: Die erkannten Projektrisiken werden analisiert und man wird versuchen diese zu verringern. Es können auch Prototypen erstellt werden. 3. Entwicklung und Validierung: Hier wird ein Entwicklungsmodell ausgewählt je nach den erkannten Risiken im vorherigen Segment.
4. Planung: Es wird überprüft ob man mit der nächsten Windung beginnen kann. Falls das der Fall ist wird die nächste Phase geplant. Der wichtigste Vorteil dieses Modells ist die ausführliche Betrachtung der Risiken und deren Abwägungen. Außerdem haben wir eine bessere Flexibilität des Modells, da in jeder Phase erneut über das weitere Vorgehen entschieden wird. Der Hauptnachteil ist natürlich der hohe Zeitaufwand. Dieser hohe Zeitaufwand kann durch das Risikomanagement jedoch besser geplant werden und bei Problemen im Prozess können diese besser gehandhabt werden, wodurch der Gesamtzeitaufwand auch geringer als beim Wasserfallmodell ausfallen könnte. 4. Herausforderungen des Software- Engineering Legacy Systeme Alte Systeme die schon seit Jahrzehnten laufen, aber immer noch wichtig sind, müssen gewartet und angepasst werden. Dies ist immer häufiger ein Problem da oft die Dokumentaion fehlt, Fachkenntnisse oder sogar der Programmcode nur in Byte-Code vorliegt. Sicherheitskritische Systeme Systeme bei denen die Fehler Menschenleben gefährden könnten (Flugzeug-Software) stellen hohe Ansprüche an die Entwickler. Zunehmende Vielfalt und Verteiltheit Die vernetzte Systeme von verschiedene Systemen und Programmen die zusammenarbeiten sollen. verkürzten Lieferzeiten Als entscheidender Faktor im Wettbewerb wachsen die Anforderungen an Software,vor allem die Lieferzeiten werden immer kürzer gefordert. 5. Klassische S.E. vs. extreme Programming Stichwort Klassische Software Entwicklung extrem Programming Dokumentation Detaillierte Dokumentation aller Wenig Dokumentation Realisierungsphasen Strukturiertheit Stark strukturiert durch Vorgehensm. geringere Gefahr von Chaos Dynamischer Prozess Individueller und Flexibler Zeitaufwand Hoch in der Planungsphase gleichmäßig, schnelle Ergebnisse Wartung & Weiterentwicklung Gut, durch Dokumentation begünstigt Schwierig, da wenig Dokumentation; stark abhängig vom Entwicklerteam Flexibilität Schlecht, da alle Anforderungen bei Projektbeginn bekannt sein sollen Gut, Änderungswünsche können leicht umgesetzt werden Kommunikationsaufwand gering, gut für große Projekte hoch, schlecht für große Projekte Fazit: Beide Vorgehensweisen haben Vor- und Nachteile. Je nach dem Team und dem Kundenwünschen kann das eine oder andere besser geeignet sein. Bei großen Software Projekten führt jedoch kaum ein Weg an einem klassischen Ansatz vorbei, da XP hier nicht geeignet ist. In der Realität findet man oft auch Mischformen, in denen versucht wird die Vorteile beider Modelle zu verbinden. 6. Quellen: - Ian Sommerville: Software Engineering (6.Auflage). Pearson, 2001 - Folien der Vorlesung "Software-Engineering", von Ralf Möller, Univ. of Applied Sciences, FH-Wedel unter: http://www.fh-wedel.de/~mo/lectures/se-ws-02/vorlesung-1.pdf bis -7.pfd - Referat zum Thema Extreme Programming von Christian Dicke, Westfälische Wilhelms- Universität Münster unter http://danae.uni-muenster.de/~lux/seminar/ss02/dicke.pdf