Folie a: Name Fundamentals of Software Engineering 1 1 Sommersemester 2006 University Duisburg-Essen Abteilung Elektrotechnik und Informationstechnik Inhaltsverzeichnis 1. 1.1 Geschichte der Software Entwicklung 1.3 Systematische Projektplanung 2. Allgemeine Modellbildung 2.1 Funktionale Modelle 2.2 Automatenmodelle 5. Benutzersschnittstellen 6. Softwaretest 7. Software Projektmanagement 3 Strukturierte Analyse 3.1 Datenflussdiagramme 3.2 Detailspezifikation von Prozessen und Daten 3.3. Datenmodellierung 4. Strukturierter Entwurf (SE) 4.1 Aufbau der Modellierungsphasen nach Ward/Mellor 4.2 Modellierung von Transformationen 4.3 Modellierung des Systemverhaltens 4.4 Zusammenfassung der Aufgaben bei der Erstellung des essentiellen Modells 4.5 Implementierungsmodell 4.6 Prozesse und Prozessverwaltung 4.7 Vorgehensweise bei der Erstellung des Implementierungsmodells 4.8 Prozeßverwaltung durch ein Betriebssystem 4.9 Universität Prozeßverwaltung Duisburg-Essen durch Programmiersprachen
1. Software Engineering (Definition) Software-Engineering ist eine Disziplin, die mit ingenieurmäßigen Mitteln und ökonomischem Vorgehen dem Entwickler hilft, qualitative hochwertige Software zu erstellen und zu pflegen, [Wallmüller in Kne93]. 1. Software Engineering (Definition) Prinzipien, Methoden und Techniken zur Entwicklung großer Softwaresysteme: Analysemethoden: Bestimmung der fachlichen Anforderungen an das System Designmethoden Entwicklung einer technischen Systemarchitektur Implementierungstechniken Testverfahren
1.1 Geschichte der Software Entwicklung Die Anfänge (1/2) 60er Jahre: Software wird größtenteils unstrukturiert und ohne Unterteilung in überschaubare Phasen erstellt. fehlende Möglichkeiten zur Leistungskontrolle erst seit Ende der 60er Jahre Ansätze zur Verbesserung der Arbeitsweise 1968 erste Software-Engineering-Konferenz in Garmisch Begriff Software Engineering eingeführt. Erste Definition des Begriffs Software Engineering The establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines [F.L.Bauer] 1.1 Geschichte der Software Entwicklung Die Anfänge (2/2) 70er Jahre Phasenmodelle, Vorgehensmodelle zeitliche und organisatorische Strukturierung des Entwicklungsprozesses eindeutig definierbare Hierarchien und Zuständigkeiten Aufteilung in unabhängig arbeitende Projektgruppen
1.1 Geschichte der Software Entwicklung Das heutige Software Engineering (1/3) [Pagel and Six]: Das typische Softwareprojekt dauert etwa ein bis zwei Jahre Ein großes Softwarepaket besteht aus mindestens 50.000 Zeilen Quellcode Nur zwischen 70 und 80 Prozent aller Projekte werden erfolgreich abgeschlossen Jeder Projekmitarbeiter produziert pro Tag weniger als zehn Zeilen ausführbares Programm (über die gesamte Entwicklungszeit betrachtet) Während der Entwicklung werden in 1.000 Zeilen Quellcode durchschnittlich zwischen 50 und 60 Fehler entdeckt Nach der Auslieferung werden in den 1.000 Zeilen noch bis zu 4 Fehlern gefunden Die meisten von Benutzern gefundenen Fehler gehen auf Fehler in der Analyse und Design Phase zurück 1.1 Geschichte der Software Entwicklung Das heutige Software Engineering (2/3) nur 2% aller Produkte aus Software-Projekten werden ohne größere Probleme eingesetzt. die meisten Problem sind nicht technischer Natur nichts beeinflusst die Kosten eines Softwareprojektes so nachhaltig negativ, wie ein schlechtes, planloses Management und ständig wechselnde Anforderungen. [Boehm 1981] [Ergebnisse einer Studie der US Regierung]
1.1 Geschichte der Software Entwicklung Das heutige Software Engineering (3/3) Grundvoraussetzungen guter Programmierstil, effizienter Einsatz leistungsfähiger Programmiersprachen aufgabenangemessene Entwicklungswerkzeuge Darüber hinaus: Projekt Management präzise Erfassung und Erreichung von Kunden- und Marktanforderungen Effizienzsteigerung in der Softwareentwicklung Sicherstellung eines hohen Qualitätsniveaus Berücksichtigung von Wartbarkeit und existierenden Altsystemen 1.1 Geschichte der Software Entwicklung Die 10-Fehler der heutigen Software Entwicklung 1. Es wird mit der Codierung sofort angefangen 2. Es wird nicht systematisch bzw. unzureichend getestet 3. Eine Festlegung der Anforderungen/Qualitätsmerkmale fehlt 4. Standards und Richtlinien werden nicht beachtet 5. Die Dokumentation fehlt bzw. ist veraltet, unzureichend oder nicht adäquat 6. Ein Vorgehensmodell fehlt, bzw. wird nicht verfolgt 7. Eine Abnahme der Phasenergebnisse erfolgt nicht 8. Schlecht Namensvergabe wie z.b. File-, Klassen-, Methoden- und Variablennamen 9. Die Systemarchitektur ist nicht oder nur sehr umständlich erweiterbar (fehlende Datenkapselung, fehlende Modularität) 10. Die Schulung für die Software-Ersteller und -Anwender wird vernachlässigt oder als nicht notwendig angesehen 11. Die Terminvorgaben sind unrealistisch 12. Begriffe werden nicht definiert 13. Die Auswahl der Werkzeuge/Methoden ist unzureichend vorbereitet
1.1 Geschichte der Software Entwicklung SWE und Fatal Errors Example- 4. Juni 1996: First Start of "Ariane-5 Costs of the Ariane-5-Sotfware until 1996: approx.. 8 billion US-$ Worth the destroyed satellite: approx.. 500 million US-$ During the flight an unnecessary calibration program for the inertia sensors runs. The measured values of the Ariane-5 exceed the values of the Ariane-4-Software. => Fault 1: undetected The (Ada) Exception causes the stop of the control computer, in order to switch to a second redundant system. In the second system the same software error arises and is identically treated. Product, Process, Project Idee Design Prozess Projekt Produkt: Erzeugnis, Ergebnis eines Tätigkeitsvorhabens, Output: Software, Schriftstück (Studie), Dienstleistung. Nutzen für Kunden, Vermarktbarkeit. Projekt: Zielorientiertes Vorhaben zur Herstellung des Produkts Prozess: Vorgehen im Projekt zur Herstellung des Produkts, Planungsund Realisierungsablauf. Test Anforderungsanalyse Spezifikation Implementierung Systemintegration Produkt (vs. Ziel) Wartung Pflege
Projekteinflussparameter Personal Methoden/Tools Kosten (Entwicklungskosten Wartungskosten, etc.) Funktionsumfang Zeit (Dauer für Entwicklung, Nutzung, Wartung, etc.) Qualität (Wartbarkeit Zuverlässigkeit, Effizienz, etc.) Projektorganisation Unternehmen Kostenentwicklung in Rechnersystemen Prozentanteile bei Systementwicklung Hardware Rembold Seite 268 Software 3% Anforderungsanalyse 3% Spezifikation 5% Entwurf 7% Codierung 8% Modultest Softwareentwicklung Softwarewartung Zeit 7% Integrationstest 67% Wartung
Verhältnis zwischen geplanten und tatsächlichen Kosten Zeit (Monate) tatsächlich Kosten (TDM) projektiert SW 1500 SW SW + 53 % 1000 SW + 72% 5 HW + 17 % HW 500 HW + 15% HW Software Qualitätssicherung Software-Qualitätssicherung Tätigkeiten, die dazu dienen, den Nachweis zu erbringen, dass die Qualitätsanforderungen an die Software erfüllt sind. Software-Projektmanagement Wahrnehmung der klassischen Managementaufgaben: Ziele setzen, Planen, Entscheiden, Realisieren Kontrollieren
Sequential Life-Cycle Model (1/3) Vorstudie Anforderungsanalyse Spezifikation der Anforderung Sequentielles Life-Cycle Model [W.Royce 1970] Unterteilung des Entwicklungsprozesses in Phasen sequentielle Abarbeitung der einzelnen Phasen Systementwurf Codierung Zeit Modultest Integration Systemtest Betrieb und Wartung Sequential Life-Cycle Model (2/3) Vorstudie Anforderungsanalyse Spezifikation der Anforderung Systementwurf Codierung Modultest Integration Systemtest Betrieb und Wartung Vorstudie: informale Darstellung einer Idee Anforderungsanalyse: Definition globaler Ziele Spezifikation: Festlegen der Solleigenschaften Systementwurf: Festlegung von Software-Architektur Schnittstellen Datenstrukturen Codierung: Umsetzung in maschinenlesbaren Code Modultest: Überprüfung und Fehlerbeseitigung. Integration: Zusammenfügen des Gesamtsystem. Systemtest: Überprüfung und Fehlerbeseitigung des Gesamtsystems. Betrieb und Wartung: Einsatz beim Kunden Änderungen und Reparaturen Sonderleistungen, z.b. Anwenderschulung
Sequential Life-Cycle Model (3/3) Nachteile: zu scharfe Trennung der Phasen (einzelne Phasen können ineinander verzahnen) keine Validation an den Phasenübergängen Erste Verbesserung: Das Wasserfallmodell nach Boehm Das Wasserfallmodell Verbesserungen: Befolgen führt zu einem detaillierten Ablauf Erstellung und Pflege von Dokumenten betont. Vorstudie Anforderungsanalyse Spezifikation der Anforderung Nachteile: dokumentenorientierte Software- Entwicklung Reviews zu aufwendig Risikofaktoren eines Projekts werden zu wenig beachtet Systementwurf Codierung Modultest Integration Systemtest Betrieb und Wartung Betrieb und Wartung
Das V-Modell Testfälle Anforderungsvalidierunvalidierung Entwurfs- Testvalidierung Systemdurchfürbarkeitskonzept Anforderungsdefinition Testfälle Systemkonzeptvalidierung Betrieb Pilotbetrieb/ Validierung konstruktive Aktivitäten Systemspezifikation/ Produktentwurf Komponentenentwurf Testfälle Testfälle Akzeptanztest/ Systemtest Integrationstest Verifikation prüfende Aktivitäten Modulentwurf/ Code Testfälle Einzeltest V-Modell berücksichtigt: Zeit Fehler werden am einfachsten auf der Abstraktionsstufe gefunden, auf der sie begangen wurden. Das Spiral Modell Bestimme Ziele, Alternativen, Restriktionen kumulierte Kosten Bewerte Alternativen, identifiziere und beseitige Risiken Risikoanalyse Risikoanalyse Fortschritt Zustimmung durch Reviews Plane die nächste Phase Feinentwurf Anforderungsplan, Lebenszyklusplan Entwicklungsplan Integration und Testplan Verbesserungsplan Risikoanalyse Risikoanalyse P1 Prototyp 2 Entwurfsprüfung Konzept Soft- für den ware- Betrieb Anforddefinition Anforderungsprüfung Abnahmetest und Integration und Test Prototyp 3 Software Produktentwurf Betriebsfähiger Prototyp Modultest Modul codieren Entwickle, prüfe die nächste Produkstufe
Entwurfsverfahren im Überblick (1/2) Strukturierte-Entwurfsverfahren erleichtern den Umgang mit dem System Top-Down-Verfahren (Hierarchisierung und Modularisierung) Datenflußdiagramme Zustandsübergangsdiagramme Modul-, Prozessor- und Taskmodelle erstellt Bekannte Vertreter: DeMarco [DeM79], Yourdon und Constantine [YoC79] Gane und Sarson [GaS79] Objektorientierte Entwurfsverfahren Schwerpunkt beim Entwurf der zu verarbeitenden Daten Hauptziel: Identifizierung und Modellierung von Objekten und Klassen. In der Analysephase objektorientierter Systeme können auch strukturierte Methoden eingesetzt werden. Entwurfsverfahren im Überblick (2/2) Design methods DeMarco Ward & Mellor Object Oriented Petri nets JSD / JSP ERM Used basis methods and charts Top-Down-design Bottom-Up-design Data flow chart Jackson chart entity & relations () Object oriented charts Data-Dictionary Decision table Pseudocode Finite state machines / finite automation Direction of orientation Function oriented Data oriented () Objekt oriented. () State oriented ()
1.3 Systematische Projektplanung 1.3 Systematische Projektplanung Projektplanung warum? Effekte von Fehlern im Herstellungsprozess
1.3 Systematische Projektplanung Fehler und Kosten Fehler in SW Ursprung Kosten Anforderung 56% 82% Entwurf 27% 13% Implementation 7% 1%